开启辅助访问     
收藏本站

站内搜索

搜索

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

[BE教程] 【麦仁丝课堂】第一期 玩家序数(UID)统计系统

 发表于 2023-1-18 15:56:53|显示全部楼层|阅读模式 IP:浙江省
本帖最后由 Mirence 于 2024-6-15 18:46 编辑

命令方块进阶教程之

玩家序数统计系统

导语:玩家序数统计系统的功能是给予每一个玩家对应的数字,也就是很多服务器中所说的UID,有利于更好地分辨和定位玩家。
95240ECF-626E-41A6-8BFF-DFE0E668D266.jpeg


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


玩家序数统计系统的主要流程如下图:

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

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



正文:
    这里的命令方块组结构采用的是简单的“循环开启+若干连锁有条件”类型。

第一步:跟踪一个未被统计过的玩家。
    我们可以随机为一个未被统计过的玩家添加一个实体标签t1,用于跟踪这个玩家*。因为一次只能给予一个玩家一个序数,所以为避免两个未被统计过的玩家同时上线,这里采用随机玩家@r作为目标选择器的变量。
    可以将以下指令写入第一个“循环 开启”命令方块中(t2是已统计的玩家拥有的标签):
  1. tag @r[tag=!t2] add t1
复制代码
*跟踪:当一个命令方块不足以对一个玩家执行完所有命令,而且两个命令方块中的目标选择器可能无法选择到同一个玩家时,可以先用一个命令方块标记这个玩家,以便后面更多的命令方块可以都对该玩家执行命令,麦仁丝将这种方法称为“跟踪”。如上文我用@r作为目标选择器的变量,如果不对这个随机玩家进行“跟踪”,且所有命令方块都用同一个目标选择器“@r”的话,那么这明显是错误的。除了可以通过实体标签跟踪外,还可以通过计分板、盔甲架(实体)等进行跟踪。

第二步:给予跟踪的玩家玩家序数(UID)
    首先,我们需要一个虚拟实体来记录当前玩家拥有的最高的序数,即上一次给予玩家的序数。当第一个命令方块成功执行后(也就是当游戏中存在未被统计过的玩家时),在给予序数之前,我们可以为虚拟实体e1在计分板se(专门统计虚拟实体分数的计分板,无初始分数)上的分数加1分,然后再将e1在se上的分数赋值给被跟踪玩家在计分板s1上的分数(即让被跟踪玩家在s1上的分数等于e1在se上的分数)。s1就是专门用来统计各个玩家的玩家序数的计分板。此时这个被跟踪玩家的玩家序数就能比上一个玩家高一分了,实现了每一个玩家在s1的分数各不相同。
    我们可以将以下指令写入第二个“连锁 有条件”命令方块中:

  1. scoreboard players add e1 se 1
复制代码
      我们可以将以下指令写入第三个“连锁 有条件”命令方块中:
  1. scoreboard players operation @a[tag=t1] s1 = e1 se
复制代码

第三步:取消跟踪玩家
    给予了被跟踪玩家序数之后,这个玩家已经成为被统计过的玩家(可以理解为注册过的玩家),最后我们只要在给予被跟踪玩家一个表示已统计的标签t2,再去掉被跟踪玩家的跟踪标签t1,所有命令就执行结束了。
    我们可以将以下指令写入第四个“连锁 有条件”命令方块中:

  1. tag @a[tag=t1] add t2
复制代码
       我们可以将以下指令写入第五个“连锁 有条件”命令方块中:
  1. tag @a[tag=t1] remove t1
复制代码
       当又有一个新玩家进入游戏时,他(她)又会被跟踪,并在s1上给予其比上一个被跟踪的玩家高1的分数,以此推类……于是便实现了每一个玩家对应一个分数,这就是各个玩家的玩家序数(UID)。

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

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

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

思维导图注释:
循环:第一个命令方块为重复命令方块
添加: 添加实体标签
删除:删除实体标签
设置:计分板指令
e:s:(虚拟)实体e在计分板s上的分数

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

【麦仁丝课堂】玩家序数统计系统 指令内容汇总

【麦仁丝课堂】玩家序数统计系统 指令内容汇总

