注册 | 登录

游侠NETSHOW论坛





查看: 19935|回复: 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   查看全部评分

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

使用道具 举报

三眼童子 尤里新兵

帖子
2129
精华
0
积分
1196
金钱
5151
荣誉
13
人气
14
评议
0
沙发
发表于 2007-8-26 19:10:56 |只看该作者
楼主啊``不怕苏联的灵魂把你绑架嘛``

使用道具 举报

游侠资深版主

版主勋章资深版主勋章

帖子
404
精华
7
积分
3272
金钱
12154
荣誉
167
人气
1
评议
0

板凳
发表于 2007-8-26 19:28:50 |只看该作者
强银~板凳坐好再研究~

使用道具 举报

帖子
175
精华
0
积分
108
金钱
538
荣誉
2
人气
0
评议
0
地板
发表于 2007-8-26 20:12:16 |只看该作者
支持楼主.楼主能不能在下个部分介绍3DS MAX插件方面,我输出W3X文件老是出错

使用道具 举报

帖子
1048
精华
0
积分
665
金钱
2943
荣誉
14
人气
3
评议
0
5#
发表于 2007-8-26 20:16:47 |只看该作者
max的部分还没研究,我以前是用GMAX的,目前主要还是在研究XML的部分。
真羡慕你们这些有故事的人,不像我,一个帅字贯穿了一生。

使用道具 举报

梦里花落知多少
游侠资深版主
冥斗士·天马流星拳·凤凰幻魔拳

★★★★★

精华勋章版主勋章荣誉勋章资深版主勋章

帖子
2569
精华
9
积分
5285
金钱
12021
荣誉
220
人气
2
评议
0
6#
发表于 2007-8-26 22:47:33 |只看该作者
LZ还是把教程汇总到一起的好,要不然其他人就有得找了

使用道具 举报

帖子
5489
精华
0
积分
3119
金钱
6649
荣誉
37
人气
0
评议
0
7#
发表于 2007-8-26 23:58:39 |只看该作者
=004= 狗狗真囂張 -_,-|||

使用道具 举报

帖子
789
精华
0
积分
405
金钱
1127
荣誉
1
人气
0
评议
0
8#
发表于 2007-8-27 08:46:37 |只看该作者
怎么大家对MOD都没多少兴趣一样,呵呵

这次的SDK还是太复杂了

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

[ 本帖最后由 19811107 于 2007-8-27 09:13 编辑 ]
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
i came,i saw,i fleeeeee........?
those damned cowards!

玩罗马的尴尬

使用道具 举报

帖子
680
精华
0
积分
380
金钱
1330
荣誉
4
人气
0
评议
0
9#
发表于 2007-8-27 13:58:27 |只看该作者
来点图片看看啊 8楼的朋友!!!!!!!!!

使用道具 举报

帖子
789
精华
0
积分
405
金钱
1127
荣誉
1
人气
0
评议
0
10#
发表于 2007-8-27 16:48:12 |只看该作者
应楼上的,来个图,呵呵

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

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

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

继续研究中……

目前研究结果:

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

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

等待姐姐进一步的研究结果^_^
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
i came,i saw,i fleeeeee........?
those damned cowards!

玩罗马的尴尬

使用道具 举报

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

使用道具 举报

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

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

使用道具 举报

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

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

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

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

使用道具 举报

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

使用道具 举报

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

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

使用道具 举报

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

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

使用道具 举报

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

使用道具 举报

帖子
1048
精华
0
积分
665
金钱
2943
荣誉
14
人气
3
评议
0
18#
发表于 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
19#
发表于 2007-8-28 21:22:45 |只看该作者
果然是死在一个 ART:ShadowI.xml 上面,这个文件找不到,是在Mod SDK\CnC3Xml\BaseObjects\BaseInfantry.xml 里面引用到的,重装SDK也没这个文件 [汗水] [汗水] [汗水] [汗水] [汗水]

使用道具 举报

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

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

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

使用道具 举报

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

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

GMT+8, 2025-5-22 10:56 , Processed in 0.472400 second(s), 13 queries , Gzip On, Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

分享到