偶久网

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索

网站魔兽热门地图

查看: 16824|回复: 29

WorldEdit触发器(Trigger)浅析

  [复制链接]
離離草 title=
发表于 2008-9-1 10:32:46
WorldEdit触发器(Trigger)浅析


作者:551155

序言:
  WE发展至今,该研究的都被研究出来了,有人说,已经到了WE日暮时光,但我觉得现在WE依然在燃烧,还有很多人对此产生了兴趣。网上有各种各样的教程,包含我自己早年写的,但很多内容,特别是重点的触发器(Trigger)方面,却大多没有一个相对详细的说明,很多新手止步的原因就在于此。尽管SC2即将发布,但WAR3也不会这么快就没落,何况风格不同,而且触发器方面多少会有一些共通的地方;因此,我决定再制作一部教程,浅析关于触发器(Trigger)的方方面面,希望可以帮助喜欢WE的新人们。
  《浅析》的内容是分析Trigger的界面操作,并不包含JASS部分,而分析的主要目的是引导新人做出准确的判断和更加简洁的触发器。触发器是由事件、条件和动作组成,其关系就是由事件运行触发器,条件判断运行内容,动作就是执行具体动作。文中有说明,也有一些即兴演示,但相对会更加突出重点,比如在事件的说明中,着重介绍事件,但也会带有具体的条件或动作,可做参考。
  在具体的分析之前,我想说一下的是,其实运用触发器真的很简单,因为是完全界面化的,你只需要点击再点击基本上就可以了。我们要做的,是熟悉各个触发函数(内部设定好的一个动作模块,我们就是使用这些函数来制作触发)的作用,并将他们相互搭配起来。演示的作用只是提供一个思考的方式,而不是需要照本宣科,同样的事件和动作经过不同的组合就可以产生不一样的效果,不要一味的模仿。



     ———————————————————————————————————————————
離離草 title=
 楼主| 发表于 2008-9-1 10:34:51
第一章 ★ Trigger事件
第一章 ★ Trigger事件


  Trigger是由事件、条件、动作组成。事件是Trigger的开端,所有事件都是并行的,也就是说,在多个事件的情况下,只要触发一个事件就会执行触发器。大部分事件可以直接指定,但有部分事件却需要后期添加或者必须要有指定类型的变量才可以添加,后期添加也比较方便,后面会介绍到“动态注册事件”,这里我们先说一下具体的事件内容。
  还有需要注意到触发的关联性,比如“玩家事件”产生的触发是不可能会有“触发单位”这样的单位函数的,对应的只是“触发玩家”之类的玩家函数,但可以通过一些特殊情况转换,比如可以通过单位组动作的条件来选取玩家的单位,而且“触发单位所属玩家”就是一个很典型的单位事件调用玩家的函数。

第一节 ☆ 单位事件
Unit - Specific Unit Event
指定单位事件
Unit - Player-Owned Unit Event
玩家单位事件
Unit - Generic Unit Event
一般单位事件
Unit - Unit Enters Region
单位进入区域
Unit - Unit Leaves Region
单位离开区域
Unit - Unit Within Range
接近指定单位
Unit - Life
单位生命变化
Unit - Mana
单位法力变化

  这里先说明一下“指定单位”的定义,顾名思义,这个需要针对已经存在的可以直接选取的具体的单位;不单单是事件,还包括一些条件和动作;不过不同事件可以用“动态注册”来达到添加事件的目的,而条件和动作可以通过“单位类型”的变量来读取。
三种单位事件所对应的事件稍有不同,如下表:
Dies
单位死亡
共有
Decays
单位腐烂
共有
Changes owner
改变单位所属
共有
Damaged
单位接受伤害
指定单位事件
Gains a level
单位提升一个等级
共有
Learns a Skill
单位学习一个技能
共有
Becomes revivable
单位变为可重生的
共有
Uses an item
单位使用一个物品
共有
Acquires an item
单位获得一个物品
共有
Loses an item
单位掉落一个物品
共有
Sells a unit
出售一个单位
共有
Sells an item (from shop)
购买物品(从商店)
共有
Pawns an item (to shop)
出售物品(到商店)
共有
Is attacked
单位被攻击
共有
Is rescued
单位被营救
共有
Selected
单位被选择
指定单位事件
Deselected
单位被取消选择
指定单位事件
Spawns a summoned unit
召唤一个单位
共有
Begins channeling an alility
准备施放技能
共有
Begins casting an ability
开始施放技能
共有
Stops casting an ability
停止施放技能
共有
Starts the effect of an ability
发动技能效果
共有
Finishes casting an ability
技能施放结束
共有
Is loaded into a transport
被运输机装载的单位
共有
Acquired target
获得一个目标
指定单位事件
Target in range
获得攻击范围内目标
指定单位事件
Begins training a unit
开始训练的单位
共有
Cancels training a unit
取消训练的单位
共有
Finishes training a unit
完成训练的单位
共有
Begins construction
开始建造的单位
玩家/一般单位事件
Cancels construction
取消建造的单位
玩家/一般单位事件
Finishes construction
完成建筑的单位
玩家/一般单位事件
Begins reviving
正在复活的单位
共有
Cancels reviving
取消复活的单位
共有
Finishes reviving
完成复活的单位
共有
Begins an upgrade
正在升级的单位
共有
Cancels an upgrade
取消升级的单位
共有
Finishes an upgrade
完成升级的单位
共有
Begins research
正在研究的单位
共有
Cancels research
取消研究的单位
共有
Finishes research
完成研究的单位
共有
Is issued an order targeting an object
单位目标是物品的命令
共有
Is issued an order targeting a point
单位目标是点的命令
共有
Is issued an order with no target
发布没有目标的命令
共有

  在制作触发的时候,我们先要考虑到,自己需要在什么样的情况下运行这个触发器,然后再有选择的添加事件。
