找回密码
 点一下
查看: 1847|回复: 6

[小贴士]刷兵的另外一些方法...

[复制链接]
发表于 2011-4-7 22:42:44 | 显示全部楼层 |阅读模式
联动贴

http://bbs.islga.org/read-htm-tid-53039.html
http://bbs.islga.org/read-htm-tid-53060.html

这个帖子继续介绍一种刷兵的方法,使用到了行为“孵化”(CBehaviorSpawn),这个行为本身并没有多少属性,仅有的一些编辑器中标注的也比较明白,需要注意到的地方我在下面会和大家提到。

首先要实现的要求是“开始游戏10秒后电脑刷100只小狗,然后进攻到某地点。当小狗数量小于10以后,那么就刷下一波100只。”

我们新建一个行为“孵化”CBehaviorSpawn,首先编辑其属性“信息数组+”,里面有5个项目,分别是单位、计数、所需条件、效果和延迟。要满足上面的要求我们初步设置如下:
[codes=xml]
&#160;&#160;&#160;&#160;<CBehaviorSpawn id="ShuaBing">
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<InfoArray>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<Unit value="ZerglingBurrowed"/>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<Count value="100"/>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<Delay value="0.25"/>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</InfoArray>
&#160;&#160;&#160;&#160;</CBehaviorSpawn>
[/codes]
理想的效果是该行为会每0.25秒刷新出100个埋地小狗,其实一个也刷不出来...

这个行为还有一个属性“偏移”,里面可以设置多个偏移值,编辑器中介绍说“当某单位生成时,它会随机从该列表中选择一个偏移量”。不知道是翻译问题还是什么别的,总之别信它,这个列表属于“一个萝卜一个坑”型的,也就是说你想要能够(注意不是一次性哦,是总和)创建100个单位,那么就需要100个偏移量,一个一个添加真是会累死人,不过好在有简便方法。
[codes=xml]
&#160;&#160;&#160;&#160;<CBehaviorSpawn id="ShuaBing">
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<Offset index="99" value="0,0"/>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<InfoArray>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<Unit value="ZerglingBurrowed"/>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<Count value="100"/>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<Requirements value="ZerglingNum"/>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<Delay value="0.25"/>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</InfoArray>
&#160;&#160;&#160;&#160;</CBehaviorSpawn>
[/codes]
这样再次打开地图,它就会自动添加到100个了。

接下来是所需条件
CountUnit(Zergling,CompleteOnly)[TechTreeCheat] <= 10 && CountUnit(ZerglingBurrowed,CompleteOnlyAtUnit)[TechTreeCheat] < 100
描述为“小狗总量小于等于10 且 埋地小狗小于100”,当满足这个条件时,这个行为就会开始刷小狗出来了。

需要注意的是,小狗的数量统计要使用CompleteOnly,因为行为创造出来的是埋地小狗,小狗是“变”出来的,因此不算拥有该行为的单位生产的。后面的埋地小狗数量小于100,是因为这个行为生产单位虽然看起来是指定了100个,但是还是一个一个生产的,每生产一个就会重新检查一下所需条件。这两个条件搭配起来的意思应该很明显了吧。

触发的话是仿照头目的写的,我直接贴出来了,有疑问的话可以看头目的帖子。[trigger]
无标题的触发器 002
&#160;&#160;&#160;&#160;事件
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;游戏 -地图初始化
&#160;&#160;&#160;&#160;局部变量
&#160;&#160;&#160;&#160;条件
&#160;&#160;&#160;&#160;动作
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;AI -为玩家2启用战役AI
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;玩家 -使玩家2将玩家1视为以共享视野的方式结盟
[/trigger][trigger]
asd
&#160;&#160;&#160;&#160;事件
&#160;&#160;&#160;&#160;局部变量
&#160;&#160;&#160;&#160;条件
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;(创建单位的行为)==刷兵
&#160;&#160;&#160;&#160;动作
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;单位组 -添加(创建的单位)到小狗队
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;变量 -修改n:+1
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;综合 -If (条件) then do (动作) else do (动作)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;If
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;n>=100
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Then
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;AI -为玩家2添加小狗队到下一个攻击波次中
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;AI -将玩家2的目标攻击波次设置为点 003
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;AI -将取自玩家2的攻击波次发送到0秒后的攻击并不要等待
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;变量 -设置n = 0
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Else
[/trigger]
组建一个攻击波次的方式和头目的教程略不一样,因为事件响应的是单位被创建,所以是一个一个的,我这里用一个变量记录下数量,到了100就让小狗冲啦。[trigger]
无标题的触发器 003
&#160;&#160;&#160;&#160;事件
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;计时器 -已流逝时间为10.0游戏时间秒
&#160;&#160;&#160;&#160;局部变量
&#160;&#160;&#160;&#160;条件
&#160;&#160;&#160;&#160;动作
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;单位 -为玩家2 在点 002创建1个面向270.0度(无选项)的水晶塔
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;单位 -从(上一次创建的单位)中添加1刷兵到(上一次创建的单位)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;综合 -自定义脚本:TriggerAddEventUnitCreated(gt_asd, UnitRefFromUnit(UnitLastCreated()), null, null);
[/trigger]




