本帖最后由 jiuerd 于 2014-1-18 12:21 编辑
教程完成度:95%
你们需要我补充什么东西,可以回帖说明,我会考虑补充完整的。
根据zhaoxingeabc建议,增加无线红石部分。
在服务器上撸了一个队伍PVP的系统,包含了高分奖励和负分安慰奖,花了我两天的时间~~
发现了一个细节,mark一下等以后补充:
#传送命令 避免/back:强制传送两次,即: 初始位置>限制进入的目的地>中转位置>初始位置,则/back只能回到中转位置,而不能进入限制进入的目的地。
#@p加范围限定r=3
最近在服务器弄活动才发现计分板这个神奇的东西,查看wiki以及部分帖子和自己琢磨之后,终于大体掌握了这一神器。本帖子是给那些看了wiki还不懂的人做一个通俗易懂的介绍。下面是教程:
计分板的用途:
计分板系统可以统计玩家的死亡次数deathCount、杀死其他玩家次数playerKillCount、杀死怪物次数totalKillCount这三种统计数据,这三个统计数据是内置的功能,会在玩家死亡/杀死其他玩家/杀死怪物时自动增加分数。此外还有一个是dummy的变量数据,这个是可以根据需求自由变换的,但是只能通过命令来更改其分数,具体作用下面再说明。 |
说明:ob_name代表对象的名字,display name代表显示名字,player_name代表玩家ID名字,team_name代表队伍名字。
颜色说明:我是名字,我是命令,我是注意说明
命令大小写严格区分,不能写错,本教程为抽空编辑,并未区分大小写,后期会更正。
命令介绍:
/scoreboard为前置命令,下面有三个命令参数:objectives、players、teams,分别对应对象、玩家、队伍三种参数进行操作。
objectives对象
objectives对象:对象是计分板统计的内容,拥有name、display name、criteria三种参数,name是命令中使用的名称,可以自己定义,display name 则是显示的名字,可以与name相同,也可以用其他名字,如果不填则默认为name。criteria 是统计的数据类型,有死亡次数deathCount、杀死其他玩家次数playerKillCount、杀死怪物次数totalKillCount以及虚拟环境 dummy 四种。 |
1.首先,我们需要建立一个对象
/scoreboard objectives add <name> <criteria> [display name]
/scoreboard objectives add deaths deathCount 死亡榜 这样我们就建立了一个名称为deaths,显示名字为死亡榜的死亡次数的计分板,在玩家死亡的时候,deaths的分数会自动增加。 分数:玩家player在objectives下的分数;可以有多个objectives,不同的objectives下的分数不同。 |
2.显示计分板
在建立了计分板之后,我们得将它显示出来 /scoreboard objectives setdisplay (slot) [name] 如果只有一个对象的话,name可以不写,但是建议把objectives 的name写上,以免出现问题。 slot代表显示的位置,sidebar右侧、list(Tab键显示列表)、blowname玩家头顶ID下面
/scoreboard objectives setdisplay sidebar deaths 至此,我们就简单地建立了一个基于死亡次数统计的死亡榜。 |
3.管理计分板
我们可以通过建立多个对象,用来统计不同的数据,但是我忘记了我都建立了什么对象了怎么办? /scoreboard objectives list 可以将所有的对象列出,同理,当objectives更换成players和teams则是列出玩家和队伍,如果在list后面增加玩家ID,则显示该玩家的全部计分板信息 /scoreboard objectives remove deaths 移除deaths对象。
注意: 1.对象名字name为单一单词,最好不要用到./*_等特殊符号,否则可能会影响到配合命令方块选取特定玩家。 2.计分板deaths对象建立以后,玩家的数据并不是0,而是空(null),所以只有当玩家的数据更新的时候才能显示死亡榜。
|
4.更改玩家的分数与清零
/scoreboard players set player_name ob_name 数字 这个可以更改玩家的特定对象的分数,同时也可以将null状态更改,如果数字为0的话就可以用来清空玩家的数据和归零。 /scoreboard players add/remove player_name ob_name 数字 这条命令非常明显是增加或减少玩家的分数。 |
5.队伍建立与删除
计分板的队伍系统是做竞技对抗活动的好帮手。 1.依旧是先建立一个队伍 /scoreboard teams add Red 红队 建立一个名称为Red的红队 依旧可以用list/add/remove来管理队伍,队伍系统还有一个关键的参数option,option下有三种参数color、friendlyfire和seeFriendlyInvisibles,分别对应队伍颜色、队友伤害、队友隐身可见。 /scoreboard teams option Red color red color后面接颜色英文名,至于RGB或者颜色代码行不行你可以自己试一试。设置了队伍的颜色之后,加入该队伍的玩家ID将会显示队伍的颜色。默认队伍颜色为白色,没有队伍也是白色。 /scoreboard teams option Red friendlyfire/seeFriendlyInvisibles true/false 命令不能合并,只能分开来写,默认队友伤害开启、队友隐身不可见。
2.加入队伍和离开队伍 /scoreboard teams join Red player_name 玩家加入Red队 /scoreboard teams leave player_name 玩家离开队伍 |
6.配合命令方块使用,根据分数队伍选择玩家
计分板的强大在于配合命令方块使用,本教程的命令中player_name基本上可以用命令方块@p来选取玩家。
比如说我已经建立了三个队伍team_name为Red的红队,Blue的蓝队和Black的黑队,以及deaths、kills的死亡榜和杀人榜。我现在需要选取特定的队伍及分数的玩家,可以用 @p[team=Blue,score_kills=10,score_kills_min=5,score_deaths=3] 来选取最近的蓝队,杀人榜分数5~10,死亡榜分数不超过3的玩家。 @p[team=!Black]则是选取不是黑队的玩家(包括没有队伍的玩家) 注意:@p[]方括号里面的条件判定是“与”
|
7.dummy参数的使用
dummy是计分板的精髓,dummy的数据只能通过命令进行更改。 /scoreboard objectives add D1 dummy 数据1 建立dummy的对象 有了D1的对象之后,我们可以进行弄很多东西了,最简单的是用D1 做限定次数的判定。
说明: 代表命令方块 代表踏板或者其他的可以激活红石的东西
举个例子,我需要给每一个人发福利,但是每人只能领取一次。这种情况需要多条命令组合: 首先先将玩家分数初始化归零(这一步很重要,否则将会导致领取福利两次) /scoreboard players set player_name D1 0 然后是命令组合:
/give @p[score_D1=0] 福利 1 /scoreboard players set player_name D1 1
这么摆放  ,当玩家走过中间的踏板时就激活两边的命令方块,然后发送福利和更改玩家的D1分数为1,当玩家再次踏上踏板时,因为@p[score_D1=0]不满足,所以不能再领取福利了。 如果需要有限次的多次领取,则需要用到add,例如5次:
/give @p[score_D1=5] 福利 1 /scoreboard players add player_name D1 1
从这个例子可以看出,dummy的作用在于计数,如果只是用0和1两个数的话,就可以做成一个简单的是非判断,如果多个数字的话就是多项选择了。利用dummy与另外三种对象配合,可以建立一个PVP和RPG的奖罚系统。 |
例子:
1.经济系统
dummy与totalKillCount配合,可以弄基于击杀怪物数量的经济系统。 首先是建立金钱的对象: /scoreboard objectives add money dummy 金币
然后建立怪物击杀统计对象: /scoreboard objectives add kills totalKillCount 杀怪数
设定杀死10个怪物获得一个金币的兑换比率,使用组合命令:
/scoreboard players add @p[score_kills_min=10] money 1 /scoreboard players remove @p[score_kills_min=10] kills 10
  
商店设定 系统商店,即由服务器提供资源,可以直接使用下面组合命令进行交易。
/scoreboard players remove @p[score_money_min=10] money 10 /give @p[score_money_min=10] 物品ID 数量
玩家商店,即商品由玩家提供,则需要用发射器发出物品进行交易。 详细请看http://www.mcbbs.net/thread-84869-1-1.html
注意:扣钱和给物品的命令需要对@p进行限定,避免没钱也可以买东西
|
2.计时系统
首先是建立时间的对象: /scoreboard objectives add time dummy 时间 然后使用红石脉冲连接命令: /scoreboard objectives add player_name time 1 原理很简单是吧,不过可以弄出很多有趣的东西哦 |
3.无线红石
在1.7之前,无线红石一般采取testfor命令实现。 testfor是一个比较特殊的命令,它是将检测结果转换成红石信号输出,如果结果为真则输出红石信号,为假则不输出信号。
比如:/testfor @p[score_dummytestfor_min=1]
是检测最近的玩家是否拥有分数为1的虚拟环境变量dummytestfor,如果有的话就输出红石信号,没有则不输出。 连接方式: [输入端]-[red_wool]-红石比较器-[输出端] (短线—只是表示连接,不代表任何方块)
注意:输入端需要用脉冲信号,推荐使用漏斗脉冲
如果想把它做成远程无线红石的话,就需要把@p改成@a,即检测所有玩家, 而
[脉冲输入端]- -红石比较器-[输出端]
为远程输出端; 输入端则对虚拟变量dummytestfor进行更改:
/scoreboard players set @p[r=3] dummytestfor 1 无线红石开启
/scoreboard players set @p[r=3] dummytestfor 0 无线红石关闭
这种方法需要用到脉冲,虽然不是高频,但如果用的比较多的话负担还是比较大的。
1.7以后,由于有了setblock命令,无线红石将会变得非常简洁:
/setblock x y z BlockID /setblock x y z 0
放一个红石块红石火把等等就是给红石电源信号,放个空气就是阻断红石信号,这个不需要再累赘多说了。优点是不需要脉冲,输出端电路简单,缺点就是找座标有点累。
|
4.
8.待续
成品及教程展示:
计分板中文wiki
http://minecraft-zh.gamepedia.com/%E8%AE%A1%E5%88%86%E6%9D%BF
计分板(Scoreboard)——一个很重要的游戏机制哦 BY
DJXGAME
http://www.mcbbs.net/thread-81417-1-1.html
【命令方块】记分板(scoreboard)教程
http://tieba.baidu.com/p/2489951717?pn=1
【第四届擂台赛作品】基于计分板的商店系统(包括出售和回收) BY
g-g-g
http://www.mcbbs.net/thread-155677-1-1.html
[命令方块]计分板的应用 第一弹:商店 BY
yeyaowei
http://www.mcbbs.net/thread-84869-1-1.html
[命令方块]计分板的应用 第二弹:队伍系统 BY
yeyaowei
http://www.mcbbs.net/thread-84887-1-1.html
[命令方块]计分板的应用 限制时间的跑酷(原理)
yeyaowei
http://www.mcbbs.net/thread-87087-1-1.html
【教程】TESTFOR指令(可以作为玩家检测器) BY
719823597
http://www.mcbbs.net/thread-79793-1-1.html
【耗子教程】论RPG的红石与技术第一讲——无线红石及应用
http://tieba.baidu.com/p/2539174817