例题1:如何让敌对的某某玩家(玩家6)某某单位(圣骑士0000)死亡后执行游戏胜利
这里分别对应三种事件来说明各自的用法:
1、指定单位事件:
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件:
(圣骑士 0000) 死亡

条件:
(死亡单位)所属是(玩家6)

动作:
游戏-设置 (凶手单位)所属玩家 胜利





2、玩家单位事件
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件:
(玩家6)的单位死亡

条件:
(死亡单位)是(圣骑士0000)

动作:
游戏-设置 (凶手单位)所属玩家 胜利





3、一般单位事件
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件:
任意单位死亡

条件:
(死亡单位)是(圣骑士 0000)
(死亡单位)所属是(玩家6 )

动作:
游戏-设置 (凶手单位)所属玩家 胜利






“单位进入区域”和“单位离开区域”这个就很好理解了,以练功房为例简单说明。
例题2:当(大法师0001)进入(区域0000)的时候开始刷兵,单位离开(区域0000)的时候停止刷兵-练功房区域。
1、 单位进入区域
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件:
单位进入(区域0000)

条件:
触发单位 等于 (大法师0001)

动作:
运行触发器 <刷兵>





2、 单位离开区域
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件:
单位离开(区域0000)

条件:
触发单位 等于 (大法师0001)

动作:
关闭触发器 <刷兵>





3、 刷兵<暂时只简单的调用一下,后面会细说>
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件:
每2秒触发事件

条件:


动作:
创建1个 步兵 在 区域0000 的中心点,面向 默认的建筑角度





PS:这里的刷兵事件触发器默认是初始关闭的。

“接近指定单位事件”就像前面所说,需要用到具体的可指定的单位才可以使用。
例题3:(大法师0001)靠近(圣骑士0000)500码内会召唤水元素。
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件:
单位进入500 范围距离 (圣骑士0000)

条件:
触发单位 等于 (大法师0001)

动作:
单位 - 对 (触发单位) 发布 人族大法师 - 召唤水元素 命令






“单位生命值变化”和“单位法力值变量”这个同样属于“指定单位”事件。
例题4:当(大法师0001)生命值少于100的时候使物品“生命药水”。
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件:
单位 - (大法师0001)的生命值变为小于 100.00

条件:


动作:
英雄 - 命令 (大法师0001) 使用 (大法师0001) 所持有的 生命药水







第一节 完
離離草 title=
 楼主| 发表于 2008-9-1 10:37:02
第二节 ☆ 玩家事件

Player - Chat Message
聊天信息
Player - Cinematic Skipped
按下ESC
Player - Selection Event
选择事件
Player - Keyboard Event
键盘事件
Player - Properties
属性变化
Player - Alliance Change(Any)

同盟改变 (任何)
Player - Alliance Change(Specific)

同盟改变 (指定)
Player - Victory
胜利
Player - Defeat
失败
Player - Leaves Game
离开游戏

  玩家事件就是和玩家相关的事件(废话—。—),这个在制作事件的时候需要判断事件事件发生源是哪一个,这样才可以正确使用事件;另外玩家事件是针对单一玩家设置的,所以如果你想有几个玩家都可以触发就必须对应每一个需要触发的玩家添加事件。
  聊天信息事件,是指捕获的玩家输入的信息,一般像输入密技之类都属于聊天信息;但这里需要说明的是,官方默认的密技是无法通过聊天信息捕获的,因此无法防止,也就是像现在大家为了防作弊而制作的各种各样的演示的原因。
  聊天信息捕获有两种方式,一是完全匹配,二是部分匹配,以实例说明:
  例5:让玩家输入GO来执行增加1000金币。
1、完全匹配
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件:
玩家 - 玩家1(红色) 输入的聊天信息包含 GO ,匹配方式: 完全匹配

条件:
动作:
玩家 - 增加 1000 (触发玩家) 的 现有黄金





2、 部分匹配
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件:
玩家 - 玩家1(红色) 输入的聊天信息包含 GO ,匹配方式: 包含字符串

条件
动作:
玩家 - 增加 1000 (触发玩家) 的 现有黄金





  PS:这两个触发器运行会有什么不同呢?完全匹配的需要你输入的就是GO,而不能附带其它任何多余的字符,而包含字符串的话,类似于GOO或者GGO之类的,都会执行。

  按下ESC键和键盘事件同属于按键事件,默认的键盘事件可以按方向键上下左右来触发,键盘事件和按下ESC事件的区别还在于,可以分别捕获按下和放开按键事件。
  例6:按下ESC键来显示玩家当前的金币数
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件:
玩家 - 玩家1(红色) 按下Esc键

条件:
动作:
游戏 - 对 (所有玩家) 发送文本信息: (转换 ((触发玩家) 现有黄金) 为字符串)





  PS:因为显示出来的文本必须是字符串,所以需要把属于整数的黄金数转换成字符串(后面详解)

  选择事件,就是玩家选择了一个单位后执行的事件,选择事件包括选择和取消选择两个类型。
  例7:使玩家锁定选择(血魔法师0003),无法选择其它单位<默认设置已选择该单位>
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件:
玩家 - 玩家1(红色) 取消选择 一个单位

条件:
(触发单位) 等于 血魔法师 0003 <预设>

动作:
选择 - 选择 (触发单位) 对 (触发玩家)






  属性变化事件,是指玩家的某个属性发生改变,来执行触发,属性类型有如下:
现有黄金
现有木材
剩余可用英雄
金钱维持费率
木材维修费率
总黄金采集量
总木材采集量
已使用人口数
可使用人口数
最大人口数
游戏得分

例8:当中立敌对的(兵步)只有2个以后,再次刷新10个兵步,步兵占用人口数2。
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件:
玩家 - 玩家1(红色) 的 已使用人口数 变为 小于或等于 4.00

条件:
动作:
单位 - 创建 10 个 步兵 给 (触发玩家) 在 ((可用地图区域) 的中心点) ,面向角度为 默认建筑朝向 度





  PS:这里需要说明一下,属性必须是发生变化的时候才会触发的;一般情况下,我们做地图会先选择英雄,然后就会占用5个人口(默认情况下),这个时候属性就已经发生变化了,不过进行比较的话,就需要改成小于或等于5才会触发。

  同盟改变(任何)/ 同盟改变(指定),是基于同盟关系发生变化而触发事件,前者只需要任何一项关系发生改变就会执行,后者需要在特定的情况下才会执行,同盟关系如下:

结盟(不侵犯)
共享视野
共享单位
共享完全控制权
共享经验
盟友魔法锁定
救援请求
救援回应

  例9:当玩家1(红色)对玩家2(蓝色)设置结盟(不侵犯)后奖励玩家1(红色)1000金币。
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件:
玩家 - 玩家1(红色) 更改 结盟(不侵犯) 设置

条件:
((触发玩家) 对 玩家2(蓝色) 开启 结盟(不侵犯)) 等于 TRUE

动作:
玩家 - 增加 1000 玩家1(红色) 的 现有黄金





  PS:这里需要说明的是,同盟改变是单向设置,也就是说,如果玩家1(红色)对玩家2(蓝色)设置结盟,而玩家2(蓝色)没有设置结盟;那结果就是玩家1(红色)的单位不会主动攻击玩家2(蓝色)的单位,而玩家2(蓝色)还会主动攻击玩家1(红色)的单位,因此在设置结盟的时候必须要双方都进行操作。

游戏胜利 / 游戏失败 / 离开游戏
这三个都是玩家的游戏状态,都是单独执行的,很容易进行判断。
例10:当玩家2(蓝色)离开游戏后,把所有金币给玩家1(红色)
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件:
玩家 - 玩家2(蓝色) 离开游戏

条件:
动作:
玩家 - 增加 (玩家2(蓝色) 现有黄金) 玩家1(红色) 的 现有黄金





PS:在一些地图的设置中,当其中一个玩家离开就把金钱分给其它在线的玩家,就个只需要把离开玩家的金币除以在线的玩家数量,再把这个值给所有在线玩家(利用玩家组动作,后详)。

