请选择 进入手机版 | 继续访问电脑版
查看: 3839|回复: 9

[技巧教程] 【教程】用简单的指令做一个随机分配队伍,且人数平衡!

[复制链接]

30

主题

1324

帖子

825

积分

Lv.6 附魔大师

UID
79156
小麦
451
金锭
553
下界之星
0

一周年纪念勋章内测精英勋章

发表于 2019-1-18 16:32:16 | 显示全部楼层 |阅读模式
本帖最后由 超可爱的萌新 于 2019-1-18 16:37 编辑

一个随机分配队伍且人数平衡的系统在一个小游戏地图中会十分有趣,因为你并不知道会分配到哪名玩家作为队友;
但也十分公平,在人数为偶数的情况下人数是相同的。


GIF3.gif


应用到的计分板:
  1. /scoreboard objectives add rs dummy
复制代码
  1. /scoreboard objectives add rs2 dummy
复制代码

将物品展示框的rs分数设置成2分
  1. /scoreboard players set @e[type=] rs 2
复制代码
rs计分板的作用是计算人数,rs2的作用是计算人数的一半。
运用到的实体:盔甲架(armor_stand)、物品展示框(item_frame)。(当然可以不使用物品展示框,为了方便讲解。我只是懒而已

GIF4.gif

第一步:得出总人数
在分配人数平衡的队伍的前提下得先知道人数,所以下面这条指令是必须的:

  • 循环scoreboard players set @e[type=armor_stand] rs 0
  • 连锁execute @a ~ ~ ~ scoreboard players add @e[type=armor_stand] rs 1

当两条指令都运行后,盔甲架的rs分数将是当前的总人数。


第二步:分配队伍
1-得到总人数的一半

  • 脉冲:scoreboard players operation @e[type=armor_stand] rs2 = @e[type=armor_stand] rs
  • 循环:scoreboard players operation @e[type=armor_stand] rs2 /= @e[type=item_frame] rs

将盔甲架的rs2分数同等于rs的分数,就得到了2份总人数。rs2的实际作用则是用来计算总人数的一半,应用在吓一条指令。
而第二条指令则将盔甲架的rs2的分数除以物品展示框rs的分数(2分)就得到了一半的人数。
如果你想分配成3个、4个队伍可以更改物品展示框rs的分数。

  • 总人数÷2=总人数的一半

2-分配队伍

  • 连锁:execute @e[type=armor_stand,score_rs2_min=1] ~ ~ ~ scoreboard teams join 黑 @r[type=plyaer,team=]
  • 连锁:execute @e[type=armor_stand,score_rs2_min=0] ~ ~ ~ scoreboard players remove @s rs2 1
  • 连锁:execute @e[type=armor_stand,score_rs2_min=0,score_rs2=0] ~ ~ ~ scoreboard teams join 红 @a[type=player,team=]

这里其实特别简单,
当盔甲架的rs2分数最小为1时,将一名随机的没有队伍的玩家加入到“黑”的队伍。
当盔甲架的rs2分数最小为0时,扣除自己(盔甲架)rs2计分板的1分。与上一条指令合作将一半的人数加入“黑”队。
当盔甲架的rs2分数最小为0、最大为0时,将所有没有队伍的玩家加入“红”的队伍。将剩下没有被加入“黑”队的一半玩家加入到“红”队。

如果想分配多个队伍,只需要在第1条指令后再插入下面这条指令,更改其中的队伍名字。
连锁:execute @e[type=armor_stand,score_rs2_min=1] ~ ~ ~ scoreboard teams join 队伍 @r[type=plyaer,team=]
当然加入队伍命令方块的数量请与物品展示框的rs分数少1,不能相等或多1。

总结:
脉冲命令方块被激活得出盔甲架的rs2的时,将会进行队伍分配。


icb:scoreboard players operation @e[type=armor_stand] rs2 = @e[type=armor_stand] rs
rcb:scoreboard players operation @e[type=armor_stand] rs2 /= @e[type=item_frame] rs
execute @e[type=armor_stand,score_rs2_min=1] ~ ~ ~ scoreboard teams join 黑 @r[type=player,team=]
execute @e[type=armor_stand,score_rs2_min=0] ~ ~ ~ scoreboard players remove @s rs2 1
execute @e[type=armor_stand,score_rs2_min=0,score_rs2=0] ~ ~ ~ scoreboard teams join 红 @e[type=player,team=]

使所有玩家退出队伍的指令:
/scoreboard teams leave @e


我的其它作品



本帖为原创,未经允许禁止转载



评分

参与人数 1 小麦 +1 金锭 +5 收起 理由
小杰XIoajie + 1 + 5 我好了

查看全部评分

30

主题

1324

帖子

825

积分

Lv.6 附魔大师

UID
79156
小麦
451
金锭
553
下界之星
0

一周年纪念勋章内测精英勋章

 楼主| 发表于 2019-1-18 21:23:03 | 显示全部楼层
又诈尸了

46

主题

568

帖子

309

积分

Lv.5 农牧专家

UID
16359
小麦
102
金锭
1975
下界之星
0
发表于 2019-1-18 23:29:41 来自手机 | 显示全部楼层
2333让我想起了我第一个做的连计分板都不用的队伍平衡

点评

就是想起了计分板能玩这个东西233  发表于 2019-1-19 00:22

4

主题

31

帖子

124

积分

Lv.4 怪物猎人

UID
211635
小麦
111
金锭
562
下界之星
0
发表于 2019-1-26 18:22:23 | 显示全部楼层
给弟中弟顶帖
我是老农民

0

主题

17

帖子

4

积分

Lv.1 新手木匠

UID
7033188
小麦
0
金锭
20
下界之星
0
发表于 2020-2-26 09:05:50 来自手机 | 显示全部楼层
楼主我还是看不懂,你能帮我做一个吗awa

30

主题

1324

帖子

825

积分

Lv.6 附魔大师

UID
79156
小麦
451
金锭
553
下界之星
0

一周年纪念勋章内测精英勋章

 楼主| 发表于 2020-2-26 21:30:03 | 显示全部楼层
吕灿 发表于 2020-2-26 09:05
楼主我还是看不懂,你能帮我做一个吗awa

逐条复制进命令方块里

脉冲 scoreboard players operation @e[type=armor_stand] rs2 = @e[type=armor_stand] rs

循环 scoreboard players operation @e[type=armor_stand] rs2 /= @e[type=item_frame] rs
execute @e[type=armor_stand,score_rs2_min=1] ~ ~ ~ scoreboard teams join 黑 @r[type=player,team=]
execute @e[type=armor_stand,score_rs2_min=0] ~ ~ ~ scoreboard players remove @s rs2 1
execute @e[type=armor_stand,score_rs2_min=0,score_rs2=0] ~ ~ ~ scoreboard teams join 红 @e[type=player,team=]

所有玩家退出队伍的指令:
scoreboard teams leave @e

0

主题

5

帖子

1

积分

Lv.1 新手木匠

UID
6493846
小麦
0
金锭
3
下界之星
0
发表于 2020-7-24 20:54:16 | 显示全部楼层
版本是1.12.2吗,如果是那1.11.2的怎么做

0

主题

6

帖子

3

积分

Lv.1 新手木匠

UID
7976122
小麦
1
金锭
19
下界之星
0
发表于 2020-7-25 16:23:31 | 显示全部楼层
nb!

0

主题

12

帖子

3

积分

Lv.1 新手木匠

UID
8154866
小麦
0
金锭
14
下界之星
0
发表于 2020-10-18 13:12:34 来自手机 | 显示全部楼层
楼主能讲解下operation和enable
吗,我一直想知道这个怎么用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

返回顶部