WorldEdit触发器(Trigger)浅析:第二章 ★Triggert条件

Trigger是由事件、条件、动作组成。条件是执行动作之前的门槛,正确的使用条件,对增加触发执行准确率有至关重要的影响。一个触发器可以添加多个条件,默认情况下条件是串行的(AND),也就是说,必须全部达成这些条件才会开始执行动作;也可以设定并行(OR),只需要达成一个条件就会执行动作。条件的内容取值于触发事件相关的函数,就像如果是玩家事件,就无法直接调用“触发单位”的函数。

说判断函数之前,先说一下“变量”,变量可以通过赋值来保存和调用数据。很多人可能对“变量”有些理解,却不知道“变量”可以调用哪一些数据。通过下面对一些条件的分析,大家应该可以比较清楚的理解“变量”可使用的一些类型。如果变量是布尔值,那么,这个变量的值就是TRUE(真)或者FALSE(假);如果变量是单位,那么这个值就是“指定单位”,已存在的单位;如果变量是单位类型,这个值就可以赋值我们在物体编辑器里设定的单位类型的数据,然后通过调用这些变量来创建新的单位。变量组是对变量的扩展方式,同一个变量组的变量类型相同,变量组的格式是“变量名[下标值]”,下标值必须为整数,每一个变量组中的变量都是独立的。

DarkSheep:这里的变量解释,一开始看不太明白。但是通过后面的学习,我知道了:
如果变量是单位,那么这个值就是“指定单位”,你只能选择你放在地图上的单位才行,没有放在地图上的单位不能被选择!
如果变量是单位类型,这个值就你就可以选择在物体编辑器里的单位,而不需要将它们放在地图上再选择!
具体的我们在混合刷兵那会有更深刻的理解。



第一节 ☆ 布尔值

Boolean Comparison
布尔值Boolean判断

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

单位类别检查,这个就是检查单位的分类,最常用的就是判断单位是否英雄。


例14:如果玩家1的英雄死亡,那么就让这个英雄在玩家1的初始地点复活。

[trigger]
事件:
单位 – 玩家1(红色) 的单位 死亡
条件:
((触发单位) 是 英雄) 等于 TRUE
动作:
英雄 – 立即复活 (触发单位) 在 (玩家1(红色) 的游戏开始位置) , 显示 复活动画
[/trigger]

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

DarkSheep:虽然这个例子比较简单,但是我打算详细的讲讲,涉及很多快速选择技巧。
1、主角准备。我们放个红色大法,2个中立英雄并一个一个双击设置为中立敌对。这样大法就死定了。

2、开始按照5511155大佬的文本写触发。

(1)设置事件。类型选:单位。

(2)条件就是布尔表达式。判断触发的单位是不是英雄。

(3)是(Ture)英雄的话,英雄就会复活。不是(False)的话,例如这个单位是个小兵,那么就不会复活。


例15:在(区域000内)的(玩家1)的(同盟,包含玩家1)的(英雄)死亡后复活在(各自的初始地点)。

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

第一节 完



第二节 ☆ 单位&单位类型
单位和单位类型是两个不同的概念,单位就是“指定单位”,具体化存在的单位;单位类型就是游戏中已设定的数据,可用来创建单位或判断条件。

DarkSheep:单位和单位类型和我在本章最开始解释变量和变量类型是同样的理解。

单位:你只能选择已经放在地图上的单位,例如你在地图上放了一个步兵,你只能选它,没办法选择弓箭手,因为弓箭手你没放在地图上(没有具体化存在),弓箭手只是游戏中设定的数据。

单位类型:你可以选择物体编辑器里的各种单位,而不需要将这些单位一个个放到地图上面。刷兵通常用单位类型。

先说一下单位,前面已经介绍过,单位的函数(设定好的数据调用方式)必须通过“单位事件”才可以调用,而且不同的单位事件对应不同的单位函数。除了一个总而概括的“触发单位”可以替代大部分的单位函数以外,跟据事件的不同,可调用的单位函数也是不同的。另外,在动作中也同样需要调用这些函数来执行动作。单位函数如下表:

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)。

DarkSheep:1、条件里“技能施放目标”明显说的是“单位”,“施放技能”则应该选择“技能”类。2、因为修改英雄的属性,所以,动作这里选择时应该选择“英雄”,而非单位。


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

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]

DarkSheep:“(XXXX)的类型”在选择条件类型““单位类型”时可以快速定位“指定单位的类型”。

第二节 完



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

玩家函数并不多,“选取的玩家”和“匹配的玩家”在后面的“玩家组”动作中会使用到;而转化索引就是把整数转换成玩家索引,在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]

DarkSheep:“(XXXX)的所有者”在选择条件类型“玩家”时可快速定位。


有很多人想知道怎么输入密码得到隐藏英雄;这,其实很简单。如果想多个玩家都可以获得,就要多添加几个事件才可以。

例20:当玩家1(红色)输入“SS”,创建一个“巫妖”给玩家1(红色)。

[trigger]
事件:
玩家 – 玩家1(红色) 输入的聊天信息包含 SS ,匹配方式: 完全匹配
条件:

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

[/trigger]

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

第三节 完



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

同单位一样,物品和物品类型分别是指存在的物品(指定物品)和物品类型的数据,而物品分类是指“可充的”或者“人造的”之类的归类,每个物品都可以调整分类。物品的函数表如下:

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

