好的,我将根据你提供的 CharacterDef 更新文档,并新增 defaultWeapon 字段的说明。


角色定义 (CharacterDef)

CharacterDef 用于定义游戏中的各类角色实体,例如玩家、NPC、敌人等。它继承了基础的实体定义,并额外提供了内部维度(体内场景)和默认武器的配置。

根元素: <Define>

DefName: 必需,全局唯一的字符串,用于标识特定的角色定义。

Label: 可选,字符串,用于在游戏中显示的角色名称。

Description: 可选,字符串,对角色的详细描述。


参数说明

<attributes>

角色的基础属性集合。这是一个匿名定义,直接在 attributes 元素下定义各项属性。

字段说明:

  • <health>: 整数,角色的生命值,默认为10。
  • <moveSpeed>: 浮点数,角色的移动速度,默认为1。
  • <attack>: 整数,角色的攻击力,默认为1。
  • <defense>: 整数,角色的防御力,默认为0。
  • <attackSpeed>: 浮点数,角色的攻击速度(每次攻击的冷却时间),默认为2。
  • <attackRange>: 浮点数,角色的攻击范围,默认为3。
  • <attackTargetCount>: 整数,角色每次攻击能命中的目标数量,默认为1。

示例:

<attributes>
    <health>100</health>
    <moveSpeed>2.5</moveSpeed>
    <attack>15</attack>
</attributes>

<drawingOrder>

定义角色在不同状态下(例如:闲置、行走、近战攻击、远程攻击、死亡)和不同朝向时的绘制方式。这是一个匿名定义,直接在 drawingOrder 元素下定义各种绘制节点。每个状态-朝向组合(如 idle_downwalk_up)都是一个 DrawNodeDef 类型。

字段说明:

  • <idle_down>, <idle_up>, <idle_left>, <idle_right>: 闲置状态下,角色朝向下方、上方、左方、右方时的绘制节点。
  • <walk_down>, <walk_up>, <walk_left>, <walk_right>: 行走状态下,角色朝向下方、上方、左方、右方时的绘制节点。
  • <meleeAttack_down>, <meleeAttack_up>, <meleeAttack_left>, <meleeAttack_right>: 近战攻击状态下,角色朝向下方、上方、左方、右方时的绘制节点。
  • <rangedAttack_down>, <rangedAttack_up>, <rangedAttack_left>, <rangedAttack_right>: 远程攻击状态下,角色朝向下方、上方、左方、右方时的绘制节点。
  • <death_down>, <death_up>, <death_left>, <death_right>: 死亡状态下,角色朝向下方、上方、左方、右方时的绘制节点。

示例:

<drawingOrder>
    <idle_down>
        <textures>
            <li>Character_Maid_Walk_1</li>
        </textures>
    </idle_down>
    <walk_down>
        <FPS>5.0</FPS>
        <textures>
            <li>Character_Maid_Walk_0</li>
            <li>Character_Maid_Walk_1</li>
            <li>Character_Maid_Walk_2</li>
            <li>Character_Maid_Walk_1</li>
        </textures>
    </walk_down>
    <!-- 其他状态和朝向的绘制定义 -->
</drawingOrder>

<behaviorTree>

定义角色的行为逻辑树。这是一个匿名定义,直接在 behaviorTree 元素下定义行为树的根节点。其结构与 BehaviorTreeDef 一致。

示例:

<behaviorTree>
    <className>ThinkNode_Selector</className>
    <childTree>
        <li>
            <className>ThinkNode_Conditional</className>
            <value>HasWeapon()</value>
            <childTree>
                <li>
                    <className>JobGiver_AttackJob</className>
                </li>
            </childTree>
        </li>
        <li>
            <className>ThinkNode_Sequence</className>
            <childTree>
                <li><className>JobGiver_Wander</className></li>
                <li><className>JobGiver_Idle</className></li>
            </childTree>
        </li>
    </childTree>
</behaviorTree>

<affiliation>

指定角色的所属阵营。可以引用一个现有的 AffiliationDefdefName,或者直接在此处进行匿名定义

作为引用:

<affiliation>player</affiliation> <!-- 引用名为 "player" 的 AffiliationDef -->

作为匿名定义:

<affiliation>
    <defaultRelation>Friendly</defaultRelation>
    <hostileFactions>
        <li>monster</li>
    </hostileFactions>
</affiliation>

<defaultWeapon>

定义角色在背包没有选择任何武器时,默认使用的武器。可以引用一个现有的 WeaponDefdefName,或者直接在此处进行匿名定义

作为引用:

<defaultWeapon>BasicSword</defaultWeapon> <!-- 引用名为 "BasicSword" 的 WeaponDef -->

作为匿名定义:

<defaultWeapon>
    <label>默认拳头</label>
    <attack>1</attack>
    <attackRange>0.8</attackRange>
    <!-- 其他 WeaponDef 属性,具体字段取决于 WeaponDef 的定义 -->