第二节 完
離離草 title=
 楼主| 发表于 2008-9-1 10:38:38
第三节 ☆ 游戏事件&普通事件&时间事件&可破坏物事件

Game - Time Of Day
游戏中时间变化
Game - Value Of Real Variable
实数变量Real数值变化
Game - Game Load
游戏读取
Game - Game Save
游戏保存
Game - Hero Abilities Button Clicked
按下英雄升级技能按钮
Game - Build Structure Button Clicked
按下建造按钮

  游戏中的时间事件通过游戏时间流逝来进行判断,可利用不同时间做不同事。而实数变量,操作方式和时间事件是一样的,区别在于,必须创建一个实数变量才可以使用这个事件,而且必须要在游戏中制造改变这个变量的事件,就像游戏时间改变会触发游戏时间变化事件一样。
  例11:当每天6点和18点的时候,给玩家1发放500金币的工钱。
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件:
游戏 - 游戏时间变为 等于 6.00
游戏 - 游戏时间变为 等于 18.00

条件:
动作:
玩家 - 增加 500 玩家1(红色) 的 现有黄金





  PS:这里用到了两个事件,前面已经提过,事件是并行的,所以这两个事件是会分别触发增加玩家黄金的事件。

  游戏读取&游戏保存&按下英雄升级技能&按钮按下建造按钮
  这几个事件基本上和现在的主流事件无关,适用于单机游戏时候;前两者就不用介绍了,看字面意思应该就能了解。而后两者,分别是英雄学习技能的那个红色十字被按下和农民建造按钮被按下,这两个都无法捕获触发单位,因此这几个事件可以忽略掉了。

Map Initialization
地图初始化

  普通事件只有地图初始化事件,就是在读取地图的最后阶段执行的事件,一般作用于对变量进行赋值等并不涉及改变游戏数据的动作(比如创建多面版之类的不会被执行)。

Time - Time Elapsed
时间流逝经过
Time - Periodic Event
周期性事件
Time - Timer Expires
计时器过期
  时间流逝事件,在正式进入地图以后开始计时,在一定程度上可以当成对游戏事件的补充,比如将时间经过设为0.01的话,就可以执行一些初始化操作而不受地图初始化的一些限制。周期性事件和时间流逝事件的区别在于,当周期性事件定义的时间到达的时候,会执行触发并重新计时,而时间流逝事件只会执行一次。
  例12:每隔10秒创建3个骑士在(区域000),并命令他们攻击移动到(区域001)
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件:
时间 - 每 10.00 秒触发事件

条件:
动作:
For循环整数A从 1 到 3, 做动作
Loop - 动作
单位 - 创建 1 个 骑士 给 玩家1(红色) 在 (矩形区域 000 <预设> 的中心点) ,面向角度为 默认建筑朝向 度
单位 - 对 (最后创建的单位) 发布 攻击移动 命令到目标点: (矩形区域 001 <预设> 的中心点)








  PS:这里用到了FOR循环语句,执行3次同样的动作,这样可以针对每一个创建的单位发布命令而不需要担心因为数量过多而有些单位没有获得命令(超过12只时)。
Destructible - Destructible Dies
可破坏物体被摧毁
Destructible - Destructible Within Region Dies
在区域中被摧毁

  可破坏物,就像树、门之类的装饰物,有一定生命值,会被破坏。
  例13:当区域001内的夏树墙被摧毁后(区域判断上限为64),5秒后复活。
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件:
可破坏物 - 可破坏物在 矩形区域 001 <预设> 内死亡

条件:
((死亡的可破坏物) 的类型) 等于 夏季树木

动作:
等待 5.00 秒
可破坏物 - 复活 (死亡的可破坏物) 并设置生命值为 ((死亡的可破坏物) 的最大生命值) , 显示 复活动画





  PS:这里利用了等待语句,但如果死亡的可破坏物过多可能会造成无法复活或无法判断的情况,还有个方式就是利用周期性事件来执行刷新动作,利用选区范围内的可破坏物来复活(后详)。

第三节 完
離離草 title=
 楼主| 发表于 2008-9-1 10:40:32

第二章 ★ Triggert条件

