From 7e8db1edad9b4c2697f9be7cced12e3f1cb1fd8a Mon Sep 17 00:00:00 2001 From: oc Date: Mon, 4 Feb 2019 00:14:51 +0800 Subject: [PATCH] type:trigger system event --- docs/event.md | 2 ++ libs/events.js | 51 +++++++++++++++++++++++++++++++++++++++++++++----- 更新说明.txt | 13 ++++++++----- 3 files changed, 56 insertions(+), 10 deletions(-) diff --git a/docs/event.md b/docs/event.md index 62e58bc7..c6b0825c 100644 --- a/docs/event.md +++ b/docs/event.md @@ -573,6 +573,8 @@ NPC对话事件结束后如果需要NPC消失也需要调用 `{"type": "hide"}` 例如上面这个例子,下面的文字将不会再被显示,而是直接跳转到`"3,6"`对应的事件列表从头执行。 +!> 从V2.5.4开始,允许执行另一个点的“系统事件”,如打怪、开门、拾取道具等等。对应点的战后事件等也会被执行。 + ### insert:插入公共事件或另一个地点的事件并执行 `{"type":"insert"}` 会插入公共事件或另一个地点的事件并执行。 diff --git a/libs/events.js b/libs/events.js index 3cd877cc..534f5ecf 100644 --- a/libs/events.js +++ b/libs/events.js @@ -899,13 +899,53 @@ events.prototype.doAction = function() { var block=core.getBlock(toX, toY); if (block!=null) { block = block.block; - if (core.isset(block.event) && block.event.trigger=='action') { - // 触发 - core.status.event.data.list = [ - {"todo": core.clone(block.event.data), "total": core.clone(block.event.data), "condition": "false"} - ]; + if (core.isset(block.event)) { core.status.event.data.x=block.x; core.status.event.data.y=block.y; + core.status.event.data.list = [ + {"todo": [], "total": [], "condition": "false"} + ]; + switch (block.event.trigger) { + case "action": + core.status.event.data.list = [ + {"todo": core.clone(block.event.data), "total": core.clone(block.event.data), "condition": "false"} + ]; + break; + case "battle": + core.events.battle(block.event.id, block.x, block.y, true, function () { + core.doAction(); + }); + return; + case "openDoor": + core.openDoor(block.event.id, block.x, block.y, true, function () { + core.lockControl(); + core.doAction(); + }); + return; + case "changeFloor": + { + var heroLoc = {}; + if (core.isset(block.event.data.loc)) + heroLoc = {'x': block.event.data.loc[0], 'y': block.event.data.loc[1]}; + if (core.isset(block.event.data.direction)) + heroLoc.direction = block.event.data.direction; + core.changeFloor(block.event.data.floorId, block.event.data.stair, + heroLoc, block.event.data.time, function () { + core.lockControl(); + core.doAction(); + }); + } + return; + case "getItem": + core.getItem(block.event.id, 1, block.x, block.y); + break; + case "passNet": + this.passNet(block); + break; + case "changeLight": + this.changeLight(block.x, block.y); + break; + } } } this.doAction(); @@ -1469,6 +1509,7 @@ events.prototype.battle = function (id, x, y, force, callback) { if (!core.enemys.canBattle(id, x, y) && !force && !core.isset(core.status.event.id)) { core.drawTip("你打不过此怪物!"); core.clearContinueAutomaticRoute(); + if (core.isset(callback)) callback(); return; } diff --git a/更新说明.txt b/更新说明.txt index 5a9ce8ca..c3fe3626 100644 --- a/更新说明.txt +++ b/更新说明.txt @@ -4,13 +4,16 @@ 支持多重装备(一个装备可以装到多个孔上) 工具栏按钮增添至8个,快捷商店和虚拟键盘同时显示 点击状态栏的金币图标也可以打开快捷商店 -事件:使用道具,暂停背景音乐 +等待事件提供flag:px和flag:py在0~415之间 +事件:呼出存读档界面;呼出怪物手册 +事件:使用道具,暂停背景音乐,暂停所有音效 +type:trigger可以触发系统事件 +独立开关 +贴图也可以支持帧动画了 图块内置颜色选择器 标题界面增加音乐按钮 -拓展键盘默认隐藏,菜单栏中开启 -自动存档优化,大幅提升打怪开门等操作的性能 -使用新版drawLight插件,效率大幅提升 -部分Bug修复,大量细节优化 +等待事件可被Ctrl(长按)跳过 +部分Bug修复,大量细节优化,性能进一步得到提升 -----------------------------------------------------------------------