如果是周期性的刷兵呢?比起上面那个就简单多啦,如下:
[codes=xml]
&#160;&#160;&#160;&#160;<CBehaviorSpawn id="ShuaBing2">
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<Offset index="29" value="0,0"/>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<InfoArray Unit="ZerglingBurrowed" Count="30" Delay="10"/>
&#160;&#160;&#160;&#160;</CBehaviorSpawn>
[/codes]
如此,每10秒刷30个埋地小狗,不需要条件了。
注意触发里面有个需要注意的地方,把单位组的单位放进攻击波次以后,建议清空掉单位组。如果不这样做,下一波狗刷出来而上一波还在行进当中的话(它们被加进同一个单位组中了,然后也加入了同一个攻击波次),懂得团队协作的小狗会停下来直到汇合了才继续前进,不想要这个效果的话就清空掉单位组吧。

哦,顺带一提,要开始战役AI得有两个前提,一是依赖项里面要添加上战役的MOD,而是要将欲开启AI的玩家开启了。这两个小细节让我郁闷了好久...



周期性刷兵这种效果还可以使用另外一种方法处理,如下:
[codes=xml]
BehaviorData.xml
&#160;&#160;&#160;&#160;<CBehaviorSpawn id="ShuaBing3">
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<InfoArray>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<Unit value="4SlotBag"/>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<Delay value="10"/>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<Count value="1"/>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<Effect value="Set"/>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</InfoArray>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<Offset value="0,0"/>
&#160;&#160;&#160;&#160;</CBehaviorSpawn>


EffectData.xml
&#160;&#160;&#160;&#160;<CEffectSet id="Set">
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<EffectArray value="TimedLifeFate"/>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<EffectArray value="xx"/>
&#160;&#160;&#160;&#160;</CEffectSet>
&#160;&#160;&#160;&#160;<CEffectCreateUnit id="xx">
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<CreateFlags index="Placement" value="0"/>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<SpawnOwner Value="Caster"/>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<SpawnUnit value="Marine"/>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<SpawnCount value="20"/>
&#160;&#160;&#160;&#160;</CEffectCreateUnit>
[/codes]

这样的方法有几点要注意:
1,BehaviorSpawn.InfoArray中的Unit必须是有效单位、Count必须大于0,不然Effect不会触发的。创建出来的没用单位去死就好了,我用TimedLifeFate处理了(话说回来,不杀也不行啊,就一个坑...)。
2,EffectCreateUnit里面最好把Placement钩去,不然单位没地方放它就不放了...不知道是我设置有问题还是什么,总之那个“放置范围”500完全是摆设。
3,触发里面有[codes=galaxy]
// - c_unitEventCreated
native unit&#160;&#160;&#160;&#160; EventUnitCreatedUnit ();
native string&#160;&#160; EventUnitCreatedAbil ();
native string&#160;&#160; EventUnitCreatedBehavior ();[/codes]
居然没有EventUnitCreatedEffect,而且效果xx创建的单位居然不算是CompleteOnlyAtUnit,这个我得用红字标出来,为啥啊?

上面的问题求解,不知道是否另有玄机,请大家赐教了。



再假设一种情况,刷出一支队伍,始终维持10叉叉5追猎3白球3巨像的组合,死了马上刷新
[codes=xml]&#160;&#160;&#160;&#160;<CBehaviorSpawn id="ShuaBing4">
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<InfoArray Unit="Zealot" Requirements="ChaChaNum"/>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<InfoArray Unit="Stalker" Requirements="ZhuiLieNum"/>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<InfoArray Unit="Archon" Requirements="BaiQiuNum"/>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<InfoArray Unit="Colossus" Requirements="JuXiangNum"/>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<Offset index="20" value="0,0"/>
&#160;&#160;&#160;&#160;</CBehaviorSpawn>[/codes]
需求条件里面设定上相应的数目就OK了,应该很简单吧。




我们最后假设一个情况,现在我们要生产非埋地小狗100只,让它们出去攻击,剩10个后再刷100只出来,虽然看起来跟第一个很像,但还是有区别的。提示,参考虫族基地生产幼虫的方法,那么,有兴趣的同学就试试看吧。

孵化 - 测试 2.SC2Map

39 KB, 下载次数: 16

评分

参与人数 1威望 +4 收起 理由
麦德三世 + 4 鼓励新教程~~

查看全部评分

 楼主| 发表于 2011-4-7 23:02:43 | 显示全部楼层
对了,忘了说。
可能会有错误吧,如果发现了请指出来吧,我会修改的。
回复

使用道具 举报

发表于 2011-4-7 23:03:26 | 显示全部楼层
我那帖子主要是为了傻瓜化一点。当用到XML和动态事件注册和自定义函数的时候就傻瓜不起来了呢。
回复

使用道具 举报

发表于 2011-4-7 23:55:48 | 显示全部楼层
当然新教程都是应该鼓励的~~

话说~~其实如果你不用战役mod的话,也就不用开启战役AI了~~开启对战AI就可以了~~

开启战役AI只是为了让电脑能正确操作那些战役兵种而已~~你不依赖战役mod也就用不着战役AI~~
回复

使用道具 举报

发表于 2011-4-8 00:17:50 | 显示全部楼层
CBehaviorSpawn

不知道为什么·我最多只能刷24个出来···这个
回复

使用道具 举报

发表于 2011-4-8 00:18:22 | 显示全部楼层
你有没有设置上限呢。
回复

使用道具 举报

 楼主| 发表于 2011-4-8 00:59:23 | 显示全部楼层
帖子是一边试验一边写出来的,可能看起来很乱吧,而且很可惜,不能把知识挖得更深一点。

有时间的话,我还是会写一些把玩编辑器的心得的,能帮到大家一点点的话就很开心啦。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-18 21:50 , Processed in 0.200467 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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