开启辅助访问     
收藏本站

站内搜索

搜索

Minecraft(我的世界)苦力怕论坛

[BE教程] 【麦仁丝课堂】第三期 玩家序数统计系统plus

 发表于 2023-2-27 12:00:00|显示全部楼层|阅读模式 IP:浙江省
本帖最后由 Mirence 于 2024-6-15 20:19 编辑

命令方块进阶教程之

玩家序数统计系统Plus



前言:
    麦仁丝在先前就已经发布过玩家序数统计系统的教程,由于先前无法用指令直接选择未被统计过的玩家,所以我们使用tag标签来表示被统计过的玩家,再通过目标选择器参数tag来选择没有该tag标签的玩家以实现间接地选择到没有被统计过的玩家。

旧版原理回顾:在每次给予序数后,用标签t2来表示已被统计过的玩家,于是没有标签t2的玩家就是刚刚进入游戏或者是未被统计过的玩家,此后通过目标选择器参数[tag=!t1]就可以选择到未被统计过的玩家,每次检测到有未被统计过的玩家出现时,为虚拟实体e1在计分板上的分数加1,再将e1的分数赋值给这位玩家,这时这位玩家的分数便为玩家序数,最后再为他添加t2标签即可。然而由于原装置中有给予标签和给予分数两个步骤,无法保证这两个个命令方块执行命令时的命令执行者是同一个玩家,所以为了使装置没有漏洞,还需要加上“跟踪”这一步骤:也就是先将跟踪标签t1给予一个不拥有t2的玩家,再对拥有t1的玩家先后进行给予序数和添加标签t2这些操作,最后删除这位玩家的t1标签即可。
    这样玩家序数统计系统一共需要5个命令方块(所以说以前的3个命令方块的UID系统是有漏洞的哦)。

导语:
    由于1.19版本的/execute指令中新增了条件子命令,其拥有检测分数以及否定功能,因此我们可以利用/execute指令将这两种功能结合,来直接检测和选择在指定计分板上没有分数记录的玩家。当然我们也可以直接检测和选择在计分板s1上没有分数记录的玩家(即未被统计过的玩家),所以说玩家序数统计系统可以简化,麦仁丝称之它为“玩家序数统计系统plus”。

玩家序数统计系统plus

玩家序数统计系统plus
(这里采用了盔甲架代替玩家)


玩家序数统计系统plus的简要内容如下表:
难度
主要指令
/execute,/scoreboard
用途
服务器


玩家序数统计系统plus的简易流程图如下图:

【麦仁丝课堂】玩家哎叙述统计系统plus 简易流程图

【麦仁丝课堂】玩家哎叙述统计系统plus 简易流程图
注意:该装置不适用于1.18及以下版本。

正文:
第一步:标记未统计玩家
    既然1.19版本的/execute指令可以直接检测没有分数记录的玩家(或者是不在某个分数范围内的玩家),那么我们也可以直接检测在玩家序数计分板s1上没有分数记录的玩家。由于麦仁丝还没有找到能够用新版/execute指令来只选择一个符合条件玩家的方法,所以这里需要先“标记*”可能出现的多个没有分数记录的玩家,然后下一步再选择被标记玩家中的其中一个。
    不过,我们这里可以就使用玩家序数计分板s1对玩家进行标记,一般来说玩家序数从1开始算起,所以可以将所有没有有数记录的玩家在s1上的分数设定为0。于是这时未被统计过的玩家在s1上没有分数记录或者分数为0,也就是分数范围不在[1,+∞]之内的玩家。
    我们可以将以下指令输入第一个“循环 开启”命令方块中:
  1. 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中)
    我们可以将以下指令输入第二个“连锁 有条件”命令方块中:
  1. scoreboard players add e1 se 1
复制代码
    我们可以将以下指令输入第三个“连锁 有条件”命令方块中:
  1. scoreboard players operation @r[scores={s1=0}] s1 = e1 se
复制代码
    于是这样就能够为未被统计过的玩家给予玩家序数了,若游戏中同时同位置出现了两个玩家,在线序数统计系统plus也会为他们依次编号,不会出现UID重复的情况。
    玩家在s1上的分数从0变为了他们自己的玩家序数,在给予了玩家在线序数的同时,也实现了“标记”的清除,所以说利用计分板来进行标记往往能够出现一举两得的效果。
    由于没有进行“跟踪”和tag标签统计,且“标记”也只用了一个命令方块,所以没有原先的添加t1、t2,删除t1的操作,于是命令方块的数量便从原来的5个缩减到现在的3个,实现完全相同的功能且同样没有漏洞。


玩家序数统计系统plus思维流程图:

【麦仁丝课堂】玩家序数统计系统plus 思维流程图

【麦仁丝课堂】玩家序数统计系统plus 思维流程图

展开查看“中文翻译”版:


玩家序数统计系统指令内容汇总:

【麦仁丝课堂】玩家序数统计系统plus

【麦仁丝课堂】玩家序数统计系统plus

1  execute as @a unless score @s s1 matches 1..2147483647 run scoreboard players set @s s1 0
2  scoreboard players add e1 s1 1
3  scoreboard players operation @r[scores={s1=0}] s1 = e1 se

玩家序数统计系统事物名称汇总:
计分板:2个
虚拟实体:1个
s1:玩家序数计分板
se:虚拟实体计分板
└e1:最高序数
e1:最高序数(累计玩家总数)

玩家序数统计系统plus(动图)

玩家序数统计系统plus(动图)


    今天的教程到这里就结束了。麦仁丝在学习了1.19版本更新的/execute指令后发现,/execute指令实在有太多的妙用和新功能,麦仁丝认为在1.19版本以后,基岩版的指令界将由/execute指令统治
    这两年麦仁丝课堂的更新会非常缓慢,这篇教程也是麦仁丝挤时间做出来的,而且内容也比较“氵”,教程做起来也不会困难。实际上麦仁丝还有许多的作品,都希望能够分享给大家,但不知道又会搁置到什么时候。大家的支持就是对我最大的鼓励,如果麦仁丝课堂中出现了错误,甚至是错别字、语病等,或者是麦仁丝课堂中有什么不足的地方,希望大家能够指正和提出来!

点击前往 麦仁丝课堂 目录

点击前往 命令方块进阶教程 食用指南

(本期教程视频板尚未发布)






评分

参与人数 1铁粒 +15收起理由
 星河*** + 15原创奖励

查看全部评分

苦力怕论坛,感谢有您~
 发表于 2023-6-12 11:57:53 来自手机|显示全部楼层 IP:浙江省
大佬!!!
2#2023-6-12 11:57:53回复收起回复
苦力怕论坛,感谢有您~

本版积分规则

本站
关于我们
联系我们
坛史纲要
官方
哔哩哔哩
技术博客
下载
网易版
安卓版
JAVA
反馈
意见建议
教程中心
更多
捐助本站
QQ群
QQ群

QQ群

访问手机版

访问手机版

手机版|小黑屋|系统状态|klpbbs.com

粤公网安备 44200002445329号 | 由 木韩网络 提供支持 | GMT+8, 2024-12-14 00:51

声明:本站与Mojang以及微软公司没有从属关系

Powered by Discuz! X3.4 粤ICP备2023071842号-3