注册 | 登录

游侠NETSHOW论坛





查看: 20345|回复: 29
打印 上一主题 下一主题

[原创] MOD SDK使用教程 PART2 [复制链接]

帖子
1048
精华
0
积分
665
金钱
2943
荣誉
14
人气
3
评议
0
跳转到指定楼层
楼主
发表于 2007-8-26 19:03:02 |只看该作者 |正序浏览
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包里解压出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之手里建造这个废柴新单位了。


xml源码和要用到的WAV声音文件下载:


[ 本帖最后由 ravage 于 2007-8-29 03:04 编辑 ]
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
已有 2 人评分金钱 人气 收起 理由
mahailong008 + 1 + 1 高端大气上档次
海洛因 + 20 文章不错,继续努力!

总评分: 金钱 + 21  人气 + 1   查看全部评分

真羡慕你们这些有故事的人,不像我,一个帅字贯穿了一生。

使用道具 举报

帖子
712
精华
0
积分
397
金钱
1091
荣誉
4
人气
0
评议
0
30#
发表于 2020-2-8 20:43:14 |只看该作者
重新来顶帖子

使用道具 举报

帖子
2450
精华
1
积分
1571
金钱
6943
荣誉
14
人气
60
评议
0
29#
发表于 2014-6-12 13:23:19 |只看该作者
谢谢。。。。。。。。。。。。
I9 9900k
RTX2080ti 11GB
DDR4 3200 8GBX4
SSD 512G
WIN10 64bit

使用道具 举报

帖子
79
精华
0
积分
41
金钱
655
荣誉
0
人气
0
评议
0
28#
发表于 2011-7-25 23:07:43 |只看该作者
请教下LZ,如步兵小队这种 由多个单位组成的新单位(如GDIRifleSoldierSquad.xml)怎么添加进MOD,能讲解下么。

使用道具 举报

帖子
79
精华
0
积分
41
金钱
655
荣誉
0
人气
0
评议
0
27#
发表于 2011-7-25 22:22:31 |只看该作者
本帖最后由 mr555555 于 2011-7-25 23:09 编辑

回复 19811107 的帖子

能把那个编译前的 猛犸MOD 的xml原文件打包发下么?

使用道具 举报

帖子
1120
精华
1
积分
910
金钱
4883
荣誉
15
人气
2
评议
0
26#
发表于 2007-8-30 23:09:15 |只看该作者
MOD成功了,模型贴图都设置高,不过这样的话如果在这个MOD中再设置为高以外,应用 的时候就会自动退出,其他效果没有问题,就是用了MOD之后这两项只能设置高,确实是大BUG。

使用道具 举报

帖子
1120
精华
1
积分
910
金钱
4883
荣誉
15
人气
2
评议
0
25#
发表于 2007-8-29 08:57:32 |只看该作者
哦,我设置为高之后没有重新进入游戏,是直接开始了,回家再去试试看了,1.07没有好的修改器太可惜了,只好自己做点无敌的地图和单位来虐电脑了。

使用道具 举报

帖子
1048
精华
0
积分
665
金钱
2943
荣誉
14
人气
3
评议
0
24#
发表于 2007-8-29 03:06:02 |只看该作者
经过检验,MOD SDK确实存在BUG,如果你的游戏设置中模型显示效果为低的话,则无法调用新单位或修改过的单位,必须将效果调至高,然后退出游戏再重新进入,这样MOD修改才会起效果!不过已经编译过的MOD不需要再编译一次。
真羡慕你们这些有故事的人,不像我,一个帅字贯穿了一生。

使用道具 举报

帖子
249
精华
0
积分
135
金钱
2399
荣誉
1
人气
0
评议
0
23#
发表于 2007-8-29 01:48:45 |只看该作者
大大,能不能先弄个添加修改原单位的教程.如GDI有NOD的基地车等!!
我试弄了.怎么都不行.
没有新的单位出现.

使用道具 举报

帖子
1048
精华
0
积分
665
金钱
2943
荣誉
14
人气
3
评议
0
22#
发表于 2007-8-29 00:11:02 |只看该作者
忘了说了,普通ERROR比如你说的这个没关系的,是编译时找不到本地文件,进了游戏还是能找到。critical error才是重要的。
真羡慕你们这些有故事的人,不像我,一个帅字贯穿了一生。

使用道具 举报

帖子
1120
精华
1
积分
910
金钱
4883
荣誉
15
人气
2
评议
0
21#
发表于 2007-8-28 21:27:48 |只看该作者
应该有一个 Mod SDK\Art\sh\shadowi.xml 存在的,可是我就没有这个SH的目录,重装了2次SDK了。
这个SDK真是…………

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

[ 本帖最后由 hcck 于 2007-8-28 22:23 编辑 ]

使用道具 举报

帖子
1120
精华
1
积分
910
金钱
4883
荣誉
15
人气
2
评议
0
20#
发表于 2007-8-28 21:22:45 |只看该作者
果然是死在一个 ART:ShadowI.xml 上面,这个文件找不到,是在Mod SDK\CnC3Xml\BaseObjects\BaseInfantry.xml 里面引用到的,重装SDK也没这个文件 [汗水] [汗水] [汗水] [汗水] [汗水]

使用道具 举报

帖子
1048
精华
0
积分
665
金钱
2943
荣誉
14
人气
3
评议
0
19#
发表于 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 编辑 ]
真羡慕你们这些有故事的人,不像我,一个帅字贯穿了一生。

使用道具 举报

帖子
1120
精华
1
积分
910
金钱
4883
荣誉
15
人气
2
评议
0
18#
发表于 2007-8-28 20:52:48 |只看该作者
我升了1.07,就拿原来的SAMPLEMOD来载入,只有菜单效果,没有新单位。

使用道具 举报

帖子
1120
精华
1
积分
910
金钱
4883
荣誉
15
人气
2
评议
0
17#
发表于 2007-8-28 17:44:59 |只看该作者
顶起

直接用1.06里加BIG似乎是有用的,有人试过吗???

使用道具 举报

帖子
1120
精华
1
积分
910
金钱
4883
荣誉
15
人气
2
评议
0
16#
发表于 2007-8-28 09:20:56 |只看该作者
有没有人用1.06直接引用BIG文件的啊?我不想换垃圾1.07,还没有修改器用,不爽。 [汗水]

我直接引用MOD SDK目录下生成的SAMPLEMOD.BIG文件,菜单有变化但是遭遇战里多了个按钮显示 Missing atui什么的

使用道具 举报

帖子
12
精华
0
积分
4
金钱
50
荣誉
0
人气
0
评议
0
15#
发表于 2007-8-28 09:14:19 |只看该作者
已经打到游侠来了~汗

使用道具 举报

帖子
1120
精华
1
积分
910
金钱
4883
荣誉
15
人气
2
评议
0
14#
发表于 2007-8-28 00:06:41 |只看该作者
我是1.06的,直接生成的本身自带的MOD文件,然后在1.06的CONFIG.TXT里面引用BIG文件,自带的那个菜单有效果。
增加单位的这个没好好试过,初步生成的BIG文件,自己引用进去之后没效果。

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

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

[ 本帖最后由 hcck 于 2007-8-28 00:10 编辑 ]

使用道具 举报

帖子
1048
精华
0
积分
665
金钱
2943
荣誉
14
人气
3
评议
0
13#
发表于 2007-8-27 18:33:53 |只看该作者
死废柴

to 19811107 :
单听你的描述实在没法判断,最好把你的源码打包发上来看看。现在SDK是有些莫名其妙的问题,N多老外反映编译正常但新单位就是没法显示。
真羡慕你们这些有故事的人,不像我,一个帅字贯穿了一生。

使用道具 举报

帖子
717
精华
3
积分
1329
金钱
944
荣誉
37
人气
0
评议
0
12#
发表于 2007-8-27 17:54:04 |只看该作者
贱狗……

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

手机版|Archiver|游侠NETSHOW论坛 ( 苏ICP备2023007791号 )

GMT+8, 2025-8-22 02:43 , Processed in 0.373499 second(s), 13 queries , Gzip On, Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

分享到