设为首页收藏本站

红警DIY论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 33364|回复: 77

【代码篇】RA3DIY---入门教程:初级教程

  [复制链接]
发表于 2010-11-23 07:49:30 | 显示全部楼层 |阅读模式
本帖最后由 牧星 于 2012-8-23 22:07 编辑

重新编写:牧星

下面的是最初级的添加单位和build mod的教程。高手们请指正纰漏之处。

启程
本教学将指导你来如何制作一个MOD,以及如何使用RA3 MODSDK-X。

第一步:
首先你要下载RA3 MOD SDK-X:http://u.115.com/file/f318a078e0
有的学员用到这个 SDK-X时会出现“应用正常初始化(0xc0000135)失败”等之类的,请到百度搜索并安装.net framework 2.0 ,XP用2.0的,Vist及WIN7可以使用更高的版本,win8?你基本上不用DIY了,不解释哈。



第二步:
samplemod例子文件下载:【例子文件】炮艇机源码

第三步:
开始前,请记住,所有的代码符号都是在英文输入法中输入,不要用中文输入法输入这些符号。
在X:\RA3 MODSDK-X\Mods目录下,创建一个新的文件夹,命名为mymod,然后打开mymod文件夹,并在里面创建一个名为data的文件夹。到这里说明一下,RA3中的代码文件是XML格式的纯文本文件,所有的单位都有不同的XML文件组成,如:单位模的设定、武器的设定等。接下来我们就是要对XML文件进行修改,打开X:\RA3 MODSDK-X\SageXml\Allied\Units目录,复制单位文件AlliedAntiVehicleVehicleTech1,把这个文件粘贴到你的mymod/data里,把这个文件重名名为mytank,用写字板、记事本或任何代码编辑器打开这个文件,将滚动条拉至下列文本处:




  1. <GameObject
  2.   id=”AlliedAntiVehicleVehicleTech1”
  3.   inheritFrom=”BaseVehicle”
  4.   SelectPortrait=”Portrait_AlliedAntiVehicleVehicleTech1″
  5.   ButtonImage=”Button_AlliedAntiVehicleVehicleTech1_on”
  6.   Side=”Allies”
  7.   SubGroupPriority=”425″
  8.   EditorSorting=”UNIT”
  9.   HealthBoxHeightOffset=”25″
  10.   BuildTime=”10″
  11.   CommandSet=”AlliedAntiVehicleVehicleTech1CommandSet”
  12.   KindOf=”SELECTABLE CAN_ATTACK CAN_CAST_REFLECTIONS SCORE VEHICLE CAN_BE_FAVORITE_UNIT T2_UNIT”
  13.   WeaponCategory=”CANNON”
  14.   VoicePriority=”188″
  15.   EditorName=”AlliedAntiVehicleVehicleTech1”
  16.   Description=”Desc:AlliedAntiVehicleVehicleTech1”
  17.   TypeDescription=”Type:AlliedAntiVehicleVehicleTech1”
  18.   UnitIntro=”Allied_GuardianTank_UnitIntro”>
  19. <DisplayName
  20.    xai:joinAction=”Replace” xmlns:xai=”uri:ea.com:eala:asset:instance”>Name:AlliedAntiVehicleVehicleTech1</DisplayName>
复制代码

把下面例出的文本中的AlliedAntiVehicleVehicleTech1全部改为mytank


  1. id=”AlliedAntiVehicleVehicleTech1”

  2. ------单位的名称

  3. CommandSet=”AlliedAntiVehicleVehicleTech1CommandSet”

  4. -----这个嘛,就是和F技能关联的

  5. EditorName=”AlliedAntiVehicleVehicleTech1”

  6. ----游戏显示的名字


  7. Description=”Desc:AlliedAntiVehicleVehicleTech1”

  8. -----游戏中单位的说明,什么这坦克吊爆了,什么来不来一发啊,牙没得啊之类的。


  9. TypeDescription=”Type:AlliedAntiVehicleVehicleTech1”

  10. ----游戏中单位类型注明,如防空AK君,对地ACU建筑,反RA3坦克等。

  11. <DisplayName
  12. xai:joinAction=”Replace” xmlns:xai=”uri:ea.com:eala:asset:instance”>Name:AlliedAntiVehicleVehicleTech1</DisplayName>-

  13. -----这个也是显示名字,和第一个一样。
复制代码




我们还需要两个附加文件LogicCommand LogicCommandSet,打开X:\RA3 MODSDK-X\SageXml\GlobalData文件夹,复制LogicCommand LogicCommandSet这两个文件到mymod/data文件夹中,打开LogicCommand,我们可以看到和AlliedAntiVehicleVehicleTech1.XML文件的结构不同,这里我随便讲解这个文件的代码结构方式,我们以要改的这个AlliedAntiVehicleVehicleTech1单位为例子,下面的这段是它的代码:

-------------AlliedAntiVehicleVehicleTech1原版代码---------------

  1. <LogicCommand
  2. Type="UNIT_BUILD"
  3. id="Command_ConstructAlliedAntiVehicleVehicleTech1">
  4. <Object>AlliedAntiVehicleVehicleTech1</Object>
  5. </LogicCommand>
复制代码


我们可以看到开头和结尾都有一个相同的代码LogicCommand,这就是一个完整的单位LogicCommand代码的结构方式,里面的内容就是定义单位用的了,而且最后一个LogicCommand用 </       >这样的符号表示这段LogicCommand到这里结束。这样就构成了一个完整的代码。另一个文件LogicCommandSet也是一样的结构。这两个文件的内容,我们可以直接放在单位文件最后面也行,但为了方便日后的查看和修改,我们新建一个XML文件吧,不会?那就复制一个LogicCommand.XML文件把里面的内容都删了,把下面我提供的代码复制进去保存,也可以重新命名为CommandData或是你自己喜欢好记的名字。

------CommandData的内容------
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <AssetDeclaration xmlns="uri:ea.com:eala:asset"> <Tags/>
  3. <Includes/>   


  4. <!-- 新型超级吊爆坦克,无敌+吊爆,信不信由你,反正我信了-->

  5. <LogicCommand
  6. Type=”UNIT_BUILD”
  7. id=”Command_Constructmytank”>
  8. <Object>mytank</Object>
  9. < /LogicCommand>

  10. <!-- 新型超级吊爆坦克代码结束-->     



  11. </AssetDeclaration>
复制代码



中间是我们修改好的内容了。什么,你只对中文的字体感兴趣,好吧,我就顺便说下吧,你们好烦的,没办法人气太旺了(哈哈哈哈哈哈!!),我就解释下,在代码XML文件里,我们可以加些中文说明,便于日后的修改,这个中文的标注你们也看到了,格试是<!-- 新型超级吊爆坦克,无敌+吊爆,信不信由你,反正我信了-->,开头要用<!--,结束就是-->了,这个括号的意思就是让游戏不读取括号里的内容,我们还可以用于当有的代码不用时,又不想删掉,就用这两个符号括起来就行了。还是那句话,要用英文输入法输入这些符号(。。。。。。)

然后打开LogicCommandSet,找到 id=”AlliedWarFactoryCommandSet”>处,如下代码:



  1. <LogicCommandSet
  2.   id=”AlliedWarFactoryCommandSet”>
  3.   <Cmd>Command_ConstructAlliedMiner</Cmd>
  4.   <Cmd>Command_ConstructAlliedAntiInfantryVehicle_Ground</Cmd>
  5.   <Cmd>Command_ConstructAlliedAntiAirVehicleTech1</Cmd>
  6.   <Cmd>Command_ConstructAlliedAntiVehicleVehicleTech1</Cmd>
  7.   <Cmd>Command_ConstructAlliedAntiStructureVehicle</Cmd>
  8.   <Cmd>Command_ConstructAlliedAntiVehicleVehicleTech3</Cmd>
  9.   <Cmd>Command_ConstructAlliedMCV</Cmd>  
  10. <!–
  11.   <Cmd>Command_UpgradeAlliedWarFactoryRepairBay</Cmd>
  12. –>  
  13. </LogicCommandSet>
复制代码

把上面的代码复制到我们的CommandData.XML文件里去,就放在中文注明下面,或是上面的中文注明上,都可以。这个地方是将单位注册到战车工厂的生产栏里,是不是对这个很感兴趣呢,注意格式哈,  <Cmd>Command_Constructmytank</Cmd>

注意到没有,中间的内容是我们之前定义的LogicCommand内容ID号:Command_Constructmytank。我们要把上面这条内容放进战车工厂建造栏里去,安照排列的顺序,我们放最前头去,为什么?因为我们的单位是最吊的,得在第一位,呵呵,你也可以入在最后,或是T3单位那几个一起,代码内容如下:


  1. <LogicCommandSet
  2.   id=”AlliedWarFactoryCommandSet”>      
  3. <Cmd>Command_Constructmytank</Cmd>
  4.   <Cmd>Command_ConstructAlliedMiner</Cmd>
  5.   <Cmd>Command_ConstructAlliedAntiInfantryVehicle_Ground</Cmd>
  6.   <Cmd>Command_ConstructAlliedAntiAirVehicleTech1</Cmd>
  7.   <Cmd>Command_ConstructAlliedAntiVehicleVehicleTech1</Cmd>
  8.   <Cmd>Command_ConstructAlliedAntiStructureVehicle</Cmd>
  9.   <Cmd>Command_ConstructAlliedAntiVehicleVehicleTech3</Cmd>
  10.   <Cmd>Command_ConstructAlliedMCV</Cmd>  
  11. <!–
  12.   <Cmd>Command_UpgradeAlliedWarFactoryRepairBay</Cmd>
  13. –>  
  14. </LogicCommandSet>
