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

Project1

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

[交流讨论] 【经验交流】用公式模拟元素伤害(包括多元素的乘算)

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1126
在线时间
209 小时
注册时间
2023-7-14
帖子
86
跳转到指定楼层
1
发表于 2024-1-30 13:37:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 catxiaolang 于 2024-2-1 08:21 编辑

原本是发帖提问,现已自行解决,转化为经验交流帖,主贴保留原问题,解决方案在2楼

=========================【原帖】=========================

                visu技能状态核心可以使状态产生基于公式的持续伤害,
                visu元素状态核心可以将一名角色的所有动作强制附魔成该元素。
               
                然而经测试发现,这里所说的“角色所有动作”并不包括状态的持续伤害。
                visu提供的持续伤害状态并不拥有元素属性。
               
                由于不知道Yanfly团队未来是否会更新对该功能的支持,
                出于使用需要,我试着将持续伤害受到元素伤害和承伤倍率的影响也写进公式,
                得知了以下几个相关函数:
                       
                        加算,默认值为0
                        user.getDealtElementPlus(x)
                        target.elementPlus(x)
                       
                        乘算,默认值为1
                        user.getDealtElementRate(x)
                        target.elementRate(x)
                       
                        额外加算,默认值为0
                        user.getDealtElementFlat(x)
                        target.elementFlat(x)
                       
                试着将这些函数所代表的综合影响写进伤害公式,
                将公式结构变成:
                        基础伤害 * 使用者元素伤害倍率 * 受伤者元素承伤倍率
                        就像这样(以ID为15的元素,伤害系数为1.0mat的技能为例):
               
a.mat * ((1 + user.getDealtElementPlus(15)) * user.getDealtElementRate(15) + user.getDealtElementFlat(15)) * ((1 + target.elementPlus(15)) * target.elementRate(15) + target.elementFlat(15))
                       
                然而这样写存在两个问题:
                        1.忽略了强制倍率(备注标签<Force Received Element id Rate: x%>和及其它相关变体)对伤害的影响,
                                这导致直接伤害和持续伤害呈现两种截然不同的结果,
                                我希望改善这种状况,但是我不知道强制倍率在脚本中的写法;
                        2.这样写使得公式变得过长,想知道MZ或Visu中是否存在用于直接表示承伤比例和伤害倍率最终计算结果的函数。

Lv3.寻梦者

梦石
0
星屑
1126
在线时间
209 小时
注册时间
2023-7-14
帖子
86
2
 楼主| 发表于 2024-1-31 10:25:52 | 只看该作者
本帖最后由 catxiaolang 于 2024-2-1 14:50 编辑

target.elementRate(x)表示的便是RPGmaker的【属性有效度】,即承伤倍率。

如果你的游戏设计中,一个技能包含多种元素,并且它们是以乘算计算的(类似宝可梦对弱点倍率的计算),可以在伤害公式后面乘以以下模块



【未使用插件时】

在伤害公式后乘以以下模块:

b.elementRate(x)

(x替换为希望附加的元素id,可以以此方法多次附加不同元素)

它的原理是把对元素有效度的计算从游戏机制移到公式中,
【注意】如果用此方法,则不要再把该技能(或物品)设置成这个元素(否则会重复计算)



【使用了Visu元素状态核心时】

在伤害公式后乘以以下内容:

((1 + a.getDealtElementPlus(x)) * a.getDealtElementRate(x) + a.getDealtElementFlat(x)) * b.elementRate(x)

(x替换为希望附加的元素id,比原版多的部分是计算攻击者的元素增伤,这部分是由三种加成规则构成的,所以看起来比较复杂)

如果用于visu技能状态核心提供的持续伤害功能,在写法上需要把a.替换为user.,把b.替换为target.
就像这样:

((1 + user.getDealtElementPlus(x)) * user.getDealtElementRate(x) + user.getDealtElementFlat(x)) * target.elementRate(x)



【补充说明】

这个方法并不是完美的,它仅仅只实现对伤害的模拟,它无法正确处理元素吸收和元素反射(如果有的话)。
对元素免疫则只能处理以该元素有效度为0%的方式实现的情况。

这仅仅只是一个学习阶段中的心得交流,如果有更好的方法非常欢迎指教。


===========【原帖中伤害公式的优化】===========

user.mat * ((1 + user.getDealtElementPlus(15)) * user.getDealtElementRate(15) + user.getDealtElementFlat(15)) * target.elementRate(15)
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-24 18:24

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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