①tag @r[tag=!t2] add t1     循环 开启
②scoreboard players add e1 se 1     连锁 有条件
③scoreboard players operation @a[tag=t1] s1 = e1 se     连锁 有条件
④tag @a[tag=t1] add t2     连锁 有条件
⑤tag @a[tag=t1] remove t1     连锁 有条件


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

实体标签:2个
t1:用于跟踪一个未统计玩家
t2:已统计玩家
虚拟实体:1个
e1: se: 最高序数

    那么,本期教程就到这里结束了。如果真正掌握了玩家序数统计系统并且能够灵活运用命令方块的话,实际上可以发现教程中的一些内容仍然是可以简化和调整的。但麦仁丝更加喜欢清晰地表达,也就是清晰在前,简化在后。本期教程作为命令方块进阶教程的第一期教程,也是一次试验,所以内容是比较简单的,以后还会有许多比较复杂的内容,希望这种教学方式能够让大家更好地理解教程的内容。
    感谢大家的支持!!!

(本期教程最早于2021年8月9日发布于网易我的世界论坛,现麦仁丝已转驻苦力怕论坛,将停止在网易我的世界论坛上的发布教程)

点此前往麦仁丝课堂 目录


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

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





评分

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

查看全部评分

苦力怕论坛,感谢有您~
 楼主|  发表于 2023-2-5 18:28:58|显示全部楼层 IP:浙江省

玩家序数统计系统plus

本帖最后由 Mirence 于 2023-2-27 12:04 编辑

       利用1.19版本更新的/execute指令可以再次简化该装置,最少只需要3个命令方块!!!(原本写的2个来着后来发现不行。。。)
点击前往 玩家序数统计系统plus
        不过,我应该并不是第一个发现能够简化的人,毕竟1.19版本已经出了一段时间了
来自 6# 2023-2-5 18:28:58回复收起回复
苦力怕论坛,感谢有您~
 发表于 2023-1-18 16:05:06|显示全部楼层 IP:福建省
本帖最后由 小逗 于 2023-1-18 16:11 编辑

让没tag的玩家向虚拟实体加一分
  1. execute as @a[tag=!uid] positioned as @s run scoreboard players add uid uid 1
复制代码
同步一次分数
  1. scoreboard players operation @a[tag=!uid] uid = uid uid
复制代码
给没tag的玩家加上tag
  1. tag @a[tag=!uid] add uid
复制代码
共三步,这不就好了嘛,干嘛硬凑五步

2#2023-1-18 16:05:06回复收起回复
苦力怕论坛,感谢有您~
 楼主|  发表于 2023-1-18 16:54:49|显示全部楼层 IP:浙江省
本帖最后由 Mirence 于 2023-1-18 16:55 编辑

对于玩家序数统计系统中的“跟踪”这一步骤:
        若该装置只是用于为所有进入过游戏的玩家标上UID编号,因为两个玩家几乎不太可能同时同位置进入游戏,所以两个命令方块中目标选择器的选择对象基本是相同的,若能保证不会有以上事情发生,那么可以去掉“跟踪”这一步,这样能够省去两个命令方块;
       若该装置不是用于UID编号,而是为符合一定条件的玩家编号,若有可能同时出现多个玩家符合条件,那么这里是一定要有“跟踪”这一步骤的。




3#2023-1-18 16:54:49回复收起回复
苦力怕论坛,感谢有您~
 发表于 2023-1-18 17:14:29|显示全部楼层 IP:福建省
Mirence 发表于 2023-1-18 16:54
对于玩家序数统计系统中的“跟踪”这一步骤:
        若该装置只是用于为所有进入过游戏的玩家标上UID编号 ...

够严谨
4#2023-1-18 17:14:29回复收起回复
苦力怕论坛,感谢有您~
 发表于 2023-1-22 12:15:17 来自手机|显示全部楼层 IP:广东省
这个忒快了吧(
5#2023-1-22 12:15:17回复收起回复
苦力怕论坛,感谢有您~
 发表于 2023-6-2 18:34:44 来自手机|显示全部楼层 IP:四川省
666666666666666666
7#2023-6-2 18:34:44回复收起回复
苦力怕论坛,感谢有您~

本版积分规则

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

QQ群

访问手机版

访问手机版

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

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

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

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