第二章 ★ Triggert条件
  
  Trigger是由事件、条件、动作组成。条件是执行动作之前的门槛,正确的使用条件,对增加触发执行准确率有至关重要的影响。一个触发器可以添加多个条件,默认情况下条件是串行的(AND),也就是说,必须全部达成这些条件才会开始执行动作;也可以设定并行(OR),只需要达成一个条件就会执行动作。条件的内容取值于触发事件相关的函数,就像如果是玩家事件,就无法直接调用“触发单位”的函数。
  说判断函数之前,先说一下“变量”,变量可以通过赋值来保存和调用数据。很多人可能对“变量”有些理解,却不知道“变量”可以调用哪一些数据。通过下面对一些条件的分析,大家应该可以比较清楚的理解“变量”可使用的一些类型。如果变量是布尔值,那么,这个变量的值就是TRUE(真)或者FALSE(假);如果变量是单位,那么这个值就是“指定单位”,已存在的单位;如果变量是单位类型,这个值就可以赋值我们在物体编辑器里设定的单位类型的数据,然后通过调用这些变量来创建新的单位。变量组是对变量的扩展方式,同一个变量组的变量类型相同,变量组的格式是“变量名[下标值]”,下标值必须为整数,每一个变量组中的变量都是独立的。

第一节 ☆ 布尔值
Boolean Comparison
布尔值Boolean判断

  布尔值采用TRUE(真)FALSE(假)来进行判断,同时也可以对两个不同数据的比较进行判断,也就是说双重判断。布尔值包含了所有非对称(同类)比较的默认函数,涉及范围非常之广,因此当你发现其它条件中没有自己需要的时候,就要仔细查找布尔值的条件,很可能就找到你要的。因为布尔值的函数太多,所以我就不全部帖出来了,只取几个重要的做一些例子。
  单位类别检查,这个就是检查单位的分类,最常用的就是判断单位是否英雄。

  例14:如果玩家1的英雄死亡,那么就让这个英雄在玩家1的初始地点复活。
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件:
单位 - 玩家1(红色) 的单位 死亡

条件:
((触发单位) 是 英雄) 等于 TRUE

动作:
英雄 - 立即复活 (触发单位) 在 (玩家1(红色) 的游戏开始位置) , 显示 复活动画





PS:这只是一个简单的例子,具体要判断的内容是会比较丰富的,如下例。

  例15:在(区域000内)的(玩家1)的(同盟,包含玩家1)的(英雄)死亡后复活在(各自的初始地点)。
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件:
单位 - 任意单位 死亡

条件:
((触发单位) 是 英雄) 等于 TRUE
(地区 000 <预设> 内存在 (触发单位)) 等于 TRUE
((触发玩家) 是 玩家1(红色) 的盟友) 等于 TRUE

动作:
英雄 - 立即复活 (触发单位) 在 (((触发单位) 的所有者) 的游戏开始位置) , 显示 复活动画





第一节 完
離離草 title=
 楼主| 发表于 2008-9-1 10:42:52

第二章 ★ Triggert条件

第二节 ☆ 单位&单位类型

  单位和单位类型是两个不同的概念,单位就是“指定单位”,具体化存在的单位;单位类型就是游戏中已设定的数据,可用来创建单位或判断条件。
  先说一下单位,前面已经介绍过,单位的函数(设定好的数据调用方式)必须通过“单位事件”才可以调用,而且不同的单位事件对应不同的单位函数。除了一个总而概括的“触发单位”可以替代大部分的单位函数以外,跟据事件的不同,可调用的单位函数也是不同的。另外,在动作中也同样需要调用这些函数来执行动作。单位函数如下表:

Last Created Unit
最后一个创造的单位
Last Restored Unit
最后一个恢复的单位
Last Replaced Unit
最后一个代替的单位
Last Haunted Gold Mine
最后一个闹鬼金矿
Picked Unit
选择的单位
Random Unit From Unit Group
从单位组随机选择的单位
事件响应 - Attacked Unit
完成攻击的单位
事件响应 - Attacking Unit
正在攻击的单位
事件响应 - Buying Unit
正在购买的单位
事件响应 - Cancelled Structure
取消的建筑
事件响应 - Casting Unit
抛投的单位
事件响应 - Constructing Structure
建造中的建筑
事件响应 - Constructed Structure
建造完成的建筑
事件响应 - Decaying
腐烂
事件响应 - Dying Unit
垂死的单位
事件响应 - Entering Unit
进入的单位
事件响应 - Hero Manipulating Item
使用物品的英雄
事件响应 - Killing Unit
杀死单位
事件响应 - Learning Hero
学习的英雄
事件响应 - Learing Unit
学习的单位
事件响应 - Leveling Hero
升级的英雄
事件响应 - Loading Unit
装载单位
事件响应 - Ordered Unit
命令的单位
事件响应 - Ownership-Changed Unit
改变所有权的单位
事件响应 - Revivable Hero
可复活的英雄
事件响应 - Reviving Hero
复活的英雄
事件响应 - Selling Unit
正在卖的单位
事件响应 - Sold Unit
完成卖的单位
事件响应 - Summoned Unit
召唤的单位
事件响应 - Summoning Unit
使用召唤的单位
事件响应 - Target Unit Of Issued Order
事件发生顺序的目标单位
事件响应 - Targeted Unit
目标单位
事件响应 - Trained Unit
训练的单位
事件响应 - Transporting Unit
传送的单位
事件响应 - Triggering Unit
触发触发器的单位
  在条件的比较中,我们需要明确一些概念,有些函数就是相对应的。

  例16:当(剑圣0005)杀死(先知0006)的时候,执行动作复活(先知0006)。
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件:
单位 - 任意单位 死亡

