|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
 | |  |  | 本帖最后由 Irene 于 2022-5-21 15:26 编辑
本贴没有用的脚本
最近玩了一个公益服,没超级油,截图放出来的设置是这样的:
诅咒25
一级点数3
二级点数6
二级几率20
三级点数8
三级几率30
乍一看,这概率没问题,上他300左右,应该能到7
但是我本人命不好,500也没到7
我就去测试了一下
- [@main]
- #IF
- TRUE
- #SAY
- <疯狂吃油/@吃油>
- #ACT
- MOV P0 0
- [@吃油]
- #IF
- !EQUAL $LUCK 7
- #ACT
- SENDMSG 15 当前使用了<$STR(P0)>个油到<$LUCK>
- give 祝福神油 1
- GMEXECUTE 使用物品 祝福神油
- INC P0 1
- delayGoto 200 @吃油
- #ELSEACT
- SENDMSG 15 使用了<$STR(P0)>个油到7
复制代码
结果呢,吃到50000瓶了,到6都不知道多少次了,都没触发这个elseact结束循环,我就感觉离谱,但是别人确实能到7,不自带幸运的武器。
他说,要吃完飞随机,别连续吃,多小退。我想,这什么玄学玩意,在绝对的数量面前,玄学就是迷信罢了,你要是游戏开发者,喝油函数,难道不是生成一个随机数,判断大于一个值就结束了吗,还给你搞玄学呢,笑死。
最后发现,其实是引擎问题。彩3有黑箱,建议不要相信面板上的设置。测试时我拿的霹雳法杖,该武器无法被喝到运7,即便运6到运7成功率100%,它也上不去,这就是个BUG你敢信?其他武器你们也可以试试
现在彩3也给了新的微调算法了,
祝福/诅咒/无效
0-1:90/0/10
1-4:15/5/80
5-7:3/7/90
我们拿python3递归模拟一下:这里的装饰器为防止callback过多导致栈溢出:
- import random
- import time
- import sys
- class TailRecurseException(BaseException):
- def __init__(self, args, kwargs):
- self.args = args
- self.kwargs = kwargs
- def tail_call_optimized(g):
- def func(*args, **kwargs):
- f = sys._getframe()
- if f.f_back and f.f_back.f_back and f.f_back.f_back.f_code == f.f_code:
- raise TailRecurseException(args, kwargs)
- else:
- while 1:
- try:
- return g(*args, **kwargs)
- except TailRecurseException as e:
- args = e.args
- kwargs = e.kwargs
- func.__doc__ = g.__doc__
- return func
- times = 0
- percent = [[90, 0, 10], # 0-1,祝福90%,诅0%,不变10%
- [15, 5, 80],
- [15, 5, 80],
- [3, 7, 90],
- [3, 7, 90],
- [3, 7, 90],
- [3, 7, 90]]
- @tail_call_optimized
- def f(x):
- global times
- if x >= 0 and x <= 6:
- up_p = percent[x][0]
- down_p = percent[x][1]
- stat_p = percent[x][2]
- if x == 7:
- print("本次吃到7用了{0}瓶祝福油".format(str(times)))
- return times
- p = random.randint(1, 100)
-
- times += 1
- # if x >=4:
- # time.sleep(0.05)
- if p <= stat_p:
- #print("{0},使用无效".format(str(p)))
- return f(x)
- elif p <= (stat_p + down_p):
- #print("{0},你受到了诅咒,当前为{1}".format(str(p),str(x - 1)))
- return f(x - 1)
- else:
- #print("{0},你的武器幸运增加了,当前为{1}".format(str(p),str(x + 1)))
- return f(x + 1)
- print(f(0))
复制代码
这里的测试其实也挺玄学,从100-8000我都有遇到过,普遍在1500以下,但这只是不带黑箱的算法,而且random.randint算法不是真随机,它往往和时间戳有关,因此导致最后到7的前几十个油,会直接从4到7三连跳不带诅。
| |  | |  |
|
评分
-
查看全部评分
|