健康定义 (<HediffDef>)

功能说明

健康定义(HediffDef)用于定义游戏中各种状态效果、增益或减益。它可以是一个临时的加速效果,一个持续的毒素伤害,一个永久的生命值上限提升,或者其他任何能在一段时间内或永久影响实体属性或行为的状态。Hediff可以具有多个发展阶段,并在不同的阶段表现出不同的效果。

可用参数

参数名类型默认值说明
defName字符串必需。该健康定义(Hediff)的唯一标识符。
label字符串(空)可选。该状态效果在游戏中显示的名称。
description字符串(空)可选。该状态效果的详细描述。
time浮点数-1.0必需。状态效果的持续时间(秒)。设置为 -1 表示该效果是永久性的。
stagesHediff阶段定义数组可选。定义该Hediff在不同时间点所表现出的效果阶段。详见下文**stages 字段**。
compsHediff组件定义数组可选。为该Hediff附加额外的功能组件,实现复杂行为。详见下文**comps 字段**。

示例

示例1:简单的临时加速效果
<Define>
    <HediffDef>
        <defName>TemporarySpeedBoost</defName>
        <label>加速</label>
        <description>暂时提升移动速度。</description>
        <time>10</time> <!-- 持续10秒 -->
        <stages>
            <li>
                <start>0</start> <!-- 从 Hediff 出现时立即生效 -->
                <attributesOffset>
                    <moveSpeedPercentOffset>0.5</moveSpeedPercentOffset> <!-- 移动速度提升50% -->
                </attributesOffset>
            </li>
        </stages>
    </HediffDef>
</Define>
示例2:具有多个阶段的毒素效果
<Define>
    <HediffDef>
        <defName>ToxicExposure</defName>
        <label>毒素暴露</label>
        <description>受到毒素影响,随时间恶化。</description>
        <time>30</time> <!-- 总持续30秒 -->
        <stages>
            <li>
                <start>0</start> <!-- 0-10秒:轻微阶段 -->
                <label>轻度中毒</label>
                <attributesOffset>
                    <moveSpeedPercentOffset>-0.1</moveSpeedPercentOffset> <!-- 10%减速 -->
                </attributesOffset>
            </li>
            <li>
                <start>10</start> <!-- 10-20秒:中度阶段 -->
                <label>中度中毒</label>
                <attributesOffset>
                    <moveSpeedPercentOffset>-0.25</moveSpeedPercentOffset> <!-- 25%减速 -->
                    <healthOffset>-0.1</healthOffset> <!-- 每秒损失0.1生命值(通过Comp实现) -->
                </attributesOffset>
            </li>
            <li>
                <start>20</start> <!-- 20-30秒:重度阶段 -->
                <label>重度中毒</label>
                <attributesOffset>
                    <moveSpeedPercentOffset>-0.5</moveSpeedPercentOffset> <!-- 50%减速 -->
                    <attackPercentOffset>-0.2</attackPercentOffset> <!-- 攻击力降低20% -->
                    <healthOffset>-0.3</healthOffset> <!-- 每秒损失0.3生命值 -->
                </attributesOffset>
            </li>
        </stages>
        <comps>
            <li>
                <!-- 范例:一个自定义组件,负责根据attributesOffset.healthOffset属性造成持续伤害 -->
                <compClass>HediffComp_DamageOverTime</compClass> 
                <properties>{"damageType":"Poison", "tickInterval":1.0}</properties>
            </li>
        </comps>
    </HediffDef>
</Define>

Hediff阶段定义 (<HediffStageDef>)

功能说明

Hediff阶段定义(HediffStageDef)用于描述一个特定状态效果在不同发展阶段的具体属性偏移。一个具有多个阶段的Hediff可以在其持续时间内,随着时间的推移从一个阶段过渡到另一个阶段,从而表现出不同的效果。

可用参数

参数名类型默认值说明
defName字符串可选。该阶段的唯一标识符(作为匿名定义时可省略)。
label字符串(空)可选。该阶段在游戏中显示的名称。
description字符串(空)可选。该阶段的详细描述。
start浮点数0.0必需。该阶段开始的时间点。例如,如果所属Hediff的总持续时间为10秒,start 为5,则此阶段从Hediff出现5秒后开始生效。对于永久性Hediff (HediffDef.time 为 -1),阶段按其 start 值从小到大顺序匹配,直到某个 start 值大于当前Hediff已持续时间或匹配到最后一个阶段。
attributesOffset属性偏移定义(匿名定义默认值)必需。定义此阶段对实体属性造成的偏移量。可以是引用或匿名定义。详见下文**attributesOffset 字段**。

复杂参数说明

