面板已经自动切换到区域面板(直接打开区域面板的快截键是R),点击面板上坐标样的按钮使之处于按下的状态,按住右键拖动鼠标在能量圆上画一个和能量圆大小差不多的区域出来,再次点击面板上的按钮使之处于弹起的状态,然后点选刚才放置的区域,会自动切换回触发编辑窗,红色字体部分也会被刚才所选的区域的名字取代,连续确定2次,事件便做好了。 接着是环境/Condition,选择<新环境 - 单位类型判断/New Conditions - Unit Type Comparison>,将进入区域的单位类型限制为“小精灵”
For each (Integer A) from 1 to 10, do (Actions) Loop - Actions
这样就将需要重复执行动作的次数定为10次,然后在Loop - Actions下面依次添加这些动作: Game - Display to (All players) the text: (String((Integer A))) (游戏 - 向所有玩家显示信息 :将作为循环序列的整数A的值转换为字符串类型[关于数据类型,这里不多做解释,大家只需要知道只有字符串类型的数据才能被作为信息显示出来就可以了]。在这里“作为循环序列的整数A”其实就是用来记录已经重复执行了多少次动作的一个数值。)添加这个动作的顺序为New Action(新动作) - Game(游戏) - TextMessage(Auto-Timed)(显示信息,自动调整信息显示时间) Wait 1.00 seconds (等待1.00秒,这样在每次执行动作以后都会间隔1秒才执行下一次动作)添加这个动作的顺序为New Action(新动作) - All(所有) - Wait(等待)。 然后在整个循环Action(动作)的后面(注意,是在整个For Each Integer的后面,不要添加到Loop - Actions下面去了)添加这个
Action(动作): Game - Display to (All players) the text: (finish) 作用是在整个循环结束以后显示一句话以标明循环结束了。当然其中的finish大家可以随自己爱好随意更改。
最后将Melee Initialization(地图初始化)这个触发删除掉,在地图上放置玩家开始点,按Ctrl + F9进游戏测试,可以看见在游戏中当按下ESC键以后会分10次每秒一次依次显示数字1~10,最后则会显示finish。通过这个例子可以很清楚的看出。For each (Integer A) from 1 to 10, do (Actions)这个动作可以让位于Loop - Actions下面的动作重复执行from 1 to 10中后面数字+1减去前面数字的次数,而当所有的重复次数被执行完毕以后,则会继续执行整个循环后面的动作。这样就很简单方便的实现了周期性事件的执行,但是用这个Action(动作)实现的周期性事件有两个弊端,第一是循环执行的次数有限,大家也看见了,在这个Action中无论如何也要求输入2个数字以确定执行次数;第二是每次执行动作之间的时间间隔有最小限制,在上面的例子中,大家将Wait 1.00 seconds(等待1秒)改为Wait 0.00 seconds(等待0秒)以后进入游戏测试,会发现即使是0秒,也会有微小的等待时间(大概0.1~0.4秒左右,视电脑配置而定),这样在执行某些重复时间间隔很小的周期性事件的时候,就完全无法实现了,对于必须排除以上两种限制的周期事件,就必须用到另外一种方法,periodic event(周期循环事件),和For each Integer不同的是,这是一个Event(事件)而不是一个Action(动作)。
Time - Every 1.00 seconds of game time (时间-每1.00秒游戏时间)作用很明显,就是每1秒都会执行一次Actions(动作)中包含的所有动作,Every 1.00 seconds中的数字用于指定每多少秒执行动作。对于这个事件的功能,我们仍然可以用1个简单的范例来说明。 --------------------------范例------------------------------------- 新建一个触发器,Event(事件)就用上面那个事件,将1.00调整为0.50,也就是每0.5秒执行1次,然后按下Ctrl+B打开变量编辑面板,(由于变量是第一次接触,所以我暂时不详细说明,大家按照我说的做就是了,以后会对变量和数据类型做详细介绍。)点击面板上方的绿叉按钮,在出现的窗口中下方的下拉菜单选择Integer(整数)然后在上面的输入栏中为这个变量随便起一个名字,[图:var.gif]这里我用的名字是i1便于下面统一介绍,这样就建立好了一个类型为“整数”型的变量。暂时将这个变量放在这里备用,回到刚才建的触发,在Actions(动作)类中添加如下动作: Set i1 = (i1 + 1) 添加顺序:New Action(新动作) - All(所有) - Set Varible(设置变量) 这个Action(动作)的作用是每次循环执行动作的时候让i1这个整数的值等于它当前的值+1,比方i1当前的值是5那么执行动作以后i1的值就是
5+1,也就是6。 接着添加: Game - Display to (All players) the text: (String(i1))
以上就是两种最常见的周期性事件的实现方法,那么在此理论基础上我简单叙述一下刷兵触发的原理。 刷兵触发就是一个周期事件,其动作的内容就是在指定位置创建单位,下面我简单的将这个触发写一下,并且加上少许说明。相信大家在对上面所讲的内容理解了的情况下应该立刻明白其中的道理。 Untitled Trigger 003 Events Time - Every 3.00 seconds of game time [这个就是前面讲到的周期事件,在这里将周期的时间间隔设置为3秒] Conditions (Farm 0009 is alive) Equal to True [这里Farm 0009 是一个农场,整个Condition(条件)的意思是,如果农场0009仍然生存,则继续执行Actions(动作)中的指令]添加这个Condition的方法是New Conditions(新条件) - Boolean Comparison(布尔判断,也就是逻辑判断) - 选择图示位置[图:boolean.gif] - Unit-Unit is Alive(单位 - 单位仍然生存) Actions Unit - Create 1 Giant Wolf for Player 1 (Red) at (Position of Farm 0009 ) facing Default building facing degrees [单位 - 为玩家1(红色)创建一只狼在农场0009所在的位置面向系统默认的方向] 整个触发如果用语言表达的意思就是,每隔3秒钟只要农场0009依然存活,就创建一只狼在农场所在的位置。 进入游戏进行测试以后,大家应该不难发现这个触发有这样一个弊端:创建的单位没有数量限制,哪怕地图上已经有了几百,几千只狼,只要农场0009仍然存活,就会不断有新的狼产生,对于这种情况,我们可以通过加入如下的一个简单条件来给予限制: (Number of units in (Units in (Playable map area) matching (((Unit-type of (Matching unit)) Equal to Giant Wolf) and (((Matching unit) is alive) Equal to True)))) Less than 5 整句条件的意思是,如果地图上所有存活的狼的数量小于5只,则继续执行Actions(动作)类中指定的动作。其中units in Units in (Playable map area) 就是指整个地图上的单位,而(Unit-type of (Matching unit)) Equal to Giant Wolf是指符合“单位类型为狼”这个条件的所有单位,(Matching unit) is alive) Equal to True是指所有“仍然存活”的单位。由于这个条件比较复杂,下面列出详细的添加方法: New Conditions(新条件) - Integer Comparison(整数判断)
- 在下拉菜单中选择“Unit in Region Matching Condition(区域内匹配条件的单位)”
Q:我已经把Player 1 的种族设成Human,为什麽进入地图的时候又变回Random? A:把Scenario => Force Properties => Fixed Player Settings打勾,如此一来,前面Player Properties设定的种族、操控者、颜色,都会被锁定
Q:如何在WE中的Object Editor输入负数而不会自动归零? A:因为B社担心一些非法数值会对游戏稳定度造成影响,因此限制了数值的范围。进入WE後,工具列File => Preferences => Allow negative real value in the Object Editor 打勾,就能在Object Editor中输入real负数而不会自动归零(Integer仍会自动归零)。另外,按住shift+enter再修改数值,不会受到任何限制。请注意,虽然可以输入数值而不被限制,不过如果因为非法的数值导致电脑读不出来,玩游戏时可能会当机。
Q:如何让玩家无法送钱给同盟? A:到游戏常数下,然後--Ally Trading Increment - Control Click(按Ctrl点滑鼠所加的钱数)设为0Ally Trading Increment - Normal
Click(直接点滑鼠所加的钱数)设为0
Q:为什麽WE中的单位资料会和Melee游戏不同?例如冰龙不是魔法攻击而是穿刺攻击、而弓手没有Elune's Grace被动技、……? A:找工具列的Scenairo => Map Options => Game Data Set。其中:Default:使用地图编辑器的资料。使用它有个好处是它不会随着改版而有任何变动Custom:最旧版的游戏资料Melee:最新版的游戏资料。选这个就要随着b社的改版而修改地图。
一张RPG地图不像对战地图那样各位玩家有自己的单位和部队,大部份的RPG地图都是以英雄作为自己的控制对像的,那么我们下面就说一下给玩家创建英雄单位! 首先将工具面板切换到区域面板,并在玩家开始点的地方画一个区域,命名为Heros!之后打开菜单栏的触发事件编辑器,打开后会有一个初始化的对战初始化的T,将它删除!然后自己新建一个类,之后在该类下新建触发器,命名为Create heros for players!选中你新建的T之后就会在右边出现相关信息窗口了,右上空白窗口可以自己写点提示说明之类的,下面的就是具体的T语句了!
事件-即一个事件或是任务、剧情的开始,也可以这样理解,举个例子,上课铃响了就是一个事件,或是早上8.00到了也是一个事件,这意味着接下来我们该上课了,也可以把事件理解成为导火索吧! 环境-相当于是条件,接着上面的例子来说,早上8.00到了,环境:如果是周一至周五。那么我们就得上学(班),如果是周末,我们就休息,也就是说不做出相应的动作!这里上学及上班就是动作! 动作-具体的各项命令,如上学,上班,吃饭等,当然这里是用现实生活中的例子来打比方!那么下面我们就来看一个例子以帮助大家理解这三个部份! 引用某位圣人的一个经典例子: 有一个花园,花园里面有一条狗! 事件-一个人进入花园 环境-此人是狗的主人 动作-狗摇尾巴 或者是 事件-一个人进入花园 环境-此人不是狗的主人 动作-狗就叫 这个就是一个简单的触发器了,下面就用WE中的具体事件来举个例子!就以3C的某个人的英雄被杀了而出现字幕来说明! 事件-a unit dies 一个单位死亡 环境-triggering unit is a hero = ture 死亡的单位为英雄单位 事件-游戏-Display to all players the text:name of owner of triggering unit + 的英雄被 + name of owner of killing unit + 打死了! 出现提示字幕 当然,在3C中还得有打死了一个英雄后对各位玩家的奖励和对打死英雄的玩家的特别奖励以及判断死亡英雄是否属于玩家控制等,这里就不讨论了,其实这些就是多个动作的运用了,基于新手对WE和知识的情况来考虑,本人只提供简单基本的触发器语句的教学,如果是自己想要更进一步了解更多的话则可以找一些其他的教程或是演示! 事件里面可以分为时间,单位,初始化等多个类型,各位可以打开WE里的触发器自己研究,环境和动作的内容则就更多了,在这里不可能都作介绍,这些都还得大家自己去研究学习了!
initializationActions Melee Game - Use melee time of day (for all players) //使一开始的游戏时间是早上一颗星(如果删
掉就会从00:00开始) Melee Game - Limit Heroes to 1 per Hero-type (for all players) //让所有玩家不能生产重覆的英雄
Melee Game - Give trained Heroes a Scroll of Town Portal (for all players) //让第一个生产出来的英雄有传送卷轴
Melee Game - Set starting resources (for all players) //让所有玩家一开始有一定的Gold和Lumber Melee Game - Remove
creeps and critters from used start locations (for all players) //如果某起始位置有玩家,就删除附近的Creep Melee
Game - Create starting units (for all players) //产生主城和工人於玩家的起始位置 Melee Game - Run melee AI scripts
(for computer players) //让电脑玩家有AI Melee Game - Enforce victory/defeat conditions (for all players) //使
用一般的胜利/失败设定(毁掉对方所有建 者胜)将蓝色的那一条删掉即可
Q:如何设定玩家的起始金钱和木材? A:新增一条Trigger--Init ResourceEvent Map initializationActions: Player - Set <游戏者> Current gold to
数量内容请自行根据需要修改
Q:要让被杀死的小兵掉钱,就像CREEP一样 ? A:在 Trigger Editor 里面用 Player - Turn Player Flag On/Off 开启金钱奖励,这样杀死该玩家的单位就有钱了。在 Unit Editor 里面用 Stats - Bounty Awarded - 来修改某杀死某单位的金钱数量。
Q:假设在一张 RPG 地图中,给每一位玩家一个工人,让玩家选英雄:Event Unit - A unit enters Action Unit - Create 1 for Triggering Player at center of facing ...为什麽单位进入该Region时没有反应? A:设定错误。由於引发事件的是单位,而不是玩家,所以 Trigging Player 无法表明到底是哪一个玩家。正确的设定方式如下:Event
Unit - A unit enters Action Unit - Create 1 for (Owner of (Triggering Unit)) at center
of facing ...
Q:为什麽这样写,游戏开始却看不到计时器出现? Init Timer Events Map initialization Conditions ActionsCountdown Timer - Start TimeRaminging as a One-shot timer that will expire in 660.00 secondsCountdown Timer - Create a timer window for (Last started timer) with title Time Left A:Map initialization是在loading时执行,所以你无法看到计时器出现。如果想在游戏一开始出现讯息、计时器、……之类的东西,必须用Time - Elapsed game time is 0.00 seconds 做为事件
Q:如何制作当玩家离线时分享控制权? A:Event:玩家离线 Action: Player - Pick 同盟 and do ( Player - For Triggering Player, Turn Share vision and full share unit to Picked Player )