Merge remote-tracking branch 'origin/status-itcfangye' into status-itcfangye

This commit is contained in:
sakuya 2025-02-15 23:08:43 +08:00
commit a6ba26e8b5
2 changed files with 257 additions and 59 deletions

View File

@ -196,6 +196,11 @@ var comment_c456ea59_6018_45ef_8bcc_211a24c627dc = {
"_data": "百分数如10为10%法抗,怪物受到勇士的法术伤害减免比例" "_data": "百分数如10为10%法抗,怪物受到勇士的法术伤害减免比例"
}, },
"spell": {
"_leaf": true,
"_type": "textarea",
"_data": "法强"
},
"speed": { "speed": {
"_leaf": true, "_leaf": true,
"_type": "textarea", "_type": "textarea",

View File

@ -335,7 +335,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
// 获得金币 // 获得金币
var money = guards.reduce(function (curr, g) { var money = guards.reduce(function (curr, g) {
return curr + core.material.enemys[g[2]].money; return curr + core.material.enemys[g[2]].money;
}, core.getEnemyValue(enemy, "money", x, y)); }, core.getEnemyInfo(enemy, null, x, y).money);
if (core.hasItem("coin")) money *= 2; // 幸运金币:双倍 if (core.hasItem("coin")) money *= 2; // 幸运金币:双倍
if (core.hasFlag("curse")) money = 0; // 诅咒效果 if (core.hasFlag("curse")) money = 0; // 诅咒效果
core.status.hero.money += money; core.status.hero.money += money;
@ -344,7 +344,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
// 获得经验 // 获得经验
var exp = guards.reduce(function (curr, g) { var exp = guards.reduce(function (curr, g) {
return curr + core.material.enemys[g[2]].exp; return curr + core.material.enemys[g[2]].exp;
}, core.getEnemyValue(enemy, "exp", x, y)); }, core.getEnemyInfo(enemy, null, x, y).exp);
if (core.hasFlag("curse")) exp = 0; if (core.hasFlag("curse")) exp = 0;
core.status.hero.exp += exp; core.status.hero.exp += exp;
core.status.hero.statistics.exp += exp; core.status.hero.statistics.exp += exp;
@ -530,33 +530,215 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
// 第五项为该特殊属性的标记;目前 1 代表是地图类技能(需要进行遍历全图) // 第五项为该特殊属性的标记;目前 1 代表是地图类技能(需要进行遍历全图)
// 名字和描述可以直接写字符串也可以写个function将怪物传进去 // 名字和描述可以直接写字符串也可以写个function将怪物传进去
return [ return [
[1, "先攻", "怪物首先攻击", "#ffcc33"], [1, "先攻", "怪物首先攻击", "#ffcc33"], //√
[2, "魔攻", "怪物无视角色的防御", "#bbb0ff"], //[2, "魔攻", "怪物无视角色的防御", "#bbb0ff"],
[3, "坚固", "怪物防御不小于角色攻击-1", "#c0b088"], [3, "坚固", "怪物防御不小于角色攻击-1", "#c0b088"], //√
[4, "2连击", "怪物每回合攻击2次", "#ffee77"], [
[5, "3连击", "怪物每回合攻击3次", "#ffee77"], 6,
[6, function (enemy) { return (enemy.n || '') + "连击"; }, function (enemy) { return "怪物每回合攻击" + (enemy.n || 4) + "次"; }, "#ffee77"], function (enemy) {
[7, "破甲", function (enemy) { return "战斗前,怪物附加角色防御的" + Math.floor(100 * (enemy.breakArmor || core.values.breakArmor || 0)) + "%作为伤害"; }, "#88c0ff"], return (enemy.n || "") + "连击";
[8, "反击", function (enemy) { return "战斗时,怪物每回合附加角色攻击的" + Math.floor(100 * (enemy.counterAttack || core.values.counterAttack || 0)) + "%作为伤害,无视角色防御"; }, "#ffaa44"], },
[9, "净化", function (enemy) { return "战斗前,怪物附加角色护盾的" + (enemy.purify || core.values.purify) + "倍作为伤害"; }, "#80eed6"], function (enemy) {
return "怪物每回合攻击" + (enemy.n || 4) + "次";
},
"#ffee77",
], //想改成“以XX%、XX%攻击力各攻击一次”
[
7,
"破甲",
function (enemy) {
return (
"怪物无视角色防御的" +
Math.floor(
100 * (enemy.breakArmor || core.values.breakArmor || 0)
) +
"%"
);
},
"#88c0ff",
], //√
[
8,
"反击",
function (enemy) {
return (
"战斗时,怪物每回合附加角色攻击的" +
Math.floor(
100 * (enemy.counterAttack || core.values.counterAttack || 0)
) +
"%作为伤害,无视角色防御"
);
},
"#ffaa44",
],
[
9,
"净化",
function (enemy) {
return (
"战斗前,怪物附加角色护盾的" +
(enemy.purify || core.values.purify) +
"倍作为伤害"
);
},
"#80eed6",
],
[10, "模仿", "怪物的攻防和角色攻防相等", "#b0c0dd"], [10, "模仿", "怪物的攻防和角色攻防相等", "#b0c0dd"],
[11, "吸血", function (enemy) { return "战斗前,怪物首先吸取角色的" + Math.floor(100 * enemy.vampire || 0) + "%生命(约" + Math.floor((enemy.vampire || 0) * core.getStatus('hp')) + "点)作为伤害" + (enemy.add ? ",并把伤害数值加到自身生命上" : ""); }, "#dd4448"], [
[12, "中毒", "战斗后,角色陷入中毒状态,每一步损失生命" + core.values.poisonDamage + "点", "#99ee88"], 11,
[13, "衰弱", "战斗后,角色陷入衰弱状态,攻防暂时下降" + (core.values.weakValue >= 1 ? core.values.weakValue + "点" : parseInt(core.values.weakValue * 100) + "%"), "#f0bbcc"], "吸血",
[14, "诅咒", "战斗后,角色陷入诅咒状态,战斗无法获得金币和经验", "#bbeef0"], function (enemy) {
[15, "领域", function (enemy) { return "经过怪物周围" + (enemy.zoneSquare ? "九宫格" : "十字") + "范围内" + (enemy.range || 1) + "格时自动减生命" + (enemy.zone || 0) + "点"; }, "#c677dd"], return (
"战斗前,怪物首先吸取角色的" +
Math.floor(100 * enemy.vampire || 0) +
"%生命(约" +
Math.floor((enemy.vampire || 0) * core.getStatus("hp")) +
"点)作为伤害" +
(enemy.add ? ",并把伤害数值加到自身生命上" : "")
);
},
"#dd4448",
],
[
12,
"中毒",
"战斗后,角色陷入中毒状态,每一步损失生命" +
core.values.poisonDamage +
"点",
"#99ee88",
],
[
13,
"衰弱",
"战斗后,角色陷入衰弱状态,攻防暂时下降" +
(core.values.weakValue >= 1 ?
core.values.weakValue + "点" :
parseInt(core.values.weakValue * 100) + "%"),
"#f0bbcc",
],
[
14,
"诅咒",
"战斗后,角色陷入诅咒状态,战斗无法获得金币和经验",
"#bbeef0",
],
[
15,
"领域",
function (enemy) {
return (
"经过怪物周围" +
(enemy.zoneSquare ? "九宫格" : "十字") +
"范围内" +
(enemy.range || 1) +
"格时自动减生命" +
(enemy.zone || 0) +
"点"
);
},
"#c677dd",
],
[16, "夹击", "经过两只相同的怪物中间,角色生命值变成一半", "#bb99ee"], [16, "夹击", "经过两只相同的怪物中间,角色生命值变成一半", "#bb99ee"],
[17, "仇恨", "战斗前,怪物附加之前积累的仇恨值作为伤害;战斗后,释放一半的仇恨值。(每杀死一个怪物获得" + (core.values.hatred || 0) + "点仇恨值)", "#b0b666"], [
[18, "阻击", function (enemy) { return "经过怪物周围" + (enemy.zoneSquare ? "九宫格" : "十字") + "时自动减生命" + (enemy.repulse || 0) + "点,同时怪物后退一格"; }, "#8888e6"], 17,
"仇恨",
"战斗前,怪物附加之前积累的仇恨值作为伤害;战斗后,释放一半的仇恨值。(每杀死一个怪物获得" +
(core.values.hatred || 0) +
"点仇恨值)",
"#b0b666",
],
[
18,
"阻击",
function (enemy) {
return (
"经过怪物周围" +
(enemy.zoneSquare ? "九宫格" : "十字") +
"时自动减生命" +
(enemy.repulse || 0) +
"点,同时怪物后退一格"
);
},
"#8888e6",
],
[19, "自爆", "战斗后角色的生命值变成1", "#ff6666"], [19, "自爆", "战斗后角色的生命值变成1", "#ff6666"],
[20, "无敌", "角色无法打败怪物,除非拥有十字架", "#aaaaaa"], [20, "无敌", "角色无法打败怪物,除非拥有十字架", "#aaaaaa"],
[21, "退化", function (enemy) { return "战斗后角色永久下降" + (enemy.atkValue || 0) + "点攻击和" + (enemy.defValue || 0) + "点防御"; }], [
[22, "固伤", function (enemy) { return "战斗前,怪物对角色造成" + (enemy.damage2 || 0) + "点固定伤害,未开启负伤时无视角色护盾。"; }, "#ff9977"], 21,
"退化",
function (enemy) {
return (
"战斗后角色永久下降" +
(enemy.atkValue || 0) +
"点攻击和" +
(enemy.defValue || 0) +
"点防御"
);
},
],
[
22,
"固伤",
function (enemy) {
return (
"战斗前,怪物对角色造成" +
(enemy.damage || 0) +
"点固定伤害,未开启负伤时无视角色护盾。"
);
},
"#ff9977",
],
[23, "重生", "怪物被击败后,角色转换楼层则怪物将再次出现", "#a0e0ff"], [23, "重生", "怪物被击败后,角色转换楼层则怪物将再次出现", "#a0e0ff"],
[24, "激光", function (enemy) { return "经过怪物同行或同列时自动减生命" + (enemy.laser || 0) + "点"; }, "#dda0dd"], [
[25, "光环", function (enemy) { return (enemy.range != null ? ((enemy.haloSquare ? "该怪物九宫格" : "该怪物十字") + enemy.haloRange + "格范围内") : "同楼层所有") + "怪物生命提升" + (enemy.hpBuff || 0) + "%,攻击提升" + (enemy.atkBuff || 0) + "%,防御提升" + (enemy.defBuff || 0) + "%" + (enemy.haloAdd ? "可叠加" : "不可叠加"); }, "#e6e099", 1], 24,
[26, "支援", "当周围一圈的怪物受到攻击时将上前支援,并组成小队战斗。", "#77c0b6", 1], "激光",
[27, "捕捉", function (enemy) { return "当走到怪物周围" + (enemy.zoneSquare ? "九宫格" : "十字") + "时会强制进行战斗。"; }, "#c0ddbb"] function (enemy) {
return "经过怪物同行或同列时自动减生命" + (enemy.laser || 0) + "点";
},
"#dda0dd",
],
[
25,
"光环",
function (enemy) {
return (
(enemy.range != null ?
(enemy.haloSquare ? "该怪物九宫格" : "该怪物十字") +
enemy.haloRange +
"格范围内" :
"同楼层所有") +
"怪物生命提升" +
(enemy.hpBuff || 0) +
"%,攻击提升" +
(enemy.atkBuff || 0) +
"%,防御提升" +
(enemy.defBuff || 0) +
"%" +
(enemy.haloAdd ? "可叠加" : "不可叠加")
);
},
"#e6e099",
1,
],
[
26,
"支援",
"当周围一圈的怪物受到攻击时将上前支援,并组成小队战斗。",
"#77c0b6",
1,
],
[
27,
"捕捉",
function (enemy) {
return (
"当走到怪物周围" +
(enemy.zoneSquare ? "九宫格" : "十字") +
"时会强制进行战斗。"
);
},
"#c0ddbb",
],
]; ];
}, },
"getEnemyInfo": function (enemy, hero, x, y, floorId) { "getEnemyInfo": function (enemy, hero, x, y, floorId) {
@ -579,15 +761,15 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
var mon_hp = core.getEnemyValue(enemy, "hp", x, y, floorId), var mon_hp = core.getEnemyValue(enemy, "hp", x, y, floorId),
mon_atk = core.getEnemyValue(enemy, "atk", x, y, floorId), mon_atk = core.getEnemyValue(enemy, "atk", x, y, floorId),
mon_def = core.getEnemyValue(enemy, "def", x, y, floorId), mon_def = core.getEnemyValue(enemy, "def", x, y, floorId),
mon_mdef = core.getEnemyValue(enemy, "mdef", x, y, floorId), mon_mdef = core.getEnemyValue(enemy, "mdef", x, y, floorId) || 0,
mon_speed = core.getEnemyValue(enemy, "speed", x, y, floorId), mon_spell = core.getEnemyValue(enemy, "spell", x, y, floorId) || 0,
mon_speed = core.getEnemyValue(enemy, "speed", x, y, floorId) || 1,
mon_special = core.getEnemyValue(enemy, "special", x, y, floorId); mon_special = core.getEnemyValue(enemy, "special", x, y, floorId);
var mon_money = core.getEnemyValue(enemy, "money", x, y, floorId), var mon_money = core.getEnemyValue(enemy, "money", x, y, floorId),
mon_exp = core.getEnemyValue(enemy, "exp", x, y, floorId), mon_exp = core.getEnemyValue(enemy, "exp", x, y, floorId),
mon_point = core.getEnemyValue(enemy, "point", x, y, floorId); mon_point = core.getEnemyValue(enemy, "point", x, y, floorId);
var mon_barrier = 0, var mon_barrier = 0,
mon_absorb_damage = 0, mon_absorb_damage = 0;
mon_magic = core.getEnemyValue(enemy, "magic", x, y, floorId);
// 模仿 // 模仿
if (core.hasSpecial(mon_special, 10)) { if (core.hasSpecial(mon_special, 10)) {
mon_atk = hero_atk; mon_atk = hero_atk;
@ -699,6 +881,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
atk: Math.floor(mon_atk), atk: Math.floor(mon_atk),
def: Math.floor(mon_def), def: Math.floor(mon_def),
mdef: Math.floor(mon_mdef), mdef: Math.floor(mon_mdef),
spell: Math.floor(mon_spell),
speed: Math.floor(mon_speed), speed: Math.floor(mon_speed),
barrier: Math.floor(mon_barrier), barrier: Math.floor(mon_barrier),
absorb: Math.floor(mon_absorb_damage), absorb: Math.floor(mon_absorb_damage),
@ -706,7 +889,6 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
exp: Math.floor(mon_exp), exp: Math.floor(mon_exp),
point: Math.floor(mon_point), point: Math.floor(mon_point),
special: mon_special, special: mon_special,
magic: mon_magic,
guards: guards, // 返回支援情况 guards: guards, // 返回支援情况
}; };
}, },
@ -726,6 +908,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
hero_def = core.getRealStatusOrDefault(hero, "def"), hero_def = core.getRealStatusOrDefault(hero, "def"),
hero_matk = core.getRealStatusOrDefault(hero, "matk"), hero_matk = core.getRealStatusOrDefault(hero, "matk"),
hero_mdef = core.getRealStatusOrDefault(hero, "mdef"), hero_mdef = core.getRealStatusOrDefault(hero, "mdef"),
hero_mhp = core.getRealStatusOrDefault(hero, "mhp"),
hero_speed = core.getRealStatusOrDefault(hero, "speed"), hero_speed = core.getRealStatusOrDefault(hero, "speed"),
hero_spell = core.getRealStatusOrDefault(hero, "spell"), hero_spell = core.getRealStatusOrDefault(hero, "spell"),
origin_hero_hp = core.getStatusOrDefault(hero, "hp"), origin_hero_hp = core.getStatusOrDefault(hero, "hp"),
@ -739,6 +922,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
mon_atk = enemyInfo.atk, mon_atk = enemyInfo.atk,
mon_def = enemyInfo.def, mon_def = enemyInfo.def,
mon_mdef = enemyInfo.mdef, mon_mdef = enemyInfo.mdef,
mon_spell = enemyInfo.spell,
mon_speed = enemyInfo.speed, mon_speed = enemyInfo.speed,
mon_special = enemyInfo.special, mon_special = enemyInfo.special,
mon_absorb_damage = enemyInfo.absorb, mon_absorb_damage = enemyInfo.absorb,
@ -751,11 +935,21 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
// 开启了技能1二倍斩 // 开启了技能1二倍斩
hero_atk *= 2; // 计算时攻击力翻倍 hero_atk *= 2; // 计算时攻击力翻倍
} }
// 破甲
if (core.hasSpecial(mon_special, 7))
hero_def -= Math.floor(
(enemy.breakArmor || core.values.breakArmor) * hero_def
);
//勇士属性取整 //勇士属性取整
hero_atk = Math.max(0, Math.floor(hero_atk)); hero_atk = Math.max(0, Math.floor(hero_atk));
hero_def = Math.max(0, Math.floor(hero_def)); hero_def = Math.max(0, Math.floor(hero_def));
hero_mdef = Math.max(0, Math.floor(hero_mdef));
hero_speed = Math.max(0, Math.floor(hero_speed)); hero_speed = Math.max(0, Math.floor(hero_speed));
hero_spell = Math.max(0, Math.floor(hero_spell));
hero_matk = Math.min(100, Math.max(0, Math.floor(hero_matk)));
hero_mdef = Math.min(100, Math.max(0, Math.floor(hero_mdef)));
hero_mhp = Math.min(100, Math.max(0, Math.floor(hero_mhp)));
// 如果是无敌属性,且勇士未持有十字架 // 如果是无敌属性,且勇士未持有十字架
if (core.hasSpecial(mon_special, 20) && !core.hasItem("cross")) if (core.hasSpecial(mon_special, 20) && !core.hasItem("cross"))
@ -783,12 +977,12 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
//——第二部分:变量定义和初始赋值—— //——第二部分:变量定义和初始赋值——
// 每回合怪物对勇士造成的战斗伤害 // 每回合怪物对勇士造成的战斗伤害
let per_damage = Math.max(mon_atk - hero_def, 0); let per_damage = Math.max(mon_atk - hero_def, 0),
//if (enemyInfo.magic) per_damage = Math.max(mon_atk - hero_mdef, 0); per_mdamage = Math.floor(mon_spell * (100 - hero_mdef) / 100);
// //
let hero_per_damage = Math.max(hero_atk - mon_def, 0); let hero_per_damage = Math.max(hero_atk - mon_def, 0),
//if (hero_magic) hero_per_damage = Math.max(hero_atk - mon_mdef, 0);
hero_per_mdamage = Math.floor((hero_spell * hero_matk / 100) * (100 - mon_mdef) / 100);
let damage = 0, let damage = 0,
hero_turn = 0, hero_turn = 0,
@ -799,41 +993,48 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
let heroDiffPerTurn = [], let heroDiffPerTurn = [],
enemyDiffPerTurn = []; enemyDiffPerTurn = [];
for ( let now_mon_hp = mon_hp,
let now_mon_hp = mon_hp, last_mon_hp = mon_hp,
last_mon_hp = mon_hp, mon_length = length,
mon_length = length, hero_length = 0,
hero_length = length, mon_time = 0,
mon_time = 0, hero_time = 0;
hero_time = 0; now_mon_hp > 0; //先攻,先攻为怪物和勇士同时出第一刀
if (core.hasSpecial(mon_special, 1)) mon_length = 0;
while (
now_mon_hp > 0
) { ) {
//勇士和怪物的长度 //勇士和怪物的长度
mon_time = mon_length / mon_speed; mon_time = mon_length / mon_speed;
hero_time = hero_length / hero_speed; hero_time = hero_length / hero_speed;
if ( if (
mon_time < hero_time || mon_time == Math.min(mon_time, hero_time)
((mon_time == hero_time) && mon_speed > hero_speed)
) { ) {
//怪物攻击的回合 //怪物攻击的回合
//这里计算怪物攻击时发生的各种变化 //这里计算怪物攻击时发生的各种变化
//伤害与回合增加 //伤害与回合增加
damage += per_damage;
//N连击待定想做成“以x%、y%……攻击力各攻击一次”的形式
if (core.hasSpecial(mon_special, 6)) { if (core.hasSpecial(mon_special, 6)) {
damage += per_damage * enemy.n;
mon_turn += enemy.n; mon_turn += enemy.n;
} else { } else {
damage += per_damage;
mon_turn += 1; mon_turn += 1;
} }
damage += per_mdamage;
//重新为长度赋值 //重新为长度赋值
mon_length = length; mon_length = length;
hero_length = hero_length - mon_time * hero_speed; hero_length = hero_length - mon_time * hero_speed;
} else { } else if (hero_time == Math.min(mon_time, hero_time)) {
//勇士攻击的回合 //勇士攻击的回合
// 这里计算勇士攻击时发生的各种变化 // 这里计算勇士攻击时发生的各种变化
// 伤害与回合数增加 // 伤害与回合数增加
now_mon_hp -= hero_per_damage; now_mon_hp -= hero_per_damage + hero_per_mdamage;
hero_turn += 1; //勇士回合+1如果有勇士每回合多次攻击的情况在这里写判断 hero_turn += 1; //勇士回合+1如果有勇士每回合多次攻击的情况在这里写判断
// 无法战斗计算 // 无法战斗计算
if (hero_turn % 50 == 0) { if (hero_turn % 50 == 0) {
@ -844,16 +1045,15 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
hero_length = length; hero_length = length;
mon_length = mon_length - hero_time * mon_speed; mon_length = mon_length - hero_time * mon_speed;
} }
let hero_diff = {}, let hero_diff = {},
mon_diff = {}; mon_diff = {};
//这里插入汇总勇士和怪物在此回合结束时的情况数值,用以跑条动画读取 //这里插入汇总勇士和怪物在此回合结束时的情况变化hp, atk, def, speed, spell, damage, etc),用以跑条动画读取
heroDiffPerTurn.push(hero_diff); heroDiffPerTurn.push(hero_diff);
enemyDiffPerTurn.push(mon_diff); //将勇士和怪物此回合结束时的属性变动保存到heroPerInfo和enemyPerInfo中用以跑条动画读取 enemyDiffPerTurn.push(mon_diff); //将勇士和怪物此回合结束时的属性变动保存到heroPerInfo和enemyPerInfo中用以跑条动画读取
} }
//下面这些还没修改 //下面这些还没修改
// 连击
if (core.hasSpecial(mon_special, 6)) per_damage *= enemy.n || 2;
// 每回合的反击伤害;反击是按照勇士的攻击次数来计算回合 // 每回合的反击伤害;反击是按照勇士的攻击次数来计算回合
let counterDamage = 0; let counterDamage = 0;
@ -862,14 +1062,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
(enemy.counterAttack || core.values.counterAttack) * hero_atk (enemy.counterAttack || core.values.counterAttack) * hero_atk
); );
// 先攻
if (core.hasSpecial(mon_special, 1)) init_damage += per_damage;
// 破甲
if (core.hasSpecial(mon_special, 7))
init_damage += Math.floor(
(enemy.breakArmor || core.values.breakArmor) * hero_def
);
// 净化 // 净化
if (core.hasSpecial(mon_special, 9)) if (core.hasSpecial(mon_special, 9))
@ -878,7 +1071,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
); );
//上面这些还没修改 //上面这些还没修改
//勇士护盾计算 //勇士护盾计算
let barrier = hero_mdef; let barrier = Math.floor(hero_spell * hero_mhp / 100);
// ------ 支援 ----- // // ------ 支援 ----- //
@ -928,7 +1121,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
} }
if (core.hasSpecial(mon_special, 22)) { if (core.hasSpecial(mon_special, 22)) {
// 固伤 // 固伤
damage += enemy.damage || 0; damage += enemy.damage2 || 0;
} }
return { return {