魔兽争霸地图编辑器 倒数计时器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了魔兽争霸地图编辑器 倒数计时器相关的知识,希望对你有一定的参考价值。

那为高人指点一下
怎样才可以让游戏里显示
倒数计时器

触发器是事件编辑器的精髓所在,游戏中多样的任务、不同的事件、胜利/失败的条件、天气的变化等等这些全部都是触发器的功劳。
触发器由三个部分组成,事件、条件、动作。

事件:或称为触发事件,顾名思义,就是当某个事件发生的时候就运行触发器。

条件:判断是否达到指定的条件,如果没有达到条件将不执行动作。可以留空,表示直接执行动作。一般来说,条件越多越容易出错,所以尽量只使用一两个条件。

动作:条件通过后所要做的事情。

我用个简单例子来说明,比如一个英雄进入地区后游戏胜利,那么就要这样设置。

事件:一个单位进入地区
条件:判断单位是一个英雄为Turn
动作:游戏胜利。

在每个新建地图中都会有个叫做初始化的类,其中有个叫做对战初始化的触发器,它设定了每张地图默认的初始设置,其中包括:
Use melee time of day (for all players) - 启用默认的游戏中开始时间。
Limits Heros to 1 per Hero-type (for all players) - 限制玩家同一种英雄只能生产一名。
Hero trained Heroes a Scroll of Town Portal (for all players) - 给英雄一个传送卷轴。
Set starting resources (for all players) - 设置起始资源,给每个玩家分配一开始拥有的资源。
Remove creeps and critters from used start locations (for all players) - 移除开始点附近的野生单位、障碍物等。
Create starting units (for all players) - 在开始点上创建玩家开始对战游戏需要的主基地和工人
Run melee AI scripts - 让所有计算机玩家执行对战游戏人工智能。
Enforce victory/defeat conditions - 使用默认的胜利失败条件,所有建筑物被破坏即失败。

如果不需要,删除掉它们就可以了,事实上大部分RPG地图都不需要这些条件。

触发器的所有指令都是英文的,不过没关系,我专门为此制作了一个中英对照表,并在其中做了简要说明。请参阅附录:MSITStore:C:\Documents%20and%20Settings\cface\桌面\学习教程\学习教程\The7thDay\The7thDay.chm::/Table.html" target="_blank" >触发器中英对照表。

除此之外,触发器中还有很多函数,例如:"Last Created Unit",最后创建的单位。合理运用这些函数也是非常重要的,在触发器的使用中将会大量使用到这些函数。

触发器的使用是千变万化的,本章我介绍一些常见的例子,希望你能够举一反三,了解触发器的使用。

注意:类可以用中文命名,注释也可以用中文命名,但触发器不能用中文命名!

例一 开始时允许玩家选择喜欢的英雄。
这里要讲到函数和MSITStore:C:\Documents%20and%20Settings\cface\桌面\学习教程\学习教程\The7thDay\The7thDay.chm::/2nd_Var.html" target="_blank" >变量的运用。编辑器里还有许多内置的函数,与变量不同,函数是固定的不能够改变,它有一个最大的特点就是所有函数都有返回值,例如:"Last Created Unit"返回最后创建的单位;"Triggering Unit"返回触发此触发器的单位等等。现在我就为你介绍函数和变量的使用方法。
很多RPG地图都可以让你选择英雄,并且英雄死亡的时候能够复活,这是个非常实用的例子,很多地方你都能运用,但要怎么做呢?

首先打开变量编辑器新建一个变量PlayerUnit,类型设置为单位。可参阅基础知识:MSITStore:C:\Documents%20and%20Settings\cface\桌面\学习教程\学习教程\The7thDay\The7thDay.chm::/2nd_Var.html" target="_blank" >变量。

然后在地形编辑器中选择地区面板,添加三块区域,默认名字为"地区 000"、"地区 001"、"地区 002"。

在单位面板上选择"中立无敌意",然后在"地区 001"和"地区 002"上各放置一个英雄,然后选择"玩家 1 (红色)",放置一个小精灵。

在触发事件编辑器里增加一个新触发器,就命名为"ChooseHero1",并为加入指令。

触发事件

单位 - Unit Enters Region
如果单位进入地区1就运行触发器

单击Region出现以下对话框,选择"地区 001"。

两次确定后完成事件的设置,现在新建一个条件。

条件

Unit-Type Comparison
判断触发的单位类型是否是一个小精灵。

点击步兵出现单位类型对话框,选择暗夜精灵族,再选择小精灵后确定。

现在就要设置动作了,也就是给玩家一个英雄单位,并将这个单位储存到变量PlayerUnit中。

动作

单位 - Kill
杀死小精灵,默认(Triggering unit)表示是触发此触发器的单位,也就是小精灵。

单位 - Cearte a Unit
在"地区 000"当中创建一个英雄给玩家1,如下图修改,(Unit-type of 圣骑士 0000 <情报>)这是创建给玩家的单位,单击"选择一个单位"按钮,然后在地图上单击圣骑士,玩家 1 (红色)表示此单位给玩家1,(Center of 地区 000 <情报>)创建位置在"地区 000"正中,默认的建筑朝向单位面向哪个方向。

Set Variable
这条指令将最后创建的英雄赋值给变量PlayerUnit。选择变量为PlayerUnit,然后将默认函数(Triggering unit)改为(Last created unit),(Triggering unit)表示触发此触发器的单位,也就是已经被杀死的小精灵,(Last created unit)表示最后创建的英雄。

特效 - Create Special Effect On Unit
创建一个传送的特效给PlayerUnit,这句仅仅是为了好看。

点击Abilities\Spells\NightElf\Blink\BlinkTarget.mdl就能选择特效模型了,同时,这里也用到了变量PlayerUnit。

现在要判断第二个英雄,这很简单,只要复制一份触发器,选择触发器"ChooseHero1"点复制,然后点粘贴,就有了一份与"ChooseHero1"相同的触发器。

然后单击复制的触发器,将其改名为"ChooseHero2",并修改其中的指令,只用把事件中"地区 001"修改为"地区 002",然后再把Cearte a Unit指令中"圣骑士"改为"山丘之王"就可以了,很简单吧。

从上面可以看出,如果你想改变可选择的英雄时,只用修改Cearte a Unit这一条命令中的英雄就行了。运用了变量以后,不管你选择的是那个英雄,只用创建特效给变量PlayerUnit就行了,并且在例二英雄复活的时候我也就可以直接调用PlayerUnit这个变量。

由此可看出,为可能多次运用的对象创建变量是个很好的习惯,合理运用将大大减少你的工作量。

如果你想问,我要做一个多人游戏呢?难到每个人都要设置一次?如果有10个英雄可选,共5个玩家,难道要设置10x5=50个触发器?事实上这个问题很好解决,在这里一个函数起到关键的作用。

首先要把变量PlayerUnit下的数组打上钩,使其成为变量数组。

然后修改"单位 - Cearte a Unit",将其中的"玩家 1 (红色)"改为功能"转化 - Convert Player Index To Player",然后点击1,把功能改为"游戏 - Number Of Players" (如下图),确定。

同样修改"Set Variable",变量这时候变成了"PlayerUnit [序号]"的形式,把"序号"也改为"游戏 - Number Of Players"就行了。

"游戏 - Number Of Players"表示是触发此触发器的玩家的序号,所以"Player [游戏 - Number Of Players]"就是触发此触发器的玩家,这就使触发器能够自动判断是哪个玩家选择了这个英雄。在调用变量时只用选择数组的序号就行了,比如要调用玩家2的英雄,那么就只用调用对应的变量PlayerUnit[2]就行了。

如果你不想玩家选择相同的英雄呢?只要增加一句:

Trigger - Turn off
关闭触发器。

This trigger返回当前触发器,这条指令表示关闭当前触发器,触发器将不会再被触发。这句可以放在动作中任何位置,动作不会因此中止,所以建议放在第一条运行,避免因为没有及时关闭而导致其他玩家再次触发此触发器。

你可以多放几个小精灵在地图上测试。

例二 英雄死亡后等待120秒复活。
在例一里,我们选择了一个英雄,并且用一个变量PlayerUnit储存了这个英雄,现在要做的事情就简单了。
在这里要用到一个常用的触发器--倒数计时器,它的作用很简单,就是倒数计时,运用却很广泛。它可以用于触发器一定时间后发生的动作,或者每隔一定时间发生动作等等。

判断复活事件我将其分为两个触发器来做,第一个触发器设置计时的各个项目,第二个触发器判断计时器时间是否结束。同时在这里需要再定义两个新变量分别命名为Timer和TimerWindow。

触发器一,命名为HeroDied。

触发事件

单位 - Player-Owned Unit Event
一个玩家拥有的单位死亡。

条件

Boolean Comarison
布尔值判断触发的单位是一个英雄为真。

动作

倒数计时器 - Start Timer
开始一个计时器,点击Timer选择刚才定义的变量Timer,一次射击显然是翻译错误,这里可以选一次或循环执行计时器,30.00是以秒为单位的计时时间,改为120。

倒数计时器 - Create Timer Window
创建一个计时器窗口,(Last started timer)是最后开始的计时器,你也可以选择变量Timer,Title是标题,可任意修改,这里我改为"英雄复活倒计时"。

Set Variable
同例一的定义单位变量类似,设置变量TimeWindow为最后创建的计时器窗口,因为计时器窗口是没有名字的,所以要选择它的办法就只有用一个变量来储存它。

触发器二,命名为ReviveHero。

触发事件

时间 - Timer Expires
如果计时器Timer的时间结束。

动作

英雄 - Revive (Instantly)
使变量PlauerUnit存储的英雄立即在"地区 000"上复活。

