|
转载:https://tieba.baidu.com/p/5816497856
3 H8 s* M* T$ W+ D, i$ O1 A* I, C+ b. ]1 Q
& C+ i' c# S) X0 h7 N/ k* x6 x( v
本文作者为marsgod,替别人活着就是他的新浪博客。
8 p1 l. d6 k" c
$ S3 G% e% H1 ? R3 R
* K3 }) ], N; O. W5 _" p& L2 c结论:敲石头的结果在敲石头的游戏被创建的时候就已经确定了,其他因素不影响在该游戏敲石头的结果,例如你换别的BB来敲,结果也一样。 就像一个游戏被创建之后,游戏的地图就确定了,不管你进来几个人、杀什么BOSS都一样) ~5 Y9 C: P( c
) c% F2 m) O" L. ?1 l! ^
# ^+ o. s# t: f9 k! P7 Q这是marsgod原来写的一篇文章,供有志者参考,不过需要较强的汇编语言知识。。。。。
; g2 Q5 \6 `* o/ ?5 O. J; l9 d文中需要反汇编工具IDA Pro。。。
7 G' J* }$ H8 v2 _# x4 O; p3 {7 d' b# Y& ?1 ?4 [
7 d3 \9 C' [- {6 G- i( x% i
3 |- D& |1 A0 e3 t P# u% v' h0 E2 Q
0 u) e) F' N, }3 l
下面说的都是在Diablo2 1.11(其实D2 1.10的代码基本一样)。
( g; H. E/ R, B3 p3 L/ f4 Q
8 ]( k+ C! \, ?" n+ N7 \0 p
b" E5 N/ R6 B/ m$ a$ g
0 u9 ^/ x5 d) }
/ [% W }, {3 }5 w% z) j# v& c' }, X7 }, I- M1 {5 s
, l8 O- E2 `! N6 L每次你新建立一个游戏,服务器将给这个游戏一个新的初始种子,这个游戏能够敲出来的石头就定死了。所以和上次游戏完全不一样。% S8 K5 Z2 f' V" m
客户端无法知道这个初始种子,所以也无法知道敲石头的结果。。。。
# M' |! T8 a# `9 }* y; Z2 ^暴雪还是比较聪明的,因为现在还无法从客户端获知每个游戏的初始种子,根据单机文件分析,这个游戏初始种子来源于服务器当前的系统时钟,并经过一个复杂的变换。换句话说,你不可能猜到这个初始种子是多少。
+ s; ]- Z9 w$ [" {1 N& U在计算机里,随机数是如何产生的吗?如果没有物理噪音源,一切所谓的随机,什么LSFR等等,都是伪随机。而伪随机是程序的确定行为而已。只要知道原理,就可以完全提前计算出来。在单机上已经可以“猜”出敲石头的结果了。。。而私服都是以单机游戏为基础的。。: H' a+ j9 a$ g& j7 z- p+ q
|
|