From 7436c54c67a7019c533395afcb94f1f8a4271bd5 Mon Sep 17 00:00:00 2001 From: oc Date: Mon, 4 Feb 2019 00:24:49 +0800 Subject: [PATCH] openDoor event needKey --- _server/blockly/MotaAction.g4 | 9 +++++---- docs/event.md | 5 +++++ libs/events.js | 3 ++- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/_server/blockly/MotaAction.g4 b/_server/blockly/MotaAction.g4 index 355fe318..b3ec9d71 100644 --- a/_server/blockly/MotaAction.g4 +++ b/_server/blockly/MotaAction.g4 @@ -905,20 +905,21 @@ return code; */; openDoor_s - : '开门' 'x' PosString? ',' 'y' PosString? '楼层' IdString? Newline + : '开门' 'x' PosString? ',' 'y' PosString? '楼层' IdString? '需要钥匙' Bool? Newline /* openDoor_s tooltip : openDoor: 开门,楼层可不填表示当前层 helpUrl : https://h5mota.com/games/template/docs/#/event?id=opendoor%EF%BC%9A%E5%BC%80%E9%97%A8 -default : ["","",""] +default : ["","","",false] colour : this.dataColor IdString_0 = IdString_0 && (', "floorId": "'+IdString_0+'"'); var floorstr = ''; if (PosString_0 && PosString_1) { floorstr = ', "loc": ['+PosString_0+','+PosString_1+']'; } -var code = '{"type": "openDoor"'+floorstr+IdString_0+'},\n'; +Bool_0 = Bool_0 ? ', "needKey": true' : ''; +var code = '{"type": "openDoor"'+floorstr+IdString_0+Bool_0+'},\n'; return code; */; @@ -2283,7 +2284,7 @@ ActionParser.prototype.parseAction = function() { case "openDoor": // 开一个门, 包括暗墙 data.loc=data.loc||['',''] this.next = MotaActionBlocks['openDoor_s'].xmlText([ - data.loc[0],data.loc[1],data.floorId||'',this.next]); + data.loc[0],data.loc[1],data.floorId||'',data.needKey||false,this.next]); break; case "useItem": // 使用道具 this.next = MotaActionBlocks['useItem_s'].xmlText([ diff --git a/docs/event.md b/docs/event.md index c6b0825c..6c477b89 100644 --- a/docs/event.md +++ b/docs/event.md @@ -842,6 +842,7 @@ name是可选的,代表目标行走图的文件名。 "x,y": [ // 实际执行的事件列表 {"type": "openDoor", "loc": [3,6], "floorId": "MT1"}, // 打开MT1层的[3,6]位置的门 {"type": "openDoor", "loc": [3,6]}, // 如果是本层则可省略floorId + {"type": "openDoor", "loc": [3,6], "needKey": true} // 打开此门需要钥匙 ] ``` @@ -851,6 +852,10 @@ loc指定门的坐标,floorId指定门所在的楼层ID。如果是当前层 如果loc所在的点既不是门也不是墙壁,则忽略本事件。 +needKey是可选的,如果设置为true则需要钥匙才能打开此门。如果没有钥匙则跳过此事件。 + +!> needKey仅对当前楼层开门有效!跨楼层的门仍然不需要钥匙即可打开,如有需求请自行判定。 + ### changeFloor:楼层切换 在事件中也可以对楼层进行切换。一个比较典型的例子就是TSW中,勇士在三楼的陷阱被扔到了二楼,就是一个楼层切换事件。 diff --git a/libs/events.js b/libs/events.js index 534f5ecf..d36981bc 100644 --- a/libs/events.js +++ b/libs/events.js @@ -853,7 +853,7 @@ events.prototype.doAction = function() { } var floorId=data.floorId || core.status.floorId; if (floorId==core.status.floorId) - core.openDoor(null, x, y, false, function() { + core.openDoor(null, x, y, data.needKey, function() { core.lockControl(); core.events.doAction(); }) @@ -1459,6 +1459,7 @@ events.prototype.openDoor = function (id, x, y, needKey, callback) { core.drawTip("你没有" + ((core.material.items[key]||{}).name||"钥匙")); else core.drawTip("无法开启此门"); core.clearContinueAutomaticRoute(); + if (core.isset(callback)) callback(); return; } core.autosave(true);