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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

361

回帖

830

元宝

1

圣者绑元

管理员

Rank: 9Rank: 9Rank: 9

积分
1
发表于 2020-1-13 21:44:18 | 显示全部楼层 |阅读模式
本文由virgol在2008年首发于TTBN。
8 R% K) h9 A$ W属性页显示的被怪物击中几率的计算过程
1 l. `0 A+ k4 ~+ A1 g9 d' j' J
, R7 a; v5 `7 j- O8 e以下所涉及的内容只针对 "怪物攻击你“时 属性页所显示的被怪物击中几率Tohit%,实际攻击调用的是另外的代码(大体相同,但细节上更复杂)
% @% n* z; I. ~. i& C# v0 v) T. \6 f0 `+ `- D/ h
Tohit%计算过程资料片和非资料片调用的是同一函数(代码位置D2Client.6FB38A00),而且不是一般的相同3 e( \. c0 Z  r# s

2 x0 k% A9 t, S% s7 ?以下是这个函数的主要流程:5 z  u9 v& o9 m/ C6 t9 H
2 O! q# s) ~  \1 D% _. o( f
1 取人物属性页显示的防御值 DEF1,
1 A& C- c+ P3 n: o" }取 ARMORCLASS_VS_HTH 值(一般为0)( @# X" v) \$ S  @
最终用于计算的防御值 DEF = DEF1 + ARMORCLASS_VS_HTH ;
- ~+ t5 L/ z6 S- L4 s! L! q
2 o/ u6 d5 o: i0 d2 获取怪物AR值,此值先记为 AR_BASE
+ Q, t, Q' n4 M7 {7 C(一个复杂的过程,最终取得的值为各种资料网站上能找到的怪物AR值)+ k, s/ E3 s5 _; c, |

9 V, e: C8 P; z2 p" B3 将 AR_BASE 转换到用于计算的 AR
" L; f) v4 g8 e9 [0 V* |( {$ S7 S( m0 ], w- t; o
判断monstats.txt中某一列的值是否等于1 ,这个列我估计是noRatio,不确定,但比较符合这个- V! E" @. i+ l9 h
等于1 的情况下 AR = AR_BASE ,跳到第4步
6 g  ~9 V! [0 Y判断是否是资料片,资料片AR = AR_BASE ,跳到第4步2 C- Y1 l9 U$ ]) E1 f+ [4 D
判断是否在普通难度,普通难度AR = AR_BASE ,跳到第4步
4 N' l" ?; R' e6 \8 f不满足上述条件,继续处理
6 b  ~! E: ]3 p1 t先给出代码的处理方式
! y: \' |; \! W3 ]+ ?AR_BASE×5 ,逻辑左移1位 ,得到值 AR_TMP
0 }$ W4 w' M6 q' G9 T& {6 C/ ^! k让AR_TMP与0x88888889相乘, 取结果的高32位与AR_TMP相加,将结果算术右移3位,得到结果 AR_TMP2
2 Z# a' F' Q4 A7 x) w( h接着还有一步 将AR_TMP2与 AR_TMP2算术右移15位相加 取得最终用于计算的 AR , 因为此步基本对结果没有影响,我们将其忽略
, i- }9 J3 D/ F# U) d4 l" W0 i( p* v- E
转化为近似的公式:
' l% J# w, C* V2 k" G7 X; Z& x$ W, Q; SAR = (10*AR_BASE+10*AR_BASE*(-2004318071)/(2^32))/8 ~= AR_BASE×0.667/ a# y! o# K9 ?
实际计算过程中除法取整 3 f* b9 J( |1 E5 H$ \$ B  I4 W
4 接着就是大家熟悉的Tohit%计算公式,但是原来的取整方式是错的
0 i9 d: ^! p$ T! m: ]Tohit% = [ ([ AR*100/(AR+DEF) ] * MLVL *2)/(DLVL+MLVL) ]
  ?3 y5 x9 Q, P其中 DLVL 就是自身的等级9 g+ ], m# P3 h. }7 \5 l
MLVL 是怪物等级$ S) N5 w% F. I) S
' F& i* [7 Y5 O& ]3 v1 P
这里MLVL很关键,他是从mpq的monstats.txt中直接获取的!!资料片和非资料片一视同仁) Y! z( a# {! e9 X( d3 z7 \7 F+ H* I
也就是,对于资料片来说,计算Tohit%是忽略场景等级影响的,也忽略金怪带来的奖励等级" g+ a1 N4 O4 l( b
对于非资料片,一个72lv的大虫,计算Tohit%是按88lv来算的~~
4 p: z9 ?+ m' S, u- ~. q* d# h同样,第2步取 AR_BASE 的时候也是按monstats.txt中的等级来计算的
" J+ j8 O; C$ s; u% o8 p/ @8 E7 @# g5 h( g+ T) |6 B* v
5 计算函数上面已经结束,调用后会再将结果限定到 [5 ,95]区间内

7 P5 J: }; o5 Q3 B/ Q, y
神话战网出品,必出精品!
回复

使用道具 举报

361

