DarkSheep:因为博客文本格式的问题,无法完美显示动作触发的层级关系,本羊尽量用截图作为补充。
这些动作不包括在各个分类中,但对于具体的执行却有至关重要的影响。如下表:
Do Nothing |
无动作 |
不做任何动作 |
Comment |
注释 |
仅用做分隔及说明 |
Custom Script |
定制脚本 |
自定义脚本 |
Wait |
等待 |
等待指定秒数后执行 |
Wait (Game-Time) |
等待(游戏时间) |
等待游戏中时间后执行 |
Wait For Condition |
等待条件 |
等待条件满足后开始计时 |
Wait For Sound |
等待音乐 |
等待音乐播放完毕后开始计时 |
Set Variable |
设置变量 |
为变量赋值 |
Skip Remaining Actions |
跳过余下动作 |
不再执行此动作以下的所有动作 |
1、注释的作用就是对你的触发做一下说明,特别是在动作复杂的情况下,添加一些注释会看得更加清楚,注释不会对动作本身的执行产生任何影响。
2、脚本就是利用触发器的API界面来运行JASS,但受限于API的功能,无法像JASS一样随性的书写,因此这个只能作为辅助动作来使用。
3、等待的话,就是在一定的时间或条件达成以后再执行下面的动作,一般情况下等待语句尽量少用,特别是在各个触发相互调用数据的时候,可能会造成冲突;当然,事情也并没有这么严重,等待的使用频率还是会很高的,必要的时候还可以用计时器。
4、设置变量,这个是非常重要的一个动作,其使用方式是赋值“设置 变量名=被赋值的同类型内容”,注意这里的“=”不是“等于”的意思,是把后面的数据赋值给变量,而使变量可以代替这个数据。
例如“设置 单位变量Unit=大法师0001”,那么再次对“Unit”变量赋值之前,对“Unit”的操作就等同于对“大法师0001”的操作。
不同的变量对应不同的数据类型,所以我们在需要对数据进行赋值到变量的操作的时候,先要确定这个数据是什么类型,然后再创建同一类型的变量来执行赋值语句。
5、跳过余下动作就是不再执行剩下的动作,在一个触发的动作中,也显得比较重要,一般是在达成一定的条件以后,跳过余下不再需要执行的动作,但有一点,在组动作执行的时候无效。
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循环就可以对每一个单位独立发布命令了。
DarkSheep:我们给例28的触发加个事件。测试结果:一次性刷出12个步兵,并且向目标区域移动攻击。
如果我们把创建1个步兵改成创建2个步兵,会变成什么样呢?答案是:刷出24个步兵,但是只有12个步兵会向目标区域移动攻击。这里就反映出551155大佬说的“最后创建的单位”只对应一个单位。虽然你创建了2个步兵,但是“最后创建的单位”只对一个单位发布命令。
例29:设定单位变量组保存步兵、女巫、骑士、火枪手四个单位类型,每五秒创建同一种类型12个单位,并命令他们攻击移动到区域000。
DarkSheep:这个触发要新增变量组,步兵、女巫、骑士这些单位都是游戏数据,不是放在地图上的具体化单位,所以我们在新增变量时选择:单位类型。如下:
[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]
DarkSheep:调整如下:
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)。
DarkSheep:这个触发执行起来没啥可视感。主要是想告诉我们整数变量每循环一次会加1。写的时候有2点要注意的:
1、新增整数变量
2、随机整数的选择
[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,还是会执行,直到条件达到为止。
第二节 ☆ 单位动作
单位动作是我们使用频率最高的动作,所以这里只是简单分析一下动作的使用方式,而在其它章节中,会多次使用这些动作。
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 |
设置建筑营救行为 |
设置营救后建筑颜色是否变化 |
营救是一种特殊状态,当开启营救状态以后,指定可营教的单位进入营救范围,就会改变这个单位所属(被营救,可设定营救后所属玩家),同时可以设定是否改变颜色等。
DarkSheep:我们可以搞个营救的触发玩下,如下:
事件
单位 - 任意单位进入 384.00 以 米纱 (等级 4) 0008 <预设> 为中心的范围内
条件
动作
单位 - 设置 米纱 (等级 4) 0008 <预设> 对 玩家1(红色)可营救的
单位 - 设置 米纱 (等级 4) 0008 <预设> 的营救范围为 384.00
单位 - 营救 米纱 (等级 4) 0008 <预设> ,改变所属为 玩家1(红色) 并 改变颜色
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 |
移除魔法效果 |
移除单位身上的魔法效果 |
移除持续魔法效果,第1个是全移除全部效果,第2个可以设定移除有益或有害的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) 点伤害,攻击类型: 法术 伤害类型: 普通
第三节 ☆ 英雄动作
英雄动作是单位动作的衍生动作,主要是针对英雄的特性来执行一些动作。
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)等。
第三节 完
玩家动作,针对“指定玩家”执行的动作,主要作用于属性的变化上面。
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生命,然后把这个科技给予所有需要受到影响的单位(单位编辑“使用科技”栏),同样可以设定攻击力等数值的科技。这样在必要的时候只要修改科技等级就可以达到改变难度的效果了。
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”。
DarkSheep:注意点:单位组的数组不√。
[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 |
设置同盟 |
设置玩家组中玩家的同盟 |
玩家组的操作方式和单位组基本相同的,而且在前面已经介绍过具体的玩家动作,所以这里就不再多解释了。不过有一点需要注意的,就是在对玩家组进行操作的时候,不能同时对玩家组中的玩家数进行判断。因为玩家组的执行方式是移出(就是把执行过动作的玩家移出玩家组),所以不要在执行玩家组动作时添加额外的操作,单位组不存在此问题。
物品动作就是单纯的针对物品进行动作,主要是体现物品本身的一些变化。
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:物品重叠,当带有使用次数的物品被捡取的时候,如果身上带有相同物品,会自动重叠在一起。
DarkSheep:这个药品叠加的触发有点复杂。注意点:第1个条件的条件类型是:整数,而不是布尔表达式。第2个条件的条件类型是:物品,而不是物品类型。动作1里的+,使用的是 数学 - 加 < + >。
[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 |
选取区域内物品做动作(单个动作) |
对区域内物品进行组操作 |
和单位组相同的组操作,只不过这里针对的是物品而已,不用多解释了吧^_^。
说是任务系统,其实大家需要明白一个道理“我们控制任务,并不是任务控制我们”,一个最常见的例子就是“杀死指定单位后游戏胜利”,这本身就是一个任务,目标是“杀死指定单位”,而任务结果或说奖励就是“游戏胜利”,只是一般情况下这个不显示,我们要做的,就是把任务显示出来罢了,决定权依然在你自己手中。
任务界面在游戏中按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为主线任务要求(项目)变量组。
DarkSheep:这个触发只是演示函数功能。在实际作图中,任务触发是由多个触发组成。
[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:设置任务的具体内容本来应该是需要用变量的,这样才可以在指定类型单位,比如守护龙人死亡以后对变量进行变化,然后刷新任务内容,这次为了简便直接写上数值了。设置项目完成也是在达到要求以后,修改项目说明然后设置项目为完成状态。
本次演示效果图:
第七节 完
倒数计时器,简单的说就两个功能:启动计时器和计时器到期。至于显示什么的,只不过是做为辅助功能,不管有没有显示,计时器还是一样在计时的,除非你让计时器停止了。
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[((触发单位) 的自定义值)] = (最后创建的计时器窗口)
-------- 选取下一个复活时间到期的英雄 --------
单位组 - 选取 Gxp 内所有单位做动作
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]
DarkSheep:自己亲手照着写了一遍,感觉以后能不自己写触发就不写,能复制过来用尽量复制……
下面这图看不清就动手下载一下吧:http://norpg.com/usr/uploads/2018/04/%E8%8B%B1%E9%9B%84%E5%A4%8D%E6%B4%BB.jpg
注意别忘了这些新增的变量,要分清计时器和计时窗口,单位和单位组。
<本教程完>