我的世调用世界1.12版本中,函数与进度系统的界函教程出现,让命令脱离命令方块——这句曾经说过的数系玩笑般的预言,正式成为可能。模块命令下面99小编就给大家带来我的攻略世界函数系统的模块调用攻略。
函数系统的模块调用
对于一个完整的命令系统而言,模块一般可以分为三类:对执行顺序先后有要求的函数高频模块、对执行顺序先后无要求的系统高频模块、非高频模块。世调用在函数系统中,界函教程我们同样可以将模块分成这三类。数系为了方便后续讲解。模块命令我们作这样的攻略设定:
将 system:_main设为 glf ,并称之为主进程或者主时钟
对于上面讲到的版本三类模块,我们通过三种不同的函数方式去调用。
对执行顺序先后有要求的高频模块,在主进程中按照需要的顺序排列好来调用。对执行顺序先后没有要求的高频模块,在主进程中可以比较随意放置位置,但是一般不会考虑优先执行。特别地,如果这个模块是针对每一个玩家独立执行的,可以使用进度系统中的"tick"触发器来调用,而不需要放在主进程中。仅在特定情况下触发的非高频模块,在主进程中调用,但是辅以execute、scoreboard和选择器参数去控制其在合适的时候被调用,这里的选择器,包括了在1.12 pre-4中新增的if/unless的部分。
非高频模块在特定条件下激活,也在很大程度上减少了模块中大量重复出现execute的现象,并完全杜绝了超长的Conditional链,因为function中并不直接支持Conditional。不直接支持,说明可以间接支持,对吧。我们来看一个例子。
假设有红蓝两队,在开始前考虑到互殴问题不进行分队,而是采用挂tag的方式。
红队以tag=redTeam为标记,蓝队则以tag=blueTeam为标记,准备观战的玩家以tag=specTeam为标记
当玩家站在相应区域(红蓝两队的所有玩家还需要选择了职业)添加Ready的标记,视为准备就绪。
如果玩家不在相应区域时就移除Ready的标记。
选择了职业的玩家,其记分板项selectClass数值大于等于1
全部玩家准备就绪后,游戏进入倒计时,倒计时结束时游戏开始
倒计时未结束,有玩家脱离准备就绪的状态,则倒计时中断
条件比较多,我们先来看看怎么写这个模块,再进行分析。在这里,我们准备了一个名为gameStat的aec实体作为标记,所有游戏进程会以tag或者score的形式挂载到该实体上。请看指令部分
execute @p[tag=redTeam,score_selectClass_min=1] ~ ~ ~ execute @p[tag=blueTeam,score_selectClass_min=1] ~ ~ ~ scoreboard players tag @e[type=area_effect_cloud,name=gameStat,tag=notGaming] add allReady
execute @p[tag=!Ready,m=2] ~ ~ ~ scoreboard players tag @e[name=gameStat,type=area_effect_cloud,tag=notGaming] remove allReady
execute @p[tag=!Ready,m=2] ~ ~ ~ execute @e[name=gameStat,type=area_effect_cloud,tag=notGaming] ~ ~ ~ execute @s[tag=!allReady,score_waitTime_min=1] ~ ~ ~ title @a clear
execute @p[tag=!Ready,m=2] ~ ~ ~ execute @e[name=gameStat,type=area_effect_cloud,tag=notGaming] ~ ~ ~ execute @s[tag=!allReady,score_waitTime_min=1] ~ ~ ~ title @a reset
execute @p[tag=!Ready,m=2] ~ ~ ~ execute @e[name=gameStat,type=area_effect_cloud,tag=notGaming] ~ ~ ~ scoreboard players reset @s[tag=!allReady] waitTime
scoreboard players add @e[name=gameStat,tag=allReady] waitTime 1
execute @e[name=gameStat,score_waitTime=1,score_waitTime_min=1] ~ ~ ~ title @a times 10 140 10
execute @e[name=gameStat,score_waitTime=1,score_waitTime_min=1] ~ ~ ~ title @a subtitle [{ "color":"aqua","text":"请玩家站在准备区域不要离开"}]
execute @e[name=gameStat,score_waitTime=1,score_waitTime_min=1] ~ ~ ~ title @a title [{ "color":"yellow","text":"游戏即将开始"}]
execute @e[name=gameStat,score_waitTime=40,score_waitTime_min=40] ~ ~ ~ title @a subtitle [{ "color":"aqua","text":"3"}]
execute @e[name=gameStat,score_waitTime=40,score_waitTime_min=40] ~ ~ ~ execute @a ~ ~ ~ playsound block.note.pling voice @p ~ ~ ~ 1 0
execute @e[name=gameStat,score_waitTime=60,score_waitTime_min=60] ~ ~ ~ title @a subtitle [{ "color":"aqua","text":"2"}]
execute @e[name=gameStat,score_waitTime=60,score_waitTime_min=60] ~ ~ ~ execute @a ~ ~ ~ playsound block.note.pling voice @p ~ ~ ~ 1 0
execute @e[name=gameStat,score_waitTime=80,score_waitTime_min=80] ~ ~ ~ title @a subtitle [{ "color":"aqua","text":"1"}]
execute @e[name=gameStat,score_waitTime=80,score_waitTime_min=80] ~ ~ ~ execute @a ~ ~ ~ playsound block.note.pling voice @p ~ ~ ~ 1 0
execute @e[name=gameStat,score_waitTime_min=100] ~ ~ ~ title @a times 10 30 10
execute @e[name=gameStat,score_waitTime_min=100] ~ ~ ~ title @a title [{ "color":"gold","text":"游戏开始"}]
scoreboard players set @e[name=gameStat,type=area_effect_cloud,score_waitTime_min=100] gameStat 1
scoreboard players reset @e[name=gameStat,score_gameStat_min=1,score_gameStat=1] waitTime
scoreboard players tag @e[name=gameStat,score_gameStat_min=1,score_gameStat=1] remove allReady
execute @e[type=area_effect_cloud,name=gameStat,score_gameStat_min=1,score_gameStat=1] ~ ~ ~ function system:StartGame
接下来我们来慢慢分析。
首先是开始的条件。有红蓝两队,那么这两队都肯定需要有人,才能够开始,考虑到同一选择器中不能重复使用tag的参数,我们保留了区分队伍的参数,而不是区分是否准备就绪的参数。因此,第一条指令的意思是,当存在选了职业并选红队的玩家以及选了职业并选蓝队的玩家,我们给中心实体加上allReady这个标记,以表明可能满足开始条件。
至于满足条件吗?如果有未准备就绪的玩家,就说明不满足,那我们就让一个没有准备就绪的玩家来去掉allReady这个标记好了。
对于3~5行,我们放后面点讲。先看后面。满足开始条件以后,我们会给中心实体加分(使用waitTime这个记分板项),在第一刻加分后出现提示文字提示准备开始,然后进入循环计时,最后计时满了,调用system:startgame这个函数来开始游戏(这里不是例子的部分,不作说明)。
那么回过头来看3~5行,这里明显是打断的部分。打断,就是要清掉提示文字、重置计时器。如果此时都还没有进行过加分,那么我们就不必进行那三条指令,因此可以看到中间有个选择器里有score_waitTime_min=1的参数加以限制。
重点来了,我们看到这3条指令前面相当长一串execute是重复的。因为在以前用cb写的时候,这里使用了Conditional,而现在函数不直接支持Conditional,所以用了一大堆execute,但是这里我们可以稍作修改,对不对?请看下面
execute @p[tag=redTeam,score_selectClass_min=1] ~ ~ ~ execute @p[tag=blueTeam,score_selectClass_min=1] ~ ~ ~ scoreboard players tag @e[type=area_effect_cloud,name=gameStat,tag=notGaming] add allReady
execute @p[tag=!Ready,m=2] ~ ~ ~ scoreboard players tag @e[name=gameStat,type=area_effect_cloud,tag=notGaming] remove allReady
execute @p[tag=!Ready,m=2] ~ ~ ~ execute @e[name=gameStat,type=area_effect_cloud,tag=notGaming] ~ ~ ~ execute @s[tag=!allReady,score_waitTime_min=1] ~ ~ ~ function system:cond_breakstartcount
scoreboard players add @e[name=gameStat,tag=allReady] waitTime 1
execute @e[name=gameStat,score_waitTime=1,score_waitTime_min=1] ~ ~ ~ title @a times 10 140 10
execute @e[name=gameStat,score_waitTime=1,score_waitTime_min=1] ~ ~ ~ title @a subtitle [{ "color":"aqua","text":"请玩家站在准备区域不要离开"}]
execute @e[name=gameStat,score_waitTime=1,score_waitTime_min=1] ~ ~ ~ title @a title [{ "color":"yellow","text":"游戏即将开始"}]
execute @e[name=gameStat,score_waitTime=40,score_waitTime_min=40] ~ ~ ~ title @a subtitle [{ "color":"aqua","text":"3"}]
execute @e[name=gameStat,score_waitTime=40,score_waitTime_min=40] ~ ~ ~ execute @a ~ ~ ~ playsound block.note.pling voice @p ~ ~ ~ 1 0
execute @e[name=gameStat,score_waitTime=60,score_waitTime_min=60] ~ ~ ~ title @a subtitle [{ "color":"aqua","text":"2"}]
execute @e[name=gameStat,score_waitTime=60,score_waitTime_min=60] ~ ~ ~ execute @a ~ ~ ~ playsound block.note.pling voice @p ~ ~ ~ 1 0
execute @e[name=gameStat,score_waitTime=80,score_waitTime_min=80] ~ ~ ~ title @a subtitle [{ "color":"aqua","text":"1"}]
execute @e[name=gameStat,score_waitTime=80,score_waitTime_min=80] ~ ~ ~ execute @a ~ ~ ~ playsound block.note.pling voice @p ~ ~ ~ 1 0
execute @e[name=gameStat,score_waitTime_min=100] ~ ~ ~ title @a times 10 30 10
execute @e[name=gameStat,score_waitTime_min=100] ~ ~ ~ title @a title [{ "color":"gold","text":"游戏开始"}]
scoreboard players set @e[name=gameStat,type=area_effect_cloud,score_waitTime_min=100] gameStat 1
scoreboard players reset @e[name=gameStat,score_gameStat_min=1,score_gameStat=1] waitTime
scoreboard players tag @e[name=gameStat,score_gameStat_min=1,score_gameStat=1] remove allReady
execute @e[type=area_effect_cloud,name=gameStat,score_gameStat_min=1,score_gameStat=1] ~ ~ ~ function system:StartGame
system:cond_breakstartcount.mcfunction
title @a clear
title @a reset
scoreboard players reset @s waitTime
虽然这个独立出来的子模块只有3条指令,但是如果分离出来的是30条而不是3条呢?能够节省多少功夫想必不需要解释了吧?
以上是关于函数系统模块调用的部分,当中有提到使用进度系统来调用部分独立模块,我们接下来来可以看看函数系统与进度系统联动>>>。
本书首发来自成都索客科技有限公司,第一时间看正版内容!
旗滨集团:截至9月末 全国光伏玻璃在产生产线日熔量合计约10.5万吨,企业新闻 日前,有投资者在投资者互动平台提问旗滨集团:我国先阶段光伏产能已经超出全球需求,公司光伏产品应收账款节节攀升,贵公司对光伏产能严重过剩、应收账款高增有什么应对措施?旗滨集团表示,截至9月末,全国光伏玻
仙侠动做游戏《剑魄》开启试玩 9月23日正式上线 由游戏建制人“离忧师少西席”小我建制的第三人称动做游戏《剑魄》,即将于9月23日正在steam、圆块游戏、Wegame仄台正式出售!尾收扣头仅需45元,届时Steam仄台将结束EA阶段正式转正,已采办
游仄易远晨播报:PS+9月会员免费游戏公布 《往月球》建制人新做《影子工厂》出售日肯定 各位朋友早上好,来日诰日是9月2日礼拜四,我是您们的好朋友Siwondark。歇息老是如此少久,并且我的工做周借是两天早班做为开端,便只能是拾个“来日诰日也是元气谦谦的一天.jpg”的神采包给本身了。
2021受疫情影响陕西大年夜剧院演出挨消或延期12月16日至19日 2021年陕西大年夜剧院果为遭到了疫情的影响,12月16日至12月19日正在陕西大年夜剧院战西安音乐厅统统的演出皆将挨消或是延期,如果已购票,延期演出战挨消演出的措置体例详睹下文。1、延期演出措置体例
霍尼韦尔(中国)有限公司余锋总裁一行赴山东商业职业技术学院考察交流 大众网记者 司心鹏 报道11月21日上午,霍尼韦尔中国)有限公司中国区总裁余锋一行6人赴山东商业职业技术学院考察交流。学校党委书记邓迎迎,党委委员、副院长王家敏与来宾进行了座谈交流。学校党委办公室、院
浙江跨大年夜那里的夜景最好 固然远日那浙江的疫景象势挺宽峻的,但是到了过年的时候必然会好的。也将远到过年了,浙江的夜景是出了名的皆雅,bai ?日战早晨是两个没有一样的脸孔里孔,要讲此次跨大年夜浙江该往那里玩?那里的夜景是最皆雅
1 山东医学高等专科学校开展119消防安全主题活动 作者:
2字
大众网记者 司心鹏 报道11月8日,在第33个“全国消防日”到来之际,山东医学高等专科学校开展119消防安全主题宣传活动。今年11月是第八个“全国消防宣传月”,主题为“全民消防、生命至上”。活动以宣传
1 游理有据:李家谦门惨逝世 是鬼怪做怪借是民气险恶 查明本相支您肆意3A大年夜做 作者:
3864字
上周的“豪杰止动”批评失真给我整愚了,很多人QQ公疑我讲没有过瘾,那此次杀个为富没有仁的本钱家祭天了,上里开启本周的推理搏斗)之旅。上期故事复本及获奖用户案件复本与获奖用户>>别的,悲迎大
1 《灭亡空间:重制版》新动静要比及去岁 将要齐力开辟游戏 作者:
45174字
《灭亡空间:重制版》开辟组EA Motive的社区经理Caden House正在Reddit上表示,接下去一段时候里他们们需供用心开辟游戏,下一次公布动静将正在去岁。“我们掀示的统统皆正在停止中,那意
1 2021西安中原文旅陆天公园景区疫情防控12月 作者:
83534字
中原文旅陆天公园游乐设施比较齐备,陆天逝世物也很多很歉富,开适一家人带着孩子一起玩耍的陆天馆,远期西安受新一轮的疫情影响,景区公布了疫情防控的最新告诉布告,详情睹下文。闭于景区疫情防控的最新告诉布告为
1 喜剧电影《好运来》曝预告 白客乔杉合伙助人圆梦 作者:
82235字
1905电影网讯 近日,喜剧电影《好运来》发布“好运相伴”版预告及“喜从天降”版海报。影片讲述了一家专门帮人实现梦想的好运公司,在姚客白客饰)与贾凌黄才伦饰)的带领下,帮助三位被生活所困的有梦之人完成
1 哲理好文短句哲教文章50字2024年5月28日 作者:
819字
阳光讯记者 刘杰 通疑员 于娜)为降真坐德树人根柢任务,促进中小黉舍思政课课堂讲授窜改创新,催促黉舍思政教诲量量稳步汲引阳光讯记者 刘杰 通疑员 于娜)为降真坐德树人根柢任务,促进中小黉舍思政课课堂讲
1 《eFootball 2022》海量内容公布!后绝将推出大年夜更新与足游版 作者:
177字
Konami来日诰日公布对应PlayStation5、PlayStation4、Xbox Series X|S、Xbox One、Windows 10与Steam仄台的《eFootball 2022》
1 祸州饱楼区那里的温泉比较好 作者:
58字
祸建祸州一背以去皆被誉为泡正在温泉里的皆会,望文逝世义果为祸州没有但能泡温泉的处所多,并且本天人少年也喜好泡温泉,环境圆里的也是很好,每到夏季周边天区的人皆会往本天泡温泉。而上里要讲的便是饱楼区那里的
1 优衣库 x JW Anderson 2024 秋冬联名系列发布 作者:
69字
潮牌汇 / 潮流资讯 / 优衣库 x JW Anderson 2024 秋冬联名系列发布2024年10月03日浏览:1330 日前,UNIQLO 与设计师 JW And
1 《最纪止 RELOAD 作者:
283字
远日,TV动绘《最纪止 RELOAD -ZEROIN-》正式预报公开,将于2022年1月开播。最新预报:gsVideo("劣酷", "https://v.youku.com/v_show/id_XNT