17173首页 - 免费新游 - 火爆论坛 - 游戏博客 - 游戏播客 - 百科问答 - 网游排行榜 - 网游期待榜
| 通行证 注册
竞技频道 > > 正文
RA3 MOD 的一些教学(OCL单位 护卫单位)
2009年07月08日 23:15:23     【发表/查看评论
作者:游侠 | woshifyf
这些天阅读XML文件得到了不少的信息,现在把觉得比较整块,不算零碎地部分整理一下,希望对大家做MOD有些用,高手请指正,我的这篇是抛砖引玉,希望高手能发一些触发器相关的教程,有了触发器,制作有意思的技能将会很容易,不过,我现在找到的触发器能用的也就三四处,局限性很大,请有才之人给些指导。

1.OCL单位
OCL就是ObjectCreationList,OCL单位对应于include/ObjectCreationList.xml
OCL单位,其实就是战斗中动态创建出来的单位(比如坦克杀手埋伏,苏联载具死亡后跳出的恐怖机器人,娜塔莎召唤的轰炸机,等等)
了解OCL单位,可以使我们在游戏中动态的制造出一些单位,对于制作新的技能和效果,是比较有用的。
下面以坦克杀手埋伏为例说明一下
<ObjectCreationList
id="OCL_Japan_Abmbush">
(1)<CreateObject
Options="IGNORE_ALL_OBJECTS CREATE_AT_TARGET"   IGNORE_ALL_OBJECTS:忽略其他单位 CREATE_AT_TARGET:在技能释放点创建单位
Disposition="ON_GROUND_ALIGNED"      如何分布 ON_GROUND_ALIGNED:在地面上 (不大懂具体意思)
StartingBusyTime="10s"  指坦克杀手从出现到能动的时间            
DisabledWhileBusy="true"  这个就是指坦克杀手在刚出现时不能动,和前一个相符,改为false,就不用等待。
Count="1"   数量:创建几个这样的单位
TempModelC  指坦克杀手在出现时的姿势动作(钻出洞)
TempModelC>  该动作持续10秒(就是从洞里钻出来)
<Offset  坐标偏移量
x="40"
y="0"
z="0" />
<CreateObject>JapanAntiVehicleInfantry</CreateObject>   创建的是何种单位,在这里当然是JapanAntiVehicleInfantry(坦克杀手在SDK中的名字),可以改为别的。
(1)</CreateObject>

(2)<CreateObject
Options="IGNORE_ALL_OBJECTS CREATE_AT_TARGET"
Disposition="ON_GROUND_ALIGNED"
StartingBusyTime="10s"
DisabledWhileBusy="true"
Count="1"
TempModelC
TempModelC>
<Offset 坐标偏移量(跟上一个不同,因为这是另一个位置)
x="12"
y="38"
z="0" />
<CreateObject>JapanAntiVehicleInfantry</CreateObject>
(2)</CreateObject>
。。。。。。。。下面重复的部分比较多,就不贴了               
</ObjectCreationList>
可以看到,(1)。。(1)和(2)。。(2)之间的部分基本相同,而且省略的部分也基本相同,共有5段<CreateObject>。。</CreateObject>,为什么有5段基本重复的创建单位代码,大家应该能够猜到了,因为坦克杀手埋伏会产生五个不同位置的坦克杀手,所以有5段的创建代码,仔细地观察,发现在<Offset>那里是不同的,offset是指坐标偏移,是指以技能释放点为坐标原点的坐标,正因为5段代码的偏移坐标不同,所以产生的坦克杀手的位置不同,以技能释放点为中心均匀分布,z坐标指的是垂直的高度,在这里当然是0(在地面嘛)。
结合修改单位数量和单位类型,大家完全可以把坦克杀手埋伏改成任何复合类型的召唤单位技能。

下面的是质子加农炮的攻击代码,大家知道,质子加农炮的攻击是抛射出5发质子炮弹,这5发质子炮弹,其实也是OCL单位。相应的,你可以看到<FlingObject〉(抛射物体)代码有5段,就是对应这
5发,可以添加几段这样的代码来增加加农炮的炮弹数。
<!-- creates 5 projectiles for the particle cannon -->
    <ObjectCreationList
                id="OCL_ParticleCannonProjectiles">
    <FlingObject
                        CreateObject="ParticleCannonProjectile"  创建何种单位,在这里就是ParticleCannonProjectile,质子炮弹,当然,可以试着把它修改成别的单位(没试过)
                        Count="1"   数量
                        Speed="100"  速度
                        Height="0.0" 高度
      InitialDelay="0.0s"  延迟
      UsePrimaryObjectForOffsets="true"> 确定使用偏移。
      <Offset          偏移            
              z="500"/>  垂直高度
  下面这三个应该调整的是落点的分布,因为未试过,因此不下结论。   
    <DistanceFromTarget   
              Low="75"     
              High="75"/>
      <AngleAroundTarget   
              Low="0"
              High="0"/>
      <DistanceAtTarget   
              Low="50"
              High="50"/>
    </FlingObject>
。。。。。。后面的雷同,就不贴了

下面这段是娜塔莎召唤轰炸机的代码,轰炸机也是OCL单位,修改下面的数据,可以影响轰炸机的出现时间和视觉效果,苏联的毒素轰炸机也是如此,并且通过复制代码,可以增加飞机数量。当然,轰炸机的弹药要在weapon.xml中修改。
<ObjectCreationList
                id="OCL_SovietBombingRun">
                <ParabolicCurve
                        CreateObject="Soviet_BombingRun"    创建何种单位
                        Options="TRACK_TARGET_OBJECT"      跟踪目标(游戏中在娜塔莎锁定完毕后,轰炸机会跟踪轰炸目标)
                        InitialDelay="3.5s"       出现延迟
                        ApproachTime="1.5s"       接近时间
                        StartDistanceFromTarget="500.0"     出现位置距目标的距离
                        EndDistanceFromTarget="750.0"       消失的位置距目标的距离   
                        CruiseHeight="500.0"               巡航高度
                        AttackHeight="150.0"/>              攻击时高度(俯冲式的)
        </ObjectCreationList>

还有一种动态创建单位的方法,就是利用一种特殊的武器,OCL创建武器(或者说是弹药),其实前面也有的是这样做的
在这里,顺便说明一下苏联的机器人复仇这个特殊能力的生效机制。首先,我们随便找一个苏联的载具,都可以发现这样一段代码(我是在铁锤中找的):
<xi:include
href="DATA:Includes/SovietTerrorDroneSpawnUpgradePlayerPower.xml" />
根据XML的语法,基本就是在这个位置,将Includes/SovietTerrorDroneSpawnUpgradePlayerPower.xml文件的内容加入,而该文件的内容则是:

<FireWeaponWhenDead xmlns="uri:ea.com:eala:asset" 这一句话的字面意思就把他的作用机制道明了:在死亡时开火,开什么火呢,就是开OCL单位制造武器。
        id="ModuleTag_TerrorDroneEggsSpawn"   
        InitiallyActive="true"            是否初始化激活
        DeathWeapon="TerrorDroneEggsPlayerPowerWeapon">   在嗝屁时,用什么武器开火,可以看到,是TerrorDroneEggsPlayerPowerWeapon,这个很关键。
          <DieMuxData
                DeathTypes="ALL"
                DeathTypesForbidden="KNOCKBACK"/>
        <WeaponFireProbability
                DeathType="ALL"
                ChancePercentage="20" /> 多大几率蹦出机器人
</FireWeaponWhenDead>这个机制我没有试过是否别的单位是否可用,但推论应该可用,超级反应堆可能也会有这样的机制,只不过是在死亡时开火的武器不同罢了,大家可以利用这个死亡触发器做出很多技能来,比如死亡后产生种种不同效果,自爆车什么的。

然后,在weapon.xml中找到TerrorDroneEggsPlayerPowerWeapon的代码,在这里解释一下这个武器,它的开火效果和别的武器不同,开火效果是在开火单位处创建一个指定单位。
<WeaponTemplate
id="TerrorDroneEggsPlayerPowerWeapon"
Flags="NOT_ATTRACTED_BY_MAGNETS"
Weap>
<Nuggets>
<WeaponOCLNugget  指定弹药的类型,这里是OCLNugget类型,说明开火的效果是制造OCL单位,很重要!!!弹药的类型是一个很具有可塑性的变量,通过替换不同武器的nugget类型,可以实现不同的效果(比如EMP,眩晕,清空驾驶员)。
Weap> 这里是,开火会制造出何种单位,是OCL_SovietTerrorDroneEggs。(应该可以改变,但应该仅限于OCL单位列表中的单位,其实在OCL_SovietTerrorDroneEggs中也可以改)
<RequiredUpgrade>Upgrade_SovietTerrorDroneEggs</RequiredUpgrade> 需要升级什么才能生效,Upgrade_SovietTerrorDroneEggs就是指苏联的机器人报复升级。
</WeaponOCLNugget>
</Nuggets>
</WeaponTemplate>

那么就在ObjectCreationList.xml中找OCL_SovietTerrorDroneEggs吧。
<ObjectCreationList
id="OCL_SovietTerrorDroneEggs">
<CreateObject
Options="ISSUE_MOVE_AFTER_CREATION DO_NOT_COPY_SHADERS DO_NOT_COPY_SCALE" 选项,基本无关,可以不管  
Disposition="ON_GROUND_ALIGNED"   分布
TempModelC   出现时的动作,展开中,其实就是一个跳出来的动作
TempModelC> 跳出来得动作持续2s
<CreateObject>SovietScoutVehicle</CreateObject>  !!!!重要 创建何种单位,改这个就可以实现,打一枪,出一个你想要的单位了。
</CreateObject>
</ObjectCreationList>

下面,具体应用一下这个工具吧,我们就修改维和步兵吧,让他打一枪,出一个恐怖机器人(当然,也可以是别的,这里方便起见),首先复制weapon.xml文件到你的mod的data文件夹,去掉只读属性,打开,拉到维和步兵的武器模板那里,

<WeaponTemplate
id="AlliedAntiInfantryInfantryShotgun"
                。。。。。。。。。无关内容省略
<Nuggets>改过的
<WeaponOCLNugget
Weap>
</WeaponOCLNugget>
</Nuggets>改过的
</WeaponTemplate>
将其<Nuggets>中的内容改为TerrorDroneEggsPlayerPowerWeapon中的<Nuggets>的内容,没有复制<RequiredUpgrade>Upgrade_SovietTerrorDroneEggs</RequiredUpgrade>的原因大家都很清楚,我可不想要升了机器人复仇后才能生效。然后,保存,把weapon.xml添加到Mod.xml中,编译,你就可以使用打一枪跑出一个恐怖机器人的维和步兵了!(因为原来的弹药被替换,因此不再有攻击力,当然,没准可以通过附加nugget来重新获得攻击力,我没试过,还有,恐怖机器人会从维和步兵的位置蹦出,而不是开火的位置,这是因为机器人复仇者个技能中,机器人就是从坦克(开火者)中蹦出来的,也许可以修改,但我没有深入),当然,你会觉得这样的修改很无聊(有屁用呀),但这只是一个例子,在有创意的人手中,可以实现很好的效果。

2。为单位添加守护单位
相信有不少人对红色可卡因这个mod中的飞行的将军战列舰有印象,他使用了大量的天狗战机作为护卫单位,护卫单位和航母舰载机不同,后者平时是在航母中的,而护卫单位,其实就是维修机器人类型的,一直悬浮在单位的旁边,像维修机器人一样,只不过维修机器人没有攻击力罢了。
下面我们还是以维和步兵为例,演示一下怎样为他加上三架双刃护卫。
大家应该还记得怎样为一个单位加上维修机器人吧,把以下代码复制在其<Behaviors>......</Behaviors>段中
<AssignSlavesTargetObjectSpecialPower
                                id="ModuleTag_SpecialPowerRepairVehicle"
                                SpecialPowerTemplate="SpecialPower_TargetedRepairVehicle" />
                        <SpawnBehavior
                                id="ModuleTag_SpawnRepairDrones"
                                SpawnNumberData="3" 有几个
                                InitialBurst="3"  一开始有几个
                                SpawnReplaceDelayData="10s"
                                SpawnedRequireSpawner="true"
                                KillSpawns
                                SpawnInsideBuilding="true"
                                KillSpawns
                Spawn>
                                <Die
                                        DeathTypes="ALL" />
                                <SpawnTemplate>SovietAntiGroundAircraft</SpawnTemplate>  以何种单位作为维修机器人(护卫单位),这里是我改过的SovietAntiGroundAircraft双刃。
                        </SpawnBehavior>
