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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

361

回帖

830

元宝

1

圣者绑元

管理员

Rank: 9Rank: 9Rank: 9

积分
1
发表于 2020-1-13 21:44:18 | 显示全部楼层 |阅读模式
本文由virgol在2008年首发于TTBN。
( g  m9 B9 Q, d2 ~8 C/ w属性页显示的被怪物击中几率的计算过程
" B/ ~, |6 h) c1 v* F" m  `6 }3 |, M$ d4 i
以下所涉及的内容只针对 "怪物攻击你“时 属性页所显示的被怪物击中几率Tohit%,实际攻击调用的是另外的代码(大体相同,但细节上更复杂)
, g9 s9 @7 p: V
8 o) `6 _& T, Z& b% Q$ Q) ^, Q1 pTohit%计算过程资料片和非资料片调用的是同一函数(代码位置D2Client.6FB38A00),而且不是一般的相同% h) ?5 A! `! g/ ?

1 I" o: S1 [6 I! P; _3 ~2 ?以下是这个函数的主要流程:
7 f" K9 V. G+ d. H# d2 U( p. x* H6 s" n- e4 E
1 取人物属性页显示的防御值 DEF1,5 n( s9 }( r) Y7 m9 a3 @
取 ARMORCLASS_VS_HTH 值(一般为0)
/ `/ x& {' ?7 \8 l最终用于计算的防御值 DEF = DEF1 + ARMORCLASS_VS_HTH ; ! S) j# I0 P2 M, e
0 b: q% g' G  ?: S
2 获取怪物AR值,此值先记为 AR_BASE
$ e& D! c& |4 C& i3 Z(一个复杂的过程,最终取得的值为各种资料网站上能找到的怪物AR值)6 _/ L  l2 ^0 w6 A4 e
$ X  A2 d0 b0 c. V3 I  u
3 将 AR_BASE 转换到用于计算的 AR , q! B9 q6 E) p' \

