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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

361

回帖

830

元宝

1

圣者绑元

管理员

Rank: 9Rank: 9Rank: 9

积分
1
发表于 2020-1-13 21:44:18 | 显示全部楼层 |阅读模式
本文由virgol在2008年首发于TTBN。% J$ {% w9 k  C" N9 H
属性页显示的被怪物击中几率的计算过程
5 q: u: O/ i. r; j6 x9 k
9 R( ^0 Z% n9 H9 B4 T1 K以下所涉及的内容只针对 "怪物攻击你“时 属性页所显示的被怪物击中几率Tohit%,实际攻击调用的是另外的代码(大体相同,但细节上更复杂)
* U" q+ }4 C/ W0 \: C. G4 d* X* D0 t8 g( p. p% ~
Tohit%计算过程资料片和非资料片调用的是同一函数(代码位置D2Client.6FB38A00),而且不是一般的相同, L9 }, u6 ^* g2 w! B- h& }# l$ K
5 n2 j2 }, a, O2 I) \) t" ?
以下是这个函数的主要流程:" c4 K" k5 e$ Q
4 D  U4 O! M# N( e
1 取人物属性页显示的防御值 DEF1," z9 A" Q, w& Q! i
取 ARMORCLASS_VS_HTH 值(一般为0)% ]% g0 r4 A0 r: q0 T/ D; a5 N
最终用于计算的防御值 DEF = DEF1 + ARMORCLASS_VS_HTH ; 6 c  K0 w4 Y- W% u" Q

, o+ n! _9 \- V2 获取怪物AR值,此值先记为 AR_BASE
* m0 H- T1 b/ G! J( [# w( g- _/ X/ q(一个复杂的过程,最终取得的值为各种资料网站上能找到的怪物AR值)6 [: T% t, h/ N4 a9 i& a

9 U9 a. k  c8 g, l$ j2 ]3 将 AR_BASE 转换到用于计算的 AR & ^' c. [4 i8 [3 f7 d

; F! k/ H; Z. w' E& v8 ~0 d判断monstats.txt中某一列的值是否等于1 ,这个列我估计是noRatio,不确定,但比较符合这个
3 d7 V4 ^2 l) n5 M+ o等于1 的情况下 AR = AR_BASE ,跳到第4步
  B# D! H) u$ b6 a. P2 |2 f判断是否是资料片,资料片AR = AR_BASE ,跳到第4步