</defaultWeapon>

<eventDef>

定义角色在特定事件发生时触发的行为。这是一个 EntityEventDef 类型的匿名定义

示例:

<eventDef>
    <onDeathEvents>
        <li>
            <workClass>CreateEffect</workClass>
            <parameter>ExplosionEffect</parameter>
        </li>
        <li>
            <workClass>DropItems</workClass>
            <parameter>Gold,5-10</parameter>
        </li>
    </onDeathEvents>
</eventDef>

<colliderSize>

字符串,定义角色的碰撞体大小,通常为 "宽,高" 格式。例如 "1.0,1.0"。

<colliderPosition>

字符串,定义角色的碰撞体相对角色中心的位置偏移,通常为 "x,y" 格式。例如 "0.0,0.5"。

<insideDimensionDef>

引用一个 DimensionDefdefName,指定当角色进行“体内场景”战斗时所使用的维度定义。

示例:

<insideDimensionDef>CellularDimension</insideDimensionDef> <!-- 引用名为 "CellularDimension" 的 DimensionDef -->

示例

<Define>
    <defName>maid</defName>
    <label>女仆</label>
    <description>一个可爱的女仆角色</description>

    <!-- 角色基础属性的匿名定义 -->
    <attributes>
        <health>100</health>
        <moveSpeed>2</moveSpeed>
        <attack>10</attack>
        <defense>5</defense>
        <attackRange>1.5</attackRange>
    </attributes>

    <!-- 角色所属阵营,引用现有定义 -->
    <affiliation>player</affiliation>

    <!-- 角色默认武器,引用现有定义 -->
    <defaultWeapon>MaidDuster</defaultWeapon>

    <!-- 角色不同状态和朝向的绘制指令的匿名定义 -->
    <drawingOrder>
        <!-- 闲置状态 -->
        <idle_up>
            <textures>
                <li>Character_Maid_Walk_37</li>              
            </textures>
        </idle_up>
        <idle_down>
            <textures>
                <li>Character_Maid_Walk_1</li>
            </textures>
        </idle_down>
        <idle_left>
            <textures>
                <li>Character_Maid_Walk_13</li>
            </textures>
        </idle_left>
        <idle_right>
            <textures>
                <li>Character_Maid_Walk_25</li>
            </textures>
        </idle_right>

        <!-- 行走状态 -->
        <walk_up>
            <FPS>5.0</FPS>
            <textures>
                <li>Character_Maid_Walk_36</li>
                <li>Character_Maid_Walk_37</li>
                <li>Character_Maid_Walk_38</li>
                <li>Character_Maid_Walk_37</li>
            </textures>
        </walk_up>
        <walk_down>
            <FPS>5.0</FPS>
            <textures>
                <li>Character_Maid_Walk_0</li>
                <li>Character_Maid_Walk_1</li>
                <li>Character_Maid_Walk_2</li>
                <li>Character_Maid_Walk_1</li>
            </textures>
        </walk_down>
        <walk_left>
            <FPS>5.0</FPS>
            <textures>
                <li>Character_Maid_Walk_12</li>
                <li>Character_Maid_Walk_13</li>
                <li>Character_Maid_Walk_14</li>
                <li>Character_Maid_Walk_13</li>
            </textures>
        </walk_left>
        <walk_right>
            <FPS>5.0</FPS>
            <textures>
                <li>Character_Maid_Walk_24</li>
                <li>Character_Maid_Walk_25</li>
                <li>Character_Maid_Walk_26</li>
                <li>Character_Maid_Walk_25</li>
            </textures>
        </walk_right>

        <!-- 近战攻击状态 -->
        <meleeAttack_down>
            <textures>
                <li>testPawn_6</li>
            </textures>
        </meleeAttack_down>
        <!-- 忽略其他攻击状态以作演示 -->
    </drawingOrder>

    <!-- 角色行为树的匿名定义 -->
    <behaviorTree>
        <className>ThinkNode_Selector</className>
        <childTree>
            <!-- 尝试攻击 -->
            <li>
                <className>ThinkNode_Sequence</className>
                <childTree>
                    <li><className>JobNode_MoveToAttackRange</className></li>
                    <li><className>JobNode_AttackTarget</className></li>
                </childTree>
            </li>
            <!-- 否则,漫无目的地游荡和闲置 -->
            <li>
                <className>ThinkNode_Sequence</className>
                <childTree>
                    <li><className>JobNode_Wander</className></li>
                    <li><className>JobNode_Idle</className></li>
                </childTree>
            </li>
        </childTree>
    </behaviorTree>

    <!-- 角色碰撞体信息 -->
    <colliderSize>1.0,1.5</colliderSize>
    <colliderPosition>0.0,0.75</colliderPosition>

    <!-- 角色体内场景定义 -->
    <insideDimensionDef>PlayerBodyDimension</insideDimensionDef>
</Define>