引言

本教程开始讲解SAGE的触发制作技巧,为了方便学习和后续的开发实战,建议先下载一个FK3D,即《反恐联盟3D – 英雄传奇》作为开发环境,下载及安装说明的地址在下面:

http://www.fk3d.cn:50001/WebPage/FK3DInstallGuide.htm

 

为什么不推荐绝命时刻1.04原版?主要是因为原版安装包大多不自带月光宝盒地图编辑器,读者还需要从别的途径自行获取,而即使拿到了编辑器,触发编辑这一块还没有经过任何汉化,一大片密密麻麻全是英文,一定程度上增加了学习难度,因此,我强烈推荐使用高度集成并完全汉化过的FK3D来作为开发环境,如下图所示:

试问这样的感觉是不是要亲切得多?那就让我迅速开始吧!

启动地图编辑器,在菜单栏上找到“编辑”——“触发编辑”,打开触发编辑主窗口,如下图所示:

打开后的窗口如下图,为了便于排版,我特意裁剪了画面尺寸,只保留重点:

这个窗口大致分为4个部分,左上侧是列表树,用来存放并陈列已制作的触发,它会首先用文件夹的方式陈列出这张地图上所有的参战方,每个参战方一个文件夹,文件夹里面才是触发条目。其中neutral是地图默认自带的系统中立方,目前还没有更多的参战方,因为我们没有去添加,这里暂时先不管它,只需要记住一个要点——SAGE的参战方文件夹里还可以再创建很多个子文件夹,子文件夹通常用于将相关的多条触发归类存放到一起,方便搜索,这个后面会讲到。

右上侧提供了一系列按钮,我们需要关注的则是“新文件夹”、“新建触发”、“编辑”、“复制触发”、“删除”这5个常用按钮

左下侧和右下侧的文本框是触发语句预览,由于目前暂时没有任何触发,所以显示为空,如果做好了至少一条触发,当我们用鼠标在触发树中选中一条触发时,语句预览框就会将这条触发的逻辑语句显示出来,就像这样:

这是我随手写的一条触发,也许有人开始好奇了,这段语句是啥意思,能产生什么效果,可否解释一下?没关系,我们马上开始下面的正题。

在这里先多费几句不必要的口舌,请问你学过C语言吗?没有?那么JAVA呢?也没有?那BASIC总学过吧?啥!你全都没学过?也没关系,用中文来解释就行了。上面这段代码的关键是“IF…THEN…ELSE”这几个标了星号的关键字,它们的含义分别是“如果”、“则”、“否则”。是不是有点感觉了?没错,这就是逻辑思维——如果<达到了X条件>,则<发生A结果>,否则<发生B结果>,就这么简单!

 

触发初体验

在触发编辑窗口的右侧找到按钮,我们一起来创建这条触发,看看触发编辑到底有什么玄机,如下图:

弹出的编辑窗口一共有4个选项卡,分别是属性、条件、正结果、反结果

属性卡上有很多勾选框,决定了触发的一些重要属性:

*         触发名称:强烈建议使用中文来为触发命名,字数不超过20为妙,因为首先你需要让自己看得懂,否则三个月以前写过的触发,三个月以后再打开,就完全不知道自己当初写的是啥了。此外SAGE还赋予了它一个更重要的价值——作为每个触发的关联标志,因为触发间的相互关联关系都是通过名称来建立的,虽然月光宝盒不要求触发名称的唯一性约束,但在实战中我们要尽量避免触发同名,因为同名触发会导致关联紊乱,以至于你并不知道你到底关联的是哪一条,从而产生不确定的结果,除非,你非常有信心地确定这条触发一定不会与其他触发发生任何关联。

*         子程序:这个名字起得很囧,事实上我也不知道有没有更合适的翻译。它的本意是,勾上之后,这条触发就只能用于小队的动作脚本,只有当调用它的小队在地图上存在了,这条触发才会起作用。这个暂且不深究,后面会详细讲解

*         初始激活:勾上表示这条触发为活跃状态,反之为休眠状态。活跃的触发会被游戏内核反复试探条件是否成立,而休眠的触发则会被游戏内核略过不看,就好像你压根没有创建过它一样。触发的状态可以随意改变,不光是在创建的时候设置是否勾选,还可以在游戏过程中,动态地通过其他手段来改变,这个也会在后面详细讲解

