招魂术算法
录入: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: