找回密码
 点一下
查看: 35856|回复: 35

WorldEdit触发器(Trigger)浅析(不再更新)!

[复制链接]
发表于 2008-5-31 21:48:50 | 显示全部楼层 |阅读模式
WorldEdit触发器(Trigger)浅析
作者:551155

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


———————————————————————————————————————————
本帖暂不充许回复,有什么问题和意见请去专用水帖:

评分

参与人数 1威望 +200 收起 理由
风之殇 + 200 这么好的东西不加对不起 ..

查看全部评分

 楼主| 发表于 2008-5-31 21:49:13 | 显示全部楼层

第一章 ★ 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]  

事件:
              (圣骑士 0000) 死亡
条件:
              (死亡单位)所属是(玩家6)
动作:
              游戏-设置 (凶手单位)所属玩家 胜利
[/trigger]
2、玩家单位事件
[trigger]  
事件:
              (玩家6)的单位死亡
条件:
              (死亡单位)是(圣骑士0000)
动作:
              游戏-设置 (凶手单位)所属玩家 胜利
[/trigger]
3、一般单位事件
[trigger]  
事件:
              任意单位死亡
条件:
              (死亡单位)是(圣骑士 0000)
              (死亡单位)所属是(玩家6 )
动作:
              游戏-设置 (凶手单位)所属玩家 胜利
[/trigger]

“单位进入区域”和“单位离开区域”这个就很好理解了,以练功房为例简单说明。
例题2:当(大法师0001)进入(区域0000)的时候开始刷兵,单位离开(区域0000)的时候停止刷兵-练功房区域。
1、 单位进入区域
[trigger]   
事件:
              单位进入(区域0000)
条件:
              触发单位 等于 (大法师0001)
动作:
              运行触发器 <刷兵>
[/trigger]
2、 单位离开区域
[trigger]   
事件:
              单位离开(区域0000)
条件:
              触发单位 等于 (大法师0001)
动作:
              关闭触发器 <刷兵>
[/trigger]
3、 刷兵<暂时只简单的调用一下,后面会细说>
[trigger]   
事件:
              每2秒触发事件
条件:
              无
动作:
              创建1个 步兵 在 区域0000 的中心点,面向 默认的建筑角度
[/trigger]
PS:这里的刷兵事件触发器默认是初始关闭的。

“接近指定单位事件”就像前面所说,需要用到具体的可指定的单位才可以使用。
例题3:(大法师0001)靠近(圣骑士0000)500码内会召唤水元素。
[trigger]   
事件:
              单位进入500 范围距离 (圣骑士0000)
条件:
              触发单位 等于 (大法师0001)
动作:
              单位 - 对 (触发单位) 发布 人族大法师 - 召唤水元素 命令
[/trigger]

“单位生命值变化”和“单位法力值变量”这个同样属于“指定单位”事件。
例题4:当(大法师0001)生命值少于100的时候使物品“生命药水”。
[trigger]   
事件:
              单位 - (大法师0001)的生命值变为小于 100.00
条件:
              略
动作:
              英雄 - 命令 (大法师0001) 使用 (大法师0001) 所持有的 生命药水
[/trigger]


第一节 完
回复

使用道具 举报

 楼主| 发表于 2008-6-1 22:14:51 | 显示全部楼层

第一章 ★ Trigger事件

第二节 ☆ 玩家事件

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]
事件:
              玩家 - 玩家1(红色) 输入的聊天信息包含 GO ,匹配方式: 完全匹配
条件:
动作:
              玩家 - 增加 1000 (触发玩家) 的 现有黄金
[/trigger]
2、 部分匹配
[trigger]
事件:
              玩家 - 玩家1(红色) 输入的聊天信息包含 GO ,匹配方式: 包含字符串
条件
动作:
              玩家 - 增加 1000 (触发玩家) 的 现有黄金
[/trigger]
  PS:这两个触发器运行会有什么不同呢?完全匹配的需要你输入的就是GO,而不能附带其它任何多余的字符,而包含字符串的话,类似于GOO或者GGO之类的,都会执行。

  按下ESC键和键盘事件同属于按键事件,默认的键盘事件可以按方向键上下左右来触发,键盘事件和按下ESC事件的区别还在于,可以分别捕获按下和放开按键事件。
  例6:按下ESC键来显示玩家当前的金币数
[trigger]
事件:
              玩家 - 玩家1(红色) 按下Esc键
条件:
动作:
              游戏 - 对 (所有玩家) 发送文本信息: (转换 ((触发玩家) 现有黄金) 为字符串)
[/trigger]
  PS:因为显示出来的文本必须是字符串,所以需要把属于整数的黄金数转换成字符串(后面详解)

  选择事件,就是玩家选择了一个单位后执行的事件,选择事件包括选择和取消选择两个类型。
  例7:使玩家锁定选择(血魔法师0003),无法选择其它单位<默认设置已选择该单位>
[trigger]
事件:
              玩家 - 玩家1(红色) 取消选择 一个单位
条件:
              (触发单位) 等于 血魔法师 0003 <预设>
动作:
              选择 - 选择 (触发单位) 对 (触发玩家)
[/trigger]

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

例8:当中立敌对的(兵步)只有2个以后,再次刷新10个兵步,步兵占用人口数2。
[trigger]
事件:
              玩家 - 玩家1(红色) 的 已使用人口数 变为 小于或等于 4.00
条件:
动作:
              单位 - 创建 10 个 步兵 给 (触发玩家) 在 ((可用地图区域) 的中心点) ,面向角度为 默认建筑朝向 度
[/trigger]
  PS:这里需要说明一下,属性必须是发生变化的时候才会触发的;一般情况下,我们做地图会先选择英雄,然后就会占用5个人口(默认情况下),这个时候属性就已经发生变化了,不过进行比较的话,就需要改成小于或等于5才会触发。

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

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

  例9:当玩家1(红色)对玩家2(蓝色)设置结盟(不侵犯)后奖励玩家1(红色)1000金币。
[trigger]
事件:
              玩家 - 玩家1(红色) 更改 结盟(不侵犯) 设置
条件:
              ((触发玩家) 对 玩家2(蓝色) 开启 结盟(不侵犯)) 等于 TRUE
动作:
              玩家 - 增加 1000 玩家1(红色) 的 现有黄金
[/trigger]
  PS:这里需要说明的是,同盟改变是单向设置,也就是说,如果玩家1(红色)对玩家2(蓝色)设置结盟,而玩家2(蓝色)没有设置结盟;那结果就是玩家1(红色)的单位不会主动攻击玩家2(蓝色)的单位,而玩家2(蓝色)还会主动攻击玩家1(红色)的单位,因此在设置结盟的时候必须要双方都进行操作。

游戏胜利 / 游戏失败 / 离开游戏
这三个都是玩家的游戏状态,都是单独执行的,很容易进行判断。
例10:当玩家2(蓝色)离开游戏后,把所有金币给玩家1(红色)
[trigger]
事件:
              玩家 - 玩家2(蓝色) 离开游戏
条件:
动作:
              玩家 - 增加 (玩家2(蓝色) 现有黄金) 玩家1(红色) 的 现有黄金
[/trigger]
PS:在一些地图的设置中,当其中一个玩家离开就把金钱分给其它在线的玩家,就个只需要把离开玩家的金币除以在线的玩家数量,再把这个值给所有在线玩家(利用玩家组动作,后详)。

第二节 完



回复

使用道具 举报

 楼主| 发表于 2008-6-1 22:31:13 | 显示全部楼层

第一章 ★ Trigger事件

第三节 ☆ 游戏事件&普通事件&时间事件&可破坏物事件

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]
事件:
              游戏 - 游戏时间变为 等于 6.00
              游戏 - 游戏时间变为 等于 18.00
条件:
动作:
              玩家 - 增加 500 玩家1(红色) 的 现有黄金
[/trigger]
  PS:这里用到了两个事件,前面已经提过,事件是并行的,所以这两个事件是会分别触发增加玩家黄金的事件。

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

Map Initialization
地图初始化

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

Time - Time Elapsed
时间流逝经过
Time - Periodic Event
周期性事件
Time - Timer Expires
计时器过期
  时间流逝事件,在正式进入地图以后开始计时,在一定程度上可以当成对游戏事件的补充,比如将时间经过设为0.01的话,就可以执行一些初始化操作而不受地图初始化的一些限制。周期性事件和时间流逝事件的区别在于,当周期性事件定义的时间到达的时候,会执行触发并重新计时,而时间流逝事件只会执行一次。
  例12:每隔10秒创建3个骑士在(区域000),并命令他们攻击移动到(区域001)
[trigger]
事件:
              时间 - 每 10.00 秒触发事件
条件:
动作:
              For循环整数A从 1 到 3, 做动作
                            Loop - 动作
                                          单位 - 创建 1 个 骑士 给 玩家1(红色) 在 (矩形区域 000 <预设> 的中心点) ,面向角度为 默认建筑朝向 度
                                          单位 - 对 (最后创建的单位) 发布 攻击移动 命令到目标点: (矩形区域 001 <预设> 的中心点)
[/trigger]
  PS:这里用到了FOR循环语句,执行3次同样的动作,这样可以针对每一个创建的单位发布命令而不需要担心因为数量过多而有些单位没有获得命令(超过12只时)。
Destructible - Destructible Dies
可破坏物体被摧毁
Destructible - Destructible Within Region Dies
在区域中被摧毁

  可破坏物,就像树、门之类的装饰物,有一定生命值,会被破坏。
  例13:当区域001内的夏树墙被摧毁后(区域判断上限为64),5秒后复活。
[trigger]
事件:
              可破坏物 - 可破坏物在 矩形区域 001 <预设> 内死亡
条件:
              ((死亡的可破坏物) 的类型) 等于 夏季树木
动作:
              等待 5.00 秒
              可破坏物 - 复活 (死亡的可破坏物) 并设置生命值为 ((死亡的可破坏物) 的最大生命值) , 显示 复活动画 [/trigger]
  PS:这里利用了等待语句,但如果死亡的可破坏物过多可能会造成无法复活或无法判断的情况,还有个方式就是利用周期性事件来执行刷新动作,利用选区范围内的可破坏物来复活(后详)。

第三节 完

回复

使用道具 举报

 楼主| 发表于 2008-6-2 21:34:01 | 显示全部楼层

第二章 ★ Triggert条件

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

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

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

  例14:如果玩家1的英雄死亡,那么就让这个英雄在玩家1的初始地点复活。
[trigger]
事件:
              单位 - 玩家1(红色) 的单位 死亡
条件:
              ((触发单位) 是 英雄) 等于 TRUE
动作:
              英雄 - 立即复活 (触发单位) 在 (玩家1(红色) 的游戏开始位置) , 显示 复活动画
[/trigger]
PS:这只是一个简单的例子,具体要判断的内容是会比较丰富的,如下例。

  例15:在(区域000内)的(玩家1)的(同盟,包含玩家1)的(英雄)死亡后复活在(各自的初始地点)。
[trigger]
事件:
              单位 - 任意单位 死亡
条件:
              ((触发单位) 是 英雄) 等于 TRUE
              (地区 000 <预设> 内存在 (触发单位)) 等于 TRUE
              ((触发玩家) 是 玩家1(红色) 的盟友) 等于 TRUE
动作:
              英雄 - 立即复活 (触发单位) 在 (((触发单位) 的所有者) 的游戏开始位置) , 显示 复活动画
[/trigger]

第一节 完
回复

使用道具 举报

 楼主| 发表于 2008-6-2 21:41:39 | 显示全部楼层

第二章 ★ 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]
事件:
              单位 - 任意单位 死亡
条件:
              (死亡单位) 等于 先知 0006 <预设>
              (凶手单位) 等于 剑圣 0005 <预设>
动作:
              英雄 - 立即复活 (死亡单位) 在 ((触发单位) 的位置) , 显示 复活动画
[/trigger]
  PS:看看这里有没有什么奇怪的地方呢?应该可以发现,在复活的位置上,我用了“触发单位”,前面已经提到过,“触发单位”是一个通用型的函数,是跟据事件而变化的。在这个触发里,“触发单位”所代表的含义就是“死亡单位”,因为触发的事件是“单位死亡”,这个是相对应的,所以在这个触发中我们所有的“死亡单位”和“触发单位”都是可以互换的。

  例17:当(先知0006)对(剑圣0005)施放闪电链技能,修改先知力量属性添加10点。
[trigger]
事件:
              单位 - 任意单位 开始施放技能
条件:
              (施法单位) 等于 先知 0006 <预设>
              (技能施放目标) 等于 剑圣 0005 <预设>
              (施放技能) 等于 闪电链
动作:
              英雄 - 修改 力量 对 (触发单位) : 添加 10 点
[/trigger]
  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]
事件:
              单位 - 任意单位 死亡
条件:
              ((死亡单位) 的类型) 等于 暗影猎手
动作:
              玩家 - 增加 1000 ((凶手单位) 的所有者) 的 现有黄金
[/trigger]

第二节 完
回复

使用道具 举报

 楼主| 发表于 2008-6-2 21:48:08 | 显示全部楼层

第二章 ★ Triggert条件

第三节 ☆ 玩家&玩家颜色&玩家游戏状态&玩家控制者


  玩家函数并不多,“选取的玩家”和“匹配的玩家”在后面的“玩家组”动作中会使用到;而转化索引就是把整数转换成玩家索引,在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]
事件:
              单位 - 任意单位 死亡
条件:
              ((凶手单位) 的所有者) 等于 玩家1(红色)
              ((触发单位) 的所有者) 等于 玩家2(蓝色)
              ((触发单位) 是 英雄) 等于 TRUE
动作:
              玩家 - 增加 1000 ((凶手单位) 的所有者) 的 现有黄金
[/trigger]

  有很多人想知道怎么输入密码得到隐藏英雄;这,其实很简单。如果想多个玩家都可以获得,就要多添加几个事件才可以。
例20:当玩家1(红色)输入“SS”,创建一个“巫妖”给玩家1(红色)。
[trigger]
事件:
              玩家 - 玩家1(红色) 输入的聊天信息包含 SS ,匹配方式: 完全匹配
条件:
              略
动作:
              单位 - 创建 1 个 巫妖 给 (触发玩家) 在 ((触发玩家) 的游戏开始位置) ,面向角度为 默认建筑朝向 度
[/trigger]
  玩家颜色的比较用得不多,实际上感觉用这个比较反而不如直接调用玩家函数。而玩家游戏状态和玩家控制者在“玩家组”的动作中应用很多,一般是做为判断是否在线或者是否由玩家或电脑在控制。这里就略过了,以后在“玩家组”动作进行详细解说。

第三节 完
回复

使用道具 举报

 楼主| 发表于 2008-6-4 21:35:10 | 显示全部楼层

第二章 ★ Triggert条件

第四节 ☆ 物品&物品分类&物品类型


  同单位一样,物品和物品类型分别是指存在的物品(指定物品)和物品类型的数据,而物品分类是指“可充的”或者“人造的”之类的归类,每个物品都可以调整分类。物品的函数表如下:
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]
事件:
              单位 - 任意单位 获得物品
条件:
              ((被操作物品) 的分类) 等于 可充
动作:
              游戏 - 对 (所有玩家) 发送文本信息: ((被操作物品) 的名字)
[/trigger]

  例22:当使用物品“装备合成”的时候,如果英雄身上物品栏第一格为“攻击之爪”,第二格为“影子之球”,那合成物品“影子之爪”。
[trigger]
事件:
              单位 - 任意单位 获得物品
条件:
              ((被操作物品) 的类型) 等于 装备合成
              (((触发单位) 物品栏第 1 格的物品) 的类型) 等于 攻击之爪
              (((操作物品的单位) 物品栏第 2 格的物品) 的类型) 等于 影子之球
动作:
              物品 - 删除 ((操作物品的单位) 物品栏第 1 格的物品)
              物品 - 删除 ((操作物品的单位) 物品栏第 2 格的物品)
              英雄 - 创建 影子之爪 给 (触发单位)
[/trigger]
  PS:这里有一个需要注意的地方,我用了“操作物品的单位”和“触发单位”,前面已经说过“触发单位”是通用型的,在很多情况下都可以代替一些函数,这里就是代替“操作物品的单位”。另外,像“装备合成”这个物品,可以利用书本或者符文等不需要判断物品栏是否有空位并直接使用的物品来制作,就不会因为物品栏满而无法实现升级。

  例23:英雄不管任何一件物品都只充许获得一个,再次捡到就被丢弃
[trigger]
事件:
              单位 - 任意单位 获得物品
条件:
              (被操作物品) 不等于 ((触发单位) 所持有的 ((被操作物品) 的类型))
动作:
              英雄 - 丢弃 (被操作物品) ,从 (触发单位) 身上
[/trigger]
  PS:像这样不管捡到什么物品,都只能捡一个,同样的物品再次捡到就会被丢弃,如果希望特定物品只充许捡一个的话,就再添加一些条件,比如物品分类为“人造”,那么只要是“人造”的物品都只能捡一个。

第四节 完
回复

使用道具 举报

 楼主| 发表于 2008-6-4 21:43:44 | 显示全部楼层

第二章 ★ Triggert条件

第五节 ☆ 整数&实数&字符串

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

  例24:当英雄“骑士”升级到20级的时候,自动转职成“圣骑士”。
[trigger]
事件:
              单位 - 任意单位 提升等级
条件:
              ((触发单位) 的类型) 等于 骑士
              ((触发单位) 的英雄等级) 等于 20
动作:
              单位 - 将 (触发单位) 替换为 圣骑士 使用 新单位的最大 生命和魔法
              英雄 - 设置 (最后替换的单位) 的英雄等级为 1 , 隐藏 升级动画
[/trigger]
  PS:这里用了一个“单位-替换”动作,会把单位整个替换掉,但物品全部保留,也可以保留生命值百分比。而第二个动作“英雄-设置英雄等级”为1,主要是为了让转职显得更加真实,当然不修改的话,转职后的单位就会是20级;属性方面,和转职后单位自己的设定有关,和转职前的单位的设定无关。

  例25:当8级英雄大法师-吉安娜死亡以后,等待死亡英雄的等级*2秒的时间,复活死亡的英雄在自己开始位置,然后输出文字“英雄名字+英雄等级+‘已经复活!’”
[trigger]
事件:
              单位 - 任意单位 死亡
条件:
              ((触发单位) 是 英雄) 等于 TRUE
动作:
              等待 ((转换 ((触发单位) 的等级) 为实数) x 2.00) 秒
              英雄 - 立即复活 (触发单位) 在 (((触发单位) 的所有者) 的游戏开始位置) , 显示 复活动画
              游戏 - 对 (所有玩家) 发送文本信息: (((触发单位) 的称谓) + ((Lv + (转换 ((触发单位) 的英雄等级) 为字符串)) + 已经复活!))
[/trigger]
  PS:这里可以看到,因为计算的方式不同,显示的内容也不同。在等待语句中,因为等待是时间,也就是实数,而英雄等级是整数,因此必须要把整数转换成实数,然后再乘以2.00,取得正确的等待时间。而游戏中输出的,是字符串的计算方式;字符串相加的话,就是把字符串连在一起,所以输出的是“吉安娜lv8已经复活!”

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


第五节 完
回复

使用道具 举报

 楼主| 发表于 2008-6-4 22:00:41 | 显示全部楼层

第二章 ★ Triggert条件

第六节    ☆ AND&OR&废话


  条件的内容的确还有,但一般都很少用到,所以这里就不详细介绍了,大体上和其它的几种条件比较的方式是差不多的,如可破坏物,就是指树或大门之类的,这种比较和单位比较没啥大的区别。再简单介绍一下条件的通配符。
  “AND”就是“与”的意思,使用AND做为通配符连接两个条件的话,是并行的,也就是说,必须完全达成这些条件才可以执行动作,默认采用的是AND方式。“OR”就是“或”的意思,是串行的,OR中的条件只要达成一个,就会执行动作。这两个存在于条件的最下面,“标准”和“多个条件”的区别也只是在条件的数量上,默认的是两个,多个就不限数量了。
  例27:当英雄“牧师”“法师”“祭祀”到10级以上的时候,获得“圣光的预言”,会转职成为“大预言师”。
[trigger]
事件:
              单位 - 任意单位 获得物品
条件:
              ((触发单位) 的英雄等级) 大于或等于 10
                    ((被操作物品) 的类型) 等于 圣光的预言
                                  任一条件成立
                                      条件
                                          ((触发单位) 的类型) 等于 牧师
                                          ((触发单位) 的类型) 等于 法师
                                          ((触发单位) 的类型) 等于 祭祀
动作:
              单位 - 将 (触发单位) 替换为 大预言师 使用 新单位的最大 生命和魔法
                    英雄 - 设置 (最后替换的单位) 的英雄等级为 1 , 隐藏 升级动画
[/trigger]
  PS:这里可以看到,前面两个条件,英雄等级和物品类型是默认的,也就是AND的条件模式,必须完全达成,而后面的“任一条件成立”就是OR的模式,只要达成其中之一就可以了。


第六节 完
回复

使用道具 举报

 楼主| 发表于 2008-6-23 11:47:46 | 显示全部楼层

第三章 ★ Triggert动作

第三章 ★ 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]
动作:
              For循环整数A从 1 到 12, 做动作
                            Loop - 动作
                                          单位 - 创建 1 个 步兵 给 玩家1(红色) 在 ((可用地图区域) 的中心点) ,面向角度为 默认建筑朝向 度
                                          单位 - 对 (最后创建的单位) 发布 攻击移动 命令到目标点: (矩形区域 000 <预设> 的中心点)
[/trigger]
  PS:可以看到,这里的基础值是1,上限值是12,也就是说,这个循环会执行12次,每次会创建一个步兵,然后会命令这个步兵攻击移动到区域000。另外,还有需要说明的是“最后创建的单位”只对应一个单位,而且是在这条语句执行前创建的单位,所以如果一次创建2个或更多单位的时候,也只会对一个单位发布命令;利用FOR循环就可以对每一个单位独立发布命令了。
  例29:设定单位变量组保存步兵、女巫、骑士、火枪手四个单位类型,每五秒创建同一种类型12个单位,并命令他们攻击移动到区域000。
[trigger]
动作:
              设置 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 秒
[/trigger]
  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]
动作:
              For X 从 1 到 2, 做动作
                            Loop - 动作
                                          如果所有条件成立则做动作1,否则做动作2
                             If - 条件
                                          (随机整数,最小值: 1 最大值: 100) 小于 30
                            Then - 动作
                                          设置 X = 2
                             Else - 动作
                                          设置 X = 1

[/trigger]
  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,还是会执行,直到条件达到为止。

第一节 完

回复

使用道具 举报

 楼主| 发表于 2008-6-23 12:08:54 | 显示全部楼层

第三章 ★ Triggert动作


第二节 ☆ 单位动作


  单位动作是我们使用频率最高的动作,所以这里只是简单分析一下动作的使用方式,而在其它章节中,会多次使用这些动作。
Create Unit Facing Angle
创建单位并指定面向角度
创建单位,并指定其面向角度
Create Unit Facing Point
创建单位并指定面向点
创建单位,并指定其面向点
Create Corpse
创建尸体
创建单位的尸体
Create Permanent Corpse
创建永久的尸体
创建永久存在的尸体

  创建单位,在我们刷兵之类的触发中经常利用到,尸体的话,除了一些利用尸体的技能,主要是做为装饰物而存在吧。创建单位的格式如下:
  单位 - 创建 1 个 步兵 给 玩家1(红色) 在 ((可用地图区域) 的中心点) ,面向角度为 默认建筑朝向 度
  其中,“1个”表示创建的单位数量,“步兵”是单位的类型,“玩家 1(红色)”是创建的单位所属,就是这个单位创建以后是归谁的,“((可用地图区域)的中心点)”这个是创建单位的位置,“面向角度”就是单位的朝向,默认是270度,可自已改。另外需要说明的是,这个动作所对应的单位函数是“最后创建的单位”,在调用时会利用到。
Kill
杀死
杀死单位
Remove
删除
从游戏中移除单位
Explode
爆炸
使单位以炸开形式死亡
Replace
替换
用一个单位替换现有单位
Hide
隐藏
隐藏单位
Unhide
解除隐藏
解除隐藏单位
Change Color
改变颜色
改变单位颜色,控制权不会改变
Change Owner
改变所有者
改变单位的所有者
Shared Vision
分享视野
玩家分享单位的视野
  一般来说,当我们不再使用这个单位的时候,就需要从地图上抹掉该单位。“杀死单位”的功能就像说明一样,让这个单位死亡,但同时会触发单位死亡事件的触发器,“爆炸”的话和杀死单位一样,但会出现爆炸死亡的动画效果。如果不希望触发到事件,那么就用“删除单位”,把这个单位从地图中不留痕迹的抹掉。
  “替换单位”的作用比较奇特,普通单位的替换就是将一个单位完全替换成另一个单位,而英雄的替换会保留物品和经验值。这个动作的单位函数是“最后替换的单位”,可以在替换以后调用。“隐藏”和“解除隐藏”就是让单位可见或不可见,被隐藏的单位无法选择到,在使用的时候要用变量来保存以便控制。“改变所有者”就是改变控制权到指定玩家,同时可以决定是否改变颜色,而“改变颜色”的动作只会变化颜色。“共享视野”在特定的情况下可以给其它玩家一起看到指定单位的行动,同盟并共享视野的情况下并不需要这个动作。
Move Unit (Instantly)
移动单位 (立即)
让单位瞬间移动到另一位置
Move Unit And Face Angle (Instantly)
移动单位并指定面向角度 (立即)
让单位瞬间移动到另一位置,并指定面向角度
Move Unit And Face Point (Instantly)
搬移单位并指定面向点 (立即)
让单位瞬间移动到另一位置,并指定面向点
  “移动单位”就是将指定的单位从一个区域瞬间移动到另一个区域,和后面要讲的发布命令不同,这个是直接移动的。“面向角度”和“面向点”在创建单位的时候就有看到过了,作用是相同的,在制作影片的时候可以考虑使用来达到一些效果。
Set Pally-Point To Point
设置集结点到区域
设置单位集结点到区域
Set Pally-Point To Unit
设置集结点到单位
设置单位集结点到单位
Set Pally-Point To Destructible
设置集结点到可破坏物体
设置单位集结点到可破坏物体
  “集结点”在对战时用得很多,基于建造单位的方式而使用,指定训练的单位攻击移动到某个点,最快的训练单位速度是1秒,可以做为另类的刷兵触发使用。
Set Life(To Percentage)
设置生命 (百分比)
以百分比方式设置生命值
Set Mana(To Percentage)
设置法力 (百分比)
以百分比方式设置法力值
Set Life(To Value)
设置生命 (数值)
设置生命值
Set Mana(To Value)
设置法力 (数值)
设置法力值
  “设置生命”和“设置法力”就是设定当前生命和法力值,前面是按百分比来设的,后面是具体数值,也可以利用这些直接加减来对单位造成伤害的模拟,只是没有伤害源。
Make Invulnerable/Vulnerable
成为无敌的/可被攻击的
设定单位为无敌的/可被攻击的状态
Pause/Unpause
暂停/解除暂停
暂停/解除暂停单位的动作,玩家将不可控制单位
Pause/Unpause All Unit
暂停/解除暂停所有单位
暂停/解除暂停所有单位的动作,玩家将不可控制单位
Pause/Unpause Expiration Timer
暂停/解除暂停到期的定时器
暂停/解除暂停生命周期
Add Expiration Timer
设置生命周期
给单位设置生命周期
  “设置无敌状态”简单的说和添加“无敌”技能效果是一样的。“暂停”的动作主要是用在电影制作上,以防止一些单位自由行动。“生命周期”就是该单位可以存活的时间,现在用得最多的就是对T技能的辅助单位设定以达到自动消除的效果。
Make Unit Explode On Death
设置是否爆炸死亡
使单位死亡方式成为以炸开形式死亡
Suspend Corpse Decay
暂缓尸体腐烂
让尸体腐烂暂缓
Reset Ability Cooldowns
重置技能CD
重置单位所有技能的CD
  前面已经提到过单位爆炸死亡的动作,不过那个直接导至单位死亡,而现在这个动作就是设置单位的死亡形式,当单位死亡在其它方式死亡以后也会以设置的形式来死亡。“暂停尸体腐烂”是作用于单位死亡以后尸体腐烂之前,用来保存死亡的尸体在便在特殊的时候使用。“重置技能CD”就是直接将单位所有技能的冷却时间设为到期,显示技能可使用状态。
Set Building Construction Progress

设置建造建筑物进度
设置建造建筑物所要消耗的时间
Set Building Upgrade Progress

设置建造升级进度
设置建筑升级所要消耗的时间
  这里设定的是按百分比来计算的,不管是建造的还是升级的都是如此,在特殊情况下可以利用这个来做“加速建造”的特殊使用方式。
Make Unit Sleep
成为睡眠单位
使单位处于睡眠状态
Make Unit Sleep At Night
成为夜间睡眠单位
使单位在夜晚的时候处于睡眠状态
Wake Up
醒来
使睡眠中的单位醒过来
Turn Alarm Generation On/Off
警戒范围开/关
打开/关闭单位警戒范围
  控制单位直接睡眠的话,该单位必须要有“一直睡眠”的技能,设置夜晚睡眠的单位只对中立单位有效,醒来就是让单位清醒,但并不影响“催眠魔法”的效果。“警戒范围”只对建筑有效。
Rescue Unit
营救单位
设置单位被营救
Make Rescuable
成为可营救的
设置单位为可营救单位,玩家接触时营救单位将加入玩家阵营
Set Rescue Range

设置营救范围
设置进入范围后单位即被营救
Set Rescue Behavior For Units
设置单位营救行为
设置营救后单位颜色是否变化
Set Rescue Behavior For Buildings
设置建筑营救行为
设置营救后建筑颜色是否变化
  营救是一种特殊状态,当开启营救状态以后,指定可营教的单位进入营救范围,就会改变这个单位所属(被营救,可设定营救后所属玩家),同时可以设定是否改变颜色等。
Enable/Disable Supply Usage
开启/关闭人口占用
开启/关闭人口占用

  对指定单位开关占用人口,也就是说,把该单位所需要的人口数降为0。
Make Unit Face Unit
使单位面向单位
使单位面向单位
Make Unit Face Point
使单位面向地点
使单位面向地点
Make Unit Face Angle
使单位面向角度
使单位面向角度
  这个在前面已经遇到好多次了,主要是设定单位的前面角度。在电影的制作中,可以设定单位面向单位以取得对话效果;面向地点可以在播放某些动作的时候设定所有单位面对的方向,点是不动的,每个单位所设定的角度是不同的;单位面向角度就是对单位设定具体的角度。
Set Movement Speed
设置移动速度
设置移动单位速度
Turn Collision On/Off
碰撞开/关
设置单位是否可与其他单位重叠

  单位的移动速度如果设为0的话,这个单位就不会移动了,可以利用这个把单位变成类似于建筑的守卫,上限是522。“碰撞开关”是一个很有趣的东西,设定了以后,该单位可以穿越其它单位而不会被阻撞,但这个是单向的,也就是说,其它单位依然无法越过该单位。现在比较常用的就是利用在T技能的辅助单位上,让两个单位重叠以实现技能从原始单位身上发出的效果。
Set Acquisition Range

设置主动攻击范围
设置单位的主动攻击范围
Set Custom Value
设置自定义数值
设置自定义数值
  “主动攻击范围”就是当敌人进入这个范围以后会自动攻击,可以通过T来改变范围大小。“自定义数值”简单的说,就是把单位当成一个整数变量,可以对单位设定整数以达到一些效果,比如做为ID区别单位等等。
Remove Buffs
移除持续性魔法
移除单位上的持续性魔法
Remove Buffs By Type
移除持续性魔法类型
按类型移除单位上的持续性魔法
Remove Specific Buff
移除魔法效果
移除单位身上的魔法效果
  移除持续魔法效果,前一个全移除全部效果,后一个可以设定移除有益或有害的BUFF,最后面一个是移除“指定的技能”的魔法效果。
Add Ability
增加技能
增加单位的技能
Remove Ability
移除技能
移除单位的技能
Add Classification
增加分类
增加分类到单位
Remove Classification
移除分类
移除分类到单位
Decrease Lvevl Of Ability For Unit
降低技能等级
降低技能等级
Increase Level Of Ability For Unit
提升技能等级
提升技能等级
Set Level Of Ability For Unit
设定技能等级
设定技能等级

  添加技能,可以直接给单位添加各个技能,删除正好相反。降低和提升技能等级都只是对原来技能等级进行加减1的动作,最低是1级,最高是技能上限,如果单位没有指定技能则不执行动作,设定技能等级就是直接改变到一定等级。因为技能的目标选择和单位分类有直接关系,所以如何设定不同分类也是区分不同单位的重要部分。
Issue Order Targeting A Unit
当前目标是一个单位的命令
让单位执行目标是单位的命令
Issue Order Targeting A Point
当前目标是一个点的命令
让单位执行目标是地点的命令
Issue Order Targeting A Destructible
当前目标是一个可破坏物体的命令
让单位执行目标是可破坏物体的命令
Issue Order With No Target
没有目标的命令
让单位执行没有目标的命令
Issue Train/Upgrade Order
训练/升级的命令
执行训练/升级的命令
Issue Research Order
研究科技的命令
执行研究科技的命令
Issue Build Order
建造的命令
执行建造的命令

  对单位发布命令,是制作AI的最基础部分,不同的命令发布对应不同的命令。比如需要攻击一个单位,那么就发布目标是单位的命令,选择里面的“攻击”命令来执行,同时也可以发布针对单位施放的技能(说明一下,自定义技能的命令发布方式是对原技能进行发布命令);目标是一个点的作用是对一个点的动作和施放技能,比如大法师的暴风雪等,而在一些守护图中,也经常用到命令单位“攻击移动”到指定点,然后单位就会跑过去,并且遇到敌人就会主动攻击。像“采集”之类的技能针对的是树木(可破坏物)。而没有目标的命令就是不指定单位或点,直接施放的,例如山丘之王的震击,或者一些带有自动施放能力的技能的开关等等都在这个选项。“训练”“研究”“建造”这个就不需要多说明了,玩过对战的都知道。
