设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 472|回复: 7
打印 上一主题 下一主题

[有事请教] 菜鸟试图实现【普攻恢复MP】时出错(已解决)

[复制链接]

Lv2.观梦者

梦石
0
星屑
936
在线时间
191 小时
注册时间
2023-7-14
帖子
86
跳转到指定楼层
1
发表于 2023-8-14 06:04:32 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 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做是下策。
也是抱着学习的目的提问。

Lv3.寻梦者

梦石
0
星屑
2757
在线时间
676 小时
注册时间
2016-1-6
帖子
335
2
发表于 2023-8-14 06:40:44 | 只看该作者
本帖最后由 暴走的露露 于 2023-8-13 15:46 编辑

dmg = XXX; dmg

X 代入你那段公式。

#搬运工 #插件汉化爱好者 #中年话痨油腻大叔 #零基础代码老白
【论坛内实用MZ插件分享】
我汉化的CGMZ系列 我汉化的其他作者插件
Sun大佬的MZ系列插件
Zel大佬的三十烷MZ汉化系列
107大佬的NRP-MZ汉化系列
更多汉化请查看我发布的主题
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2757
在线时间
676 小时
注册时间
2016-1-6
帖子
335
3
发表于 2023-8-14 06:48:52 | 只看该作者
还有一个办法,我汉化了一个吸收技能的插件,可以指定吸血吸蓝吸TP的值
#搬运工 #插件汉化爱好者 #中年话痨油腻大叔 #零基础代码老白
【论坛内实用MZ插件分享】
我汉化的CGMZ系列 我汉化的其他作者插件
Sun大佬的MZ系列插件
Zel大佬的三十烷MZ汉化系列
107大佬的NRP-MZ汉化系列
更多汉化请查看我发布的主题
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
936
在线时间
191 小时
注册时间
2023-7-14
帖子
86
4
 楼主| 发表于 2023-8-14 07:03:00 | 只看该作者
暴走的露露 发表于 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)
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
936
在线时间
191 小时
注册时间
2023-7-14
帖子
86
5
 楼主| 发表于 2023-8-14 07:42:37 | 只看该作者
本帖最后由 catxiaolang 于 2023-8-14 17:03 编辑


搞定了!
在技能附加的公共事件中做如图设置
原来是这样用变量判断当前行动者的。
还是对引擎原本的功能不够熟悉
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1325
在线时间
66 小时
注册时间
2023-3-12
帖子
61
6
发表于 2023-8-14 17:21:22 | 只看该作者
看到一个大佬发的,实测有效,伤害公式里这么写即可:
a.gainMp(25); a.atk * ( 100 / ( 100 + b.def ) )
云书2群:976623094
欢迎加群学习~
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
936
在线时间
191 小时
注册时间
2023-7-14
帖子
86
7
 楼主| 发表于 2023-8-14 18:34:54 | 只看该作者
本帖最后由 catxiaolang 于 2023-8-14 18:54 编辑
千寒-YuukakeID 发表于 2023-8-14 17:21
看到一个大佬发的,实测有效,伤害公式里这么写即可:
a.gainMp(25); a.atk * ( 100 / ( 100 + b.def ) ) ...


我在用这个公式后出现了一次卡死的BUG,但目前也只出现了一次,后来没有复现成功。
因为我装了Visu战斗核心插件,而它改写了一些MZ原生的逻辑,不知道是不是两者存在冲突,暂且存疑待更多测试。
还是要谢谢你和大佬。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
936
在线时间
191 小时
注册时间
2023-7-14
帖子
86
8
 楼主| 发表于 2023-8-14 20:08:45 | 只看该作者
在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的解释
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-4 08:41

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表