|

楼主 |
发表于 2020-1-13 21:44:26
|
显示全部楼层
楼上帖子中分析了属性页显示的被命中几率的计算过程
" n2 i+ ?! M3 z5 F因为属性页显示的值查看时可以忽略实际怪物的生存状态,所以肯定是不准确的
: D2 _6 \5 G) f$ J% J8 E9 r# y* L; p9 s9 G. |
本帖将分析 "怪物攻击你" 时实际命中率的计算过程 与 属性页显示的被命中几率的计算过程(暂称为"过程A")的不同( k" T A4 l4 {5 b, N
其他情况可以参考(til的某帖子,但已失效),那个帖子大体内容还是正确的) k1 u9 N2 y4 g! o
9 S; a3 e, }8 x8 r
1 在计算命中率前,会调用D2Game.6FCB4740计算 MinDamage ,MaxDamage , AR_BASE" g% G/ ^. Q* n( S
计算AR_BASE时,将使用怪物的真实等级(不含场景等级修正,不含金怪等级奖励),' d5 P" Y+ X; x6 z
一般来说 AR_BASE = (monlvl.txt中的TH × monstats.txt中的XXTH )/100 , 结果取整" ~9 |9 b8 p# A0 C5 a
其中XXTH 可能为 A1TH , A2TH , S1TH ,根据使用的攻击来定(过程A中使用的都是A1TH)5 a' Z9 N$ j; C& U8 ?: E
# ]: T# a0 |! M0 N然后会跟过程A中一样根据条件进行调整,但条件顺序有点不一样,不过结果是一样的
$ p6 ]) n; X) M7 A判断是否是资料片,资料片 AR = AR_BASE ,跳到第2步
, L) m( O0 |/ A4 B判断是否在普通难度,普通难度 AR = AR_BASE ,跳到第2步
" u* `( R9 d2 H" J判断monstats.txt中noRatio是否为1 ,为1的情况下 AR = AR_BASE ,跳到第2步
8 B0 _4 A$ b- o2 o. _% O8 Y2 C2 V上面条件都不满足 AR = (10*AR_BASE+10*AR_BASE*(-2004318071)/(2^32))/8 ~= AR_BASE×0.667
# F4 _: r& i- i顺带提下MinDamage和MaxDamage,它们的修正因子为 ((10*715827883)/4294967296)/2 ~=0.833/ j; u+ k L8 d) I: j- I
1 r2 v/ Q5 [# F: l1 L# W7 C0 R, [
2 计算额外的附加AR -> AR_EXT ,如技能带的AR等,将作为参数传给第3步
3 a/ y* @$ t# }& c4 b4 n; _# c# i# W7 Z e% z9 T% R
3 此步将开始计算命中率 (D2Game.6FC9D240)/ V2 Q% k# T9 S" e
3.1 计算 DEF0 t' j4 V% y& O0 _# d; ^8 K; J
DEF = DEF1 + ARMORCLASS_VS_HTH 或者DEF = DEF1 + ARMORCLASS_VS_MISSILE (根据攻击来定)5 J* r4 s) J( P2 Q" A
3.2 直接获的第一步计算好的AR
( y6 v0 v) z" L( k) iAR = AR + AR_EXT + 5*Dex(敏捷值) ;
( D O- W0 C% t6 z% t( }获取AR加成 AR_Percent(含所有加成情况,如光环等)$ g# r: p* a9 r; n: g* d: T& |% Z7 _
AR = AR + AR *(AR_Percent%) ;此AR将用于最终计算
2 z4 b; P+ D4 X2 U. o/ r3.3 又来到了这个公式 Tohit% = [ ([ AR*100/(AR+DEF) ] * MLVL *2)/(DLVL+MLVL) ]7 e. Z6 X0 i5 _: u, r
但不同的是,这里的MLVL将使用实际的等级(不含场景等级修正,不含金怪等级奖励)# B. w& `* C/ w) O- Q( H$ T
: Y4 z! q& r" a$ S) L6 j3.4 将结果限定在 [5 , 95 ]区间内
+ N& l: l/ ^9 E5 X
K: e2 u2 ~6 K* Q- O. v6 _从上面过程可以看出,在非资料片里,实际怪物对你的命中率,将低于属性页显示的值/ p4 S. ?4 d. g x) @
以地狱大虫为例子,MPQ等级88 , 非资料片等级72 ,测试人物85级165防御
5 w- q% g3 R# R" {+ k \, u$ I) F, B3 J属性页显示为94%命中 = [ [2584*100/(2584+165)]*88*2 /(88+85) ] (2584 为 88级的ACTH*A1TH/100 *0.667 = 3874*110/100 *0.667)5 i1 f& `* ~5 p1 p: q
7 B) t& a. I6 x: v @5 o$ F$ q实际只有[ [2138*100/(2138+165)]*72*2 /(72+85) ] = 84% (2138 为 72级的ACTH*A1TH/100 *0.667 = 2914 *110 /100 *0.667) (计算中有误差, 跟踪代码显示是86%) |
|