mod教程1
<List>以下是本人学习MOD的一些心得,希望能帮到一些喜欢自己制作MOD的朋友
本人制作的MOD网址为:https://bbs.3dmgame.com/thread-6084944-1-1.html
MOD中的说明应该都挺详细的.有需要的自行打开文件查看.
MOD制作简介
1.在RimWorld目录下的Mods目录里建立个新文件夹,起个好名字
2.目录内各建立需要的目录,一般如下
About [必要]MOD的设置和说明
Assemblies 程序集
Defs 定义
Languages 语言
Patches 补丁
Sounds 声音
Textures 图形
3.建个目录,名为About,里面建立个文件About.xml[必要]
4.编辑About.xml文件内容,可用文本文件打开编辑,建议Notepad++
<?xml version="1.0" encoding="utf-8"?>
<ModMetaData>
<name>我的MOD名字</name>
<author>作者名</author>
<!-- 支持的版本 -->
<supportedVersions>
<li>1.0</li>
<li>1.1</li>
<li>1.2</li>
</supportedVersions>
<!-- 封包ID -->
<packageId>作者名.MOD名</packageId>
<!-- 发布MOD的网址 可选-->
<url>https://bbs.3dmgame.com/thread-6084944-1-1.html</url>
<description>这里是MOD的说明</description>
<!-- 下面li里面的就是封包ID,你的MOD只能在拥有该封包ID的MOD后面加载,也就是在MOD列表中需要在这些MOD之下. -->
<loadAfter>
<li>Ludeon.RimWorld</li>
<li>Ludeon.RimWorld.Royalty</li>
<li>brrainz.harmony</li>
<li>UnlimitedHugs.HugsLib</li>
<li>jecrell.jecstools</li>
<li>erdelf.HumanoidAlienRaces</li>
</loadAfter>
</ModMetaData>
5.在About目录里面放置一张自己的果照,重命名为preview.png,这会让你知名度提升,能显著的提升MOD下载量
现在,MOD的基本工作完成,可以在游戏里的MOD列表中体现出来,虽说没啥卵用,除了看看自己的果照.
接下来,我们先来做些内容.先来个最简单的...
</List>
<List>
最简单的内容是什么,当然是汉化了......
...
好吧,我写了一段,发现汉化对于你们还是太复杂了,还是做些别的吧.
我们来做新的特性.
在MOD目录里面建立Defs目录,里面建立随便啥名字.xml
内容如下:
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<TraitDef><!-- 定义特性 --> <!--[射击专精]-->
<defName>作者名_Trait_序号01</defName> <!-- 在TraitDef里面defName必须是唯一的 -->
<commonality>0.1</commonality> <!--出现概率-->
<degreeDatas>
<li>
<label><color=#FF6600>[射击专精]</color></label> <!-- 显示的名字 -->
<description>射击专精</description> <!-- 描述 -->
<statOffsets> <!-- 状态偏移 -->
<!--射击-->
<MoveSpeed>+1</MoveSpeed> <!--移动速度-->
<AimingDelayFactor>-1</AimingDelayFactor> <!--瞄准延迟系数-->
<ShootingAccuracyPawn>+20</ShootingAccuracyPawn> <!--射击精确度-->
<HuntingStealth>1</HuntingStealth> <!--狩猎匿踪系数-->
</statOffsets>
<skillGains> <!-- 技能增加 -->
<li><key>Shooting</key><value>5</value></li> <!--射击-->
</skillGains>
</li>
</degreeDatas>
</TraitDef>
</Defs>
这里我们可以看得出来,每个特性都是处于单独的一个<TraitDef></TraitDef>内的
TraitDef节点里面基本可以照抄.你可以复制整个TraitDef节点,然后修改下defName,
defName需要唯一性,包括不能与其他的MOD内定义的一致,否则会导致首先加载的MOD同名定义Def失效.(当然,我们会利用到这一特点对其他Mod进行补丁,以后再介绍)
label的内容是特性的名称,里面的 <color=#FF6600>[射击专精]</color> 其实是转义的.原内容是
<color=#FF6600>[射击专精]</color>目的是要将那几个字换个颜色.为什么会写成这样,请自行百度.
description就是描述
statOffsets节点内是我们主要的修改内容.把我们需要的状态偏移写进去就行(状态有点多,下个节点我会列出来,V1.2)
skillGains 增加的技能,同上
嗯,下面没有了.
</List>
<List>
原先想完整的列出来,但是发现不能这样,会导致你们越来越懒,所以我也懒得列了,你们自己扒出来吧,下面是方法
解压RimWorld\Data\Core\Languages\下面的简体中文包ChineseSimplified (简体中文)
\Data\Core\Languages\ChineseSimplified (简体中文)\DefInjected\StatDef\
下列的文件是状态的翻译,
Stats_Pawns_Combat.xml
Stats_Pawns_General.xml
Stats_Pawns_Social.xml
Stats_Pawns_WorkGeneral.xml
Stats_Pawns_WorkMedical.xml
Stats_Pawns_WorkRecipes.xml
栗子:Stats_Pawns_Combat.xml的内容
<!-- EN: aiming time -->
<AimingDelayFactor.label>瞄准时间</AimingDelayFactor.label>
<!-- EN: How long it takes to shoot after choosing a target. -->
<AimingDelayFactor.description>瞄准后开火所花费的时间。</AimingDelayFactor.description>
<!-- EN: incoming damage multiplier -->
<IncomingDamageFactor.label>承伤系数</IncomingDamageFactor.label>
<!-- EN: A multiplier on all incoming damage. -->
<IncomingDamageFactor.description>所有受到伤害的乘数。</IncomingDamageFactor.description>
label前面的IncomingDamageFactor就是状态名,如果需要就直接套到上面的文件中
<statOffsets> <!-- 状态偏移 -->
<!--射击-->
<MoveSpeed>+1</MoveSpeed> <!--移动速度-->
<AimingDelayFactor>-1</AimingDelayFactor> <!--瞄准延迟系数-->
<ShootingAccuracyPawn>+20</ShootingAccuracyPawn> <!--射击精确度-->
<HuntingStealth>1</HuntingStealth> <!--狩猎匿踪系数-->
<IncomingDamageFactor>1</IncomingDamageFactor> <!-- 承伤系数 -->
</statOffsets>
技能在这里
\Data\Core\Languages\ChineseSimplified (简体中文)\DefInjected\SkillDef\Skills.xml
栗子:Skills.xml的内容
<!-- EN: animals -->
<Animals.label>驯兽</Animals.label>
<!-- EN: Taming, training, and controlling animals. -->
<Animals.description>驯服、训练、管理、控制动物。</Animals.description>
label前面的Animals就是技能名,如果需要就直接套到上面的文件中
<skillGains> <!-- 技能增加 -->
<li><key>Shooting</key><value>5</value></li> <!--射击-->
<li><key>Animals</key><value>5</value></li> <!--驯兽-->
</skillGains>
请不要超标太多,否则敌人会让你知道鲜血为啥是蓝的.
</List>
<List tag="Base">
这一节,我想先说下 [继承] ,因为很多东西都涉及这个,这也是基础的东西,必须要知道.
上一节我们说了怎么做特性,如果需要做一些类似的特性,只有少数差异.
这时候我们可以把相同的部分单独出来做个基类,然后通过继承体现差异化.
栗子:我们的特性共同点是
<MoveSpeed>+3</MoveSpeed><!--移动速度-->
<WorkSpeedGlobal>+1</WorkSpeedGlobal> <!--全局工作速度-->
<GeneralLaborSpeed>+0.5</GeneralLaborSpeed> <!--非熟练劳动力速度-->
<MoveSpeed>+1</MoveSpeed> <!--移动速度-->
<CarryingCapacity>+600</CarryingCapacity> <!--搬运量-->
<GlobalLearningFactor>+1</GlobalLearningFactor> <!--全局学习能力-->
<RestRateMultiplier>1</RestRateMultiplier> <!--休息率系数-->
<ImmunityGainSpeed>+0.2</ImmunityGainSpeed> <!--免疫力增速-->
<IncomingDamageFactor>1</IncomingDamageFactor> <!--伤害减免-->
下面是基类
<TraitDef Name="QQRN_TraitBase" Abstract="True"><!-- 定义特性 -->
<defName>QQRN_TraitBase</defName> <!-- Base -->
<commonality>0.1</commonality> <!--出现概率-->
<degreeDatas>
<li>
<label><color=#FF6600></color></label> <!-- 显示的名字 -->
<description>QQRN_TraitBase</description> <!-- 描述 -->
<statOffsets> <!-- 状态偏移 -->
<MoveSpeed>+3</MoveSpeed><!--移动速度-->
<WorkSpeedGlobal>+1</WorkSpeedGlobal> <!--全局工作速度-->
<GeneralLaborSpeed>+0.5</GeneralLaborSpeed> <!--非熟练劳动力速度-->
<MoveSpeed>+1</MoveSpeed> <!--移动速度-->
<CarryingCapacity>+600</CarryingCapacity> <!--搬运量-->
<GlobalLearningFactor>+1</GlobalLearningFactor> <!--全局学习能力-->
<RestRateMultiplier>1</RestRateMultiplier> <!--休息率系数-->
<ImmunityGainSpeed>+0.2</ImmunityGainSpeed> <!--免疫力增速-->
<IncomingDamageFactor>1</IncomingDamageFactor> <!--伤害减免-->
</statOffsets>
</li>
</degreeDatas>
</TraitDef>
下面我们建立两个不同的特性 射击专精 研究专精
<TraitDef ParentName="QQRN_TraitBase"><!-- 射击专精 -->
<defName>QQRN_Trait_zj01</defName> <!-- Base -->
<degreeDatas>
<li>
<label><color=#FF6600>[射击专精]</color></label> <!-- 显示的名字 -->
<description>射击专精</description> <!-- 描述 -->
<statOffsets> <!-- 状态偏移 -->
<AimingDelayFactor>-1</AimingDelayFactor> <!--瞄准延迟系数-->
<ShootingAccuracyPawn>+20</ShootingAccuracyPawn> <!--射击精确度-->
<HuntingStealth>1</HuntingStealth> <!--狩猎匿踪系数-->
</statOffsets>
<skillGains> <!-- 技能增加 -->
<li><key>Shooting</key><value>5</value></li> <!--射击-->
</skillGains>
</li>
</degreeDatas>
</TraitDef>
<TraitDef ParentName="QQRN_TraitBase"> <!--[研究专精]-->
<defName>QQRN_Trait_zj10</defName>
<degreeDatas>
<li>
<label><color=#FF6600>[研究专精]</color></label>
<description>研究专精</description>
<statOffsets>
<!--研究-->
<ResearchSpeed>1</ResearchSpeed> <!--研究速度-->
</statOffsets>
<skillGains>
<li><key>Intellectual</key><value>5</value></li> <!--研究 或者 Research-->
</skillGains>
</li>
</degreeDatas>
</TraitDef>
说明:
基类<TraitDef Name="QQRN_TraitBase" Abstract="True"></TraitDef>
Name="QQRN_TraitBase" 这个名称方便子类进行继承
Abstract="True" 说明这个基类是个抽象类,无实体,也就是说这个类不会在游戏内体现出一个特性来.
如果你删掉这句,那这基类就是个实实在在的特性,我特地添加了label,值为,自己可以试试
子类<TraitDef ParentName="QQRN_TraitBase"></TraitDef>
ParentName="QQRN_TraitBase" 意思是继承Name="QQRN_TraitBase"的类
子类有的内容会覆盖基类
栗子:[研究专精]完整的类会变成下面的
<TraitDef> <!--[研究专精]-->
<defName>QQRN_Trait_zj10</defName>
<commonality>0.1</commonality> <!--出现概率-->
<degreeDatas>
<li>
<label><color=#FF6600>[研究专精]</color></label>
<description>研究专精</description>
<statOffsets>
<MoveSpeed>+3</MoveSpeed><!--移动速度-->
<WorkSpeedGlobal>+1</WorkSpeedGlobal> <!--全局工作速度-->
<GeneralLaborSpeed>+0.5</GeneralLaborSpeed> <!--非熟练劳动力速度-->
<MoveSpeed>+1</MoveSpeed> <!--移动速度-->
<CarryingCapacity>+600</CarryingCapacity> <!--搬运量-->
<GlobalLearningFactor>+1</GlobalLearningFactor> <!--全局学习能力-->
<RestRateMultiplier>1</RestRateMultiplier> <!--休息率系数-->
<ImmunityGainSpeed>+0.2</ImmunityGainSpeed> <!--免疫力增速-->
<IncomingDamageFactor>1</IncomingDamageFactor> <!--伤害减免-->
<!--研究-->
<ResearchSpeed>1</ResearchSpeed> <!--研究速度-->
</statOffsets>
<skillGains>
<li><key>Intellectual</key><value>5</value></li> <!--研究 或者 Research-->
</skillGains>
</li>
</degreeDatas>
</TraitDef>
他会把基类有的搬到自己类里,但是自己有的不会被基类覆盖.如label和description
如果某节点不想去继承,可以在节点上加 Inherit="false" 这个以后再说.
再说一次,本人制作的MOD网址为:https://bbs.3dmgame.com/thread-6084944-1-1.html
MOD中的说明应该都挺详细的.有需要的自行打开文件查看.
下一节会说如何制作泥土深水浅水肥沃土地
</List> 路过,支持个{:3_118:}~ 可以的! 话说i能整理个更完整的档案就好了,论坛的发帖体验真的不咋地
页:
[1]