返回目录
Chapter 6 第六章:新增锻造配件
开发者文档 更新于 2025-05-22 22:47:26

第六章:新增锻造配件

本教程将逐步指导你如何为锻造系统添加新的武器配件(如刀刃、护手、握柄、配重)、定义可用配件组合(模板)及自定义武器行为,并在 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>

✅ 测试你的自定义锻造系统

  1. 启动游戏,确保勾选你的 ExampleMod
  2. 进入锻造台(需达到技能要求)
  3. 切换到自定义模板(ZZTwoHandedSword_add)
  4. 应可在武器组装页面中选择你的 4 个自定义配件组合

🧠 实用建议

类型建议
命名规范所有 id 建议加前缀(如 zz_),避免与原版冲突
模型来源所用 mesh 应来自游戏已有资源,避免丢模
本地化支持使用 {=xxx} 键值实现中英文自动切换
进阶扩展可为每种武器定义多个模板,适配不同战斗风格