游侠NETSHOW论坛

标题: MOD SDK使用教程 PART2 [打印本页]

作者: ravage    时间: 2007-8-26 19:03:02     标题: MOD SDK使用教程 PART2

PART1地址:
http://game.ali213.net/thread-1628246-1-2.html

注意!!!由于论坛显示问题,一些语句显示不完全,请参考文末附带的源码包中的XML源码来进行修改!

注意!!!MOD SDK存在BUG,如果你的游戏设置中模型显示效果为低的话,则无法调用新单位或修改过的单位,必须将效果调至高,然后退出游戏再重新进入,这样MOD修改才会起效果!

2.一些概念
打开MOD SDK目录,里面有几个子目录是比较重要的。Art和Audio是MOD要调用的模型和声音文件的存储地点。BuiltMods是编译MOD的暂存区域,编译完成的MOD也会在这里存储一个副本。CnC3Xml储存了游戏中单位和建筑等的原始数据。Mods在这篇教程中是最重要的,我们的MOD修改工作就在这里进行。

打开Mods目录。这里有一个SampleMod子目录。事实上SampleMod同时也就是我们要做的MOD的名称。再打开其中的DATA子目录,这里面就是需要我们修改的内容。

3.加入新单位
首先我们要建构新单位的XML。最简单的方法就是拷贝已有单位的XML,然后把它修改成我们需要的XML。在这里,我们用一个中立单位Viceroid来作为新单位的基础。回到MOD SDK目录,然后将\CnC3Xml\Neutral\Units目录下的Viceroid.xml文件拷贝到\MOD SDK\Mods\SampleMod\data目录中去,然后将它改名为新单位的名称sovietred.xml。注意XML的命名可以任意,只要能方便你自己识别,以及与CnC3Xml中原有XML不重名即可。

用文本编辑工具,比如WIN自带的写字板打开sovietred.xml。首先我们要修改的就是<GameObject一行下的id="Viceroid"。这一句定义了新单位在游戏引擎中的名称,必须是单独唯一的,否则就会和原有单位起冲突。将原有的id="Viceroid"修改为id="sovietred"。

将Side="Neutral"修改为Side="NOD",说明这个单位是NOD方的。

在TransportSlotCount="0"一句下面加入以下语句:
  BuildCost="200"
  BuildTime="2"
  CommandPoints="100"

  ProductionQueueType="INFANTRY"
  UnitCategory="INFANTRY"
  WeaponCategory="GUN"

前两句定义了单位的造价和建造时间。虽然CNC3不再使用CommandPoints了,但为了稳妥起见加入第3句。第4、5句则让游戏引擎知道,在步兵建造栏里建造该新单位。第6句说明了该单位的武器类型,注意不是它实际使用的武器。


  EditorName="Viceroid"
  TypeDescription="Type:Visceroid">
  <DisplayName>Name:Visceroid</DisplayName>
修改为
  EditorName="sovietred"
  TypeDescription="Type:sovietred">
  <DisplayName>Name:sovietred</DisplayName>
这3句决定显示单位的名称、类型、技能等。我们将在下面涉及到与之相关的内容。

往下跳过<DRAW等代码,找到

   <WanderAIUpdate
    id="ModuleTag_AI"
    AutoAcquireEnemiesWhenIdle="YES"   
    WanderDistance="100"
    AttackAll="true"
    Selectable="true">
    <UnitAITargetChooserData
     CanAutoAcquireN
    />
   </WanderAIUpdate>

将其替换为
   <AIUpdate
    id="ModuleTag_06"
    AutoAcquireEnemiesWhenIdle="YES">
    <UnitAITargetChooserData
     SympathyRange="100.0" />
   </AIUpdate>
这样这个废柴新单位sovietred总算长了点脑子,不会像原来那样到处乱爬了。

最后要修改的就是
  <AudioArrayVoice>
   <AudioEntry
    Sound="ALI_Viceroid_SoundAttack"
    AudioType="voiceAttack" />
   <AudioEntry
    Sound="ALI_Viceroid_SoundCreate"
    AudioType="voiceCreated" />
   <AudioEntry
    Sound="ALI_Viceroid_SoundMove"
    AudioType="voiceMove" />
   <AudioEntry
    Sound="ALI_Viceroid_SoundMove"
    AudioType="voiceGuard" />
   <AudioEntry
    Sound="ALI_Viceroid_SoundSelect"
    AudioType="voiceSelect" />
  </AudioArrayVoice>