Drop Item On Point
掉落物品到区域
掉落单位身上的指定物品到区域
Drop Item In Slot
移动物品
移动单位身上的物品到物品栏指定格
Drop Item On A Unit
给予其它单位物品
把指定物品给予另一个单位
  这些是对单位身上的物品栏是行操作,我们可以设定一个带有单位物品栏的单位帮忙捡取物品,然后交给我们的英雄,可以通过这些动作来实现。
Damage Area
伤害区域目标
对区域内的单位造成伤害
Damage Target
伤害单位目标
对指定单位造成伤害

  这个动作的最大作用,现在来看就是做属性强化伤害时使用。例如一个技能附加智力*3的伤害,那么就可以利用这个对目标单位增加伤害。简单的例子:
  单位 - 命令 (伤害来源) 对 (被攻击单位) 造成 ((转换 (智力 对 (伤害来源) (不包括 加成)) 为实数) x 3.00) 点伤害,攻击类型: 法术 伤害类型: 普通



第二节 完
回复

使用道具 举报

 楼主| 发表于 2008-6-23 12:16:33 | 显示全部楼层

第三章 ★ Triggert动作

第三节 ☆ 英雄动作



  英雄动作是单位动作的衍生动作,主要是针对英雄的特性来执行一些动作。

Learn Skill
学习技能
让英雄学习到新的技能
Set Level
设置等级
设置英雄当前等级
Set Experience
设置经验
设置英雄当前累计的经验值
Add Experience
增加经验
增加英雄累计的经验值
Enable/Disable Experience Gain
开启/关闭经验获取
设定英雄是否能够获得经验
Set Experience Rate
设置经验比率
按百分比方式设置英雄当前的经验值

  学习技能的话,就是英雄自带的英雄技能,在还有技能点数的情况下,可以自动让他学习,制作AI的又一个基础要素。
  设置等级,就是改变英雄的当前等级,并设定经验为当前等级的初始值。设置经验,改变英雄的当前经验,就是累计经验,只可以升不可以降。增加经验,和前面一样,但不同的是增加在累计基础上,同样只升不降。开启和关闭经验就是决定是否让英雄获得经验,设置经验比率对改变游戏难度有帮助,设置英雄获得的经验值百分比。
  这里有一个很有趣的东西,“设置等级”是可以改变等级,在改变等级的情况下,比如7级改6级,就会回到6级的初始值。而“设置经验”是只可以增长而不能降低的,但如果把两者结合呢?
  演示31:随意改变英雄的经验值,只需要输入数值就可以改变经验。
[trigger]
事件:
              玩家 - 玩家1(红色) 输入的聊天信息包含 <空字符串> ,匹配方式: 包含字符串
条件:
动作:
              英雄 - 设置 血魔法师 0000 <预设> 的英雄等级为 1 , 隐藏 升级动画
              英雄 - 设置 血魔法师 0000 <预设> 的经验值为 (转换 (输入的聊天信息) 为整数) , 隐藏 升级动画
[/trigger]
  PS:因为前面已经说过了,改变等级就会重置经验,等级1的初始值为0,然后再设定经验值的话就完成了改变经验的过程,因为只是增加而不是减少。如果在高级界面里修改掉有关“等级”的数据为空格的话,就不会显示等级了,可以做成随意控制的能量条哦。


Revive (Instantly)
复活 (立即)
让英雄立即复活
Modify Hero Attribute
修改英雄属性
修改英雄的属性
Modify Hero Skill Point
修改技能点
修改英雄拥有的技能点
Reserve Hero Button
保留英雄图标
保留英雄图标数量
  英雄复活,这个在RPG地图用的非常多,配合计时器就可以完成英雄复活的计数流程了(在计时器部分有演示)。修改属性就是针对英雄的三围,力敏智进行直接修改。技能点前面说过了,学习英雄自带的英雄技能用的。保留英雄图标就是显示几个英雄头像,共享操作的话,从保留数开始下面才是共享的他人英雄头像。

Give Item To Hero
给予英雄物品
给英雄一件物品
Create Item For Hero
创建物品给英雄
创建一件物品给英雄
Drop Item From Hero
从英雄掉落物品
从英雄身上掉落一件物品
Drop Item From Hero Inventory Slot
从英雄掉落指定位置的物品
从英雄物品栏中掉落指定位置的物品
Use Item On A Unit
将物品用于一个单位
让英雄对一个单位使用物品
Use Item On A Point
将物品用于一个点
让英雄对一个区域使用物品
Use Item On A Destructible
将物品用于一个可破坏物体
让英雄对可破坏物体使用物品
Use Item
直接使用物品
让英雄使用一个直接作用于自身的物品
  给予英雄物品和创建物品给英雄很明显的区别就在于,一个是直接把地图中已存在的物品给予“指定英雄”,而另一个是创建一个新的给英雄,主要是利用在物品合成或任务给予上面。掉落物品同样是“指定物品”从“指定英雄”身上掉落,而指定位置就是在六格中的其中一格的物品掉落。使用物品同样可以归为基础AI的一部分。跟据物品的使物方式不同而用不同的使用动作,像幻像权杖可以用在单位身上,而生命药水是直接使用(例4)等。


第三节 完
回复

使用道具 举报

 楼主| 发表于 2008-6-23 12:30:58 | 显示全部楼层

第三章 ★ Trigger动作

第四节 ☆ 玩家动作


  玩家动作,针对“指定玩家”执行的动作,主要作用于属性的变化上面。

Set Property
设置拥有资源
设置玩家拥有的资源
Add Property
增加拥有资源
增加/减少玩家所拥有的资源数
Turn Player Flag On/Off
玩家奖励开/关
打开和关闭玩家金钱奖励
Divert Player Income (Tax)
转移玩家收入
转移一定比例收入给另一玩家
  设置资源和增加资源的区别是,前者直接设定资源数,而后者在原始基础上增加一定的量。玩家奖励开关杀死敌方单位有金钱奖励,除了默认的中立敌对,一般玩家的单位被杀人是不会奖励资源的。转移收入,这个就很明显了,可以做为辅助手法来增强玩家(交税)。

  例32:设置所有玩家初始金钱为1500,而且打开每一个玩家的金钱奖励(玩家之间杀死单位增加金钱)。
[trigger]
事件:
              地图初始化
条件:
动作:
              玩家组 - 选取 (所有玩家) 内所有玩家做动作
                            Loop - 动作
                                          玩家 - 设置 (选取玩家) 的 现有黄金 为 1500
                                          玩家 - 设置 给予奖励 打开 对 (选取玩家)
[/trigger]
  PS:这里用到了“选取玩家”,这个是玩家组应用的方式,对应玩家组选择的每一个玩家。

Enable/Disable Sleeping For All Creeps
开启/关闭野外生物睡眠
开启/关闭野外生物睡眠
Set Alliance

设置同盟
设置玩家同盟
Set Aspect Of Alliance

设置同盟状态
设置玩家之间的同盟状态
  
  开关睡眠只影响夜晚中立生物的睡眠状态,不会对催眠技能产生影响。设置同盟只对同盟和敌对各方面关闭进行设定,而设定同盟状态,是设置同盟之间的细节关系。

Enable/Disable Ability
充许/禁用技能
充许/禁用玩家的技能
Set Training/Construction Availability Of Unit
设置单位训练/建造可用
限制玩家是否可以训练/建造单位

  这两个动作的作用很相似,都是充许和禁用。其中禁用技能的话,指定玩家的单位就不能使用这个技能。而设置单位可用性,被禁止的单位不可以训练也不可以建造,但不影响触发的创建动作。

演示33:在酒馆当有玩家购得一个英雄以后,其它玩家无法再购得同类型英雄。
[trigger]
事件:
              单位 - 任意单位 出售单位
条件:
              ((被贩卖单位) 是 英雄) 等于 TRUE
动作:
              玩家组 - 选取 (所有玩家) 内所有玩家做动作
                            Loop - 动作
                                          玩家 - 设置 ((被贩卖单位) 的类型) 可取得的 对 (选取玩家)
