前言
懒得看过程,想直接看结果的去2楼。
我打字比较粗心,错字很多。看不懂了就问,是错字我立刻改。。。。。
正文开始:
这里所有的计算,意在找出一个LS伤害的最佳档位。由于LS的伤害范围巨大,所以我们要找的不是最高伤害不加血的档位,而是输出期望值不加血的档位。这里所有的计算之前有一个假设:LS的LD为平均分布。有几个简单的近似:这里所有的计算都只考虑连续变量,原公式中的取整我直接舍弃了。LS的最低伤害假定为0。另外,这里不是精确计算,同时LS的LD不是完全连续的变了,所以20左右的误差是可以允许的。
首先,我们找来伤害流程计算。由于
91D2没有相关资料的链接。我这里放上IMPK和花开小站的链接。注意,两边都需要注册ID才能浏览。
[
http://flying099.5d6d.com/thread-7-1-1.htmlhttp://flying099.5d6d.com/thread-7-1-1.html
这是花开的
http://impk.blizzard.cn/ShowTopic-3092-34这是IMPK的。
对LS来说,可能改变伤害的属性有。PVP惩罚,MDR,风甲,LR,ABS(吸收)%,ABS,ES。注意按百分比吸收和直接吸收的区别。
这些属性作用的顺序是
PVP惩罚>ES>风甲>MDR>LR>ABS%>ABS
由于ABS的吸收作用,LS的伤害分三个值。LD,Damage Dealt(简称DD)和Damage(简称DAM)
LD定义为某次LS未经过任何熟悉过滤的原始闪电伤害
DD和DAM的区别在于,DD是LS一次攻击给CHAR造成的伤害,DAM是一次伤害减去ABS吸收造成的实际伤害或者说最终伤害。
这里,关于DD,ABS等属性计算的几个特点说一下。
1, DD严格按照伤害相关属性作用顺序起作用。
2, DD永远
不可能小于0。可能将DD减到0的属性有MDR,风甲,ABS。作用顺序为风甲>MDR>ABS。
3, ABS和ABS%分两步起作用。第一步,在DD计算的过程中降低DD的值。第二步,在DD作用后,给人物加血。加血数值=在DD计算过程中减少的数值。若当期血量+加血数值>MAX LIFE。则只加到MAX LIFE。第二步和第一步之间会进行死亡判定。
4, ABS的吸收不是满数值吸收。例如:一个85LR带雷神的CHAR受到600LD的伤害。PVP惩罚:600/6=100,抗性100*(1-85)=15,15-20=-5。DD严格大于0,所以这次攻击造成的DD=0,吸收15,DAM= -15(+15点LIFE)
对于DD的计算,我直接调用上面那两个帖子里的公式:
Damage Dealt = (LD * XvX / 100 * (1 - ES / 100) - Cyclone Armor –MDR) * (1 - Resistance / 100) * (1 - Absorb% / 100) – Absorb
这里套用这个公式会出现3种情况:
1,Cyclone Armor +MDR> (ld * XvX / 100 * (1 - ES / 100)
不会造成回血同时DD=0
2, (LD * XvX / 100 * (1 - ES / 100) - Cyclone Armor –MDR) * (1 - Resistance / 100) * (1 - Absorb% / 100) < Absorb
DD=0
吸血量=(LD * XvX / 100 * (1 - ES / 100) - Cyclone Armor –MDR) * (1 - Resistance / 100) * (Absorb% / 100)+ Absorb -(Damage * XvX / 100 * (1 - ES / 100) - Cyclone Armor –MDR) * (1 - Resistance / 100) * (1 - Absorb% / 100)
3, (LD * XvX / 100 * (1 - ES / 100) - Cyclone Armor –MDR) * (1 - Resistance / 100) * (1 - Absorb% / 100) > Absorb
DD = (LD * XvX / 100 * (1 - ES / 100) - Cyclone Armor –MDR) * (1 - Resistance / 100) * (1 - Absorb% / 100) – Absorb
吸血量 = (LD * XvX / 100 * (1 - ES / 100) - Cyclone Armor - MDR) * (1 - Resistance / 100) * Absorb% + Absorb
XvX/ 100这里取1/6,PVP惩罚
ES=法师的能量护盾
Cyclone Armor=风甲
Resistance=抗性
Absorb=吸收
最终伤害=DD-吸血量
若为负数则加血。
假设DD计算过程吸血量属于第三种情况。我们可以把以上两个公式合并成以下公式。
最终伤害 = (LD * XvX / 100 * (1 - ES / 100) - Cyclone Armor - MDR) * (1 - Resistance / 100) * (1 - 2 * Absorb% / 100) - 2 * Absorb
关于伤害的计算部分就说到这里。还不懂就仔细研究我前面给的两个帖子。这里我来说一下计算LS档位的基础理论。
DAM是随着LD变化的函数。DAM的期望值也可以看成是DAM的平均值。简单的微积分定理可以明确的指出,DAM的期望值其实就是DAM关于LD的积分除以最高LD。
虽然DAM是LD的函数并且有3个部分,但两者之间其实是线性关系。所以说,DAM关于LD的积分其实就是计算几个三角形的面积。套用三角形面积公式就可以了。
不熟悉的三角形面积的朋友:
三角形面积=底*高/2
那究竟要计算哪几个三角形的面积呢?其实很简单,我们可以简单的把LD分成两个部分,加血部分和减血部分。两个部分刚好形成两个三角。
下面我们来分析加血三角的部分。
通过对ABS,ABS%的分析,我们可以得出一个单次最大吸收值(暂时记为MABS)。MABS就是加血三角的高。
MABS=ABS/(1-ABS%)
比如雷神+20鬼火的MABS=20/(1-20%)=20/80%=25
需要注明的是,MABS会对应一个造成了MABS的LD值。这个LD值可以通过反向计算得到。我们把这儿值记为MLD,
MLD=6*(MABS/(1-RES)+MDR)/(1-ES)
简单的分析可以发现,LD<MLD,DD计算对应第二种情况。LD>MLD,DD计算对应第一种情况。
通过对DAM的分析我们可以计算出一个既不加血也不减血的 LD。记为0LD,很明显0LD>MLD,所以0LD的计算套用DD计算第三种情况。套用公式:
(LD * XvX / 100 * (1 - ES / 100) - Cyclone Armor - MDR) * (1 - Resistance / 100) * (1 - 2 * Absorb% / 100) - 2 * Absorb=0
对公式做一下分析发现
0LD=(2* Absorb/ (1 - Resistance / 100) / (1 - 2 * Absorb% / 100)+ MDR+ Cyclone Armor)/ (1 - ES / 100)*6
0LD可以视为回血三角的底。
这里我们发现,其实LS的伤害落在了0LD伤害上,平均回血率最高。达到MABS/2。
之后,我们来计算减血三角的面积。只要减血三角的面积=加血三角的面积=0LD*MABS/2,我们的LS就不会给对手造成加血。
减血三角的面积分析一下伤害流程可以得出。
减血三角的面积=(LD-0LD)* (LD-0LD)* (1 - Resistance / 100) * (1 - 2 * Absorb% / 100)* (1 - ES / 100)/2
由于在计算0LD的时候,我们已经计算过了MDR,所以这里不用考虑MDR的问题。同时,由于这里已经0LD已经包含了ABS,所以这里也不用考虑ABS的问题。
带入减血三角的面积=加血三角的面积=0LD*MABS/2
0LD*MABS/2=(LD-0LD)* (LD-0LD)* (1 - Resistance / 100) * (1 - 2 * Absorb% / 100)* (1 - ES / 100)/2
对公式进行一下处理
LD=SQRT(0LD*MABS/ (1 - Resistance / 100) / (1 - 2 * Absorb% / 100)*/(1 - ES / 100)) +0LD
SQRT()=对括号中的项的平方根。
到这里,我们终于找出了根据所有伤害相关属性计算LD的公式。