招魂术算法

录入:EvilP 作者: 翻译:
录入时间:2025-05-09 01:58:24 最后修改时间:2025-07-16 19:22:41
报错页面:传送门

招魂算法介绍

按游戏源代码里的算法
private void ApplyNecromancyBonus(TransferSide _winnerSide, int _sumLosersHp, bool _checkFaction) {
     Dictionary dictionary = new Dictionary();
     foreach (TransferUnit transferUnit in _winnerSide.units) {
         if ((!_checkFaction || string.Equals(transferUnit.logicConfig.fraction, "undead")) && transferUnit.stacks > 0) {
             string configSid = transferUnit.configSid;
             TransferUnit transferUnit2;
             if (!dictionary.TryGetValue(configSid, out transferUnit2) || transferUnit.stacks > transferUnit2.stacks) {
                 dictionary[configSid] = transferUnit;
            }
        }
    }
     if (dictionary.Count == 0) {
         return;
    }
     int num = (int)((float)_sumLosersHp * Formulas.CalculateNecromancyMultiplyByStack(dictionary.Count));
     foreach (TransferUnit transferUnit3 in dictionary.Values) {
         int num2 = num / (int)((float)(transferUnit3.logicConfig.stats.hp * (transferUnit3.logicConfig.tier + 3)) * 1.2f);
         transferUnit3.stacks += num2;
    }
}
//==============================
public static float CalculateNecromancyMultiplyByStack(int _countStack) {
     return Formulas.necromancyMultiply[_countStack];
}
//==============================
public static readonly float[] necromancyMultiply = new float[] {
     0f,
     2.08f,
     1.45f,
     1.25f,
     1.135f,
     1.072f,
     1.03f,
     1f
}
  • 理论上亡灵、元素凝形、构装体不计入招魂术驱役HP,但是测试版中没做任何种族标签判定;
  • 首先计算胜利方存活兵种的种类数量,升级和没升级,两种升级之间都独立计算;
  • 然后按计算阵亡方可以驱役的HP量,乘以招魂术比例,再乘一个和胜方兵种种类数量相关的参数,1到7种分别是:2.08;1.45;1.25;1.135;1.072;1.03;1。
  • 上述参数的算法大概接近于 1 + (0.18*(7-n)/n),不过实际代码中用的是定值而不是公式。
  • 接着每种存活种类按以下公式计算,需要的注意的是实际上计算时不是按最初公布时说的平分HP来计算的,而是使用之前算出的有效HP每个兵种遍历计算一次:
  • 有效HP量/向下取整((兵种HP*(兵种等阶+3)*1.2)),最终结果向下取整;
  • 代码和测试基于测试版,测试时间2025/05/09。

计算器

数量/Quantity:

可驱役阵亡生命值:  Total converted Fallen HP
招魂术驱役比例值:% Necromancy Power Ratio
胜方存留种类数量:  Surviving unit types count
自定义兵种生命值: Customized HP
自定义兵种等阶:  Customized Tier