最傻瓜化的刷兵和攻击演示~~(触发器超新手向)
SC2的AI控制函数比War3强大多了。所以很多刷兵和攻击只需要两三条刷兵操作就能由AI代劳。用war3触发器做过刷兵和进攻的同学可能都遇到过这样一个问题。由于命令用的是攻击-移动。结果半路上部队被人晕了什么的,直接就会导致单位呆在原地不继续前进什么的。需要每隔一段时间重复发布攻击命令才行。而采用AI的强智能化的AI的话就没有这样的问题。
我这里就以“大贤良师”同学提的刷兵问题为基础做一个最傻瓜化的刷兵及攻击的演示。
http://bbs.islga.org/read.php?tid=53013#547992
“大贤良师”希望做出这样的效果。开始游戏10秒后电脑刷100只小狗,然后进攻你的基地。当小狗数量小于X以后,那么就刷下一波100只。无限这样下去只到你的指挥中心被推掉。
以下是步骤,总共只需要三道触发器:
在地图初始化时,先为电脑玩家开启AI。注意要是不开启AI的话以下的命令全部都是没用的。这里是开启战役AI。
对战初始化
Events
Game - Map initialization
Local Variables
Conditions
Actions
AI - Start the campaign AI for player 2
为了照顾简体中文版的玩家。我也贴下简体中文版本:
注意这个触发器和上面那个触发器是同一个触发器。只是一个是英文版,一个是中文版。下同。
对战初始化
事件
游戏 -地图初始化
局部变量
条件
动作
AI -为玩家2启用战役AI
然后我们做个简单的游戏失败设定:
也就是当指挥中心死亡时,游戏就告失败。具体的失败条件大家可以随便填。
游戏失败
Events
Unit - Logistics Headquarters dies
Local Variables
Conditions
Actions
Game - End game in Defeat for player 1 (Show dialogs, Show score screen)
游戏失败
事件
单位 -后勤总部 死亡
局部变量
条件
动作
游戏 -为玩家1以战败结束游戏(显示对话,显示得分画面)
然后,最主要的是第三个触发器:
我会对这个触发器的每一条动作作逐一讲解。
Spawn & Attack
Events
Timer - Elapsed time is 10.0 Game Time seconds
Unit - Any Unit dies
Local Variables
Conditions
(Number of Living units in AttackingGroup) <= X
Actions
Debug - Display "新的一波跳虫来袭!" as debug output using Type 1, and Do display it in the game window
Unit - Create 100 Zergling (Burrowed) for player 2 at 跳虫刷新点 facing 270.0 degrees (No Options)
Variable - Set AttackingGroup = (Any units in (Entire map) owned by player 2 matching Excluded: Missile, Dead, Hidden, with at most Any Amount)
AI - Add AttackingGroup to the next attack wave for player 2
AI - Set the target for player 2 attack waves to Logistics Headquarters
AI - Send the attack wave from player 2 to attack in 0 seconds and Don't Wait
跳虫攻击
事件
计时器 -已流逝时间为10.0游戏时间秒
单位 -任意单位死亡
局部变量
条件
(在跳虫数量内的活体单位数)<=X
动作
纠错 -显示"新的一波跳虫来袭!"为使用类型1的纠错输出,并执行在游戏窗口中将其显示
单位 -为玩家2 在跳虫刷新点创建100个面向270.0度(无选项)的跳虫 (已潜地)
变量 -设置跳虫数量 = (在(整张地图)内的属于玩家2的,并且匹配不包括: 发射物, 死亡的, 隐藏的的任意单位,最多有任意数量个)
AI -为玩家2添加跳虫数量到下一个攻击波次中
AI -将玩家2的攻击波次的目标设为后勤总部
AI -将取自玩家2的攻击波次发送到0秒后的攻击并不要等待
其中,全局变量X为整数类型。我们可以随便指定它的值。比如说10。就代表当上一波死剩10个之后就开始刷下一波。
而全局变量AttackingGroup为一个单位组。
大家可以看到,这个触发器有两个动作,一个是游戏开始后10秒,另一个是单位死亡。触发器初学者要特别注意的一点是。触发器的事件之间都是或的关系。而条件之间都默认是与的关系(当然条件也可以强制指定为或关系,但是默认是与关系)。意思是两个事件只要一个被引发,这个触发器就会开始判断条件,然后执行。
理由很简单,在队列处理的触发器里,是没有“同时”这个概念的。如果两个兵一起死,触发器必定会先处理一个再处理另一个,所以事件是不存在“与”的关系的。
所以我这个第三条触发器,其实可以理解为两个单独的触发器。一个以游戏开始后10秒为事件。另一个以任意单位死亡为事件。而它们的条件和动作是完全一样的。
当发生单位死亡事件或时。会判断条件(AttackingGroup单位组里的活着的单位数是否小于等于X)。而AttackingGroup我们可以在下面发现,每次刷兵后都设置为玩家2也就是电脑当前拥有的所有单位。所以当判断AttackingGroup单位组里的活着的单位数量时就代表看电脑还死胜了几个小狗了。
当出现单位死亡事件,而且条件成立,也就是死剩到小于X时(我附的演示地图里,X的数量为10,所以也就是死剩10只或者以下时)。这个触发器的动作就会被执行。当出现游戏开始后10秒事件时。由于当时玩家2还没有任何单位,所以条件必定成立。动作也会被执行。
我们的第一条动作只是输出一条提示:下一波来了。没什么实际作用,接下去5条动作才是关键。
我们先为玩家2创造100只潜伏状态的跳虫。(在此之前,先在地形编辑器里你想要刷兵的地方放一个点。比如名字叫“ 跳虫刷新点”什么的,这样才给这条刷兵动作指定刷兵点)。之所以是潜伏状态,只是100只跳虫一起从土里钻出来比直接凭空刷出来酷一点而已。
然后,将AttackingGroup设为玩家2现有的所有单位。这里要说明的一点是。之所以设为所有单位,而不是“最后创建的所有单位”,是为了把上一波死剩下的那些家伙都包括进去。否则计数会不准确。
然后以下3条触发都是关于给AI指定出击方针的了。
这里我要先给大家说明一下的是,AI里的Attack Wave(简体中文版翻译为“攻击波次”)这个东西。所谓攻击波次,在AI里是很重要的一个东西。你可以为AI指定下一波攻击的攻击方针,攻击目标,出击的部队构成。以及何时出击。
所以,这三条触发里的第一条。就是给玩家2指定出击的部队构成的。这里我直接把整个AttackingGroup加了过去。因为AttackingGroup已经包括了玩家2的所有单位了。
第二条,给攻击指定目标。这里指定了一个确定的目标,就是我们基地里的那个指挥部。指定目标后,AI会以消灭这个目标为战略方针展开进攻。也许你会问。我指定了指挥中心作为目标。那么电脑会不会到时候一股脑儿一路就往这个指挥中心冲过来,不管中途的敌人了?当然不会。AI不是傻子。它会排除攻击路线上所有有威胁的目标,甚至还会释放通常的技能。当然你真要让AI对一个目标展开自杀性攻击,不顾沿路任何阻拦也不是不行。不过不是本文要讨论的内容。
另外。给AI指定目标的方式并不单一。这里指定一个单独单位只是一个例子。仔细看看AI类的动作的话,你会发现你可以把目标指定为各种各样的东西。比如你可以把一个区域指定为目标,让AI攻击这个区域内的所有敌人,或者是镇守那里。甚至可以把一个单位组指定为目标,也可以笼统的把一家玩家指定为目标。也可以把另一拨攻击部队指定为会师目标,这两拨部队就会会师一处,等等。你也可以让部队进行巡逻、骚扰等等。反正SC2的AI功能函数都超强的。不过这是初级演示,更多的就暂且不提了。
第三条动作让部队立刻出击了。你可以指定下一拨攻击波次多久后出击,我这里设为0,也就是立刻出动。
所以要让AI部队进攻只需要做三件事:1]指定哪些人出击、2]指定攻击目标、3]指定出击时间。
怎么样,超简单的吧? 实际效果的截图
RENEE 3Q,先顶再看,话说,再你说等会发的时候,我已经研究出来了,并且我发现刷兵的方法可以有很多种,只要满足设定的条件即可,我现在正在改进我那个地图,准备做好了,传上来给新手一个方向,我可是用简中编辑器的哦.相信只要不脑残都能看明白. 头目~ GA没有收藏功能么?用IE收藏这么多贴子可真是麻烦事~ 有啊~~
帖子的最后就有这样一个东西。 引用第2楼大贤良师于2011-04-06 13:46发表的:
RENEE 3Q,先顶再看,话说,再你说等会发的时候,我已经研究出来了,并且我发现刷兵的方法可以有很多种,只要满足设定的条件即可,我现在正在改进我那个地图,准备做好了,传上来给新手一个方向,我可是用简中编辑器的哦.相信只要不脑残都能看明白. images/back.gif
那就写吧。我们会鼓励多出新人向教程。 噢不~~~ 我看到的不一样呢,希望不是镜像了。
只有顶楼有。帖子评价的上面。 好丢人... 顶楼主,我顺便问下,除了用触发器指挥单位去做什么事情,SC2如何编写宏观层面的AI呢,比如:
1、电脑玩家像war3遭遇战那样,电脑知道发展,造兵,选择龟缩或者rush,当然是在我们自定义的地图上,单位建筑都是玩家自己自定义的,玩家如何编写AI让电脑合理使用玩家所创建的单位呢?
2、对于某个特定的单位,如施法单位,如何能让它不通过频繁的触发器调用也能做到像电脑AI操控圣堂那样合理使用技能? 引用第9楼warsong2011于2011-04-06 15:24发表的:
顶楼主,我顺便问下,除了用触发器指挥单位去做什么事情,SC2如何编写宏观层面的AI呢,比如:
1、电脑玩家像war3遭遇战那样,电脑知道发展,造兵,选择龟缩或者rush,当然是在我们自定义的地图上,单位建筑都是玩家自己自定义的,玩家如何编写AI让电脑合理使用玩家所创建的单位呢?
2、对于某个特定的单位,如施法单位,如何能让它不通过频繁的触发器调用也能做到像电脑AI操控圣堂那样合理使用技能? images/back.gif
这些都需要些专门教程来说明,不是一两句话能解决的。我的教程计划表排的很长,不知道有没有机会写关于AI方面的内容。
不过,对于施法AI的话。我必须说明一句。SC2所有的单兵施法AI都是由AI脚本或者XML实现的。就算是HT也是一样。 不过比起war3时代自定义游戏里那种“AI”。SC2的单兵施法AI有些专门的规则和函数,比那时候方便和合理多了。 谢谢了,我记得War3编辑器里有专门的AI编辑界面,貌似可以选先出哪个英雄什么的,但是自己从来没研究过。
SC2里貌似没看到新建AI脚本的界面,到哪里可以看到游戏中的AI脚本呢?包括发展建设和单位施法条件的AI。
另外非常期待你的教程哦,很多东西自己研究很没头绪,有个例子稍微点下就茅塞顿开了 头目威武 引用第12楼warsong2011于2011-04-06 17:51发表的:
谢谢了,我记得War3编辑器里有专门的AI编辑界面,貌似可以选先出哪个英雄什么的,但是自己从来没研究过。
SC2里貌似没看到新建AI脚本的界面,到哪里可以看到游戏中的AI脚本呢?包括发展建设和单位施法条件的AI。
另外非常期待你的教程哦,很多东西自己研究很没头绪,有个例子稍微点下就茅塞顿开了 images/back.gif
都在mpq里呢。单独的AI编辑器确实没有。
回 14楼(麦德三世) 的帖子
我昨天看了下,貌似数据编辑器里有AI和Advanced AI,里面有类似Attack Wave这些宏观控制的行为,不过依旧不是真正意义上的战略AI,不知道能不能在辅助触发器的情况下实现自定义的战略AI呢?改文件什么的最讨厌了 目前战略AI的脚本版没有GUI支持。不过XML版有。就是在数据编辑器里。 新人提问:任意单位死亡这个条件不需要指定是哪个玩家么? 没有必要特别去指定。
因为每个单位死掉后都会判断一次条件,看进攻组里有几个活着的跳虫,小于X就增员。
如果是别人死了,那么对组里的人数没有影响,所以也就不会做什么动作。 我参照楼主的教程做了一遍,但是跳虫刷出来不攻击,请问这是为什么呢?琢磨半天了..
文件我上传了..
页:
[1]
2