回帖

830

元宝

1

圣者绑元

管理员

Rank: 9Rank: 9Rank: 9

积分
1
 楼主| 发表于 2020-1-13 21:44:26 | 显示全部楼层
楼上帖子中分析了属性页显示的被命中几率的计算过程
  ~+ E1 b% \0 ^! F因为属性页显示的值查看时可以忽略实际怪物的生存状态,所以肯定是不准确的
& n8 h+ i8 j6 f! }; I% h: p
, p% O4 v( f" Y4 l& H本帖将分析 "怪物攻击你" 时实际命中率的计算过程 与 属性页显示的被命中几率的计算过程(暂称为"过程A")的不同
  M9 Q  U' Z; z其他情况可以参考(til的某帖子,但已失效),那个帖子大体内容还是正确的
# U+ i1 V/ j* z+ K7 d% E6 U- y
* ?# a/ B( U& k1 在计算命中率前,会调用D2Game.6FCB4740计算 MinDamage ,MaxDamage , AR_BASE
+ y* C( S, n7 P4 m4 K计算AR_BASE时,将使用怪物的真实等级(不含场景等级修正,不含金怪等级奖励),
3 b1 O2 w* ?9 k7 Y8 Q一般来说 AR_BASE = (monlvl.txt中的TH × monstats.txt中的XXTH )/100 , 结果取整+ @+ ~, y7 J9 T% h, P1 F3 |
其中XXTH 可能为 A1TH , A2TH , S1TH ,根据使用的攻击来定(过程A中使用的都是A1TH)- W8 G+ }+ R' c9 }' e

, _* l. O1 f4 E0 o6 ?# l& ]然后会跟过程A中一样根据条件进行调整,但条件顺序有点不一样,不过结果是一样的  A% p: ?- U, ]+ u( I4 n0 X; J
判断是否是资料片,资料片 AR = AR_BASE ,跳到第2步9 u  Y0 o% F) L9 H6 {/ p
判断是否在普通难度,普通难度 AR = AR_BASE ,跳到第2步- ~3 X' D: b- h5 s, q& K) N3 B2 C
判断monstats.txt中noRatio是否为1 ,为1的情况下 AR = AR_BASE ,跳到第2步
& A7 U3 j, |$ J+ a8 J上面条件都不满足 AR = (10*AR_BASE+10*AR_BASE*(-2004318071)/(2^32))/8 ~= AR_BASE×0.667+ O* W( z+ q$ [4 S9 @
顺带提下MinDamage和MaxDamage,它们的修正因子为 ((10*715827883)/4294967296)/2 ~=0.8339 ^9 u% D/ e$ K4 n& y8 u! g3 f
! |6 q! @0 q" {' n1 c# K8 s; d. M
2 计算额外的附加AR -> AR_EXT ,如技能带的AR等,将作为参数传给第3步
$ L4 G& O% D' C: U6 K( x
" L5 x# X- ?# p. x- d5 ]3 此步将开始计算命中率 (D2Game.6FC9D240)7 f. F+ }( ~. G  o: \
3.1 计算 DEF
' ^& y4 s8 c2 CDEF = DEF1 + ARMORCLASS_VS_HTH 或者DEF = DEF1 + ARMORCLASS_VS_MISSILE (根据攻击来定); M8 T# r  F0 H( |
3.2 直接获的第一步计算好的AR
* M( }; p  T& S9 P6 w3 C6 L* `4 N* z+ }AR = AR + AR_EXT + 5*Dex(敏捷值) ;
5 l2 j1 @# F$ J4 m4 `4 G2 G获取AR加成 AR_Percent(含所有加成情况,如光环等)
* J$ t: y% ?& Q/ L, a1 MAR = AR + AR *(AR_Percent%) ;此AR将用于最终计算
5 c/ y# H: i" v; W; n3.3 又来到了这个公式 Tohit% = [ ([ AR*100/(AR+DEF) ] * MLVL *2)/(DLVL+MLVL) ]
4 C! E+ p& j0 G但不同的是,这里的MLVL将使用实际的等级(不含场景等级修正,不含金怪等级奖励)
# l$ Y" k% v9 G" }; t5 y
- {9 ^0 G4 `. i$ p% L2 `1 d+ v' l3.4 将结果限定在 [5 , 95 ]区间内
% a0 x" \* I' W  U" `. e7 y( m) e) l
从上面过程可以看出,在非资料片里,实际怪物对你的命中率,将低于属性页显示的值3 @- g3 Y/ ^5 N: `
以地狱大虫为例子,MPQ等级88 , 非资料片等级72 ,测试人物85级165防御0 x7 T, M7 l" W1 h$ p$ Y- Y. _
属性页显示为94%命中 = [ [2584*100/(2584+165)]*88*2 /(88+85) ] (2584 为 88级的ACTH*A1TH/100 *0.667 = 3874*110/100 *0.667)
8 s- r$ N# h( T5 n) Q1 E
# e* J, i- _. m: E4 ~, t实际只有[ [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-6-20 16:17 , Processed in 0.053588 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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