在RPG Maker MZ中,伤害公式只会返回和计算最后一个表达式的结果,而前面的表达式虽然会被执行,但是并不会参与伤害计算。 所以当你使用公式 a.atk * ( 100 / ( 100 + b.def ) ); a.gainMP(25),实际上系统只会计算和返回 a.gainMP(25) 的结果,也就是恢复MP的数量,但不会计算前面的 a.atk * ( 100 / ( 100 + b.def ) ), 这就是为什么你会看到造成的伤害变成了0。 因为 a.gainMP(25) 实际上并没有返回伤害值,伤害就被认为是0。 反过来,如果你写成 a.gainMP(25); a.atk * ( 100 / ( 100 + b.def ) ) 的形式,那么就会首先执行 a.gainMP(25) 恢复MP,然后执行并返回 a.atk * ( 100 / ( 100 + b.def ) ) 的伤害值,最终伤害值就是这个公式的计算结果。 综上所述,你需要确保伤害公式是最后一个表达式,这样才能正确地计算和返回伤害值。 ——来自GPT4的解释 |
本帖最后由 catxiaolang 于 2023-8-14 18:54 编辑 千寒-YuukakeID 发表于 2023-8-14 17:21 我在用这个公式后出现了一次卡死的BUG,但目前也只出现了一次,后来没有复现成功。 因为我装了Visu战斗核心插件,而它改写了一些MZ原生的逻辑,不知道是不是两者存在冲突,暂且存疑待更多测试。 还是要谢谢你和大佬。 |
看到一个大佬发的,实测有效,伤害公式里这么写即可: a.gainMp(25); a.atk * ( 100 / ( 100 + b.def ) ) |
暴走的露露 发表于 2023-8-14 06:40 这个测试没效果,控制台跳出一长串文字但是游戏也还在运行下去。 我装了一堆Visu系列插件,不知道是不是插件的原因。 我怀疑Visu插件里面有办法实现只是我没找到,还在研究。 控制台报错如下: 2VisuMZ_1_BattleCore.js:19469 SyntaxError: Invalid or unexpected token at Game_Action.eval (eval at VisuMZ.<computed> (VisuMZ_1_BattleCore.js:1), <anonymous>:23:27) at Game_Action.<computed> [as evalDamageFormulaBattleCore] (VisuMZ_1_BattleCore.js:19469) at Game_Action.<computed>.evalDamageFormula (VisuMZ_1_BattleCore.js:19469) at Game_Action.eval (eval at VisuMZ.<computed> (VisuMZ_1_BattleCore.js:1), <anonymous>:9:24) at Game_Action.<computed>.<computed> (VisuMZ_1_BattleCore.js:19469) at Game_Action.<computed>.<computed> [as makeDamageValue] (VisuMZ_1_BattleCore.js:19469) at Game_Action.apply (rmmz_objects.js:1918) at Game_Action.<computed>.<computed> [as apply] (VisuMZ_1_BattleCore.js:19469) at Function.BattleManager.invokeNormalAction (rmmz_managers.js:2788) at Function.BattleManager.invokeAction (rmmz_managers.js:2780) |
还有一个办法,我汉化了一个吸收技能的插件,可以指定吸血吸蓝吸TP的值 |
本帖最后由 暴走的露露 于 2023-8-13 15:46 编辑 dmg = XXX; dmg X 代入你那段公式。 |
站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作
GMT+8, 2025-2-17 04:27
Powered by Discuz! X3.1
© 2001-2013 Comsenz Inc.