2 ?* {) W1 g3 L9 g, \判断是否在普通难度,普通难度AR = AR_BASE ,跳到第4步
* ~) w  ]4 i% P& h. `不满足上述条件,继续处理% P5 L! [% m' T# G5 Y+ t* D; v
先给出代码的处理方式! r' I8 l# y7 s% b  ^
AR_BASE×5 ,逻辑左移1位 ,得到值 AR_TMP
( x: u3 u1 `5 p( [$ m让AR_TMP与0x88888889相乘, 取结果的高32位与AR_TMP相加,将结果算术右移3位,得到结果 AR_TMP2
9 q$ o+ r4 Q* V接着还有一步 将AR_TMP2与 AR_TMP2算术右移15位相加 取得最终用于计算的 AR , 因为此步基本对结果没有影响,我们将其忽略
0 ]- w( Q5 X  r4 X2 p$ D. S% e- W6 s
转化为近似的公式:
  O/ n  ^, m# W! SAR = (10*AR_BASE+10*AR_BASE*(-2004318071)/(2^32))/8 ~= AR_BASE×0.667
/ b  u5 I9 @/ W* L/ t3 m实际计算过程中除法取整
* Z* n+ E: o; \" c5 u4 接着就是大家熟悉的Tohit%计算公式,但是原来的取整方式是错的
- G' x' F* g3 R- Q* h( c! S- s* Y# ~; KTohit% = [ ([ AR*100/(AR+DEF) ] * MLVL *2)/(DLVL+MLVL) ]
8 v/ T) {. M9 M: e$ f' {& c/ w其中 DLVL 就是自身的等级* O, |0 j' R# J8 R( r& N
MLVL 是怪物等级
5 k5 U+ z  C# |" T9 v/ |: [* m' U8 p  D" }
这里MLVL很关键,他是从mpq的monstats.txt中直接获取的!!资料片和非资料片一视同仁9 Y- [( s0 `% l1 I: v" v2 G
也就是,对于资料片来说,计算Tohit%是忽略场景等级影响的,也忽略金怪带来的奖励等级, j: I8 r  y* p$ f. z* T: f/ y
对于非资料片,一个72lv的大虫,计算Tohit%是按88lv来算的~~
) ~2 u0 }9 @6 q: R. n9 f  e: u; W2 G同样,第2步取 AR_BASE 的时候也是按monstats.txt中的等级来计算的
0 |; B) D! e  F3 g5 J5 s
2 V, \  L4 `' [5 计算函数上面已经结束,调用后会再将结果限定到 [5 ,95]区间内
1 v6 J6 a$ R1 W$ J
神话战网出品,必出精品!
回复

使用道具 举报

361

回帖

830

元宝

1

圣者绑元

管理员

Rank: 9Rank: 9Rank: 9

积分
1
 楼主| 发表于 2020-1-13 21:44:26 | 显示全部楼层
楼上帖子中分析了属性页显示的被命中几率的计算过程& w3 H/ t( h$ N8 o% c! o; j3 ^( P
因为属性页显示的值查看时可以忽略实际怪物的生存状态,所以肯定是不准确的
: `- s, T, m, ]2 E* V  g# G$ |7 g2 r
本帖将分析 "怪物攻击你" 时实际命中率的计算过程 与 属性页显示的被命中几率的计算过程(暂称为"过程A")的不同! `7 H6 p7 @" `1 v- A
其他情况可以参考(til的某帖子,但已失效),那个帖子大体内容还是正确的
/ m( Z0 a3 ^: E4 ?# A' D6 j& C* p% @4 ]' N
1 在计算命中率前,会调用D2Game.6FCB4740计算 MinDamage ,MaxDamage , AR_BASE
, d7 g1 L4 V+ V! U计算AR_BASE时,将使用怪物的真实等级(不含场景等级修正,不含金怪等级奖励),
3 g" u; O1 a2 P; J% e  ]" T一般来说 AR_BASE = (monlvl.txt中的TH × monstats.txt中的XXTH )/100 , 结果取整
: I+ i) y: R6 S) t  X7 Y  J其中XXTH 可能为 A1TH , A2TH , S1TH ,根据使用的攻击来定(过程A中使用的都是A1TH)0 ]  G% }- F! O8 e" I/ q  a

3 ?9 y( I/ Y3 k  I+ p( Q然后会跟过程A中一样根据条件进行调整,但条件顺序有点不一样,不过结果是一样的
- J. k4 _3 X9 P$ j$ [$ J判断是否是资料片,资料片 AR = AR_BASE ,跳到第2步3 M9 i4 E$ C/ M7 o
判断是否在普通难度,普通难度 AR = AR_BASE ,跳到第2步6 `% u8 h& G$ }  y
判断monstats.txt中noRatio是否为1 ,为1的情况下 AR = AR_BASE ,跳到第2步; o+ ~1 ]* m8 T, V8 z$ {" |* P9 B) J3 A9 u
上面条件都不满足 AR = (10*AR_BASE+10*AR_BASE*(-2004318071)/(2^32))/8 ~= AR_BASE×0.667
9 M" C; @) X# S( Q( e顺带提下MinDamage和MaxDamage,它们的修正因子为 ((10*715827883)/4294967296)/2 ~=0.8336 A9 r/ |8 y+ P+ ^/ n" g

8 ~7 \# |! i; |2 计算额外的附加AR -> AR_EXT ,如技能带的AR等,将作为参数传给第3步
0 M2 m& f  ~( E& w( q: N5 a$ Z& u- a3 E! ]( ]+ E- j
3 此步将开始计算命中率 (D2Game.6FC9D240)$ d" v) O" J4 Z. O/ K9 {* v
3.1 计算 DEF& ^0 ^+ f) O( ~
DEF = DEF1 + ARMORCLASS_VS_HTH 或者DEF = DEF1 + ARMORCLASS_VS_MISSILE (根据攻击来定)1 \) H" O. G( @; g
3.2 直接获的第一步计算好的AR. |) P% c2 G$ I9 H
AR = AR + AR_EXT + 5*Dex(敏捷值) ;. O7 i0 w7 h7 V+ c9 T5 K( O
获取AR加成 AR_Percent(含所有加成情况,如光环等)
/ j: i3 C& ]& L; z- RAR = AR + AR *(AR_Percent%) ;此AR将用于最终计算
/ _7 @1 ~* k0 Q) e  e# p0 q3.3 又来到了这个公式 Tohit% = [ ([ AR*100/(AR+DEF) ] * MLVL *2)/(DLVL+MLVL) ]2 H0 J3 V" f; o$ \4 z. s( z
但不同的是,这里的MLVL将使用实际的等级(不含场景等级修正,不含金怪等级奖励)8 ^8 Y& y0 ?' h- H7 }) |7 Z% E
! u) S7 W; T+ K; H; t# M! E8 H3 A
3.4 将结果限定在 [5 , 95 ]区间内
" t' n8 z* H! J5 \8 Q. x7 M1 T/ b6 A3 T; p6 h6 }+ {% e# ]
从上面过程可以看出,在非资料片里,实际怪物对你的命中率,将低于属性页显示的值; Z. }5 N2 Z( v  L/ _7 X
以地狱大虫为例子,MPQ等级88 , 非资料片等级72 ,测试人物85级165防御
# m' _! V5 }0 Y8 ~4 {( N属性页显示为94%命中 = [ [2584*100/(2584+165)]*88*2 /(88+85) ] (2584 为 88级的ACTH*A1TH/100 *0.667 = 3874*110/100 *0.667)% i% G& o; R9 p7 b/ N- r# b

) `# {! q1 o4 F0 j) d2 i# n/ p实际只有[ [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, 2024-12-22 15:10 , Processed in 0.056746 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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