心灵终结地图编辑器萌新教程第7篇:触发的禁止和允许(一)
首先对上一篇的内容进行一点补充。上一篇中讲了如何在地图上刷兵,涉及两个触发结果:“80:援军(作战小队)【在路径点】”和“107:超时空传送援军”。这两个结果相似,都需要两个参数:作战小队和路径点,就是“哪一支小队从哪里刷出来”。
其实还有一个结果可以实现刷兵:结果7:援军(作战小队),与结果80的区别是这个结果的参数没有“路径点”,那么刷兵的位置就取决于“作战小队”里面的“路径点”选项了。注意上一篇中说过当使用条件80或107的时候,“作战小队”当中的“路径点”这一项是没用的,不过在使用结果7的时候就有用了。除此之外,结果7和80完全相同,选择自己习惯的一个就好。

这一篇本来想再讲一些关于“作战小队”的其他内容,例如如何用地图上已有的单位建立作战小队,但由于和作战小队有关的内容比较复杂,所以放到后面(等我完全搞明白了再说)。本篇讲触发的禁止和允许。这也是每一个战役都会大量使用的东西。

什么是触发的禁止和允许
我们可能会遇到这样的情况:
触发1:条件为A,结果为P
触发2:条件为B,结果为Q
看上去只是两个普通的触发:当满足条件A时,执行结果P;当满足条件B时,执行结果Q.
然而,我们可能还需要对这两个触发提出额外的要求,一般可能会有以下两类:
情形1:触发1的发生是触发2发生的必要条件。即:只有当触发1发生之后,才会“激活”触发2;当触发1没有发生(也就是条件A没有被满足)时,即使满足了条件B,也不会发生结果Q.
情形2:触发1不发生是触发2发生的必要条件。即:只有当触发1还没有发生时,触发2才有效。一旦触发1发生(也就是条件A被满足),即使满足了条件B,也不会发生结果Q.
一个触发有两个状态。如果满足了触发的条件就可以发生该触发的结果,就说该触发处于“允许”状态;如果即使满足了条件也不能触发结果,就说该触发处于“禁止”状态。我们之前举的所有例子中的触发无特别说明,都是处于允许状态的。在触发编辑器里,可以通过勾选或取消“触发选项”下面的“禁止”标记来使一个触发初始时处于“禁止”或“允许”状态。另外还可以通过触发“结果53:允许触发”和“结果54:禁止触发”来在战役进行中改变某一触发(可以是该触发本身,也可以是其他触发)的状态。


为什么需要有触发的禁止和允许
在上面举的两个触发的例子中,我们就需要适当地设置触发的初始状态,以及在触发的结果中加上结果53或54来改变触发的状态。
有人可能会说:不用触发的禁止和允许,只改变两个触发的条件,也可以达到相同的效果:
情形1:将两个触发改为:
触发1:条件为A,结果为P
触发2:条件0为A,条件1为B(即A和B同时满足时触发结果),结果为Q
情形2:将两个触发改为:
触发1:条件为A,结果为P
触发2:条件0为“非A”(即A的相反条件),条件1为B,结果为Q
这样做会有以下几个问题:
1、有时在战役中可能会出现“触发1允许触发2,触发2允许触发3……”这样一条很长的链,如果都改成上面这样的话非常麻烦;
2、情形2中的条件“非A”一般来说是找不到的,在所有条件中能找到恰好完全对立的两个的只有类似于“科技类型存在”和“科技类型不存在”这样的条件,像“流逝时间”“关联对象被摧毁”这样的条件是没有相反条件的;
3、这可能也是最难理解的一点:在很多情况下“触发1允许触发2”和“将触发1的条件添加到触发2中”两者并不是等价的,也就是说,将“允许/禁止触发”替换为“改变触发的条件”并不能达到预期的效果。这一点我会在下一篇中详细阐释。
4、当触发1和2的类型不同时(比如触发1为单次触发,触发2为重复触发),有时必须使用触发的允许和禁止。
如何使用触发的禁止和允许
首先,建立好一个触发后,需要给触发设置一个初始(即战役开始时)的状态。新建立的触发默认初始为“允许”状态,也就是没有勾选“触发选项”下的“禁止”标记。如果需要让该触发初始处于“禁止”状态,则勾选“禁止”即可。
在一个触发的结果中,可以使用结果“53:允许触发”和“54:禁止触发”来改变该触发本身或其他触发的状态。一般如果涉及到该触发本身,只可能会用到“禁止触发”。有人可能会疑惑:为什么会遇到“一个触发的结果发生后要改变自己的状态”这样的情况,见后面的例3的触发3,4,5.
结果53和结果54都有一个参数,参数为一个触发,也就是你需要改变哪一个触发的状态。在列表中选择相应的触发即可,一般来说,越晚建立的触发越在列表的后面(注意这个参数的列表不是按触发名称的首字母或音序排列的)。