attributesOffset 字段 (属性偏移定义)
  • 说明:这是一个 属性偏移定义 (<AttributesOffsetDef>) 的匿名定义或引用。它详细说明了该 Hediff 阶段对实体各项属性(如生命值、移动速度、攻击力等)造成的具体影响,包括绝对值偏移和百分比偏移。
  • 匿名定义方式
    <attributesOffset>
        <healthOffset>-5</healthOffset> <!-- 生命值上限减少5 -->
        <moveSpeedPercentOffset>0.2</moveSpeedPercentOffset> <!-- 移动速度提高20% -->
    </attributesOffset>
    

属性偏移定义 (<AttributesOffsetDef>)

功能说明

属性偏移定义(AttributesOffsetDef)是一个辅助定义,通常作为 Hediff阶段定义 (<HediffStageDef>) 中的匿名定义,用于详细指定对实体各项属性的修改量。这些修改可以是直接的数值增减(绝对值偏移),也可以是基于现有属性值的百分比增减(百分比偏移)。

可用参数

参数名类型默认值说明
defName字符串可选。该偏移定义的唯一标识符(作为匿名定义时可省略)。
label字符串(空)可选。该偏移的描述性标签。
description字符串(空)可选。该偏移的详细描述。
healthOffset浮点数0.0生命值上限的绝对值偏移量。
moveSpeedOffset浮点数0.0移动速度的绝对值偏移量。
attackOffset浮点数0.0攻击力的绝对值偏移量。
defenseOffset浮点数0.0防御力的绝对值偏移量。
attackSpeedOffset浮点数0.0攻击速度的绝对值偏移量。
attackRangeOffset浮点数0.0攻击范围的绝对值偏移量。
attackTargetCountOffset浮点数0.0攻击目标数量的绝对值偏移量。
healthPercentOffset浮点数0.0生命值上限的百分比偏移量(例如 0.1 表示 +10%,-0.5 表示 -50%)。
moveSpeedPercentOffset浮点数0.0移动速度的百分比偏移量。
attackPercentOffset浮点数0.0攻击力的百分比偏移量。
defensePercentOffset浮点数0.0防御力的百分比偏移量。
attackSpeedPercentOffset浮点数0.0攻击速度的百分比偏移量。
attackRangePercentOffset浮点数0.0攻击范围的百分比偏移量。
attackTargetCountPercentOffset浮点数0.0攻击目标数量的百分比偏移量。

示例

<!-- 作为 HediffStageDef 内部的匿名定义 -->
<attributesOffset>
    <healthOffset>50</healthOffset>               <!-- 生命值上限增加50 -->
    <moveSpeedPercentOffset>0.15</moveSpeedPercentOffset> <!-- 移动速度增加15% -->
    <attackOffset>10</attackOffset>               <!-- 攻击力增加10 -->
    <defensePercentOffset>-0.05</defensePercentOffset> <!-- 防御力降低5% -->
</attributesOffset>

Hediff组件定义 (<HediffCompDef>)

功能说明

Hediff组件定义(HediffCompDef)允许你为 健康定义 (<HediffDef>) 附加更复杂和动态的行为逻辑。每个组件都是一个独立的模块,可以实现特定功能,例如持续伤害、特殊效果触发、周期性事件等。

可用参数

参数名类型默认值说明
defName字符串可选。该组件定义的唯一标识符(作为匿名定义时可省略)。
label字符串(空)可选。该组件的描述性标签。
description字符串(空)可选。该组件的详细描述。
compClass字符串必需。该组件对应的C#类名。此字符串用于在代码中实例化具体的行为组件。
properties字符串(空)可选。一个自定义属性字符串,通常是JSON格式,用于向 compClass 传递配置参数,以进一步定制组件的行为。

示例

这是一个定义了一个持续造成伤害的Hediff组件的例子:

<!-- 作为 HediffDef 内部的匿名定义 -->
<comps>
    <li>
        <compClass>HediffComp_DamageOverTime</compClass>
        <properties>
            {"damageAmount": 2.5, "damageInterval": 1.0, "damageType": "Burn"}
        </properties>
    </li>
    <li>
        <!-- 另一个组件,例如周期性清除其他Debuff -->
        <compClass>HediffComp_PeriodicCleanse</compClass>
        <properties>
            {"cleanseInterval": 5.0, "cleanseChance": 0.8, "targetHediffTags": ["DebuffTag"]}
        </properties>
    </li>
</comps>

复杂参数说明

properties 字段 (属性字符串)
  • 说明:这是一个字符串字段,用于向 compClass 指定的组件传递自定义的配置数据。该字符串内容通常期望是JSON格式,以便组件可以在运行时解析这些数据来配置其行为。例如,一个伤害组件可能需要 damageAmounttickInterval 参数。
  • 示例
    <properties>
        {"key1": "value1", "key2": 123, "key3": true, "nestedObject": {"subKey": "subValue"}}
    </properties>
    
    组件的C#代码会负责解析这段JSON字符串并将其映射到自身的属性上。