#经验分享 #伤害计算 #战法机制
一个常见的误判 很多人看到自己一身战法写着"造成伤害+20%",对面又有一条"受到伤害-20%",第一反应是"20减20等于0,两个正好抵消,没影响";同理,身上叠了两条"-15%受到伤害"的减伤效果时,又会怀疑"是不是叠了也会打折,不划算"。这两个直觉其实都不对,而且错的方向还不一样。下面直接用引擎里 core/engine/damagecalculator.py 的真实公式和两组实测数字把这件事说清楚。 同一个人身上,同类型的百分比是加法叠加 用引擎自带的伤害计算器做一次干净测试:兵力5000、双方均无任何加成时,一次普通攻击的基线伤害是 80.0。给防御方叠一条"-15%受到伤害",伤害变成 68.0,正好是 80×(1-0.15)。再叠加一条同类型(bufftype=受到伤害)的"-12.5%受到伤害",伤害变成 58.0——这精确对应加法算法 80×(1-0.15-0.125)=58.0,而不是乘法算法 80×0.85×0.875=59.5。 引擎源码里也写得很直白:同一个人身上、同一个 bufftype 的所有百分比效果,会先逐条 pct += val 累加成一个总百分比,最后才套进伤害公式。也就是说,不管你在同一个人身上叠几层同类型的减伤或者增伤,都不存在"边际递减"——第五个15%和第一个15%一样值钱,放心往上叠。 但攻击方和防御方之间,是乘法关系 另一组测试:攻击方单独带"+20%造成伤害"时,伤害从80变成 96(1.2倍,符合直觉)。但如果防御方同时也带着"-20%受到伤害",最终伤害是 76.8,只有裸基础值的0.96倍——也就是净效果是 -4%,而不是很多人以为的"两个20%互相抵消,等于都没有buff"。 原因就在公式本身:增减伤系数 = (1+攻方百分比) × (1-防方百分比),是两个系数相乘,不是相减。1.2×0.8=0.96,数学上天生就比1小。换句话说,当增伤和减伤数值相等时,防守方永远占一点点便宜,这是乘法复合的必然结果,不是哪个战法刻意设计成这样。 用真实战法验证:乱世奸雄 撞上 威震华夏 光看抽象数字可能没感觉,用真实战法跑一场战斗看看。队伍A:曹操(主将)、张辽、荀彧,骑兵;队伍B:关羽(主将)、张飞、赵云,枪兵;50级、随机种子42模拟一场对局。 战斗记录显示,曹操的自带战法〖乱世奸雄〗本场一共触发了 9次(每回合一次),实际给他自己叠出的"受到伤害降低"是 -26%~-27%(战报中多次出现"-27%已施加"),比图鉴描述的基础区间(9%→18%)还要高——这是战法自带的智力加成继续往上叠的结果,属于正常现象,不是数值错误。同一场对局里,关羽命中〖威震华夏〗时也给自己叠出了 +36%造成伤害提升(本场触发3次)。 把这两个真实数值代入上一节的公式:(1+0.36)×(1-0.27)=0.9928——关羽这36%的增伤,正面撞上曹操27%的减伤时,最终只比"两人都没有任何加成"低了0.72%,而不是很多人以为的"净赚9个百分点"。最终这场对局打成平局:曹操靠着这条自身减伤撑到战斗结束还剩5564/10000兵力,而同样吃到〖乱世奸雄〗团队增伤(+24%造成伤害)却没有自身减伤的张辽、荀彧全部阵亡——同一条战法里,给自己的减伤和给队友的增伤,覆盖范围可能完全不同,别看描述里提到"友军"就以为效果雨露均沾。 实战checklist - 想在同一个人身上叠多层同类型的"受到伤害降低"或"造成伤害提升"(战法、装备、缘分皆可)?放心叠,同类型是加法,不存在"叠了也白叠"的边际递减。 - 但如果想用自己的增伤去"打平"对面的减伤(或者反过来),记住乘法公式意味着数值相等时你总是略亏一点,不要指望正好清零。 - 看图鉴战法描述里给出的百分比区间时,记得那只是基础值,很多战法还会随智力/统率等属性继续往上叠,实战里看到比描述数值更高完全正常。 - 同一条战法可能同时给"自己"和"友军"两种不同 targetside 的buff(比如乱世奸雄),别假设整条战法效果对全队一视同仁,具体要看每一条效果的目标范围。 结语 增伤和减伤看着都是"百分比",但同一个人身上的多条效果是加法、攻防双方之间又是乘法——两条规则混在一起用,才是配将和评估战法强度时最容易被忽略的细节。下次看到"数值对等就能抵消"的说法,可以用这篇的公式自己代一遍数字验证。