生活情怀-神话暗黑-暗黑破坏神2

 找回密码
 立即注册

QQ登录

只需一步,快速开始

暗黑mod发布网
搜索
逗破暗黑Mod群:67994934逗破暗黑Mod客户端及补丁逗破暗黑Mod新手攻略逗破暗黑Mod赞助菜单
神话怀旧MOD群:67994934神话怀旧Mod客户端及补丁神话怀旧Mod新手攻略神话怀旧Mod赞助菜单
圣者归来Mod群:558972013圣者归来Mod客户端及补丁圣者归来Mod新手攻略圣者归来Mod赞助菜单
查看: 1944|回复: 1
收起左侧

[游戏攻略] FZ属性页显示的被怪物击中几率的计算过程

[复制链接]

361

回帖

830

元宝

1

圣者绑元

管理员

Rank: 9Rank: 9Rank: 9

积分
1
发表于 2020-1-13 21:44:18 | 显示全部楼层 |阅读模式
本文由virgol在2008年首发于TTBN。
0 y3 D4 \' Y! n2 P0 t属性页显示的被怪物击中几率的计算过程
# n0 F# H4 v% h2 F# D& |5 _7 x, [; e
以下所涉及的内容只针对 "怪物攻击你“时 属性页所显示的被怪物击中几率Tohit%,实际攻击调用的是另外的代码(大体相同,但细节上更复杂)
9 z  |4 D' U, L9 U
% d5 i3 }+ S8 h8 v# G* W- ?" Z7 C1 xTohit%计算过程资料片和非资料片调用的是同一函数(代码位置D2Client.6FB38A00),而且不是一般的相同' z& G: L& ]& I* X1 E. ~
' X5 k6 T# Z: _* {
以下是这个函数的主要流程:) _- J! @2 Z9 A8 _6 R

0 e% D8 _; m3 ^/ Q, ]. c1 取人物属性页显示的防御值 DEF1,6 M  w; G1 }3 g" z7 \2 Q% \
取 ARMORCLASS_VS_HTH 值(一般为0)
8 m: X9 Z. q/ t5 R/ I# _8 b最终用于计算的防御值 DEF = DEF1 + ARMORCLASS_VS_HTH ;
3 r7 o9 g- v/ N# L1 |0 y( m0 s; _& J7 Y7 d
2 获取怪物AR值,此值先记为 AR_BASE
* s% q9 `1 X0 m4 L0 p/ F(一个复杂的过程,最终取得的值为各种资料网站上能找到的怪物AR值)  P. p' _! s' ?

1 ^2 b. o( x! _. @4 w2 B$ n8 F3 将 AR_BASE 转换到用于计算的 AR
6 d3 y7 J6 [) H  W) q/ @' n& r  V1 I
判断monstats.txt中某一列的值是否等于1 ,这个列我估计是noRatio,不确定,但比较符合这个' _( C( A5 m* c6 k2 w+ w5 a: G
等于1 的情况下 AR = AR_BASE ,跳到第4步2 z) L/ @( c9 q4 [1 N
判断是否是资料片,资料片AR = AR_BASE ,跳到第4步9 u" k1 J6 a; e/ D; B
判断是否在普通难度,普通难度AR = AR_BASE ,跳到第4步
3 W) l0 X0 H2 B: ?$ p3 R0 M- _不满足上述条件,继续处理
, z9 U, N6 k4 D2 s  P* J  h3 s" v先给出代码的处理方式; ^% `  j% ]# L8 k- |" U/ N- R' C3 r( f
AR_BASE×5 ,逻辑左移1位 ,得到值 AR_TMP
5 Z9 w. y6 p; @' ^8 i让AR_TMP与0x88888889相乘, 取结果的高32位与AR_TMP相加,将结果算术右移3位,得到结果 AR_TMP2
, T& o% s, S& x0 f) q, l* `接着还有一步 将AR_TMP2与 AR_TMP2算术右移15位相加 取得最终用于计算的 AR , 因为此步基本对结果没有影响,我们将其忽略9 r3 |: x( g* B) D0 f: @- D
1 h' l! M3 D$ y7 F
转化为近似的公式:
. S/ {/ A+ o; w" @, L! OAR = (10*AR_BASE+10*AR_BASE*(-2004318071)/(2^32))/8 ~= AR_BASE×0.6675 g/ r+ H3 g* _5 n* S1 V
实际计算过程中除法取整 / q; P! |7 c, T$ T# b8 Y9 T
4 接着就是大家熟悉的Tohit%计算公式,但是原来的取整方式是错的
$ T' @5 q+ K) K8 B; Q; R5 O, mTohit% = [ ([ AR*100/(AR+DEF) ] * MLVL *2)/(DLVL+MLVL) ]: p" ^" M; Q' M; V
其中 DLVL 就是自身的等级
$ O, j* {0 O. a' z. n2 b9 ]: oMLVL 是怪物等级( G2 j0 t8 Y& C+ R2 q
* Y* z( K' q( R8 b! {! @
这里MLVL很关键,他是从mpq的monstats.txt中直接获取的!!资料片和非资料片一视同仁( P4 f$ ?  D0 g$ I  [* ^& K
也就是,对于资料片来说,计算Tohit%是忽略场景等级影响的,也忽略金怪带来的奖励等级
8 Z, {( S% d; i7 C2 w+ u对于非资料片,一个72lv的大虫,计算Tohit%是按88lv来算的~~
+ d2 ~$ C! ~0 W3 y/ n% G) v同样,第2步取 AR_BASE 的时候也是按monstats.txt中的等级来计算的
+ |) O- a; W7 @% x: Z+ g' C. w" G$ h* H2 X+ Z( w7 k0 V, {
5 计算函数上面已经结束,调用后会再将结果限定到 [5 ,95]区间内

/ t  h& ^  f) C! `9 ?8 d
神话战网出品,必出精品!
回复

