da_y_c
我想要制作一个类似随机器
举个例子:范围在1-9,当触发某种条件,若随机到的数字为1则会传送到一个位置
请问这个要怎么做

天辉胡萝卜
scoreboard objectives add RNG stat.playOneMinute
stat.playOneMinute这个值在游戏中每一tick增加1,并且对于每个玩家来说都不相同(除非他们同时进入服务器)

scoreboard players set @a[score_RNG_min=9] RNG 0
为每个玩家创建一个从0-8范围的随机数

execute as @a[score_RNG=4,score_RNG_min=4] run xxx
随机到4的玩家执行指令


你的例子里的随机到1相当于这里随机到0

Y制杖杖
会用数据包吗

⭐✔️
本帖最后由 ⭐✔️ 于 2021-1-22 15:30 编辑

给出以下几种方法:
1. 数据包
推荐,借助loottable:https://www.mcbbs.net/thread-900914-1-1.html
另一个数据包,借助@r;https://www.mcbbs.net/thread-706030-1-1.html
2. 线性同余
https://www.mcbbs.net/forum.php?mod=viewthread&tid=1095644
几条命令复制一下,每执行一次得到一个新的随机数
3. @r 随机选择器
对于问题中的情境的最优解:生成十个实体,通过@r选中(如"tag @r[xxx] add #mark"),然后根据随机选择结果传送(如"execute if entity @e[xxx,tag=#mark] run tp ...")

至于楼上提到的时序伪随机法,缺陷很大:对于另一个时序系统,通过此方法得到的结果始终有规律。

da_y_c
天辉胡萝卜 发表于 2021-1-22 14:39
scoreboard objectives add RNG stat.playOneMinute
stat.playOneMinute这个值在游戏中每一tick增加1,并且 ...

并没有stat.playOneMinute 这个东西,至少是在我的游戏中是这样

天辉胡萝卜
da_y_c 发表于 2021-1-22 15:27
并没有stat.playOneMinute 这个东西,至少是在我的游戏中是这样

stat.playOneMinute自从1.7之后就加入了游戏,1.12版本我刚刚测试了还有

天辉胡萝卜
da_y_c 发表于 2021-1-22 15:27
并没有stat.playOneMinute 这个东西,至少是在我的游戏中是这样

刚刚查了一下wiki
如果你的版本较高,那么第一句换成

scoreboard objectives add RNG minecraft.custom:minecraft.play_one_minute

da_y_c
天辉胡萝卜 发表于 2021-1-22 15:31
stat.playOneMinute自从1.7之后就加入了游戏,1.12版本我刚刚测试了还有

用的1.16.1的,是真的没有

da_y_c
天辉胡萝卜 发表于 2021-1-22 15:34
刚刚查了一下wiki
如果你的版本较高,那么第一句换成

你这个第二句也出现了问题,也用不了啊