This commit is contained in:
ckcz123 2019-11-29 13:32:15 +08:00
parent 755c998ab8
commit 257a14248e
10 changed files with 28 additions and 101 deletions

View File

@ -776,10 +776,6 @@ hero可为null或一个对象具体将使用core.getRealStatusOrDefault(hero,
从V2.5.5开始该函数也允许直接返回一个数字代表战斗伤害值此时回合数将视为0。
core.updateEnemys()
更新怪物数据。该函数实际被转发到了脚本编辑中。详见文档-事件-更新怪物数据。
core.getCurrentEnemys(floorId)
获得某个楼层不重复的怪物信息floorId不填默认为当前楼层。该函数会被怪物手册所调用。
该函数将返回一个列表,每一项都是一个不同的怪物,按照伤害值从小到大排序。

View File

@ -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为怪物的IDname为要设置的项比如hp,atk,def等等。
value可以是一个表达式将调用core.calValue()计算。prefix为前缀独立开关使用脚本中一般忽略。
core.setFloorInfo(name, values, floorId, prefix)
设置某层楼的楼层属性其中name为该楼层属性对应的条目values为要设置的值floorId为楼层idprefix一般直接忽略。
譬如core.setFloorInfo("name","4", "MT1")则为设置MT1显示在状态栏中的层数为4

View File

@ -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进行一段对话。

BIN
_docs/img/events/15.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

View File

@ -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]);

View File

@ -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(),

View File

@ -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": "更新怪物数据"
}
}
},

View File

@ -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) {

View File

@ -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);
}

View File

@ -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增加自己的一些读档处理