抽奖机是服务器的一个有效提高玩家兴趣的设施,本文将介绍如何使用指令做一个简单的抽奖机。
execute指令简单介绍
/execute
是各不同功能的子命令的集合,用于改变命令执行上下文(修饰子命令),执行逻辑判断(条件子命令)和管理并存储命令返回值(存储子命令)[仅Java版],并在此基础上执行任意其他命令。
在1.19.50版本之前,execute指令为旧格式:execute 目标选择器 坐标地址 需要执行的指令
例如execute @a ~ ~ ~ tp 0 0 0
该指令的作用是将所有玩家传送到0 0 0的坐标。
但在1.19.50后,指令被改版,execute指令有更多的功能,这里只简单介绍一种。execute as @a at @s run ...
其中@a是可以更改的目标选择器,@s不建议更改,run后面的…可以填写指令。这条指令的作用与1.19.50之前的execute指令作用相同,可以让选定的玩家执行后面指令。
其他需要的指令介绍
目标选择器:scores={...=...}
这个目标选择器可以跟计分板进行互动。第一个…填写计分板的名称,第二个…填写一个数值或者一个区间。如20,20..50(意思是20到50之间),..20(意思是小于20),20..(意思是大于20)
scoreboard random @p 计分板 最小值 最大值
该指令可以将玩家的计分板随机设置在最小值与最大值之间的一个数字,这是抽奖机概率来源的基础。
原理介绍
我们可以先用execute判断玩家的金币数量是否足够,足够则在1到100随机设定玩家的抽奖计分板。后面可以接判断玩家的抽奖计分板的数值,给予玩家相应的物品。
指令实践
为了使抽奖机的玩家一直选定为该玩家,不会因为@p出现问题,我们可以先加上一个tag用来指定玩家。使用以下指令前,请保证已经设置过需要用到的记分板,怎样设置金币的记分板可参考这两篇文章的部分内容:金币 – 紫月MC。脉冲、无条件、需要红石。
tag @p add choujiang
检测玩家的计分板如果小于需要的金币数,就移除tag。连锁、无条件、保持开启。
execute as @a[tag=choujiang,scores={money=..99}] at @s run tag @s remove choujiang
检测该玩家的计分板,大于抽奖需要的金币就扣除相应的金币数。连锁、无条件,保持开启。
execute as @a[tag=choujiang,scores={money=100..}] at @s run scoreboard players remove @s money 100
为了更好地做逻辑,我们可以用红石比较器检测前面的命令方块,如果前面的命令方块被激活才会执行后面的命令方块。
下一个命令方块随机给玩家设一个计分板数值,用来作抽奖概率的判定。使用该指令前要先添加一个计分板。脉冲、无条件、需要红石。
scoreboard players random @a[tag=choujiang] choujiang 1 100
接下来就是检测玩家的计分板给与玩家奖励了。假设获得一个铁块的抽奖概率是60%。连锁、无条件、保持开启。
execute as @a[tag=choujiang,scores={choujiang=1..60}] at @s run give @s iron_block
假设一个钻石块的抽奖概率是30%。连锁、无条件、保持开启。
execute as @a[tag=choujiang,scores={choujiang=61..90}] at @s run give @s diamond_block
假设一个下界合金块的抽奖概率为10%。连锁、无条件、保持开启。
execute as @a[tag=choujiang,scores={choujiang=90..100}] at @s run give @s netherite_block
最后一个命令方块用来移除玩家的标签。连锁、无条件、保持开启。
tag @a remove choujiang
至此,一个最简单的指令抽奖机就完成了。服主可根据自己的实际需要修改部分指令。