导读 : 这篇文章会分析综合伤害,相对速度,抗打击时间装备和铭文,建议阅读我之前写的两篇文章《数学算法介绍和装备被动分析》和《编程思路和算法顺序》。的技能多为控制,物理\法术加成不明显。+360防御,护盾和血量都算减伤,就相当于+1000+200+120*level,为了简便,下文的交互界面里,直接算15级,以后会陆续改进,可以调节英雄等级。...
用户名:
微博 用户名: 萌新
这篇文章会分析综合伤害,相对速度,抗打击时间装备和铭文,建议阅读我之前写的两篇文章《数学算法介绍和装备被动分析》和《编程思路和算法顺序》。这两篇分析给出了基础的算法介绍,而本文会运用前两篇文章的结论做出更为准确的推论。
英雄分类
的技能多为控制,物理\法术加成不明显。
由于加成伤害不明显(多为控制或位移),一套带走的可能性非常小,这样就非常依赖平A
在程序中就应该使用(在附件中有源代码),这个函数来进行计算,最大吸血算法也是按照这个函数来跑
可以预见到,攻速,暴击率,暴击系数, 穿透的提升会很有帮助。
的技能多为伤害,物理\法术加成明显, 基本能一套带走,这样就非常依赖技能。
在程序中就要使用(在附件中有源代码),这个函数来算,吸血也要按照这个来算。
可以预见到,物理/法术攻击,技能冷却,穿透的提升会很有帮助
冷却缩短了40%(40%是上限,某些英雄除外如不知火舞30.5%)就意味着,设技能冷却为 cd
那么现在就是 0.6x。 原来单位时间内可以释放1/cd个技能,那么理论上现在就可以释放1/0.6cd= 1.6667/cd个技能,相当与单位时间内技能伤害提高了66.7%
3个技能一套能快速在1秒左右全部释放就属于爆发性(妲己)可以瞬间清理残血英雄降低对方输出单位
3个技能很难再几秒内全数释放(干将莫邪)释放需要瞄准,或者释放时间长。可以考虑吸血,慢慢消磨对方单位血量
这样有cd的武器就要考虑一下,因为每次释放都会有时间间隔,正好冷却了武器被动的cd。
技能伤害不高不低。这时就要考虑技能和平A的比率问题。我们可以假设一个英雄要么处于平A状态要么处于攻击状态,要么处于不能攻击状态(施法读条,释放时间,持续施法)。设冷却时间为cd,不能攻击状态所用时间为t,那么攻击时间 = cd –t。 (先不考虑控制类技能,眩晕等)。设冷却减缩为rcd。rcd [0, 40%/30.5%]。设单位时间为U(这里不能1代替)
单位时间内的施法个数= \frac{U}{(1-rcd)·cd}
(技能不会等法术完全结束才开始计算冷却,而是在按下的一瞬间开始计算)
攻击时间 = 单位时间- 单次施法消耗时间·施法次数
=U - t \cdot \frac{U}{(1-rcd)·cd}
然后我们可以看到"单位时间内的施法个数" 和 "攻击时间" 的比值与单位时间无关
单位时间内综合实际伤害
= 平A实际伤害 +技能实际伤害
=
攻击时间·单位时间内平A实际伤害 + 单位时间内施法个数·单个技能造成的实际伤害
《单位时间内平A实际伤害》和《单个技能造成的实际伤害》在第一篇文章《数学算法介绍和装备被动分析》里介绍过,这里就不反复写了
以上就是单一技能的实际伤害运算。(某些英雄可能会有比较鸡肋的技能以至于没什么使用价值,那么就可以直接算比较有用的技能)
但某些英雄3个技能都比较优质这时情况就需要考虑3技能同时使用的结果(非爆发,技能冷却结束就放),这时候就要用到综合实际伤害公式了。
综合实际伤害
还是设单位时间为U,冷却减缩为rcd
技能1 冷却为cd1,施法后不能攻击时间为t1
技能2 冷却为cd2,施法后不能攻击时间为t2
技能3 冷却为cd3,施法后不能攻击时间为t3
技能1施放个数 = \frac{U}{(1-rcd)·cd_1}
技能2施放个数 =\frac{U}{(1-rcd)·cd_2}
技能3施放个数 =\frac{U}{(1-rcd)·cd_3}
攻击时间 = U - t_1 \cdot \frac{U}{(1-rcd)·cd_1} - t_2 \cdot \frac{U}{(1-rcd)·cd_2} - t_3 \cdot \frac{U}{(1-rcd)·cd_3}
(这个我附上完整的公式,以便研究运算。)
这个公式非常重要,是以后个性化分析英雄的重要公式之一。
单位时间内综合实际伤害:
= 攻击时间 · 单位时间攻击伤害 + 技能1伤害 · 技能1个数 + 技能2伤害 · 技能2个数 + 技能3伤害 · 技能3个数
= (U - t_1 \cdot \frac{U}{(1-rcd)·cd_1} - t_2 \cdot \frac{U}{(1-rcd)·cd_2} - t_3 \cdot \frac{U}{(1-rcd)·cd_3})·物理攻击
× 攻击次数/单位时间1s(速度) × (1×(1 - 暴击率)+ 1×暴击系数×暴击率
)
×(1 - \frac{\text{物理防御 - 物理穿透}}{\text{600+ 物理防御 - 物理穿透}})
+ \frac{U}{(1-rcd)·cd_1}·(技能1伤害+法伤加成1×技能1加成比率)×(1 - \frac{\text{法术防御 - 物理穿透}}{\text{600+ 法术防御 - 物理穿透}})
+\frac{U}{(1-rcd)·cd_2}·(技能2伤害+法伤加成2×技能2加成比率)×(1 - \frac{\text{法术防御 - 物理穿透}}{\text{600+ 法术防御 - 物理穿透}})
+\frac{U}{(1-rcd)·cd_3}·(技能3伤害+法伤加成3×技能3加成比率)×(1 -\frac{\text{法术防御 - 物理穿透}}{\text{600+ 法术防御 - 物理穿透}})
哇!多么美丽的公式啊!一个简单的公式就涵盖了整个游戏的伤害体系!
很多英雄的有特殊效果如孙悟空,芈月,黄忠,诸葛亮,李白等
(这些英雄当然也可以使用如上公式,但为了找出更加完美的搭配方案,就需要根据不同英雄特别定制最佳公式进行计算)
相对速度分析:
设对方英雄基础速度 = Tv ( )
移动加成速度(鞋子) = Ta ( )
比例加成(铭文)= Tp ( )
比例影响(减速敌方技能或装备)= Ti( )(减速的话填负值, 没有填0)
我方英雄基础速度 = Sv (self )
移动加成 = Sa (self )
比例加成 = Sp (self )
比例影响(加速我方技能或装备) = Si (self )(加速填正值, 没有填0)
敌方英雄的最终速度 = (Tv +Ta)·(1+Tp+Ti)
我方英雄最终速度 = (Sv +Sa)·(1+Sp+Si)
相对速度 = (Sv +Sa)·(1+Sp+Si) - (Tv
+Ta)·(1+Tp+Ti)
比例速度(我方英雄比敌方快/慢百分之多少)
= \frac{(Sv +Sa)·(1+Sp+Si) - (Tv +Ta)·(1+Tp+Ti)}{(Tv +Ta)·(1+Tp+Ti)}
就拿射手和肉为例,鲁班速度360, 亚瑟390
两人都出鞋子+60,鲁班铭文加速10%,影刃加速5%,其他武器减速15%(不详征兆)
鲁班最终速度 = (360+60)·1.15 =483
亚瑟最终速度 = (390+60)·(0.85)=382.5
速度差 = 483 – 382.5 = 100.5 (当然亚瑟也有加速,使用技能后这个结果就会改变)
移动速度对于射手来说非常重要,如果速度快的话还可以风筝对手(边打边跑,让距离处于对方达不到你,你可以达到对手的范围内。)为了平衡性,射手的速度普遍较慢,防止风筝射手的出现。
用法:
假如你的一把武器能提升攻击力5%,或提高防御5%,而另一把能把相对速度提高10%。那么果断要选这个能提高相对速度的装备完美国际2剑灵怎么提高法术防御,哪怕是暂时提高。这样能有效的避免伤害或追击敌方,比起5%的攻击力,10%的相对速度更能扭转战局。
记住是相对速度,不是自身的速度
防御分析:
把血量在3000到12000, 防御在0到1400,每个考虑对手出不出穿透2种(直接穿透,就先在防御里减掉就好了),没有45%穿透时公式如下:
血条护甲综合抗打击加成% = (当前抗打击时间 - 原抗打击时间)/ 原抗打击时间
前两篇论文有详细公式,化简
设血量hp( point),加成血量ha( ),护甲a(armor),加成护甲aa(armor )
= \frac{(hp+ha)·(600+a+aa)}{hp·(600+a)} - 1
在对方有《破甲弓》或《虚无法杖》 +45%穿透, 先减去对方穿透再算45%穿透,公式如下:
血条护甲综合抗打击加成% =\frac{(hp+ha)·(600+0.55(a+aa))}{hp·(600+0.55a)} - 1
这里公式和其他稍有不同,普通攻击伤害减免15%。那么最好的情况是对方全用普通攻击,减免15%。最坏的的情况是对方3个技能连击一套,没有15%减免。
这就是为什么adc即便穿了《影忍之足》也很容易被刺客3连击打爆,因为只有普通攻击可以减伤15%。当然对以普攻为主的英雄有较好的克制作用,性价比超高
更具上面的算法
影忍之足的抗打击加成在(全技能) \frac{600+a+110}{600+a} -1 到(全普攻) \frac{600+a+110}{0.85(600+a)} - 1 之间
反伤刺甲:
(公式还是和影忍之足差不多,这里只考虑物理防御所以没有好坏情况)
抗击打时间提升% = \frac{600+a+420}{0.85(600+a)}
魔女斗篷:
这个问题有点复杂,就目前测算的结果来看,护盾也是要算减伤的。在附件中有如何测算的方法
+360防御,护盾和血量都算减伤,就相当于+1000+200+120*level,为了简便,下文的交互界面里,直接算15级完美国际2剑灵怎么提高法术防御,以后会陆续改进,可以调节英雄等级。
下面感谢由 数据知多少 - 知乎 提供的
交互界面,可以很方便的查找在不同情况下装备对英雄抗打击时间的加成比。
网站://yonge#!///
滑动血条来输入护甲,敌方穿透和血量。
由于中不能实时计算,只能提前算好,所以选择间隔不会太精确,以避免大量数据。我会编一个程序来自定义血量,防御,等级,这样更加精确的查看各类防御装备对抗性的提升,以及自动选取最优装备。目前程序会的idle运行版。)
所有有关程序会放到 (I Wont Tell You)
附件:护甲减伤么?
选取英雄,王昭君,对手鲁班,单人训练,关闭兵线,王昭君拿四个《贤者之书》去抗蓝爸爸或红爸爸伤害,一个格子护盾能抗5下 13.5%的减伤,装备两个《极寒风暴》减伤58.9%,一个格子护盾能抗12下,
5下,一格子/(伤害*(1-13.5%)) = 1.156格子/伤害
12下,一格子/(伤害*(1-59%))= 2.42 格子/伤害
12/5 =2.4
2.42/1.156 = 2.0
虽然误差很大,但是还是能明显看出,护甲对于抗打击时间的影响,一格从原来能抗5下攻击变成了能抗12下。由此得出对于护甲也是算减伤的。如果有不同观点,请设计实验,并列出实验数据
这是class hero里的一个文件,只是为了掩饰算法:
#计算实际伤害
def real_attack_damage(self,target, with_equips= True, with_runes =True, after_skill=False, kind = "" ):
"""
"""
pd = self.pd
s = self.s
r = self.r
i = self.i
pp = self.pp
pa =target.pa
ma =target.ma
hp = target.hp
pvam = self.pvam
mvam = self.mvam
rcd = self.rcd
if not with_runes:
#原始数值
rpd = pd*s*(r*i-r+1)*arm2dam(pa-pp)
rblood = (rpd)*pvam
if kind == "物理吸血":
return rblood
elif kind == "实际伤害":
return rpd
else:
pd += sum_runes_f(self.runes, "pd")
s += sum_runes_f(self.runes, "s")
r += sum_runes_f(self.runes, "r")
i += sum_runes_f(self.runes, "i")
pp += sum_runes_f(self.runes, "pp")
pvam += sum_runes_f(self.runes, "pvam")
mvam += sum_runes_f(self.runes, "mvam")
rcd += sum_runes_f(self.runes, "rcd")
if not with_equips:
#原始数值+铭文
rpd = pd*s*(r*i-r+1)*arm2dam(pa-pp)
rblood = (rpd)*pvam
if kind == "物理吸血":
return rblood
elif kind == "实际伤害":
return rpd
else:
pd += sum_equips_f(self.equips, "pd")
s += sum_equips_f(self.equips, "s")
r += sum_equips_f(self.equips, "r")
i += sum_equips_f(self.equips, "i")
pp += sum_equips_f(self.equips, "pp")
pvam += sum_equips_f(self.equips, "pvam")
mvam += sum_equipss_f(self.equips, "mvam")
rcd += sum_equips_f(self.equips, "rcd")
#开始唯一被动计算
if self.have_the_equip("暗影战斧"):
pp =pp+ 50 + 10*self.level
#rpa: real physics armor
rpa = pa - pp
if self.have_the_equip("破甲弓"):
rpa = (1- 0.45)*rpa
if self.have_the_equip("秘法之靴"):
mp+= 75
if self.have_the_equip("痛苦面具"):
mp+= 75
# rma: real magic armor
rma = ma - mp
if self.have_the_equip("虚无法杖"):
rma = rma*(1-0.45)
if self.have_the_equip("无尽战刃"):
i +=0.5
#bpd: buff physics damage
bpd = 0
if self.have_the_equip("巫术法杖"):
bpd +=pd*cent(30)
if after_skill and self.have_the_equip("宗师之力"):
bpd += pd
if self.have_the_equip("末世"):
bpd += cent(4)*hp
if self.have_the_equip( "纯净苍穹"):
bpd += 60
pd += bpd
if self.have_the_equip("影刃"):
if after_skill:
s= s*r +(s+0.5)*(1-r)
else:
drop = (1-r)**(2*s+1)
s = s*drop+ (1-drop)*(s+0.5)
#rpd: real physics damage
#rmd: real magic damage
rpd = pd*( 1-r + r*i )*arm2dam(rpa)
rmd =0
if self.have_the_equip( "闪电匕首"):
#这里就不考虑法术穿透了,物理英雄不会有的
if s<2:
#rmd: real magic damage
rmd += 20*s*( r*i + (1-r) )*arm2dam(ma)
else:
rmd += 40*s*( r*i + (1-r) )*arm2dam(ma)
if self.have_the_equip("红莲斗篷"):
rmd += 100*arm2dam(ma)
#重要: after skill 计算一次伤害不算攻速
if not after_skill:
rpd=rpd*s
#brmd: buff real magic damage
#brpd: buff real physics damage
brmd = 0
brpd = 0
if self.have+the_equip("博学者之怒"):
brmd += rmd*cent(35)
if self.have_the_equip("破军"):
brpd += rpd * cent(15)
brmd += rmd*cent(15)
rpd += brpd
rmd+= brmd
rblood = (rpd)*pvam
rd = rpd+rmd
if kind == "物理吸血":
return rblood
elif kind == "实际伤害":
return rd
在上会附上完整的版本,程序还在调试阶段,过几天会放出来3.0版本。
(I Wont Tell You)
澶╄皶鎵嬫父鍑竷鍒╃绁犲紤绁炴€庝箞鎵?鎵撴硶鏀荤暐
2022-12-31提灯与地下城契约兽怎么觉醒 觉醒攻略
2022-12-31创造与魔法三月兑换码有哪些 礼包码分享
2022-12-31原神魈阵容如何搭配 阵容推荐
2022-12-31《阴阳师》手游最近也是预...
銆婂ぉ璋曘€嬫墜娓稿凡缁...
《魔兽世界怀旧服》目前圣...
弥音残响,桎梏觉绝。2021年...
《魔兽世界怀旧服》战士T...
《魔兽世界怀旧服》中熊德...
本文带来光遇梦想季季卡预...
和平精英是一款角色扮演枪...
《魔兽世界怀旧服》目前已...
《提灯与地下城》手游这两...