diff --git a/_docs/api.md b/_docs/api.md
index a82a7d81..b75d25d1 100644
--- a/_docs/api.md
+++ b/_docs/api.md
@@ -989,7 +989,7 @@ openKeyBoard: fn(fromUserAction?: bool)
insertCommonEvent: fn(name?: string, args?: [?], x?: number, y?: number, callback?: fn(), addToLast?: bool)
插入一个公共事件
-例如:core.insertCommonEvent('毒衰咒处理', [0]);
+例如:core.insertCommonEvent('加点事件', [3]);
name: 公共事件名;如果公共事件不存在则直接忽略
args: 参数列表,为一个数组,将依次赋值给 flag:arg1, flag:arg2, ...
x: 新的当前点横坐标,可选
diff --git a/_docs/element.md b/_docs/element.md
index 59943e26..7801321e 100644
--- a/_docs/element.md
+++ b/_docs/element.md
@@ -97,7 +97,7 @@
* 数值提升项:若干个键值对,表示该装备增加属性的常数值(支持负数)。7个常用属性可以通过下拉框选取,自定义的新属性也可以手动输入。
* 百分比提升项:若干个键值对,表示该装备增加属性的百分比(支持负数,如填-10就表示减少10%),修改方法同上。
* 装备对属性的影响原理:在穿脱装备时,会根据数值提升项和百分比提升项,分别调用`core.status.hero.xxx += yyy`和`core.addBuff('xxx', yyy)`这两个API(衰弱的附加和解除同理),而状态栏的显示值和战斗中的使用值则是`core.getStatus('xxx')`和buff值相乘再向下取整所得。
- * PC端按下Ctrl+0~9可以保存当前套装,Alt+0~9快速更换套装。
+ * PC端可以按Alt+0~9快速更换套装。
道具相关API请阅读[API列表](api)。
@@ -110,7 +110,7 @@
5. **特殊属性:**一个由正整数组成的一维数组,您可以点击“勾选框编辑”按钮来修改它。所有特殊属性都定义在“脚本编辑——怪物特殊属性”,您可以在那里追加新的。它们大体分为四类:
1. 手册中属性值的修正:(按照结算顺序)模仿、坚固、光环,修正后的属性也将被用于战斗,详见“脚本编辑——怪物真实属性”。
2. 战损的修正:这类最多,先攻、魔攻、连击(次数为n)、破甲(比例为defValue)、反击(比例为atkValue,回合数为勇士的攻击回合数)、净化(倍数为n,1表示单纯无视护盾)、吸血(比例为value,是否加到自身为add)、仇恨(每场战斗的仇恨增值由全塔属性指定)、无敌、固伤(数值为damage)、支援。其中又以仇恨和固伤不能被护盾直接抵消而和无敌较为特殊,详见“脚本编辑——战斗伤害信息”。
- 3. 战后的影响:中毒、衰弱、诅咒、仇恨(的累加和减半)、自爆、退化(扣减值分别为atkValue和defValue)、重生,详见“脚本编辑——战后脚本”和“公共事件——毒衰咒处理”。
+ 3. 战后的影响:中毒、衰弱、诅咒、仇恨(的累加和减半)、自爆、退化(扣减值分别为atkValue和defValue)、重生,详见“脚本编辑——战后脚本”和“脚本编辑——毒衰咒”。
4. 阻激夹域捕捉:即对主角行走的妨害,详见“脚本编辑——阻激夹域伤害”,该函数也负责了血网(图块ID为lavaNet,请勿修改)的伤害。
阻激域的伤害都为value且在夹击之前结算,领域的形状和半径与光环一致。
@@ -286,7 +286,7 @@
这个类型的数值会保存在core.values中,可以直接在游戏中修改。
1. **血网伤害和中毒伤害:**如题,如果不想用常数,请修改“脚本编辑”的“阻激夹域伤害”和“每步后操作”。
-2. **衰弱效果:**填小于1的正数代表扣减的比例,否则为扣减的常数。扣减和恢复的原理和装备相同,详见“公共事件——毒衰咒处理”、解衰药水和万能药水的使用效果。
+2. **衰弱效果:**填小于1的正数代表扣减的比例,否则为扣减的常数。扣减和恢复的原理和装备相同,详见“脚本编辑——毒衰咒”、解衰药水和万能药水的使用效果。
3. **三种宝石和四种血瓶的值:**如题,此值为基础值。实际效果还需乘以楼层属性最下面的“宝石血瓶效果”(限即捡即用类,详见这七种道具的属性。此外,B键数据统计是按照此值乘以“宝石血瓶效果”统计的,与道具的实际效果无关,请自行注意。
4. **反击、破甲、净化比例:**如果反击、破甲、净化怪物没有指定atkValue、defValue和n,就会用这三个值。请注意反击的总回合数是勇士的攻击回合数,净化比例填1表示单纯无视护盾。
5. **仇恨增值:**每进行一场战斗,core.status.hero.flags.hatred的增加量。如果不想用常数,请修改“脚本编辑——战后脚本”。
diff --git a/_docs/event.md b/_docs/event.md
index 4098e86a..f481cda4 100644
--- a/_docs/event.md
+++ b/_docs/event.md
@@ -101,7 +101,7 @@
## 公共事件(逗号键)
-有几个事件,如战后加点、毒衰咒处理、回收钥匙商店,会在战后脚本或全局商店等处频繁用到。于是它们被整理成了公共事件,您也可以追加自己的。
+有几个事件,如战后加点、回收钥匙商店,会在战后脚本或全局商店等处频繁用到。于是它们被整理成了公共事件,您也可以追加自己的。
公共事件在内容上和其他事件并无不同,只是在插入公共事件时(如`core.insertCommonEvent("回收钥匙商店")`)可以提供一个`参数列表`。
diff --git a/_server/CodeMirror/defs.js b/_server/CodeMirror/defs.js
index 96ad8afc..de2c74fb 100644
--- a/_server/CodeMirror/defs.js
+++ b/_server/CodeMirror/defs.js
@@ -2242,6 +2242,10 @@ var terndefs_f6783a0a_522d_417e_8407_94c67b692e50 = [
"!doc": "读取主角某个属性的百分比修正倍率,初始值为1
例如:core.getBuff('atk'); // 主角当前能发挥出多大比例的攻击力
name: 属性的英文名",
"!type": "fn(name: string) -> number"
},
+ "triggerDebuff": {
+ "!doc": "获得或移除毒衰咒效果
action: 要获得还是移除,'get'为获得,'remove'为移除
type: 获得或移除的内容(poison/weak/curse),可以为字符串或数组",
+ "!type": "fn(action: string, type: string|[string])"
+ },
"setToolbarButton": {
"!doc": "改变工具栏为按钮1-8",
"!type": "fn(useButton?: bool)"
@@ -3831,7 +3835,7 @@ var terndefs_f6783a0a_522d_417e_8407_94c67b692e50 = [
"!type": "fn(fromUserAction?: bool)"
},
"insertCommonEvent": {
- "!doc": "插入一个公共事件
例如:core.insertCommonEvent('毒衰咒处理', [0]);
name: 公共事件名;如果公共事件不存在则直接忽略
args: 参数列表,为一个数组,将依次赋值给 flag:arg1, flag:arg2, ...
x: 新的当前点横坐标,可选
y: 新的当前点纵坐标,可选
callback: 新的回调函数,可选
addToLast: 插入的位置,true表示插入到末尾,否则插入到开头",
+ "!doc": "插入一个公共事件
例如:core.insertCommonEvent('加点事件', [3]);
name: 公共事件名;如果公共事件不存在则直接忽略
args: 参数列表,为一个数组,将依次赋值给 flag:arg1, flag:arg2, ...
x: 新的当前点横坐标,可选
y: 新的当前点纵坐标,可选
callback: 新的回调函数,可选
addToLast: 插入的位置,true表示插入到末尾,否则插入到开头",
"!type": "fn(name?: string, args?: [?], x?: number, y?: number, callback?: fn(), addToLast?: bool)"
},
"hideImage": {
diff --git a/_server/table/events.comment.js b/_server/table/events.comment.js
index b911b38a..63b58f07 100644
--- a/_server/table/events.comment.js
+++ b/_server/table/events.comment.js
@@ -19,12 +19,11 @@ var events_comment_c456ea59_6018_45ef_8bcc_211a24c627dc = {
"_event": "commonEvent",
"_data": "加点事件"
},
- "毒衰咒处理": {
+ "回收钥匙商店": {
"_leaf": true,
"_type": "event",
- "_range": "thiseval instanceof Array",
"_event": "commonEvent",
- "_data": "毒衰咒处理"
+ "_data": "回收钥匙商店"
},
}
if (obj[key]) return obj[key];
diff --git a/_server/table/functions.comment.js b/_server/table/functions.comment.js
index 75f29375..366039b2 100644
--- a/_server/table/functions.comment.js
+++ b/_server/table/functions.comment.js
@@ -135,6 +135,12 @@ var functions_comment_c456ea59_6018_45ef_8bcc_211a24c627dc = {
"_lint": true,
"_data": "读档操作"
},
+ "triggerDebuff": {
+ "_leaf": true,
+ "_type": "textarea",
+ "_lint": true,
+ "_data": "毒衰咒处理"
+ },
"updateStatusBar": {
"_leaf": true,
"_type": "textarea",
diff --git a/libs/control.js b/libs/control.js
index 26517b0b..c6f4e70f 100644
--- a/libs/control.js
+++ b/libs/control.js
@@ -2100,6 +2100,11 @@ control.prototype.getBuff = function (name) {
return core.getFlag('__'+name+'_buff__', 1);
}
+////// 获得或移除毒衰咒效果 //////
+control.prototype.triggerDebuff = function (action, type) {
+ return this.controldata.triggerDebuff(action, type);
+}
+
////// 设置勇士的位置 //////
control.prototype.setHeroLoc = function (name, value, noGather) {
if (!core.status.hero) return;
diff --git a/libs/maps.js b/libs/maps.js
index a5a8e2d9..0038f666 100644
--- a/libs/maps.js
+++ b/libs/maps.js
@@ -735,7 +735,7 @@ maps.prototype._automaticRoute_deepAdd = function (x, y) {
// 绕过亮灯
if (id == "light") deepAdd += 100;
// 绕过路障
- if (id.endsWith("Net")) deepAdd += 100;
+ if (id.endsWith("Net") && !core.hasFlag(id.substring(0, id.length - 3))) deepAdd += 100;
// 绕过血瓶和绿宝石
if (core.hasFlag('__potionNoRouting__') && (id.endsWith("Potion") || id == 'greenGem')) deepAdd += 100;
// 绕过传送点
diff --git a/migration.html b/migration.html
index a13d5bcb..5f0681d8 100644
--- a/migration.html
+++ b/migration.html
@@ -550,10 +550,10 @@ function action_maps(callback) {
"9": {"cls":"terrains","id":"pinkShopLeft"},
"10": {"cls":"terrains","id":"pinkShopRight"},
"11": {"cls":"animates","id":"lavaNet","canPass":true,"trigger":"null","script":"(function () {\n\t// 血网的伤害效果移动到 checkBlock 中处理\n\n\t// 如果要做一次性血网,可直接注释掉下面这句话:\n\t// core.removeBlock(core.getHeroLoc('x'), core.getHeroLoc('y'));\n})();","name":"血网"},
- "12": {"cls":"animates","id":"poisonNet","canPass":true,"trigger":"null","script":"(function () {\n\t// 直接插入公共事件进行毒处理\n\tif (!core.hasItem('amulet')) {\n\t\tcore.insertAction({ \"type\": \"insert\", \"name\": \"毒衰咒处理\", \"args\": [0] });\n\t}\n\n\t// 如果要做一次性毒网,可直接注释掉下面这句话:\n\t// core.removeBlock(core.getHeroLoc('x'), core.getHeroLoc('y'));\n})()","name":"毒网"},
- "13": {"cls":"animates","id":"weakNet","canPass":true,"trigger":"null","script":"(function () {\n\t// 直接插入公共事件进行衰处理\n\tif (!core.hasItem('amulet')) {\n\t\tcore.insertAction({ \"type\": \"insert\", \"name\": \"毒衰咒处理\", \"args\": [1] });\n\t}\n\n\t// 如果要做一次性衰网,可直接注释掉下面这句话:\n\t// core.removeBlock(core.getHeroLoc('x'), core.getHeroLoc('y'));\n})()","name":"衰网"},
- "14": {"cls":"animates","id":"curseNet","canPass":true,"trigger":"null","script":"(function () {\n\t// 直接插入公共事件进行咒处理\n\tif (!core.hasItem('amulet')) {\n\t\tcore.insertAction({ \"type\": \"insert\", \"name\": \"毒衰咒处理\", \"args\": [2] });\n\t}\n\n\t// 如果要做一次性咒网,可直接注释掉下面这句话:\n\t// core.removeBlock(core.getHeroLoc('x'), core.getHeroLoc('y'));\n})()","name":"咒网"},
- "54": {"cls":"items","id":"freezeBadge"},
+ "12": {"cls":"animates","id":"poisonNet","canPass":true,"trigger":"null","script":"(function () {\n\tif (!core.hasItem('amulet')) {\n\t\tcore.triggerDebuff('get', 'poison');\n\t\tcore.updateStatusBar();\n\t}\n\n\t// 如果要做一次性毒网,可直接注释掉下面这句话:\n\t// core.removeBlock(core.getHeroLoc('x'), core.getHeroLoc('y'));\n})()","name":"毒网"},
+ "13": {"cls":"animates","id":"weakNet","canPass":true,"trigger":"null","script":"(function () {\n\tif (!core.hasItem('amulet')) {\n\t\tcore.triggerDebuff('get', 'weak');\n\t\tcore.updateStatusBar();\n\t}\n\n\t// 如果要做一次性衰网,可直接注释掉下面这句话:\n\t// core.removeBlock(core.getHeroLoc('x'), core.getHeroLoc('y'));\n})()","name":"衰网"},
+ "14": {"cls":"animates","id":"curseNet","canPass":true,"trigger":"null","script":"(function () {\n\tif (!core.hasItem('amulet')) {\n\t\tcore.triggerDebuff('get', 'curse');\n\t\tcore.updateStatusBar();\n\t}\n\n\t// 如果要做一次性咒网,可直接注释掉下面这句话:\n\t// core.removeBlock(core.getHeroLoc('x'), core.getHeroLoc('y'));\n})()","name":"咒网"},
+ "54": {"cls":"items","id":"freezeBadge"},
"81": {"cls":"animates","id":"yellowDoor","trigger":"openDoor","animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.mp3","keys":{"yellowKey":1}},"name":"黄门"},
"82": {"cls":"animates","id":"blueDoor","trigger":"openDoor","animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.mp3","keys":{"blueKey":1}},"name":"蓝门"},
"83": {"cls":"animates","id":"redDoor","trigger":"openDoor","animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.mp3","keys":{"redKey":1}},"name":"红门"},
diff --git a/project/events.js b/project/events.js
index 8847951f..a78e0e52 100644
--- a/project/events.js
+++ b/project/events.js
@@ -45,117 +45,6 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
]
}
],
- "毒衰咒处理": [
- {
- "type": "comment",
- "text": "获得毒衰咒效果,flag:arg1 为要获得的类型"
- },
- {
- "type": "switch",
- "condition": "flag:arg1",
- "caseList": [
- {
- "case": "0",
- "action": [
- {
- "type": "comment",
- "text": "获得毒效果"
- },
- {
- "type": "if",
- "condition": "!flag:poison",
- "true": [
- {
- "type": "setValue",
- "name": "flag:poison",
- "value": "true"
- }
- ],
- "false": []
- }
- ]
- },
- {
- "case": "1",
- "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",
- "operator": "-=",
- "value": "core.values.weakValue"
- },
- {
- "type": "setValue",
- "name": "status:def",
- "operator": "-=",
- "value": "core.values.weakValue"
- }
- ],
- "false": [
- {
- "type": "comment",
- "text": "<1:扣比例"
- },
- {
- "type": "function",
- "function": "function(){\ncore.addBuff('atk', -core.values.weakValue);\n}"
- },
- {
- "type": "function",
- "function": "function(){\ncore.addBuff('def', -core.values.weakValue);\n}"
- }
- ]
- }
- ],
- "false": []
- }
- ]
- },
- {
- "case": "2",
- "action": [
- {
- "type": "comment",
- "text": "获得咒效果"
- },
- {
- "type": "if",
- "condition": "!flag:curse",
- "true": [
- {
- "type": "setValue",
- "name": "flag:curse",
- "value": "true"
- }
- ],
- "false": []
- }
- ]
- }
- ]
- }
- ],
"回收钥匙商店": [
{
"type": "comment",
diff --git a/project/functions.js b/project/functions.js
index 5db0a2c1..759eb1d5 100644
--- a/project/functions.js
+++ b/project/functions.js
@@ -80,14 +80,14 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
})
});
},
- "lose": function(reason) {
+ "lose": function (reason) {
// 游戏失败事件
core.ui.closePanel();
var replaying = core.isReplaying();
core.stopReplay();
- core.waitHeroToStop(function() {
+ core.waitHeroToStop(function () {
core.drawText([
- "\t["+(reason||"结局1")+"]你死了。\n如题。"
+ "\t[" + (reason || "结局1") + "]你死了。\n如题。"
], function () {
core.events.gameOver(null, replaying);
});
@@ -117,7 +117,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
core.status.hero.loc = heroLoc;
// 检查重生怪并重置
if (!fromLoad) {
- core.extractBlocks(floorId);
+ core.extractBlocks(floorId);
core.status.maps[floorId].blocks.forEach(function (block) {
if (block.disable && core.enemys.hasSpecial(block.event.id, 23)) {
block.disable = false;
@@ -196,7 +196,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
loc = core.getFlag("__leaveLoc__", {})[toId] || null;
}
if (core.status.maps[toId].flyPoint != null && core.status.maps[toId].flyPoint.length == 2) {
- loc = {x: core.status.maps[toId].flyPoint[0], y: core.status.maps[toId].flyPoint[1]};
+ loc = { x: core.status.maps[toId].flyPoint[0], y: core.status.maps[toId].flyPoint[1] };
}
if (loc == null) {
// 获得两个楼层的索引,以决定是上楼梯还是下楼梯
@@ -311,8 +311,8 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
core.status.hero.statistics.exp += exp;
var hint = "打败 " + enemy.name;
- if (core.flags.statusBarItems.indexOf('enableMoney')>=0) hint += ",金币+" + money;
- if (core.flags.statusBarItems.indexOf('enableExp')>=0) hint += ",经验+" + exp;
+ if (core.flags.statusBarItems.indexOf('enableMoney') >= 0) hint += ",金币+" + money;
+ if (core.flags.statusBarItems.indexOf('enableExp') >= 0) hint += ",经验+" + exp;
core.drawTip(hint, enemy.id);
// 事件的处理
@@ -321,15 +321,15 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
var special = enemy.special;
// 中毒
if (core.enemys.hasSpecial(special, 12)) {
- core.push(todo, [{ "type": "insert", "name": "毒衰咒处理", "args": [0] }]);
+ core.triggerDebuff('get', 'poison');
}
// 衰弱
if (core.enemys.hasSpecial(special, 13)) {
- core.push(todo, [{ "type": "insert", "name": "毒衰咒处理", "args": [1] }]);
+ core.triggerDebuff('get', 'weak');
}
// 诅咒
if (core.enemys.hasSpecial(special, 14)) {
- core.push(todo, [{ "type": "insert", "name": "毒衰咒处理", "args": [2] }]);
+ core.triggerDebuff('get', 'curse');
}
// 仇恨属性
if (core.enemys.hasSpecial(special, 17)) {
@@ -351,7 +351,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
core.setFlag('hatred', core.getFlag('hatred', 0) + core.values.hatred);
// 战后的技能处理,比如扣除魔力值
- if (core.flags.statusBarItems.indexOf('enableSkill') >=0 ) {
+ if (core.flags.statusBarItems.indexOf('enableSkill') >= 0) {
// 检测当前开启的技能类型
var skill = core.getFlag('skill', 0);
if (skill == 1) { // 技能1:二倍斩
@@ -363,7 +363,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
}
// 如果有加点
- var point = guards.reduce(function (curr, g) {
+ var point = guards.reduce(function (curr, g) {
return curr + core.material.enemys[g[2]].point;
}, enemy.point) || 0;
if (core.flags.enableAddPoint && point > 0) {
@@ -891,20 +891,20 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
core.useItem('skill1', true);
}
break;
- // 在这里可以任意新增或编辑已有的快捷键内容
- /*
- case 0: // 使用该按键的keyCode
- // 还可以再判定altKey是否被按下,即 if (altKey) { ...
+ // 在这里可以任意新增或编辑已有的快捷键内容
+ /*
+ case 0: // 使用该按键的keyCode
+ // 还可以再判定altKey是否被按下,即 if (altKey) { ...
- // ... 在这里写你要执行脚本
- // **强烈建议所有新增的自定义快捷键均能给个对应的道具可点击,以方便手机端的行为**
- if (core.hasItem('...')) {
- core.status.route.push("key:0");
- core.useItem('...', true); // 增加true代表该使用道具不计入录像
- }
+ // ... 在这里写你要执行脚本
+ // **强烈建议所有新增的自定义快捷键均能给个对应的道具可点击,以方便手机端的行为**
+ if (core.hasItem('...')) {
+ core.status.route.push("key:0");
+ core.useItem('...', true); // 增加true代表该使用道具不计入录像
+ }
- break;
- */
+ break;
+ */
}
},
@@ -986,9 +986,61 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
core.playBgm(core.getFlag("__bgm__"));
}
- core.removeFlag('__fromLoad__');
+ core.removeFlag('__fromLoad__');
if (callback) callback();
});
+},
+ "triggerDebuff": function (action, type) {
+ // 毒衰咒效果的获得与解除
+ // action:获得还是解除;'get'表示获得,'remove'表示解除
+ // type:一个数组表示获得了哪些毒衰咒效果;poison, weak,curse
+ if (!(type instanceof Array)) type = [type];
+
+ if (action == 'get') {
+ if (core.inArray(type, 'poison') && !core.hasFlag("poison")) {
+ // 获得毒效果
+ core.setFlag('poison', true);
+ }
+ if (core.inArray(type, 'weak') && !core.hasFlag('weak')) {
+ // 获得衰效果
+ core.setFlag('weak', true);
+ if (core.values.weakValue >= 1) {
+ // >=1,直接扣数值
+ core.addStatus('atk', -core.values.weakValue);
+ core.addStatus('def', -core.values.weakValue);
+ } else {
+ // <1,扣比例
+ core.addBuff('atk', -core.values.weakValue);
+ core.addBuff('def', -core.values.weakValue);
+ }
+ }
+ if (core.inArray(type, 'curse') && !core.hasFlag('curse')) {
+ // 获得咒效果
+ core.setFlag('curse', true);
+ }
+ } else if (action == 'remove') {
+ if (core.inArray(type, "poison") && core.hasFlag("poison")) {
+ // 移除毒效果
+ core.setFlag("poison", false);
+ }
+ if (core.inArray(type, "weak") && core.hasFlag("weak")) {
+ // 移除衰效果
+ core.setFlag("weak", false);
+ if (core.values.weakValue >= 1) {
+ // >=1,直接扣数值
+ core.addStatus('atk', core.values.weakValue);
+ core.addStatus('def', core.values.weakValue);
+ } else {
+ // <1,扣比例
+ core.addBuff('atk', core.values.weakValue);
+ core.addBuff('def', core.values.weakValue);
+ }
+ }
+ if (core.inArray(type, "curse") && core.hasFlag("curse")) {
+ // 移除咒效果
+ core.setFlag("curse", false);
+ }
+ }
},
"updateStatusBar": function () {
// 更新状态栏
@@ -1024,8 +1076,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
if (core.status.hero.manamax != null && core.getRealStatus('manamax') >= 0) {
core.status.hero.mana = Math.min(core.status.hero.mana, core.getRealStatus('manamax'));
core.setStatusBarInnerHTML('mana', core.status.hero.mana + "/" + core.getRealStatus('manamax'));
- }
- else {
+ } else {
core.setStatusBarInnerHTML("mana", core.status.hero.mana);
}
// 设置技能栏
@@ -1038,9 +1089,9 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
// 如果是自定义添加的状态栏,也需要在这里进行设置显示的数值
// 进阶
- if (core.flags.statusBarItems.indexOf('enableLevelUp')>=0 && core.status.hero.lv < core.firstData.levelUp.length) {
+ if (core.flags.statusBarItems.indexOf('enableLevelUp') >= 0 && core.status.hero.lv < core.firstData.levelUp.length) {
var need = core.calValue(core.firstData.levelUp[core.status.hero.lv].need);
- if (core.flags.statusBarItems.indexOf('levelUpLeftMode')>=0)
+ if (core.flags.statusBarItems.indexOf('levelUpLeftMode') >= 0)
core.setStatusBarInnerHTML('up', core.formatBigNumber(need - core.getStatus('exp')) || "");
else
core.setStatusBarInnerHTML('up', core.formatBigNumber(need) || "");
@@ -1144,7 +1195,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
var rdir = core.turnDirection(":back", dir);
// 检查下一个点是否存在事件(从而判定是否移动)
- var rnx = x + core.utils.scan[rdir].x,
+ var rnx = x + core.utils.scan[rdir].x,
rny = y + core.utils.scan[rdir].y;
if (core.canMoveHero(x, y, rdir, floorId) && core.getBlock(rnx, rny, floorId) == null) {
repulse[currloc] = (repulse[currloc] || []).concat([
@@ -1286,32 +1337,33 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
// 从v2.7开始,每一步行走不会再刷新状态栏。
// 如果有特殊要求(如每走一步都加buff之类),可手动取消注释下面这一句:
// core.updateStatusBar(true);
-
+
// 检查自动事件
core.checkAutoEvents();
// ------ 检查目标点事件 ------ //
// 无事件的道具(如血瓶)需要优先于阻激夹域判定
- var nowx = core.getHeroLoc('x'), nowy = core.getHeroLoc('y');
- var block = core.getBlock(nowx, nowy);
- var hasTrigger = false;
- if (block!=null && block.block.event.trigger=='getItem' &&
- !core.floors[core.status.floorId].afterGetItem[nowx+","+nowy]) {
- hasTrigger = true;
- core.trigger(nowx, nowy, callback);
- }
- // 执行目标点的阻激夹域事件
- core.checkBlock();
+ var nowx = core.getHeroLoc('x'),
+ nowy = core.getHeroLoc('y');
+ var block = core.getBlock(nowx, nowy);
+ var hasTrigger = false;
+ if (block != null && block.block.event.trigger == 'getItem' &&
+ !core.floors[core.status.floorId].afterGetItem[nowx + "," + nowy]) {
+ hasTrigger = true;
+ core.trigger(nowx, nowy, callback);
+ }
+ // 执行目标点的阻激夹域事件
+ core.checkBlock();
- // 执行目标点的script和事件
- if (!hasTrigger)
- core.trigger(nowx, nowy, callback);
+ // 执行目标点的script和事件
+ if (!hasTrigger)
+ core.trigger(nowx, nowy, callback);
- // 检查该点是否是滑冰
- if (core.onSki()) {
+ // 检查该点是否是滑冰
+ if (core.onSki()) {
// 延迟到事件最后执行,因为这之前可能有阻激夹域动画
- core.insertAction({"type": "moveAction"}, null, null, null, true);
- }
+ core.insertAction({ "type": "moveAction" }, null, null, null, true);
+ }
// ------ 检查目标点事件 END ------ //
@@ -1443,7 +1495,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
},
"drawStatistics": function () {
// 浏览地图时参与的统计项目
-
+
return [
'yellowDoor', 'blueDoor', 'redDoor', 'greenDoor', 'steelDoor',
'yellowKey', 'blueKey', 'redKey', 'greenKey', 'steelKey',
@@ -1457,13 +1509,16 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
// 在这里可以增加新的ID来进行统计个数,只能增加道具ID
];
},
- "drawAbout": function() {
+ "drawAbout": function () {
// 绘制“关于”界面
core.ui.closePanel();
core.lockControl();
core.status.event.id = 'about';
- var left = 48, top = 36, right = core.__PIXELS__ - 2 * left, bottom = core.__PIXELS__ - 2 * top;
+ var left = 48,
+ top = 36,
+ right = core.__PIXELS__ - 2 * left,
+ bottom = core.__PIXELS__ - 2 * top;
core.setAlpha('ui', 0.85);
core.fillRect('ui', left, top, right, bottom, '#000000');
@@ -1474,11 +1529,11 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
// 名称
core.setTextAlign('ui', 'left');
- var globalFont = (core.status.globalAttribute||core.initStatus.globalAttribute).font;
- core.fillText('ui', "HTML5 魔塔样板", text_start, top+35, "#FFD700", "bold 22px "+globalFont);
- core.fillText('ui', "版本: "+main.__VERSION__, text_start, top + 80, "#FFFFFF", "bold 17px "+globalFont);
+ var globalFont = (core.status.globalAttribute || core.initStatus.globalAttribute).font;
+ core.fillText('ui', "HTML5 魔塔样板", text_start, top + 35, "#FFD700", "bold 22px " + globalFont);
+ core.fillText('ui', "版本: " + main.__VERSION__, text_start, top + 80, "#FFFFFF", "bold 17px " + globalFont);
core.fillText('ui', "作者: 艾之葵", text_start, top + 112);
- core.fillText('ui', 'HTML5魔塔交流群:539113091', text_start, top+112+32);
+ core.fillText('ui', 'HTML5魔塔交流群:539113091', text_start, top + 112 + 32);
// TODO: 写自己的“关于”页面,每次增加32像素即可
}
}
diff --git a/project/items.js b/project/items.js
index 60476be5..d019c23e 100644
--- a/project/items.js
+++ b/project/items.js
@@ -423,28 +423,28 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a =
"cls": "tools",
"name": "解毒药水",
"text": "可以解除中毒状态",
- "useItemEffect": "core.removeFlag('poison');",
+ "useItemEffect": "core.triggerDebuff('remove', 'poison');",
"canUseItemEffect": "core.hasFlag('poison');"
},
"weakWine": {
"cls": "tools",
"name": "解衰药水",
"text": "可以解除衰弱状态",
- "useItemEffect": "core.removeFlag('weak');\nif (core.values.weakValue>=1) { // >=1:直接扣数值\n\tcore.status.hero.atk += core.values.weakValue;\n\tcore.status.hero.def += core.values.weakValue;\n}\nelse { // <1:扣比例\n\tcore.addBuff(\"atk\", core.values.weakValue);\n\tcore.addBuff(\"def\", core.values.weakValue);\n}",
+ "useItemEffect": "core.triggerDebuff('remove', 'weak');",
"canUseItemEffect": "core.hasFlag('weak');"
},
"curseWine": {
"cls": "tools",
"name": "解咒药水",
"text": "可以解除诅咒状态",
- "useItemEffect": "core.removeFlag('curse');",
+ "useItemEffect": "core.triggerDebuff('remove', 'curse');",
"canUseItemEffect": "core.hasFlag('curse');"
},
"superWine": {
"cls": "tools",
"name": "万能药水",
"text": "可以解除所有不良状态",
- "useItemEffect": "core.removeFlag('poison');\nif (core.hasFlag('weak')) {\n\tcore.removeFlag('weak');\n\tif (core.values.weakValue>=1) { // >=1:直接扣数值\n\t\tcore.status.hero.atk += core.values.weakValue;\n\t\tcore.status.hero.def += core.values.weakValue;\n\t}\n\telse { // <1:扣比例\n\t\tcore.addBuff(\"atk\", core.values.weakValue);\n\t\tcore.addBuff(\"def\", core.values.weakValue);\n\t}\n}\ncore.removeFlag('curse');",
+ "useItemEffect": "core.triggerDebuff('remove', ['poison', 'weak', 'curse']);",
"canUseItemEffect": "(function() {\n\treturn core.hasFlag('poison') || core.hasFlag('weak') || core.hasFlag('curse');\n})();"
},
"hammer": {
diff --git a/project/maps.js b/project/maps.js
index 9e7b2037..25dc6cf2 100644
--- a/project/maps.js
+++ b/project/maps.js
@@ -11,9 +11,9 @@ var maps_90f36752_8815_4be8_b32b_d7fad1d0542e =
"9": {"cls":"terrains","id":"pinkShopLeft"},
"10": {"cls":"terrains","id":"pinkShopRight"},
"11": {"cls":"animates","id":"lavaNet","canPass":true,"trigger":"null","script":"(function () {\n\t// 血网的伤害效果移动到 checkBlock 中处理\n\n\t// 如果要做一次性血网,可直接注释掉下面这句话:\n\t// core.removeBlock(core.getHeroLoc('x'), core.getHeroLoc('y'));\n})();","name":"血网"},
- "12": {"cls":"animates","id":"poisonNet","canPass":true,"trigger":"null","script":"(function () {\n\t// 直接插入公共事件进行毒处理\n\tif (!core.hasItem('amulet')) {\n\t\tcore.insertAction({ \"type\": \"insert\", \"name\": \"毒衰咒处理\", \"args\": [0] });\n\t}\n\n\t// 如果要做一次性毒网,可直接注释掉下面这句话:\n\t// core.removeBlock(core.getHeroLoc('x'), core.getHeroLoc('y'));\n})()","name":"毒网"},
- "13": {"cls":"animates","id":"weakNet","canPass":true,"trigger":"null","script":"(function () {\n\t// 直接插入公共事件进行衰处理\n\tif (!core.hasItem('amulet')) {\n\t\tcore.insertAction({ \"type\": \"insert\", \"name\": \"毒衰咒处理\", \"args\": [1] });\n\t}\n\n\t// 如果要做一次性衰网,可直接注释掉下面这句话:\n\t// core.removeBlock(core.getHeroLoc('x'), core.getHeroLoc('y'));\n})()","name":"衰网"},
- "14": {"cls":"animates","id":"curseNet","canPass":true,"trigger":"null","script":"(function () {\n\t// 直接插入公共事件进行咒处理\n\tif (!core.hasItem('amulet')) {\n\t\tcore.insertAction({ \"type\": \"insert\", \"name\": \"毒衰咒处理\", \"args\": [2] });\n\t}\n\n\t// 如果要做一次性咒网,可直接注释掉下面这句话:\n\t// core.removeBlock(core.getHeroLoc('x'), core.getHeroLoc('y'));\n})()","name":"咒网"},
+ "12": {"cls":"animates","id":"poisonNet","canPass":true,"trigger":"null","script":"(function () {\n\tif (!core.hasItem('amulet')) {\n\t\tcore.triggerDebuff('get', 'poison');\n\t\tcore.updateStatusBar();\n\t}\n\n\t// 如果要做一次性毒网,可直接注释掉下面这句话:\n\t// core.removeBlock(core.getHeroLoc('x'), core.getHeroLoc('y'));\n})()","name":"毒网"},
+ "13": {"cls":"animates","id":"weakNet","canPass":true,"trigger":"null","script":"(function () {\n\tif (!core.hasItem('amulet')) {\n\t\tcore.triggerDebuff('get', 'weak');\n\t\tcore.updateStatusBar();\n\t}\n\n\t// 如果要做一次性衰网,可直接注释掉下面这句话:\n\t// core.removeBlock(core.getHeroLoc('x'), core.getHeroLoc('y'));\n})()","name":"衰网"},
+ "14": {"cls":"animates","id":"curseNet","canPass":true,"trigger":"null","script":"(function () {\n\tif (!core.hasItem('amulet')) {\n\t\tcore.triggerDebuff('get', 'curse');\n\t\tcore.updateStatusBar();\n\t}\n\n\t// 如果要做一次性咒网,可直接注释掉下面这句话:\n\t// core.removeBlock(core.getHeroLoc('x'), core.getHeroLoc('y'));\n})()","name":"咒网"},
"15": {"cls":"animates","id":"blueWater"},
"16": {"cls":"animates","id":"water"},
"20": {"cls":"autotile","id":"autotile"},
diff --git a/runtime.d.ts b/runtime.d.ts
index 7f359345..57781940 100644
--- a/runtime.d.ts
+++ b/runtime.d.ts
@@ -455,6 +455,13 @@ declare class control {
* @param name 属性的英文名
*/
getBuff(name: string): number
+
+ /**
+ * 获得或移除毒衰咒效果
+ * @param action 获得还是移除,'get'为获得,'remove'为移除
+ * @param type 要获得或移除的毒衰咒效果
+ */
+ triggerDebuff(action: string, type: string|string[]): void
/**
* 设置勇士位置
@@ -1108,7 +1115,7 @@ declare class events {
/**
* 插入一个公共事件
- * @example core.insertCommonEvent('毒衰咒处理', [0]);
+ * @example core.insertCommonEvent('加点事件', [3]);
* @param name 公共事件名;如果公共事件不存在则直接忽略
* @param args 参数列表,为一个数组,将依次赋值给 flag:arg1, flag:arg2, ...
* @param x 新的当前点横坐标,可选