diff --git a/API列表.txt b/API列表.txt index 167b2ad0..6271e411 100644 --- a/API列表.txt +++ b/API列表.txt @@ -776,10 +776,6 @@ hero可为null或一个对象,具体将使用core.getRealStatusOrDefault(hero, 从V2.5.5开始,该函数也允许直接返回一个数字,代表战斗伤害值,此时回合数将视为0。 -core.updateEnemys() -更新怪物数据。该函数实际被转发到了脚本编辑中。详见文档-事件-更新怪物数据。 - - core.getCurrentEnemys(floorId) 获得某个楼层不重复的怪物信息,floorId不填默认为当前楼层。该函数会被怪物手册所调用。 该函数将返回一个列表,每一项都是一个不同的怪物,按照伤害值从小到大排序。 diff --git a/_docs/api.md b/_docs/api.md index 63eaa3d4..735ddd86 100644 --- a/_docs/api.md +++ b/_docs/api.md @@ -781,10 +781,6 @@ hero可为null或一个对象,具体将使用core.getRealStatusOrDefault(hero, 从V2.5.5开始,该函数也允许直接返回一个数字,代表战斗伤害值,此时回合数将视为0。 -core.updateEnemys() -更新怪物数据。该函数实际被转发到了脚本编辑中。详见文档-事件-更新怪物数据。 - - core.getCurrentEnemys(floorId) 获得某个楼层不重复的怪物信息,floorId不填默认为当前楼层。该函数会被怪物手册所调用。 该函数将返回一个列表,每一项都是一个不同的怪物,按照伤害值从小到大排序。 @@ -1049,6 +1045,11 @@ core.doEffect(effect, need, times) 执行一个effect操作。该函数目前仅被全局商店的status:xxx+=yyy所调用。 +core.setEnemy(id, name, value, prefix) +设置一个怪物属性。id为怪物的ID,name为要设置的项,比如hp,atk,def等等。 +value可以是一个表达式,将调用core.calValue()计算。prefix为前缀,独立开关使用,脚本中一般忽略。 + + core.setFloorInfo(name, values, floorId, prefix) 设置某层楼的楼层属性,其中name为该楼层属性对应的条目,values为要设置的值,floorId为楼层id,prefix一般直接忽略。 譬如core.setFloorInfo("name","4", "MT1")则为设置MT1显示在状态栏中的层数为4 diff --git a/_docs/event.md b/_docs/event.md index 461b2c9c..20a47522 100644 --- a/_docs/event.md +++ b/_docs/event.md @@ -499,6 +499,27 @@ value是一个表达式,将通过这个表达式计算出的结果赋值给nam ![](img/events/14.jpg) + +### setEnemy:设置怪物属性 + +使用`{"type":"setEnemy"}`可以设置某个怪物的某个属性 + +``` js +[ + {"type": "setEnemy", "id": "greenSlime", "name": "hp", "value": "1000"}, // 设置绿色史莱姆生命1000 + {"type": "setEnemy", "id": "redSlime", "name": "special", "value": "[1,2]"}, // 设置红色史莱姆先攻魔攻 + {"type": "setEnemy", "id": "redSlime", "name": "name", "value": "'小史莱姆'"}, // 设置怪物名称 +] +``` + +![](img/events/15.png) + +id为必填项,代表要修改的怪物ID。 + +name为必填项,代表要修改的项,例如`hp`, `atk`, `def`, `money`, `experience`, `point`, `special`, `name`。 + +value为必填项,代表要修改到的内容。对于修改名称的,必须加单引号。 + ### setFloor:设置楼层属性 使用`{"type":"setFloor"}`可以设置某层楼的楼层属性。 @@ -898,12 +919,6 @@ name是可选的,代表目标行走图的文件名。 使用`{"type": "showHero"}`会重新显示勇士。 -### updateEnemys:更新怪物数据 - -使用 `{"type": "updateEnemys"}` 可以动态修改怪物数据。 - -详见[怪物数据的动态修改](#怪物数据的动态修改)。 - ### sleep:等待多少毫秒 等价于RMXP中的"等待x帧",不过是以毫秒来计算。 @@ -2646,43 +2661,6 @@ if (core.flags.enableAddPoint && point > 0) { } ``` -## 怪物数据的动态修改 - -有时候我们可能还需要在游戏过程中动态修改怪物数据,例如50层魔塔的封印魔王,或者根据难度分歧来调整最终Boss的属性数据。 - -而在我们的存档中,是不会对怪物数据进行存储的,只会存各个变量和Flag,因此我们需要在读档后根据变量或Flag来调整怪物数据。 - -我们可以在脚本编辑中的`updateEnemys`进行处理。 - -``` js -"updateEnemys" : function () { - // 更新怪物数据,可以在这里对怪物属性和数据进行动态更新,详见文档——事件——怪物数据的动态修改 - // 比如下面这个例子,如果flag:xxx为真,则将绿头怪的攻击设为100,红头怪的金币设为20 - // 推荐写变化后的具体数值,以免多次变化导致冲突 - /* - // 如果flag:xxx为真;你也可以写其他判断语句比如core.hasItem(...)等等 - if (core.hasFlag('xxx')) { - core.material.enemys.greenSlime.atk = 100; - core.material.enemys.redSlime.money = 20; - } - */ - // 别忘了在事件中调用“更新怪物数据”事件! -} -``` - -当我们获得一个道具(或者触发某个事件等)后,需要在事件中调用“更新怪物数据”事件。 - -``` js -// 调用`updateEnemys`(更新怪物数据)事件就可以触发了 -[ - "将flag:xxx置为真,就可以让怪物数据发生改变!", - {"type": "setValue", "name": "flag:xxx", "value": "true"}, // 将flag:xxx置为真 - {"type": "updateEnemys"} // 更新怪物数据;此时绿头怪攻击就会变成100了 -] -``` - -事实上,除了动态修改怪物属性外,也可以在这里动态修改道具的类型、使用效果等等。都是一样的。 - ## 战前剧情 有时候光战后事件`afterBattle`是不够的,我们可能还需要战前剧情,例如Boss战之前和Boss进行一段对话。 diff --git a/_docs/img/events/15.png b/_docs/img/events/15.png new file mode 100644 index 00000000..b1fe91cc Binary files /dev/null and b/_docs/img/events/15.png differ diff --git a/_server/MotaAction.g4 b/_server/MotaAction.g4 index d9d00eb5..fcde32aa 100644 --- a/_server/MotaAction.g4 +++ b/_server/MotaAction.g4 @@ -346,7 +346,6 @@ action | hideStatusBar_s | showHero_s | hideHero_s - | updateEnemys_s | sleep_s | wait_s | waitAsync_s @@ -1102,18 +1101,6 @@ var code = '{"type": "hideHero"},\n'; return code; */; -updateEnemys_s - : '更新怪物数据' Newline - - -/* updateEnemys_s -tooltip : updateEnemys: 立刻更新怪物数据 -helpUrl : https://h5mota.com/games/template/_docs/#/event?id=updateEnemys%ef%bc%9a%e6%9b%b4%e6%96%b0%e6%80%aa%e7%89%a9%e6%95%b0%e6%8d%ae -colour : this.dataColor -var code = '{"type": "updateEnemys"},\n'; -return code; -*/; - sleep_s : '等待' Int '毫秒' '不可被Ctrl跳过' Bool Newline @@ -3501,10 +3488,6 @@ ActionParser.prototype.parseAction = function() { this.next = MotaActionBlocks['hideHero_s'].xmlText([ this.next]); break; - case "updateEnemys": - this.next = MotaActionBlocks['updateEnemys_s'].xmlText([ - this.next]); - break; case "sleep": // 等待多少毫秒 this.next = MotaActionBlocks['sleep_s'].xmlText([ data.time||0,data.noSkip||false,this.next]); diff --git a/_server/editor_blockly.js b/_server/editor_blockly.js index d49d0eed..53907f1c 100644 --- a/_server/editor_blockly.js +++ b/_server/editor_blockly.js @@ -113,7 +113,6 @@ editor_blockly = function () { MotaActionBlocks['input_s'].xmlText(), MotaActionBlocks['input2_s'].xmlText(), MotaActionBlocks['update_s'].xmlText(), - MotaActionBlocks['updateEnemys_s'].xmlText(), MotaActionBlocks['moveHero_s'].xmlText(), MotaActionBlocks['jumpHero_s'].xmlText(), MotaActionBlocks['changeFloor_s'].xmlText(), diff --git a/_server/table/functions.comment.js b/_server/table/functions.comment.js index 55dc8d1c..6f30fa75 100644 --- a/_server/table/functions.comment.js +++ b/_server/table/functions.comment.js @@ -128,12 +128,6 @@ var functions_comment_c456ea59_6018_45ef_8bcc_211a24c627dc = { "_type": "textarea", "_lint": true, "_data": "获得战斗伤害信息" - }, - "updateEnemys": { - "_leaf": true, - "_type": "textarea", - "_lint": true, - "_data": "更新怪物数据" } } }, diff --git a/libs/enemys.js b/libs/enemys.js index 6e98603c..e9aaab26 100644 --- a/libs/enemys.js +++ b/libs/enemys.js @@ -307,10 +307,8 @@ enemys.prototype._calDamage = function (enemy, hero, x, y, floorId) { return info.damage; } -////// 更新怪物数据 ////// -enemys.prototype.updateEnemys = function () { - return this.enemydata.updateEnemys(); -} +////// 更新怪物数据。已经不再使用,这里留空进行兼容。 ////// +enemys.prototype.updateEnemys = function () {} ////// 获得当前楼层的怪物列表 ////// enemys.prototype.getCurrentEnemys = function (floorId) { diff --git a/libs/events.js b/libs/events.js index 649e604d..85758759 100644 --- a/libs/events.js +++ b/libs/events.js @@ -1692,12 +1692,6 @@ events.prototype._action_hideHero = function (data, x, y, prefix) { core.doAction(); } -events.prototype._action_updateEnemys = function (data, x, y, prefix) { - core.enemys.updateEnemys(); - core.updateStatusBar(); - core.doAction(); -} - events.prototype._action_vibrate = function (data, x, y, prefix) { this.__action_doAsyncFunc(data.async, core.vibrate, data.time); } diff --git a/project/functions.js b/project/functions.js index 78a7b3c4..71f6223a 100644 --- a/project/functions.js +++ b/project/functions.js @@ -71,8 +71,6 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = // 设置已经到过的楼层 core.setFlag("__visited__", {}); - - core.updateEnemys(); }, "win": function (reason, norank, noexit) { // 游戏获胜事件 @@ -774,18 +772,6 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = "turn": Math.floor(turn), "damage": Math.floor(damage) }; -}, - "updateEnemys": function () { - // 更新怪物数据,可以在这里对怪物属性和数据进行动态更新,详见文档——事件——怪物数据的动态修改 - // 此函数执行时间:重新开始游戏、读档后、通过事件调用“更新怪物数据”时 - - // 比如下面这个例子,如果flag:xxx为真,则将绿头怪的攻击设为100,金币设为20 - /* - if (core.hasFlag('xxx')) { - core.material.enemys.greenSlime.atk = 100; - core.material.enemys.greenSlime.money = 20; - } - */ } }, "actions": { @@ -1012,8 +998,6 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = core.material.icons.hero.width = core.material.images.images[icon].width / 4; core.material.icons.hero.height = core.material.images.images[icon].height / 4; } - // 刷新怪物数据 - core.updateEnemys(); // TODO:增加自己的一些读档处理