武器定义 (<WeaponDef>)

功能说明

武器定义用于描述游戏中的各种武器的特性,包括其攻击方式、属性、外观等。武器定义继承了物品定义 (<ItemDef>) 的所有基本特性,因此也拥有物品的通用属性,如堆叠数量、稀有度等。

可用参数

参数名类型默认值说明
defName字符串必需。该武器定义的唯一标识符。
label字符串(空)可选。该武器在游戏中显示的名称。
description字符串(空)可选。该武器在游戏中的详细描述。
FPS浮点数3定义武器显示动画的帧率。
textures字符串数组(空)引用多个 <ImageDef>defName,用于定义武器在世界或UI中的外观纹理。
rarity字符串Common定义武器的稀有度。详见下文**rarity 字段**。
maxStack整数10定义该武器的最大堆叠数量。
ssEquippable布尔值false定义该武器是否可被实体装备。
type字符串Melee定义武器的攻击类型,可以是“近战”或“远程”。详见下文**type 字段**。
attributes定义(匿名定义默认值)定义武器具体的战斗属性,如攻击力、防御力、攻击速度等。可以是引用或匿名定义。详见下文**attributes 字段**。
bullet定义仅当 typeRanged 时有效。定义远程武器发射的子弹特性。可以是引用或匿名定义。详见下文**bullet 字段**。
attackAnimation字符串数组(空)引用多个动画帧名的字符串数组,用于定义武器攻击时播放的专属动画序列。详见下文**attackAnimation 字段**。
attackDetectionTime浮点数0攻击判定时间点,表示攻击动画播放到该百分比时触发伤害或投射子弹。取值范围0到1。
useEntityAttackAnimation布尔值true是否使用实体自身的攻击动画,如果为 false 则使用武器自带的 attackAnimation

示例

这是一个定义名为“TestGun”的远程武器的例子:

<Define>
    <!-- 子弹定义,会被WeaponDef中bullet引用 -->
    <BulletDef>
        <defName>yellowBullet</defName>
        <label>黄色子弹</label>
        <description>一颗黄色的子弹</description>
        <!-- 嵌套定义属性 -->
        <attributes>
            <health>1</health>
            <moveSpeed>20</moveSpeed>
        </attributes>
        <!-- 嵌套定义纹理绘制顺序 -->
        <drawingOrder>
            <idle_down>
                <textures>
                    <li>yellowBullet</li>
                </textures>
            </idle_down>
            <walk_down>
                <textures>
                    <li>yellowBullet</li>
                </textures>
            </walk_down>
        </drawingOrder>
    </BulletDef>

    <!-- 属性定义,会被WeaponDef中attributes引用 -->
    <AttributesDef>
        <defName>TestGunAttributes</defName>
        <attack>10</attack>
        <defense>3</defense>
        <attackSpeed>1</attackSpeed>
        <attackRange>10</attackRange>
        <attackTargetCount>1</attackTargetCount>
    </AttributesDef>

    <!-- 武器定义 -->
    <WeaponDef>
        <defName>TestGun</defName>
        <label>测试枪</label>
        <description>一把测试用的枪</description>
        <!-- 引用属性定义 -->
        <attributes>TestGunAttributes</attributes>
        <type>Ranged</type>
        <FPS>10</FPS>
        <textures>
            <li>TestGunItem</li>
        </textures>
        <attackAnimation>
            <li>testGunAttackAnimation_0</li>
            <li>testGunAttackAnimation_1</li>
            <li>testGunAttackAnimation_2</li>
            <li>testGunAttackAnimation_3</li>
            <li>testGunAttackAnimation_4</li>
            <li>testGunAttackAnimation_5</li>
            <li>testGunAttackAnimation_6</li>
            <li>testGunAttackAnimation_7</li>
            <li>testGunAttackAnimation_8</li>
            <li>testGunAttackAnimation_9</li>
        </attackAnimation>
        <attackDetectionTime>0.5</attackDetectionTime>
        <maxStack>1</maxStack>
        <rarity>Uncommon</rarity>
        <bullet>yellowBullet</bullet> <!-- 引用子弹定义 -->
    </WeaponDef>
</Define>

复杂参数说明

type 字段
  • 说明:指定武器的攻击类型。
  • 可选值
    • Melee (近战武器)
    • Ranged (远程武器)
  • 示例
    <type>Ranged</type>
    
rarity 字段
  • 说明:指定该物品的稀有度。
  • 可选值
    • Common (普通)
    • Uncommon (不常见)
    • Rare (稀有)
    • Epic (史诗)
    • Legendary (传说)
  • 示例
    <rarity>Uncommon</rarity>
    
textures 字段 (图片定义引用数组)
  • 说明:用于指定武器在界面或游戏世界中显示的纹理。这是一个字符串数组,每个元素引用一个 <ImageDef>defName
  • 引用方式
    <textures>
        <li>ImageDef的defName1</li>
        <li>ImageDef的defName2</li>
        <!-- ...更多纹理引用 -->
    </textures>
    
  • 示例
    <textures>
        <li>TestGunItem</li>
    </textures>
    
attackAnimation 字段 (动画帧引用数组)
  • 说明:用于指定武器攻击时播放的动画帧序列。这是一个字符串数组,每个元素引用一个 <ImageDef> 定义的动画帧。通常,一个动画纹理会在其 defName 后拼接 _0, _1, _2 等来表示具体的帧。
  • 引用方式
    <attackAnimation>
        <li>ImageDef动画帧名1</li>
        <li>ImageDef动画帧名2</li>
        <!-- ...更多动画帧引用 -->
    </attackAnimation>
    
  • 示例
    <attackAnimation>
        <li>testGunAttackAnimation_0</li>
        <li>testGunAttackAnimation_1</li>
        <!-- ... -->
        <li>testGunAttackAnimation_9</li>
    </attackAnimation>
    
attributes 字段 (武器属性定义)
  • 说明:定义武器具体的战斗属性,如生命值、移动速度、攻击力、防御力、攻击速度、攻击范围和攻击目标数量。可以是一个对预定义的 <AttributesDef>defName 引用,也可以是当前位置的匿名定义。
  • 引用方式
    <attributes>AttributesDef的defName</attributes>
    
  • 匿名定义方式
    <attributes>
        <health>10</health>
        <moveSpeed>1</moveSpeed>
        <attack>1</attack>
        <defense>0</defense>
        <attackSpeed>2</attackSpeed>
        <attackRange>3</attackRange>
        <attackTargetCount>1</attackTargetCount>
    </attributes>
    
bullet 字段 (子弹定义)
  • 说明:仅当武器类型为 Ranged 时有效,用于定义该武器发射的子弹的特性。可以是一个对预定义的 <BulletDef>defName 引用,也可以是当前位置的匿名定义。
  • 引用方式
    <bullet>BulletDef的defName</bullet>
    
  • 匿名定义方式
    <bullet>
        <defName>匿名子弹名</defName> <!-- 匿名定义也可选择性声明defName -->
        <label>匿名子弹</label>
        <!-- 子弹的属性定义 (匿名定义) -->
        <attributes>
            <health>1</health>
            <moveSpeed>20</moveSpeed>
        </attributes>
        <!-- 嵌套定义纹理绘制顺序 (匿名定义) -->
        <drawingOrder>
            <idle_down>
                <textures>
                    <li>yellowBullet</li>
                </textures>
            </idle_down>
        </drawingOrder>
        <!-- 其他子弹独有属性 -->
    </bullet>