|
转载:https://tieba.baidu.com/p/5816497856
" k8 y" U4 A& b7 x4 U8 @& b6 c& w4 g) Y5 Z
1 G0 t. p; d7 ` u/ Q本文作者为marsgod,替别人活着就是他的新浪博客。, r1 b$ o6 @( e. J8 {! x- T
f3 ?" U6 U- s, ?
$ [ G; x: I* X! n% m0 [; N0 g
结论:敲石头的结果在敲石头的游戏被创建的时候就已经确定了,其他因素不影响在该游戏敲石头的结果,例如你换别的BB来敲,结果也一样。 就像一个游戏被创建之后,游戏的地图就确定了,不管你进来几个人、杀什么BOSS都一样
0 g5 Q4 g1 O& K/ R A8 {6 A1 p7 I* {' \2 q
) N" E. g6 `/ ^! T1 t
这是marsgod原来写的一篇文章,供有志者参考,不过需要较强的汇编语言知识。。。。。- \! D) {+ ?/ ~+ E
文中需要反汇编工具IDA Pro。。。
2 {) x: N# i# x# g+ ?' j
+ N" J0 c* N1 n; @
0 f$ x9 H, N3 W, B. g# h9 X
* z! a5 S% K: ~3 i
. k3 L# P' [1 ~下面说的都是在Diablo2 1.11(其实D2 1.10的代码基本一样)。
/ ]: Q# H# d' P, @, E& a _
! c; z$ V' z8 z
6 F+ d* j+ [) @+ w; A% F/ X+ K" ?
6 J8 a5 Y) |8 S$ z, D* }
: }- o1 e* K3 L5 j1 u
4 i+ K/ z! T$ R$ K$ U4 K
1 G6 U8 p# x3 x, ]; I每次你新建立一个游戏,服务器将给这个游戏一个新的初始种子,这个游戏能够敲出来的石头就定死了。所以和上次游戏完全不一样。
2 ?9 z2 F9 d$ ^! d2 e% I4 J8 V# |/ y客户端无法知道这个初始种子,所以也无法知道敲石头的结果。。。。
/ E4 ]( ]4 K- [6 A; h9 Q% T* q暴雪还是比较聪明的,因为现在还无法从客户端获知每个游戏的初始种子,根据单机文件分析,这个游戏初始种子来源于服务器当前的系统时钟,并经过一个复杂的变换。换句话说,你不可能猜到这个初始种子是多少。
' A( b+ ]- D, ^$ [+ `7 o# Q在计算机里,随机数是如何产生的吗?如果没有物理噪音源,一切所谓的随机,什么LSFR等等,都是伪随机。而伪随机是程序的确定行为而已。只要知道原理,就可以完全提前计算出来。在单机上已经可以“猜”出敲石头的结果了。。。而私服都是以单机游戏为基础的。。
& _0 {3 K$ V0 I# G, ^4 z* I3 {- D |
|