Project1

标题: 菜鸟试图实现【普攻恢复MP】时出错(已解决) [打印本页]

作者: catxiaolang    时间: 2023-8-14 06:04
标题: 菜鸟试图实现【普攻恢复MP】时出错(已解决)
本帖最后由 catxiaolang 于 2023-8-14 07:43 编辑

设想普攻能恢复25点MP,

当把原本的伤害公式
a.atk * ( 100 / ( 100 + b.def ) )

写成
a.atk * ( 100 / ( 100 + b.def ) ); a.gainMp(25)


普攻时MP能够恢复,但是造成的伤害变成0了,
不知道错在哪,
遂来请教各路前辈,正确的实现方法是怎样呢?

最好施法者是能够被自动判断的,
如果行不通,用公共事件固定角色ID做是下策。
也是抱着学习的目的提问。
作者: 暴走的露露    时间: 2023-8-14 06:40
本帖最后由 暴走的露露 于 2023-8-13 15:46 编辑

dmg = XXX; dmg

X 代入你那段公式。


作者: 暴走的露露    时间: 2023-8-14 06:48
还有一个办法,我汉化了一个吸收技能的插件,可以指定吸血吸蓝吸TP的值
作者: catxiaolang    时间: 2023-8-14 07:03
暴走的露露 发表于 2023-8-14 06:40
dmg = XXX; dmg

X 代入你那段公式。

这个测试没效果,控制台跳出一长串文字但是游戏也还在运行下去。
我装了一堆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)
作者: catxiaolang    时间: 2023-8-14 07:42
本帖最后由 catxiaolang 于 2023-8-14 17:03 编辑


搞定了!
在技能附加的公共事件中做如图设置
原来是这样用变量判断当前行动者的。
还是对引擎原本的功能不够熟悉
作者: 千寒-YuukakeID    时间: 2023-8-14 17:21
看到一个大佬发的,实测有效,伤害公式里这么写即可:
a.gainMp(25); a.atk * ( 100 / ( 100 + b.def ) )
作者: catxiaolang    时间: 2023-8-14 18:34
本帖最后由 catxiaolang 于 2023-8-14 18:54 编辑
千寒-YuukakeID 发表于 2023-8-14 17:21
看到一个大佬发的,实测有效,伤害公式里这么写即可:
a.gainMp(25); a.atk * ( 100 / ( 100 + b.def ) ) ...


我在用这个公式后出现了一次卡死的BUG,但目前也只出现了一次,后来没有复现成功。
因为我装了Visu战斗核心插件,而它改写了一些MZ原生的逻辑,不知道是不是两者存在冲突,暂且存疑待更多测试。
还是要谢谢你和大佬。
作者: catxiaolang    时间: 2023-8-14 20:08
在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的解释




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1