零、前言
明日方舟的战斗中经常面临概率问题,如乱火跳10sp还是19sp,夜幕突袭出束缚还是减速。本文试图从程序层面解释游戏中概率事件的判定原理,并讨论如何利用代理保存随机数轴完成课题攻略。
一、随机事件的判定原理
(资料图片仅供参考)
对游戏中的一个随机事件进行判定时,程序会进行以下三个步骤:
1. 程序根据事件本身的结果和概率,制定判定规则;
2. 在事件即将发生时,生成一个随机数(浮点数,可理解为0-1之间的小数)用于判定;
3. 对随机数应用判定规则,得到结果。
给出实例,对于角色傀影的技能夜幕突袭,程序的运行逻辑遵循:
1. 夜幕突袭会产生停顿/眩晕/束缚三种可能的效果,且三种效果发生的概率相等,均为1/3。现制定判定规则为:当随机数X满足0<X<时,产生停顿;当随机数X满足<X<时,产生眩晕;当随机数X满足<X<时,产生束缚。
2. 在使用夜幕突袭时,生成随机数X,现设X=。
3. 根据判定规则,X=满足<X<,故本次夜幕突袭产生效果为束缚。
二、代理保存随机数原理
在得知随机数的工作原理后,一个新的问题来了,随机数是如何计算出来的?为什么代理作战可以保存概率?这个过程是否可控并帮助攻略?
直接给出结论:每次作战开始时会生成一个种子s,该作战中所有随机数X均由这个种子s计算得到,如函数X[n]=F(s,n)。这个函数的意义是,作战中的第n个随机数X[n]的生成受种子s和序号n的影响。所得序列X[n]称为一次作战的随机数轴。
当你点击保存代理按钮后,prts会忠实地为你记录下这把游戏的种子s。在你开始代理作战后,系统会复现你的操作,并在每次遇到概率点时使用种子s计算随机数X[n],这样复现出来的随机数序列X[n]和通关的完全相同。操作完全相同、概率点判定结果完全相同,因此可以代理成功。
注:我们一般认为种子s和随机数X的生成过程不可由人力计算得到。目前已有通过程序遍历种子库暴力计算所有随机数讨论攻略理论的实例(/video/BV1xU4y1Y7M1),本文不讨论此方法的可行性。
以下是一个随机数轴的实例
可以看到,在这把游戏中一共发生了12次随机事件,所用到的12个随机数为X[1]=,X[2]=,...,X[12]=。
点击保存代理后,系统会根据种子s计算,复现出这个随机数序列X[1]=,X[2]=,...,X[12]=。
我们试着给出判定规则,来看看每个概率点的判定结果。
风笛攻击:有28%的概率暴击,72%的概率不暴击。现规定:<X<时风笛攻击暴击,否则不暴击。
傀影3技能夜幕突袭:夜幕突袭会产生停顿/眩晕/束缚三种可能的效果,且三种效果发生的概率相等,均为1/3。现规定:当随机数X满足0<X<时,产生停顿;当随机数X满足<X<时,产生眩晕;当随机数X满足<X<时,产生束缚。
黑攻击:有20%的概率暴击,80%的概率不暴击。现规定:<X<时黑攻击暴击,否则不暴击。
乱火:随机提供10-19点sp。现规定:0<X<时乱火值为10,<X<时乱火值为11,以此类推,<X<1时乱火值为19。
槐琥攻击:有20%的概率暴击,80%的概率不暴击。现规定:0<X<时槐琥攻击暴击,否则不暴击。
根据上述规则,可补完随机数轴产生的效果。
三、随机数代理学
本节主要讨论两个问题:如何根据种子和随机数轴的工作原理调出我们想要的随机数,代理中为什么会出现随机数轴错乱。
仍以上节中的随机数轴为例。
如果我们想让最后这个傀影打出束缚效果,应该怎么做呢?
观察到这个傀影使用第12个随机数,而轴中第14个随机数值为X=,恰好判定为傀影出束缚。因此,只要在傀影前插入两个随机事件,占用第12和第13个随机数,让傀影使用第14个随机数即可。例如:
还有一个方案。轴中第11个随机数值为,符合傀影出束缚的判定,因此删去原本第11个随机事件,让傀影使用第11个随机数,即让槐琥少攻击一次即可。
该方法在实战中应用总结为:插入或删除随机事件,来将某个概率点调整到想要的随机数,以产生想要的随机效果。一个比较好的参考是/video/BV147411i7RD。
当然,调代理并不是概率挂,该方法的局限性也是相当大的:1.你需要保存一把随机数较好的代理,这往往需要你在课题所需阵容上额外带上史尔特尔等强力安全带,对不能使用代理的课题如高难13人攻关、尖灭测试等无代理关卡不适用;2.你需要一个一个试出该代理的随机数,这需要花费大量时间、精力和理智;3.修改的随机数必须从轴里找,例如你需要把一个乱火调成19,但目标点前后5个随机数均不满足,如果插入/删除5个随机事件来强行调随机数可能对你原本轴产生巨大影响。
最后简单说说代理中随机数轴错乱的问题。前文提到过,代理想要成功运行必须满足:操作完全相同、概率点判定结果完全相同。实战中遇到的绝大多数随机数轴错乱来源于没能百分之百复刻作有:火山的索敌和德克萨斯/异格德克萨斯的剑雨都是受随机数影响的,这样短时间多次随机数判定极易因代理几帧的失误影响随机数;部分敌人和地图产生效果消耗随机数,如安多恩的弹射。而同样种子计算出不同随机数序列的情况仅在跨版本代理中理论存在(版本号参与随机数生成)
四、说明
本文使用数据均为辅助说明,与实际程序运行中使用数值不同。尤其随机数对应具体事件效果,这方面需要大量实战测试。
参考:/w/%E4%BD%9C%E6%88%98%E6%9C%BA%E5%88%B6/sandbox#._