使用道具 举报

361

回帖

830

元宝

1

圣者绑元

管理员

Rank: 9Rank: 9Rank: 9

积分
1
 楼主| 发表于 2020-1-13 21:44:26 | 显示全部楼层
楼上帖子中分析了属性页显示的被命中几率的计算过程5 D, E0 q" X; r, \
因为属性页显示的值查看时可以忽略实际怪物的生存状态,所以肯定是不准确的2 `( h" x: S% H
( q/ I- b2 z2 f/ U, |3 s
本帖将分析 "怪物攻击你" 时实际命中率的计算过程 与 属性页显示的被命中几率的计算过程(暂称为"过程A")的不同" d/ F# X) Q# w+ G
其他情况可以参考(til的某帖子,但已失效),那个帖子大体内容还是正确的; L" y7 X' {9 [- d

! `  |; X* ^: n% @2 W; Y1 在计算命中率前,会调用D2Game.6FCB4740计算 MinDamage ,MaxDamage , AR_BASE, g& S- p3 ^& \
计算AR_BASE时,将使用怪物的真实等级(不含场景等级修正,不含金怪等级奖励),
. p5 o) y6 q: \/ L6 d一般来说 AR_BASE = (monlvl.txt中的TH × monstats.txt中的XXTH )/100 , 结果取整9 }- A" r; c0 z2 _! I  p, W
其中XXTH 可能为 A1TH , A2TH , S1TH ,根据使用的攻击来定(过程A中使用的都是A1TH)
$ x0 `$ t4 g8 A5 G- u& p
% j+ x$ j0 L, D# a: c3 \然后会跟过程A中一样根据条件进行调整,但条件顺序有点不一样,不过结果是一样的
* K  W. w" a% |判断是否是资料片,资料片 AR = AR_BASE ,跳到第2步: b6 |6 S9 a; s! }1 X
判断是否在普通难度,普通难度 AR = AR_BASE ,跳到第2步
7 R% D, y* [0 W+ h判断monstats.txt中noRatio是否为1 ,为1的情况下 AR = AR_BASE ,跳到第2步- \# s3 q: w: R" c9 T
上面条件都不满足 AR = (10*AR_BASE+10*AR_BASE*(-2004318071)/(2^32))/8 ~= AR_BASE×0.667$ A, Z% e/ W( ^; d3 M
顺带提下MinDamage和MaxDamage,它们的修正因子为 ((10*715827883)/4294967296)/2 ~=0.833
' V" _4 o2 l1 \% E/ B
5 h" ~& p6 v0 |4 w& H% i3 s5 Y4 V2 计算额外的附加AR -> AR_EXT ,如技能带的AR等,将作为参数传给第3步/ m0 Z+ y2 \, I1 d
/ C4 |# x% D$ d- V2 o% w6 J+ W
3 此步将开始计算命中率 (D2Game.6FC9D240)
& B8 W7 n  ]0 D. G3.1 计算 DEF$ b( B7 o! r8 ?6 C( t
DEF = DEF1 + ARMORCLASS_VS_HTH 或者DEF = DEF1 + ARMORCLASS_VS_MISSILE (根据攻击来定)
2 h+ C+ m/ m+ J: j3.2 直接获的第一步计算好的AR+ h0 E0 \! V6 }9 `6 L
AR = AR + AR_EXT + 5*Dex(敏捷值) ;2 l; S6 _% `) h3 Y, W
获取AR加成 AR_Percent(含所有加成情况,如光环等)
, P* l% q6 K8 D' ?8 \/ u% IAR = AR + AR *(AR_Percent%) ;此AR将用于最终计算
( U2 M/ z' }9 @  O8 F5 l& k  h1 E3.3 又来到了这个公式 Tohit% = [ ([ AR*100/(AR+DEF) ] * MLVL *2)/(DLVL+MLVL) ]
0 W; j, v9 |/ f$ D" S6 Q/ v但不同的是,这里的MLVL将使用实际的等级(不含场景等级修正,不含金怪等级奖励)3 B" s& [5 @7 b# Y, H4 h$ Z
- U; [" p" r2 j7 _4 f4 ?
3.4 将结果限定在 [5 , 95 ]区间内 8 ?5 _. c+ l5 j
& a% _# t# n+ G9 h7 h. B
从上面过程可以看出,在非资料片里,实际怪物对你的命中率,将低于属性页显示的值$ z9 G2 G0 I8 X: h
以地狱大虫为例子,MPQ等级88 , 非资料片等级72 ,测试人物85级165防御- d2 j( G, X0 a
属性页显示为94%命中 = [ [2584*100/(2584+165)]*88*2 /(88+85) ] (2584 为 88级的ACTH*A1TH/100 *0.667 = 3874*110/100 *0.667)# j7 J2 M6 Q* A2 f) F2 r8 L

2 v- j% Z. q8 H: P( q实际只有[ [2138*100/(2138+165)]*72*2 /(72+85) ] = 84% (2138 为 72级的ACTH*A1TH/100 *0.667 = 2914 *110 /100 *0.667) (计算中有误差, 跟踪代码显示是86%)
神话战网出品,必出精品!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|神话暗黑 ( 陕ICP备18004004号-1 )

GMT+8, 2025-7-8 16:55 , Processed in 0.053299 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表