条件:
(死亡单位) 等于 先知 0006 <预设>
(凶手单位) 等于 剑圣 0005 <预设>

动作:
英雄 - 立即复活 (死亡单位) 在 ((触发单位) 的位置) , 显示 复活动画





  PS:看看这里有没有什么奇怪的地方呢?应该可以发现,在复活的位置上,我用了“触发单位”,前面已经提到过,“触发单位”是一个通用型的函数,是跟据事件而变化的。在这个触发里,“触发单位”所代表的含义就是“死亡单位”,因为触发的事件是“单位死亡”,这个是相对应的,所以在这个触发中我们所有的“死亡单位”和“触发单位”都是可以互换的。

  例17:当(先知0006)对(剑圣0005)施放闪电链技能,修改先知力量属性添加10点。
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件:
单位 - 任意单位 开始施放技能

条件:
(施法单位) 等于 先知 0006 <预设>
(技能施放目标) 等于 剑圣 0005 <预设>
(施放技能) 等于 闪电链

动作:
英雄 - 修改 力量 对 (触发单位) : 添加 10 点





  PS:这里应该比较好理解了,同样对于“触发单位”的定位跟据事件,就是“施法单位”,也就是(先知0006)。

  单位类型的判断就是基于对事件数据和游戏设定数据进行比较,比较常用的是“单位的类型”,就是调用“单位”函数来判断单位类型再进行比较。

Unit-Type Of Unit
单位的类型
Random Creep Unit-Type
随机的野外单位类型
Random Neutral Building Unit-Type

随机的中立建筑单位类型
转化 - Convert String To Unit-Type
转化字符串到单位类型
事件响应 - Trained Unit-Type
训练的单位类型


  例18:如果暗影猎手死亡,奖励凶手单位所属的玩家1000金币。
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件:
单位 - 任意单位 死亡

条件:
((死亡单位) 的类型) 等于 暗影猎手

动作:
玩家 - 增加 1000 ((凶手单位) 的所有者) 的 现有黄金






第二节 完
離離草 title=
 楼主| 发表于 2008-9-1 10:44:43
第三节 ☆ 玩家&玩家颜色&玩家游戏状态&玩家控制者


  玩家函数并不多,“选取的玩家”和“匹配的玩家”在后面的“玩家组”动作中会使用到;而转化索引就是把整数转换成玩家索引,在Trigger是从1开始到12分别是玩家,13是中立敌对,14是中立受害,15是中立特殊,16是中立被动。玩家索引在多人游戏中调用的很频繁,主要作用于变量组的应用。玩家函数列表如下:
Picked Player
选取的玩家
Matching player
匹配的玩家
Owner Of Unit
单位所属的玩家
Owner Of Item
物品所属的玩家
Random Player From Player Group
玩家组里的随机玩家
转化 - Convert Player Index To Player
转化索引到玩家
事件响应 - Previous Owner
变换前的玩家
事件响应 - Triggering Player
触发玩家
排行榜 - Player In Position
排行榜指定位置的玩家
  关于“选取的玩家”和前面“选取的单位”都是在动作,“玩家组”和“单位组”中使用(在后面动作部分具体介绍),一般最常用的是“单位所属玩家”,这里的“单位”就是调用“单位函数”的。

  例19:当玩家1(红色)的单位杀死玩家2(蓝色)的英雄时,奖励玩家1(红色)1000金币。
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件:
单位 - 任意单位 死亡

条件:
((凶手单位) 的所有者) 等于 玩家1(红色)
((触发单位) 的所有者) 等于 玩家2(蓝色)
((触发单位) 是 英雄) 等于 TRUE

动作:
玩家 - 增加 1000 ((凶手单位) 的所有者) 的 现有黄金






  有很多人想知道怎么输入密码得到隐藏英雄;这,其实很简单。如果想多个玩家都可以获得,就要多添加几个事件才可以。
例20:当玩家1(红色)输入“SS”,创建一个“巫妖”给玩家1(红色)。
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件:
玩家 - 玩家1(红色) 输入的聊天信息包含 SS ,匹配方式: 完全匹配

条件:


动作:
单位 - 创建 1 个 巫妖 给 (触发玩家) 在 ((触发玩家) 的游戏开始位置) ,面向角度为 默认建筑朝向 度





  玩家颜色的比较用得不多,实际上感觉用这个比较反而不如直接调用玩家函数。而玩家游戏状态和玩家控制者在“玩家组”的动作中应用很多,一般是做为判断是否在线或者是否由玩家或电脑在控制。这里就略过了,以后在“玩家组”动作进行详细解说。


第三节 完
離離草 title=
 楼主| 发表于 2008-9-1 10:45:45
第四节 ☆ 物品&物品分类&物品类型


  同单位一样,物品和物品类型分别是指存在的物品(指定物品)和物品类型的数据,而物品分类是指“可充的”或者“人造的”之类的归类,每个物品都可以调整分类。物品的函数表如下:
Last Created Item
最后一个创造的物品
Last Dropped Item
最后一个掉落的物品
Random Item In Region
指定区域上的随机物品
Random Item In Region Matching Condition
指定区域上的随机物品并匹配条件
Picked Item
精选的物品
Matching Item
匹配的物品
Item Carried By Hero
英雄携带的第几格物品
Item Carried By Hero Of Type
英雄携带的物品类型
事件响应 - Item Being Manipulated
被操作物品
事件响应 - Sold Item
出售的物品
事件响应 - Target Item Of Issued Order
指令目标物品
事件响应 - Target Item Of Ability Being Cast
技能施放目标物品

  事件响应对应的是单位事件中的对物品进行操作的事件,其中“获得物品”“丢弃物品”“使用物品”对应 “被操作物品”(类似于触发物品的意思,比较通用),而“出售物品”和“购买物品”都对应“出售的物品”,一般类似于物品栏移动或者单位发布的右键点击等命令就会用到“指令目标物品”。

  例21:当英雄获得类型为“可充的”物品的时候,输出提示“获得的物品名字”。
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件:
单位 - 任意单位 获得物品

条件:
((被操作物品) 的分类) 等于 可充

动作:
游戏 - 对 (所有玩家) 发送文本信息: ((被操作物品) 的名字)






  例22:当使用物品“装备合成”的时候,如果英雄身上物品栏第一格为“攻击之爪”,第二格为“影子之球”,那合成物品“影子之爪”。
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件:
单位 - 任意单位 获得物品

条件:
((被操作物品) 的类型) 等于 装备合成
(((触发单位) 物品栏第 1 格的物品) 的类型) 等于 攻击之爪
(((操作物品的单位) 物品栏第 2 格的物品) 的类型) 等于 影子之球

动作:
物品 - 删除 ((操作物品的单位) 物品栏第 1 格的物品)
物品 - 删除 ((操作物品的单位) 物品栏第 2 格的物品)
英雄 - 创建 影子之爪 给 (触发单位)





  PS:这里有一个需要注意的地方,我用了“操作物品的单位”和“触发单位”,前面已经说过“触发单位”是通用型的,在很多情况下都可以代替一些函数,这里就是代替“操作物品的单位”。另外,像“装备合成”这个物品,可以利用书本或者符文等不需要判断物品栏是否有空位并直接使用的物品来制作,就不会因为物品栏满而无法实现升级。

  例23:英雄不管任何一件物品都只充许获得一个,再次捡到就被丢弃
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件:
单位 - 任意单位 获得物品

条件:
(被操作物品) 不等于 ((触发单位) 所持有的 ((被操作物品) 的类型))

动作:
英雄 - 丢弃 (被操作物品) ,从 (触发单位) 身上





  PS:像这样不管捡到什么物品,都只能捡一个,同样的物品再次捡到就会被丢弃,如果希望特定物品只充许捡一个的话,就再添加一些条件,比如物品分类为“人造”,那么只要是“人造”的物品都只能捡一个。

第四节 完
離離草 title=
 楼主| 发表于 2008-9-1 10:46:35
第五节 ☆ 整数&实数&字符串

  之所以把这三项放在一节里说,是因为它们有一定的共通性,在特定情况下可以相互转换。整数,我想大家都理解吧,标准的阿拉伯数字;实数是带有小数点后两位数的,一般实数的作用于没有精确到整数的数值,比如游戏的时间以及单位的生命等都属于实数;字符串看似和前面两个数值没有关系,但在输出显示文本的时候,整数和实数必须要转换成字符串,而如果字符串的内容是数值的话,同样可以转换成整数或实数。
  关于这三个分类的函数实在太多了>。<,而且这些内容的应用非常广,所以这里只是举一些实例来说明一些用法,只要你知道标准的数字就是整数,带小数点的就是实数,文本的就是字符串就OK了;达到必要条件的时候相互都可以转换。

  例24:当英雄“骑士”升级到20级的时候,自动转职成“圣骑士”。
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件:
单位 - 任意单位 提升等级

