战斗函数修改

This commit is contained in:
itcfangye 2025-02-10 20:56:37 +08:00
parent a0cbb8cdb8
commit fcbb8add3e

View File

@ -524,222 +524,223 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
}, },
"enemys": { "enemys": {
"getSpecials": function () { "getSpecials": function () {
// 获得怪物的特殊属性,每一行定义一个特殊属性。 // 获得怪物的特殊属性,每一行定义一个特殊属性。
// 分为五项,第一项为该特殊属性的数字,第二项为特殊属性的名字,第三项为特殊属性的描述 // 分为五项,第一项为该特殊属性的数字,第二项为特殊属性的名字,第三项为特殊属性的描述
// 第四项为该特殊属性的颜色,可以写十六进制 #RRGGBB 或者 [r,g,b,a] 四元数组 // 第四项为该特殊属性的颜色,可以写十六进制 #RRGGBB 或者 [r,g,b,a] 四元数组
// 第五项为该特殊属性的标记;目前 1 代表是地图类技能(需要进行遍历全图) // 第五项为该特殊属性的标记;目前 1 代表是地图类技能(需要进行遍历全图)
// 名字和描述可以直接写字符串也可以写个function将怪物传进去 // 名字和描述可以直接写字符串也可以写个function将怪物传进去
return [ return [
[1, "先攻", "怪物首先攻击", "#ffcc33"], [1, "先攻", "怪物首先攻击", "#ffcc33"],
[3, "坚固", "怪物防御不小于角色攻击-1", "#c0b088"], [2, "魔攻", "怪物无视角色的防御", "#bbb0ff"],
[ [3, "坚固", "怪物防御不小于角色攻击-1", "#c0b088"],
6, [
function (enemy) { 6,
return (enemy.n || "") + "连击"; function (enemy) {
}, return (enemy.n || "") + "连击";
function (enemy) { },
return "怪物每回合攻击" + (enemy.n || 4) + "次"; function (enemy) {
}, return "怪物每回合攻击" + (enemy.n || 4) + "次";
"#ffee77", },
], "#ffee77",
[ ],
7, [
"破甲", 7,
function (enemy) { "破甲",
return ( function (enemy) {
"战斗前,怪物附加角色防御的" + return (
Math.floor( "战斗前,怪物附加角色防御的" +
100 * (enemy.breakArmor || core.values.breakArmor || 0) Math.floor(
) + 100 * (enemy.breakArmor || core.values.breakArmor || 0)
"%作为伤害" ) +
); "%作为伤害"
}, );
"#88c0ff", },
], "#88c0ff",
[ ],
8, [
"反击", 8,
function (enemy) { "反击",
return ( function (enemy) {
"战斗时,怪物每回合附加角色攻击的" + return (
Math.floor( "战斗时,怪物每回合附加角色攻击的" +
100 * (enemy.counterAttack || core.values.counterAttack || 0) Math.floor(
) + 100 * (enemy.counterAttack || core.values.counterAttack || 0)
"%作为伤害,无视角色防御" ) +
); "%作为伤害,无视角色防御"
}, );
"#ffaa44", },
], "#ffaa44",
[ ],
9, [
"净化", 9,
function (enemy) { "净化",
return ( function (enemy) {
"战斗前,怪物附加角色护盾的" + return (
(enemy.purify || core.values.purify) + "战斗前,怪物附加角色护盾的" +
"倍作为伤害" (enemy.purify || core.values.purify) +
); "倍作为伤害"
}, );
"#80eed6", },
], "#80eed6",
[10, "模仿", "怪物的攻防和角色攻防相等", "#b0c0dd"], ],
[ [10, "模仿", "怪物的攻防和角色攻防相等", "#b0c0dd"],
11, [
"吸血", 11,
function (enemy) { "吸血",
return ( function (enemy) {
"战斗前,怪物首先吸取角色的" + return (
Math.floor(100 * enemy.vampire || 0) + "战斗前,怪物首先吸取角色的" +
"%生命(约" + Math.floor(100 * enemy.vampire || 0) +
Math.floor((enemy.vampire || 0) * core.getStatus("hp")) + "%生命(约" +
"点)作为伤害" + Math.floor((enemy.vampire || 0) * core.getStatus("hp")) +
(enemy.add ? ",并把伤害数值加到自身生命上" : "") "点)作为伤害" +
); (enemy.add ? ",并把伤害数值加到自身生命上" : "")
}, );
"#dd4448", },
], "#dd4448",
[ ],
12, [
"中毒", 12,
"战斗后,角色陷入中毒状态,每一步损失生命" + "中毒",
core.values.poisonDamage + "战斗后,角色陷入中毒状态,每一步损失生命" +
"点", core.values.poisonDamage +
"#99ee88", "点",
], "#99ee88",
[ ],
13, [
"衰弱", 13,
"战斗后,角色陷入衰弱状态,攻防暂时下降" + "衰弱",
(core.values.weakValue >= 1 "战斗后,角色陷入衰弱状态,攻防暂时下降" +
? core.values.weakValue + "点" (core.values.weakValue >= 1 ?
: parseInt(core.values.weakValue * 100) + "%"), core.values.weakValue + "点" :
"#f0bbcc", parseInt(core.values.weakValue * 100) + "%"),
], "#f0bbcc",
[ ],
14, [
"诅咒", 14,
"战斗后,角色陷入诅咒状态,战斗无法获得金币和经验", "诅咒",
"#bbeef0", "战斗后,角色陷入诅咒状态,战斗无法获得金币和经验",
], "#bbeef0",
[ ],
15, [
"领域", 15,
function (enemy) { "领域",
return ( function (enemy) {
"经过怪物周围" + return (
(enemy.zoneSquare ? "九宫格" : "十字") + "经过怪物周围" +
"范围内" + (enemy.zoneSquare ? "九宫格" : "十字") +
(enemy.range || 1) + "范围内" +
"格时自动减生命" + (enemy.range || 1) +
(enemy.zone || 0) + "格时自动减生命" +
"点" (enemy.zone || 0) +
); "点"
}, );
"#c677dd", },
], "#c677dd",
[16, "夹击", "经过两只相同的怪物中间,角色生命值变成一半", "#bb99ee"], ],
[ [16, "夹击", "经过两只相同的怪物中间,角色生命值变成一半", "#bb99ee"],
17, [
"仇恨", 17,
"战斗前,怪物附加之前积累的仇恨值作为伤害;战斗后,释放一半的仇恨值。(每杀死一个怪物获得" + "仇恨",
(core.values.hatred || 0) + "战斗前,怪物附加之前积累的仇恨值作为伤害;战斗后,释放一半的仇恨值。(每杀死一个怪物获得" +
"点仇恨值)", (core.values.hatred || 0) +
"#b0b666", "点仇恨值)",
], "#b0b666",
[ ],
18, [
"阻击", 18,
function (enemy) { "阻击",
return ( function (enemy) {
"经过怪物周围" + return (
(enemy.zoneSquare ? "九宫格" : "十字") + "经过怪物周围" +
"时自动减生命" + (enemy.zoneSquare ? "九宫格" : "十字") +
(enemy.repulse || 0) + "时自动减生命" +
"点,同时怪物后退一格" (enemy.repulse || 0) +
); "点,同时怪物后退一格"
}, );
"#8888e6", },
], "#8888e6",
[19, "自爆", "战斗后角色的生命值变成1", "#ff6666"], ],
[20, "无敌", "角色无法打败怪物,除非拥有十字架", "#aaaaaa"], [19, "自爆", "战斗后角色的生命值变成1", "#ff6666"],
[ [20, "无敌", "角色无法打败怪物,除非拥有十字架", "#aaaaaa"],
21, [
"退化", 21,
function (enemy) { "退化",
return ( function (enemy) {
"战斗后角色永久下降" + return (
(enemy.atkValue || 0) + "战斗后角色永久下降" +
"点攻击和" + (enemy.atkValue || 0) +
(enemy.defValue || 0) + "点攻击和" +
"点防御" (enemy.defValue || 0) +
); "点防御"
}, );
], },
[ ],
22, [
"固伤", 22,
function (enemy) { "固伤",
return ( function (enemy) {
"战斗前,怪物对角色造成" + return (
(enemy.damage || 0) + "战斗前,怪物对角色造成" +
"点固定伤害,未开启负伤时无视角色护盾。" (enemy.damage || 0) +
); "点固定伤害,未开启负伤时无视角色护盾。"
}, );
"#ff9977", },
], "#ff9977",
[23, "重生", "怪物被击败后,角色转换楼层则怪物将再次出现", "#a0e0ff"], ],
[ [23, "重生", "怪物被击败后,角色转换楼层则怪物将再次出现", "#a0e0ff"],
24, [
"激光", 24,
function (enemy) { "激光",
return "经过怪物同行或同列时自动减生命" + (enemy.laser || 0) + "点"; function (enemy) {
}, return "经过怪物同行或同列时自动减生命" + (enemy.laser || 0) + "点";
"#dda0dd", },
], "#dda0dd",
[ ],
25, [
"光环", 25,
function (enemy) { "光环",
return ( function (enemy) {
(enemy.range != null return (
? (enemy.haloSquare ? "该怪物九宫格" : "该怪物十字") + (enemy.range != null ?
enemy.haloRange + (enemy.haloSquare ? "该怪物九宫格" : "该怪物十字") +
"格范围内" enemy.haloRange +
: "同楼层所有") + "格范围内" :
"怪物生命提升" + "同楼层所有") +
(enemy.hpBuff || 0) + "怪物生命提升" +
"%,攻击提升" + (enemy.hpBuff || 0) +
(enemy.atkBuff || 0) + "%,攻击提升" +
"%,防御提升" + (enemy.atkBuff || 0) +
(enemy.defBuff || 0) + "%,防御提升" +
"%" + (enemy.defBuff || 0) +
(enemy.haloAdd ? "可叠加" : "不可叠加") "%" +
); (enemy.haloAdd ? "可叠加" : "不可叠加")
}, );
"#e6e099", },
1, "#e6e099",
], 1,
[ ],
26, [
"支援", 26,
"当周围一圈的怪物受到攻击时将上前支援,并组成小队战斗。", "支援",
"#77c0b6", "当周围一圈的怪物受到攻击时将上前支援,并组成小队战斗。",
1, "#77c0b6",
], 1,
[ ],
27, [
"捕捉", 27,
function (enemy) { "捕捉",
return ( function (enemy) {
"当走到怪物周围" + return (
(enemy.zoneSquare ? "九宫格" : "十字") + "当走到怪物周围" +
"时会强制进行战斗。" (enemy.zoneSquare ? "九宫格" : "十字") +
); "时会强制进行战斗。"
}, );
"#c0ddbb", },
], "#c0ddbb",
]; ],
}, ];
},
"getEnemyInfo": function (enemy, hero, x, y, floorId) { "getEnemyInfo": function (enemy, hero, x, y, floorId) {
// 获得某个怪物变化后的数据;该函数将被伤害计算和怪物手册使用 // 获得某个怪物变化后的数据;该函数将被伤害计算和怪物手册使用
// 例如:坚固、模仿、仿攻等等 // 例如:坚固、模仿、仿攻等等
@ -907,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"),
@ -935,8 +937,11 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
//勇士属性取整 //勇士属性取整
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"))
@ -964,12 +969,15 @@ 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 = 0;
if (core.hasSpecial(mon_special, 2)) {
per_mdamage = Math.floor(mon_atk * (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,
@ -989,7 +997,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
hero_time = 0; now_mon_hp > 0; hero_time = 0; now_mon_hp > 0;
) { ) {
//勇士和怪物的长度 //勇士和怪物的长度。这里需要把if else改成轮次的if和math.min
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 (
@ -1027,7 +1035,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
} }
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中用以跑条动画读取
} }
@ -1059,7 +1067,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
); );
//上面这些还没修改 //上面这些还没修改
//勇士护盾计算 //勇士护盾计算
let barrier = hero_mdef; let barrier = Math.floor(hero_spell * hero_mhp / 100);
// ------ 支援 ----- // // ------ 支援 ----- //