|  | 
 
| 原创作者:等风来* f( a! }- w# ~+ p( \! K; R  ?  T1 ` 发布日期:2016-08-18
 ! j8 I3 y/ }4 T; z0 \! V  x" d' P) L" H: I7 U6 V9 j& g
 
 , l9 g( ~8 B* qHalt; @% @/ `  y/ F9 J: P
 Location : , line #xxxx
 * [/ l$ P( z7 X, MExpression : Unrecoverable internal error xxxxxxxx: b4 p8 Y. G# a! D
 
 y' Z  }; x5 Q: ~, G, `; r
 # }6 u) J# u- X- B这是一种常见提示错误的通知,也是比较不好处理的一种错误。最近有不少新人遇到不知道该怎么办,我简单写一些自己的处理方法。
 ( |5 Y: ^9 x# T  j' t5 J- P1 E: V& g5 T, r, ^
 1. 判断是什么原因导致的,回想一下自己最后修改过什么,有习惯修改前备份的同学可以尝试还原一下。+ U9 ^3 n: |0 r
 
 9 y8 C9 a5 @. b. S& a$ W  o2. 将错误提示截图,发到BBS上问一下或上其他网站查询解决方法。* C# M' e, k, k; K/ d6 P$ Q9 g
 
 3 c  e8 }0 Q3 s" I3. 全屏模式有可能不会出现错误提示,这个时候改为窗口模式试一下(启动参数为:-w),个人建议尽量使用窗口模式进行游戏。# e% M* B8 K6 A% j- K& u
 
 c: O! J( y. v2 V& l" Z- Q9 O( C4. 如果是游戏进行中的崩溃,回想一下当时自己在做什么,基本可以判断是什么导致的游戏崩溃,以及怎么去避免这种情况的发生,有个最经典的例子就是AMA拿敲石头的锤子进入游戏出现的错误,这就是D2游戏文件中D2CHAR.MPQ文件损坏, AMRHWHMSC1HS.dcc文件缺失导致的。
 ( V( d* f3 u, ^9 _. @3 k" J
 + C& F* K6 O0 q; b4 E. W5. 如果提示为Access Violation,这个需要查询D2的游戏记录文件,这个文件的名字是D2xxxxxx.txt,后面的xxxxxx是6位数字,命名的规则为年月日(yymmdd),将记录中有关Error的部分复制下来,发到BBS上问一下或上其他网站查询解决方法。8 a; l0 m! V% [! \5 _
 & P. a4 _4 e$ L9 W* o
 6. 错误提示line #xxxx 中的数字,通过修改DLL基址可以将Error提示中的xxxx重新定义方便查询。个人建议出错后,备份一下Storm.dll,然后用我上传的Storm.dll覆盖一下,然后重进游戏生成错误提示line #xxxx 后再还原,将新的line #xxxx 发到BBS上问一下或上其他网站查询解决方法。
 : e& _" t' {4 u3 }' C+ N% u, @3 P% C/ L( X9 e+ d; h
 / f3 |6 w6 W8 J# i( m
 关于"you are killed by warden because error response.[reason=5]"问题
 " X, O6 O5 K+ b8 n- I8 F
 * x; @7 e! h9 m7 W6 ^' W& e这个问题表现为在进行战网游戏时,出现You are killed by warden because error response.[reason=5],然后游戏卡死,只能退出游戏。
 ! X# F& e9 P1 G1 o+ Z1 |. ^9 P# e6 w7 E0 z) G" J. @
 关于这个问题,1.11b版D2GS的发布者marsgod是这样说的:这是d2warden设计本身的问题。现在的d2warden使用一种比较简单粗暴的方式在侦测玩家是否使用了某种hack,因此考虑不周,容易出现误杀的情况。这个问题的基本原理,就是某个hack规则检测出了问题。例如,服务器需要检测玩家的d2client.dll 0x1234出是否是值0000(正常值)或者9999(hack值),如果发现玩家返回的值是0000,则认为玩家没有使用某种hack,如果玩家返回的是9999,则认为玩家使用了某种hack,当然要把玩家从服务器上踢掉。& v7 u" k* Y: w8 m0 b* C/ h4 G5 z
 这种检测一般情况是够用了的,但是没有考虑到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]。
 7 w, k& G8 t, Z5 V7 i; l% T0 U( g; F8 w. Y$ I' P# ~
 目前情况下,一些暂时的解决办法是:
 / h& O& {0 c4 x# o
 1 A2 G" d7 L  ^6 p- G' H5 r( E
 ! g$ m$ ]. f2 p3 I7 E[1] 重新启动机器,尽量不要运行其他程序。
 ( w2 k7 S( b) N7 b: f5 o4 O6 \( Z: `) S  ?8 H: C
 [2] 看看最近是否安装了新软件、新驱动,尝试卸载掉,因为这些东西会在你启动D2之前,就预先装载了一大堆DLL到内存里。# N2 l* J: C) d
 
 : h8 V' n  Y7 u) u& y/ A[3] 下载LordPE等软件,查看到底哪些DLL占用了D2的地址空间,顺藤摸瓜,把它们禁用或者卸载掉。
 / }0 Z, M' W( @$ e' T# y
 | 
 |