From 81727e1e712093b3121278659cd183705f487183 Mon Sep 17 00:00:00 2001 From: oc Date: Sun, 31 Dec 2017 16:25:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=98=E5=89=8D=E5=89=A7=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/event.md | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ libs/core.js | 18 +++++++++++++++++- 2 files changed, 65 insertions(+), 1 deletion(-) diff --git a/docs/event.md b/docs/event.md index 2f283b69..08d0fe91 100644 --- a/docs/event.md +++ b/docs/event.md @@ -965,6 +965,54 @@ events.prototype.addPoint = function (enemy) { 当且仅当勇士第一次到达某层时,将会触发此事件。可以利用此事件来显示一些剧情,或再让它调用 `{"type": "trigger"}` 来继续调用其他的事件。 +## 战前剧情 + +有时候光战后事件`afterBattle`是不够的,我们可能还需要战前剧情,例如Boss战之前和Boss进行一段对话。 + +要使用战前剧情,首先你需要覆盖该店的系统默认事件,改成你自己的自定义事件,然后在战前剧情后调用`{"type": "battle"}`强制战斗。 + +``` js +"x,y": { // (x,y)为该怪物坐标 + "trigger": "action", // 覆盖该点本身默认事件,变成自定义事件 + "data": [ // 该点的自定义事件列表 + // ... 战前剧情 + {"type": "battle", "id": "xxx"}, // 强制战斗 + // ... 战后剧情;请注意上面的强制战斗不会使怪物消失,如有需要请调动{"type": "hide"} + ] +} +``` + +这种方式可以实现战前剧情。 + +**值得注意的是,如果一个怪物本身的系统默认事件被覆盖,则地图上也不会有显伤!** + +要想让被自定义事件覆盖的怪物也有显伤显示,则需要在`core.js`的`updateFg`函数中进行一些的修改: + +``` js +// ... 上略 + +// 非系统默认的战斗事件(被覆盖):无显伤 +if (mapBlocks[b].event.trigger != 'battle') { + + var shouldDisplayDamage = false; + + // 部分特殊的点(例如战前剧情)需要显伤的可类似在这里手动添加 + /* + if (core.status.floorId='???' && x=? && y=?) + shouldDisplayDamage = true; + */ + + if (!shouldDisplayDamage) + continue; +} + +// ... 下略 +``` + +即手动指定一下哪些层的哪些点上被覆盖的怪物也需要显伤。 + +!> 如果想让所有怪物都有显伤,也可以简单直接删除或注释这一段。 + ## 经验升级(进阶/境界塔) 本塔也支持经验升级,即用户杀怪获得经验后,可以到达某些数值自动进阶,全面提升属性。 diff --git a/libs/core.js b/libs/core.js index a8419715..1e3956fa 100644 --- a/libs/core.js +++ b/libs/core.js @@ -2876,8 +2876,24 @@ core.prototype.updateFg = function () { core.canvas.fg.textAlign = 'left'; for (var b = 0; b < mapBlocks.length; b++) { var x = mapBlocks[b].x, y = mapBlocks[b].y; - if (core.isset(mapBlocks[b].event) && mapBlocks[b].event.cls == 'enemys' && mapBlocks[b].event.trigger == 'battle' + if (core.isset(mapBlocks[b].event) && mapBlocks[b].event.cls == 'enemys' && !(core.isset(mapBlocks[b].enable) && !mapBlocks[b].enable)) { + + // 非系统默认的战斗事件(被覆盖):无显伤 + if (mapBlocks[b].event.trigger != 'battle') { + + var shouldDisplayDamage = false; + + // 部分特殊的点(例如战前剧情)需要显伤的可类似在这里手动添加 + /* + if (core.status.floorId='???' && x=? && y=?) + shouldDisplayDamage = true; + */ + + if (!shouldDisplayDamage) + continue; + } + var id = mapBlocks[b].event.id; var damage = core.enemys.getDamage(id);