对红警3MOD翻译篇的补充以及一些总结和心得

[红警2共和国之辉下载www.xtcdj.com| 更新日期:2009年6月8日
Hallo大家好,我是为大家提供“全能鬼王”的作者。其实我也只是一位MOD的初学者。由于本人身在德国留学马上进入头痛的考试期,便没有多余的时间研究如何制作MOD。所以觉得有必要把我这几天总结的一些东西分享出来,能让许多有意制作MOD的人有个参考,少走弯路、提高水平制作更完美的作品给我们大家分享。


言归正传进入第一部分:  对woshifyf翻译的RA3MOD初级翻译教程的一些补充
1.根据自己理解,MOD中的语言其实也是属于高级语言,只要根据字面意思来理解,还是能够判断出程序是实现那段功能的。当然需要一些基本的英文功底。(有时候可以看!号后面的内容它的功能就是告诉程序不要执行此命令,所以编程人员通常会用它来提醒自己做些简单的注释。)
2.编译语言和C语言其实也是比较相近的,无非是函数的定义,调用,判断。区别是无循环,不能重复定义两次,所以这就是为什么第一部分所说的
<GameObject
  id=”AlliedAntiVehicleVehicleTech1”以下省略,中要改成id=”mytank”。因为初级篇里讲的是如何加入新单位,而这个新单位必须在不影响原有单位的同时。调用的函数、,模型都是以前的单位,换句话说,如果不改名字修改数据就是变成了修改原有单位的数据。

而LogicCommand 和 LogicCommandSet,这两个文件就是在添加新单位中起了至关重要的作用。它们的作用就是在于逻辑判断,规定什么东西是可以被制造的,在那里制造,可以做哪些基本指令等。

举例1:<LogicCommandSet
  id=”AlliedWarFactoryCommandSet”>
  <Cmd>Command_ConstructAlliedMiner</Cmd>
  <Cmd>Command_ConstructAlliedAntiInfantryVehicle_Ground</Cmd>
  <Cmd>Command_ConstructAlliedAntiAirVehicleTech1</Cmd>
  <Cmd>Command_ConstructAlliedAntiVehicleVehicleTech1</Cmd>
  <Cmd>Command_Constructmytank</Cmd>
  <Cmd>Command_ConstructAlliedAntiStructureVehicle</Cmd>
  <Cmd>Command_ConstructAlliedAntiVehicleVehicleTech3</Cmd>
  <Cmd>Command_ConstructAlliedMCV</Cmd>  
如字面意思,alliedwarfactorycommandset就是盟军战争工厂设定,即美国车库能制造的单位,一种看见mytank没,这条命令就是告诉工厂能制造单位的目录里加入mytank.


重点:  我觉得初级篇里最重要的就是mod.xml文件。它是制作MOD不可缺的,它的功能就有点类似C语言中的main()一样。是告诉程序需要调用那些文件。换句话说,你修改了那些内容就要告诉mod.xml文件。就如同原篇里的最后3行划线的部分。因为作者该了这三个文件.(注意文件路径)。

举例2: 如果我想修改武器,那我该做的就是把原来的weapon.xml文件复制到mymod\data下,然后修改完保存后,最后添加一句
<Include type=”all” source=”DATA:mymod/Data/weapon.xml”/>

原文:<?xml version=”1.0″ encoding=”UTF-8″?>
<AssetDeclaration xmlns=”uri:ea.com:eala:asset” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“>
<Tags></Tags>
<Includes>
  <!–
   mod.xml is the central include for mod setup data.  
  –>
  <!– These includes need to be in all mod.xml files –>
  <Include type=”reference” source=”DATA:static.xml” />
  <Include type=”reference” source=”DATA:global.xml” />   
  <Include type=”reference” source=”DATA:audio.xml” />
                <Include type=”all” source=”DATA:mymod/Data/LogicCommand.xml”/>
                <Include type=”all” source=”DATA:mymod/Data/LogicCommandSet.xml”/>
                <Include type=”all” source=”DATA:mymod/Data/mytank.xml”/>
  
</Includes>
</AssetDeclaration>


所以说如果你只改了武器,划线的3句全部不要,只要加一句<Include type=”all” source=”DATA:mymod/Data/weapon.xml”/>就行了。还是那句话,你改了什么就告诉mod.xml哪些文件要另外加载一片,如果不加程序会加载默认的数据。


我想第一部分应该就这些,稍后还会陆续更新一些技巧与心得等。

进阶MOD翻译教程的一些补充:
首先冲单位修改来说起。它也是修改的主干部分,很多其他的小细节都是从这里分出去的。
下面就是根据翻译篇里个人觉得重要的一些细节。(其实只要你仔细阅读程序很多部分都能独立完成,不需要看什么教程类的。还是那句话,英语很重要)
1.More info on editing units 关于修改单位的更多信息

Kindof的定义:一个制约环境来过滤这个单位可以做什么,不可以做什么。 这其实正确,它只是起到一个定义的作用。比如一个单位是陆地单位,即便你给它加了两栖属性,它依旧不能下水。kindof只是起了一个定义的作用,让其他程序执行判断,所以定义功能用处不大。
那么如何制作两栖单位呢?
    用我的鬼王举例:打开JapanAntiVehicleVehicleTech3.xml
  1。)你可以在kindof上加上AMPHIBIOUS,它的作用只不过是起到一个说明。你在建造单位表里看见他是两栖,作用不大。
  2.) 我们要修改的是Locomotor.xml即行动文件。复制它到你的文件里,然后用查找功能查到
