今天小编为大家带来我的世界命令方块教程,教大家在游戏中有偿召唤其他玩家,那么这个功能怎么实现呢?一起来看看吧!
作者:翔翼之刃
先介绍一下要实现的功能:
大召唤术:耗费5金币使用(金币为游戏内管理员自行设定的通货,金币不足则提示无法使用)
使用后除使用者以外的人在聊天框可以看到召唤信息。
在大召唤术被使用的10秒内,若其他人点击召唤信息则回被传送到使用者位置,并扣除5金币(若金币<5则提示金币不足并取消传送)
这里为了避免召唤混乱或重复使用,限定当大召唤术触发期间任何人不能重复使用大召唤术。
另外,如果大召唤术被使用超过10秒,或使用者中途退出游戏,则传送者点击聊天框命令将无任何提示,且不会传送,但也不会扣除金币。
布置如图(也可以考虑做成竖向的):
使用的计分板目标:
zh(召唤,类型为trigger)
cs(传送,类型为trigger)
zhtrue(标记正在使用大召唤术的玩家,类型为dummy)
tptime(大召唤术剩余时间,类型为dummy)
jb(金币,类型为dummy)
前置命令:
/gamerule commandBlockOutput false //取消命令方块在聊天框的输出
/gamerule sendCommandFeedback false //取消所有命令结果在聊天框的输出,但有潜在安全隐患,慎用
/scoreboard objectives add zh trigger
/scoreboard objectives add cs trigger
/scoreboard objectives add zhtrue dummy
/scoreboard objectives add tptime dummy
/scoreboard objectives add jb dummy
/scoreboard players set tptime tptime 0 //初始化tptime
【计时器(tptime)】
scoreboard players test tptime tptime 1 200 //(循环)检测tptime是否>=1
scoreboard players remove tptime tptime 1 //(条件制约)tptime减1
scoreboard players test tptime tptime 0 0 //(条件制约)检测tptime是否为0
scoreboard players set * zhtrue 0 //(条件制约)将所有人的zhtrue设置为0
【被传送者】
tellraw @a[score_cs=1,score_cs_min=1,score_jb=4] {"text":"金币不足,无法传送!"} //(循环)(若cs=1的人jb<5)提示金币不足
tp @a[score_cs=1,score_cs_min=1,score_jb_min=5,score_zhtrue=0] @a[score_zhtrue_min=1] //将cs=1,jb>=5,zhtrue=0的人传送到zhtrue=1的人处
tellraw @a[score_cs=1,score_cs_min=1,score_jb_min=5] {"text":"传送成功!"} //(条件制约)对cs=1,jb>=5的人显示成功信息
scoreboard players remove @a[score_cs=1,score_cs_min=1,score_jb_min=5] jb 5 //(条件制约)将cs=1,jb>=5的人的jb减5
scoreboard players set @a[score_cs_min=1] cs 0 //将cs=1的人的cs分数设置为0
【使用大召唤术(含条件检测)】
tellraw @a[score_zh=1,score_zh_min=1,score_jb=4] {"text":"金币不足,无法使用大召唤术!"} //(循环)(若zh=1的人jb<5)提示金币不足
scoreboard players test tptime tptime 1 200 //检测tptime是否不为0
tellraw @a[score_zh=1,score_zh_min=1,score_jb_min=5] {"text":"当前有人正在使用大召唤术,请稍后使用!"}
//(条件制约)对zh=1,jb>=5的人显示提示信息
scoreboard players test tptime tptime 0 0 //检测tptime是否为0
scoreboard players set @a zhtrue 0 //(条件制约)将所有人的zhtrue设置为0
scoreboard players set @p[score_zh=1,score_zh_min=1,score_jb_min=5] zhtrue 1 //(条件制约)将zh=1,jb>=5的人的zhtrue设置为1
tellraw @a[score_zhtrue_min=1] {"text":"成功使用大召唤术!"} //(条件制约)对zhtrue=1的人显示对应信息
scoreboard players remove @a[score_zhtrue_min=1] jb 5 //(条件制约)将zhtrue=1的人的jb减5
scoreboard players set tptime tptime 200 //(条件制约)tptime设为200(10秒)
tellraw @a[score_zhtrue=0] ["",{"selector":"@a[score_zhtrue_min=1]"},{"text":"花费5金币开启了大召唤术!请在10秒内","color":"green"},{"text":"点击传送","underlined":true,"color":"red","clickEvent":{"action":"run_command","value":"/trigger cs set 1"}},{"text":"到ta身边吧!","color":"green"}]
//(条件制约)对使用者以外的人在聊天框显示传送指令
scoreboard players set @a[score_zh=1,score_zh_min=1] zh 0 //将zh=1的人的zh分数设置为0
【允许触发器可用】
scoreboard players enable @a cs //(循环)启用cs
scoreboard players enable @a zh //(循环)启用zh
触发大召唤术的方法:任何玩家使用命令/trigger zh set 1(可以将命令编入工具书中,玩家点击书中文字触发大召唤术)
注意事项:所有的循环命令方块要设置成“保持开启”,并且所有的连锁命令方块的“条件制约”设定要严格按照上文所述,有几个连锁命令方块要设置成“不受制约”,否则可能无法正常运行。
目前这套装置已经在租赁服测试过可以正常使用。当然如果大家感兴趣的话也可以在自己的租赁服或者局域网做一个,帮忙测试下有没有bug。
下一步计划加入大传送术发起者的“接受/拒绝”功能。
对本文内容有任何建议欢迎回复和指正!
19游戏网整理报道