DarkSheep:上面触发咱们换一种写法,因为我找不到551155大佬的“装备合成”。我们按照下面这种写:

事件
单位 – 任意单位 获得物品
条件
(((触发单位) 物品栏第 1 格的物品) 的类型) 等于 大魔法师指环
(((操作物品的单位) 物品栏第 2 格的物品) 的类型) 等于 大魔法师指环
动作
物品 – 删除 ((操作物品的单位) 物品栏第 1 格的物品)
物品 – 删除 ((操作物品的单位) 物品栏第 2 格的物品)
英雄 – 创建 死亡面罩 给 (触发单位)

条件是这样选择产生的:物品类型-指定物品类型-单位持有物品

单位持有物品有2种,一定要保持一致性!不要用串了!


例23:英雄不管任何一件物品都只充许获得一个,再次捡到就被丢弃。

[trigger]
事件:
单位 – 任意单位 获得物品
条件:
(被操作物品) 不等于 ((触发单位) 所持有的 ((被操作物品) 的类型))
动作:
英雄 – 丢弃 (被操作物品),从 (触发单位) 身上
[/trigger]

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

DarkSheep:这个触发需要注意的2点:1、条件类型选择:“物品”。2、“不等于 ”后面选择“单位持有物品(指定类型)”

第四节 完



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

之所以把这三项放在一节里说,是因为它们有一定的共通性,在特定情况下可以相互转换。整数,我想大家都理解吧,标准的阿拉伯数字实数是带有小数点后两位数的,一般实数的作用于没有精确到整数的数值,比如游戏的时间以及单位的生命等都属于实数;字符串看似和前面两个数值没有关系,但在输出显示文本的时候,整数和实数必须要转换成字符串,而如果字符串的内容是数值的话,同样可以转换成整数或实数。

关于这三个分类的函数实在太多了>。<,而且这些内容的应用非常广,所以这里只是举一些实例来说明一些用法,只要你知道标准的数字就是整数,带小数点的就是实数,文本的就是字符串就OK了;达到必要条件的时候相互都可以转换。

24:当英雄“骑士”升级到20级的时候,自动转职成“圣骑士”。

[trigger]
事件:
单位 – 任意单位 提升等级
条件:
((触发单位) 的类型) 等于 骑士
((触发单位) 的英雄等级) 等于 20
动作:
单位 – 将 (触发单位) 替换为 圣骑士 使用 新单位的最大 生命和魔法
英雄 – 设置 (最后替换的单位) 的英雄等级为 1 , 隐藏 升级动画
[/trigger]

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

DarkSheep:上面这个触发咱们也得改动下。否则你用常规单位“骑士”是没办法转职的。

1、准备工作:在WE主界面-高级-游戏平衡性常数-将英雄等级上限都调到20级以上,这里我们调个30级。

2、然后我们写2个触发。如下:

触发1:我们通过敲指令的方式让大法升到20级。
事件
玩家 – 玩家1(红色) 输入 sj ,信息过滤方式 完全匹配
条件
动作
英雄 – 提升 大魔法师 0000 <预设> 的英雄等级到 20 , 显示 升级动画

触发2:大法升到20级满足转职的条件,直接替换为了10级血法师。

事件
单位 – 任意单位 提升等级
条件
((触发单位) 的类型) 等于 大魔法师
((触发单位) 的英雄等级) 等于 20
动作
单位 – 将 (触发单位) 替换为 血魔法师 使用 新单位的最大值 生命和魔法
英雄 – 设置 (最后替换的单位) 的英雄等级为 10 , 显示 升级动画


例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就有机率掉落“国王之冠”“死亡面罩”“能量之书”其中之一。随机数的用处很多,基本上一些带概率的事件都可以利用随机数来做,掌握随机数会让触发更加有意思。
第五节 完



第六节    ☆ AND&OR&废话

条件的内容的确还有,但一般都很少用到,所以这里就不详细介绍了,大体上和其它的几种条件比较的方式是差不多的,如可破坏物,就是指树或大门之类的,这种比较和单位比较没啥大的区别。再简单介绍一下条件的通配符。

“AND”就是“与”的意思,使用AND做为通配符连接两个条件的话,是并行的,也就是说,必须完全达成这些条件才可以执行动作,默认采用的是AND方式。“OR”就是“或”的意思,是串行的,OR中的条件只要达成一个,就会执行动作。这两个存在于条件的最下面,“标准”和“多个条件”的区别也只是在条件的数量上,默认的是两个,多个就不限数量了。

例27:当英雄“牧师”“法师”“祭祀”到10级以上的时候,获得“圣光的预言”,会转职成为“大预言师”。
[trigger]
事件:
单位 – 任意单位 获得物品
条件:
((触发单位) 的英雄等级) 大于或等于 10
((被操作物品) 的类型) 等于 圣光的预言
任一条件成立
条件
((触发单位) 的类型) 等于 牧师
((触发单位) 的类型) 等于 法师
((触发单位) 的类型) 等于 祭祀
动作:
单位 – 将 (触发单位) 替换为 大预言师 使用 新单位的最大 生命和魔法
英雄 – 设置 (最后替换的单位) 的英雄等级为 1 , 隐藏 升级动画
[/trigger]

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

第六节 完

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.