复制代码

接下来我们要在LogicCommandSet找到下面这些代码:

  1.         <LogicCommandSet
  2.                 id="AlliedAntiAirVehicleTech1CommandSet">
  3.                 <Cmd>Command_Evacuate</Cmd>
  4.                 <Cmd>Command_AttackMove</Cmd>
  5.                 <Cmd>Command_MoveToPositionAndCollect</Cmd>
  6.         </LogicCommandSet>
复制代码

修改ID号成以下内容:
  1. <LogicCommandSet
  2.   id=”mytankCommandSet”>
  3.   <Cmd>Command_ToggleTargetPainter</Cmd>
  4.   <Cmd>Command_AttackMove</Cmd>
  5.   <Cmd>Command_MoveToPositionAndCollect</Cmd>
  6. </LogicCommandSet>
复制代码

把上面的代码复制到我们的CommandData.XML文件里去,就放在战车工厂建造栏代码后面吧。
通过上面的修改,我们把单位XML文件制作好了,现在把文件LogicCommand LogicCommandSet文件删掉,现在我们的DATA文件中只有两个文件:CommandData.XMLmytank.XML。

第四步:
现在要创建mod.xml文件,Mod.Xml文件作用是告诉游戏引擎把我们修改的那两文件添加到游戏中,因此每个mod都必需要这个文件。打开例子samplemod文件夹(上面有下载),复制mod.xml文件到mymod/data中,打开并修改,使其像下面一样,如果你没有例子samplemod文件夹,那就在SDK中随便复制一个XML文件,清空所有内容并重命名为MOD,把下面的内容复制进去,即要让你的mod.xml的内容如下所示:

------MOD.XML内容--------

  1. <?xml version=”1.0″ encoding=”UTF-8″?>
  2. <AssetDeclaration xmlns=”uri:ea.com:eala:asset” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“>
  3. <Tags></Tags>
  4. <Includes>

  5.   <!-- 下面这三个是MOD文件的必须文件,不要删了。-->
  6.       <Include type=”reference” source=”DATA:static.xml” />
  7.       <Include type=”reference” source=”DATA:global.xml” />   
  8.       <Include type=”reference” source=”DATA:audio.xml” />


  9.   

  10. <!--注册我们所修改的文件,注意路径要对上哈。-->
  11.       <Include type=”all” source=”DATA:mymod/Data/CommandData.xml”/>
  12.       <Include type=”all” source=”DATA:mymod/Data/mytank.xml”/>  
  13. </Includes>
  14. </AssetDeclaration>
复制代码
保存mod.xml文件。


建立MOD
要把上面修改好的文件打包进游戏,我们需要用到EA提供的RA3 MOD SDK工具,本楼最前有链接,在这里,我再次重述一下,RA3 MOD SDK工具只是一个打包工具,不是制作模或是图片的工具,就连代码也用不到它来修改,它只是单纯的打包工具,现在这个工具最高版本就是我们前面的链接中提到的RA3 MOD SDK-X版,这个RA3 MOD SDK-X版是中文免安装版,使有时本人建议把SDK文件夹放在磁盘符下,如D:/下,不要放在中文文件夹里,是避免以后会因为一些中文字体文件夹而出现错误,打开SDK文件夹,第一次使用请写下注册到电脑中,点这个图标:
217.jpg

找到并点击EALAModStudio.exe(RA3 MOD SDK 根目录下就有,如不能使用请看第一步的解决方法),会出现如下的框:
216.jpg

选项就不解释了,以后用到你们就清楚了。在左上方的列表里选择你的mod的名字,然后按图选择选项,点最下面 build mod 打包开始,右边的build log会显示输出一系列编译信息,不管它,等待一段时间,直到出现绿色的build completed提示,这时,你的mod就可以使用了,你可以在RA3的控制面板的mod选项中看到它。

此教程重新编写了一次。真累,希望对小白们是个好的开始。
有的小白想更深入的修改单位的其它方面,请从这个入口进入你想要的地方
入口:
红警3DIY---红警3源代码详解


祝 你们好运了。




评分

参与人数 1威严 +1 收起 理由
正气凌然 + 1

查看全部评分

