
ESGO动画速度兼容性重构与更好的剑DPS属性
这是我个人对ESGO(https://www.nexusmods.com/witcher3/mods/1185)的修改版本,旨在提高与其他模组的兼容性,这些模组提供了改变快速/强力攻击、旋转以及闪避/躲移动画速度的方法。此外,还包括更详细和
查看大图重构了ESGO - Combat.ws中的动画速度模块,通过引入额外的可选浮点参数mul,使得其他模组能够添加额外的动画速度变更。这一改进还带来了额外的好处,我们可以利用返回值让其他地方读取每个动作当前的动画速度乘数。可选布尔参数readOnly使得动画速度仅被计算和返回而不被设置,这样在读取动画速度乘数时不会产生任何意外副作用。由于这些变更都是可选变量,且返回值原先未被使用,这些改动与基础版ESGO完全兼容。你可以直接替换ESGO - Combat.ws文件为我的修改版本,不会造成任何问题。不过这些改动的真正价值在于,当你想进行自己的调整并需要更好地访问这些函数时。
比较原版FastAttackSpeedModule:
// 修改快速攻击动画速度的函数
public final function FastAttackSpeedModule( out FastAtkSpdModID : int )
{
// 如果攻击速度需要基于技能和属性进行计算
如果(技能依赖())
{
// 如果玩家可以使用快速攻击伤害技能且不是希里
if(thePlayer.CanUseSkill(S_Sword_s21) && !thePlayer.IsCiri())
{
// 如果玩家无法使用剃刀专注肾上腺素技能
如果(!thePlayer.CanUseSkill(S_Sword_s20))
{
// 根据基础行动速度和快速攻击伤害技能来倍增攻击速度
FastAtkSpdMultID = thePlayer.SetAnimationSpeedMultiplier(BaseActionSpeed() + thePlayer.GetSkillLevel(S_Sword_s21) * FAI(), FastAtkSpdMultID);
// 计时器用于将动画速度重置为原始值,防止叠加导致速度异常缓慢或过快
thePlayer.AddTimer( 'RemFastAtkSpdMultID', 0.2 );
}
// 如果玩家可以使用剃刀专注技能
否则
{
// 根据基础行动速度、快速攻击伤害技能和肾上腺素点数来倍增攻击速度
FastAtkSpdMultID = thePlayer.SetAnimationSpeedMultiplier(BaseActionSpeed() + (thePlayer.GetSkillLevel(S_Sword_s21) * FAI()) + (thePlayer.GetStat(BCS_Focus)*APIF()) , FastAtkSpdMultID);
// 计时器用于将动画速度重置为原始值,防止叠加导致速度异常缓慢或过快
thePlayer.AddTimer( 'RemFastAtkSpdMultID', 0.2 );
}
}
否则
// 如果玩家无法使用快速攻击伤害技能且不是希里
if (!thePlayer.CanUseSkill(S_Sword_s21) && !thePlayer.IsCiri())
{
// 如果玩家无法使用剃刀专注肾上腺素技能
如果(!玩家.可以使用技能(S_剑_s20))
{
// 基于基础行动速度乘以攻击速度
FastAtkSpdMultID = thePlayer.SetAnimationSpeedMultiplier(BaseActionSpeed(), FastAtkSpdMultID);
// 计时器用于将动画速度重置为原始值,以防止叠加导致速度异常缓慢或飞快
thePlayer.AddTimer( 'RemFastAtkSpdMultID', 0.2 );
}
// 如果玩家可以使用剃刀专注技能
否则
{
// 根据基础行动速度和肾上腺素点数倍增攻击速度
FastAtkSpdMultID = thePlayer.SetAnimationSpeedMultiplier(BaseActionSpeed() + (thePlayer.GetStat(BCS_Focus)*APIF()) , FastAtkSpdMultID);
// 计时器用于将动画速度重置为原始值,防止叠加导致速度异常缓慢或过快
thePlayer.AddTimer( 'RemFastAtkSpdMultID', 0.2 );
}
}
}
// 如果攻击速度需要手动设置,而不是基于不同值计算
其他
{
// 将攻击速度乘以游戏内滑块设置值,而非技能和属性
FastAtkSpdMultID = thePlayer.SetAnimationSpeedMultiplier( FAIN(), FastAtkSpdMultID);
// 计时器用于将动画速度重置为原始值,以防止叠加导致速度异常缓慢或过快
thePlayer.AddTimer( 'RemFastAtkSpdMultID', 0.2 );
}
}
与我的新装备:
// 修改快速攻击动画速度的函数
public final function FastAttackSpeedModule( out FastAtkSpdMultID : int, optional mul : float, optional readOnly : bool ) : float
{
// 如果攻击速度需要基于技能和属性来计算
如果(技能依赖())
{
mul += 基础行动速度();
如果(!玩家是希里())
{
if(thePlayer.CanUseSkill(S_Sword_s21)) // 肌肉记忆
mul += thePlayer.GetSkillLevel(S_Sword_s21) * FAI();
如果(thePlayer.CanUseSkill(S_Sword_s20)) // 锐利专注
mul += thePlayer.GetStat(BCS_Focus)*APIF();
}
}
// 如果攻击速度需要手动设置而非基于不同数值计算
否则
{
// 将攻击速度乘以游戏中滑块设置的值,而非技能和属性
mul += FAIN();
}
如果(非只读)
{
FastAtkSpdMultID = thePlayer.SetAnimationSpeedMultiplier(mul, FastAtkSpdMultID);
// 计时器用于将动画速度重置为原始值,防止叠加导致速度变得异常缓慢或飞快
thePlayer.AddTimer( 'RemFastAtkSpdMultID', 0.2 );
}
返回 mul;
}
其他动画速度模块也进行了类似的修改。
注意我已重新添加了旋转速度模块,该模块在最新版ESGO中被移除了,原因不明。
如果你不喜欢这个模块,可以通过对比最新版ESGO,找到本模组中出现的"whirl"而原版没有的部分,将其移除。
一个关于如何与其他模组配合使用的示例位于game/player/r4player.ws中,如果你的模组修改了攻击速度并与ESGO合并,那么你可能会看到类似这样的内容(为了清晰起见,我已删减了多行):
case BS_Pressed :
{
//添加典籍
如果(玩家拥有增益效果(EET_刺客))
{
speedMla = thePlayer.SetAnimationSpeedMultiplier(1+MinF(0.5,killspeed));
thePlayer.AddTimer( 'rstspeedMla', 0.2 );
}
//ESGO - 开始
战斗.快速攻击速度模块(快速攻击速度倍率ID);
//ESGO - 结束
} 中断;
这将导致ESGO覆盖之前模组的攻击速度修改,反之亦然,具体取决于你合并它们各自代码段的顺序。
现在你只需要:
case BS_Pressed :
{
//ESGO + 添加法术书自定义合并 - 开始
如果(玩家拥有增益效果(EET_刺客))
战斗.快速攻击速度模块(快速攻击速度倍数ID, 最小值(0.5,击杀速度));
战斗.快速攻击速度模块(快速攻击速度倍率ID);
//ESGO + 添加法术书自定义合并 - 结束
} 中断;
可选地,如果你有多个除了ESGO之外影响攻击速度的模组,那么你可以分配一个新的变量mul并累积这些变化。当然,这是一个自定义合并,脚本合并工具无法为你解决,所以如果你的模组列表很长,你可能需要花费一些精力。或者,你可以自定义预合并所有影响攻击速度的模组。
我做出的第二项改动是角色属性弹窗中的剑伤害部分。现在它会分别显示快速攻击DPS和强力攻击DPS,采用与当前/最大生命值/耐力/毒性相同的显示方式。虽然这是个取巧的解决方案,但我不想并排显示,那样会导致界面过宽且难看。原先的角色属性弹窗会显示快速攻击和强力攻击DPS的平均值,且不考虑攻速修正。如果你只专注一种攻击风格,或使用了ESGO等模组带来的攻速修正,这个数值就完全没用。*现在你可以真正进行DPS的精细化调整了,不过实战中你并不会持续攻击,而且如果有耐力减速惩罚,你的DPS也会随时间下降。
我还为剑的DPS面板添加了更详细的统计数据,即快速攻击和强力攻击的攻击力加成和攻击计时器。请注意,快速攻击和强力攻击的基础攻击计时器分别为0.6秒和1.1秒。我也可以显示攻击速度加成,但太懒了没加。如果你能读取.ws文件,那么你可以轻松地自己添加,相关文件是game/gui/popups/CharacterStatsPopup.ws。
我做的一个小改动是让“x%几率中毒”的剑属性在几率为0%时不显示。
- 请注意,若要在角色属性中正确显示攻击速度,其他模组中的攻击速度修正也需在
game/player/playerWitcher.ws文件中进行计算。这与game/player/r4player.ws中的改动是分开的,后者会影响战斗中的实际攻击速度。我在文件中留了一个示例,只需查找以下代码行:
mul = 0.0f;
//如果玩家拥有EET_Assassin增益效果,mul增加MinF(0.5,killspeed)
playerOffenseStats.fastAtkTimer = 0.6 / Combat.FastAttackSpeedModule(FastAtkSpdMultID, mul, true);
mul = 0.0f;
//如果玩家拥有EET_Assassin增益效果,mul += MinF(1,killspeed);
playerOffenseStats.strongAtkTimer = 1.1 / Combat.HeavyAttackSpeedModule(HeavyAtkSpdMultID, mul, true);
正在加载版本记录…

正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。