实例——触发的禁止和允许与“流逝时间”类条件配合使用
“流逝时间”类条件有2个:“条件13:流逝时间”和“条件51:随机延时”,参数均为一个数字,单位为秒。其中“随机延时”表示随机经过所填数字的50%到150%的时间后触发结果。
在举例之前,先说一个当“允许触发”与“流逝时间”联合使用时出现的问题。
现有触发A:初始状态为“禁止”,条件为“流逝时间20秒”,结果为“19:播放音效,参数WarningAlarm”,即响警报。那么当战役开始的时候,是否会开始对该触发的条件进行计时?说得更具体一些:
问题1:如果有一个触发B:初始状态为“允许”,条件为“流逝时间10秒”,结果为“允许触发A”,那么会是以下哪种效果?
(1)游戏开始20秒后响警报。(游戏开始时便对触发A开始计时,计时到20秒,此时触发A已经被允许,因此响警报)
(2)游戏开始30秒后响警报。(游戏开始时由于触发A被禁止,所以不对A进行计时,10秒后,A被允许,开始计时,又经过20秒后响警报)
问题2:如果有一个触发B:初始状态为“允许”,条件为“流逝时间30秒”,结果为“允许触发A”,那么会是以下哪种效果?
(1)游戏开始后始终不响警报。(游戏开始时便对触发A开始计时,计时到20秒,此时触发A仍处于禁止状态,因此不响警报;等到再经过10秒触发A被允许时,已经过了响警报的时间,因此之后始终不响警报)
(2)游戏开始30秒后响警报。(游戏开始时便对触发A开始计时,计时到20秒,不响警报,但是触发条件已经满足,一旦该触发被允许就立即触发结果。
(3)游戏开始50秒后响警报。(与问题1的(2)类似)
问题1的答案为(2),问题2的答案为(3)。
也就是说,只有当触发处于“允许”状态下时,才会开始对“流逝时间”类条件进行计时。
问题3:现在设置以下三个触发:
触发A:初始状态为“允许”,触发类型为“2:重复触发”。条件:流逝时间20秒。结果:音效WarningAlarm;
触发B:初始状态为“允许”,单次触发,条件为流逝时间50秒,结果为“禁止触发A”;
触发C:初始状态为“允许”,单次触发,条件为流逝时间55秒,结果为“允许触发A”。
那么会在游戏开始多长时间后响警报?
答案:20秒,40秒,75秒,95秒,115秒……
若在为“流逝时间”条件计时的过程中触发被禁止,则计时中断,当触发再一次被允许时计时重新开始。
例1:任务延时结束(接第3篇:触发的基本原理后面的例子)
在战役中,我们经常看到当任务完成或失败后,总是会等几秒钟才会显示“任务完成”或“任务失败”的图片,实现这一效果就要用到“允许触发”的结果。
例如在“潘多拉魔盒”一关中,当雷泽诺夫阵亡后,会延时6秒任务失败。可以使用以下触发:
触发1:[LOSE]任务失败
触发所属方:中国(玩家所属方)
触发类型:0(单次触发)
初始状态:禁止
条件:13:流逝时间6秒
结果:2:失败者是……,参数选Chinese
触发2:[LOSE]雷阵诺夫阵亡
触发所属方:中国
触发类型:0
初始状态:允许
条件:82:所属方不存在科技类型
参数:数值为0,科技类型填REZNOV (,
结合触发所属方,该条件表示“玩家所属方拥有的雷泽诺夫数量小于等于0”
结果0:19:播放音效,参数填WarningAlarm
结果1:21:播放语音,参数填EVA_CriticalUnitLost
结果2:11:文本触发事件,会出现文本“雷泽诺夫阵亡,任务失败”的文本
结果3:46:禁止玩家输入
结果4:20:播放音乐,参数填Nothing,即背景音乐停止
结果5:53:允许触发,触发填“触发1:[LOSE]任务失败”
这样的效果就是在雷泽诺夫阵亡后会给出警报信息,然后6秒后显示“任务失败”。
注:实际上由于这一关涉及场景变换,该触发的条件比这里所展示的要更复杂一些。
例2:循环刷兵的允许与禁止(接第6篇例1)
在“界碑”一关中,敌军会在开局一段时间后,每过相同的一段时间刷出两艘基洛夫空艇,若干次后停止。比如,我们现在要在开局15分钟后刷出第一波基洛夫,此后每7分钟刷一次,共6次后停止。则可以写以下三个触发:
触发1:基洛夫
触发类型:2(重复触发)
初始状态:禁止
条件:流逝时间420秒
结果:与刷兵相关,详见第6篇例1
触发2:基洛夫允许触发
触发类型:0
初始状态:允许
条件:流逝时间480秒(思考:为什么不是900秒?)
结果0:允许触发1
结果1:允许触发3
触发3:基洛夫禁止触发
触发类型:0
初始状态:禁止
条件:流逝时间2600秒(可以是42到49分钟之间的任何一个数)
结果:禁止触发1
这样,在游戏开始8分钟后,触发2执行结果,触发1和3被允许,此后每过7分钟之后刷一波基洛夫,共6波42分钟,2520秒后,距离刷第7波基洛夫还有420秒,但80秒后触发3执行结果,又将触发1禁止,所以不会再刷基洛夫。
注:
(1)我们也可以删去触发2中的结果1,然后将触发3条件中的流逝时间改为50到57分钟之间的任何一个数,并把触发3的初始状态改为“允许”,与之前效果完全相同。不过,在之前的方法中,如果我们需要修改第一波基洛夫的到达时间,只需要改触发2条件中的数字就可以了;但如果用修改后的方法,则需要同时改触发2和触发3条件中的数字,比较麻烦。
(2)有时候,我们可能会遇到这种情况:“触发1”的结果有“允许触发2”,“触发2”的结果有“禁止触发1”,这可能会让人疑惑在写触发时先写哪个。实际上,你可以先建立两个触发,分别命名为“触发1”和“触发2”,只要被建立,即使没有任何条件和结果,都会出现在“允许触发”和“禁止触发”的参数列表中。然后再在“触发1”的结果中添加“允许触发2”,在“触发2”的结果中添加“禁止触发1”。
例3:随机刷兵(该触发比较复杂,对于地编萌新来说可能需要反复仔细分析)
在关卡“星辰大海(下)”中,敌军中的US阵营会在游戏开始后11分钟在固定的位置刷出一支固定的超时空小队,此后每隔7分钟随机在三个位置中的一个刷出一支相应的超时空小队,分别为:192号路径点刷出6个精英斗牛犬,194号路径点刷出3个艾布拉姆斯,或195号路径点刷出2个雅典娜炮。如何实现这样的“随机三选一”呢?
在触发编辑器所有的条件和结果中,能实现“随机”效果的并不多,最简单的方法就是“随机延时”了。具体实现如下:
触发1:[Team]超时空1 US
初始状态:允许
触发类型:0(一次)
条件:流逝时间660秒
结果0到4与第一次超时空刷兵有关,包括援军、小地图事件、警报、文本事件、超时空动画。
结果5:允许触发2
触发2:[Team]超时空2 US
初始状态:禁止
触发类型:2(重复)
条件:流逝时间420秒
结果0:允许触发3
结果1:允许触发4
结果2:允许触发5
触发3:[Team]超时空US 2.1
初始状态:禁止
触发类型:2(重复)
条件:随机延时5秒
结果0到4与在路径点192刷兵相关
结果5:禁止触发3
结果6:禁止触发4
结果7:禁止触发5
触发4:[Team]超时空US 2.2
初始状态:禁止
触发类型:2(重复)
条件:随机延时5秒
结果0到4与在路径点194刷兵相关
结果5:禁止触发3
结果6:禁止触发4
结果7:禁止触发5
触发5:[Team]超时空US 2.3
初始状态:禁止
触发类型:2(重复)
条件:随机延时5秒
结果0到4与在路径点195刷兵相关
结果5:禁止触发3
结果6:禁止触发4
结果7:禁止触发5
我们仔细分析一下这些触发的效果:游戏开始11分钟后,触发1执行结果,第一批超时空敌军来袭,同时触发2被允许,开始对触发2中的条件“流逝7分钟”的计时。游戏开始18分钟后,触发2执行结果,触发3,4,5同时被允许,同时由于触发2为重复触发,再一次开始对触发2进行计时。而触发3,4,5的条件均为“随机延时5秒”,它们当中一定有且只有一个是最先发生的,一旦其中任何一个发生,其结果中都包含“禁止触发3,4,5”的结果,即禁止自身触发和禁止其他两个选项触发。因此在这一轮超时空当中,三个小队中只会有一个被刷出,取决于触发3,4,5谁先发生。此后这三个触发在这一轮都不会再发生了,直到又经过7分钟触发2再次执行结果,又将它们三个触发变为允许状态。
注意:在这个例子中触发3,4,5的类型必须设置为“重复”,否则如果设置为类型0(单次),当触发3的结果被执行过一次后,即使再次被允许触发,也不会再执行结果了。
本篇讲了触发的禁止和允许,篇幅很长,但还没有讲完。下一篇我们会继续讲当“触发的禁止和允许”与其他条件搭配使用时会出现的一些问题,并举出更多的例子。