【麦仁丝课堂】第三期 玩家序数统计系统plus
本帖最后由 Mirence 于 2024-6-15 20:19 编辑命令方块进阶教程之
玩家序数统计系统Plus
前言: 麦仁丝在先前就已经发布过玩家序数统计系统的教程,由于先前无法用指令直接选择未被统计过的玩家,所以我们使用tag标签来表示被统计过的玩家,再通过目标选择器参数tag来选择没有该tag标签的玩家以实现间接地选择到没有被统计过的玩家。
旧版原理回顾:在每次给予序数后,用标签t2来表示已被统计过的玩家,于是没有标签t2的玩家就是刚刚进入游戏或者是未被统计过的玩家,此后通过目标选择器参数就可以选择到未被统计过的玩家,每次检测到有未被统计过的玩家出现时,为虚拟实体e1在计分板上的分数加1,再将e1的分数赋值给这位玩家,这时这位玩家的分数便为玩家序数,最后再为他添加t2标签即可。然而由于原装置中有给予标签和给予分数两个步骤,无法保证这两个个命令方块执行命令时的命令执行者是同一个玩家,所以为了使装置没有漏洞,还需要加上“跟踪”这一步骤:也就是先将跟踪标签t1给予一个不拥有t2的玩家,再对拥有t1的玩家先后进行给予序数和添加标签t2这些操作,最后删除这位玩家的t1标签即可。
这样玩家序数统计系统一共需要5个命令方块(所以说以前的3个命令方块的UID系统是有漏洞的哦)。
导语:
由于1.19版本的/execute指令中新增了条件子命令,其拥有检测分数以及否定功能,因此我们可以利用/execute指令将这两种功能结合,来直接检测和选择在指定计分板上没有分数记录的玩家。当然我们也可以直接检测和选择在计分板s1上没有分数记录的玩家(即未被统计过的玩家),所以说玩家序数统计系统可以简化,麦仁丝称之它为“玩家序数统计系统plus”。
(这里采用了盔甲架代替玩家)
玩家序数统计系统plus的简要内容如下表:
难度★
主要指令/execute,/scoreboard
用途服务器
玩家序数统计系统plus的简易流程图如下图:
注意:该装置不适用于1.18及以下版本。
正文:
第一步:标记未统计玩家 既然1.19版本的/execute指令可以直接检测没有分数记录的玩家(或者是不在某个分数范围内的玩家),那么我们也可以直接检测在玩家序数计分板s1上没有分数记录的玩家。由于麦仁丝还没有找到能够用新版/execute指令来只选择一个符合条件玩家的方法,所以这里需要先“标记*”可能出现的多个没有分数记录的玩家,然后下一步再选择被标记玩家中的其中一个。
不过,我们这里可以就使用玩家序数计分板s1对玩家进行标记,一般来说玩家序数从1开始算起,所以可以将所有没有有数记录的玩家在s1上的分数设定为0。于是这时未被统计过的玩家在s1上没有分数记录或者分数为0,也就是分数范围不在之内的玩家。
我们可以将以下指令输入第一个“循环 开启”命令方块中:
execute as @a unless score @s s1 matches 1..2147483647 run scoreboard players set @s s1 0*标记:当一个命令方块无法从多个目标中选择一个并执行命令时,可能会导致命令被多次执行(一般该现象出现在/execute指令中),这时可以先将这些目标进行“标记”,再让后面的命令方块从中挑选一个并执行相应命令,最后再清除标记即可。可以使用计分板、tag标签等进行标记,若后面执行的相应命令涉及计分板,那么可以用该计分板对目标进行标记,这样的话一般能够省去“清除标记”这一步。
若这里不对未被统计过的玩家进行“标记”,那么便有可能会出现“重号”的情况。
第二步:给予被标记的玩家玩家序数(UID)
当上一步执行成功后,便说明游戏中出现了未被统计过的玩家,于是接下来的步骤与旧版一样,我们先将表示最高序数的虚拟实体e1在计分板se上加1分,然后再将e1在se上的分数随机赋值给其中一个被标记的玩家即可。(本教程开头的图片中为了方便测试将e1也放在了s1中)
我们可以将以下指令输入第二个“连锁 有条件”命令方块中:
scoreboard players add e1 se 1 我们可以将以下指令输入第三个“连锁 有条件”命令方块中:
scoreboard players operation @r s1 = e1 se 于是这样就能够为未被统计过的玩家给予玩家序数了,若游戏中同时同位置出现了两个玩家,在线序数统计系统plus也会为他们依次编号,不会出现UID重复的情况。
玩家在s1上的分数从0变为了他们自己的玩家序数,在给予了玩家在线序数的同时,也实现了“标记”的清除,所以说利用计分板来进行标记往往能够出现一举两得的效果。
由于没有进行“跟踪”和tag标签统计,且“标记”也只用了一个命令方块,所以没有原先的添加t1、t2,删除t1的操作,于是命令方块的数量便从原来的5个缩减到现在的3个,实现完全相同的功能且同样没有漏洞。
玩家序数统计系统plus思维流程图:
展开查看“中文翻译”版:
玩家序数统计系统指令内容汇总:
1execute as @a unless score @s s1 matches 1..2147483647 run scoreboard players set @s s1 0
2scoreboard players add e1 s1 1
3scoreboard players operation @r s1 = e1 se
玩家序数统计系统事物名称汇总:
计分板:2个
虚拟实体:1个
s1:玩家序数计分板
se:虚拟实体计分板
└e1:最高序数
e1:最高序数(累计玩家总数)
今天的教程到这里就结束了。麦仁丝在学习了1.19版本更新的/execute指令后发现,/execute指令实在有太多的妙用和新功能,麦仁丝认为在1.19版本以后,基岩版的指令界将由/execute指令统治。
这两年麦仁丝课堂的更新会非常缓慢,这篇教程也是麦仁丝挤时间做出来的,而且内容也比较“氵”,教程做起来也不会困难。实际上麦仁丝还有许多的作品,都希望能够分享给大家,但不知道又会搁置到什么时候。大家的支持就是对我最大的鼓励,如果麦仁丝课堂中出现了错误,甚至是错别字、语病等,或者是麦仁丝课堂中有什么不足的地方,希望大家能够指正和提出来!
点击前往 麦仁丝课堂 目录
点击前往 命令方块进阶教程 食用指南
(本期教程视频板尚未发布)
其他版本:
在线序数统计系统(旧版)
大佬!!!
页: [1]