本教程将逐步指导你如何为锻造系统添加新的武器配件(如刀刃、护手、握柄、配重)、定义可用配件组合(模板)及自定义武器行为,并在 SubModule.xml 中注册以确保游戏识别并加载。
🧱 步骤概览:
| 步骤 | 操作内容 |
|---|---|
| 第 1 步 | 创建并定义武器配件 crafting_pieces.xml |
| 第 2 步 | 定义配件组合武器的方式 weapon_descriptions.xml |
| 第 3 步 | 创建锻造模板 crafting_templates.xml |
| 第 4 步 | 在 SubModule.xml 中注册所有自定义 XML |
🧩 第 1 步:定义自定义配件文件 crafting_pieces.xml
📁 文件路径:
Modules/ExampleMod/ModuleData/crafting_pieces.xml示例:巨剑四件配件
<?xml version="1.0" encoding="utf-8"?>
<CraftingPieces>
<!-- 刀刃 -->
<CraftingPiece id="zz_vlandian_blade_3_plus_2" name="{=zz001}巨剑刃"
tier="5" piece_type="Blade" mesh="cleaver_blade_5"
culture="Culture.battania" length="99.4" weight="0.5">
<BladeData stack_amount="3" physics_material="metal_weapon"
body_name="bo_sword_one_handed"
holster_mesh="vlandian_blade_2_scabbard_2">
<Thrust damage_type="Pierce" damage_factor="7" />
<Swing damage_type="Cut" damage_factor="7" />
</BladeData>
<Flags>
<Flag name="CanBePickedUpFromCorpse"/>
<Flag name="CanKnockDown"/>
<Flag name="BonusAgainstShield"/>
<Flag name="CanHook"/>
</Flags>
<Materials>
<Material id="Iron6" count="20" />
</Materials>
</CraftingPiece>
<!-- 护手 -->
<CraftingPiece id="zz_vlandian_guard_8_plus" name="{=zz002}巨剑护手"
tier="5" piece_type="Guard" mesh="vlandian_guard_8"
culture="Culture.vlandia" length="1.42" weight="0.1">
<BuildData next_piece_offset="0.2" />
<StatContributions armor_bonus="5" />
<Materials>
<Material id="Iron5" count="5" />
</Materials>
</CraftingPiece>
<!-- 握柄 -->
<CraftingPiece id="zz_aserai_grip_10_plus" name="{=zz003}巨剑握柄"
tier="5" piece_type="Handle" mesh="aserai_grip_10"
culture="Culture.aserai" length="30.9" weight="0.1"
item_holster_pos_shift="0,0,-0.02">
<BuildData piece_offset="-6.75"
previous_piece_offset="0.1"
next_piece_offset="0.1" />
<Materials>
<Material id="Iron3" count="4" />
</Materials>
</CraftingPiece>
<!-- 配重块 -->
<CraftingPiece id="zz_battania_pommel_8_plus" name="{=zz004}巨剑配重块"
tier="5" piece_type="Pommel" mesh="battania_pommel_8"
culture="Culture.battania" length="2.5" weight="0.1">
<Materials>
<Material id="Iron5" count="2" />
</Materials>
</CraftingPiece>
</CraftingPieces>
🗡️ 第 2 步:定义武器描述文件 weapon_descriptions.xml
📁 路径:
Modules/ExampleMod/ModuleData/weapon_descriptions.xml示例定义:双手巨剑
<?xml version="1.0" encoding="utf-8"?>
<WeaponDescriptions>
<WeaponDescription id="TwoHandedSword_add_zz"
weapon_class="TwoHandedSword"
item_usage_features="twohanded:block:swing:thrust">
<WeaponFlags>
<WeaponFlag value="MeleeWeapon"/>
<WeaponFlag value="NotUsableWithOneHand"/>
</WeaponFlags>
<AvailablePieces>
<AvailablePiece id="zz_vlandian_blade_3_plus_2"/>
<AvailablePiece id="zz_vlandian_guard_8_plus"/>
<AvailablePiece id="zz_aserai_grip_10_plus"/>
<AvailablePiece id="zz_battania_pommel_8_plus"/>
</AvailablePieces>
</WeaponDescription>
</WeaponDescriptions>
🧰 第 3 步:创建锻造模板文件 crafting_templates.xml
📁 路径:
Modules/ExampleMod/ModuleData/crafting_templates.xml示例:巨剑模板定义
<?xml version="1.0" encoding="utf-8"?>
<CraftingTemplates>
<CraftingTemplate id="ZZTwoHandedSword_add"
item_type="TwoHandedWeapon"
modifier_group="sword"
item_holsters="sword_back:sword_back_2:sword_back_3:sword_back_4"
piece_type_to_scale_holster_with="Blade"
hidden_piece_types_on_holster="Blade"
default_item_holster_position_offset="0,0,-0.1">
<PieceDatas>
<PieceData piece_type="Handle" build_order="0" />
<PieceData piece_type="Guard" build_order="1" />
<PieceData piece_type="Blade" build_order="2" />
<PieceData piece_type="Pommel" build_order="-1" />
</PieceDatas>
<WeaponDescriptions>
<WeaponDescription id="TwoHandedSword_add_zz" />
</WeaponDescriptions>
<StatsData>
<StatData stat_type="Weight" max_value="7.0" />
<StatData stat_type="WeaponReach" max_value="300" />
<StatData stat_type="ThrustSpeed" max_value="200" />
<StatData stat_type="SwingSpeed" max_value="200" />
<StatData stat_type="ThrustDamage" max_value="500" />
<StatData stat_type="SwingDamage" max_value="500" />
<StatData stat_type="Handling" max_value="200" />
</StatsData>
<UsablePieces>
<UsablePiece piece_id="zz_vlandian_blade_3_plus_2" />
<UsablePiece piece_id="zz_vlandian_guard_8_plus" />
<UsablePiece piece_id="zz_aserai_grip_10_plus" />
<UsablePiece piece_id="zz_battania_pommel_8_plus" />
</UsablePieces>
</CraftingTemplate>
</CraftingTemplates>
📜 第 4 步:注册所有 XML 至 SubModule.xml
<Xmls>
<!-- 配件定义 -->
<XmlNode>
<XmlName id="CraftingPieces" path="crafting_pieces"/>
<IncludedGameTypes>
<GameType value="Campaign"/>
<GameType value="CampaignStoryMode"/>
<GameType value="Sandbox"/>
<GameType value="CustomGame"/>
</IncludedGameTypes>
</XmlNode>
<!-- 武器描述定义 -->
<XmlNode>
<XmlName id="WeaponDescriptions" path="weapon_descriptions"/>
<IncludedGameTypes>
<GameType value="Campaign"/>
<GameType value="CampaignStoryMode"/>
<GameType value="Sandbox"/>
<GameType value="CustomGame"/>
</IncludedGameTypes>
</XmlNode>
<!-- 模板定义 -->
<XmlNode>
<XmlName id="CraftingTemplates" path="crafting_templates"/>
<IncludedGameTypes>
<GameType value="Campaign"/>
<GameType value="CampaignStoryMode"/>
<GameType value="Sandbox"/>
<GameType value="CustomGame"/>
</IncludedGameTypes>
</XmlNode>
</Xmls>
✅ 测试你的自定义锻造系统
- 启动游戏,确保勾选你的 ExampleMod
- 进入锻造台(需达到技能要求)
- 切换到自定义模板(ZZTwoHandedSword_add)
- 应可在武器组装页面中选择你的 4 个自定义配件组合
🧠 实用建议
| 类型 | 建议 |
|---|---|
| 命名规范 | 所有 id 建议加前缀(如 zz_),避免与原版冲突 |
| 模型来源 | 所用 mesh 应来自游戏已有资源,避免丢模 |
| 本地化支持 | 使用 {=xxx} 键值实现中英文自动切换 |
| 进阶扩展 | 可为每种武器定义多个模板,适配不同战斗风格 |