倒数计时器 - Destroy Timer Window
销毁变量TimerWindow存储的计时器窗口。

这里用到的变量储对象,然后调用销毁的方法,以后会遇到很多类似的情况,也可以用这个方法处理。

但偏偏雨渐渐

小影六年级

UID 40453
精华 0
积分 5628
帖子 239
力量 1491
敏捷 3183
智力 715
威望 0
生命 10
魔法 10
金币 0 个
阅读权限 50
注册 2006-2-16
状态 离线 #6发表于 2006-2-27 16:33 资料 文集 短消息
例三 如果玩家离开游戏,那么他拥有的资源将平分给其他在线玩家。
玩过3C这张非常有名的玩家PK地图的人大概都有注意到,当有玩家中途离开的时候他的金钱会平分给在线的队友,这样做能够减少失去队友所产生的附面影响。
这例用到一个很有用的循环指令,"For each (Integer A) form x to y, do (Actions)",它的意思是:设A=x to y并且x < y,那么它将循环执行(y-x)次,第一次循环A=x,之后每次循环A的值将递增1,直到A=y。要注意,如果x > y,因为x是递增的,所以永远循环不到y,就会形成无限循环,为防止这种情况命令将会失效。

我们可以利用A的值每次递增的这个特性,来循环判断每一个玩家的状态。那么首先还是新建一个变量i,类型为Integer数值型的,用来储存临时数据。

MSITStore:C:\Documents%20and%20Settings\cface\桌面\学习教程\学习教程\The7thDay\The7thDay.chm::/images/Exp03_005.png" border=0>

触发事件

时间 - Periodic Event
因为玩家离线是没有触发事件的,所以这里定义为每5秒触发一次。每次判断的时间间隔没有必要很短,这只会增加运算量,你甚至可以设置为20秒判断一次。

动作

For each (Integer A) form 1 to 2, do (Actions)
假设只有两个玩家,循环执行判断语句,Integer A的值从1循环递增到2。

MSITStore:C:\Documents%20and%20Settings\cface\桌面\学习教程\学习教程\The7thDay\The7thDay.chm::/images/Exp03_002.png" border=0>

If/Then/Else, Multiple Function
If/Then/Else(如果/那么/否则)的意思是:如果If条件成立,那么就执行Then的动作,如果If条件不成立,那么就执行Else的动作。"Multiple Function"表示可以有多个函数,即是可执行多个条件和动作。

If - 环境

Player Slot Status Comparison
判断每个玩家的连接状态,(Integer A)取的是变量A的当前值。

MSITStore:C:\Documents%20and%20Settings\cface\桌面\学习教程\学习教程\The7thDay\The7thDay.chm::/images/Exp03_001.png" border=0>

Then - 动作

Set Variable
读取离线玩家的金钱资源,用变量i储存。

Set Variable
将变量i平分,(Number of players)表示统计在线的玩家数量。

玩家组 - Pick Every Player In Player Group And Do Action
选择所有在线的玩家,并做动作。

点击Action增加动作:

玩家 - Add Property
增加资源给玩家,(Picked player)表示所选择的玩家。

Else - 动作

Do nothing
什么也不做。

本例主要演示了以下几点,需要注意:

1. 选择合适时间间隔可留下更多资源做其他必要的运算,如果你的地图触发器非常多的话这点尤为重要,这能使你的地图运算速度更快。

2. 循环虽然功能很简单,就是循环执行命令,但是运用很广泛,善加利用可减少大量重复的工作。

3. If/Then/Else语句恐怕是计算机语言中最常见到的语句了,因为它只有两种判断,不为"True(真)"即为"False(假)",这就使得它可以用来控制一切意外情况的处理。

但偏偏雨渐渐

小影六年级

UID 40453
精华 0
积分 5628
帖子 239
力量 1491
敏捷 3183
智力 715
威望 0
生命 10
魔法 10
金币 0 个
阅读权限 50
注册 2006-2-16
状态 离线 #7发表于 2006-2-27 16:34 资料 文集 短消息
参考技术A 用触发器:

触发器
事件:(你需要的事件)
条件:(你需要的条件)
动作:创造"计时器"为了(玩家?)时间 n秒
显示 "最后创造的计时器"
等待n秒
隐藏 "最后创造的计时器"