<LocomotorTemplate


  id="JapanAntiVehicleVehicleTech3Locomotor"
  Surfaces="GROUND CRUSHABLE_OBSTACLE WATER DEEP_WATER"
      红色部分便是要加上去的部分。告诉表面包括水域和深水。
修改完成后保存,记得我前面说过什么吗?对,便是在mod.xml里加上调用语句,当然文件名就是Locomotor.xml.
这样单位就能下水了。

接下来draw 的部分都是对模型的描述与判断大可不去理会。但是对追求视觉效果的朋友来说也是值得一试,那我的鬼王激光为例。
<LaserDraw
    id="ModuleTag_LaserDraw1"
    Texture1_UTile="1"
    Texture1_VTile=".2"
    Texture1_UScrollRate="0"
    Texture1_VScrollRate="1"
    Texture1_NumFrames="1"
    Texture1_FrameRate="30"
    Texture2_UTile="1"
    Texture2_VTile=".8"


    Texture2_UScrollRate="0"
    Texture2_VScrollRate="1"
    Texture2_NumFrames="1"
    Texture2_FrameRate="30"
    LaserWidth="15"
    LaserStateID="101">
看见红色部分了么?不错,那就是激光宽度,我故意加了5,让激光看起来更粗一些,当然下面的一些LaserDraw2等都需要一起修改。 上面的螺旋参数之类的各位朋友可以自己琢磨。

想要给你的单位添加新的能力吗? 比如我鬼王上面的隐形技能。
隐性技能来自盟军的迷彩坦克,好吧,我们去看迷彩坦克的原版文件AlliedAntiVehicleVehicleTech3。怎么找技能呢?尽量发挥你的英语技能吧,迷彩是什么,啊是mirage.好我们搜索mirage,真的有啊。(或者隐性也行,Invis....)
<!-- mirage special power -->                                                      这行就是典型的程序员标识。“!”


   <InvisibilityBroadcastUpdate                                                    隐性程序开始啦
    id="ModuleTag_BroadcastInvisibility"
    BroadcastRange="175"                                                          作用半径,改大改小随便
    UpdatePeriod="0.2s"
    AffectsSelf="true"                                                                    是否自己也能也行,原来是false,我想鬼王自己也隐形就改了        
    InvisibilityTemplate="AlliedAntiVehicleVehicleTech3InvisibilityBroadcastTemplate">
    <BroadcastObjectFilter                                                            明显的过滤器,定义那些单位能被作用
     Rule="ANY"                                                                            规则
     Relati                                                             ALLIES标识所有方
     Include="INFANTRY VEHICLE"                                                包括=“步兵,载具
     StatusBitFlagsExclude="AIRBORNE_TARGET BROADCASTING_INVISIBILITY IGNORING_STEALTH">   
     <ExcludeThing>SovietAntiGroundAircraft</ExcludeThing>      排除的事情即不允许的判定
    </BroadcastObjectFilter>
       </InvisibilityBroadcastUpdate>

好了,既然找到它了就把整个程序段复制到你自己的修改鬼王的修改文件吧JapanAntiVehicleVehicleTech3.xml(注意不是原文件)保存后记得别忘了在MOD.xml里执行JapanAntiVehicleVehicleTech3的调用命令。


为什么鬼王可驻兵


其实如果你看懂上面一段后就明白这是同一个道理。驻兵想想那些东西能驻兵又能攻击?没错,苏联的碉堡么。去苏联的建筑里找到SovietBunker.xml
好了发挥你英语的时候有到了,驻兵是什么?Garrison,快速用查找吧。
<GarrisonContain
    id="ModuleTag_Garrison"
    ObjectStatusOfContained="ENCLOSED UNSELECTABLE CAN_ATTACK"   能够攻击的定义而已                                                
ContainMax="5"                                 能带多少人数      
  EnterSound="GenericBuilding_Garrison"            
    AllowEnemiesInside="false"                                                         允许敌人进入吗,当然不

    AllowAlliesInside="true"                                                              盟友允许进入
    AllowNeutralInside="true"                                                            同意自然单位进入
    AllowOwnPlayerInsideOverride="false"                                        允许撤出吗?为了防止程序错误我选择不
    ShowPips="true"
    PassDisabilityToRiders="true"

    KillPassengers>                                                单位死后驻兵也死吗?
    <PassengerFilter                                                                         驻入乘客的过滤程序
     Rule="ANY"
     Include="INFANTRY AIRCRAFT">
     <ExcludeThing>AlliedScoutInfantry</ExcludeThing>                3条不允许进入的特例
     <ExcludeThing>SovietScoutInfantry</ExcludeThing>
     <ExcludeThing>SovietScoutVehicle</ExcludeThing>
    </PassengerFilter>
    <DieMuxData
     DeathTypes="ALL" />
    <PassengerData
     B>
     <Filter
      Rule="ANY"
      Include="INFANTRY"/>     
    </PassengerData>     
   </GarrisonContain>

好了,就是它了,把这段程序段也复制到你单位的主文件里吧,然后保存,加载。