commonEvents

This commit is contained in:
oc 2019-02-02 14:08:55 +08:00
parent 4c785c668f
commit 3f44807a06
16 changed files with 330 additions and 116 deletions

View File

@ -236,7 +236,8 @@ action
| show_s | show_s
| hide_s | hide_s
| trigger_s | trigger_s
| insert_s | insert_1_s
| insert_2_s
| revisit_s | revisit_s
| exit_s | exit_s
| setBlock_s | setBlock_s
@ -599,13 +600,26 @@ var code = '{"type": "trigger", "loc": ['+PosString_0+','+PosString_1+']},\n';
return code; return code;
*/; */;
insert_s insert_1_s
: '插入公共事件' EvalString Newline
/* insert_1_s
tooltip : insert: 插入公共事件并执行
helpUrl : https://h5mota.com/games/template/docs/#/event?id=insert%ef%bc%9a%e6%8f%92%e5%85%a5%e5%85%ac%e5%85%b1%e4%ba%8b%e4%bb%b6%e6%88%96%e5%8f%a6%e4%b8%80%e4%b8%aa%e5%9c%b0%e7%82%b9%e7%9a%84%e4%ba%8b%e4%bb%b6%e5%b9%b6%e6%89%a7%e8%a1%8c
default : ["加点事件"]
colour : this.eventColor
var code = '{"type": "insert", "name": "'+EvalString_0+'"},\n';
return code;
*/;
insert_2_s
: '插入事件' 'x' PosString ',' 'y' PosString '楼层' IdString? Newline : '插入事件' 'x' PosString ',' 'y' PosString '楼层' IdString? Newline
/* insert_s /* insert_2_s
tooltip : insert: 立即插入另一个地点的事件执行,当前事件不会中断,事件坐标不会改变 tooltip : insert: 立即插入另一个地点的事件执行,当前事件不会中断,事件坐标不会改变
helpUrl : https://h5mota.com/games/template/docs/#/event?id=insert%ef%bc%9a%e6%8f%92%e5%85%a5%e5%8f%a6%e4%b8%80%e4%b8%aa%e5%9c%b0%e7%82%b9%e7%9a%84%e4%ba%8b%e4%bb%b6 helpUrl : https://h5mota.com/games/template/docs/#/event?id=insert%ef%bc%9a%e6%8f%92%e5%85%a5%e5%85%ac%e5%85%b1%e4%ba%8b%e4%bb%b6%e6%88%96%e5%8f%a6%e4%b8%80%e4%b8%aa%e5%9c%b0%e7%82%b9%e7%9a%84%e4%ba%8b%e4%bb%b6%e5%b9%b6%e6%89%a7%e8%a1%8c
default : ["0","0",""] default : ["0","0",""]
colour : this.eventColor colour : this.eventColor
IdString_0 = IdString_0 && (', "floorId": "'+IdString_0+'"'); IdString_0 = IdString_0 && (', "floorId": "'+IdString_0+'"');
@ -2279,8 +2293,14 @@ ActionParser.prototype.parseAction = function() {
data.loc[0],data.loc[1],this.next]); data.loc[0],data.loc[1],this.next]);
break; break;
case "insert": // 强制插入另一个点的事件在当前事件列表执行,当前坐标和楼层不会改变 case "insert": // 强制插入另一个点的事件在当前事件列表执行,当前坐标和楼层不会改变
this.next = MotaActionBlocks['insert_s'].xmlText([ if (this.isset(data.name)) {
data.loc[0],data.loc[1],data.floorId||'',this.next]); this.next = MotaActionBlocks['insert_1_s'].xmlText([
data.name, this.next]);
}
else {
this.next = MotaActionBlocks['insert_2_s'].xmlText([
data.loc[0],data.loc[1],data.floorId||'',this.next]);
}
break; break;
case "playSound": case "playSound":
this.next = MotaActionBlocks['playSound_s'].xmlText([ this.next = MotaActionBlocks['playSound_s'].xmlText([

View File

@ -117,7 +117,8 @@ editor_blockly = function () {
MotaActionBlocks['hideBgFgMap_s'].xmlText(), MotaActionBlocks['hideBgFgMap_s'].xmlText(),
MotaActionBlocks['setBgFgBlock_s'].xmlText(), MotaActionBlocks['setBgFgBlock_s'].xmlText(),
MotaActionBlocks['trigger_s'].xmlText(), MotaActionBlocks['trigger_s'].xmlText(),
MotaActionBlocks['insert_s'].xmlText(), MotaActionBlocks['insert_1_s'].xmlText(),
MotaActionBlocks['insert_2_s'].xmlText(),
MotaActionBlocks['move_s'].xmlText(), MotaActionBlocks['move_s'].xmlText(),
MotaActionBlocks['jump_s'].xmlText(), MotaActionBlocks['jump_s'].xmlText(),
MotaActionBlocks['disableShop_s'].xmlText(), MotaActionBlocks['disableShop_s'].xmlText(),
@ -597,7 +598,8 @@ function omitedcheckUpdateFunction(event) {
'exit_s', 'exit_s',
'revisit_s', 'revisit_s',
'sleep_s', 'sleep_s',
'setBlock_s' 'setBlock_s',
'insert_1_s'
]; // 最常用的15个图块 ]; // 最常用的15个图块
editor_blockly.lastUsedTypeNum=15; editor_blockly.lastUsedTypeNum=15;

View File

@ -225,21 +225,29 @@ editor_mode = function (editor) {
editor_mode.addAction(['delete', field, undefined]); editor_mode.addAction(['delete', field, undefined]);
editor_mode.onmode('save');//自动保存 删掉此行的话点保存按钮才会保存 editor_mode.onmode('save');//自动保存 删掉此行的话点保存按钮才会保存
} else { } else {
printe(field + ' : 该值不允许为null,无法删除'); printe(field + ' : 该值不允许为null无法删除');
} }
} }
var addfunc=function(){ var addfunc=function(){
editor_mode.onmode(editor_mode._ids[modeNode.getAttribute('id')]); editor_mode.onmode(editor_mode._ids[modeNode.getAttribute('id')]);
var mode = document.getElementById('editModeSelect').value;
// 1.输入id // 1.输入id
var newid=prompt('请输入新项的id'); var newid=prompt('请输入新项的ID仅公共事件支持中文ID');
if (newid == null || newid.length==0) { if (newid == null || newid.length==0) {
return; return;
} }
// 2.检查id是否符合规范或与已有id重复
if (!/^[a-zA-Z0-9_]+$/.test(newid)){ // 检查commentEvents
printe('id不符合规范, 请使用大小写字母数字下划线来构成'); if (mode !== 'commonevent') {
return; // 2.检查id是否符合规范或与已有id重复
if (!/^[a-zA-Z0-9_]+$/.test(newid)){
printe('id不符合规范, 请使用大小写字母数字下划线来构成');
return;
}
} }
var conflict=true; var conflict=true;
var basefield=field.replace(/\[[^\[]*\]$/,''); var basefield=field.replace(/\[[^\[]*\]$/,'');
if (basefield==="['main']"){ if (basefield==="['main']"){
@ -1188,11 +1196,11 @@ editor_mode = function (editor) {
editor_mode.changeDoubleClickModeByButton=function(mode){ editor_mode.changeDoubleClickModeByButton=function(mode){
({ ({
delete:function(){ delete:function(){
printf('下一次双击表格的项删除, 编辑后刷新浏览器生效 (正常模式下双击是用事件或文本编辑器编辑);切换下拉菜单可取消。'); printf('下一次双击表格的项删除,切换下拉菜单可取消;编辑后需刷新浏览器生效。');
editor_mode.doubleClickMode=mode; editor_mode.doubleClickMode=mode;
}, },
add:function(){ add:function(){
printf('下一次双击表格的项, 在同级添加新项, 编辑后刷新浏览器生效 (正常模式下双击是用事件或文本编辑器编辑);切换下拉菜单可取消。'); printf('下一次双击表格的项则在同级添加新项,切换下拉菜单可取消;编辑后需刷新浏览器生效。');
editor_mode.doubleClickMode=mode; editor_mode.doubleClickMode=mode;
} }
}[mode])(); }[mode])();

View File

@ -8,19 +8,19 @@ var events_comment_c456ea59_6018_45ef_8bcc_211a24c627dc =
"_type": "object", "_type": "object",
"_data": function (key) { "_data": function (key) {
var obj = { var obj = {
"addPoint": { "加点事件": {
"_leaf": true, "_leaf": true,
"_type": "event", "_type": "event",
"_range": "thiseval instanceof Array", "_range": "thiseval instanceof Array",
"_event": "commonEvent", "_event": "commonEvent",
"_data": "加点事件,可以双击进入事件编辑器" "_data": "打败怪物后进行加点"
}, },
"test": { "毒衰咒处理": {
"_leaf": true, "_leaf": true,
"_type": "event", "_type": "event",
"_range": "thiseval instanceof Array", "_range": "thiseval instanceof Array",
"_event": "commonEvent", "_event": "commonEvent",
"_data": "测试事件, events.comment.js中标记了_range不能为null, 所以应该无法删除" "_data": "对毒衰咒效果进行的处理"
}, },
} }
if (obj[key]) return obj[key]; if (obj[key]) return obj[key];

View File

@ -124,6 +124,9 @@ core.insertAction(list, x, y, callback)
x和y如果设置则覆盖"当前事件点"的坐标callback如果设置则覆盖事件执行完毕后的回调函数。 x和y如果设置则覆盖"当前事件点"的坐标callback如果设置则覆盖事件执行完毕后的回调函数。
例如: core.insertAction(["楼层切换", {"type":"changeFloor", "floorId": "MT3"}]) 例如: core.insertAction(["楼层切换", {"type":"changeFloor", "floorId": "MT3"}])
将依次显示剧情文本,并执行一个楼层切换的自定义事件。 将依次显示剧情文本,并执行一个楼层切换的自定义事件。
--------
从V2.5.4开始提出了“公共事件”的说法,这里也可以插入一个公共事件名。
例如core.insertAction("毒衰咒处理") 将插入公共事件“毒衰咒处理”。
core.changeFloor(floorId, stair, heroLoc, time, callback) [异步] core.changeFloor(floorId, stair, heroLoc, time, callback) [异步]
@ -430,6 +433,10 @@ core.events.doAction()
执行下一个事件。此函数中将对所有自定义事件类型分别处理。 执行下一个事件。此函数中将对所有自定义事件类型分别处理。
core.events.getCommonEvent(name)
根据名称获得一个公共事件如果不存在对应的公共事件则返回null。
core.events.openShop(shopId, needVisited) [异步] core.events.openShop(shopId, needVisited) [异步]
打开一个全局商店。needVisited表示是否需要该商店已被打开过。 打开一个全局商店。needVisited表示是否需要该商店已被打开过。
@ -610,6 +617,10 @@ core.utils.cropImage(image, size)
纵向对图片进行切分(裁剪)。 纵向对图片进行切分(裁剪)。
core.utils.push(a,b)
向某个数组后插入另一个数组或元素
core.utils.unshift(a, b) core.utils.unshift(a, b)
向某个数组前插入另一个数组或元素 向某个数组前插入另一个数组或元素

View File

@ -573,23 +573,29 @@ NPC对话事件结束后如果需要NPC消失也需要调用 `{"type": "hide"}`
例如上面这个例子,下面的文字将不会再被显示,而是直接跳转到`"3,6"`对应的事件列表从头执行。 例如上面这个例子,下面的文字将不会再被显示,而是直接跳转到`"3,6"`对应的事件列表从头执行。
### insert插入另一个地点的事件 ### insert插入公共事件或另一个地点的事件并执行
`{"type":"insert"}` 会插入另一个地点的事件执行。 `{"type":"insert"}` 会插入公共事件或另一个地点的事件执行。
其基本写法如下: 其基本写法如下:
``` js ``` js
"x,y": [ // 实际执行的事件列表 "x,y": [ // 实际执行的事件列表
{"type": "insert", "name": "加点事件"}, // 插入公共事件:加点事件
{"type": "insert", "name": "毒衰咒处理"}, // 插入公共事件:毒衰咒处理
{"type": "insert", "loc": [3,6]}, // 插入[3,6]点的事件并执行 {"type": "insert", "loc": [3,6]}, // 插入[3,6]点的事件并执行
{"type": "insert", "loc": [10,10], "floorId": "MT1"}, // 插入MT1层[10,10]点的事件并执行 {"type": "insert", "loc": [10,10], "floorId": "MT1"}, // 插入MT1层[10,10]点的事件并执行
"上面的插入事件执行完毕后会接着继续执行后面的事件" "上面的插入事件执行完毕后会接着继续执行后面的事件"
] ]
``` ```
loc是必须的代表另一个地点的坐标 `insert`的写法有两种,可以写`name`,或者`loc`
floorId可选代表另一个地点所在的楼层如果不写则默认为当前层。 - 如果写了`"name": "xxx"`,则会去公共事件列表中找寻对应的事件,并执行。
- name为公共事件的名称如果对应公共事件不存在则跳过。
- 否则,如果写了`"loc": [x,y]`,则会插入另一个地点的事件
- loc为另一个地点的坐标
- floorId可选代表另一个地点所在的楼层如果不写则默认为当前层。
和`type:trigger`不同的是,**`type:trigger`是立刻将当前事件结束剩下所有内容都忽略然后重新启动另一个地点的action事件。** 和`type:trigger`不同的是,**`type:trigger`是立刻将当前事件结束剩下所有内容都忽略然后重新启动另一个地点的action事件。**
@ -597,8 +603,6 @@ floorId可选代表另一个地点所在的楼层如果不写则默认为
**这个过程中,当前事件不会被结束,当前的楼层和事件坐标不会发生改变。** 插入的事件执行完毕后,会继续执行接下来的内容。 **这个过程中,当前事件不会被结束,当前的楼层和事件坐标不会发生改变。** 插入的事件执行完毕后,会继续执行接下来的内容。
我们某个事件写在某个角落的墙上然后远程调用,从而达到“公共事件”的效果。
### revisit立即重启当前事件 ### revisit立即重启当前事件
revisit和trigger完全相同只不过是立刻触发的还是本地点的事件 revisit和trigger完全相同只不过是立刻触发的还是本地点的事件

BIN
docs/img/commonEvent.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 36 KiB

View File

@ -543,18 +543,17 @@ case 89: // 使用该按键的keyCode比如Y键就是89
## 公共事件 ## 公共事件
2.5.1开始H5提供了`{"type":"insert"}`事件,完美支持了公共事件的写法 V2.5.4开始,样板提供了“公共事件”下拉框,我们可以在里面用事件编辑器进行编辑,并通过`{"type":"insert"}`进行调用
我们只需要将需要的公共事件放在某个角落的墙上(或者甚至单独弄一层专门摆放公共事件),并使用“插入事件”,即可进行调用。 ![公共事件](./img/commonEvent.png)
具体详见[插入另一个地点的事件](event#insert插入另一个地点的事件)。 具体详见[插入公共事件或另一个地点的事件并执行](event#insert插入公共事件或另一个地点的事件并执行)。
当然,继续使用**插件**的写法也是可以的。具体参见“脚本编辑 - 插件编写”。 当然,继续使用**插件**的写法也是可以的。
<!-- ## 插件系统
在RM中存在公共事件的说法也就是通过某个指令来调用一系列事件的触发。
在H5中我们可以使用“插件”的形式来达成这个效果。具体参见“脚本编辑 - 插件编写”。 在H5中提供了“插件”系统。具体参见“脚本编辑 - 插件编写”。
![插件编写](./img/plugin.png) ![插件编写](./img/plugin.png)
@ -562,7 +561,7 @@ case 89: // 使用该按键的keyCode比如Y键就是89
在这个插件编写的过程中,我们可以使用任何[常见API](api)里面的代码调用;也可以通过`core.insertAction`来插入自定义事件执行。 在这个插件编写的过程中,我们可以使用任何[常见API](api)里面的代码调用;也可以通过`core.insertAction`来插入自定义事件执行。
下面是一个很简单的例子,我编写一个公共事件(插件)其效果是让勇士生命值变成原来的x倍并令面前的图块消失。 下面是一个很简单的例子,我编写一个插件函数其效果是让勇士生命值变成原来的x倍并令面前的图块消失。
``` js ``` js
this.myfunc = function(x) { this.myfunc = function(x) {
@ -575,10 +574,9 @@ this.myfunc = function(x) {
} }
``` ```
然后比如我们在某个道具的使用效果 `useItemEffect` 中写 `core.plugin.myfunc(2)` 即可调用此公共事件(插件)。也可以在战后事件或自定义脚本等位置来写。 然后比如我们在某个道具的使用效果 `useItemEffect` 中写 `core.plugin.myfunc(2)` 即可调用此插件函数。也可以在战后事件或自定义脚本等位置来写。
通过这种将脚本和自定义事件混用的方式可以达到和RM中公共事件类似的效果即一个调用触发一系列事件。 网站上也提供了一个[插件库](https://h5mota.com/plugins/),欢迎大家把自己写的插件进行共享。
-->
## 标题界面事件化 ## 标题界面事件化

View File

@ -1416,6 +1416,7 @@ control.prototype.screenFlash = function (color, time, times, callback) {
control.prototype.updateDamage = function (floorId, canvas) { control.prototype.updateDamage = function (floorId, canvas) {
floorId = floorId || core.status.floorId; floorId = floorId || core.status.floorId;
if (!core.isset(floorId)) return; if (!core.isset(floorId)) return;
if (core.status.gameOver) return;
if (!core.isset(canvas)) { if (!core.isset(canvas)) {
canvas = core.canvas.damage; canvas = core.canvas.damage;
core.clearMap('damage'); core.clearMap('damage');

View File

@ -1071,6 +1071,11 @@ core.prototype.unshift = function (a,b) {
return core.utils.unshift(a,b); return core.utils.unshift(a,b);
} }
////// 向某个数组后插入另一个数组或元素 //////
core.prototype.push = function (a,b) {
return core.utils.push(a,b);
}
////// 设置本地存储 ////// ////// 设置本地存储 //////
core.prototype.setLocalStorage = function(key, value) { core.prototype.setLocalStorage = function(key, value) {
return core.utils.setLocalStorage(key, value); return core.utils.setLocalStorage(key, value);
@ -1388,6 +1393,11 @@ core.prototype.insertAction = function (list, x, y, callback) {
core.events.insertAction(list, x, y, callback); core.events.insertAction(list, x, y, callback);
} }
////// 获得一个公共事件内容 //////
core.prototype.getCommonEvent = function (name) {
return core.events.getCommonEvent(name);
}
////// 锁定状态栏,常常用于事件处理 ////// ////// 锁定状态栏,常常用于事件处理 //////
core.prototype.lockControl = function () { core.prototype.lockControl = function () {
core.control.lockControl(); core.control.lockControl();

View File

@ -7,6 +7,7 @@ function events() {
////// 初始化 ////// ////// 初始化 //////
events.prototype.init = function () { events.prototype.init = function () {
this.eventdata = functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a.events; this.eventdata = functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a.events;
this.commonEvent = events_c12a15a8_c380_4b28_8144_256cba95f760.commonEvent;
this.events = { this.events = {
'battle': function (data, core, callback) { 'battle': function (data, core, callback) {
// 正在执行自定义事件:不允许战斗 // 正在执行自定义事件:不允许战斗
@ -911,7 +912,14 @@ events.prototype.doAction = function() {
break; break;
} }
case "insert": case "insert":
{ if (core.isset(data.name)) {
// ----- 公共事件
var commonEvent = this.getCommonEvent(data.name);
if (core.isset(commonEvent)) {
core.insertAction(commonEvent);
}
}
else {
var toX=core.calValue(data.loc[0], prefix), toY=core.calValue(data.loc[1], prefix); var toX=core.calValue(data.loc[0], prefix), toY=core.calValue(data.loc[1], prefix);
var floorId = data.floorId || core.status.floorId; var floorId = data.floorId || core.status.floorId;
var event = core.floors[floorId].events[toX+","+toY]; var event = core.floors[floorId].events[toX+","+toY];
@ -920,9 +928,9 @@ events.prototype.doAction = function() {
if (typeof event == 'string' || event instanceof Array || core.isset(event.type)) if (typeof event == 'string' || event instanceof Array || core.isset(event.type))
core.insertAction(event); core.insertAction(event);
} }
this.doAction();
break;
} }
this.doAction();
break;
case "playSound": case "playSound":
if (!core.isReplaying()) if (!core.isReplaying())
core.playSound(data.name); core.playSound(data.name);
@ -1313,6 +1321,13 @@ events.prototype.doAction = function() {
events.prototype.insertAction = function (action, x, y, callback) { events.prototype.insertAction = function (action, x, y, callback) {
if (core.hasFlag("__statistics__")) return; if (core.hasFlag("__statistics__")) return;
// ------ 判定commonEvent
var commonEvent = this.getCommonEvent(action);
if (core.isset(commonEvent) && commonEvent instanceof Array) {
action = commonEvent;
}
if (!core.isset(action)) return;
if (core.status.event.id != 'action') { if (core.status.event.id != 'action') {
this.doEvents(action, x, y, callback); this.doEvents(action, x, y, callback);
} }
@ -1339,6 +1354,12 @@ events.prototype.recoverEvents = function (data) {
return false; return false;
} }
////// 获得一个公共事件 //////
events.prototype.getCommonEvent = function (name) {
if (!core.isset(name) || !(typeof name === 'string')) return null;
return this.commonEvent[name] || null;
}
////// 获得面前的物品(轻按) ////// ////// 获得面前的物品(轻按) //////
events.prototype.getNextItem = function() { events.prototype.getNextItem = function() {
if (!core.status.heroStop || !core.flags.enableGentleClick) return false; if (!core.status.heroStop || !core.flags.enableGentleClick) return false;
@ -2041,24 +2062,16 @@ events.prototype.passNet = function (data) {
// core.drawTip('经过血网,生命-'+core.values.lavaDamage); // core.drawTip('经过血网,生命-'+core.values.lavaDamage);
} }
if (data.event.id=='poisonNet') { // 毒网 if (data.event.id=='poisonNet') { // 毒网
if (core.hasFlag('poison')) return; core.setFlag('debuff', 'poison');
core.setFlag('poison', true); core.insertAction('毒衰咒处理');
} }
if (data.event.id=='weakNet') { // 衰网 else if (data.event.id=='weakNet') { // 衰网
if (core.hasFlag('weak')) return; core.setFlag('debuff', 'weak');
core.setFlag('weak', true); core.insertAction('毒衰咒处理');
if (core.values.weakValue>=1) { // >=1直接扣数值
core.status.hero.atk -= core.values.weakValue;
core.status.hero.def -= core.values.weakValue;
}
else { // <1扣比例
core.setFlag("equip_atk_buff", core.getFlag("equip_atk_buff", 1) - core.values.weakValue);
core.setFlag("equip_def_buff", core.getFlag("equip_def_buff", 1) - core.values.weakValue);
}
} }
if (data.event.id=='curseNet') { // 咒网 else if (data.event.id=='curseNet') { // 咒网
if (core.hasFlag('curse')) return; core.setFlag('debuff', 'curse');
core.setFlag('curse', true); core.insertAction('毒衰咒处理');
} }
core.updateStatusBar(); core.updateStatusBar();
} }

View File

@ -563,6 +563,9 @@ ui.prototype.drawTextBox = function(content, showAll) {
py=core.getHeroLoc('y'); py=core.getHeroLoc('y');
ydelta = core.material.icons.hero.height-32; ydelta = core.material.icons.hero.height-32;
} }
else if (ss[1] == 'null') {
px = py = null;
}
else if (ss.length>=3) { else if (ss.length>=3) {
px=parseInt(ss[1]); px=parseInt(ss[1]);
py=parseInt(ss[2]); py=parseInt(ss[2]);

View File

@ -62,17 +62,17 @@ utils.prototype.replaceText = function (text, need, times) {
////// 计算表达式的值 ////// ////// 计算表达式的值 //////
utils.prototype.calValue = function (value, prefix, need, times) { utils.prototype.calValue = function (value, prefix, need, times) {
if (!core.isset(value)) return value; if (!core.isset(value)) return value;
if (typeof value == 'number') { if (typeof value === 'string') {
return value; value=value.replace(/status:([\w\d_]+)/g, "core.getStatus('$1')");
value=value.replace(/item:([\w\d_]+)/g, "core.itemCount('$1')");
value=value.replace(/flag:([\w\d_]+)/g, "core.getFlag('$1', 0)");
value=value.replace(/switch:([\w\d_]+)/g, "core.getFlag('"+(prefix||"global")+"@$1', 0)");
return eval(value);
} }
if (value instanceof Function) { if (value instanceof Function) {
return value(); return value();
} }
value=value.replace(/status:([\w\d_]+)/g, "core.getStatus('$1')"); return value;
value=value.replace(/item:([\w\d_]+)/g, "core.itemCount('$1')");
value=value.replace(/flag:([\w\d_]+)/g, "core.getFlag('$1', 0)");
value=value.replace(/switch:([\w\d_]+)/g, "core.getFlag('"+(prefix||"global")+"@$1', 0)");
return eval(value);
} }
////// 字符串自动换行的分割 ////// ////// 字符串自动换行的分割 //////
@ -116,6 +116,18 @@ utils.prototype.unshift = function (a,b) {
return a; return a;
} }
////// 向某个数组后插入另一个数组或元素 //////
utils.prototype.push = function (a,b) {
if (!(a instanceof Array) || !core.isset(b)) return;
if (b instanceof Array) {
core.clone(b).forEach(function (e) {
a.push(e);
});
}
else a.push(b);
return a;
}
////// 设置本地存储 ////// ////// 设置本地存储 //////
utils.prototype.setLocalStorage = function(key, value) { utils.prototype.setLocalStorage = function(key, value) {
try { try {

View File

@ -1,14 +1,167 @@
var events_c12a15a8_c380_4b28_8144_256cba95f760 = var events_c12a15a8_c380_4b28_8144_256cba95f760 =
{ {
"commonEvent": { "commonEvent": {
"addPoint": [ "加点事件": [
"" {
"type": "comment",
"text": "flag:point表示当前应该的加点数值"
},
{
"type": "choices",
"choices": [
{
"text": "攻击+${1*flag:point}",
"action": [
{
"type": "setValue",
"name": "status:atk",
"value": "status:atk+1*flag:point"
}
]
},
{
"text": "防御+${2*flag:point}",
"action": [
{
"type": "setValue",
"name": "status:def",
"value": "status:def+2*flag:point"
}
]
},
{
"text": "生命+${200*flag:point}",
"action": [
{
"type": "setValue",
"name": "status:hp",
"value": "status:hp+200*flag:point"
}
]
}
]
},
{
"type": "setValue",
"name": "flag:point",
"value": "null"
}
], ],
"test": [ "毒衰咒处理": [
"应该无法删除" {
], "type": "comment",
"test2": [ "text": "获得毒衰咒效果flag:debuff为要获得的类型"
"应该可以删除" },
{
"type": "switch",
"condition": "flag:debuff",
"caseList": [
{
"case": "'poison'",
"action": [
{
"type": "comment",
"text": "获得毒效果"
},
{
"type": "if",
"condition": "!flag:poison",
"true": [
{
"type": "setValue",
"name": "flag:poison",
"value": "true"
}
],
"false": []
}
]
},
{
"case": "'weak'",
"action": [
{
"type": "comment",
"text": "获得衰效果"
},
{
"type": "if",
"condition": "!flag:weak",
"true": [
{
"type": "setValue",
"name": "flag:weak",
"value": "true"
},
{
"type": "if",
"condition": "core.values.weakValue>=1",
"true": [
{
"type": "comment",
"text": ">=1直接扣数值"
},
{
"type": "setValue",
"name": "status:atk",
"value": "status:atk-core.values.weakValue"
},
{
"type": "setValue",
"name": "status:def",
"value": "status:def-core.values.weakValue"
}
],
"false": [
{
"type": "comment",
"text": "<1扣比例"
},
{
"type": "setValue",
"name": "flag:equip_atk_buff",
"value": "core.getFlag('equip_atk_buff',1)-core.values.weakValue"
},
{
"type": "setValue",
"name": "flag:equip_def_buff",
"value": "core.getFlag('equip_def_buff',1)-core.values.weakValue"
}
]
}
],
"false": []
}
]
},
{
"case": "'curse'",
"action": [
{
"type": "comment",
"text": "获得咒效果"
},
{
"type": "if",
"condition": "!flag:curse",
"true": [
{
"type": "setValue",
"name": "flag:curse",
"value": "true"
}
],
"false": []
}
]
}
]
},
{
"type": "setValue",
"name": "flag:debuff",
"value": "null"
}
] ]
} }
} }

View File

@ -168,21 +168,9 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
if (!core.flags.enableAddPoint || !core.isset(point) || point<=0) return []; if (!core.flags.enableAddPoint || !core.isset(point) || point<=0) return [];
// 加点返回一个choices事件 // 加点返回一个choices事件
return [ // ----- 从V2.5.4开始,移动到“公共事件-加点事件”中
{"type": "choices", core.setFlag('point', point); // 设置flag:point
"choices": [ return core.getCommonEvent('加点事件');
{"text": "攻击+"+(1*point), "action": [
{"type": "setValue", "name": "status:atk", "value": "status:atk+"+(1*point)}
]},
{"text": "防御+"+(2*point), "action": [
{"type": "setValue", "name": "status:def", "value": "status:def+"+(2*point)}
]},
{"text": "生命+"+(200*point), "action": [
{"type": "setValue", "name": "status:hp", "value": "status:hp+"+(200*point)}
]},
]
}
];
}, },
"afterBattle": function(enemyId,x,y,callback) { "afterBattle": function(enemyId,x,y,callback) {
// 战斗结束后触发的事件 // 战斗结束后触发的事件
@ -236,27 +224,24 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
core.removeBlock(x, y); core.removeBlock(x, y);
} }
// 毒衰咒的处理 // 事件的处理
var todo = [];
var special = enemy.special; var special = enemy.special;
// 中毒 // 中毒
if (core.enemys.hasSpecial(special, 12) && !core.hasFlag('poison')) { if (core.enemys.hasSpecial(special, 12)) {
core.setFlag('poison', true); core.push(todo, [{"type": "setValue", "name": "flag:debuff", "value": "'poison'"}]);
core.push(todo, [{"type": "insert", "name": "毒衰咒处理"}]);
} }
// 衰弱 // 衰弱
if (core.enemys.hasSpecial(special, 13) && !core.hasFlag('weak')) { if (core.enemys.hasSpecial(special, 13)) {
core.setFlag('weak', true); core.push(todo, [{"type": "setValue", "name": "flag:debuff", "value": "'weak'"}]);
if (core.values.weakValue>=1) { // >=1直接扣数值 core.push(todo, [{"type": "insert", "name": "毒衰咒处理"}]);
core.status.hero.atk -= core.values.weakValue;
core.status.hero.def -= core.values.weakValue;
}
else { // <1扣比例
core.setFlag("equip_atk_buff", core.getFlag("equip_atk_buff", 1) - core.values.weakValue);
core.setFlag("equip_def_buff", core.getFlag("equip_def_buff", 1) - core.values.weakValue);
}
} }
// 诅咒 // 诅咒
if (core.enemys.hasSpecial(special, 14) && !core.hasFlag('curse')) { if (core.enemys.hasSpecial(special, 14)) {
core.setFlag('curse', true); core.push(todo, [{"type": "setValue", "name": "flag:debuff", "value": "'curse'"}]);
core.push(todo, [{"type": "insert", "name": "毒衰咒处理"}]);
} }
// 仇恨属性:减半 // 仇恨属性:减半
if (core.flags.hatredDecrease && core.enemys.hasSpecial(special, 17)) { if (core.flags.hatredDecrease && core.enemys.hasSpecial(special, 17)) {
@ -287,30 +272,24 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
core.setFlag('skill', 0); core.setFlag('skill', 0);
core.setFlag('skillName', '无'); core.setFlag('skillName', '无');
} }
core.updateStatusBar(); core.updateStatusBar();
// 事件的处理
var todo = [];
// 如果该点存在,且有事件 -- V2.5.4 以后阻击怪也可以有战后事件了
if (core.isset(x) && core.isset(y)) {
var event = core.floors[core.status.floorId].afterBattle[x+","+y];
if (core.isset(event)) {
// 插入事件
core.unshift(todo, event);
}
}
// 如果有加点 // 如果有加点
var point = core.material.enemys[enemyId].point; var point = core.material.enemys[enemyId].point;
if (core.isset(point) && point>0) { if (core.flags.enableAddPoint && core.isset(point) && point>0) {
core.unshift(todo, core.events.addPoint(core.material.enemys[enemyId])); core.push(todo, [{"type": "setValue", "name": "flag:point", "value": point}]);
core.push(todo, [{"type": "insert", "name": "加点事件"}]);
}
// 如果该点存在,且有事件 -- V2.5.4 以后阻击怪也可以有战后事件了
if (core.isset(x) && core.isset(y)) {
core.push(todo, core.floors[core.status.floorId].afterBattle[x+","+y]);
} }
// 在这里增加其他的自定义事件需求 // 在这里增加其他的自定义事件需求
/* /*
if (enemyId=='xxx') { if (enemyId=='xxx') {
core.unshift(todo, [ core.push(todo, [
{"type": "...", ...}, {"type": "...", ...},
]); ]);
} }
@ -1182,7 +1161,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
'redJewel', 'blueJewel', 'greenJewel', 'yellowJewel', 'redJewel', 'blueJewel', 'greenJewel', 'yellowJewel',
'redPotion', 'bluePotion', 'greenPotion', 'yellowPotion', 'superPotion', 'redPotion', 'bluePotion', 'greenPotion', 'yellowPotion', 'superPotion',
'pickaxe', 'bomb', 'centerFly', 'icePickaxe', 'snow', 'pickaxe', 'bomb', 'centerFly', 'icePickaxe', 'snow',
'earthquake', 'upFly', 'downFly', 'jumpShoes', 'lifeWand', 'earthquake', 'upFly', 'downFly', 'jumpShoes', 'lifeWand',
'poisonWine', 'weakWine', 'curseWine', 'superWine', 'poisonWine', 'weakWine', 'curseWine', 'superWine',
'sword1', 'sword2', 'sword3', 'sword4', 'sword5', 'sword1', 'sword2', 'sword3', 'sword4', 'sword5',
'shield1', 'shield2', 'shield3', 'shield4', 'shield5', 'shield1', 'shield2', 'shield3', 'shield4', 'shield5',