|
转载:https://tieba.baidu.com/p/5816497856
& Y, ]" p+ A) R- T+ z+ E' V2 {4 C* K9 s! i7 N4 p2 T; X
: u& M/ s- [8 {! W本文作者为marsgod,替别人活着就是他的新浪博客。7 T/ I* C& g1 I+ L6 U$ E1 ?
; H4 A- ^9 b$ t. L; }. A& k2 [$ M' d+ V, E) T1 { J9 O1 \1 g
结论:敲石头的结果在敲石头的游戏被创建的时候就已经确定了,其他因素不影响在该游戏敲石头的结果,例如你换别的BB来敲,结果也一样。 就像一个游戏被创建之后,游戏的地图就确定了,不管你进来几个人、杀什么BOSS都一样" Z2 G+ c% s3 K( J1 B+ \5 |
/ c; J' A0 S/ `% F) n
' a& p- _- \7 {9 \3 R8 s这是marsgod原来写的一篇文章,供有志者参考,不过需要较强的汇编语言知识。。。。。
, e, l9 L4 i, a3 N7 t f文中需要反汇编工具IDA Pro。。。$ _9 p8 v) b) ~/ ]2 p, g
7 A( E5 X9 k9 q& v
' }, ]) H7 a6 t' u3 i: ~1 d# ~
! c" x0 T( a* ?2 a, w( t" D$ H, ~% R1 W$ I+ ~
下面说的都是在Diablo2 1.11(其实D2 1.10的代码基本一样)。
9 ]* h4 r0 s# r& F8 ]# W
D1 |- k6 K7 U$ {
% O! g4 w" M- ~9 C3 y
7 S2 q7 N! k5 l g: e
6 I( d) z! Y5 A' i3 S% `# F
- H d) F. W3 \* i; ]$ r
* q- o7 N( n# H每次你新建立一个游戏,服务器将给这个游戏一个新的初始种子,这个游戏能够敲出来的石头就定死了。所以和上次游戏完全不一样。
. s$ ^& u/ ?8 y( u* a客户端无法知道这个初始种子,所以也无法知道敲石头的结果。。。。8 Y C/ u& v% T7 \
暴雪还是比较聪明的,因为现在还无法从客户端获知每个游戏的初始种子,根据单机文件分析,这个游戏初始种子来源于服务器当前的系统时钟,并经过一个复杂的变换。换句话说,你不可能猜到这个初始种子是多少。9 F% R. z& l! S3 \. d: Z
在计算机里,随机数是如何产生的吗?如果没有物理噪音源,一切所谓的随机,什么LSFR等等,都是伪随机。而伪随机是程序的确定行为而已。只要知道原理,就可以完全提前计算出来。在单机上已经可以“猜”出敲石头的结果了。。。而私服都是以单机游戏为基础的。。
, L. m; g: ^5 s1 M |
|