
名钻假日赌场的幸运轮盘允许玩家转动以抽取各种奖励。多年以来,玩家发现通过控制摇动转盘的力度、摇动转盘的时机、游戏内的帧数等要素,似乎可以改变幸运轮盘的转速和时长,以让转盘指针最终停留在玩家所期望的结果附近。以此为基础,各类 “四秒大法”、“五秒大法” 等奇招进而相继诞生。那么,这些操作的背后是否有理可循?而通过对脚本代码的解读,我们将给出名钻假日赌场幸运轮盘的最终事实,即:其结果是一个完全随机过程,不由玩家意志而发生改变,以此反驳迄今为止的所有各类 N 秒大法。
下面是本地脚本 casino_lucky_wheel.c 中用于生成奖品的有关代码。该段代码自 1.47 版本《名钻假日赌场》起至今未出现任何更改,因此其具备时效性。请见:
https://raw.githubusercontent.com/root-cause/v-decompiled-scripts/master/casino_lucky_wheel.c
从脚本的第 41785 行开始即可找到该段代码。为了方便阅读,所有变量名称均作改动。

上面这段代码告诉我们,函数 generating_lucky_wheel_prize() 定义并初始化了用于储存 20 种幸运轮盘奖励的数组 luckyWheelRewardType[20],分别对应幸运轮盘上的 20 格,并通过函数 GET_WEIGHT_OF_LUCKY_WHEEL_REWARD_TYPE() 汇总了每种奖励的权重。这里,每种奖励的权重通过 20 个可调参数定义,每个是 5:

于是得出权重总和 sumOfWeight,即 100。
下一步,生成在 [0,100) 范围内的一个随机整数,并从奖励 0 开始,判断生成的随机数是否小于等于该奖励的权重 5——若小于,则选择该奖励;若大于,则将随机数减去 5,并从下一个奖励开始继续判断,直到选出奖励。
通过这段代码,游戏确保了在所有 20 种奖励中,每一种奖励的选取都是随机且等概率的,即 5%。而如果把一些同类型的奖励概括为一种奖励,那么真实的奖励概率,完全符合幸运轮盘界面所开示的概率,即:
• 展台载具:5%
• 载具折扣:5%
• 神秘奖品:5%
• 服装:20%
• 筹码:20%
• 游戏币:20%
• 声望值:25%

虽然上面已经通过分析脚本代码证明了幸运轮盘奖品使用随机数来确定不同奖品,但我们单凭代码无法判断用于获取随机数的随机数发生器 MISC::GET_RANDOM_MWC_INT_IN_RANGE() 是否充分满足其数学随机性,因为如果其生成的序列过分简单,例如生成某一些数字的概率远大于其他数字,反映到幸运轮盘中就将是可以通过某些方式使得抽中某一个奖品的概率远大于其他概率,那么所谓的随机也就无从谈起了。
事实上关于这一点则不必担心。该随机数发生器是一个基于 RAGE 引擎的高精度随机数发生器——进位相乘法伪随机数发射器(Multiply-with-carry Pseudorandom Number Generator,MWCPRNG),其可以在一秒内生成一千万个具有巨大周期的不同的随机数序列,因而完全不必担心其随机性问题。对这一算法感兴趣的,可参考:
https://en.wikipedia.org/wiki/Multiply-with-carry_pseudorandom_number_generator

接下来我们回答一个问题:既然幸运轮盘的结果是完全随机的,那么幸运轮盘的结果是从何时开始生成并确定的?答案是当玩家在幸运转盘按下 E 时。
当玩家进入赌场时,脚本 casino_lucky_wheel 就开始载入。在玩家没有按下 E 时,幸运轮盘的结果是 -1,即无;只要玩家按下 E,那么幸运轮盘结果就立刻传输至一个专用的局部变量。接下来,玩家无论在什么时机以什么样的力度、什么样的帧数转动转盘,都只会导向早就已经确定了的结果。
为了证明这一点,下面是 Tez2 的一段实机 debug 测试视频,Tez2 读取了这个用于存储幸运轮盘结果的局部变量,因此在视频中我们能够观察到,当他按下 E 摸住转盘时,左侧的 debug 栏里就已经显示了轮盘的结果,为 14。根据第一节所展示的幸运轮盘的 20 种奖励数组的对照,14 对应的结果为 $40,000,于是,Tez2 无论怎么转,幸运轮盘都只会导向确定的结果,即 $40,000。
https://www.youtube.com/watch?v=f_CTkKinfvs