但这只适用于同时出现一个计时器
多个计时器同时存在要用变量(就是将引号内的内容替换为同一个变量)本回答被提问者采纳
参考技术B 事件:
Map Initialization 地图初始化
Destructible Doodad - Destructible Doodad Dies 可破坏物体被摧毁
Destructible Doodad - Within Region Dies 在区域中被摧毁
Dialog - Dialog Button Click 按下对话按钮
Game - Time Of Day 游戏中时间
Game - Value Of Real Variable 实数变量Real数值
Game - Load 读取
Game - Save 保存
Game - Hero Abilities Button Clicked 按下英雄升级技能按钮
Game - Build Structure Button Clicked 按下建造按钮
Player - Chat Message 聊天信息
Player - Cinematic Skipped 跳过电影
Player - Selection Event 选择事件
Player - Keyboard Event 键盘事件
Player - Properties 资源
Player - Alliance Change(Any) 同盟改变 (任何)
Player - Alliance Change(Specific) 同盟改变 (指定)
Player - Victory 胜利
Player - Defeat 失败
Time - Time Elapsed 时间经过
Time - Periodic Event 周期性事件
Time - Timer Expires 计时器过期
Unit - Specific Unit Event 特定单位事件
Unit - Player-Owned Unit Event 拥有单位事件
Unit - Generic Unit Event 一般单位事件
Unit - Unit Enters Region 单位进入区域
Unit - Unit Leaves Region 单位离开区域
Unit - Unit Within Range 单位在范围中
Unit - Life 生命
Unit - Mana 法力
环境:
Boolean Comparison 布尔值Boolean判断
Ability Comparison 技能判断
Destructible Comparison 可破坏物体判断
Destructible-Type Comparison 可破坏物体类型判断
Dialog Button Comparison 对话按钮判断
Game Difficulty Comparison 游戏难度判断
Game Speed Comparison 游戏速度判断
Hero Skill Comparison 英雄技能判断
Integer Comparison 整数Integer判断
Item Comparison 物品判断
Item-Class Comparison 物品种类判断
Item-Type Comparison 物品类型判断
Melee AI Comparison 多人对战AI判断
Order Comparison 命令判断
Player Comparison 玩家判断
Player Color Comparison 玩家颜色判断
Player Controller Comparison 玩家控制判断
Player Slot Status Comparison 玩家在线状态判断
Race Comparison 种族判断
Real Comparison 实数Real判断
String Comparison 字符串String判断
Tech-Type Comparison 科技类型判断
Trigger Comparison 触发器判断
Unit Comparison 单位判断
Unit-Type Comparison 单位类型判断
And 与
Or 或
And, Multiple Conditions 与,多个条件
Or, Multiple Conditions 或,多个条件
动作:
普通 一些基本的未分类指令
AI AI 设定计算机控制的单位的人工智能
Animation 动画 单位所能做出的动作
Camera 镜头 设定摄像机的位置及改变方式
Cinematic 电影 设定游戏中即时演算的过场动画
Countdown Timer 倒数计时器 又称定时器或计时器,用于倒数计时或定时发生事件
Destructible Doodad 可破坏的 设定可破坏物体的状态
Dialog 对话 设定对话框的显示/隐藏、标题、按钮、内容及清除
Environment 环境 设定天气和环境
Floating Text 飘浮文字 可以飘浮在屏幕上任何位置的文字
Game 游戏 设定游戏相关属性
Game Cache 游戏缓存 将对象当前状态储存在文件中,可用于其他地图调用
Hero 英雄 设定英雄的所有状态
Item 物品 设定物品的使用及状态
Leader Board 排行榜 悬浮在右上角的文本框
Melee Game 对战游戏 设顶多人对战游戏的初始状态
Neutral Building 中立建筑 设定中立建筑的状态
Player 玩家 设定玩家拥有单位的属性及状态
Player Group 玩家组 设定玩家组中各个玩家的属性及状态
Quest 任务 设定任务提示窗口及主次任务
Region 地区 设定规划区域内触发的事件及环境
Selection 选择 设定选择选项
Sound 声音 设定游戏进行中声音的控制
Special Effect 特效 设定显示特效
Trigger 触发器 设定触发器的状态
Unit 单位 设定单位的属性及状态
Unit Group 单位组 设定单位组的属性及状态
Visibility 可见 设定区域可见模式
单位:
Create Unit Facing Angle 创建单位并指定面向角度 创建单位,并指定其面向角度
Create Unit Facing Point 创建单位并指定面向点 创建单位,并指定其面向点
Create Corpse 创建尸体 创建单位的尸体
Create Permanent Corpse 创建永久的尸体 创建永久存在的尸体
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 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 增加到期的定时器 增加到期的定时器
Make Unit Explode On Death 成为爆炸式死亡单位 使单位死亡方式成为以炸开形式死亡
Suspend Corpse Decay 暂缓尸体腐烂 让尸体腐烂暂缓
Reset Ability Cooldowns 重设技能冷却 恢复技能冷却到默认值
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 设置建筑营救行为 设置营救后建筑颜色是否变化
Enable/Disable Supply Usage 开启/关闭人口上限 开启/关闭人口上限
Make Unit Face Unit 使单位面向单位 使单位面向单位
Make Unit Face Point 使单位面向地点 使单位面向地点
Make Unit Face Angle 使单位面向角度 使单位面向角度
Set Movement Speed 设置移动速度 设置移动单位速度
Turn Collision On/Off 碰撞开/关 设置单位是否可与其他单位重叠
Set Acquisition Range 设置获得范围 设置单位的获得物品范围
Set Custom Value 设置自定义数值 设置自定义数值
Remove Buffs 移除持续性魔法 移除单位上的持续性魔法
Remove Buffs By Type 移除持续性魔法类型 按类型移除单位上的持续性魔法
Add Ability 增加技能 增加单位的技能
Remove Ability 移除技能 移除单位的技能
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 建造的命令 执行建造的命令
基本上就是这些了......
参考技术C 定义一个Timer型变量和TimerWindow类型变量。
在某些事件中就可以开启Timer,并产生TimerWindow。
当Timer结束时可以销毁TimerWindow。
很简单的啊。
参考技术D 先自定义一个变量,类型为倒数计时器
触发
创建倒数计时起(你自定义的那个变量)
开启为一次射击XX秒