[/trigger]

Limit Training Of Unit-Type
限制训练单位类型
限制玩家可训练的单位类型
Limit Training Of Heroes
限制训练英雄
限制玩家可训练的英雄
  这两个动作具体是限制可建造的数量,限制单位类型就是针对某一类型的单位,而限制英雄就是玩家可以正常获取(建造或购买)的英雄数量限制。

Set Current Research Level
设置当前科技等级
设置玩家当前的科技等级
Set Max Research Level
设置最大科技等级
设置玩家科技最高可以研究到的等级
Change Color
改变颜色
改变玩家颜色
Set Handicap
增加生命障碍
增加生命障碍
Show/Hide In Score Screen
显示/隐藏得分画面
在得分画面中显示/隐藏玩家
Set Name
设置名字
设置玩家名字
  需要说明的是,科技等级只能升不能降,在RPG地图中,科技等级往往可以做为难度设定的辅助方式。改变颜色只是改变玩家的颜色,而且只影响存在的单位。生命障碍是另一种难度设定方式,按百分比来设定生命值上限。显示隐藏得分画面只是在战斗结束以后有用,基本上我们也很少用到这个。改置玩家名字,只是在游戏中改变原来我们进入游戏时设定的名字。
  PS:关于科技增强难度,首先需要确定一下科技的属性,比如增加生命值的科技,设每级增加100生命,然后把这个科技给予所有需要受到影响的单位(单位编辑“使用科技”栏),同样可以设定攻击力等数值的科技。这样在必要的时候只要修改科技等级就可以达到改变难度的效果了。


第四节 完
回复

使用道具 举报

 楼主| 发表于 2008-6-23 12:42:42 | 显示全部楼层

第三章 ★ Trigger动作

第五节 ☆ 单位组&玩家组动作


  组的作用就是对多个的单位或玩家或物品或可破坏物进行同一个操作。把单位组和玩家组放在一起是因为两者的操作方式很相似,在一些函数应用上也差不多。这里先稍稍解释一下组动作中常用的函数:选取和匹配,前者的作用是在选择好的单位组中可以针对发布命令,而后者是在选择的过程中的条件中使用。

Pick Every Unit In Unit Group And Do Multiple Actions
选择单位组中全部单位并执行多个动作
选择单位组中全部单位并执行多个动作
Pick Every Unit In Unit Group And Do Actions
选择单位组中全部单位并执行动作
选择单位组中全部单位并执行动作
Add Unit
增加单位
增加单位到单位组中
Add Unit Group
增加单位组
增加单位组到另一单位组中
Remove Unit
移除单位
从单位组中移除单位
Remove Unit Group
移除单位组
从单位组中移除一个单位组
Clear
清除
清除单位组中所有单位
  例34:对玩家10执行刷兵(12名骑士)动作,并命令他们攻击到玩家5的初始点。当玩家10的骑士死完以后重新刷出12名骑士,预设单位组变量“G”。
[trigger]
事件:
              时间 - 游戏开始 5.00 秒
              单位 - 玩家10(淡蓝) 的单位 死亡
条件:
动作:
              如果所有条件成立则做动作1,否则做动作2
              If - 条件
                            (G 中所有单位死亡) 等于 TRUE
              Then - 动作
                            单位组 - 清空 G 内所有单位
                            For循环整数A从 1 到 12, 做动作
                                          Loop - 动作
                                                        单位 - 创建 1 个 骑士 给 玩家10(淡蓝) 在 (玩家10(淡蓝) 的游戏开始位置) ,面向角度为 默认建筑朝向 度
                                                        单位组 - 添加 (最后创建的单位) 到 G
                                                        单位 - 对 (最后创建的单位) 发布 攻击移动 命令到目标点: (玩家5(黄色) 的游戏开始位置)
              Else - 动作
                            无动作
[/trigger]

  PS:这个演示特殊的地方,在于用了两个并不冲突的事件,一个是在游戏开始时进行刷兵的时间,另一个是单位死亡以后再判断的是否所有单位死亡后执行的刷兵动作,两个不冲突的事件是可以并行使用的,不过需要注意细节问题,比如不同事件对应不同的函数,必须要通用的函数才会被正确执行。单位组G在这里的应用就是判断单位的存活数,只有当单位死完以后才可以执行动作。

  例35:选择地图中所有的步兵,并执行转换为骑士动作,这里用了两种方式:
1.利用匹配单位比较
[trigger]
事件:
              时间 - 游戏开始 5.00 秒
条件:
动作:
              单位组 - 选取 ((可用地图区域) 内满足 (((匹配单位) 的类型) 等于 步兵) 的所有单位) 内所有单位做动作
                            Loop - 动作
                                          单位 - 将 (选取单位) 替换为 骑士 使用 旧单位的百分比 生命和魔法
[/trigger]
2.利用选取单位比较
[trigger]
事件:
              时间 - 游戏开始 5.00 秒
条件:
动作:
              单位组 - 选取 ((可用地图区域) 内的所有单位) 内所有单位做动作
                            Loop - 动作
                                          如果所有条件成立则做动作1,否则做动作2
                                                        If - 条件
                                                                      ((选取单位) 的类型) 等于 步兵
                                                                                    Then - 动作
                                                                                                  单位 - 将 (选取单位) 替换为 骑士 使用 旧单位的百分比 生命和魔法
                                                                                    Else - 动作
                                                                                                  无动作
[/trigger]
  PS:以上两个演示很好的阐述了组动作的两个函数的作用,在我们选取单位进行执行判断的时候,经常会用到判断语句来筛选我们需要的单位。


Issue Order Targeting A Unit
当前目标是一个单位的命令
让单位组执行目标是单位的命令
Issue Order Targeting A Point
当前目标是一个点的命令
让单位组执行目标是地点的命令
Issue Order Targeting A Destructible
当前目标是一个可破坏物体的命令
让单位组执行目标是可破坏物体的命令
Issue Order Targeting A Item
当前目标是一个物品的命令
让单位组执行目标是物品的命令
Issue Order With No Target
没有目标的命令
让单位组执行没有目标的命令
Issue Train Order
训练命令
让单位组执行升级的命令
  这里是对单位组发布命令,但不得不说的是,单位组的命令都只针对最多12个单位发布的,超过的数量不会执行动作。所以必要的话,最好还是像前面针对每一个选取的单位单独发布命令,才可以避免这个问题产生。

Pick Every Player In Player Group And Do Multiple Actions
选择玩家组中全部玩家并执行多个动作
选择玩家组中全部玩家并执行多个动作
Pick Every Player In Player Group And Do Actions
选择玩家组中全部玩家并执行动作
选择玩家组中全部玩家并执行动作
Add Player
增加玩家
增加玩家到玩家组中
Remove Player
移除玩家
从玩家组中移除玩家
Clear
清除
清除玩家组
Set Alliance

设置同盟
设置玩家组中玩家的同盟

  玩家组的操作方式和单位组基本相同的,而且在前面已经介绍过具体的玩家动作,所以这里就不再多解释了。不过有一点需要注意的,就是在对玩家组进行操作的时候,不能同时对玩家组中的玩家数进行判断。因为玩家组的执行方式是移出(就是把执行过动作的玩家移出玩家组),所以不要在执行玩家组动作时添加额外的操作,单位组不存在此问题。


第五节 完
回复

使用道具 举报

 楼主| 发表于 2008-6-23 12:50:21 | 显示全部楼层

第三章 ★ Trigger动作

第六节 ☆ 物品动作


  物品动作就是单纯的针对物品进行动作,主要是体现物品本身的一些变化。
Create
创建
在区域内创建物品
Remove
移除
移除物品
Show/Hide Item
显示/隐藏物品
显示/隐藏物品
Move (Instantly)
移动 (立即)
瞬间移动物品到另一位置

  不同于创建物品给英雄的动作,这个是在指定点创建的。移除物品、显示物品、移动物品针对的是“指定物品”。这里需要特别说明的是,“英雄身上携带的物品类型”同样可以做为“指定物品”而执行动作的,但前题是英雄要有这个类型的物品。
Set Life
设置生命
设置物品的生命值
Set Charges Remaining
设置使用次数
设置物品使用次数
Make Invulnerable/Vulnerable
成为无敌的/可被攻击的
设定物品为无敌状态/可被攻击状态
Make Pawnable
成为典当的
设定物品为可以出售给商店的
Make Undroppable
成为不可掉落的
设定物品为不能丢弃的
Make Item Drop From Heroes Upon Death
成为英雄死亡时掉落的
把物品设定为英雄死亡时会掉落出来

  “设置物品生命”是对物品当前的生命值进行设定,但不能超过物品生命值上限,过高会以上限为准。使用次数在RPG的制作中经常使用,比如物品叠加,就是利用使用次数来设定。无敌、典当、不可丢弃、死亡掉落都是物品的状态,后面的解释都有了。

  例36:物品重叠,当带有使用次数的物品被捡取的时候,如果身上带有相同物品,会自动重叠在一起。
