当前位置: 我的世界 > 游戏攻略 > 正文

17w18B快照Advancement命令系统 当命令脱离命令方块

小编:ahdy时间:2017-05-08 09:45回到游戏园首页

  17w18B快照Advancement命令系统 当命令脱离命令方块。上周我的世界1.12放出了最新快照,这17w18B快照更新了两个重要的触发器,那就让我们来看看这两个触发器在实际游戏中的应用吧。

  游戏园我的世界官方群:325049520  256070479 欢迎各路喜爱我的世界的小伙伴们加入讨论!

  玩服务器的小伙伴们可以加入:141931866 群一起联机玩游戏哦!

  如果你是腐竹的话可以给我们投稿你的服务器哦~投稿地址点我进入

  如果你有心仪的作品或者心得分享的话,欢迎来游戏园投稿,大家可以点击>>>投稿<<<进行投稿哦~ 有奖品哦~

  在最近的更新里,MOJANG新增了两个重要的触发器,分别是 tick 和 arbitrary_player_tick ,通过这两者触发的adv没有限制条件,即下一个游戏刻会触发,区别在于tick会让所有人都触发这个adv,arbitrary_player_tick只会让当前玩家中最早登陆的那个玩家触发adv。

  也就意味着,你可以通过tick触发器去实现一些玩家间独立运行的高频模块,通过arbitrary_player_tick实现全局主时钟模块,结合之前的impossible触发器,adv系统已经拥有了做小游戏地图完整模块的全部条件。

  首先是tick。一些在玩家中独立运行的模块(比如放技能、冷却系统等等),在以往我们考虑使用一大堆execute和scoreboard去完成,现在,你只需要针对每个执行者(@s)去考虑就可以了,这些模块不需要并入主系统,自己就可以完整运行;

  arbitary_player_tick可以用于主时钟系统,比如控制一个游戏的进程等等,需要一个主时钟,在这个主时钟里面我们可以通过

  advancement grant @s only #ADV

  这样的方式来调用子模块,让他们有序执行。

  最后,对于一些不需要任何时候都运行的模块,我们可以使用impossible这个触发器去写,然后在需要的时候由主时钟系统调用就行。

  原理大概是这样子,我们可以来看几个实例。以常见的欢迎语为例。需要实现的功能是:

  当玩家进入游戏时进行一次提示

  听起来是不是很简单?实现起来也非常简单。首先我们在存档目录/data/advancement/下新建一个文件夹,名字随意,这里我取system,然后在system目录下新建一个json文档,名字也随意,但是你要记住,我这里取名叫HelloWorld.json,注意实际adv系统不区分大小写,我这里分大小写只是为了方便后续查看。

  打开这个文档,输入下面的内容

  {

  "criteria":{

  "1":{

  "trigger":"arbitrary_player_tick"

  }

  },

  "rewards":{

  "commands":[

  "advancement revoke @s only system:helloworld",

  "gamerule commandBlockOutput false",

  "gamerule logAdminCommands false",

  "scoreboard objectives add HelloWorld stat.leaveGame 欢迎语提示",

  "scoreboard players tag @s[score_HelloWorld_min=1] remove HelloWorld",

  "tellraw @s[tag=!HelloWorld] ["",{"text":"Hello ","color":"yellow"},{"selector":"@s"},{"text":"! Welcome to Minecraft!","color":"yellow"}]",

  "scoreboard players reset @s[score_HelloWorld_min=1] HelloWorld",

  "scoreboard players tag @s[tag=!HelloWorld] add HelloWorld"

  ]

  }

  }

  更简单粗暴一点的话可以写成这样

  {"criteria":{"1":{"trigger":"arbitrary_player_tick"}},"rewards":{"commands":["advancement revoke @s only system:helloworld",

  "gamerule commandBlockOutput false",

  "gamerule logAdminCommands false",

  "scoreboard objectives add HelloWorld stat.leaveGame 欢迎语提示",

  "scoreboard players tag @s[score_HelloWorld_min=1] remove HelloWorld",

  "tellraw @s[tag=!HelloWorld] ["",{"text":"Hello ","color":"yellow"},{"selector":"@s"},{"text":"! Welcome to Minecraft!","color":"yellow"}]",

  "scoreboard players reset @s[score_HelloWorld_min=1] HelloWorld",

  "scoreboard players tag @s[tag=!HelloWorld] add HelloWorld"

  ]}}

  这是一个标准的adv命令系统格式,你需要改的地方无非就是trigger还有revoke后面的adv,余下全是指令。比起cb链来讲,adv命令系统是要强不少的,但是这也并不是说adv系统就没有缺点。比如cb可以支持Conditional(条件激活),adv的话并不直接支持,只能通过小技巧来实现相应的功能罢了。即便如此,adv系统的优点也着实令人感动。另外,请注意,每一条指令都是用""括住的,所以里面所有的内容都需要进行转义!不知道转义为何物的朋友,可以各种百度谷歌查一下,这里就不多讲了。

  顺带一提,adv系统直接支持样式代码§

  嗯……你们懂的。颜色黑科技什么的在这个面前根本不值一提。

  adv系统与cb系统的对比

  如果你看上面的看得有点迷糊,那我们来简单讲讲adv系统和cb系统的对比吧

  以前用cb系统主要是这样子用,高频模块用rcb起头,后面跟cb链,非高频模块用icb起头,后面跟cb链,面对多人的情况,高频模块需要充分利用@a和各种选择器参数进行筛选。

  adv系统,全局高频模块用arbitrary_player_tick,面对完全独立的多人情况,直接用tick+@s,非高频模块直接用impossible,在必要的时候通过advancement grant @s only #ADV名称 这样的方法去调用。

  并且,你需要注意的是,传统的icb模块在调用的时候,会在下一个游戏刻触发,而adv系统通过grant调用子模块,是当前游戏刻瞬间触发的,这一优点让adv系统变得无可比拟。

  PS:在此非常感谢我的世界玩家acordome的分享。

  原文地址:http://www.mcbbs.net/forum.php?mod=viewthread&tid=691100

  以上就是17w18B快照Advancement命令系统 当命令脱离命令方块。更多精彩尽在游戏园我的世界专区。

  相关攻略推荐:

  我的世界1.12第11个预览版下载 最新快照17w18b下载

  我的世界1.12第10个预览版17w18a发布 快照17w18a下载

  我的世界最新快照 新增重置命令

  我的世界新快照17w16a对ccb的重要优化

分享到:更多

游戏信息

我的世界
我的世界类型:休闲娱乐平台:PC,iOS,安卓电脑版下载
  • 游戏大礼包
  • 手游开测表