魔兽争霸地图编辑器如何制作白虎

就是把月之女祭司从白虎身上拿掉,让它看起来跟火影忍者羁绊2.0里的那个白虎一样。

RPG地图制作教程
教你如何做自己的RPG-----制图教学 说到魔兽争霸3大家肯定不会陌生,那么各位在玩过特色各异的地图以后有没有想过自己动手做一张地图?摇头拒绝的家伙们听我把话说完,其实做一张地图并不是各位想象的那么困难。下面我将会简单介绍一下集合了几种常见功能的地图的制作方法,有兴趣的朋友不妨跟着做做。
这次要做的是一个3C中的人物选择功能,也就是当小精灵进入能量圆的时候选择对应的英雄,这是一个3C最普通的选人功能。那么动手了。
首先找到地图编辑器,编辑器位于魔兽目录下,名为WorldEditor.exe(世界编辑器),双击打开。第一次使用地图编辑器,系统会自动为我们创建一张64*64大小,环境为罗丹仑的夏天的新地图。如果想要手动创建新地图,可以通过点击菜单栏的文件 - 新地图/File - New Map来创建。如果想要关闭在打开编辑器的同时创建新地图的功能,可以同过选择文件 - 参数设置 - 常规 - 打开时创建新地图/File - Preferences - General - Create a new map on start_up,将前面的勾去掉来实现。
地图创建完毕以后看见的就是这个地图编辑器的组成了,按2下G关闭坐标格的显示。在制作上面提到的功能以前,让我们先做点准备工作。首先既然是选择英雄,那么英雄自然是必不可少的,按U打开单位编辑面板,在这里可以选择我们所希望的单位放置到地图上,我选择了恶魔猎人(Demon Hunter),血巫师(Blood Mage)和巫妖王(Lich King),当然各位如果看上其他英雄请随意,这并不会影响后面的制作。顺便说说在单位面板中切换种族的方法是在第三行左边的那个扩展菜单里面选择希望的种族,由于选择英雄的时候所看见的英雄是不被我们控制的,必须选择了以后才能控制,因此一般的做法是将英雄更改为中立单位,更改的方法是双击放置在地图上的英雄,选择常规 - 玩家 - 中立无敌意/General - Player - Neutral Passive。注意各英雄之间不要间隔太远,否则让小精灵跑来跑去的很麻烦。放好英雄以后当然还要在英雄面前放个能量圆作为小精灵进入选择用,能量圆可以在单位面板的中立敌对分支中找到。最后再放上选英雄用的小精灵,由于多个玩家的选择英雄的原理是相同的,所以这里我们只做3个玩家的选择,因此只放属于3个势力玩家的小精灵。如
工作就算是完毕了,接着开始做功能部分,要用到触发器。
由于是初次介绍,为了不扰乱大家的思维,所以我对触发器的原理不做太多的介绍,大家只需要知道触发器的作用就是可以以事件的方式来实现一些功能就可以了。按F4打开触发器编辑器/Trigger Editor,删除默认的那个触发器,那是为MEELE准备的。可以看见在魔兽地图编辑器中,一个触发器是由事件(Events),环境(Conditions),动作(Actions)三部分左右,这三个部分之间的关系可以用一个简单的例子说明:“火药接触火以后爆炸”。在这里,火药与火接触就是事件,只有二者接触才会发生以后的动作;而火药接触的对象必须是火才会爆炸,所以火在这里作为环境,限制火药爆炸需要的条件;火药爆炸就是动作,是在与火接触以后引发的动作。在触发器里面我们可以根据需要自己修改事件,环境,动作这三部分的内容,比如可以将火药与火接触爆炸改为与水接触爆炸。那么有了以上概念,来看看选择英雄的制作方法,首先英雄必须在发生了一个事件以后才会被选择,而这个事件在这里就是:小精灵进入能量圆;但是在这里必须限制只有小精灵进入能量圆的时候英雄才会被选择,其他种类的单位进入则什么都不会发生,于是整个触发的环境 - 也就是限制条件也有了,就是:进入能量圆的单位类型是“小精灵”;最后就是动作了,英雄被选择,其实选择英雄的动作就是把英雄的从中立单位更改为玩家势力控制的单位。把上面所说的步骤以触发的方式写出来就是这样的:
事件(Events)
一个单位进入能量圆范围内