只不过有一点需要留意,那就是玩家的转动转盘的时机确实会导致转盘存在肉眼可见的转速区别。事实上,转盘的转速由且仅由以下因素决定:
• 若玩家在第 0 ~ 2 秒间摇动转盘,则转盘是一个 “快转(Fast Spin)”,快转会使得幸运轮盘转动 4 圈;
• 若玩家在第 2 ~ 3.5 秒间摇动转盘,则转盘是一个 “中转(Medium Spin)”,中转会使得幸运轮盘转动 2 圈;
• 若玩家在第 3.5 秒以后摇动转盘,则转盘是一个 “慢转(Slow Spin)”,慢转会使得幸运轮盘转动 1 圈。
总之,无论转盘的转速如何,其都只是出于游戏的娱乐性目的,单纯地调整转盘转动的周期罢了。这也解释了为什么我们常见的各种 “N 秒大法” 大部分都是 4 秒,而从来见过什么 1 秒、2 秒大法,正是因为当 4 秒再转下时,转盘转得最慢,而当转盘转得比较慢时,玩家从心理上就更加容易产生转盘结果是可以由自己控制的错觉。同时,4 秒是离 3.5 秒最近的整数,而整数在信息传播中更具备信服力。
对于坚持幸运轮盘结果不是随机数的人,其实我们倒不如反问:Rockstar 为了一个简单的幸运轮盘结果,不惜耗费巨量的成本,使用转盘的力度、摇动转盘的时机、游戏内的帧数等高精度变量,专门制作一个复杂庞大的多元算法以计算幸运轮盘结果的可能性有多大?倘若 “N 秒大法” 是真是存在且有效的,那么,究竟是如何有效?多少次内可以保证转到心仪的结果?允许的误差次数是多少?其他秒数为什么无效?有效的秒数和无效的秒数背后有没有起码千或万级别的实验数据支撑,而不只是个人的几次尝试?想转到其他的结果,又该使用几秒?所有 20 个结果对应所须的秒数是否相同地具有充足的样本支撑并进行过充足的对照实验?抑或是说,其实 “N 秒大法” 只能保证个别的一两个结果,比如展台载具?那么即便只能保证抽中载具,对于有玩家使用使用该大法却一无所获的现象又该如何解释?又该解释为何又玩家不使用该大法都依然能转到展台载具?造成这一偏差的原因是什么?这一偏差在多大的范围内是可以接受的?
我们可以无休止地追问下去,而我们会发现,针对这一连环的追问,“N 秒大法” 的理论家们根本给不出确定的和有效的答案。“N 秒大法” 的理论家们找不到可以用于支撑的代码(因为并不存在),只能妄想着游戏存在着这样的一套由多元算法所共同构建的高级轮盘机制,而这不是任何一个聪明的在线游戏开发商会浪费资源去尝试的。幸运轮盘机制剥去外壳后的本质就是那十几行的随机数发生器代码,“N 秒大法” 从来不存在,在《名钻假日赌场》首发时的 1.47 版本就已是如此。
因而,在确保必然抽中心仪的幸运轮盘结果这一命题上,完全合法的方式就是 “断网大法”,即在轮盘结果即将停止时,若对结果不满意,则立刻杀掉游戏进程并重来,直到碰上游戏给出的那个概率为止。
而另一种方法则是使用第三方软件的作弊行为了。正如 Tez2 的 debug 测试所演示,使用读取了游戏内存的第三方工具,就可以在接触转盘时就知道这次轮盘输出的结果会是什么。不仅如此,事实上,玩家如果按下 E 但又退出去,那么重新进入转盘的时候,结果又会重选一遍。因而,玩家可以反复进退转盘,直到在第三方工具界面确定了这次转盘是自己想要的结果时,才转下转盘——不言自明,这是一种赤裸裸的作弊行为,但比较戏谑的是,恐怕只有当这种第三方作弊工具普及,最直观、最实时的内存数据直接展现在大众面前的时候,“N 秒大法” 的理论家们才会彻底缄默,这时他们才会相信概率、相信科学。