实例4:漂亮的排名——显示与队伍

不得不说,玩家之间的竞技是Minecraft的一个重要组成部分。而在记分板系统的帮助下,组织这类竞赛将会更加方便,也更具观赏性。现在假设一个情境——在迷宫中进行的死亡竞赛。

准备工作

很遗憾,这个教程并不准备教你如何搭建一个迷宫。这个工作留给你自己。

现在来构思一下,除了迷宫本身,完成这个地图需要什么:

  • 一个变量,记录击杀得分
  • 侧边栏,将分数显示出来
  • 两个队伍,这两个队伍互相之间进行对抗

前两个任务在前面的实例中已经介绍过了,现在只需要回顾一下队伍的命令就可以了。

好,让我们开始吧!

初次实现

现在创建两个队伍,一个叫CT,一个叫T:

scoreboard teams add CT
scoreboard teams add T


这两个队伍使用不同的颜色,那么就需要用修改color:

scoreboard teams option CT color blue
scoreboard teams option T color gold

同时因为友军火力默认开启,我们又不希望友军之间误伤,所以要修改friendlyfire:

scoreboard teams option CT friendlyfire false
scoreboard teams option T friendlyfire false

名称牌在迷宫中是个问题——它会带来透视一样的效果。所以要把名称牌隐藏起来:

scoreboard teams option CT nametagVisibility hideForOtherTeams
scoreboard teams option T nametagVisibility hideForOtherTeams

当然也可以把hideForOtherTeams换成never,这个由你自己决定。

接下来是碰撞的问题。在这种娱乐竞赛中同队玩家一般不采用碰撞,但是和其他队伍之间应该保留碰撞。所以修改一下collisionRule:

scoreboard teams option CT collisionRule pushOtherTeams
scoreboard teams option T collisionRule pushOtherTeams

好了,队伍的基本设置完成了。现在还差一样,修改前缀。但是option里并不提供前缀修改,怎么办呢?

这里提供一个NBT修改器的下载地址:
http://www.mcbbs.net/thread-306895-1-1.html

打开NBT Explorer,按照4.2 记分板队伍提供的路径,找到前缀并修改、保存。打开游戏,你就能看到类似这样的效果了:


(这里使用的前缀是[T]。这个例子只修改了前缀,如果你要添加后缀,务必记得在末尾加上§r。)

到这里队伍的设置就结束了。接下来是设置变量和显示在侧边栏:

scoreboard objectives add dmscore playerKillCount #因为friendlyfire已经关闭,所以可以直接统计击杀玩家的次数
scoreboard objectives setdisplay sidebar dmscore

完成!要开始游戏,还得把小伙伴加入队伍中。

scoreboard teams join T @p
scoreboard teams join CT @p

关于人数平衡的解决方法就请你自己探究了。

在这里提供一个人数平衡问题的解决思路:

  1. 设置命令方块,附上按钮或者踏板,让玩家自己选择队伍
  2. 每有一个玩家加入一个队伍则给对应变量加分
  3. 如果分数达到限定值则更改加入队伍命令方块的命令,比如显示“队伍已满”
  4. 还有很多种方法,你可以自己发挥想象!

你还可以给游戏计时,时间到了以后把所有玩家移出队伍并传送到指定位置。可以使用的选择器参数为team

再次实现

实际上刚才的装置比较简陋,适合小伙伴之间的小型比赛,如果要拿来作为地图发布或许是拿不出手的。因此我们还可以对现有的系统进行进一步的优化。

给名字加上颜色

如果单单设置前缀为队伍名称可能有些单调,我们可以用样式代码修改前缀。例如,前缀§6[T]可以使队伍拥有如下效果:

有关样式代码的更多信息见2.2.2 NBT实战样式代码部分

只统计游戏参与者的击杀数

在上面的实例中使用了playerKillCount这个判据,然而如果在一个大服务器中运行这样的游戏,可能会出现无关人士上榜的现象。因此可以结合teamkill.判据和operation命令实现只统计游戏参与者的击杀数。具体命令如下:

#新建变量
scoreboard objectives add dmscoreT teamkill.blue
scoreboard objectives add dmscoreCT teamkill.gold

#高频运行赋分命令
execute @e[team=T] ~ ~ ~ scoreboard players operation @s dmscore = @s dmscoreT
execute @e[team=CT] ~ ~ ~ scoreboard players operation @s dmscore = @s dmscoreCT

美化的侧边栏

侧边栏的功能并不只是显示玩家和分数,利用侧边栏,你甚至可以做出一个显示屏!现在我们利用侧边栏做一个加入队伍的信息提示。

首先要添加变量:

scoreboard objectives add info dummy 公告栏

MC里不能直接输入样式代码,所以我们用function来制作带颜色的假名:

# 以下命令使用function运行
# 分数用来排序信息
# 第四行输入两次§4是为了区分假名。reset命令清除一个带样式代码的假名时,也需要带上相同的样式代码
scoreboard players set §4============ info 3
scoreboard players set §6加入T队请到红区 info 2
scoreboard players set §1加入CT队请到蓝区 info 1
scoreboard players set §4§4============ info 0

效果如下:

统计队伍总分

这个只需要每个队伍一条命令就可以了(但是此方法不适用于假名):

scoreboard players operation TotalT dmscore += @e[team=T] dmscore
scoreboard players operation TotalCT dmscore += @e[team=CT] dmscore

如果在function中运行,你还可以顺便为这两个总分计数器加上颜色。


results matching ""

    No results matching ""