diff --git a/_server/blockly/MotaAction.g4 b/_server/blockly/MotaAction.g4
index 48e10939..48e52cfa 100644
--- a/_server/blockly/MotaAction.g4
+++ b/_server/blockly/MotaAction.g4
@@ -1666,12 +1666,12 @@ MotaActionFunctions.parse = function(obj,type) {
}
MotaActionFunctions.EvalString_pre = function(EvalString){
- if (EvalString.indexOf('__door_name__')!==-1) throw new Error('请修改__door_name__,建议如开MT1层的[3,3]点的门, 则使用flag:MT1_3_3作为开门变量');
+ if (EvalString.indexOf('__door__')!==-1) throw new Error('请修改开门变量__door__,如door1,door2,door3等依次向后。请勿存在两个门使用相同的开门变量。');
return EvalString.replace(/([^\\])"/g,'$1\\"').replace(/^"/g,'\\"').replace(/""/g,'"\\"');
}
MotaActionFunctions.IdString_pre = function(IdString){
- if (IdString.indexOf('__door_name__')!==-1) throw new Error('请修改__door_name__,建议如开MT1层的[3,3]点的门, 则使用flag:MT1_3_3作为开门变量');
+ if (IdString.indexOf('__door__')!==-1) throw new Error('请修改开门变量__door__,如door1,door2,door3等依次向后。请勿存在两个门使用相同的开门变量。');
if (IdString && !(/^[0-9a-zA-Z_][0-9a-zA-Z_\-:]*$/.test(IdString)))throw new Error('id: '+IdString+'中包含了0-9 a-z A-Z _ - :之外的字符');
return IdString;
}
diff --git a/_server/editor_blockly.js b/_server/editor_blockly.js
index c973de71..d1822025 100644
--- a/_server/editor_blockly.js
+++ b/_server/editor_blockly.js
@@ -183,8 +183,8 @@ editor_blockly = function () {
],'afterBattle'),
'',
MotaActionFunctions.actionParser.parse([
- {"type": "setValue", "name": "flag:__door_name__", "value": "flag:__door_name__+1"},
- {"type": "if", "condition": "flag:__door_name__==2",
+ {"type": "setValue", "name": "flag:__door__", "value": "flag:__door__+1"},
+ {"type": "if", "condition": "flag:__door__==2",
"true": [
{"type": "openDoor", "loc": [10,5]}
],
@@ -193,23 +193,7 @@ editor_blockly = function () {
],'afterBattle'),
'',
MotaActionFunctions.actionParser.parse([
- {"type": "setValue", "name": "flag:y", "value": "core.status.event.data.y-2"},
- {"type": "setValue", "name": "flag:x", "value": "core.status.event.data.x-1"},
- {"type": "hide", "loc": ["flag:x", "flag:y"]},
- {"type": "setValue", "name": "flag:x", "value": "core.status.event.data.x"},
- {"type": "hide", "loc": ["flag:x", "flag:y"]},
- {"type": "setValue", "name": "flag:x", "value": "core.status.event.data.x+1"},
- {"type": "hide", "loc": ["flag:x", "flag:y"]},
- {"type": "setValue", "name": "flag:y", "value": "core.status.event.data.y-1"},
- {"type": "hide", "loc": ["flag:x", "flag:y"]},
- {"type": "setValue", "name": "flag:x", "value": "core.status.event.data.x"},
- {"type": "hide", "loc": ["flag:x", "flag:y"]},
- {"type": "setValue", "name": "flag:x", "value": "core.status.event.data.x-1"},
- {"type": "hide", "loc": ["flag:x", "flag:y"]},
- {"type": "setValue", "name": "flag:y", "value": "core.status.event.data.y"},
- {"type": "hide", "loc": ["flag:x", "flag:y"]},
- {"type": "setValue", "name": "flag:x", "value": "core.status.event.data.x+1"},
- {"type": "hide", "loc": ["flag:x", "flag:y"]},
+ {"type": "function", "function": "function(){var x=core.status.event.data.x,y=core.status.event.data.y;if(core.isset(x)&&core.isset(y)){core.insertAction([{type:'hide',loc:[[x-1,y-2],[x,y-2],[x+1,y-2],[x-1,y-1],[x,y-1],[x+1,y-1],[x-1,y],[x+1,y]]}]);}}"},
],'afterBattle'),
'',
MotaActionFunctions.actionParser.parse({
diff --git a/docs/element.md b/docs/element.md
index f17aa927..bc08e3e0 100644
--- a/docs/element.md
+++ b/docs/element.md
@@ -43,7 +43,7 @@
// 在该点的事件events中:
"x,y": [
- {"type": "openDoor", "loc": [x,y]} // 直接使用开门事件即可。
+ {"type": "openDoor", "loc": [x,y]} // 直接使用开门事件,坐标需写当前点坐标。
]
```
diff --git a/docs/event.md b/docs/event.md
index b1559bcc..6fdf9468 100644
--- a/docs/event.md
+++ b/docs/event.md
@@ -1437,6 +1437,8 @@ core.insertAction([
},
```
+!> 多个机关门请分别设置开门变量如door1, door2等等。请勿存在两个机关门用相同的变量!
+
同样,为了实现类似于RMXP中,到达某一层后自动触发某段事件的效果,样板中还存在`firstArrive`事件。
当且仅当勇士第一次到达某层时,将会触发此事件。可以利用此事件来显示一些剧情,或再让它调用 `{"type": "trigger"}` 来继续调用其他的事件。
@@ -1527,9 +1529,9 @@ core.insertAction([
}
// 在封印时,可以调用setValue将该flag置为真,然后调用自定义脚本 core.afterLoadData() 即可。
-"x,y": [ // 封印
- {"type": "setValue", "name": "flag:fengyin", "value": "true"},
- {"type": "function", "function": function() {
+"x,y": [
+ {"type": "setValue", "name": "flag:fengyin", "value": "true"}, // 封印
+ {"type": "function", "function": function() { // 手动调用自定义JS脚本 core.afterLoadData()
core.afterLoadData();
}}
]
diff --git a/libs/events.js b/libs/events.js
index 0835161a..bd01339e 100644
--- a/libs/events.js
+++ b/libs/events.js
@@ -871,7 +871,13 @@ events.prototype.openDoor = function (id, x, y, needKey, callback) {
core.stopAutomaticRoute();
var speed=30;
- if (needKey) {
+ var doorId = id;
+ if (!(doorId.substring(doorId.length-4)=="Door")) {
+ doorId=doorId+"Door";
+ speed=70;
+ }
+ var key = id.replace("Door", "Key");
+ if (needKey && (key=="specialKey" || core.isset(core.material.items[key]))) {
var key = id.replace("Door", "Key");
if (!core.hasItem(key)) {
if (key != "specialKey")
@@ -887,11 +893,6 @@ events.prototype.openDoor = function (id, x, y, needKey, callback) {
// open
core.playSound("door.mp3");
var state = 0;
- var doorId = id;
- if (!(doorId.substring(doorId.length-4)=="Door")) {
- doorId=doorId+"Door";
- speed=100;
- }
var door = core.material.icons.animates[doorId];
core.status.replay.animate=true;
core.removeGlobalAnimate(x,y);
@@ -907,7 +908,7 @@ events.prototype.openDoor = function (id, x, y, needKey, callback) {
}
core.canvas.event.clearRect(32 * x, 32 * y, 32, 32);
core.canvas.event.drawImage(core.material.images.animates, 32 * state, 32 * door, 32, 32, 32 * x, 32 * y, 32, 32);
- }, speed)
+ }, speed / core.status.replay.speed)
}
////// 战斗 //////