第三章 ★ Triggert动作 Trigger是由事件、条件、动作组成。在完成事件的触发,条件的判断以后,才会执行动作;作是触发器执行的步骤,也是触发器的灵魂,我们需要的功能都是由动作来执行。正因为动作的内容如此丰富,就像积木一样由我们自己搭配;因此,对每一块积木的形态的掌握至关重要,不要好高骛远,等你熟悉各条动作的作用,你就可以组合出各种自己需要的触发器。 第一节 ☆ 基础动作
这些动作不包括在各个分类中,但对于具体的执行却有至关重要的影响。如下表:
Do Nothing
| 无动作
| 不做任何动作
| Comment
| 注释
| 仅用做分隔及说明
| Custom Script
| 定制脚本
| 自定义脚本
| Wait
| 等待
| 等待指定秒数后执行
| Wait (Game-Time)
| 等待(游戏时间)
| 等待游戏中时间后执行
| Wait For Condition
| 等待条件
| 等待条件满足后开始计时
| Wait For Sound
| 等待音乐
| 等待音乐播放完毕后开始计时
| Set Variable
| 设置变量
| 为变量赋值
| Skip Remaining Actions
| 跳过余下动作
| 不再执行此动作以下的所有动作
|
注释的作用就是对你的触发做一下说明,特别是在动作复杂的情况下,添加一些注释会看得更加清楚,注释不会对动作本身的执行产生任何影响。 脚本就是利用触发器的API界面来运行JASS,但受限于API的功能,无法像JASS一样随性的书写,因此这个只能作为辅助动作来使用。 等待的话,就是在一定的时间或条件达成以后再执行下面的动作,一般情况下等待语句尽量少用,特别是在各个触发相互调用数据的时候,可能会造成冲突;当然,事情也并没有这么严重,等待的使用频率还是会很高的,必要的时候还可以用计时器。 设置变量,这个是非常重要的一个动作,其使用方式是赋值“设置 变量名=被赋值的同类型内容”,注意这里的“=”不是“等于”的意思,是把后面的数据赋值给变量,而使变量可以代替这个数据。例如“设置 单位变量Unit=大法师0001”,那么再次对“Unit”变量赋值之前,对“Unit”的操作就等同于对“大法师0001”的操作。不同的变量对应不同的数据类型,所以我们在需要对数据进行赋值到变量的操作的时候,先要确定这个数据是什么类型,然后再创建同一类型的变量来执行赋值语句。 跳过余下动作就是不再执行剩下的动作,在一个触发的动作中,也显得比较重要,一般是在达成一定的条件以后,跳过余下不再需要执行的动作,但有一点,在组动作执行的时候无效。
If / Then / Else, Multiple Functions
| 如果/然后/否则,多动作
| if条件成立then执行动作else执行另一动作,多个动作
| If / Then / Else
| 如果/然后/否则,单动作
| if条件成立then执行动作else执行另一动作,单个动作
|
IF是不是和条件像呢?实际上IF就是条件语句,IF是在动作执行的时候判断的,所以IF和条件所用的判断是完全相同的。另外,IF执行的判断分正确(THEN)和否则(ELSE),也就是说,达成条件的会执行THEN的动作,而没有达成条件的执行ELSE动作。多个动作的就是可以写多条动作语句,而单动作只能执行正确和否则各一条动作。
For Each Integer A, Do Multiple Action
| 判断整数 A,循环执行动作
| 以整数A循环执行多个动作,相当于For A=x to y do
| For Each Integer B, Do Multiple Action
| 判断整数 B,循环执行动作
| 以整数B循环执行多个动作,相当于For B=x to y do
| For Each Integer Variable, Do Multiple Action
| 判断整数变量,循环执行动作
| 以整数变量循环执行多个动作,相当于For 变量=x to y do
|
FOR循环语句,主要作用就是重复执行动作。FOR循环的组成是一个整数变量(系统默认的全局变量有两个,分别是循环数A和循环数B),一个基础值,一个上限值,还有可以执行的动作。整数变量是用来保存和判断执行次数的,第一次执行的时候,整数变量会赋值为基础值;然后每循环一次(执行完FOR循环里面的所有动作),该变量自动增加1,也就是说,如果基础值是1,那么执行一次以后整数变量就是2了。上限值是一个顶点,当整数变量超过上限值的时候,FOR循环结束。 正因为该变量是一直在变化的,所以我们可以利用这个变化来执行我们需要的一些重复动作,还可以对该变量进行赋值以达到跳跃执行或重复执行的效果。 例28:创建12个单位,并命令他们攻击移动到区域000。
');//-->Trigger Tree Present: Zoxc @ wc3campaigns | Migration: Greedwind | 展开 | 收缩 | 复制 动作: For循环整数A从 1 到 12, 做动作 Loop - 动作 单位 - 创建 1 个 步兵 给 玩家1(红色) 在 ((可用地图区域) 的中心点) ,面向角度为 默认建筑朝向 度 单位 - 对 (最后创建的单位) 发布 攻击移动 命令到目标点: (矩形区域 000 <预设> 的中心点)
PS:可以看到,这里的基础值是1,上限值是12,也就是说,这个循环会执行12次,每次会创建一个步兵,然后会命令这个步兵攻击移动到区域000。另外,还有需要说明的是“最后创建的单位”只对应一个单位,而且是在这条语句执行前创建的单位,所以如果一次创建2个或更多单位的时候,也只会对一个单位发布命令;利用FOR循环就可以对每一个单位独立发布命令了。 例29:设定单位变量组保存步兵、女巫、骑士、火枪手四个单位类型,每五秒创建同一种类型12个单位,并命令他们攻击移动到区域000。
');//-->Trigger Tree Present: Zoxc @ wc3campaigns | Migration: Greedwind | 展开 | 收缩 | 复制 动作: 设置 Unit[1] = 步兵 设置 Unit[2] = 女巫 设置 Unit[3] = 骑士 设置 Unit[4] = 矮人火枪手 For循环整数A从 1 到 4, 做动作 Loop - 动作 For循环整数B从 1 到 12, 做动作 Loop - 动作
单位 - 创建 1 个 Unit[(循环整数A)] 给 玩家1(红色) 在 ((可用地图区域) 的中心点) ,面向角度为 默认建筑朝向 度 单位 - 对 (最后创建的单位) 发布 攻击移动 命令到目标点: (矩形区域 000 <预设> 的中心点)
等待 5.00 秒
PS:这里用到了变量组,关于变量组的设定就是同一个名称的变量因为下标值的不同也可以每一个当成独立的变量,这里分别赋值了四个单位的类型。然后可以看到FOR的嵌套,作用就是利用两个或两个以上的循环以达到复数执行动作的目的。 比如例中循环A的上限是4,也就是该循环会执行4次,然后在这个循环里包含了循环B,上限是12,会执行12次,也就是说,每一次循环A的执行都会执行循环B的动作12次,一共是4*12=48次循环B的动作。 然后可以看到,Unit[(循环整数A)]这个值,前面可以看到,我们分别对应Unit[1]到Unit[4]进行了赋值,而循环数A在执行的过程中会分别变成1、2、3、4,所以这就好理解了,当把循环数A为1的时候放置在下标值中,那么Unit[(循环整数A)]就等同于Unit[1]了。 例30:当随机整数1-100小于30的时候,结束循环动作(已设定整数变量X)。
');//-->Trigger Tree Present: Zoxc @ wc3campaigns | Migration: Greedwind | 展开 | 收缩 | 复制 动作: For X 从 1 到 2, 做动作 Loop - 动作 如果所有条件成立则做动作1,否则做动作2
If - 条件 (随机整数,最小值: 1 最大值: 100) 小于 30
Then - 动作 设置 X = 2
Else - 动作 设置 X = 1
PS:这里利用了自定义值X来做循环,虽然这个循环从1到2只能执行两次,但是里面有一个IF的动作,其作用就是判断取得的随机值是不是小于30,当这个值小于30的时候,对变量X进行赋值为2.。前面已经提过,FOR循环每执行一次就会对整数变量做增加1的动作,那么当X=2的时候,本循环结束后X=2+1=3了,已经超过上限值2,所以不会再执行了。而如果值不小于30,也就是条件没有成立的时候,X=1,执行结束以后X=1+1=2,还会继续执行。如果条件继续不成立,X结束时还是2,还是会执行,直到条件达到为止。
第一节 完
|