概述
传奇脚本关于Random机率算法详细说明
20210320新增:今天发现Random后面只能是数值,不能是变量如P N之类的变量(用movr做几率脚本 精准度可以做到无限小数点,看最下面脚本实例)
说明:Random 是一个随机标签,一般用于判定脚本里,#if的下面,当然这个标签也用在新爆率文件里,可以查看我写的一篇关于爆率的文章,这里就不多讲了
格式:Random 数值(数值与爆率文件里的数值机率类同)
举例:Random 10(这就表示1/10的概率)
大家在修改或编写脚本时经常会用到Random这个标签,格式和用法我这里不多讲,主要是讲一下机率的算法以及详细百分比的脚本是如何实现的
先给大家看个实例:以中奖为例吧
;----------------------------------------
[@main]
#If
Random 2
#Act
give 礼包 1
SendMsg 7 恭喜您,获得礼包,中奖机率是50%
#ElseAct
SendMsg 7 对不起!没获得礼包!
break
;----------------------------------------
以上面的实例来展开其中的机率算法。
Random 2(也就是1/2,机率就是50%)
那我们来运算一下从1%-100%的机率算法,并以脚本来实现(会有小部分误差)
▓▓▓▓▓▓▓第一种方法,正向算法
Random 1(也就是1/1,机率就是100%)
Random 2(也就是1/2,机率就是50%)
Random 3(也就是1/3,机率就是33.33%)
Random 4(也就是1/4,机率就是25%)
Random 5(也就是1/5,机率就是20%)
Random 6(也就是1/6,机率就是16.67%)
Random 7(也就是1/7,机率就是14.29%)
Random 8(也就是1/8,机率就是12.5%)
Random 9(也就是1/9,机率就是11.11%)
Random 10(也就是1/10,机率就是10%)
Random 20(也就是1/20,机率就是5%)
Random 30(也就是1/20,机率就是3.33%)
Random 40(也就是1/20,机率就是2.5%)
Random 50(也就是1/20,机率就是2%)
Random 60(也就是1/20,机率就是1.67%)
Random 70(也就是1/20,机率就是1.43%)
Random 80(也就是1/20,机率就是1.25%)
Random 90(也就是1/20,机率就是1.11%)
Random 100(也就是1/20,机率就是1%)
以是概率从1%-100%百分比值,但是大家看到还有许多缺失是吧
▓▓▓▓▓▓▓第二种方法:反向算法
把上面机率脚本用#ElseAct反过来写一遍是不是多了将近一半的百分比值,这叫反向算法
例如:90%的获得礼包机率怎么写脚本,我就把10%中奖概率写成10%不中,不就成了90%了吗!
;----------------------------------------
[@main]
#If
Random 10
#Act
SendMsg 7 对不起!没获得礼包!
#ElseAct
give 礼包 1
SendMsg 7 恭喜您,获得礼包,中奖机率是90%
break
;----------------------------------------
那么正面中奖率百分比值有(100%、50%、25%、20%、10%等)
那么反面中奖率百分比值有(90%、80%、75%、50%、等)
我们用了第一种方法获得了百分比,但还是不全,这样我们就用第三种方法来补一下缺,拆分算法:百分比相加或相减法
▓▓▓▓▓▓▓第三种方法:拆分算法
▓相加算法:就是需要50%以上的百分比用正向算法的脚本去实现
;----------------------------------------
[@main]
#If
Random 2
#Act
give 礼包 1
SendMsg 7 恭喜您,获得礼包,中奖机率是75%
break
#If
Random 2
#Act
give 礼包 1
SendMsg 7 恭喜您,获得礼包,中奖机率是75%
#ElseAct
SendMsg 7 对不起!没获得礼包!
break
;----------------------------------------
看明白了吗?,第一次用50%机率去执行,中了停止脚本,没中继续来一次,机率还是50%;
原理:我们玩过用硬币抛正反面的游戏,抛到正面为赢,如果抛一次机率就是50%,如果给你两次机率,只要抛到正面就赢,这样我们的赢的机率75%了
抛两次的排列结果是:正正,反正、正反、反反。只要两次都不是反面就赢,是不是75%
▓相减算法:就是需要50%以下的百分比用反向算法的脚本去实现
;----------------------------------------
[@main]
#If
Random 2
#Act
SendMsg 7 对不起!没获得礼包!
break
#If
Random 2
#Act
give 礼包 1
SendMsg 7 恭喜您,获得礼包,中奖机率是25%
#ElseAct
SendMsg 7 对不起!没获得礼包!
break
;----------------------------------------
这次注意看脚本,第一次用50%机率去执行,没中奖停止脚本,中将继续来一次,机率还是50%;
同样抛硬币游戏两次的排列结果是:正正,反正、正反、反反。必需两次都为正才赢,是不是只有25%
拆分算法:所谓拆分算法就是用简单的百分比去相加或相减
所以通过以下几种方法,最后给出大家以5的倍数的百分比的脚本
;----------------------------------------100%
[@main]
#If
Random 1
#Act
SendMsg 7 恭喜您,获得礼包,中奖机率是:100%
break
;----------------------------------------95%
[@main]
#If
Random 20
#Act
SendMsg 7 对不起!没获得礼包!
break
#ElseAct
SendMsg 7 恭喜您,获得礼包,中奖机率是:95%
break
;----------------------------------------90%
[@main]
#If
Random 10
#Act
SendMsg 7 对不起!没获得礼包!
break
#ElseAct
SendMsg 7 恭喜您,获得礼包,中奖机率是90%
break
;----------------------------------------85%=80+5
[@main]
#If
Random 5
#Act
#ElseAct
SendMsg 7 恭喜您,获得礼包,中奖机率是85%
break
#If
Random 4
#Act
SendMsg 7 恭喜您,获得礼包,中奖机率是85%
break
#ElseAct
SendMsg 7 对不起!没获得礼包!
break
;----------------------------------------80%
[@main]
#If
Random 5
#Act
SendMsg 7 对不起!没获得礼包!
break
#ElseAct
SendMsg 7 恭喜您,获得礼包,中奖机率是80%
break
;----------------------------------------75%
[@main]
#If
Random 4
#Act
SendMsg 7 对不起!没获得礼包!
break
#ElseAct
SendMsg 7 恭喜您,获得礼包,中奖机率是75%
break
;----------------------------------------70%=50+10+10
[@main]
#If
Random 2
#Act
SendMsg 7 恭喜您,获得礼包,中奖机率是70%
break
#If
Random 5
#Act
#ElseAct
SendMsg 7 恭喜您,获得礼包,中奖机率是70%
break
#If
Random 4
#Act
SendMsg 7 恭喜您,获得礼包,中奖机率是70%
break
#ElseAct
SendMsg 7 对不起!没获得礼包!
break
;----------------------------------------60%=50+10
[@main]
#If
Random 2
#Act
SendMsg 7 恭喜您,获得礼包,中奖机率是60%
break
#If
Random 5
#Act
SendMsg 7 恭喜您,获得礼包,中奖机率是60%
break
#ElseAct
SendMsg 7 对不起!没获得礼包!
break
;----------------------------------------55%=50+5
[@main]
#If
Random 2
#Act
SendMsg 7 恭喜您,获得礼包,中奖机率是55%
break
#If
Random 10
#Act
SendMsg 7 恭喜您,获得礼包,中奖机率是55%
break
#ElseAct
SendMsg 7 对不起!没获得礼包!
break
;----------------------------------------50%
[@main]
#If
Random 2
#Act
SendMsg 7 恭喜您,获得礼包,中奖机率是50%
break
;----------------------------------------45%=50-5
[@main]
#If
Random 2
#Act
SendMsg 7 对不起!没获得礼包!
break
#If
Random 10
#Act
SendMsg 7 对不起!没获得礼包!
break
#ElseAct
SendMsg 7 恭喜您,获得礼包,中奖机率是45%
break
;----------------------------------------40%=50-10
[@main]
#If
Random 2
#Act
SendMsg 7 对不起!没获得礼包!
break
#If
Random 5
#Act
SendMsg 7 对不起!没获得礼包!
break
#ElseAct
SendMsg 7 恭喜您,获得礼包,中奖机率是40%
break
;----------------------------------------35%=50-10-5
[@main]
#If
Random 2
#Act
SendMsg 7 对不起!没获得礼包!
break
#If
Random 5
#Act
SendMsg 7 对不起!没获得礼包!
break
#If
Random 12
#Act
SendMsg 7 对不起!没获得礼包!
#ElseAct
SendMsg 7 恭喜您,获得礼包,中奖机率是30%
break
;----------------------------------------30%=50-10-10
[@main]
#If
Random 2
#Act
SendMsg 7 对不起!没获得礼包!
break
#If
Random 5
#Act
SendMsg 7 对不起!没获得礼包!
break
#If
Random 6
#Act
SendMsg 7 对不起!没获得礼包!
#ElseAct
SendMsg 7 恭喜您,获得礼包,中奖机率是30%
break
;----------------------------------------25%
[@main]
#If
Random 4
#Act
SendMsg 7 恭喜您,获得礼包,中奖机率是25%
break
#ElseAct
SendMsg 7 对不起!没获得礼包!
break
;----------------------------------------20%
[@main]
#If
Random 5
#Act
SendMsg 7 恭喜您,获得礼包,中奖机率是20%
break
#ElseAct
SendMsg 7 对不起!没获得礼包!
break
;----------------------------------------15%
[@main]
#If
Random 5
#Act
#ElseAct
SendMsg 7 对不起!没获得礼包!
break
#If
Random 16
#Act
SendMsg 7 对不起!没获得礼包!
break
#ElseAct
SendMsg 7 恭喜您,获得礼包,中奖机率是15%
break
;----------------------------------------10%
[@main]
#If
Random 10
#Act
SendMsg 7 恭喜您,获得礼包,中奖机率是10%
break
#ElseAct
SendMsg 7 对不起!没获得礼包!
break
;----------------------------------------5%
[@main]
#If
Random 20
#Act
SendMsg 7 恭喜您,获得礼包,中奖机率是5%
break
#ElseAct
SendMsg 7 对不起!没获得礼包!
break
;----------------------------------------1%
[@main]
#If
Random 100
#Act
SendMsg 7 恭喜您,获得礼包,中奖机率是1%
break
#ElseAct
SendMsg 7 对不起!没获得礼包!
break
;----------------------------------------
用movr做随机数,精确度非常准,Random太坑,做个简的还行下面是实例和逻辑
[@main]
#if
#act
mov N$中奖率 70 ;【解释:设置中奖率70%】
movr P10 100 ;【解释:定义P10变量,从0-99随机一个数值】#If
Small P10 < s t r ( N str(N str(N中奖率)> ;【解释:判定P10变量值,是否小于中奖率,如果小于中奖,大于等于70则没中奖】
#Act
SendMsg 7 恭喜您,获得礼包,中奖机率是70% break
#ElseAct
SendMsg 7 对不起!没获得礼包! break
怎么样,是不是1-100中奖率都可以写出来,脚本就这么一点点搞定!!
如果你要做到千分比,那么就在下面两什定义值多加个零,是不是就成千分比了
mov N$中奖率 7 ;【解释:设置中奖率 0.7%】
movr P10 1000 ;【解释:定义P10变量,从0-999随机一个数值】
,
最后
以上就是勤恳西牛为你收集整理的传奇脚本关于Random机率算法详细说明的全部内容,希望文章能够帮你解决传奇脚本关于Random机率算法详细说明所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复