环境(Conditions)
进入的单位的类别是“小精灵”

动作(Actions)
把能量圆对应的英雄的控制者改为选择英雄的玩家

现在再按照写出来的触发在地图编辑器中寻找对应的选项。
创建一个新的触发/New Trigger,方法是在触发编辑器右方的窗口中按鼠标右键选择新<触发器/New Trigger>,新触器发会被自动命名为“为命名触发00X”,触发器的名字可以通过在选择触发以后按F2来修改。然后点击新建的那个触发,在右下方的触发编辑窗口中鼠标右键,选择 新事件/New Event,在出现的选单中选择 单位 - 单位进入区域/Unit - Unit Enters Region,接着点击红色字体部分 - 选择区域/- Select Region,这时候窗口会自动切换到大地图,要求我们选择一个区域,这里要解释一下在魔兽中,我们平时所看见的例如进入能量圆,或者进入花园,进入洞穴诸如此类“进入某个地点”的情况,其实并不是进入了我们看见的地方,而是进入了事先放置在能量圆,花园,洞穴等位置上的一个区域(Region)。而现在我们要做的正是放置这么一个区域并且在事件中选择他作为小精灵进入的区域,在大地图上可以看见

面板已经自动切换到区域面板(直接打开区域面板的快截键是R),点击面板上坐标样的按钮使之处于按下的状态,按住右键拖动鼠标在能量圆上画一个和能量圆大小差不多的区域出来,再次点击面板上的按钮使之处于弹起的状态,然后点选刚才放置的区域,会自动切换回触发编辑窗,红色字体部分也会被刚才所选的区域的名字取代,连续确定2次,事件便做好了。
接着是环境/Condition,选择<新环境 - 单位类型判断/New Conditions - Unit Type Comparison>,将进入区域的单位类型限制为“小精灵”

其中Entering Unit的意思是“进入单位”这里指进入区域的单位,Equal to的意思是“等同于”。
最后是动作/Actions, 在这里先整理一下有哪些动作需要执行:

1,由于选择好英雄以后小精灵会消失,所以在动作的开头要从游戏中移除小精灵。
2,更改被选英雄所属的势力为玩家操纵的势力。
3,将选好的英雄移动到指定位置,也就是3C中的基地。
4,由于英雄只能被选择一次,所以在动作的最后要关闭整个触发使之不再执行。
对应以上4条的动作分别是:
1,新动作 - 单位 - 移除 - 从游戏中移除进入单位/New Action - Unit - Remove - Unit - Remove (Entering unit) from the game
2,<新动作 - 单位 - 改变拥有者 - 改变恶魔猎人的拥有者为进入单位的拥有者并且改变颜色/New Action - Unit - Change owner - Unit - Change ownership of Demon Hunter 0002 <gen> to (Owner of (Entering unit)) and Change color
3,新动作 - 单位 - 移动 - 移动恶魔猎人到区域001的中心/New Action - Unit - Move Demon Hunter 0002 <gen> instantly to (Center of Region 001 <gen>)当然区域001也是自己创建的区域;
4,新动作 - 触发 - 关闭此触发/New Action - Trigger - Turn off (This trigger)

这样整个触发就完成了,对照这个触发再将选择另外2个英雄的也完成。最后保存地图,保存的时候会提醒你为每个势力放置开始点,如果没有放置,会自动为你在地图任意区域放置,手动放置的方法是在单位面板中选择开始点的图标然后进行放置。保存地图以后按Ctrl + F9测试一下吧~。另外别忘记在菜单栏设定 - 玩家/Scenario - Player>中将势力2和3的控制者设置为玩家/User,否则在游戏里就不能选择势力2,3了。

刷兵(有的地方把这个叫做孵蛋,我完全不能理解…………)。简单解释就是每隔一定时间产生一些单位在基地附近,那么废话不多说,下面开始介绍怎样制作。

大家都知道在3C中兵是每隔一定时间就会自动产生的,在触发器中,我们将这种每隔固定时间就会自动发生一次的事件叫做“周期性事件”,一般来说经常通过以下两种途径来实现事件的周期发生:
==========================方法1=========================================
第一种是通过触发器中的循环事件来实现的(也有将这个叫做回圈的),在触发器中新建一个Action(动作),在下拉菜单中找到这样的句子——For Each Integer A,Do Multiple Actions(对于所有的整数数值A,执行若干动作),点击确定以后会看见在Actions(动作)这个类下面已经增加了这样的一个Action(动作):

For each (Integer A) from 1 to 10, do (Actions)
Loop - Actions
(对于所有的整数值A,从1到10,执行动作 循环 - 动作)