7 m: @- m+ ~+ G; ]9 I7 F8 V判断monstats.txt中某一列的值是否等于1 ,这个列我估计是noRatio,不确定,但比较符合这个
( C! [. i; x" P, f0 X等于1 的情况下 AR = AR_BASE ,跳到第4步
% C& R, e4 @% F/ E* F判断是否是资料片,资料片AR = AR_BASE ,跳到第4步
( N2 ~) n( q4 Z! c, t判断是否在普通难度,普通难度AR = AR_BASE ,跳到第4步' J7 Q3 @' l# e. }/ O
不满足上述条件,继续处理5 W' A- ?6 W8 B0 u" j
先给出代码的处理方式
& J4 H: C. }/ l& j# BAR_BASE×5 ,逻辑左移1位 ,得到值 AR_TMP6 u" W" Q9 ]' D$ Y4 m' k
让AR_TMP与0x88888889相乘, 取结果的高32位与AR_TMP相加,将结果算术右移3位,得到结果 AR_TMP21 @3 u" ~) `2 H
接着还有一步 将AR_TMP2与 AR_TMP2算术右移15位相加 取得最终用于计算的 AR , 因为此步基本对结果没有影响,我们将其忽略
) `" v* i6 ?! |* \* a& {7 p. J" R) s( i" |8 J
转化为近似的公式:, q( j% l  Z% |% s* }2 k
AR = (10*AR_BASE+10*AR_BASE*(-2004318071)/(2^32))/8 ~= AR_BASE×0.667
; w- ]- J5 o6 G" E/ v实际计算过程中除法取整 0 j3 u$ s1 {' b4 u4 W% Q6 l8 X
4 接着就是大家熟悉的Tohit%计算公式,但是原来的取整方式是错的
) }  K0 j8 p8 w  m, S, lTohit% = [ ([ AR*100/(AR+DEF) ] * MLVL *2)/(DLVL+MLVL) ]
6 G; a  }- k& |6 c% ~* M4 q其中 DLVL 就是自身的等级
  m  T, u9 `: J# C3 _MLVL 是怪物等级
6 \! D8 i- h2 |# V7 \5 _. P; n* e2 {) j; S1 r2 U
这里MLVL很关键,他是从mpq的monstats.txt中直接获取的!!资料片和非资料片一视同仁
& y; e" `0 q/ G, y! Q也就是,对于资料片来说,计算Tohit%是忽略场景等级影响的,也忽略金怪带来的奖励等级# I- p; u: `4 h5 ~5 ?
对于非资料片,一个72lv的大虫,计算Tohit%是按88lv来算的~~
7 P! h, W1 m$ {同样,第2步取 AR_BASE 的时候也是按monstats.txt中的等级来计算的$ W' [8 Q  C* r+ |
; O1 v& W# V" r/ A+ n5 r/ h
5 计算函数上面已经结束,调用后会再将结果限定到 [5 ,95]区间内
- H3 p% B4 r6 V; A
神话战网出品,必出精品!
回复

使用道具 举报

361

回帖

830

元宝

1

圣者绑元

管理员

Rank: 9Rank: 9Rank: 9

积分
1
 楼主| 发表于 2020-1-13 21:44:26 | 显示全部楼层
楼上帖子中分析了属性页显示的被命中几率的计算过程9 Z& T+ Y, h" t5 H& q6 ?9 q* _& F4 Q
因为属性页显示的值查看时可以忽略实际怪物的生存状态,所以肯定是不准确的
+ V. ]- M$ \) Q/ Z  \& T' J& w7 u8 T2 s
本帖将分析 "怪物攻击你" 时实际命中率的计算过程 与 属性页显示的被命中几率的计算过程(暂称为"过程A")的不同& F5 B% M  r* H$ ]- O$ @
其他情况可以参考(til的某帖子,但已失效),那个帖子大体内容还是正确的
. C9 q, Q/ ~9 D5 j) A. B0 p/ e" T
1 在计算命中率前,会调用D2Game.6FCB4740计算 MinDamage ,MaxDamage , AR_BASE) B* ?* j; t8 m5 g4 [
计算AR_BASE时,将使用怪物的真实等级(不含场景等级修正,不含金怪等级奖励),
& o4 [5 {! e6 W+ |. C9 I一般来说 AR_BASE = (monlvl.txt中的TH × monstats.txt中的XXTH )/100 , 结果取整2 m2 F5 V7 S9 f2 M: x! H0 J
其中XXTH 可能为 A1TH , A2TH , S1TH ,根据使用的攻击来定(过程A中使用的都是A1TH)
. u. E% e! g6 S; n. q6 c  c4 e+ |4 e7 m+ ^& D
然后会跟过程A中一样根据条件进行调整,但条件顺序有点不一样,不过结果是一样的! j6 T. l$ x2 H9 O- H* W' ~  Y
判断是否是资料片,资料片 AR = AR_BASE ,跳到第2步
# i% W& I' H4 o3 @- I6 M! Q! h判断是否在普通难度,普通难度 AR = AR_BASE ,跳到第2步
0 `8 f; W/ J( ^8 y- L判断monstats.txt中noRatio是否为1 ,为1的情况下 AR = AR_BASE ,跳到第2步9 o- d& m9 b! u% k
上面条件都不满足 AR = (10*AR_BASE+10*AR_BASE*(-2004318071)/(2^32))/8 ~= AR_BASE×0.667
5 h3 x) H/ t+ I3 e7 N1 X& r顺带提下MinDamage和MaxDamage,它们的修正因子为 ((10*715827883)/4294967296)/2 ~=0.833; |9 W: m4 i4 q/ O

/ {; Q  M  _7 M6 \2 计算额外的附加AR -> AR_EXT ,如技能带的AR等,将作为参数传给第3步& H, i+ P) ~, ~
- x0 k% }4 l5 M" S  Y, b
3 此步将开始计算命中率 (D2Game.6FC9D240)
2 h; d6 l% v, a3.1 计算 DEF
5 X5 z. Q: k* f, T. Q/ ^8 w( }DEF = DEF1 + ARMORCLASS_VS_HTH 或者DEF = DEF1 + ARMORCLASS_VS_MISSILE (根据攻击来定)) s5 m- e$ \9 O9 f, b# D
3.2 直接获的第一步计算好的AR
: S5 s3 y6 B$ VAR = AR + AR_EXT + 5*Dex(敏捷值) ;3 i+ O- q: l( y
获取AR加成 AR_Percent(含所有加成情况,如光环等)
! n9 G" A3 w9 `2 [8 J) vAR = AR + AR *(AR_Percent%) ;此AR将用于最终计算, u$ a% w& W# I1 F9 V8 m3 b
3.3 又来到了这个公式 Tohit% = [ ([ AR*100/(AR+DEF) ] * MLVL *2)/(DLVL+MLVL) ], G9 U" H. G! s) H5 B& _/ T% B
但不同的是,这里的MLVL将使用实际的等级(不含场景等级修正,不含金怪等级奖励)7 ]5 H+ a+ V( Q% D1 y7 @

: u. @2 Y9 N. d3.4 将结果限定在 [5 , 95 ]区间内
7 i( V* E9 N( y+ k2 w! o- }
* z) y: h5 m* ~( y$ }$ C从上面过程可以看出,在非资料片里,实际怪物对你的命中率,将低于属性页显示的值& h  M- H, B2 n' ^; [9 C
以地狱大虫为例子,MPQ等级88 , 非资料片等级72 ,测试人物85级165防御
- D) p! u3 l4 q' R& T属性页显示为94%命中 = [ [2584*100/(2584+165)]*88*2 /(88+85) ] (2584 为 88级的ACTH*A1TH/100 *0.667 = 3874*110/100 *0.667)! ?3 E) n3 E6 F

/ C8 ?: H5 T+ d6 @+ O: C实际只有[ [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-2-5 19:48 , Processed in 0.109139 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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