魔兽地图编辑器倒计时定时器

触发器是事件编辑器的本质。各种任务、不同事件、成功/失败条件、天气变化等。都是由触发器引起的。

触发器由三部分组成:事件、条件和动作。

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数据采集短信。