我详细解释一下这个Action的作用,For each (Integer A) from 1 to 10(对于所有的整数值A,从1到10)的意思是重复执行10次Loop -

Actions(循环 - 动作)中指定的Actions(动作),同样的道理如果将后面的from 1 to 10(从1到10)改成from 1 to 20(从1到20)那么就

会重复执行20次动作,假设是from 5 to 10则只会执行5次动作,至于为什么不直接用from 1 to 5来代替from 5 to 10,这是在某些时候必须

用到的功能,至于具体使用的时机,为了不使大家头脑混乱,现在暂时不做解释,等到实际使用中遇到类似情况再做说明。
--------------------------范例-------------------------------------
现在为了更形象的说明这个功能,我们来做个简单的范例,按F4打开触发器编辑器,新键一个Event(事件):Player - Player 1 (Red)

skips a cinematic sequence“玩家 - 玩家 1(红色)跳过一段电影序列”,这个事件的建立方法是鼠标右键 - New Event(新事件) -

Player(玩家) - Cinematic Skipped(电影被跳过),这个事件的作用是当玩家1按下ESC键的时候就会触发动作。接着增加一个动作

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(动作)。

==========================方法2=========================================
添加这个事件的方法:New Event(新事件) - Time(时间) - Periodic Event(周期事件),添加完成以后可以看见在Event这一类下面出现了这样的Event(事件):

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

添加方法同上,作用是显示i1的值。
然后进入游戏测试,会看见在游戏中将自动以每0.5秒的速度显示数字,数值为上一次显示的数字+1。由此总结出Periodic Event(周期循环事件)的特点是会在激活触发以后以Event(事件)中规定的时间间隔来重复执行Actions(动作)中包含的所有动作,并且只要该触发没有被关闭,就会一直执行下去。
========================================================================

以上就是两种最常见的周期性事件的实现方法,那么在此理论基础上我简单叙述一下刷兵触发的原理。
刷兵触发就是一个周期事件,其动作的内容就是在指定位置创建单位,下面我简单的将这个触发写一下,并且加上少许说明。相信大家在对上面所讲的内容理解了的情况下应该立刻明白其中的道理。
Untitled Trigger 003
Events
Time - Every 3.00 seconds of game time [这个就是前面讲到的周期事件,在这里将周期的时间间隔设置为3秒]
Conditions
(Farm 0009 <gen> is alive) Equal to True [这里Farm 0009 <gen>是一个农场,整个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 <gen>) 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(区域内匹配条件的单位)”

- 在下拉菜单中选择“And” - 点击“Condition1(条件1)” - 在下拉菜单中选择“Unit-Type Comparison(单位-类型判断)”

- 点击“Triggering Unit(触发单位)”将之改为“Matching Unit(匹配单位)” - 连续确定2次,点击“FootMan(步兵)”将之改为你在Action(动作)中所指定的生产单位种类,在这里我选择的是“狼” 接下来点击“Condition2(条件2)” - 点击图示位置[图bolc.gif] - 在下拉菜单中选择“Unit is Alive(单位仍然存活)” - 点击“Triggering Unit(触发单位)”将之改为“Matching Unit(匹配单位)”,连续确定2次

最后一直点击确定回到第一层菜单将中间的“Equal to(等同于)”改为“Less Than(小于)”,再点击最后那个0将其改为你所希望的最大出兵数量,到此整个Condition(条件)就完成了
以上就是一个限制了出兵最大数量的刷兵触发的基本原理,但是在实际制作中并不是这么简单,对应很多情况需要做出调整,有兴趣的可以自己去研究研究。

Q:什么是Object Editor?

Object Editor就是对象编辑器,其中包含了单位编辑器,技能编辑器,装饰物编辑器,科技编辑器等,可以允许地图制作者修改已有的上述对象或者建立新的对象。
打开对象编辑器的方法是在地图编辑窗口按F6或者点击快截工具栏中的头盔样按钮。

Q:什么是Trigger?

Trigger就是触发器,在地图编辑窗口按F4或者点击快截工具栏中的带有a字的按钮即可打开Trigger Editor(触发器编辑器)。
触发器是地图编辑器中用于控制地图中所发生的事件的工具,一个基本的触发器由Event(事件),Condition(环境/条件),Action(动作)三部分组成。下面用一个简单的例子来说明这三部分之间的关系:“你在此论坛提出的有价值的问题都会得到解答”
如果将上面这句话看做一个触发器,那么“你提出问题”就是整个触发器的Event(事件),接下来要发生的一切,不管是“我们为你解答问题”或者“我们不理会你”,都是在“你提出问题”之后发生的。
而限制你所提出的问题是否会得到解答的条件则是“你提出的问题有价值”,也就是整个触发器的条件,这个条件直接影响你“是否得到我们的解答”。
最后,当你提出的问题满足“有价值”这个条件的时候,就会发生“我们为你解答问题”这个动作,也就是整个触发器的动作。

Q:什么是JASS?

