From 1d70bcd1311975a4d0d0617f15b15b8173726dc7 Mon Sep 17 00:00:00 2001 From: oc Date: Thu, 19 Jul 2018 02:08:04 +0800 Subject: [PATCH] Move enemy functions to proect --- _server/blockly/MotaAction.g4 | 17 ++ _server/data.comment.js | 6 + _server/editor_blockly.js | 1 + _server/functions.comment.js | 24 +++ docs/api.md | 2 +- docs/event.md | 40 +++-- editor-mobile.html | 4 +- libs/control.js | 22 +-- libs/core.js | 11 +- libs/enemys.js | 292 +++++++++++----------------------- libs/events.js | 8 +- libs/ui.js | 6 +- project/data.js | 3 +- project/functions.js | 138 +++++++++++++++- 更新说明.txt | 13 +- 15 files changed, 353 insertions(+), 234 deletions(-) diff --git a/_server/blockly/MotaAction.g4 b/_server/blockly/MotaAction.g4 index ab728be1..16938dcb 100644 --- a/_server/blockly/MotaAction.g4 +++ b/_server/blockly/MotaAction.g4 @@ -193,6 +193,7 @@ action | setBlock_s | setHeroIcon_s | update_s + | updateEnemys_s | sleep_s | wait_s | battle_s @@ -496,6 +497,18 @@ var code = '{"type": "update"},\n'; return code; */; +updateEnemys_s + : '更新怪物数据' Newline + + +/* updateEnemys_s +tooltip : updateEnemys: 立刻更新怪物数据 +helpUrl : https://ckcz123.github.io/mota-js/#/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 '毫秒' Newline @@ -1702,6 +1715,10 @@ ActionParser.prototype.parseAction = function() { this.next = MotaActionBlocks['update_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,this.next]); diff --git a/_server/data.comment.js b/_server/data.comment.js index 83bcb8a9..74cd5fea 100644 --- a/_server/data.comment.js +++ b/_server/data.comment.js @@ -495,6 +495,12 @@ data_comment_c456ea59_6018_45ef_8bcc_211a24c627dc = "_bool": "bool", "_data": "夹击方式是向上取整还是向下取整。如果此项为true则为向上取整,为false则为向下取整" }, + "useLoop": { + "_leaf": true, + "_type": "checkbox", + "_bool": "bool", + "_data": "是否循环计算临界;如果此项为true则使用循环法(而不是回合数计算法)来算临界" + }, "startDirectly": { "_leaf": true, "_type": "checkbox", diff --git a/_server/editor_blockly.js b/_server/editor_blockly.js index dfbe4314..d5898b3e 100644 --- a/_server/editor_blockly.js +++ b/_server/editor_blockly.js @@ -87,6 +87,7 @@ editor_blockly = function () { MotaActionBlocks['setValue_s'].xmlText(), MotaActionBlocks['input_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/functions.comment.js b/_server/functions.comment.js index dd9466e7..cc426cae 100644 --- a/_server/functions.comment.js +++ b/_server/functions.comment.js @@ -99,6 +99,30 @@ functions_comment_c456ea59_6018_45ef_8bcc_211a24c627dc = } } }, + "enemy": { + "_leaf": false, + "_type": "object", + "_data": { + "getSpecials": { + "_leaf": true, + "_type": "textarea", + "_lint": true, + "_data": "怪物特殊属性的定义(获得怪物的特殊属性)" + }, + "getDamageInfo": { + "_leaf": true, + "_type": "textarea", + "_lint": true, + "_data": "获得战斗伤害信息(实际伤害计算函数)" + }, + "updateEnemys": { + "_leaf": true, + "_type": "textarea", + "_lint": true, + "_data": "更新怪物数据,可以在这里对怪物属性和数据进行动态更新" + } + } + }, "plugins": { "_leaf": false, "_type": "object", diff --git a/docs/api.md b/docs/api.md index e2a9fd86..eaa6f276 100644 --- a/docs/api.md +++ b/docs/api.md @@ -338,7 +338,7 @@ core.enemys.getDamageInfo(enemy, hero_hp, hero_atk, hero_def, hero_mdef) core.enemys.calDamage(enemy, hero_hp, hero_atk, hero_def, hero_mdef) -计算战斗伤害;实际返回的是上面getDamageInfo中伤害的数值。 +获得在某个勇士属性下怪物伤害;实际返回的是上面getDamageInfo中伤害的数值。 core.enemys.getCurrentEnemys(floorId) diff --git a/docs/event.md b/docs/event.md index 1bf94a19..cfeb84ed 100644 --- a/docs/event.md +++ b/docs/event.md @@ -509,6 +509,12 @@ name是可选的,代表目标行走图的文件名。 如果你需要刷新状态栏和地图显伤,只需要简单地调用 `{"type": "update"}` 即可。 +### updateEnemys:更新怪物数据 + +使用 `{"type": "updateEnemys"}` 可以动态修改怪物数据。 + +详见[怪物数据的动态修改](#怪物数据的动态修改)。 + ### sleep:等待多少毫秒 等价于RMXP中的"等待x帧",不过是以毫秒来计算。 @@ -1591,25 +1597,33 @@ core.insertAction([ 而在我们的存档中,是不会对怪物数据进行存储的,只会存各个变量和Flag,因此我们需要在读档后根据变量或Flag来调整怪物数据。 -我们可以在脚本编辑中的`afterLoadData`进行处理。 +我们可以在脚本编辑中的`updateEnemys`进行处理。 ``` js ////// 读档事件后,载入事件前,可以执行的操作 ////// -"afterLoadData" : function(data) { - // 读档事件后,载入事件前,可以执行的操作 - if (core.hasFlag("fengyin")) { // 如果存在封印(flag为真) - core.material.enemys.blackKing.hp/=10; // 将怪物的血量变成原来的十分之一 - // ... - } - // 同样难度分歧可以类似写 if (core.getFlag('hard', 0)==3) {... +"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; + } + */ + // 别忘了在事件中调用“更新怪物数据”事件! } +``` -// 在封印时,可以调用setValue将该flag置为真,然后调用自定义脚本 core.afterLoadData() 即可。 +当我们获得一个道具(或者触发某个事件等)后,需要在事件中调用“更新怪物数据”事件。 + +``` js +// 调用`updateEnemys`(更新怪物数据)事件就可以触发了 "x,y": [ - {"type": "setValue", "name": "flag:fengyin", "value": "true"}, // 封印 - {"type": "function", "function": function() { // 手动调用自定义JS脚本 core.afterLoadData() - core.afterLoadData(); - }} + "将flag:xxx置为真,就可以让怪物数据发生改变!", + {"type": "setValue", "name": "flag:xxx", "value": "true"}, // 将flag:xxx置为真 + {"type": "updateEnemys"} // 更新怪物数据;此时绿头怪攻击就会变成100了 ] ``` diff --git a/editor-mobile.html b/editor-mobile.html index 954e81e1..8d22e24f 100644 --- a/editor-mobile.html +++ b/editor-mobile.html @@ -244,6 +244,7 @@ +