将其替换为
  <AudioArrayVoice>
   <AudioEntry
    Sound="sovietredvoiceall"
    AudioType="voiceAttack" />
   <AudioEntry
    Sound="sovietredvoiceall"
    AudioType="voiceCreated" />
   <AudioEntry
    Sound="sovietredvoiceall"
    AudioType="voiceMove" />
   <AudioEntry
    Sound="sovietredvoiceall"
    AudioType="voiceGuard" />
   <AudioEntry
    Sound="sovietredvoiceall"
    AudioType="voiceSelect" />
  </AudioArrayVoice>
来给新单位加入语音。存盘并关闭sovietred.xml。

然后用写字板打开mod.str,新加入以下内容:
NAME:sovietred
"sovietred"
END
TYPE:sovietred
"Super suck Infantry. weak vs. Everything"
END
DESC:sovietred
"Abilities: \n牋牋牷None"
END
这样EditorName、TypeDescription、DisplayName就能找到对应的显示内容了。存盘并关闭mod.str。

用写字板打开SampleUpdatedLogicCommandSet.xml,在</AssetDeclaration>一句的上面新加入以下内容:
<LogicCommandSet
  id="NODHandOfNODCommandSet">
  <Cmd>Command_ConstructNODMilitantSquad</Cmd>
  <Cmd>Command_ConstructNODMilitantRocketSquad</Cmd>
  <Cmd>Command_ConstructNODSaboteur</Cmd>
  <Cmd>Command_ConstructNODFanaticSquad</Cmd>
  <Cmd>Command_ConstructNODBlackHandSquad</Cmd>
  <Cmd>Command_ConstructNODShadowSquad</Cmd>
  <Cmd>Command_ConstructNODCommando</Cmd>
  <Cmd>Command_Constructsovietred</Cmd>
  <Cmd>Command_TogglePower</Cmd>
  <Cmd>Command_SelfRepair</Cmd>
  <Cmd>Command_Sell</Cmd>
  <Cmd>Command_SetDefaultBuilding</Cmd>
  <Cmd>Command_SetRallyPoint_Infantry</Cmd>
</LogicCommandSet>
让NOD之手的菜单里加入建造新单位的按钮。注意代码的位置,否则编译时会出错。

然后是加入建造新单位的按钮本身的代码,打开SampleUpdatedLogicCommand.xml,在</AssetDeclaration>一句的上面新加入以下内容:
<LogicCommand
  Type="UNIT_BUILD"
  id="Command_Constructsovietred">
  <Object>sovietred</Object>
</LogicCommand>
这样NODHandOfNODCommandSet就能找到Command_Constructsovietred这个按钮,并知道它是用来建造单位sovietred的。注意代码的位置,否则编译时会出错。

然后加入新的语音。打开SoundMod.xml,在</AssetDeclaration>一句的上面新加入以下内容:
  <AudioFile id="sovietredvoice" File="AUDIO:sounds\sovietred.wav" GUIPreset="Default" />  
  <AudioEvent id="sovietredvoiceall" inheritFrom="AudioEvent:BaseUnitResponse_Mod"
   Volume = "=$GDI_UNITRESPONSE_VOLUME + 0"
   MinVolume = "=$GDI_UNITRESPONSE_MINVOLUME + 0"
   Priority = "HIGH"
   Type = "WORLD PLAYER VOICE"
   SubmixSlider = "VOICE" >
   <PitchShift Low="=$GDI_UNITRESPONSE_PITCHSHIFT_LOW + 0" High="=$GDI_UNITRESPONSE_PITCHSHIFT_HIGH + 0" />
   <Sound>sovietredvoice</Sound>   
  </AudioEvent>
从文末附带的源码ZIP包[attach]646212[/attach]里解压出sovietred.wav,将它拷贝到\MOD SDK\Audio\Sounds目录下。

