|
联动贴
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]
    <CBehaviorSpawn id="ShuaBing">
        <InfoArray>
            <Unit value="ZerglingBurrowed"/>
            <Count value="100"/>
            <Delay value="0.25"/>
        </InfoArray>
    </CBehaviorSpawn>
[/codes]
理想的效果是该行为会每0.25秒刷新出100个埋地小狗,其实一个也刷不出来...
这个行为还有一个属性“偏移”,里面可以设置多个偏移值,编辑器中介绍说“当某单位生成时,它会随机从该列表中选择一个偏移量”。不知道是翻译问题还是什么别的,总之别信它,这个列表属于“一个萝卜一个坑”型的,也就是说你想要能够(注意不是一次性哦,是总和)创建100个单位,那么就需要100个偏移量,一个一个添加真是会累死人,不过好在有简便方法。
[codes=xml]
    <CBehaviorSpawn id="ShuaBing">
        <Offset index="99" value="0,0"/>
        <InfoArray>
            <Unit value="ZerglingBurrowed"/>
            <Count value="100"/>
            <Requirements value="ZerglingNum"/>
            <Delay value="0.25"/>
        </InfoArray>
    </CBehaviorSpawn>
[/codes]
这样再次打开地图,它就会自动添加到100个了。
接下来是所需条件
CountUnit(Zergling,CompleteOnly)[TechTreeCheat] <= 10 && CountUnit(ZerglingBurrowed,CompleteOnlyAtUnit)[TechTreeCheat] < 100
描述为“小狗总量小于等于10 且 埋地小狗小于100”,当满足这个条件时,这个行为就会开始刷小狗出来了。
需要注意的是,小狗的数量统计要使用CompleteOnly,因为行为创造出来的是埋地小狗,小狗是“变”出来的,因此不算拥有该行为的单位生产的。后面的埋地小狗数量小于100,是因为这个行为生产单位虽然看起来是指定了100个,但是还是一个一个生产的,每生产一个就会重新检查一下所需条件。这两个条件搭配起来的意思应该很明显了吧。
触发的话是仿照头目的写的,我直接贴出来了,有疑问的话可以看头目的帖子。[trigger]
无标题的触发器 002
    事件
        游戏 -地图初始化
    局部变量
    条件
    动作
        AI -为玩家2启用战役AI
        玩家 -使玩家2将玩家1视为以共享视野的方式结盟
[/trigger][trigger]
asd
    事件
    局部变量
    条件
        (创建单位的行为)==刷兵
    动作
        单位组 -添加(创建的单位)到小狗队
        变量 -修改n:+1
        综合 -If (条件) then do (动作) else do (动作)
            If
                n>=100
            Then
                AI -为玩家2添加小狗队到下一个攻击波次中
                AI -将玩家2的目标攻击波次设置为点 003
                AI -将取自玩家2的攻击波次发送到0秒后的攻击并不要等待
                变量 -设置n = 0
            Else
[/trigger]
组建一个攻击波次的方式和头目的教程略不一样,因为事件响应的是单位被创建,所以是一个一个的,我这里用一个变量记录下数量,到了100就让小狗冲啦。[trigger]
无标题的触发器 003
    事件
        计时器 -已流逝时间为10.0游戏时间秒
    局部变量
    条件
    动作
        单位 -为玩家2 在点 002创建1个面向270.0度(无选项)的水晶塔
        单位 -从(上一次创建的单位)中添加1刷兵到(上一次创建的单位)
        综合 -自定义脚本:TriggerAddEventUnitCreated(gt_asd, UnitRefFromUnit(UnitLastCreated()), null, null);
[/trigger]
如果是周期性的刷兵呢?比起上面那个就简单多啦,如下:
[codes=xml]
    <CBehaviorSpawn id="ShuaBing2">
        <Offset index="29" value="0,0"/>
        <InfoArray Unit="ZerglingBurrowed" Count="30" Delay="10"/>
    </CBehaviorSpawn>
[/codes]
如此,每10秒刷30个埋地小狗,不需要条件了。
注意触发里面有个需要注意的地方,把单位组的单位放进攻击波次以后,建议清空掉单位组。如果不这样做,下一波狗刷出来而上一波还在行进当中的话(它们被加进同一个单位组中了,然后也加入了同一个攻击波次),懂得团队协作的小狗会停下来直到汇合了才继续前进,不想要这个效果的话就清空掉单位组吧。
哦,顺带一提,要开始战役AI得有两个前提,一是依赖项里面要添加上战役的MOD,而是要将欲开启AI的玩家开启了。这两个小细节让我郁闷了好久...
周期性刷兵这种效果还可以使用另外一种方法处理,如下:
[codes=xml]
BehaviorData.xml
    <CBehaviorSpawn id="ShuaBing3">
        <InfoArray>
            <Unit value="4SlotBag"/>
            <Delay value="10"/>
            <Count value="1"/>
            <Effect value="Set"/>
        </InfoArray>
        <Offset value="0,0"/>
    </CBehaviorSpawn>
EffectData.xml
    <CEffectSet id="Set">
        <EffectArray value="TimedLifeFate"/>
        <EffectArray value="xx"/>
    </CEffectSet>
    <CEffectCreateUnit id="xx">
        <CreateFlags index="Placement" value="0"/>
        <SpawnOwner Value="Caster"/>
        <SpawnUnit value="Marine"/>
        <SpawnCount value="20"/>
    </CEffectCreateUnit>
[/codes]
这样的方法有几点要注意:
1,BehaviorSpawn.InfoArray中的Unit必须是有效单位、Count必须大于0,不然Effect不会触发的。创建出来的没用单位去死就好了,我用TimedLifeFate处理了(话说回来,不杀也不行啊,就一个坑...)。
2,EffectCreateUnit里面最好把Placement钩去,不然单位没地方放它就不放了...不知道是我设置有问题还是什么,总之那个“放置范围”500完全是摆设。
3,触发里面有[codes=galaxy]
// - c_unitEventCreated
native unit     EventUnitCreatedUnit ();
native string   EventUnitCreatedAbil ();
native string   EventUnitCreatedBehavior ();[/codes]
居然没有EventUnitCreatedEffect,而且效果xx创建的单位居然不算是CompleteOnlyAtUnit,这个我得用红字标出来,为啥啊?
上面的问题求解,不知道是否另有玄机,请大家赐教了。
再假设一种情况,刷出一支队伍,始终维持10叉叉5追猎3白球3巨像的组合,死了马上刷新
[codes=xml]    <CBehaviorSpawn id="ShuaBing4">
        <InfoArray Unit="Zealot" Requirements="ChaChaNum"/>
        <InfoArray Unit="Stalker" Requirements="ZhuiLieNum"/>
        <InfoArray Unit="Archon" Requirements="BaiQiuNum"/>
        <InfoArray Unit="Colossus" Requirements="JuXiangNum"/>
        <Offset index="20" value="0,0"/>
    </CBehaviorSpawn>[/codes]
需求条件里面设定上相应的数目就OK了,应该很简单吧。
我们最后假设一个情况,现在我们要生产非埋地小狗100只,让它们出去攻击,剩10个后再刷100只出来,虽然看起来跟第一个很像,但还是有区别的。提示,参考虫族基地生产幼虫的方法,那么,有兴趣的同学就试试看吧。 |
评分
-
查看全部评分
|