XML近战伤害修复

XML近战伤害修复

(需要Harmony)允许使用items.xml中的近战武器,并提供可定制的伤害效果。详细指南请参阅README文件。特别适用于自定义非线性武器,当您想快速创建一把武器时非常有用。

实用工具

介绍

我为你展示仅使用单个 items.xml 方法来计算伤害的简单修复方法。
这样你就不必围绕制作模板、碎片和加权属性进行创作,直到你获得一件还算过得去的武器。

该功能最初是为《剑与火枪》设计的正确属性补救方案。具体针对刺刀步枪和枪托近战中的近战防御机制。

这样我们就能在不依赖原生伤害计算的情况下定义特定的属性。
我希望这能帮助模组制作者轻松地将简单不复杂的武器整合到他们的模组中,而无需成为组装武器的建筑师,也无需研究量子物理来计算一个具有可用属性的正常武器。

我也希望这能帮助到像《全面入侵3》这样的开发者,让他们最终整合 FUN 武器,这些武器不再受这种晦涩的属性汇编系统的束缚。

旧方法

在此之前,我们能实现这一点,MOD 制作者们通过两种方式摸索:

  1. 使用非常重的武器,并借助额外的敏捷或运动技能来平衡;
  2. 在多人游戏模式中,为特定职业、武器或游戏模式设置伤害倍数。
  3. 使用修改过的 CalculateDamage() 方法,该方法能够通过再次乘法或排除特定问题区域来修改伤害,但在针对不同武器应用可变伤害方面非常有限,或者需要依赖额外代码来区分不同武器。

结果还算有些希望,但之后总会跟进一些不相关的问题。

已知旧方法的问题:

  • 在投掷重型武器时闪现快速敌人(1)
  • 装备长矛/火枪时,踢击/撞击造成极端伤害 (2)
  • 在单人游戏中无用 (1, 2)
  • 无视护甲的伤害计算 (3)
  • 伤害计算忽略速度 (3)
  • 伤害计算忽略角色技能(3)
  • 伤害计算忽略其他计算(2、3)
  • 每种武器的伤害计算数值不再变化 (2, 3)

新方法/数学

原本的方法只考虑了重量、武器长度、伤害类型(切割、钝击、穿刺)以及玩家的技能,通常导致近战武器威力混乱且较弱。

这一部分已被我的计算覆盖,改为按预期使用你通常的 items.xml 物品中的 swing_damage 和 thrust_damage 参数。

由于《霸主》的近战系统依赖于一个名为 SwingDamageFactor(挥砍伤害系数)或 ThrustDamageFactor(刺击伤害系数)的状态来计算所有效果,而你不能在 .xml 中直接设置该状态,因此我不得不采取迂回方法来解决这个问题。

在我的代码中,我们简单地将伤害除以 20,然后用得到的变量作为新的伤害因子。

一把剑的挥砍伤害系数通常在 2.5 到 5 之间,而刺击伤害系数大约在 1 到 4 之间。

根据你的剑应该有多强,你可以将伤害设置为 50/20 或 100/80。当然也可以设置更高。

我们之所以使用除以 20 而不是除以 10,是因为我认为使用 20 的话,你在游戏中的伤害与你背包中物品上显示的近似伤害会更加一致。

说 80 这个数值平均造成 80 点伤害仍然不是 100% 准确,但这样计算起来更简单。

我也强烈建议你为长矛使用较高的数值,而不是原版的数值。因为这些原版的太差劲了。

限制

它不影响任何已制作的武器或已创建的制造配方。这包括几乎所有原生武器。

每个 ItemComponent 中的每种武器只能使用 1 个 Item_Usage。

这意味着你仍然可以制作可切换的单手/双手剑,或者为你的火枪添加近战功能,并使用长柄武器的刺击。你甚至可以根据不同的使用方式为这些武器设置不同的属性。

然而,某些动画组在特定情况下创造独特动画的组合却不尽如人意,这是无法实现的。

在此示例中,某些长柄武器在马背上和步战时握持方式不同。但相关设定仅在骑乘状态下生效。

为此,您需要研究 item_usage_sets.xml,以找到最适合您武器类型的 item_usage。

游戏特定功能可能要求您使用的武器处于特定的 item_usage 状态,例如旗帜。这些功能要求您移除 "requires_no_shield" 标签。

所以,如果你的物品没有 item_usage,但你希望它能与横幅一起使用,你可能需要创建一个新的 item_usage

学分

  • TaleWorlds(当然是基础游戏和代码)
  • 达斯杀手(开发重新计算伤害的脚本和方法)
  • 提示:调和(提供编辑方法的机制)
  • order_without_power (在模组开发 Discord 中为排查问题提供了巨大帮助)