最重要的步骤,打开Mod.xml。这个文件定义了所有要编译的XML内容,它不能被删除或者改名。在
  <Include type="all" source="DATA:SampleMod/Data/GDIElfWarrior.xml"/>
一句的上面,加入语句
  <Include type="all" source="DATA:SampleMod/Data/sovietred.xml"/>
这样编译时就会将新单位的代码也一起编译了。

最后,按照上一节中的方法,编译SampleMod,然后从控制板启动游戏。选择NOD方,然后我们就可以从NOD之手里建造这个废柴新单位了。
[attach]646211[/attach]

xml源码和要用到的WAV声音文件下载:
[attach]646212[/attach]

[ 本帖最后由 ravage 于 2007-8-29 03:04 编辑 ]
作者: elijan1985    时间: 2007-8-26 19:10:56

楼主啊``不怕苏联的灵魂把你绑架嘛``
作者: 咖啡冰    时间: 2007-8-26 19:28:50

强银~板凳坐好再研究~
作者: tarma2004    时间: 2007-8-26 20:12:16

支持楼主.楼主能不能在下个部分介绍3DS MAX插件方面,我输出W3X文件老是出错
作者: ravage    时间: 2007-8-26 20:16:47

max的部分还没研究,我以前是用GMAX的,目前主要还是在研究XML的部分。
作者: 枫之寒    时间: 2007-8-26 22:47:33

LZ还是把教程汇总到一起的好,要不然其他人就有得找了
作者: JimRaynor_2001    时间: 2007-8-26 23:58:39

=004= 狗狗真囂張 -_,-|||
作者: 19811107    时间: 2007-8-27 08:46:37

怎么大家对MOD都没多少兴趣一样,呵呵

这次的SDK还是太复杂了

献丑发个猛犸,100块钱1秒建造时间,自带railgun,通关虐电脑必备之良药^_^

[ 本帖最后由 19811107 于 2007-8-27 09:13 编辑 ]
作者: qytian    时间: 2007-8-27 13:58:27

来点图片看看啊 8楼的朋友!!!!!!!!!
作者: 19811107    时间: 2007-8-27 16:48:12

应楼上的,来个图,呵呵

ravage兄,以下是我另一个帖子里的提问,不知道你能不能帮忙解答?

原帖由 19811107 于 2007-8-26 09:49 发表
姐姐,现在的问题是我参照samplemod和CnC3Xml目录树进行的修改进游戏后没有效果哎,姐姐有没有MM1元买成功过?

samplemod里面有个mod.xml按文件头的描述应该是Mod的控制文件,加入修改的文件后还是没有作用……

继续研究中……

目前研究结果:

想添加新兵种倒不难,依葫芦画瓢按samplemod里的elf添就是了;怪事是如果单独按elf的文件结构和内容添加的话是没用的,必须添加在各个elf设置文件的后面才能起作用。

至于一块钱的猛犸,还没有找到合适的方法来修改原文件,直接用的话会出错;不过倒是通过新加入相同的单位来替换可以实现夙愿^_^

等待姐姐进一步的研究结果^_^

作者: sovietred    时间: 2007-8-27 17:54:04

贱狗……
作者: ravage    时间: 2007-8-27 18:33:53

死废柴

to 19811107 :
单听你的描述实在没法判断,最好把你的源码打包发上来看看。现在SDK是有些莫名其妙的问题,N多老外反映编译正常但新单位就是没法显示。
作者: hcck    时间: 2007-8-28 00:06:41

我是1.06的,直接生成的本身自带的MOD文件,然后在1.06的CONFIG.TXT里面引用BIG文件,自带的那个菜单有效果。
增加单位的这个没好好试过,初步生成的BIG文件,自己引用进去之后没效果。

不用1.07直接引用有人试过吗?

LZ最好给个修改原有单位设置的例子吧,最简单的修改某个属性,然后如何放进去就行。

[ 本帖最后由 hcck 于 2007-8-28 00:10 编辑 ]
作者: delphicn    时间: 2007-8-28 09:14:19

已经打到游侠来了~汗
作者: hcck    时间: 2007-8-28 09:20:56