*         自动失效:勾上表示这条触发一旦被执行了正结果或反结果,就会自动变为休眠状态,以至于游戏内核将不会二次执行,除非你用动态手段再次将它激活。通常用于实现一些“只能发生一次”的事件效果

*         适用难度:决定这条触发只在那几个难度级别下被游戏内核检测,例如你可以创建一条AI出兵触发,只勾选疯狂难度适用,那么就只在疯狂难度下AI才会出兵,简单和中等都不会,这就产生了难度差异化

*         检测重复性:决定这条触发被游戏内核反复检测的间隔时间,默认为每帧,大概相当于每隔0.03秒就会检测一次,0.03秒对CPU来说能干很多事,但也不要滥用帧检测,因为CPU还有很多其他事要做,如果一张地图中活跃状态的触发达到几百个之多,而每个的条件又都是很耗时的那种运算,那么即使再强的CPU也会累垮,因此只要不是对时间间隔要求极其严格的触发,建议都用秒检测。一般最常用的秒值是1-3秒,能得到较好的性价比,而特殊情况下,还可以设置更长的间隔时间,例如定时刷兵,每隔180秒才刷一波,这个就具体问题具体分析了。或许有人要问,万一我要设置半秒怎么办?对不起,秒检测的最小值不得小于1,小于1的按帧检测处理,也就是说,即使你强行输入0.5秒,保存之后再打开,你会发现它自动被篡改成了帧检测。

 

接下来再切换到条件选项卡:

双击那个True进行条件编辑:

原来True的中文翻译是“恒真”。所谓“恒真”即“恒定成立”,也就是说,这条触发不需要游戏内核做任何检测运算,都一定会成立,因此其正结果一定会被游戏执行,与此同时,其反结果就一定不会被游戏执行。

细心的观众也许会发现,编辑器还提供了一个“恒假”的条件,与“恒真”相对立,即“恒定不成立”,也就是说,这条触发不需要任何检测运算,都一定不成立,因此其正结果一定不会被游戏执行,而反结果则一定会被游戏执行。具体效果就不在这里细说,各位可以自行感受

 

接下来该正结果选项卡了:

原来Show militray briefing String的含义是“显示任务简报文字多少毫秒”。可以在下面的参数设置框里点击蓝色字,进行参数设置

显示持续时间的单位为毫秒,1000毫秒才等于1秒,我们希望显示5秒,所以参数设置为5000

文字参数可以随意输入,一般不超过50个字为宜,太长的话在游戏里容易超出屏幕范围。但需要注意,不能输入中文,以及中文标点!!那有人就要问了,我看别人做的任务,都是中文简报啊,他们是怎么写出来的?这个问题嘛,留到后面我会仔细讲,这里先卖个关子。

某学过MOD制作的观众:“你卖个毛线的关子,这不就是CSF编辑干的事情吗?你当观众都是小白啊!”

作者:“好吧,你赢了!”

同理,我们在反结果选项卡里设置另一段文字,以和正结果区分开来:

 

这样,一个简单的入门触发就完成了。为了测试效果,我们需要把它保存起来。点击确定退出编辑窗口,回到触发编辑主窗口,可以看到我们刚才做的这条触发已经出现在列表树的neutral阵营文件夹里了

点击右上角的确定按钮,保存成果并关闭触发编辑主窗口,退回到地图编辑器的顶层窗口

在菜单栏上点击“文件”——“另存为”,将这张地图保存为用户地图,地图名称就叫HelloWorld吧:

点击确定进行保存,接下来启动游戏,进遭遇战,在非官方地图里找到刚才我们保存的HelloWorld这张地图,开一局吧,骚年!

不出所料,刚才我们创建的那条触发生效了!因为条件是“恒真”,因此执行了正结果,打出了Text_Treu的文字。各位可以试试把条件改为“恒假”,看看会有什么样的结果

 

是不是很有成就感?接下来,我会将一些常用的触发脚本整理成模块来进行讲解,学完之后,你将能够使用这些最常用的触发条件和结果来完成普通任务中的开发工作,至少能够达到红警圈主流mapper的水准,至于能不能问鼎SAGE圈的顶级水准,那就看你的天赋和后续的自学能力了,因为,我也没达到顶级水准。