|
原创作者:等风来
9 x/ b: G9 C8 W/ }5 z发布日期:2016-08-180 V" n' n' K6 E# c( G
! o3 r# E1 Q7 g/ n( _# c& s6 S4 ]& u/ P# J3 o4 }3 v
Halt }) o! w& L7 |9 N- r
Location : , line #xxxx" A( ]4 A0 n# z9 G
Expression : Unrecoverable internal error xxxxxxxx
' w) G8 k- m+ I+ l5 a( M, K4 N' f/ s( d) x% g, l8 R2 W; a; H5 E
! g% P3 d2 e. v0 f这是一种常见提示错误的通知,也是比较不好处理的一种错误。最近有不少新人遇到不知道该怎么办,我简单写一些自己的处理方法。 7 u% N7 j# J7 I
4 @" }4 k6 j9 N% s6 M/ X1. 判断是什么原因导致的,回想一下自己最后修改过什么,有习惯修改前备份的同学可以尝试还原一下。
5 M8 _% {& I* _3 J2 i% d: |/ z- ~3 }4 ^1 J' q: e8 f% N$ _
2. 将错误提示截图,发到BBS上问一下或上其他网站查询解决方法。; @) G o- u8 g" U5 x, v
' H# o! I% J L3. 全屏模式有可能不会出现错误提示,这个时候改为窗口模式试一下(启动参数为:-w),个人建议尽量使用窗口模式进行游戏。
5 c0 z2 r/ y5 a- R" q3 P, @1 D/ y
9 t5 L: I" |7 v; ^5 Q0 }5 F& U4. 如果是游戏进行中的崩溃,回想一下当时自己在做什么,基本可以判断是什么导致的游戏崩溃,以及怎么去避免这种情况的发生,有个最经典的例子就是AMA拿敲石头的锤子进入游戏出现的错误,这就是D2游戏文件中D2CHAR.MPQ文件损坏, AMRHWHMSC1HS.dcc文件缺失导致的。
+ n# i1 e W5 G1 I4 q8 j
7 e8 |( V! Z6 l) E9 S$ I, O5. 如果提示为Access Violation,这个需要查询D2的游戏记录文件,这个文件的名字是D2xxxxxx.txt,后面的xxxxxx是6位数字,命名的规则为年月日(yymmdd),将记录中有关Error的部分复制下来,发到BBS上问一下或上其他网站查询解决方法。
( C# O7 l3 n2 t* X7 |. b* w( ?' g
9 @4 k( R. ]! ^5 B ~1 ]: q6. 错误提示line #xxxx 中的数字,通过修改DLL基址可以将Error提示中的xxxx重新定义方便查询。个人建议出错后,备份一下Storm.dll,然后用我上传的Storm.dll覆盖一下,然后重进游戏生成错误提示line #xxxx 后再还原,将新的line #xxxx 发到BBS上问一下或上其他网站查询解决方法。
4 P- G$ f t! K: q2 N% r+ A8 A" I6 |! E3 ~' `8 S& K4 b
% Q/ g' `, h$ t' \; L关于"you are killed by warden because error response.[reason=5]"问题; Q# }1 g% G/ ~9 j" p
+ }( ]; r; b) r$ L, c1 O这个问题表现为在进行战网游戏时,出现You are killed by warden because error response.[reason=5],然后游戏卡死,只能退出游戏。
* N5 r, b- {2 a; L9 q9 _% S# k0 g! I8 `) X: J0 Q; k% W6 X) l
关于这个问题,1.11b版D2GS的发布者marsgod是这样说的:这是d2warden设计本身的问题。现在的d2warden使用一种比较简单粗暴的方式在侦测玩家是否使用了某种hack,因此考虑不周,容易出现误杀的情况。这个问题的基本原理,就是某个hack规则检测出了问题。例如,服务器需要检测玩家的d2client.dll 0x1234出是否是值0000(正常值)或者9999(hack值),如果发现玩家返回的值是0000,则认为玩家没有使用某种hack,如果玩家返回的是9999,则认为玩家使用了某种hack,当然要把玩家从服务器上踢掉。
: q* [4 B: R, J; ?7 N这种检测一般情况是够用了的,但是没有考虑到windows操作系统的可重定位机制带来的影响。由于可重定位机制的存在,导致d2client.dll启动的时候,没有被加载到预定的地址0x6FAB0000,而是被动态修改了地址,比如加载到了0x10000000,此后d2client.dll里面所有可重定位地址,都需要修改,这个过程,称为程序加载的重定位,具体可以百度。如果某种d2warden检测规则,恰好检测到一个d2client.dll中的可重定位地址部分,那么玩家返回的值就不是理想的0000了,比如返回了5555。而这个值,既不是正确值0000,也不是hack值9999。这个时候,严格的规则检测,就会将玩家踢出游戏,并报告You are killed by warden because error response.[reason=5]。
! J& ], s) L' F! }, C) [) }1 s0 h( M1 t5 B+ N( G( O! s; X9 }4 W
目前情况下,一些暂时的解决办法是:9 g3 o3 M& B- W3 @. ^( o
, D7 |# x/ h9 M
3 P5 y# \4 G @" f3 D0 x[1] 重新启动机器,尽量不要运行其他程序。1 k# P+ B1 ?* y
! O; s& O9 @, ^/ q6 P6 k; a, G1 d
[2] 看看最近是否安装了新软件、新驱动,尝试卸载掉,因为这些东西会在你启动D2之前,就预先装载了一大堆DLL到内存里。
! G$ q6 l6 Z; y+ l4 w) [1 K) i
8 I1 H% e: G4 M' D7 \[3] 下载LordPE等软件,查看到底哪些DLL占用了D2的地址空间,顺藤摸瓜,把它们禁用或者卸载掉。3 k5 ^3 r* q$ M. ^% M
|
|