[trigger]
事件:
              单位 - 任意单位 获得物品
条件:
              ((被操作物品) 的使用次数) 大于 0
              (被操作物品) 不等于 ((触发单位) 所持有的 ((被操作物品) 的类型))
动作:
              物品 - 设置 ((触发单位) 所持有的 ((被操作物品) 的类型)) 的使用次数为 ((((触发单位) 所持有的 ((被操作物品) 的类型)) 的使用次数) + ((被操作物品) 的使用次数))
              物品 - 删除 (被操作物品)
[/trigger]
PS:需要说明的是条件2,利用“被操作物品”和单位身上携带的同类型物品进行比较来判断是否有同样的物品。只有当存在同样的物品才会执行动作,把“被操作物品”的数量加到单位身上同类物品上面,实现使用次数叠加,再删除物品达到整理效果。


Change Owner
改变所有者
改变物品的所有权
Set CustuM Value
设置自定义数据
设置物品自定义数据
  改变所有者,一般来说,物品所有者使用很少,但如果想做一些特殊效果,比如物品专属的话,也是可以的,利用这个来进行比较。物品的自定义值就相当于把物品做为整数变量来保存一个整数,可以在各种可以判断物品函数的情况下调用。

例37:让杀怪掉落的物品都属于杀怪的玩家,其它玩家拾取不能,由两个触发组成。
触发1:
[trigger]
事件:
              单位 - 中立敌对 的单位 死亡
条件:
动作:
              物品 - 创建 死亡面罩 在 ((触发单位) 的位置)
              物品 - 改变 (最后创建的物品) 的所属玩家为: ((凶手单位) 的所有者) 并 改变颜色
[/trigger]
触发2:
[trigger]
事件:
              单位 - 任意单位 获得物品
条件:
              ((被操作物品) 的所属玩家) 不等于 ((触发单位) 的所有者)
动作:
              英雄 - 丢弃 (被操作物品) ,从 (触发单位) 身上
[/trigger]
  PS:第一个触发的作用就是对物品进行标识,事件也不一定就是如此,只是如果需要指定物品所属的时候添加那个动作就可以了。第二个触发就是进行判断了,如果不是你们家的东西,你是捡不起来的。

Pick Every Item In Region And Do Multiple Actions
选取区域内物品做动作(多个动作)
对区域内物品进行组操作
Pick Every Item In Region And Do Actions
选取区域内物品做动作(单个动作)
对区域内物品进行组操作
  和单位组相同的组操作,只不过这里针对的是物品而已,不用多解释了吧^_^。


第六节 完
回复

使用道具 举报

 楼主| 发表于 2008-6-30 19:07:15 | 显示全部楼层

第三章 ★ Trigger动作

第七节 ☆任务动作 


  说是任务系统,其实大家需要明白一个道理“我们控制任务,并不是任务控制我们”,一个最常见的例子就是“杀死指定单位后游戏胜利”,这本身就是一个任务,目标是“杀死指定单位”,而任务结果或说奖励就是“游戏胜利”,只是一般情况下这个不显示,我们要做的,就是把任务显示出来罢了,决定权依然在你自己手中。任务界面在游戏中按F9显示。
Quest Message
任务信息
给玩家发送任务提示信息
Create Quest
创建任务
创建一个任务并设定属性
Destroy Quest
销毁任务
销毁指定任务
Enable/Disable Quest
开启/禁用任务
开启/禁用任务

  任务信息是针对组玩家进行发送的,但如果你每一个玩家编一个组的话,也可以实现针对玩家的信息显示。任务信息和游戏动作显示文本的作用大同小异,不过区别在于任务信息都自带音效,而且有些特殊信息会在F9的任务界面上显示特效。
  创建任务可以是“主要”任务或者“可选”任务,分别是显示在任务面版的F9的左边和右边,可以设置任务的标题和描述,并可以选择一个图标做为任务图示。创建的任务还可以选择是否为隐藏,默认的官方战役里面就有一些任务初始是隐藏的(显示问号),达到一定要求以后显示出来,但这个并不影响任务本身,我前面也说过了,操作任务进程的还是我们作者自己。
  销毁任务就是针对创建来说的,也就是从任务面版中删除这个任务,一般来说,创建的任务都需要用变量保存,然后才可以有针对性的删除,因为默认的销毁只有“最后创建的任务”这样一个函数而已。
被禁用的任务将不会显示在任务面版上,在特殊的情况下需要不显示又不销毁的时候可用。
Mark Quest As Completed
标记任务完成
标记任务为完成/未完成
Mark Quest As Failed
标记任务失败
标记任务为失败
Mark Quest As Discovered
标记任务发现
标记任务为发现
Change Quest Title
改变任务标题
改变任务的标题
Change Quest Description
改变任务描述
改变任务的描述内容
  标记任务完成和失败是在任务图标下面显示“完成”和“失败”的字样,而任务发现是针对前面创建的时候设置的隐藏来使用的,会显示任务,同样还可以再次设为隐藏。
改变任务标题和任务描述看字样就应该可以明白是什么用的了吧……单纯的修改文字而已。
Create Quest Requirement
创建任务项目
创建完成任务的必要条件说明
Mark Quest Requirement As Completed
标记任务项目完成
标记任务必要条件已完成
Change Quest Requirement Description
改变任务项目描述
改变任务必要条件的描述内容
  玩过网游的都知道,有些任务是可能存在多个项目的,比如杀狼人的任务,设置条件1为“杀死小狼人10只”,设置条件2为“杀死狼人5只”,然后只有两个条件都达成以后,任务才可以完成。当然实际上这个并不是直接设定就可以的,看下面的动作“标记任务项目完成”,说穿了还是我们自己手动来控制任务的完成显示。
创建的项目会显示在任务标题的上方,靠近边框的位置,而标记任务完成以后该项目后面自动会添加<完成>的字样,并改变项目颜色。“改变任务描述”同样只是文字上的修改,没什么需要再介绍的了。
Create Defeat Condition
创建失败条件
创建一个失败条件的描述
Destroy Defeat Condition
销毁失败条件
销毁创建的失败条件的描述
Change Defeat Condition Description
改变失败条件描述
改变失败条件的描述
Flash Quest Dialog Button
闪烁任务对话框按钮
任务对话框按钮周围将出现光环

  任务失败条件和任务项目一样显示在任务标题的上方,而且是每个任务都会显示这个条件,主要做用是在一些带有限制的任务中采用,比如守护某单位10分钟,而失败就是10分钟内该单位死亡。当然这个同样只是描述,具体的还是我们自己来设定,但可以起到说明的作用。锁毁和改变描述不需要再解释,闪炼就是任务F9的按钮会发光,提示玩家注意。
  例38:设置一个主线任务,标题是“屠龙”,项目是“杀死小龙15只”和“杀死守护龙人5只”。设置一个支线任务,标题是“杀鸡”。再设置一个支线任务,标题是“抢劫”,初始隐藏。附:主线任务“杀死守护龙人”项目为完成状态。AQ为主线任务变量组,BQ为支线任务变量组,AQ_S为主线任务要求(项目)变量组。
[trigger]
事件:
              地图初始化
条件:
动作:
              任务 - 创建一个 主要 任务,标题: 屠龙 任务说明: 杀死一定数量... 任务图标: ReplaceableTextures\\CommandButtons\\BTNFrostWyrm.blp
              设置 AQ[1] = (最后创建的任务)
              任务 - 创建一个 可选 任务,标题: 杀鸡 任务说明: 看到没有,这... 任务图标: ReplaceableTextures\\CommandButtons\\BTNCritterChicken.blp
              设置 BQ[1] = (最后创建的任务)
              任务 - 创建一个 可选,隐藏 任务,标题: 打劫 任务说明: 要钱还是要命... 任务图标: ReplaceableTextures\\CommandButtons\\BTNHeroMountainKing.blp
              设置 BQ[2] = (最后创建的任务)
              -------- 以下是创建任务AQ[1]的项目 --------
              任务 - 为 AQ[1] 创建一个任务项目: 已杀死小龙 |...
              设置 AQ_S[1] = (最后创建的任务项目)
              任务 - 为 AQ[1] 创建一个任务项目: 已杀死守护龙...
              设置 AQ_S[2] = (最后创建的任务项目)
              -------- 设置杀死守护龙人任务为完成 --------
              任务 - 改变 AQ_S[2] 的说明为: 已杀死守护龙...
              任务 - 设置 AQ_S[2] 完成
