找回密码
 点一下
查看: 6912|回复: 24

Maze TD全解(添加刷怪部分)

[复制链接]
发表于 2006-4-23 09:53:33 | 显示全部楼层 |阅读模式
呃,这篇教程之所以放在这里,是因为似乎国内只有GA实现了触发标签树的功能。
我第一次写教程,经验又不足,请大家多见谅。

注意:这篇教程还没有完成!现在正在连载更新中(其实是因为我太懒了……)

今天呢,由我来为想学习Maze TD如何制作的朋友们讲一堂课。
这篇教程是一个进阶教程,因此你可能会有很多不明白的地方。有问题或想学习进阶的地图制作方法,请到地精研究院的论坛

[url=http://ww.ourga.com/forum[/url]或加入群2519534地精研究院集中营。

那么,下面开始转入正题。
首先我们来讲解一下地图的初始化部分。
这一部分涵盖了最基本的内容--例如为玩家设定金钱,创造一些初始化的单位等等。
一、金钱
[trigger]Gold
    Events
        Map initialization
    Conditions
    Actions
        Player Group - Pick every player in (All allies of Player 1 (Red)) and do (Player - Set (Picked player) Current gold

to 100)
[/trigger]
钱不是万能的,但没有钱是万万不能的--不仅在生活中,在TD中也是如此。
而这个触发器的作用,就是为玩家提供金钱。
它利用的是游戏的初始设定,所有防守玩家为一个阵营实现,从而没有利用变量或是更为繁琐的步骤。

二、创建居民
[trigger]Lives Spawn
    Events
        Map initialization
    Conditions
    Actions
        For each (Integer A) from 1 to 10, do (Trigger - Run Lives Spawn Tigger <gen> (checking conditions))
[/trigger]
那些居民们,就是由与这个触发器相关联的一个触发器所创造出来的。
而这个触发器利用了循环整数(Interger)来使与这个触发器相关联的触发器多次执行以达到随机创建20个居民的目的。如果你愿意,也可以

创造更多,但要修改生命数远远不止是修改这里就行的。修改生命数的方法,将在后文提到。

三、创建居民(创建部分)
[trigger]Lives Spawn Tigger
    Events
    Conditions
    Actions
        Unit - Create 1 小孩 for Player 11 (Dark Green) at (Random point in Lives <gen>) facing (Position of (Triggering

unit))
        Unit - Create 1  小孩 (2) for Player 11 (Dark Green) at (Random point in Lives <gen>) facing (Position of

(Triggering unit))
[/trigger]
这一部分就是创建居民的部分。要注意的是,这个触发器是创建两名不同的居民,因此前文的循环整数量只递增到了10。
另外这个触发器是在区域内随机点创建20名居民,要注意这一点。
注意:随意修改这个触发器可能会导致居民四处分散!

四、设置无敌
[trigger]Child Invulnerable
    Events
        Map initialization
    Conditions
    Actions
        Unit - Make (Triggering unit) Invulnerable
        Unit Group - Pick every unit in (Units in Lives <gen>) and do (Unit - Make (Picked unit) Invulnerable)
[/trigger]
因为居民阵营与你不在一个阵营(游戏的设置问题),因此必须让居民们无敌以保证你的防御它不会将居民误杀。
但是实际上,即使你的防御塔杀死了居民也不会导致游戏失败,因为游戏的成败是由变量决定的,而变量的问题将在后文提到。

五、设置全地图可见
[trigger]Visibility
    Events
        Map initialization
    Conditions
    Actions
        Player Group - Pick every player in (All players) and do (Visibility - Create an initially Enabled visibility

modifier for (Picked player) emitting Visibility across (Playable map area))
[/trigger]
这个触发器的作用几乎无须解释--这是一张TD的基本--如果你无法看到敌人在哪里,你如何来设定你的策略?

六、设定时间
[trigger]Fix Time of Day
    Events
        Map initialization
    Conditions
    Actions
        Game - Turn the day/night cycle Off
        Game - Set the time of day to 6.00
[/trigger]
这一部分是为了让游戏中的时间始终保持在6:00而存在的。事实上,这个触发器的作用并不是很大。
注意:要想设定时间请先关闭日夜循环!

既然我们已经讲完了初始化的部分,那么我们开始讲最重要的部分??刷怪系统。
而这一部分的作用绝对无需解释??难道你从来没有玩过TD吗?

一、金钱
[trigger]Bounty Gold
    Events
        Unit - A unit owned by Player 12 (Brown) Dies
    Conditions
    Actions
        Player - Add EnemyGold[pointer] to (Owner of (Killing unit)) Current gold
[/trigger]
在默认的情况下,杀死野外生物应该会有金钱的收入。但是,在这张地图中,来进攻的是敌人的单位??怎么办呢?在魔兽争霸3中,杀死敌人的单位是不会有金钱的。而在这张地图中,作者使用设定数组型变量的方法解决了这个问题。作者为每一关逐一设定了杀死每一单位的金钱。而如何设定的变量?将在下文提到。
数组型变量:数组型变量能在一组变量中包含大量数据,同时每一个部分对应不同的数据。与一个实数型变量配合就可以实现这个效果。但是要注意,这个实数型变量也要随着游戏的进程而变化,否则就会出现类似于“杀死敌人单位始终只有1元收入”的错误。

二、设定变量。
[trigger]Set Enemies
    Events
        Map initialization
    Conditions
    Actions
        -------- Level 0 --------
        Set i = 0
        Set EnemyType = 塞特斯
        Set EnemyCount = 20
        Set EnemyGold = 1
        -------- Level 1 --------
        Set i = (i + 1)
        Set EnemyType = 霜冻之狼
        Set EnemyCount = 20
        Set EnemyGold = 1
        -------- Level 2 --------
        Set i = (i + 1)
        Set EnemyType = Ghouls
        Set EnemyCount = 20
        Set EnemyGold = 2
        -------- Level 3 --------
        Set i = (i + 1)
        Set EnemyType = Fish Man
        Set EnemyCount = 20
        Set EnemyGold = 2
        -------- Level 4 --------
        Set i = (i + 1)
        Set EnemyType = Assasin
        Set EnemyCount = 20
        Set EnemyGold = 7
        -------- Level 5 --------
        Set i = (i + 1)
        Set EnemyType = Troll
        Set EnemyCount = 20
        Set EnemyGold = 4
        -------- Level 6 --------
        Set i = (i + 1)
        Set EnemyType = Skelly
        Set EnemyCount = 20
        Set EnemyGold = 4
        -------- Level 7 --------
        Set i = (i + 1)
        Set EnemyType = 憎恶
        Set EnemyCount = 20
        Set EnemyGold = 4
        -------- Level 8 --------
        Set i = (i + 1)
        Set EnemyType =牛头人
        Set EnemyCount = 20
        Set EnemyGold = 4
        -------- Level 9 --------
        Set i = (i + 1)
        Set EnemyType = Gnoll2
        Set EnemyCount = 20
        Set EnemyGold = 4
        -------- Level 10 --------
        Set i = (i + 1)
        Set EnemyType = Mad Maze Runners
        Set EnemyCount = 20
        Set EnemyGold = 5
        -------- Level 11 --------
        Set i = (i + 1)
        Set EnemyType = Windrunner (女妖)
        Set EnemyCount = 20
        Set EnemyGold = 5
        -------- Level 12 --------
        Set i = (i + 1)
        Set EnemyType = Flying Beauties
        Set EnemyCount = 20
        Set EnemyGold = 5
        -------- Level 13 --------
        Set i = (i + 1)
        Set EnemyType = 迅猛野兽
        Set EnemyCount = 20
        Set EnemyGold = 6
        -------- Level 14 --------
        Set i = (i + 1)
        Set EnemyType = Golem
        Set EnemyCount = 20
        Set EnemyGold = 6
        -------- Level 15 --------
        Set i = (i + 1)
        Set EnemyType = 鹰身女妖流氓
        Set EnemyCount = 20
        Set EnemyGold = 7
        -------- Level 16 --------
        Set i = (i + 1)
        Set EnemyType = Big Bad Lizard
        Set EnemyCount = 20
        Set EnemyGold = 7
        -------- Level 17 --------
        Set i = (i + 1)
        Set EnemyType = 树妖?
        Set EnemyCount = 20
        Set EnemyGold = 8
        -------- Level 18 --------
        Set i = (i + 1)
        Set EnemyType = Water Fighter (等级3)
        Set EnemyCount = 20
        Set EnemyGold = 8
        -------- Level 19 --------
        Set i = (i + 1)
        Set EnemyType = Master Maze Minion
        Set EnemyCount = 20
        Set EnemyGold = 9
        -------- Level 20 --------
        Set i = (i + 1)
        Set EnemyType = Flying Hag
        Set EnemyCount = 30
        Set EnemyGold = 10
        -------- Level 21 --------
        Set i = (i + 1)
        Set EnemyType =僵尸
        Set EnemyCount = 20
        Set EnemyGold = 10
        -------- Level 22 --------
        Set i = (i + 1)
        Set EnemyType = Tree Runners
        Set EnemyCount = 20
        Set EnemyGold = 15
        -------- Level 23 --------
        Set i = (i + 1)
        Set EnemyType = Sylvanas
        Set EnemyCount = 20
        Set EnemyGold = 15
        -------- Level 24 --------
        Set i = (i + 1)
        Set EnemyType = Mal'Ganis
        Set EnemyCount = 30
        Set EnemyGold = 16
        -------- Level 25 --------
        Set i = (i + 1)
        Set EnemyType = B'Druid (变熊)
        Set EnemyCount = 30
        Set EnemyGold = 16
        -------- Level 26 --------
        Set i = (i + 1)
        Set EnemyType = Kel'Thuzad
        Set EnemyCount = 30
        Set EnemyGold = 17
        -------- Level 27 --------
        Set i = (i + 1)
        Set EnemyType = Hellscream
        Set EnemyCount = 30
        Set EnemyGold = 18
        -------- Level 28 --------
        Set i = (i + 1)
        Set EnemyType = B'Crypt
        Set EnemyCount = 25
        Set EnemyGold = 19
        -------- Level 29 --------
        Set i = (i + 1)
        Set EnemyType = Nerubian'S
        Set EnemyCount = 30
        Set EnemyGold = 20
        -------- Level 30 --------
        Set i = (i + 1)
        Set EnemyType = 食人鬼魔法师
        Set EnemyCount = 20
        Set EnemyGold = 30
        -------- Level 31 --------
        Set i = (i + 1)
        Set EnemyType = Titan
        Set EnemyCount = 20
        Set EnemyGold = 30
        -------- Level 32 --------
[/trigger]
在这一部分中,作者手动逐一设定了每一个关卡应该出现的敌人,敌人数量,以及杀死敌人获得的金钱等。要修改每一关卡出现的敌人数据,可以在这里修改。
注意:这里的i,代表了游戏的关卡数。前文所提到的实数型变量,就是这个变量。这里设定i=i+1是很常用的一个手法,使用这个手法之后你就不需要再逐一写入数组型变量的数值了。

三、刷怪(引子部分)
[trigger]Time Spawn
    Events
        Time - Elapsed game time is 30.00 seconds
    Conditions
    Actions
        Trigger - Run Display Level Text <gen> (checking conditions)
        For each (Integer A) from 1 to EnemyCount, do (Trigger - Run Spawn Monsters <gen> (checking conditions))
[/trigger]
这里利用了前文所提到的“循环整数”和实数型变量来完成反复刷怪的目的。EnemyCount这一实数型变量在每一关都有一个对应的值,而实数型变量i则是对应每一关的数据。这个触发器只是一个开头,它是为反复刷怪而不用大量写入触发器而存在的。这里的时间是对应初次刷怪的,
后面关卡的刷怪将由下文的触发器配合这一触发器来引发。这一触发器同时也引导着给玩家的每一关即将到来的信息的触发器。

四、下一关
[trigger]Next Round
    Events
        Player - Player 12 (Brown)'s Food used becomes Less than 1.00
    Conditions
    Actions
        Set pointer = (pointer + 1)
        Player Group - Pick every player in (All players) and do (Player - Add 25 to (Picked player) Current gold)
        For each (Integer A) from 1 to EnemyCount, do (Trigger - Run Time Spawn <gen> (ignoring conditions))
        Wait 10.00 seconds
[/trigger]
每一个单位都要占用一定的食物,而作为进攻方的敌人所使用的食物量如果小于1,就意味着敌人已经没有单位了。因此,这里就可以利用这一条件来完成下一关的开始。这里设置Pointer的作用是设定游戏现在所在的关卡。但是,为什么要设置两个不同的变量?这是因为它们对应不同的目的。数值型变量i对应设定敌人变量,和刷怪的引子部分。而pointer对应的是游戏的其他部分。
因为前文的刷怪部分只对应第一次刷怪,所以其他的刷怪只能由这一触发器来引发。

五、刷怪(刷怪部分)
[trigger]Spawn Monsters
    Events
    Conditions
    Actions
        Unit - Create 1 EnemyType[pointer] for Player 12 (Brown) at (Random point in Monster Spawn Top Left <gen>) facing (Position of (Triggering unit))
        Unit - Create 1 EnemyType[pointer] for Player 12 (Brown) at (Random point in Monster Spawn Top Right <gen>) facing (Position of (Triggering unit))
        Unit - Create 1 EnemyType[pointer] for Player 12 (Brown) at (Random point in Monster Spawn Bottom Left <gen>) facing (Position of (Triggering unit))
        Unit - Create 1 EnemyType[pointer] for Player 12 (Brown) at (Random point in Monster Spawn Bottom Right <gen>) facing (Position of (Triggering unit))
[/trigger]
与前文如此之多的触发器对应,真正刷怪的部分只有几行,诸位大跌眼镜吧?但是,如果不与前文的大量触发器对应,这个触发器就会变得很麻烦??甚至于无法完成。若果你想使用Maze TD的刷怪系统,请注意,一定要将前文的部分一起复制,并且要打开“自动创建未知变量”的功能,否则……

六、显示关卡信息
Display Level Text
[trigger]    Events
    Conditions
    Actions
        Wait 1.00 seconds
        Game - Display to (All players) for 7.00 seconds the text: (|c00FFFF00Level  + ((String(pointer)) + (: |r + ((Name of (Last created unit)) + ( ( + ((String(EnemyCount[pointer])) +  each corner)))))))
[/trigger]
这里之所以要等待一秒,是因为如果不等待,刷怪和显示信息就会同时完成,就会出现信息显示不正确的状况。请记住这一点,它十分重要。

[ 本帖最后由 狐狸兄EX 于 2006-4-25 08:31 编辑 ]
 楼主| 发表于 2006-4-23 09:54:38 | 显示全部楼层
大家随便的把板砖往我这里砸吧~~~
有意见尽量提啊~~
这教程是写给新手看的啊~~~
各位大大不要鄙视我阿~~

[ 本帖最后由 狐狸兄EX 于 2006-4-23 09:56 编辑 ]
回复

使用道具 举报

发表于 2006-4-23 09:58:11 | 显示全部楼层
我来学学TD的制法..........
恩恩,是个好东西,望精华之
回复

使用道具 举报

发表于 2006-4-23 10:04:12 | 显示全部楼层
的确是预览版
但是估计现在的新手早已超越这样的难度的文章了
回复

使用道具 举报

 楼主| 发表于 2006-4-23 10:05:57 | 显示全部楼层
我打算写所有的触发器……
这是最白痴的部分……
回复

使用道具 举报

 楼主| 发表于 2006-4-23 10:08:59 | 显示全部楼层
事实上,我看到现在有很多简单的改改单位数据的地图就叫做“全新地图”。
我很痛心,所以才写了这样一篇对Maze TD的原始版的触发器的教程
回复

使用道具 举报

发表于 2006-4-23 10:11:23 | 显示全部楼层
继续顶.................
回复

使用道具 举报

发表于 2006-4-23 10:45:08 | 显示全部楼层
楼主你可以出个TD地图教学版啊,在里面作解释不是更好吗
回复

使用道具 举报

发表于 2006-4-23 10:45:48 | 显示全部楼层
记得我说过的么
现在做视频教学是最有前途的~~~~~
回复

使用道具 举报

发表于 2006-4-23 12:51:04 | 显示全部楼层

进阶内容:内存泄露

//一、金钱
玩家组没释放
建议选取 (All Players)(它是BJ中的全局变量),再写匹配条件


//三、创建居民(创建部分)
点没释放
建议在地图初始化时用一个全局变量保存点


//四、设置无敌
单位组没释放
建议使用:Custom script: set bj_wantDestroyGroup = true

[ 本帖最后由 zyl910 于 2006-4-23 12:55 编辑 ]
回复

使用道具 举报

发表于 2006-4-23 13:02:17 | 显示全部楼层
LZ辛苦了,请继续

做出来必定是精华

另外,楼上的意见很重要。
回复

使用道具 举报

发表于 2006-4-23 13:06:25 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2006-4-24 15:31:14 | 显示全部楼层
又是新手的一大福音……
回复

使用道具 举报

发表于 2006-4-24 15:49:54 | 显示全部楼层
是啊,楼上怎么说出我的心声??
回复

使用道具 举报

发表于 2006-4-24 18:02:09 | 显示全部楼层
“注意:这篇教程是面对新手的,并不想发在GA。”


GA不是每个人都是高手,希望你能改变这个想法。
回复

使用道具 举报

 楼主| 发表于 2006-4-25 07:29:41 | 显示全部楼层
Sorry,我会改变这个想法的。
回复

使用道具 举报

发表于 2006-4-25 07:48:26 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2006-5-23 17:45:33 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2006-5-23 23:24:14 | 显示全部楼层
原帖由 hyp 于 2006-4-23 10:45 发表
记得我说过的么
现在做视频教学是最有前途的~~~~~



我的那个TD视频教程GA没收录???
(虽然是N个世纪前的东西)
回复

使用道具 举报

发表于 2006-5-24 13:55:13 | 显示全部楼层
原帖由 zxy88626 于 2006-5-23 23:42 发表
感觉现在最需要的是一个新的游戏概念了~~似乎人都被自己定的分类局限到了



恩恩,目前看来map类型已经被“定向思维”禁锢了

偶正在努力制作一张别致的图
(其实有好几张,但都由于效果自己不满意,被自己喀嚓了)

<我要复活了??谁泄露的?!给我站出来!!>
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-5-4 13:40 , Processed in 0.248910 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表