
先看程序逻辑:
法抗 = Math.min(50,20 + 额外法抗*0.8)
实际伤害 =法术伤害 * (1 - 法抗 * 0.01)
程序逻辑解读:
Math.min(),表示只取括号中的最小值
也就是说,如果20+额外法抗*0.8>50,那么只会选取50
可以发现以上法抗中没有写出百分比,但到了伤害逻辑中法抗仍乘上了0.01
其原因是在编程语言中,%(百分号)有着其他作用,会产生歧义而导致运行错误,而只要最终的实际伤害是正确的,前面程序怎么写都是不重要的。
基于程序逻辑转换成人话:
程序逻辑固然是正确的,但不便于表述,又或者显示面板的语词定义比较“灵活变通”,而玩家也会因此产生歧义。
比如当我们说“法抗”时,总是至少包含着两层含义,其一是属性栏的法伤减免百分比,其二是除去基础法抗外的额外法抗。

结合玩家习惯以及意义划分,我认为直接说法抗最好还是对应到法伤减免百分比,因为百分比免伤更为直观,其他赋值说成额外法抗,一般的减法抗都是减额外法抗。
//初始20%法抗为基础法抗(等价于25点额外法抗),额外法抗包括装备和技能赋值,每1点额外法抗=0.8%法抗。
减法抗,若没有明确标注减基础法抗,那么都是减额外法抗。

//若敌方没有额外法抗赋值时,曹操E可以直接使敌方法抗为0,其他减法抗则要减去25额外法抗才能使敌方法抗为0,因为额外法抗始终要只取0.8倍。这里我们索性可以把20%基础法抗=25点额外法抗(末尾结合案例细说)
装备歧义,额外细节补充:
//奥法之球(“减15%魔法抗性..”)—实际是减15点额外法抗,即减12%法抗(法伤减免)


//风暴之灵Q(“每层减法抗10%..”)—实际每层减10额外法抗,即减8%法抗(法伤减免)

//暗精灵初始法抗为24%
//法抗(%)显示数值小数部分改为四舍五入,没什么影响。
//小兵、野怪、木人桩,没有基础法抗和额外法抗加成逻辑,出奥法之球对它们的逻辑是额外法抗减去15,但没有0.8比例,即-15%免伤,进而额外受到15%法伤。


但对英雄,即便被曹操E把基础法抗减到0,奥法之球仍然只减15额外法抗,这里还是要*0.8,即-12%免伤。

//对于英雄来说,我们把20%基础法抗=25点额外法抗,但超械少女是个例外。因为对她而言,额外法抗是有翻倍(2倍,4倍)效益的,同样减她额外法抗也是翻倍。而减去的额外法抗>她的额外法抗时,则多余减抗不再翻倍。
一个具体案例剖析:
红炎双刃出了盖亚之力和魔晶盾,额外法抗加成25+20=45,敌方波塞冬出了奥法之球,红炎双刃法抗是怎样的增减逻辑?
这里要回到程序逻辑,法抗 = Math.min(50,20 + 额外法抗*0.8),红炎法抗是在50与20+45*0.8=56这两个值中取最小,显然取得50,即通常称作上限。
而奥法之球减去15额外法抗,那么此时是在50与20+(45-15)*0.8=44这两个值中取最小,显然会取44(%)。
由此一来,会有让人费解,为啥奥法减去12%法抗不是直接50%降到38%
//这里通俗语言简括为,溢出的额外法抗可以抵消减去法抗。

回答一下为什么20%基础法抗为什么可以等于25点额外法抗
即若红炎双刃没出任何带法抗的装备,面板显示额外法抗为0,但有基础法抗20%,奥法之球的逻辑又是怎样?
原则上还是要回到程序里, 奥法-15额外法抗,即Math.min(50,20 + (-15)*0.8),取最小值20-12=8,最终取8(%)。

如果我们直接把20%基础法视作25点额外法抗,即25-15=10额外法抗=8%法抗,与上面一致。
//所以为了通俗易懂,20%基础法抗=25点额外法抗