求高手,类似僵尸岛的魔兽地图图制作中,如何做类似DO...

魔兽地图编辑入门教程
世界上很多地图制作高手已利用WE创作出了类似《反恐精英》、《暗黑破坏神》、《雷电》、《大富翁》等经典游戏的魔兽版,可以说用WE只有想不到,没有做不到。WE功能如此强大,其实不难掌握,因为暴雪已将它做得再“傻瓜”不过了。当你决定使用它创造地图时,摆在你面前的不过是一大堆“积木”,你只要发挥自己的创造力,就能将其摆放出一个自己想象中的世界......
YDWE魔兽地图编辑器YDWE是everguo、wataloo、aeris、Warft_TigerCN、Fetrix_sai和actboy168基于WOW8编辑器UI所改进的一个功能强大的魔兽地图编辑器插件(WE Mod)。其独有佣兵系统、跳跃系统、多重物品栏、物品合成系统、刷兵系统、环绕系统、JASS肉钩、英雄自动学习系统,是一款功能丰富的地图编辑插件YDWE相比较WE魔兽地图编辑器,它的好处就是将很多功能模块化了,比如说英雄升级模块,使用起来很方便!而且还把一部分jass的东西变成了触发条例,让广大不懂jass的地图制作爱好者也可以使用一些jass特有的功能!目前来说是比较容易上手的魔兽地图编辑器......
实用视频范例
模型导入是WE魔兽地图编辑器的基本功能,本视频将带大家简单的介绍如何导入模型及实际效果预览......
视频通过给Lich和大法师自定义添加NOVA技能,释放“米字型”NOVA打在小鱼身上相当爽......
标题顾名思义,视频里通过给FM添加冲击波来示范教学......
重写触发弄了3小时,最后搭配特效用超过4个小时。其实本来是纯火属性的,但是后来发现那种星屑特效就去掉了火焰了,虽然外圈还是有末日的特效~毕竟那个最好看~
纯T,一步一个注释,教程用意了,可以用来补充堆栈教程的地图示例。......
魔兽3的战役是这款游戏的一大亮点,也代表着游戏的灵魂,战役交代了整个游戏剧和情故事背景,因为战役的存在让整个游戏都充满了生命力,相信玩过魔兽战役的玩家都有体会。玩完暴雪的战役还意犹未尽?让我们制作属于我们自己的战役......
相信玩过WOW的朋友对"奥格瑞玛"一词不会感到陌生,这是伟大的兽人部落家乡,要塞、地洞、图腾,兽营、瞭望塔等都是奥格瑞玛的标签,通过WE魔兽地图编辑器强大的功能,实现对WOW中奥格瑞玛部落的复制......本期RPG地图创作比赛作品可谓琳琅满目,地图风景美不胜收,玩家们通过运用魔兽地图编辑器各种功能表现出他们独具创意的一面,山川小镇、悬崖溪流等各种风格应有尽有,一起欣赏本期入选TOP10作品吧......魔兽地图制作&用we制作简单rpg地图
因此在下面的执行语句里,当attack_mumerical[2]
为6的时候,表示6个传送门已经饱和了,就可以直接关闭Time Attack这个触发器,使之不再运行刷兵,计时器
不知道大家有没有玩过\"魔兽世界\",70级副本有一个叫\"黑暗之门\",就是守护麦迪文直到打开黑暗之门,很经典的防守副本,我也准备做一个类似的防守地图,当然,不要去指望会很好玩……主要还是为了演示
黑暗之门的刷兵方式是这样的:随机在N个区域的其中一个产生传送门,然后会有一个传送门守卫出来在门的旁边,传送门一定时间会召唤一些小怪前往麦迪文的位置,杀死守卫就会关闭传送门,然后一定时间内会在另一个地方产生传送门,每六批一个BOSS,一共十八批
这里我们需要有一些地图设定元素:小兵的类型(普通兵九种,随着进度而变化-出现更高级的兵种),守护者3种(每五批切换一名,第六批为BOSS),BOSS也是3种,还有我们需要设定计时器使用了一些变量,如下:
单位类型变量组Foot[9] =保存小兵类型
单位类型变量组Boss[6] =保存守护者和BOSS
计时器变量Calculagraph =传送门计时器
计时器窗品变量Calculagraph_windows =传送门计时器窗口
地区变量组attack_area[6] = 六个出现传送门的地区
数值变量组attack_numerical[1] = 用于记录随机地区变量数
attack_mumerical[2] = 用于记录传送门现有数量
attack_mumerical[3] = 用于记录传送门总数量
单位变量组Carrydoor[6] = 保存传送门
计时器变量hero_Calculagraph =英雄复活计时器
计时器窗口变量组 hero_Calculagraph_windows[5] = 英雄复活计时器窗口
我们先来定义单位类型变量,这里有个很有趣的设定:
所有小兵全部取决于同等级的随机野生单位,大家都知道野生单位是固定等级分类的,这样我们每次在玩图的时候没有改变难度的情况下却可以每次都可能遇到不同的怪BOSS采用各个英雄,必要的话会在触发中添加一些属性,当然在具体做图的时候可以事先设定好各个怪物的属性;还有六个传送门出现的区域也保存在变量中了
接着我们说刷兵,刷兵一般是两个部分组成,一个是创造,一个是进攻
单位 - Create (1 x (Number of players)) Foot[1] for 玩家 12 (棕色) at
(Position of Carrydoor[(Integer A)]) facing 默认的建筑朝向 degrees
//创造1*玩家数的单位类型为单位变量Foot[1]的单位给玩家12,并出现在单位变量Carrydoor(循环数A)的位置,面朝默认建筑方向
可以看到这里用到了一个乘法语句,这个是整数的一个运算方式:
其实我们以后也会经常用到这种方式做一些精确的计算,当然,这个只是最简单的四则运算,还有其他复杂的算法,另外如果是字符串变量的话,同样可以用这个进行串连,比如显示出英雄的名字+英雄的等级
还有用到变量Foot[1],在前面已经介绍过,给单位变量Foot[1]进行赋值为随机的等级1的野生单位,所以这个变量可能是任何一种等级1的野生单位,当然在具体做图的时候最好可以具体定义自己设定的单位,方便控制,后面是创造的单位是给予玩家12(你的敌方)的至于出现地点,可以是地区的中心,也可以是随机点,我这里选择的是传送门出现的地点,还有一个触发将是创造传送门的,然后用这个变量保存创造的传送门,这个等下会介绍到
单位组 - Pick every unit in (Units owned by 玩家 12 (棕色)) and do (单位 -
Order (Picked unit) to 攻击-移动到 (Center of Home
//选取玩家12的所有单位攻击移动到Home地区(前面设定的,玩家基地)
这个是最常见也最实用的单位进攻方式,单位组的选取其实是采用玫举方式的,就是每一个单位做一个动作,但如果直接使用这样的语句会因为一次执行动作的单位过多(超过12支)而不能全部控制,因此一般都是将这个触发分开写:
这样写的好处是肯定每个单位都会执行到,而且我们知道因为是每个单位都做一次动作,所以我们还可以在中间加入一些对单位控制的动作,比如计数器,比如你加一个数值变量的赋值语句N=N+1在执行动作里面,那么最后输出的N就是选取的所有单位了,而且选取还可以附加条件,比如选取的单位是一个英雄为真,那么就只会选取英雄单位
本演示具体的刷兵方式其实是从传送门的开始的,因为前面提到每次刷出的单位是在传送门的位置,所以我们现在先来看看传送门创造的触发传送门创造其实和其它地图中的刷怪系统没什么区别,所以我们也需要有一个计时器来告诉我们传送门什么时候会出现,如图:
这个触发的事件是每经过35秒,通过计时器来运行传送门创造的触发器
倒数计数器 - Create a timer window for Calculagraph with title
下一个传送门开启
//创造一个名为Calculagraph(变量)倒数计数器,标题是\"下一个传送门开启\"
倒数计数器 - Start Calculagraph as a 一次射击 timer that will expire in
30.00 seconds
//倒数计数器Calculagraph开始计时,次数为一次,时间为30秒
Set Calculagraph_windows = (Last created timer window)
//设置倒数计时器窗口变量为最后创造的倒数计时器
玩家组 - Pick every player in (All players) and do (倒数计数器 - 显示
Calculagraph_windows for (Picked player))
//选取所有玩家显示数计数器窗口Calculagraph_windows
Wait 29.00 seconds
倒数计时器 - Destroy Calculagraph_windows
//等待29秒删除倒数计时器窗口Calculagraph_windows
这就是创造和使用倒数计时器的简单流程,每一个计数器的窗口创建了必须要有一个结束的语句,另外如果还有其它计数器存在的话,就要使用变量了,这个演示中还有英雄复活的计数器,因此我使用变量
计时结束以后,有几种方式可以用,一就是通过事件Timer
Expires来判断计时器到期事件,这里需要用到变量,我没有使用这个事件,所以采用wait(等待语句来判断时间,为了避免BUG,时间为计时器-1),然后直接执行下面的动作将attack_mumerical[3]赋值为attack_mumerical[3]+1,这个变量的作用是记录传送门出现的总次数,在设计中已经申明过,每六批为一个循环,所以我这里有三个循环,通过判断attack_mumerical[3]变量来确定执行哪一部分的触发器
下面是IF 判断语句,第一个触发是如果attack_mumerical[3]小于或等于6,就执行触发器Create Carrydoor
1,下面的两个语句类同,区别在于一个是7&attack_mumerical[3]&12,一个是13&attack_mumerical[3]&18,分别执行Create
Carrydoor 2和Create Carrydoor 3
(创造 还是 毁灭)刷兵- 利用变量来限制单位出现
前面我们说到,利用计时器来运行传送门的创造动作,具体如下:
变量的设定上,是利用 attack_numerical[1] 记录随机地区变量数 attack_mumerical[2]
记录传送门现有数量 attack_mumerical[3] 记录传送门总数量
这里第一句,将整数变量组attack_numerical[1]
赋值成1到6之间的随机数,代表了上面六个刷兵区域的下标;同时,用到了单位变量组Carrydoor[attack_numerical[1]
来记录传送门,换句话说,如果前面随机数是5,那么接下来进行动作的就是Carrydoor[5]这个变量了,这个的作用就是判断该位置是已经存在传送门,在下面的IF语句里可以看到,如果该变量没有进行赋值的,也就是变量为空的,那么执行创造传送门的动作,否则,重新运行这个触发器(最后一句)
在这里需要说明一下的是,多次运行触发器是为了挑选正确的变量以便执行,同时我们需要有所限制,比如本图的刷兵点一共6个,所以如果超过6个以上的传送门出现将会导至BUG,严重的直接跳出游戏
具体执行方面,当Carrydoor[attack_numerical[1]为空的时候,将创造一个传送门在同样下标的区域变量attack_area[?],同时,Carrydoor[attack_numerical[1]将赋值为最后创造的传送门,这样下一次运行触发器的时候将会跳过这一个下标值接下来给新创造的传送门赋值自定义值attack_numerical[1],这个的作用是为了模仿黑暗之门副本的设定,传送门本身是添加了蝗虫技能的,所以不能被攻击,而守护者死亡以后,传送门也会消失,因此,在下面创造守护者的时候,同样给守护者添加了自定义数attack_numerical[1],事件将会在另一个触发里判断,后面细说
在创造守护者的触发里,我们可以看到一个IF语句,这个是利用attack_mumerical[2]
来判断是否应该刷出BOSS,其中BOSS[1]为普通守护者,BOSS[2]为BOSS,这个在前面set
attack触发器中设定的当attack_mumerical[2]
小于6的时候刷出BOSS[1],当等于6的时候,刷出BOSS[2],同时关闭刷传送门的触发另外,attack_mumerical[2]
清空为0,为下一个触发组做准备至于BOSS的等级设定只是为了简化单位编缉,如果你设定好单位的强度和属性,就没必要利用这个来直接修改等级了
有创造就有毁灭,对应这个触发器,还有另一个用来清除传送门的触发器,如图:
这个触发器相对就简单得多,判断玩家12(敌对玩家)单位死亡,而且单位类型为守护者BOSS[?]的,就选取地图上所有和死亡单位同样自定义数的传送门进行Kill操作……这个就是前面设定自定义数的意义了而接下来具体判断单位死亡类型,这里单独分例了各个BOSS死亡时的操作,其实也就是重新打开刷兵触发,这里用到一个OR的条件,就是\"或\",多个条件只要达成一个,就会执行动作不过动作里有一句是选取所有玩家12的单位进行Kill操作,使用这个的原因是为了防止在BOSS死亡以后,还有其它传送门存在,这样会打乱下一轮回的刷兵,因为制作得比较粗糙如果你前面就是精细设定每一次刷兵的方式,这一句有没有存在并不影响,可无视之
刷兵- 利用单位判断刷兵区域
刷兵其实有很多种方式,我这里使用的是判断传送门是否存在来进行刷兵,如图:
这里可以看到,时间是固定的每15秒刷一次兵,刷兵采用循环方式,在区域1至6上存在传送门的区域都会刷兵其中attack_mumerical[3]前面有提到是记录传送门总数量,因为每6批一个循环,因此这个是来判断应该刷哪一阶段的单位(一般都会随着阶段提升而加强单位的吧),然后判断Carrydoor[循环数A]是否为空,在前一个触发的设定上,有进行Carrydoor[?]变量赋值的语句,只要该变量被赋值,那么就会执行刷兵动作如果地图上同时存在6个传送门,那6个都会出兵的哦……
接下来就是单位进攻了,其实也是很简单的触发,如图:
这个是接前面刷兵触发器的后面写的,也就是说,每隔15秒发布一次进攻命令在这里不得不再次提一下picked命令的作用,这个一般翻译成选取或枚举或精选,这个动作执行的时候实际上是一个个单位执行下去的,因此在多个动作的语句里,单独写出一句命令单位攻击移动到指定位置话,每一个被选到的单位都会执行,很方便的功能,所以最好不要直接选取单位做动作,要分开写另外这个触发因为是刷兵嘛~所以守护者排除在外
还有一个英雄复活的触发,只是简单的利用了一下计时器,就不细说了,如图:
创造和使用排行榜(直接引用早期写的关于排行榜的解说)
其实很简单.需要的内容并不多.但对一个地图.特别是多人地图上使用的时候让大家感觉更有意思.也可以做出更多的事件.像我的地图根据排行榜设计奖励或者一些守护地图的排分.都需要排行榜.废话不多说.接入正题.
要做一个排行榜.先是排行榜显示的时间问题.一般来说.大家都习惯在进入地图以后就出现排行榜.所以我们也可以这样做.那么事件就可以写成:
Map initialization
地图初始化就是在地图刚开始的时候就打开排行榜.而排行榜一般不需要环境(条件).所以我们就忽略.接下来就是动作.
先要确定这个排行榜显示的是什么.如果是两边对战的时候就需要分组显示排行榜了.而大部分时候我们只对大家使用一个排行榜.所以我们可以这样建:
wait 2.00 秒
排行榜 - Create a leaderboard for (All players) titled ????(自定)
玩家组 - Pick every player in (All players) and do (排行榜 - Add (Picked
player) to (Last created leaderboard) with label (Name of (Picked
player)) and value 0)
排行榜 - Sort (Last created leaderboard) by 值 in 降序 order
排行榜 - 显示 (Last created leaderboard)
使用等待的原因是如果没有等待时间在初始化的情况下不会显示排行榜). 而签后面的 杀敌数量
为排行榜的名字.下面句是最重要的.就是排行榜上显示的玩家.常用的就是使用玩家组的精选.因为需要把所有玩家都选入.那么就精选所有的玩家.然后在的动作是把精选的玩家名字填入排行榜.而标签就是下面显示的分栏.一般是把玩家的名字作为标签.所以采用的是
精选的玩家 的名字 .而数值 需要你自己定义.最多采用的是 总采木量.
因为在RPG或一般对抗地图中.是不会进行伐木的.所以木头不会有收入.总采木量就是木头的总收入.不会显示出来的.因此可以做为变量使用来记录单位的杀敌数量等等.然后就是排行榜的排序.最后一步就是显示出排行榜.
如果要将某些玩家排除在外.比方在对战的时候有几个电脑的玩家需要排除.常用的是第6和第12个.下列句可以加在排序和显示前面:
排行榜 - Remove 玩家 6 (橙色) from (Last created leaderboard)
对于创造排行榜已经解说完了.然后是使用排行榜.不能让排行榜就这样晾着吧.这次的使用方式是记录杀敌数量.先是事件.既然是记录杀敌数量.所以要先判断敌人是否死亡.(本方玩家1.敌人是玩家2):
单位 - A unit owned by 玩家 2 (蓝色) 死亡
已经判断是玩家2的单位死亡了.一般状态下环境不需要.所以跳过.直接到动作部分.因为玩家2单位的死亡.所以我们的排行榜的数值要加1.因为我们使用
总采木量 来记录这个数值.而杀死玩家2的并不一定就是玩家1.为了方便.使用((凶手单位)的 所有者).所以下面的动作就是:
玩家 - Add 1 to (Owner of (Killing unit)) 总采木量
数值已经增加了.但是并不会直接在排行榜上显示.所以我们要更改排行榜的数值.将数值改成总采木量:
排行榜 - Change the value for (Owner of (Killing unit)) in
(Leaderboard of (Owner of (Killing unit))) to ((Owner of (Killing
unit)) 总采木量)
现在已经把排行榜上的数值更改了.因为我们有时要排名次和显示.所以还需要排序.再增加以下语句:
排行榜 - Sort (Last created leaderboard) by 值 in 降序 order
排行榜 - 显示 (Last created leaderboard)
然后这个排行榜就可以正式投入使用了.创造一个排行榜容易.主要就是对排行榜的数值的控制才是排行榜真正的核心.一般都是采用变量.如果是多人的话.尽量采用变量组来控制会比较好.演示图中采用的方式和前面的解说稍稍有点不同,你可以看出有什么变化和作用么:
胜利和失败
其实,对于胜利和失败的条件有很多种,而对于我们守护图来说,一般无非是判断杀死最终BOSS为胜利,而如果自己家里的某建筑或单位的死亡为失败~真的很简单,如图:
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

参考资料

 

随机推荐