[/trigger]
  PS:设置任务的具体内容本来应该是需要用变量的,这样才可以在指定类型单位,比如守护龙人死亡以后对变量进行变化,然后刷新任务内容,这次为了简便直接写上数值了。设置项目完成也是在达到要求以后,修改项目说明然后设置项目为完成状态。
本次演示附图:
浅析附图-任务.jpg

第七节 完
回复

使用道具 举报

 楼主| 发表于 2008-6-30 19:21:20 | 显示全部楼层

第三章 ★ Trigger动作

第八节 ☆ 倒数计时器动作


  倒数计时器,简单的说就两个功能:启动计时器和计时器到期。至于显示什么的,只不过是做为辅助功能,不管有没有显示,计时器还是一样在计时的,除非你让计时器停止了。
Start Timer
启动倒数计时器
启动倒数计时器并开始计时
Pause Timer
暂停倒数计时器
暂时停止倒数计时器计时
Create Timer Window
创建倒数计时器窗口
创建倒数计时器窗口及定时器标题
Destroy Timer Window
销毁倒数计时器窗口
关闭倒数计时器窗口
Show/Hide Timer Window For Player
显示/隐藏玩家倒数计时器窗口(指定玩家)
显示/隐藏玩家的倒数计时器窗口(指定玩家)
Show/Hide Timer Window
显示/隐藏倒数计时器窗口
显示/隐藏倒数计时器窗口

  启动计时器,就是打开一个计时器,然后可以设定倒计时间,另外还可以设置“一次运行”还是“循环计时”,简单的说,后者就是时间循环事件的翻版,有很多种方式可以实现相同的效果,只看你自己需要哪一种了,比如倒数计时器会自然显示倒计时窗口。暂停计时器就很简单了,只是停止计时器的运作。
  倒数计时器窗口,就是那个显示出来的界面,前面也说过了,这个界面的作用只是用来查看的,是不是显示都不影响计时。窗口挂靠计时器创建,也就是说只有开启计时器以后窗口才有倒计时效果。销毁是创建的反义词……
  新创建的计时器窗口会直接显示,但如果先隐藏掉,再需要显示就要用显示计时器的动作来执行了。指定玩家的话就是显示给某个玩家,而不指定就是显示给所有玩家。
  例39:黑暗游侠0000每杀死一个单位,就会获得15秒的高速回复MP效果,时间到以后效果消失,如果中途再杀死单位,重新计时15秒(不是累计)。其中ABC是计时器,ABC_W是计时器窗口。
触发器A
[trigger]
事件:
              单位 - 任意单位 死亡
条件:
              (凶手单位) 等于 黑暗游侠 0000 <预设>
动作:
              计时器 - 删除 ABC_W
              计时器 - 开启 ABC ,计时方式: 一次性 时间设置: 15.00 秒
              计时器 - 为 ABC 创建计时器窗口,使用标题: 黑暗流影
              设置 ABC_W = (最后创建的计时器窗口)
              单位 - 添加 辉煌光环 给 (凶手单位)
[/trigger]
触发器B
[trigger]
事件:
              时间 - ABC 到期
条件:
动作:
              计时器 - 删除 ABC_W
              单位 - 删除 辉煌光环 从 黑暗游侠 0000 <预设>
[/trigger]
  PS:玩过WOW暗牧的都知道,加了天赋以后,牧师杀死一个单位都会有回兰效果BUFF,这个就是类似的东西。这里有一个很有意思的,就是计时器的重置能力。当游侠杀死单位的时候,开始计时,同时添加光环技能给游侠,计时的时间是15秒。在正常的情况下,15秒后触发器B运行,ABC也就是计时器到期,删除计时器窗口,删除添加的光环技能。但是如果在计时器到期之前游侠又杀死单位的话,计时器就会重置,也就是说,不计前面的计时,又从15秒开始计时了,利用这个特性简单的就可以做出重复计时的功能。

Change Timer Window Title
改变定时器窗口标题
改变定时器窗口标题
Change Timer Window Title Color
改变定时器窗口标题颜色
改变定时器窗口标题的颜色
Change Timer Window Time Color
改变定时器窗口时间颜色
改变定时器窗口显示时间的颜色

  关于这三个改变,真的没什么好说的……光凭字面上就应该理解这个只是改改文字而已。
  例40:做一个多玩家英雄复活计时器(这个也是很多新手经常需求的东西,请注意看哦)。准备工作,英雄(废话=,=),并针对每一个英雄设定独立的自定义值,也就是做为ID号了,从1开始。计时器变量组ABC[?],计时器窗口变量组ABC_W[?]。一共就三个触发,一个还是准备工作,另个是开始计时,还一个就是复活触发了。
  准备工作触发器(这里只是做为例子,实用的时候是在创建英雄的时候使用):
[trigger]
事件:
              地图初始化
条件:
动作:
              单位组 - 选取 ((可用地图区域) 内满足 ((((匹配单位) 是 英雄) 等于 TRUE) and ((((匹配单位) 的所有者) 的控制者) 等于 用户)) 的所有单位) 内所有单位做动作
              Loop - 动作
                            设置 N = (N + 1)
                            -------- 为复活触发器注册可复活的英雄 --------
                            触发器 - 为 Revive <预设> 添加事件: (时间 - ABC[N] 到期)
                            单位 - 设置 (选取单位) 的自定义值为 N
[/trigger]
单位死亡并启动计时器:
[trigger]
事件:
              单位 - 任意单位 死亡
条件:
              ((触发单位) 是 英雄) 等于 TRUE
              (((触发单位) 的所有者) 的控制者) 等于 用户
动作:
              如果 (Hp 等于 没有单位) 成立则 (设置 Hp = (触发单位)) 否则 (无动作)
              单位组 - 添加 (触发单位) 到 Gp
              -------- 设置复活时间为 等级*2 --------
              计时器 - 开启 ABC[((触发单位) 的自定义值)] ,计时方式: 一次性 时间设置: ((转换 ((触发单位) 的英雄等级) 为实数) x 2.00) 秒
              计时器 - 为 ABC[((触发单位) 的自定义值)] 创建计时器窗口,使用标题: (((触发单位) 的称谓) + 复活时间:)
              设置 ABC_W[((触发单位) 的自定义值)] = (最后创建的计时器窗口)
              -------- 选取下一个复活时间到期的英雄 --------
              单位组 - 选取 Gp 内所有单位做动作
                            Loop - 动作
                                          如果所有条件成立则做动作1,否则做动作2
                                                        If - 条件
                                                                      (ABC[((选取单位) 的自定义值)] 的剩余时间) 小于 (ABC[(Hp 的自定义值)] 的剩余时间)
                                                        Then - 动作
                                                                      设置 Hp = (选取单位)
                                                        Else - 动作
                                                                      无动作
[/trigger]
  计时器到期,英雄复活(是否感觉奇怪呢,因为这个触发器没有事件,其实在游戏运行中就会有了,在第一个准备工作的触发器中添加了):
[trigger]
事件:
条件:
动作:
              计时器 - 删除 ABC_W[(Hp 的自定义值)]
              英雄 - 立即复活 Hp 在 ((Hp 的所有者) 的游戏开始位置) , 显示 复活动画
              单位组 - 把 Hp 从 Gp 移除
              如果 ((Gp 为空) 等于 TRUE) 成立则 (设置 Hp = 没有单位) 否则 (设置 Hp = (Gp 中随机选取的一个单位))
              单位组 - 选取 Gp 内所有单位做动作
                            Loop - 动作
                                          如果所有条件成立则做动作1,否则做动作2
                                                        If - 条件
                                                                      (ABC[((选取单位) 的自定义值)] 的剩余时间) 小于 (ABC[(Hp 的自定义值)] 的剩余时间)
                                                        Then - 动作
                                                                      设置 Hp = (选取单位)
                                                        Else - 动作
                                                                      无动作
[/trigger]

第八节 完
回复

使用道具 举报

 楼主| 发表于 2008-6-30 19:26:05 | 显示全部楼层

第三章 ★ Trigger动作

占楼!
回复

使用道具 举报

 楼主| 发表于 2008-6-30 19:27:06 | 显示全部楼层

第三章 ★ Trigger动作

占楼2!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-11-21 22:59 , Processed in 0.199853 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表