发表于 2011-5-22 16:27:21 | 显示全部楼层
这是添加新单位的教程,版主能否搞一个修改原单位的教程?例如修改标枪兵和谭雅的生命值?
修改标枪兵和谭雅的生命值,我知道要改哪个文件,但不懂怎样Build mod,像我这种水平的菜鸟非常需要入门教程。入门之后,我会自己钻研的。
发表于 2011-5-22 16:28:47 | 显示全部楼层
这是添加新单位的教程,版主能否搞一个修改原单位的教程?例如修改标枪兵和谭雅的生命值?
修改标枪兵和谭 ...
zhaoyunfb 发表于 2011-5-22 16:27



    只能说你一点英文都不认识
发表于 2011-5-22 16:39:46 | 显示全部楼层
本帖最后由 6522748 于 2011-5-22 16:42 编辑

回复 2# zhaoyunfb
首先在Data的根目录下必须要有Mod.xml这个文件,在样板MOD里可以取到。它至少要包含这点代码
<Include type="reference" source="DATA:static.xml" />

<Include type="reference" source="DATA:global.xml" />

<Include type="reference" source="DATA:audio.xml" />



之后你就可以在里面添加或者引用那些修改过的文件。比如 你修改了盟军狼狗的一些属性,那么久把修改过的AlliedScoutInfantry.xml这个文件,放到和MOD.xml在一起,然后在MOD.xml里添加一句<Include type="all" source="AlliedScoutInfantry.xml" />




这样子就算引用成功了。这只是一个随机的例子。一般来说不论修改过的东西放在哪里,只要在MOD.xml里登记就可以了,到了以后你要是接触到一些特殊的东西,就不是添加到MOD.xml能够解决的了`


如果不知道怎么使用编译器,你可以去下载那个SDK-X版的,解压出来后运行主程序,把界面上全部能勾选的都勾上,然后按下 build mod 这个按钮就可以了。编译过程要是出错了会有提示。祝您一路顺风`
 楼主| 发表于 2011-5-22 17:42:15 | 显示全部楼层
回复 2# zhaoyunfb


    这是最简单最基础的一个教程了,你要知道当年我们是怎么过来了。这个就是我们所以MOD者看的第一个教程。你会添加这个了,那么修改下小参数的值还会有问题吗?你先学会新加个同样的东西后,再修改参数吧。修改参数这可是高级MOD的级别哦,你不要越级了。{:2_29:} {:3_42:} {:4_95:} {:5_152:}
发表于 2011-5-22 17:53:48 | 显示全部楼层
回复  zhaoyunfb


    这是最简单最基础的一个教程了,你要知道当年我们是怎么过来了。这个就是我们所以M ...
牧星 发表于 2011-5-22 17:42



    {:5_158:} 改这些又不会担心错误
发表于 2011-5-23 08:27:46 | 显示全部楼层
最简单的mod,我发过啊
http://www.ra2diy.cn/bbs/forum.php?mod=viewthread&tid=1128
请查看3楼附件
发表于 2011-5-25 10:43:36 | 显示全部楼层
感谢6522748 的耐心解答以及各位大侠的指教,单位属性的小修小改现在已经实现。
发表于 2011-5-25 10:45:40 | 显示全部楼层
改变单位体积时出错:Error: "E:\RA3 MODSDK-X\builtmods\mods\mymod\data\mod.manifest" not found
发表于 2011-5-25 10:47:44 | 显示全部楼层
mod.xml内容:
<?xml version="1.0" encoding="UTF-8"?>
<AssetDeclaration xmlns="uri:ea.com:eala:asset">

        <Includes>

                <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="AlliedCommandoTech1.xml" />
                <Include type="all" source="AlliedEngineer.xml" />
                <Include type="all" source="AlliedInfiltrationInfantry.xml" />
                <Include type="all" source="AlliedAntiInfantryInfantry.xml" />
                <Include type="all" source="AlliedAntiVehicleInfantry.xml" />
                <Include type="all" source="AlliedAntiGroundAircraft.xml" />
                <Include type="all" source="AlliedBomberAircraft.xml" />
                <Include type="all" source="AlliedFighterAircraft.xml" />
                <Include type="all" source="AlliedSupportAircraft.xml" />
                <Include type="all" source="SovietFighterAircraft.xml" />
                <Include type="all" source="SovietAntiGroundAircraft.xml" />
                <Include type="all" source="SovietBomberAircraft.xml" />
                <Include type="all" source="SovietAntiVehicleVehicleTech3.xml" />
                <Include type="all" source="SovietAntiInfantryInfantry.xml" />
                <Include type="all" source="SovietCommandoTech1.xml" />
                <Include type="all" source="SovietEngineer.xml" />
                <Include type="all" source="SovietAntiVehicleInfantry.xml" />

        </Includes>

</AssetDeclaration>
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|手机版|管理员邮箱|红警DIY官方论坛    

GMT+8, 2017-8-19 09:50 , Processed in 0.061760 second(s), 24 queries , Xcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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