条件:
((触发单位) 的类型) 等于 骑士
((触发单位) 的英雄等级) 等于 20

动作:
单位 - 将 (触发单位) 替换为 圣骑士 使用 新单位的最大 生命和魔法
英雄 - 设置 (最后替换的单位) 的英雄等级为 1 , 隐藏 升级动画





  PS:这里用了一个“单位-替换”动作,会把单位整个替换掉,但物品全部保留,也可以保留生命值百分比。而第二个动作“英雄-设置英雄等级”为1,主要是为了让转职显得更加真实,当然不修改的话,转职后的单位就会是20级;属性方面,和转职后单位自己的设定有关,和转职前的单位的设定无关。

  例25:当8级英雄大法师-吉安娜死亡以后,等待死亡英雄的等级*2秒的时间,复活死亡的英雄在自己开始位置,然后输出文字“英雄名字+英雄等级+‘已经复活!’”
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件:
单位 - 任意单位 死亡

条件:
((触发单位) 是 英雄) 等于 TRUE

动作:
等待 ((转换 ((触发单位) 的等级) 为实数) x 2.00) 秒
英雄 - 立即复活 (触发单位) 在 (((触发单位) 的所有者) 的游戏开始位置) , 显示 复活动画
游戏 - 对 (所有玩家) 发送文本信息: (((触发单位) 的称谓) + ((Lv + (转换 ((触发单位) 的英雄等级) 为字符串)) + 已经复活!))





  PS:这里可以看到,因为计算的方式不同,显示的内容也不同。在等待语句中,因为等待是时间,也就是实数,而英雄等级是整数,因此必须要把整数转换成实数,然后再乘以2.00,取得正确的等待时间。而游戏中输出的,是字符串的计算方式;字符串相加的话,就是把字符串连在一起,所以输出的是“吉安娜lv8已经复活!”

  例26:当中立敌对的单位死亡以后,有30%的机率掉落物品。
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件:
单位 - 中立敌对 的单位 死亡

条件:
(随机整数,最小值: 1 最大值: 100) 小于或等于 30

动作:
物品 - 创建 (等级 8 的随机 任何 物品类型) 在 ((触发单位) 的位置)





  PS:在这个例子里,用到了两个随机,一个是条件中的随机整数(整数函数里面),取一个从1到100之间的数,再判断这个数小于或等于30,也就是达到30%的机率的目的。而后面一个是创建物品动作里面的一个函数,按物品的等级来算,等级8就有机率掉落“国王之冠”“死亡面罩”“能量之书”其中之一。随机数的用处很多,基本上一些带概率的事件都可以利用随机数来做,掌握随机数会让触发更加有意思。


第五节 完
離離草 title=
 楼主| 发表于 2008-9-1 10:48:05
第六节    ☆ AND&OR&废话


  条件的内容的确还有,但一般都很少用到,所以这里就不详细介绍了,大体上和其它的几种条件比较的方式是差不多的,如可破坏物,就是指树或大门之类的,这种比较和单位比较没啥大的区别。再简单介绍一下条件的通配符。
  “AND”就是“与”的意思,使用AND做为通配符连接两个条件的话,是并行的,也就是说,必须完全达成这些条件才可以执行动作,默认采用的是AND方式。“OR”就是“或”的意思,是串行的,OR中的条件只要达成一个,就会执行动作。这两个存在于条件的最下面,“标准”和“多个条件”的区别也只是在条件的数量上,默认的是两个,多个就不限数量了。
  例27:当英雄“牧师”“法师”“祭祀”到10级以上的时候,获得“圣光的预言”,会转职成为“大预言师”。
');//-->Trigger Tree    Present: Zoxc @ wc3campaigns  |  Migration: Greedwind    |    展开 | 收缩 | 复制
事件:
单位 - 任意单位 获得物品

条件:
((触发单位) 的英雄等级) 大于或等于 10
((被操作物品) 的类型) 等于 圣光的预言
任一条件成立
条件
((触发单位) 的类型) 等于 牧师
((触发单位) 的类型) 等于 法师
((触发单位) 的类型) 等于 祭祀



动作:
单位 - 将 (触发单位) 替换为 大预言师 使用 新单位的最大 生命和魔法
英雄 - 设置 (最后替换的单位) 的英雄等级为 1 , 隐藏 升级动画





  PS:这里可以看到,前面两个条件,英雄等级和物品类型是默认的,也就是AND的条件模式,必须完全达成,而后面的“任一条件成立”就是OR的模式,只要达成其中之一就可以了。


第六节 完
快速回复 返回顶部 返回列表