这样,维和步兵就有三个维修机器人了。下面就把<SpawnTemplate>XXXXXXXXXX</SpawnTemplate>中的单位改为双刃吧,即<SpawnTemplate>SovietAntiGroundAircraft</SpawnTemplate>。
到这里,如果你进入游戏,会发现,在制造了维和步兵后,的确会有三架双刃陪嫁,但是双刃不会跟随维和步兵,而只是呆在那里,并且,双刃也可以被选择,完全就像制造了三架双刃一样,这不是我们要的效果,不过利用这个你也可以做出一些有意思的现象,比如尤里的克隆技术,制造一个出两个,就可以用这种思路实现,当然,要考虑的东西也有很多,比如要去掉护卫单位对父单位的生死捆绑,地上跑的单位似乎不能作为护卫单位。
那么,如何实现护卫单位的跟随呢,在这里就可以调用维修机器人的跟随源码了,打开RA3 MOD SDK\SageXml\Soviet\Units\SovietRepairDrone.xml,找到:
<SlavedUpdate
id="ModuleTag_SlavedUpdate"
LeashRange="=$SOVIET_REPAIR_DRONE_LEASH_DISTANCE"    束缚距离,=$SOVIET_REPAIR_DRONE_LEASH_DISTANCE可以改为自己想要的数值
GuardMaxRange="=$SOVIET_REPAIR_DRONE_LEASH_DISTANCE" 最大护卫距离 =$SOVIET_REPAIR_DRONE_LEASH_DISTANCE可以改为自己想要的数值
GuardWanderRange="50"   护卫漫游距离,就是指护卫平时没事时环绕你的距离
AttackRange="0"        攻击距离,可以改为自己想要的距离,我没改,但双刃也会攻击。
UseSlaverAsControlForEvaObjectSightedEvents="false" />
复制RA3 MOD SDK\SageXml\Soviet\Units\SovietAntiGroundAircraft.xml到你的mod的data文件夹中,去只读,把上面的内容加到
<Behaviors>......</Behaviors>段中,别忘了改改参数。
好了,这个加完了,就剩最后补充的一步了,把护卫双刃的属性变一下,变为我们不能选择的,我直接在这里用了舰载机的属性。
将双刃的kindof属性设为了
KindOf="CAN_CAST_REFLECTIONS CAN_ATTACK AIRCRAFT VEHICLE PASS_EXPERIENCE_TO_PRODUCER NO_COLLIDE SKIP_IDLE_WHEN_CAPTURED LINE_OF_SIGHT_IGNORES_BUILDINGS"
PASS_EXPERIENCE_TO_PRODUCER是指单位将经验传给主人,LINE_OF_SIGHT_IGNORES_BUILDINGS可以勾掉,意思是攻击时忽略建筑。

将SovietAntiGroundAircraft.xml加到你的Mod.xml中,保存编译,就可以使用双刃护卫的维和步兵了,对了,用s键可以停止护卫单位的攻击。



以上就是这两个知识点,希望对大家作MOD有用。

我要投稿             打印 推荐给好友 发表/查看评论 会员服务区
用户: 匿名
史上最强的拼音输入法 下载>>>
评论
游戏
赛事
 WCG | ESWC | WWI  |CIG
 MGC | WGT  | IEF | OSL
分类
游戏地图 | 游戏视频 | 游戏图片 | 游戏桌面
竞技录像 | 竞技视频 | 赛事图片 | 竞技论坛
专题
© 2001-2011 www.17173.com All Rights Reserved.
建议意见:玩家留言区 玩家帮助:帮助中心
广告专线:0591-87878497 客服电话:0591-87826743 关于我们 设为首页