购买正版 电脑 · 游戏周边

单机游戏 > 我的世界OL专区 > 我的世界OL攻略 > 我的世界17w18B快照Advancement命令系统

我的世界17w18B快照Advancement命令系统

2017-05-13 来源:游戏园 作者:ahdy

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

  在最近的更新里,MOJANG新增了两个重要的触发器,分别是 tick 和 arbitrary_player_tick n,通过这两者触发的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 n","color":"yellow"},{"selector":"@s"},{"text":"! Welcome to nMinecraft!","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 nrevoke @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 n","color":"yellow"},{"selector":"@s"},{"text":"! Welcome to nMinecraft!","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 ngrant @s only #ADV名称 这样的方法去调用。

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

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

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


我的世界OL 扫雷难度 3D画面

Minecraft Online
  • 类型其他游戏
  • 发售2016年09月24日
  • 语言中文
  • 平台PC
  • 研发Mojang
  • 运营网易
《我的世界》是由Mojang研发的一款高自由度像素风格的沙盒游戏。

暂无促销活动

火爆开服更多+

thisLineHeights20

新闻更多+

thisLineHeights20

攻略更多+