魔兽地图编辑器倒计时定时器
触发器由三部分组成:事件、条件和动作。
Event:或trigger event,顾名思义,就是在事件发生时运行一个触发器。
条件:判断是否满足指定的条件。如果不满足,将不执行任何操作。您可以将其留空以指示直接执行该操作。一般来说,条件越多越容易出错,所以尽量只用一到两个条件。
动作:条件通过后做什么。
我用一个简单的例子来说明,比如一个英雄进入区域后赢得了游戏,那么就应该这样设定。
事件:一个单位进入该地区。
条件:判断该单位为回合英雄。
动作:游戏获胜。
在每个新地图中,都会有一个名为初始化的类,其中有一个名为war初始化的触发器,为每个地图设置默认的初始设置,包括:
使用一天中的近战时间(所有玩家)-启用默认的游戏开始时间。
限制每个英雄类型的英雄数量为1(适用于所有玩家)-限制玩家只能生产一个同类英雄。
英雄训练英雄一个城镇传送门卷轴(适用于所有玩家)-给英雄一个传送卷轴。
设置起始资源(针对所有玩家)-设置起始资源,并在开始时将每个玩家拥有的资源分配给他们。
从使用过的起点位置移除小兵和标准(对所有玩家)-移除野单位,障碍物等。在起点附近。
创建出发单位(针对所有玩家)-创建玩家在起点开始游戏所需的主基地和工人。
运行近战AI脚本——让所有电脑玩家在战斗游戏中执行人工智能。
强制胜利/失败条件-使用默认的胜利和失败条件,所有的建筑如果被摧毁都会失败。
如果你不需要它们,就删除它们。其实大部分RPG地图都不需要这些条件。
扳机的所有说明都是英文的,不过没关系。我为此专门做了一个中英文对照表,并在里面做了简要说明。请参考附录:msitstore: c: \ documents% 20和% 20设置\ c face \ desktop \学习教程\学习教程\第七天\第七天. CHM::/table . html " target = " _ blank " >触发中英文对照表。
此外,触发器中还有许多功能,如“最后创建的单位”,最后创建的单位。合理使用这些函数也是非常重要的,在触发器的使用中会广泛使用。
触发器的使用千变万化。在这一章中,我介绍一些常见的例子。希望大家对触发器的使用举一反三。
注意:类可以用中文命名,注释也可以用中文命名,但是触发器不能用中文命名!
例1一开始让玩家选择自己喜欢的英雄。
先说函数和msitstore: c: \ documents% 20和% 20 settings \ c face \ desktop \ learning tutorial \ The 7 day . CHM::/2nd _ var.html " target = " _ blank " >变量的使用。编辑器中也有很多内置函数。与变量不同,函数是固定的,不能改变。它最大的特点是所有的函数都有返回值,例如,“最后创建的单元”返回最后创建的单元;”触发单元”返回触发该触发器的单元,依此类推。现在我将向你介绍函数和变量的用法。
很多RPG地图让你选择一个英雄,英雄死了可以复活。这是一个很实际的例子,很多地方都可以用,但是怎么做呢?
首先,打开变量编辑器并创建一个新变量PlayerUnit,将类型设置为Unit。请参见basics:msit store:c:\ documents % 20和% 20 settings \ c face \ desktop \ learning tutorial \ learning tutorial \ the 7 day . CHM::/2nd _ var.html " target = " _ blank " >变量。
然后在地形编辑器中选择区域面板并添加三个区域。默认名称为“区域000”、“区域001”和“区域002”。
在单位面板上选择“中立无敌”,然后在“区域001”和“区域002”放置一个英雄,再选择“玩家1(红色)”放置一个精灵。
在触发器事件编辑器中添加一个新的触发器,命名为“ChooseHero1”,并添加一条指令。
触发事件
单位-单位进入区域
如果单位进入区域1,运行触发器。
点击区域打开如下对话框,选择“区域001”。
确认两次完成事件设置,现在创建一个新的条件。
情况
单位类型比较
确定被触发的单元类型是否是elf。
点击步兵单位类型对话框,选择暗夜精灵家族,然后选择精灵并确认。
现在该设置动作了,也就是给玩家一个英雄单位,并将这个单位存储在变量PlayerUnit中。
行为
单位杀伤
杀死小精灵,默认(触发单位)是指触发这个触发器的单位,也就是小精灵。
单位-创建一个单位
在“区域000”为玩家1创建一个英雄,如下图,(圣骑士0000的单位类型)这是为玩家创建的一个单位。按一下「选择单位」按钮,然后按一下地图上的圣骑士。玩家1(红色)表示这个单位给玩家1,(区域000的中心)创建地点在“区域000”的中间,默认建筑朝向这个单位的方向。
设置变量
此指令将最后创建的英雄分配给变量PlayerUnit。选择变量为PlayerUnit,然后将默认功能(触发单位)改为(最后创建的单位),其中(触发单位)表示触发这个触发器的单位,也就是已经被杀死的精灵,(最后创建的单位)表示最后创建的英雄。
特殊效果-在单位上创造特殊效果
为PlayerUnit制造传送特效,这句话只是为了好看。
点击能力\法术\夜精灵\闪现\ blinktarget.mdl选择特效模式。同时,这里还使用了变量PlayerUnit。
现在来评判第二个英雄,很简单。只需复制一个触发器,选择要复制的触发器“ChooseHero1”,然后点击粘贴,就会有一个与“ChooseHero1”相同的触发器。
然后点击复制的触发器,重命名为“ChooseHero2”,修改指令。只需将事件中的“区域001”改为“区域002”,然后将Cearte a单位说明中的“圣骑士”改为“山丘之王”即可。很简单。
从上面可以看出,如果要改变可以选择的英雄,只需要修改Cearte a单位命令中的英雄即可。使用变量后,无论选择哪个英雄,只需要为变量PlayerUnit创建特效,例2中的英雄复活时我可以直接调用变量PlayerUnit。
可见,为可能多次使用的对象创建变量是一个好习惯,合理使用会大大减少你的工作量。
如果要问,我想玩多人游戏怎么办?是不是每个人都很难设置一次?如果有10个英雄可供选择,***5个玩家,是否要设置10x5=50个触发器?其实这个问题很容易解决,一个函数在这里起到了关键作用。
首先要把变量PlayerUnit下的数组钩住,使其成为变量数组。
然后修改“unit-Cearte a Unit”,其中“玩家1(红色)”改为函数“将玩家指数转换为玩家”,再点击1将函数改为“游戏-玩家人数”(如下图),确认即可。
同样,修改“Set Variable”,变量会是“PlayerUnit [serial number]”的形式,只需将“serial number”改为“game-Number Of Players”即可。
“游戏-玩家数量”表示触发此触发器的玩家的序列号,因此“玩家[游戏-玩家数量]”是触发此触发器的玩家,使触发器能够自动判断哪个玩家选择了此英雄。调用变量时,只需选择数组的序列号。比如要调用玩家2的英雄,只需调用对应的变量PlayerUnit[2]。
如果不希望玩家选择同一个英雄怎么办?就加一句:
触发器-关闭
关上扳机。
此触发器返回当前触发器。该指令意味着关闭当前触发器,该触发器将不会被再次触发。这句话可以放在动作的任何地方,动作不会停止,所以建议放在第一行,避免其他玩家因为没有及时关闭而再次触发这个触发器。
你可以在地图上放更多的精灵来测试。
例2英雄死后等待120秒复活。
在第一个例子中,我们选择了一个英雄,并用变量PlayerUnit存储了这个英雄。现在我们需要做的很简单。
这里使用了一个常用的触发倒计时定时器。它的功能很简单,就是倒计时,但是用途很广。它可用于触发在特定时间后发生的操作,或定期发生的操作,等等。
为了判断复活事件,我把它分成两个触发器。第一触发器设置计时项目,第二触发器判断计时器时间是否结束。同时,这里需要定义两个新的变量,分别命名为Timer和TimerWindow。
一号触发器,名叫希罗迪。
触发事件
单位-玩家拥有的单位事件
玩家拥有的单位死亡。
情况
布尔比较
布尔值决定被触发的单位是英雄还是真的。
行为
倒计时定时器-启动定时器
启动计时器,单击计时器选择刚刚定义的变量计时器。一拍明显是翻译错误。在这里,您可以选择一个定时器或循环执行它。30.00是以秒为单位的计时时间,改为120。
倒计时定时器-创建定时器窗口
创建一个定时器窗口,(上次启动定时器)是上次定时器,也可以选择变量Timer,Title是标题,可以随意修改,这里我把它改成“英雄复活倒计时”。
设置变量
类似于示例1中单元变量的定义,变量TimeWindow被设置为最后一个定时器窗口。因为计时器窗口没有名字,选择它的唯一方法是用一个变量存储它。
触发器二,名为ReviveHero。
触发事件
计时器超时
如果计时器超时。
行为
英雄-复活(立即)
使存储在变量PlauerUnit中的英雄立即在“区域000”上复活。
倒计时定时器-破坏定时器窗口
销毁变量TimerWindow存储的timerwindow。
这里使用的变量存储对象,然后调用销毁方法。以后还会遇到很多类似的情况,也可以用这个方法来处理。
但偏偏雨渐渐下了起来。
小英六年级
UID 40453
精华0
整数5628
239后
功率1491
敏捷3183
智力715
声望0
生活10
魔法10
0金币
阅读权限50
注册时间2006-2-16
状态离线#6发表于2006年2月27日+06: 33数据采集短信。
如果玩家离开游戏,他的资源将与其他在线玩家平等共享。
玩过非常著名的玩家PK图《3C》的人大概都注意到了,当一个玩家中途离开的时候,他的钱会平分给线上的队友,这样可以减少失去队友的副作用。
这个例子用了一个很有用的循环指令,“对于每个(整数a) form x到Y,do (actions)”,意思是:设A=x到Y,x Y,因为X是递增的,所以永远不会循环小于Y,它会形成一个无限循环。为了防止这种情况,该命令将无效。
我们可以利用a的值每次都增加的这一特点来循环判断每个玩家的状态。然后,首先创建一个新的变量I,类型为整数值,用来存储临时数据。
Msit store: c: \ documents% 20和% 20 settings \ c face \ desktop \ learning tutorial \ learning tutorial \ the 7 day \ the 7 day . CHM::/images/exp03 _ 005.png " border = 0 >
触发事件
时间周期事件
因为玩家离线时没有触发事件,所以这里定义为每5秒触发一次。每次判断不需要有很短的时间间隔,这样只会增加计算量,你甚至可以设置成20秒判断一次。
行为
对于每个(整数A)形式1到2,do(动作)
假设只有两个玩家,整数A的值会从1增加到2。
Msit store: c: \ documents% 20和% 20 settings \ c face \ desktop \ learning tutorial \ learning tutorial \ the 7 day \ the 7 day . CHM::/images/exp03 _ 002.png " border = 0 >
If/Then/Else,多功能
If/Then/Else (If/Then/otherwise)的意思是:如果If条件成立,那么执行Then的动作;如果if条件不成立,则执行Else操作。“多功能”是指可以有多个功能,即可以执行多个条件和动作。
if-环境
玩家插槽状态比较
判断每个玩家的连接状态,(整数A)取变量A的当前值..
Msit store: c: \ documents% 20和% 20 settings \ c face \ desktop \ learning tutorial \ learning tutorial \ the 7 day \ the 7 day . CHM::/images/exp03 _ 001 . png " border = 0 >
然后-行动
设置变量
读取离线玩家的金钱资源,用变量I存储。
设置变量
把变量I平分,(玩家人数)就是统计在线玩家人数。
玩家组-选择玩家组中的每一个玩家,然后开始行动
选择所有在线玩家并进行操作。
单击“操作”添加操作:
玩家添加属性
给玩家添加资源,(挑选的玩家)表示选中的玩家。
否则-行动
什么也不做
什么都不做。
这个例子主要演示了以下几点,需要注意:
1.选择一个合适的时间间隔,可以把更多的资源留给其他必要的操作,这一点在你有很多地图触发器的情况下尤为重要,可以让你的地图操作更快。
2.虽然loop的功能很简单,就是在一个循环中执行命令,但是它的应用非常广泛,利用好它可以减少很多重复性的工作。
3.If/Then/Else语句可能是计算机语言中最常见的语句,因为它只有两种判断,要么“真”,要么“假”,这使得控制所有意外情况的处理成为可能。
但偏偏雨渐渐下了起来。
小英六年级
UID 40453
精华0
整数5628
239后
功率1491
敏捷3183
智力715
声望0
生活10
魔法10
0金币
阅读权限50
注册时间2006-2-16
Status Offline #7发表于2006年2月27日+06: 34数据采集短信。