找回密码
 点一下
查看: 11042|回复: 33

最傻瓜化的刷兵和攻击演示~~(触发器超新手向)

[复制链接]
发表于 2011-4-6 13:26:14 | 显示全部楼层 |阅读模式
SC2的AI控制函数比War3强大多了。所以很多刷兵和攻击只需要两三条刷兵操作就能由AI代劳。

用war3触发器做过刷兵和进攻的同学可能都遇到过这样一个问题。由于命令用的是攻击-移动。结果半路上部队被人晕了什么的,直接就会导致单位呆在原地不继续前进什么的。需要每隔一段时间重复发布攻击命令才行。而采用AI的强智能化的AI的话就没有这样的问题。

我这里就以“大贤良师”同学提的刷兵问题为基础做一个最傻瓜化的刷兵及攻击的演示。
http://bbs.islga.org/read.php?tid=53013#547992


“大贤良师”希望做出这样的效果。开始游戏10秒后电脑刷100只小狗,然后进攻你的基地。当小狗数量小于X以后,那么就刷下一波100只。无限这样下去只到你的指挥中心被推掉。

以下是步骤,总共只需要三道触发器:

在地图初始化时,先为电脑玩家开启AI。注意要是不开启AI的话以下的命令全部都是没用的。这里是开启战役AI。

[trigger]
对战初始化
    Events
        Game - Map initialization
    Local Variables
    Conditions
    Actions
        AI - Start the campaign AI for player 2
[/trigger]

为了照顾简体中文版的玩家。我也贴下简体中文版本:

注意这个触发器和上面那个触发器是同一个触发器。只是一个是英文版,一个是中文版。下同。
[trigger]
对战初始化
    事件
        游戏 -地图初始化
    局部变量
    条件
    动作
        AI -为玩家2启用战役AI
[/trigger]




然后我们做个简单的游戏失败设定:
也就是当指挥中心死亡时,游戏就告失败。具体的失败条件大家可以随便填。
[trigger]
游戏失败
    Events
        Unit - Logistics Headquarters [72.50, 97.50] dies
    Local Variables
    Conditions
    Actions
        Game - End game in Defeat for player 1 (Show dialogs, Show score screen)
[/trigger]

[trigger]
游戏失败
    事件
        单位 -后勤总部 [72.50, 97.50]死亡
    局部变量
    条件
    动作
        游戏 -为玩家1以战败结束游戏(显示对话,显示得分画面)
[/trigger]


然后,最主要的是第三个触发器:

我会对这个触发器的每一条动作作逐一讲解。

[trigger]
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 [72.50, 97.50]
        AI - Send the attack wave from player 2 to attack in 0 seconds and Don't Wait
[/trigger]

[trigger]
跳虫攻击
    事件
        计时器 -已流逝时间为10.0游戏时间秒
        单位 -任意单位死亡
    局部变量
    条件
        (在跳虫数量内的活体单位数)<=X
    动作
        纠错 -显示"新的一波跳虫来袭!"为使用类型1的纠错输出,并执行在游戏窗口中将其显示
        单位 -为玩家2 在跳虫刷新点创建100个面向270.0度(无选项)的跳虫 (已潜地)
        变量 -设置跳虫数量 = (在(整张地图)内的属于玩家2的,并且匹配不包括: 发射物, 死亡的, 隐藏的的任意单位,最多有任意数量个)
        AI -为玩家2添加跳虫数量到下一个攻击波次中
        AI -将玩家2的攻击波次的目标设为后勤总部 [72.50, 97.50]
        AI -将取自玩家2的攻击波次发送到0秒后的攻击并不要等待
[/trigger]

其中,全局变量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]指定出击时间。


怎么样,超简单的吧?

Spawn.SC2Map

1.13 MB, 下载次数: 1013

 楼主| 发表于 2011-4-6 13:30:59 | 显示全部楼层
实际效果的截图

Screenshot2011-04-06 12_38_20.jpg

   Screenshot2011-04-06 12_32_35.jpg

   Screenshot2011-04-06 12_19_46.jpg

Screenshot2011-04-06 12_14_00.jpg
回复 1 0

使用道具 举报

发表于 2011-4-6 13:46:37 | 显示全部楼层
RENEE 3Q,先顶再看,话说,再你说等会发的时候,我已经研究出来了,并且我发现刷兵的方法可以有很多种,只要满足设定的条件即可,我现在正在改进我那个地图,准备做好了,传上来给新手一个方向,我可是用简中编辑器的哦.相信只要不脑残都能看明白.
回复

使用道具 举报

发表于 2011-4-6 14:30:48 | 显示全部楼层
头目~ GA没有收藏功能么?用IE收藏这么多贴子可真是麻烦事~
回复

使用道具 举报

 楼主| 发表于 2011-4-6 14:33:50 | 显示全部楼层
有啊~~

捕获.PNG

帖子的最后就有这样一个东西。
回复

使用道具 举报

 楼主| 发表于 2011-4-6 14:35:40 | 显示全部楼层
引用第2楼大贤良师于2011-04-06 13:46发表的  :
RENEE 3Q,先顶再看,话说,再你说等会发的时候,我已经研究出来了,并且我发现刷兵的方法可以有很多种,只要满足设定的条件即可,我现在正在改进我那个地图,准备做好了,传上来给新手一个方向,我可是用简中编辑器的哦.相信只要不脑残都能看明白.

那就写吧。我们会鼓励多出新人向教程。
回复

使用道具 举报