有没有人用1.06直接引用BIG文件的啊?我不想换垃圾1.07,还没有修改器用,不爽。 [汗水]

我直接引用MOD SDK目录下生成的SAMPLEMOD.BIG文件,菜单有变化但是遭遇战里多了个按钮显示 Missing atui什么的
作者: hcck    时间: 2007-8-28 17:44:59

顶起

直接用1.06里加BIG似乎是有用的,有人试过吗???
作者: hcck    时间: 2007-8-28 20:52:48

我升了1.07,就拿原来的SAMPLEMOD来载入,只有菜单效果,没有新单位。
作者: ravage    时间: 2007-8-28 21:08:05

编辑BuildMod.bat,在最末尾加上
PAUSE
然后重新编译,看看有什么错误信息没有。如果出现critical error而且与GDIElfWarrior有关的话,那就是和范例新单位有关了。具体解决方法可能只有重新安装

另外这个国外教程你可以看看,也许会有帮助。
http://www.gamereplays.org/community/index.php?showtopic=283120

看见一个古怪的解决方案:把模型和贴图选项都设成高

[ 本帖最后由 ravage 于 2007-8-28 21:14 编辑 ]
作者: hcck    时间: 2007-8-28 21:22:45

果然是死在一个 ART:ShadowI.xml 上面,这个文件找不到,是在Mod SDK\CnC3Xml\BaseObjects\BaseInfantry.xml 里面引用到的,重装SDK也没这个文件 [汗水] [汗水] [汗水] [汗水] [汗水]
作者: hcck    时间: 2007-8-28 21:27:48

应该有一个 Mod SDK\Art\sh\shadowi.xml 存在的,可是我就没有这个SH的目录,重装了2次SDK了。
这个SDK真是…………

我把所有效果调到最高也是没有,用的就是原装的SAMPLEMOD ,编译过程中就只有一个文件缺失,看论坛说是没关系的。成吉思汗成吉思汗成吉思汗成吉思汗

[ 本帖最后由 hcck 于 2007-8-28 22:23 编辑 ]
作者: ravage    时间: 2007-8-29 00:11:02

忘了说了,普通ERROR比如你说的这个没关系的,是编译时找不到本地文件,进了游戏还是能找到。critical error才是重要的。
作者: cjdz007    时间: 2007-8-29 01:48:45

大大,能不能先弄个添加修改原单位的教程.如GDI有NOD的基地车等!!
我试弄了.怎么都不行.
没有新的单位出现.
作者: ravage    时间: 2007-8-29 03:06:02

经过检验,MOD SDK确实存在BUG,如果你的游戏设置中模型显示效果为低的话,则无法调用新单位或修改过的单位,必须将效果调至高,然后退出游戏再重新进入,这样MOD修改才会起效果!不过已经编译过的MOD不需要再编译一次。
作者: hcck    时间: 2007-8-29 08:57:32

哦,我设置为高之后没有重新进入游戏,是直接开始了,回家再去试试看了,1.07没有好的修改器太可惜了,只好自己做点无敌的地图和单位来虐电脑了。
作者: hcck    时间: 2007-8-30 23:09:15

MOD成功了,模型贴图都设置高,不过这样的话如果在这个MOD中再设置为高以外,应用 的时候就会自动退出,其他效果没有问题,就是用了MOD之后这两项只能设置高,确实是大BUG。
作者: mr555555    时间: 2011-7-25 22:22:31

本帖最后由 mr555555 于 2011-7-25 23:09 编辑

回复 19811107 的帖子

能把那个编译前的 猛犸MOD 的xml原文件打包发下么?
作者: mr555555    时间: 2011-7-25 23:07:43

请教下LZ,如步兵小队这种 由多个单位组成的新单位(如GDIRifleSoldierSquad.xml)怎么添加进MOD,能讲解下么。
作者: mahailong008    时间: 2014-6-12 13:23:19

谢谢。。。。。。。。。。。。
作者: justdone    时间: 2020-2-8 20:43:14

重新来顶帖子




欢迎光临 游侠NETSHOW论坛 (https://game.ali213.net/) Powered by Discuz! X2