Floor ParallelDo

This commit is contained in:
ckcz123 2018-11-25 12:14:07 +08:00
parent cd530d62b4
commit 69e44861aa
6 changed files with 71 additions and 7 deletions

View File

@ -359,6 +359,13 @@ comment_c456ea59_6018_45ef_8bcc_211a24c627dc =
"_event": "firstArrive",
"_data": "第一次到该楼层触发的事件,可以双击进入事件编辑器。"
},
"parallelDo": {
"_leaf": true,
"_type": "textarea",
"_string": true,
"_lint": true,
"_data": "在该层楼时执行的并行事件处理。\n可以在这里写上任意需要自动执行的脚本比如打怪自动开门等。\n详见文档-个性化-并行事件处理。"
},
"underGround": {
"_leaf": true,
"_type": "checkbox",

View File

@ -157,6 +157,7 @@ editor_file = function (editor, callback) {
color: saveStatus?currData.color:null,
weather: saveStatus?currData.weather:null,
firstArrive: [],
parallelDo: null,
events: {},
changeFloor: {},
afterBattle: {},

View File

@ -1611,6 +1611,8 @@ core.insertAction([
在脚本编辑里面提供了一个parallelDo函数这个函数可以用来做并行处理内容。
从V2.5.2开始每层楼的楼层属性中也增加了一个parallelDo选项可以在里面写任何脚本代码。该部分代码仅在人物在该楼层时才会被反复执行。
``` js
"parallelDo": function (timestamp) {
// 并行事件处理,可以在这里写任何需要并行处理的脚本或事件
@ -1619,6 +1621,15 @@ core.insertAction([
// 检查当前是否处于游戏开始状态
if (!core.isPlaying()) return;
// 执行当前楼层的并行事件处理
if (core.isset(core.status.floorId)) {
try {
eval(core.floors[core.status.floorId].parallelDo);
} catch (e) {
console.log(e);
}
}
// 下面是一个并行事件开门的样例
/*
@ -1644,6 +1655,22 @@ core.insertAction([
!> 判定flag后千万别忘了将该flag清空否则下次仍然会执行这段代码。
每层楼的并行事件处理类似只有角色在当前楼层时才会反复执行当前楼层中parallelDo部分的代码。
下面是一个打怪开门的样例:(假设每打一个怪的战后事件把`flag:door`+1
``` js
// 每层楼的并行事件处理代码样例
if (core.getFlag("door",0)==2) {
// 将该flag清空
core.setFlag("door", 0);
// 开门如果是当前层则无需写floorId
core.insertAction([
{"type":"openDoor", "loc":[0,0]}
]);
}
```
## 加点事件
打败怪物后可以进行加点。

View File

@ -28,7 +28,14 @@ items.prototype.getItemEffect = function(itemId, itemNum) {
if (itemCls === 'items') {
var ratio = parseInt(core.status.thisMap.item_ratio) || 1;
var curr_hp = core.status.hero.hp;
if (itemId in this.itemEffect)eval(this.itemEffect[itemId]);
if (itemId in this.itemEffect) {
try {
eval(this.itemEffect[itemId]);
}
catch (e) {
console.log(e);
}
}
core.status.hero.statistics.hp += core.status.hero.hp - curr_hp;
}
else {
@ -42,7 +49,14 @@ items.prototype.getItemEffectTip = function(itemId) {
// 消耗品
if (itemCls === 'items') {
var ratio = parseInt(core.status.thisMap.item_ratio) || 1;
if (itemId in this.itemEffectTip) return eval(this.itemEffectTip[itemId])||"";
if (itemId in this.itemEffectTip) {
try {
return eval(this.itemEffectTip[itemId])||"";
} catch (e) {
console.log(e);
return "";
}
}
}
return "";
}

View File

@ -2311,7 +2311,10 @@ ui.prototype.drawStatistics = function () {
if (cls[id]=='items' && id!='superPotion') {
var ratio = floor.item_ratio||1;
if (core.isset(core.items.itemEffect[id])) {
eval(core.items.itemEffect[id]);
try {
eval(core.items.itemEffect[id]);
}
catch (e) {}
}
hp = core.status.hero.hp - temp.hp;
atk = core.status.hero.atk - temp.atk;

View File

@ -87,9 +87,11 @@ functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
"afterChangeFloor": function (floorId, fromLoad) {
// 转换楼层结束的事件
// floorId是切换到的楼层fromLoad若为true则代表是从读档行为造成的楼层切换
if (!core.hasFlag("visited_"+floorId)) {
var visited = core.getFlag("__visited__", []);
if (visited.indexOf(floorId)===-1) {
core.insertAction(core.floors[floorId].firstArrive);
core.setFlag("visited_"+floorId, true);
visited.push(floorId);
core.setFlag("__visited__", visited);
}
},
"addPoint": function (enemy) {
@ -1034,7 +1036,16 @@ functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
// 检查当前是否处于游戏开始状态
if (!core.isPlaying()) return;
// 执行当前楼层的并行事件处理
if (core.isset(core.status.floorId)) {
try {
eval(core.floors[core.status.floorId].parallelDo);
} catch (e) {
console.log(e);
}
}
// 下面是一个并行事件开门的样例
/*
// 如果某个flag为真
@ -1048,7 +1059,8 @@ functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
// 也可以写任意其他的脚本代码
}
*/
},
"plugin": function () {
////// 插件编写,可以在这里写自己额外需要执行的脚本 //////