发表于 2011-4-6 14:39:09 | 显示全部楼层
噢不~~~ 我看到的不一样呢,希望不是镜像了。
2011-4-6 14-35-06.jpg
回复

使用道具 举报

 楼主| 发表于 2011-4-6 14:51:40 | 显示全部楼层
只有顶楼有。帖子评价的上面。
回复

使用道具 举报

发表于 2011-4-6 15:03:14 | 显示全部楼层
好丢人...
回复

使用道具 举报

发表于 2011-4-6 15:24:56 | 显示全部楼层
顶楼主,我顺便问下,除了用触发器指挥单位去做什么事情,SC2如何编写宏观层面的AI呢,比如:
1、电脑玩家像war3遭遇战那样,电脑知道发展,造兵,选择龟缩或者rush,当然是在我们自定义的地图上,单位建筑都是玩家自己自定义的,玩家如何编写AI让电脑合理使用玩家所创建的单位呢?

2、对于某个特定的单位,如施法单位,如何能让它不通过频繁的触发器调用也能做到像电脑AI操控圣堂那样合理使用技能?
回复

使用道具 举报

 楼主| 发表于 2011-4-6 15:28:36 | 显示全部楼层
引用第9楼warsong2011于2011-04-06 15:24发表的  :
顶楼主,我顺便问下,除了用触发器指挥单位去做什么事情,SC2如何编写宏观层面的AI呢,比如:
1、电脑玩家像war3遭遇战那样,电脑知道发展,造兵,选择龟缩或者rush,当然是在我们自定义的地图上,单位建筑都是玩家自己自定义的,玩家如何编写AI让电脑合理使用玩家所创建的单位呢?

2、对于某个特定的单位,如施法单位,如何能让它不通过频繁的触发器调用也能做到像电脑AI操控圣堂那样合理使用技能?

这些都需要些专门教程来说明,不是一两句话能解决的。我的教程计划表排的很长,不知道有没有机会写关于AI方面的内容。

不过,对于施法AI的话。我必须说明一句。SC2所有的单兵施法AI都是由AI脚本或者XML实现的。就算是HT也是一样。
回复

使用道具 举报

 楼主| 发表于 2011-4-6 15:34:25 | 显示全部楼层
不过比起war3时代自定义游戏里那种“AI”。SC2的单兵施法AI有些专门的规则和函数,比那时候方便和合理多了。
回复

使用道具 举报

发表于 2011-4-6 17:51:31 | 显示全部楼层
谢谢了,我记得War3编辑器里有专门的AI编辑界面,貌似可以选先出哪个英雄什么的,但是自己从来没研究过。

SC2里貌似没看到新建AI脚本的界面,到哪里可以看到游戏中的AI脚本呢?包括发展建设和单位施法条件的AI。

另外非常期待你的教程哦,很多东西自己研究很没头绪,有个例子稍微点下就茅塞顿开了
回复

使用道具 举报

发表于 2011-4-7 16:38:49 | 显示全部楼层
头目威武
回复

使用道具 举报

 楼主| 发表于 2011-4-7 23:10:25 | 显示全部楼层
引用第12楼warsong2011于2011-04-06 17:51发表的  :
谢谢了,我记得War3编辑器里有专门的AI编辑界面,貌似可以选先出哪个英雄什么的,但是自己从来没研究过。

SC2里貌似没看到新建AI脚本的界面,到哪里可以看到游戏中的AI脚本呢?包括发展建设和单位施法条件的AI。

另外非常期待你的教程哦,很多东西自己研究很没头绪,有个例子稍微点下就茅塞顿开了

都在mpq里呢。单独的AI编辑器确实没有。
回复

使用道具 举报

发表于 2011-4-8 09:42:19 | 显示全部楼层

回 14楼(麦德三世) 的帖子

我昨天看了下,貌似数据编辑器里有AI和Advanced AI,里面有类似Attack Wave这些宏观控制的行为,不过依旧不是真正意义上的战略AI,不知道能不能在辅助触发器的情况下实现自定义的战略AI呢?改文件什么的最讨厌了
回复

使用道具 举报

 楼主| 发表于 2011-4-12 07:13:49 | 显示全部楼层
目前战略AI的脚本版没有GUI支持。不过XML版有。就是在数据编辑器里。
回复

使用道具 举报

发表于 2011-4-12 13:02:41 | 显示全部楼层
新人提问:
任意单位死亡这个条件不需要指定是哪个玩家么?
回复

使用道具 举报

 楼主| 发表于 2011-4-12 13:39:00 | 显示全部楼层
没有必要特别去指定。

因为每个单位死掉后都会判断一次条件,看进攻组里有几个活着的跳虫,小于X就增员。

如果是别人死了,那么对组里的人数没有影响,所以也就不会做什么动作。
回复

使用道具 举报

发表于 2011-4-12 14:43:28 | 显示全部楼层
我参照楼主的教程做了一遍,但是跳虫刷出来不攻击,请问这是为什么呢?琢磨半天了..
文件我上传了..

刷兵攻击_01.SC2Map

54 KB, 下载次数: 29

点评

因为ai兵力少 兵低级, 数量不够在外面等待,需要AI认为有足够强大才去打你的基地 , 你试试改数量 和兵种  详情 回复 发表于 2015-10-8 09:59
因为ai兵力少 兵低级, 数量不够在外面等待,需要AI认为有足够强大才去打你的基地 , 你试试改数量 和兵种  详情 回复 发表于 2015-10-8 09:59
回复 1 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 10:25 , Processed in 0.447758 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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