JASS是用于编辑地图的一种简单的语言,可以说是文本化以后的触发器(地图脚本:MAP SCRIPTS),但是由于触发器并没有提供JASS所具备的

所有功能,所以可以说JASS在某种意义上是触发器功能的扩展。
编辑JASS可以通过以下三种途径:
1, 在触发编辑器(TRIGGER EDITOR)中,通过 MENU -> EDIT -> CONVERT TO CUSTOM TEXT 可以将当前选定的触发转换成脚本模式,也就是以JASS编辑的模式。
2,在触发编辑器中点击触发树(TRIGGER TREE,就是最左边列出所有触发的地方)的最顶端地图名,可以进入自定义脚本功能块,在这里可以用 JASS 写需要的函数,并且在其他的触发器中通过命令来调用。
3,使用 ACTIONS 中的 CUSTOM SCRIPT 动作可以在触发中插入一行 JASS 脚本代码。

Q:什么是“高级-游戏平衡常数”(英文名称Advanced - Gameplay Constants)

最上方菜单左起第7个菜单上数第4个选择,这个选项里面包括了很多不能用T修改但是很有用的设置。比如买卖东西的距离,各种攻击类型对防御类型的伤害,英雄的等级经验复活数据等等。

Q:地图扩展名中的w3m,w3x,w3n,w3g分别是什么意思?

w3m:混乱之制(roc)版本的地图。
w3x:冰封王座(tft)版本的地图。
w3n:战役地图,这类地图必须放在War3(魔兽)目录下的Campaigns(战役)文件夹中才能使用。
w3g:游戏录象,位于War3(魔兽)目录下的Replay文件夹下。

E:地图类型解释

Melee - 对战地图,即 War3 默认的游戏方式,BN Ladder 指定游戏类型。
Non-Melee - 除了 melee 以外的所有类型统称。
Custom - 非官方地图,但是通常表示 非官方的 non-melee 地图。
RPG - Role Play Games(角色扮演)~~但是现在很多人把所有 Non-Melee 地图都叫成 RPG。
Mini - 迷你游戏,通常指没有突出剧情、快节奏、游戏周期短的地图,没有固定的游戏方式,不含 rpg 。
Offence - 通常是对抗性地图统称,有时也表示一些进攻npc为主题的地图。
3C - Offence 的一种,本来只是一个地图的名称,通常是指 有 3条进攻路线的 Offence 。
Arena - Offence 一种,竞技场,通常是指选定英雄后在固定区域内进行决斗的地图。
Defence - 通常是指防守性地图统称,有时候也表示一些在非平衡的 NPC进攻前提下的防守与反攻。
TD - Defence 的一种,建造 Tower(炮台) 防守 NPC 有规律的进攻。
Cutscene - 通常是指剪辑影片,内容比较简单。(非 CG )
Cinematic - 通常是指完整影片,内容比较丰富。(非 CG )

常见问题解答

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:
关掉笔刷--把工具列的Windows => Brush List关掉。可以大幅提升速度。
减少自订资料--在Object Editor(物件编辑器)允许自订物件,但是自订的物件越多,WE就会越lag,其中尤以自订单位的影响最严重。笔者曾经建立200多个自订单位,结果WE速度大约慢到剩1/3,而且按什麽钮都会lag一下;后来把自订单位删掉,直接修改内建的单位,速度就大幅地改善了。所以,尽量直接修改内建的物件(含单位、可破坏物件、物品、技能、……等),少用自订物件。减少预置的物件--放置的单位、物品、可破坏物件和饰物放得越多,WE的速度就越慢(但是并不明显)。区域、摄影机和地形的影响则很小,几乎可以忽略。

Q:为什麽在测试地图时,所有的随机数值都一样?例如武士(Footman, dmg=12~13)第一次攻击一定是12?
A:进入WE后,工具列File => Preferences => Test Map => Use Fixed Random Seed取消打勾。

Q:如何把英雄等级上限设定超过10级?Q:如何使英雄5级后打中立怪还有经验值?Q:TFT版本中英雄即使不在战场,也会吸到经验值,如追问

靠,麻烦你看清楚问题

参考技术A 在“物体编辑器”中,在“技能-英雄”栏(就 是选择英雄技能)的上方有一是天生技能? 如果是单位技能(不用技能点升级的技能,如小白虎的影遁 参考技术B 那是单一个的模型,不是特效。所以不能不能拿下。你到网上下载白虎模型不就可以了吗?追问

给个地址呗

本回答被提问者采纳

以上是关于魔兽争霸地图编辑器 倒数计时器的主要内容,如果未能解决你的问题,请参考以下文章

刷新网页时如何防止倒数计时器重置?

魔兽自带地图编辑器触发事件中的循环函数和周期事件怎么设置啊 求高手指点

按秒倒数计时器

动态 Python 倒数计时器

为啥倒数计时器突然执行得很快?

带有 CircularProgressIndicator 的倒数计时器