Files
BlueRoseNote/07-Other/AI/AI Agent/UnrealEngine/Graphify测试结果/AIDM_NPC_GAS_分析报告.md

23 KiB
Raw Blame History

AIDM 项目技术分析报告

测试用提示词(标准化,两组完全一致) 项目AIDM — UE5.7 修仙 ARPG 日期2026-05-30


任务 1NPC 系统完整架构

1.1 分级机制A/B/C 三级)

NPC 分级体系定义在 LWSNpcTypes.h:111-219 和设计文档中:

级别 数量 跨存档保留 模拟深度 更新频率
A级 20~40 姓名/外貌/性格/资质永不改变(IdentitySeedId 种子驱动) 完整(情绪/关系/目标/记忆/决策) 每个时间单位
B级 100~300 角色定位保留,人物更换 中度(目标/关系/基础决策) 每2~5个时间单位
C级 数百~上千 轻度(位置/状态/基础反应) 按需/低频

关键字段:FLWSNpcDataTierELWSNpcTier)、IdentitySeedIdA级跨存档种子ID。C→B 涌现升级通过 InteractionCountSignificanceScore 追踪。

1.2 决策模型Utility AI

核心文件:LWSNpcDecisionSystem.h/.cpp

评分公式LWSNpcDecisionSystem.h:19-31

BaseScore(a)     = Σᵢ NeedRelevance[a][i] × Npc.Needs[i]    (i ∈ 6维需求)
PersonalityFactor = f(Temperament, Caution, Morality, a)
GoalFactor        = Π(Goal Type → bonus, a)
ScoreWithNoise(a) = BaseScore × PersonalityFactor × GoalFactor + Uniform[0, 0.10]
ChosenAction      = argmaxₐ ScoreWithNoise(a)

6 维需求Survival / Safety / Social / Power / Resource / Cultivation,每日衰减(缺乏度↑),存储在 FLWSNpcData::NeedsTArray<float> 长度固定为6

7 种高层 ActionWander / GoHome / Cultivate / SeekResource / Socialize / Flee / Hunt

3 种 Behavior(执行层翻译):

  • Idle → 原地不动
  • Wander → 6邻居随机跳转20%概率原地不动)
  • MoveTo → 贪心1-hop向目标移动

3D 性格LWSNpcPersonalityTypes.hTemperament(冷→热)、Caution(慎→莽)、Morality(义→私),影响各 Action 的权重系数。

行为持续性(设计文档 §八,待实施):承诺期 MinDuration、完成判定 IsFinished、Need 分摊扣减、Stickiness 黏性、Hysteresis 迟滞、中断保护。

1.3 与时间系统的关系

时间系统定义在 RPGCommon/Public/Time/RPGGameTimeTypes.hRPGGameTimeSubsystem.h

  • 日历常量12月/年30天/月360天/年(FRPGGameRawTime
  • 驱动方式URPGGameTimeSubsystem::OnGameTimeChanged 广播,每次 DeltaDays > 0 触发
  • NPC 模拟入口ULWSNpcSimulationSubsystem::HandleGameTimeChanged 订阅时间广播 → 按 DeltaDays 次调用 SimulateOneDay()
  • 数据流
    GameTimeSubsystem.OnGameTimeChanged (DeltaDays>0)
      → NpcSim.SimulateDays(N)
        → 对每个存活 NPC:
          → DecisionSystem.DecayNeeds (需求衰减)
          → DecisionSystem.DecideAction (评分→选Action→翻译Behavior)
          → TickNpcOneDay (Idle/Wander/MoveTo 物理推进)
          → SpatialIndex.Move (更新空间索引)
          → PushTrail (环形buffer记录轨迹)
        → 同格NPC关系建立 / 关系衰减 / 信息传播
    

1.4 存档方式

存档系统定义在 RPGSaveSystem/Public/RPGSaveSubsystem.h

  • 两级存档URPGSaveSystemData(系统级,槽位列表)+ URPGSaveDataObject(玩家级,TMap<FName, FSaveDataContainer>
  • 接口机制:各模块通过 ISaveableInterface 注册到 URPGSaveSubsystem,以 FName SaveID 标识
  • NPC 数据持久化ULWSNpcSimulationSubsystem 提供 GetActiveNpcsCopy()(返回 TArray<FLWSNpcData> 副本)和 RestoreNpcsFromSave()从存档还原NPC 数据作为 FLWSNpcData[] 序列化存入 FSaveDataContainer
  • 玩家数据持久化:通过 URPGAttributeSet + FRPGCharacterAttributeData 保存属性,FRPGSkilllActionPoseTree 保存技能映射,FSkilllTreeDataPool 保存技能树

任务 2商队 NPC 跨系统依赖分析

新增「商队 NPC」类型需要修改以下模块

必须修改的模块

1. LivingWorldSystem 模块

文件 修改内容
LWSNpcTypes.h ELWSNpcBehavior 新增 Trade/Caravan 枚举值;FLWSNpcData 新增字段:TradeRoute(起点→终点)、TradeGoods(货物数组)、CaravanOwnerFactionId
LWSNpcPersonalityTypes.h ELWSNpcAction 新增 TradeCaravanELWSNpcNeed 可能需要新增 Wealth 维度;ELWSNpcGoal 新增 TradeGoal
LWSNpcDecisionSystem.h/.cpp NeedRelevance 矩阵新增 TradeCaravanPersonality/Goal 权重新增商队相关因子;ApplyActionToBehavior 新增 TradeCaravan → MoveTo 翻译逻辑
LWSNpcSimulationSubsystem.h/.cpp TickNpcOneDay 新增 Trade 行为处理(沿路线移动、到达后触发交易结算)
LWSNpcGenerator.h/.cpp 新增商队生成逻辑(沿贸易路线撒点、分配货物)
LWSNpcRelationSubsystem.h/.cpp 商队与聚落/势力的交易关系类型
LWSNpcSpatialIndex.h 如无结构变化则无需修改

2. 势力/聚落模块

文件 修改内容
LWSFactionTypes.h 势力新增贸易路线数据、商队所有权
LWSSettlementGenerator.h 聚落间贸易路线生成(可为商队提供路径)
LWSFactionGenerator.h 势力初始化时分配商队

3. 世界/资源模块

文件 修改内容
LWSResourceGenerator.h 商队可携带/交易资源类型定义
LWSChronicleSubsystem.h 商队到达/被劫事件写入编年史

存档结构变化

需要变化FLWSNpcData 新增字段TradeRoute、TradeGoods 等)会影响序列化。由于 FLWSNpcDataUSTRUCT 且直接存储在 ActiveNpcsTArray<FLWSNpcData>),新增字段后旧存档将不兼容。需要:

  1. URPGSaveDataObject::VersionMap 中递增 NPC 数据版本号
  2. 提供存档迁移逻辑(RestoreNpcsFromSave 中检测旧版本并填充默认值)

FRPGCharacterAttributeDataURPGAttributeSet:如果商队不涉及玩家属性变化,这两处不需要修改。

对 GAS 属性系统的影响

直接影响:无。 GAS 属性系统(URPGAttributeSet)当前服务于玩家/Actor 角色的战斗属性,而 LivingWorld NPC 是纯数据 USTRUCT,不挂载 AbilitySystemComponent

间接影响(可选扩展):如果未来商队 NPC 需要与玩家发生战斗交互(如劫商队),则需要为商队守卫创建 RPGAICharacterActor此时会走 GAS 属性系统。但这属于"商队战斗"子功能,不属于商队基础框架。

涉及文件汇总(约 12 个文件)

Plugins/RPGGameCore/Source/LivingWorldSystem/Public/LWSNpcTypes.h
Plugins/RPGGameCore/Source/LivingWorldSystem/Public/LWSNpcPersonalityTypes.h
Plugins/RPGGameCore/Source/LivingWorldSystem/Public/LWSNpcDecisionSystem.h
Plugins/RPGGameCore/Source/LivingWorldSystem/Private/LWSNpcDecisionSystem.cpp
Plugins/RPGGameCore/Source/LivingWorldSystem/Public/LWSNpcSimulationSubsystem.h
Plugins/RPGGameCore/Source/LivingWorldSystem/Private/LWSNpcSimulationSubsystem.cpp
Plugins/RPGGameCore/Source/LivingWorldSystem/Public/LWSNpcGenerator.h
Plugins/RPGGameCore/Source/LivingWorldSystem/Private/LWSNpcGenerator.cpp
Plugins/RPGGameCore/Source/LivingWorldSystem/Public/LWSNpcRelationSubsystem.h
Plugins/RPGGameCore/Source/LivingWorldSystem/Public/LWSFactionTypes.h
Plugins/RPGGameCore/Source/LivingWorldSystem/Public/LWSSettlementGenerator.h
Plugins/RPGGameCore/Source/LivingWorldSystem/Public/LWSChronicleSubsystem.h

任务 3「御剑飞行」ActionPose 代码生成

3.1 枚举扩展

RPGTypes.h:202-260ELM_ActionPose 中,AirFlying 已存在,但「御剑飞行」作为一种特殊的战斗移动姿态,建议新增专用枚举值:

// RPGTypes.h — 在 AirFlying 之后、AirDodge 之前新增

UENUM(BlueprintType)
enum class ELM_ActionPose : uint8
{
    // ... 现有值保持不变 ...

    //空行
    AirFlying,
    //御剑飞行(战斗移动态,可在飞行中施法/攻击)
    AirSwordFlying,     // <-- 新增
    //空避
    AirDodge,
    // ...
};

3.2 头文件声明

// SwordFlyingActionPose.h
#pragma once

#include "CoreMinimal.h"
#include "LogicStateMachine/SDHGAState.h"
#include "GameplayTagContainer.h"
#include "SwordFlyingActionPose.generated.h"

/**
 * 御剑飞行 ActionPose 状态
 *
 * 设计要点:
 *  - 继承自 USDHGAState挂载在 USkillSMInstance 状态机中
 *  - 进入此状态时:角色踩上飞剑,移动速度切换为飞行速度,消耗法力
 *  - 在此状态中可施放子架势技能SubPose0~5如御剑冲刺、御剑斩击
 *  - 退出此状态时:飞剑消散,恢复地面移动速度
 *  - 法力耗尽或受到重击时强制退出
 */
UCLASS(Blueprintable, BlueprintType)
class RPGGAMEPLAYABILITY_API USwordFlyingActionPoseState : public USDHGAState
{
    GENERATED_BODY()

public:
    USwordFlyingActionPoseState();

    // Begin USDHGAState
    virtual void OnEnterState(const FGameplayTagContainer& ContextTags) override;
    virtual void OnExitState(const FGameplayTagContainer& ContextTags) override;
    virtual void TickState(float DeltaTime) override;
    // End USDHGAState

    // 御剑飞行专属 GameplayEffect持续消耗法力、修改移动速度
    UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "SwordFlying")
    TSubclassOf<class UGameplayEffect> SwordFlyingGE;

    // 法力每秒消耗量
    UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "SwordFlying", meta = (ClampMin = "0"))
    float ManaCostPerSecond = 5.0f;

    // 飞行移动速度倍率(基于基础 MoveSpeed
    UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "SwordFlying", meta = (ClampMin = "1.0"))
    float FlightSpeedMultiplier = 1.5f;

    // 受击时是否强制退出御剑
    UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "SwordFlying")
    bool bForceExitOnHit = true;

    // 最小法力阈值(低于此值强制退出)
    UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "SwordFlying", meta = (ClampMin = "0"))
    float MinManaThreshold = 10.0f;

protected:
    // 进入时应用的 GE Handle用于退出时移除
    FActiveGameplayEffectHandle ActiveFlyingGEHandle;

    // 检查是否满足持续飞行条件
    bool CanSustainFlying() const;

    // 获取 OwningCharacter 的属性集
    class URPGAttributeSet* GetOwnerAttributeSet() const;
};

3.3 关键逻辑实现

// SwordFlyingActionPose.cpp
#include "SwordFlyingActionPose.h"
#include "Character/RPGCharacterBase.h"
#include "Character/Attribute/RPGAttributeSet.h"
#include "Abilities/RPGAbilitySystemComponent.h"
#include "LogicStateMachine/SDHSkillStateMachine.h"

USwordFlyingActionPoseState::USwordFlyingActionPoseState()
{
    ManaCostPerSecond = 5.0f;
    FlightSpeedMultiplier = 1.5f;
    bForceExitOnHit = true;
    MinManaThreshold = 10.0f;
}

void USwordFlyingActionPoseState::OnEnterState(const FGameplayTagContainer& ContextTags)
{
    Super::OnEnterState(ContextTags);

    ARPGCharacterBase* Owner = Cast<ARPGCharacterBase>(GetOuterActor());
    if (!Owner) return;

    URPGAbilitySystemComponent* ASC = Owner->GetRPGAbilitySystemComponent();
    URPGAttributeSet* AttrSet = GetOwnerAttributeSet();
    if (!ASC || !AttrSet) return;

    // 1. 应用御剑飞行 GE持续消耗法力 + 移动速度修改)
    if (SwordFlyingGE)
    {
        FGameplayEffectContextHandle Context = ASC->MakeEffectContext();
        FGameplayEffectSpecHandle Spec = ASC->MakeOutgoingSpec(SwordFlyingGE, 1.0f, Context);
        if (Spec.IsValid())
        {
            ActiveFlyingGEHandle = ASC->ApplyGameplayEffectSpecToSelf(*Spec.Data.Get());
        }
    }

    // 2. 标记角色进入御剑飞行状态
    AttrSet->RPGFlags.AddTag(FGameplayTag::RequestGameplayTag(TEXT("State.ActionPose.SwordFlying")));

    // 3. 播放踩剑动画 / 飞剑视觉效果(此处接入动画蓝图和 Niagara
    // Owner->PlayMontageSection(...);
}

void USwordFlyingActionPoseState::OnExitState(const FGameplayTagContainer& ContextTags)
{
    ARPGCharacterBase* Owner = Cast<ARPGCharacterBase>(GetOuterActor());
    if (!Owner) return;

    URPGAbilitySystemComponent* ASC = Owner->GetRPGAbilitySystemComponent();
    URPGAttributeSet* AttrSet = GetOwnerAttributeSet();
    if (!ASC || !AttrSet) return;

    // 1. 移除御剑飞行 GE
    if (ActiveFlyingGEHandle.IsValid())
    {
        ASC->RemoveActiveGameplayEffect(ActiveFlyingGEHandle);
        ActiveFlyingGEHandle = FActiveGameplayEffectHandle();
    }

    // 2. 移除状态 Tag
    AttrSet->RPGFlags.RemoveTag(FGameplayTag::RequestGameplayTag(TEXT("State.ActionPose.SwordFlying")));

    // 3. 恢复地面姿态 → GroundDefault
    USkillSMInstance* SkillSM = Owner->GetSkillSMInstance();
    if (SkillSM)
    {
        SkillSM->SetDynamicSkillByActionPose(
            SkillSM->GetDynamicSkillClassByActionPose(ELM_ActionPose::GroundDefault, ELM_SubActionPose::NotSubPose),
            ELM_ActionPose::GroundDefault,
            ELM_SubActionPose::NotSubPose
        );
    }

    Super::OnExitState(ContextTags);
}

void USwordFlyingActionPoseState::TickState(float DeltaTime)
{
    Super::TickState(DeltaTime);

    // 检查持续飞行条件
    if (!CanSustainFlying())
    {
        // 法力不足或生命值危险 → 强制退出
        USkillSMInstance* SkillSM = Cast<USkillSMInstance>(GetStateMachineInstance());
        if (SkillSM)
        {
            SkillSM->ConsumeCommandTransmitter(
                FGameplayTag::RequestGameplayTag(TEXT("SkillTransmitter.QuitState.ForceGround"))
            );
        }
    }
}

bool USwordFlyingActionPoseState::CanSustainFlying() const
{
    URPGAttributeSet* AttrSet = GetOwnerAttributeSet();
    if (!AttrSet) return false;

    // 法力不足
    if (AttrSet->GetMana() < MinManaThreshold) return false;

    // 生命值过低
    if (AttrSet->GetHealth() <= 0.0f) return false;

    return true;
}

URPGAttributeSet* USwordFlyingActionPoseState::GetOwnerAttributeSet() const
{
    ARPGCharacterBase* Owner = Cast<ARPGCharacterBase>(GetOuterActor());
    if (!Owner) return nullptr;

    URPGAbilitySystemComponent* ASC = Owner->GetRPGAbilitySystemComponent();
    if (!ASC) return nullptr;

    return const_cast<URPGAttributeSet*>(
        ASC->GetSet<URPGAttributeSet>()
    );
}

3.4 注册到 ActionPoseTree

SystemData.h:113-134FRPGSkilllActionPoseTree 中注册:

// 玩家学习御剑飞行技能时:
ActionPoseTree.SetActionPoseSkillClass(
    FLMActionPose(ELM_ActionPose::AirSwordFlying, ELM_SubActionPose::NotSubPose),
    SwordFlyingSkillSMClass
);

任务 4「符修」技能效果系统设计 → GAS Effect 映射

4.1 符修核心机制回顾

来自 修仙流派.md

  • 符修定位:将法术预先封存于符纸,战斗中瞬发不消耗灵力,但一次性使用
  • 加成流派:魔修、鬼修、音修制符时产出 +20%
  • 道艺等级Lv.0~Lv.5未入门→登峰造极Lv.3+ 生效流派加成
  • 产出:攻击符、防御符、遁术符、控制符、召唤符

4.2 符箓类型 → GAS Effect 映射

类型 A攻击符Instant GameplayEffect

攻击符 = UGameplayEffect (DurationPolicy = Instant)
  ├── Modifiers:
  │   ├── Attribute = RPGAttributeSet.Damage       (Magnitude = SetByCaller, Tag = "Data.Talisman.Damage")
  │   └── Execution = URPGDamageExecution          (复用现有伤害结算)
  ├── SetByCaller Magnitudes:
  │   ├── Data.Damage.Base  = 符纸基础伤害
  │   ├── Data.Damage.Bonus = 符修加成百分比
  │   └── Data.Damage.Tough = 韧性伤害
  └── GameplayTags:
      ├── GrantedTags: Effect.Damage.Talisman
      └── AssetTags:  SkillType.Talisman.Attack

类型 B防御符Duration GameplayEffect — 有限时间 Buff

防御符 = UGameplayEffect (DurationPolicy = HasDuration, Duration = 符纸时长)
  ├── Modifiers:
  │   ├── Attribute = RPGAttributeSet.Shield       (ModifierOp = Additive, 护盾值增加)
  │   ├── Attribute = RPGAttributeSet.DefensePower (ModifierOp = Multiplicitive, 防御力+%)
  │   └── Attribute = RPGAttributeSet.BlockRate    (ModifierOp = Additive, 格挡率+N%)
  └── GameplayTags:
      ├── GrantedTags: State.Buff.Talisman.Defense
      └── AssetTags:   SkillType.Talisman.Defense

类型 C遁术符Instant + Duration 混合)

遁术符 = 两段式:
  1) Instant GE: 瞬移(位置修改,走 GameplayCue 或直接 SetActorLocation
  2) Duration GE: 移速加成 + 闪避率提升(持续 N 秒)
     ├── Modifiers:
     │   ├── Attribute = RPGAttributeSet.MoveSpeed  (Multiplicitive, +x%)
     │   └── Attribute = RPGAttributeSet.DodgeRate  (Additive, +y%)
     └── Tags: State.Buff.Talisman.Escape

类型 D控制符Duration GameplayEffect — 施加于目标)

控制符 = UGameplayEffect (DurationPolicy = HasDuration, 施加于 Enemy ASC)
  ├── Modifiers:
  │   ├── Attribute = RPGAttributeSet.MoveSpeed    (Multiplicitive, -x%, 减速)
  │   └── Attribute = RPGAttributeSet.AttackPower  (Multiplicitive, -y%, 降攻)
  └── GameplayTags:
      ├── GrantedTags: State.Debuff.Talisman.Snare  (定身/减速)
      └── AssetTags:   SkillType.Talisman.Control

类型 E召唤符Infinite Duration GameplayEffect

召唤符 = UGameplayEffect (DurationPolicy = Infinite)
  ├── 触发 GameplayCue → 生成召唤物 Actor
  ├── Granted Abilities: 召唤物专属技能(如傀儡自动攻击)
  └── Tags: State.Buff.Talisman.Summon

4.3 符箓消耗机制

符箓作为一种可消耗物品而非技能冷却资源:

// FTalismanItemData — 符箓道具数据结构
USTRUCT(BlueprintType)
struct FTalismanItemData
{
    GENERATED_BODY()

    // 符箓等级(对应道艺等级 Lv.1~5
    UPROPERTY(EditAnywhere, BlueprintReadWrite)
    int32 TalismanLevel = 1;

    // 对应的 GameplayEffect Class
    UPROPERTY(EditAnywhere, BlueprintReadWrite)
    TSubclassOf<UGameplayEffect> EffectClass;

    // 符箓所属大道属性(决定伤害/效果类型标签)
    UPROPERTY(EditAnywhere, BlueprintReadWrite)
    ERPGElementType DaoElement = ERPGElementType::SRT_Fire;

    // 使用符箓 → ApplyGameplayEffectToTarget/Self → 从背包移除 1 张 → 触发 OnTalismanUsed
};

关键设计差异:符箓不是通过 GAS Ability 释放,而是通过物品系统 Apply Effect——这确保了"不消耗灵力"的设计意图,因为 UGameplayEffectCost 策略可以为空。

4.4 符修专属 GameplayTag 体系

SkillType.Talisman.Attack      // 攻击符
SkillType.Talisman.Defense     // 防御符
SkillType.Talisman.Escape      // 遁术符
SkillType.Talisman.Control     // 控制符
SkillType.Talisman.Summon      // 召唤符

Effect.Damage.Talisman         // 符箓伤害来源标记
State.Buff.Talisman.Defense    // 符箓防御 Buff
State.Buff.Talisman.Escape     // 符箓遁术 Buff (MoveSpeed/Dodge)
State.Debuff.Talisman.Snare    // 符箓减速 Debuff
State.Buff.Talisman.Summon     // 符箓召唤 Buff

DaoElement.Fire.Talisman       // 火系符箓
DaoElement.Water.Talisman      // 水系符箓
// ... 按大道属性细分

Profession.Talisman.Specialist // 符修身份标签(挂载到 RPGFlags

4.5 属性映射汇总

符修机制 GAS 组件 涉及属性
攻击符 Instant GE + URPGDamageExecution Damage, AttackPowerMin/Max, FatalRate, ElementFire...
防御符 Duration GE Shield, DefensePower, BlockRate
遁术符 Instant GE (位移) + Duration GE MoveSpeed, DodgeRate
控制符 Duration GE (施加目标) MoveSpeed (减益), AttackPower (减益)
召唤符 Infinite GE + GameplayCue — (生成 Actor)
符纸消耗 物品系统 URPGItemDataAsset — (从背包移除)
制符加成 CraftingSkillData + Modifier 产出数量 ×1.2(流派加成)
符修身份 RPGFlags GameplayTag Profession.Talisman.Specialist

核心洞察:符修的 GAS 映射极简——不需要自定义 ExecutionCalculation,不需要新建 AttributeSet,不需要修改 SDHGameplayAbility。它完全依赖现有的 UGameplayEffect + GameplayTag + 物品系统三层即可实现,是十个修仙流派中与现有 GAS 架构耦合度最低的一个。


附录:项目关键文件索引

架构文档

文件 说明
.trae/documents/02_程序架构/spec.md 总体架构(表现层/游戏逻辑/核心框架/引擎)
.trae/documents/02_程序架构/spec_modules.md 模块详细规格
.trae/specs/LivingWorldSystem/spec.md LivingWorld 系统完整规格

NPC 系统

文件 说明
.trae/documents/01_策划设计/NPC系统与势力/NPC系统设计.md NPC 模拟系统完整设计
Plugins/RPGGameCore/Source/LivingWorldSystem/Public/LWSNpcTypes.h NPC 数据结构FLWSNpcData
Plugins/RPGGameCore/Source/LivingWorldSystem/Public/LWSNpcPersonalityTypes.h 性格/目标/秘密/Need/Action 定义
Plugins/RPGGameCore/Source/LivingWorldSystem/Public/LWSNpcSimulationSubsystem.h 模拟主循环
Plugins/RPGGameCore/Source/LivingWorldSystem/Public/LWSNpcDecisionSystem.h 决策系统Utility AI
Plugins/RPGGameCore/Source/LivingWorldSystem/Public/LWSNpcRelationSubsystem.h 关系网络

GAS / 属性系统

文件 说明
Plugins/RPGGameCore/Source/RPGGameplayAbility/Public/Character/Attribute/RPGAttributeSet.h 单一属性容器5子集
Plugins/RPGGameCore/Source/RPGGameplayAbility/Public/Character/Attribute/RPGAttributeData.h ERPGPhase 境界枚举、灵根
Plugins/RPGGameCore/Source/RPGGameplayAbility/Public/Config/RPGDamageExecution.h GAS 伤害结算
Plugins/RPGGameCore/Source/RPGGameplayAbility/Public/Abilities/SDHGameplayAbility.h 技能基类

ActionPose / 技能系统

文件 说明
Plugins/RPGGameCore/Source/RPGGameplayAbility/Public/RPGTypes.h ELM_ActionPose 枚举、FLMActionPose
Plugins/RPGGameCore/Source/RPGGameplayAbility/Public/System/SystemData.h FRPGSkilllActionPoseTree
Plugins/RPGGameCore/Source/RPGGameplayAbility/Public/LogicStateMachine/SDHSkillStateMachine.h 技能状态机

修仙设计文档

文件 说明
.trae/documents/01_策划设计/修仙基础概念设定/修仙概念体系.md 流派/道艺/大道属性三层体系
.trae/documents/01_策划设计/修仙基础概念设定/修仙流派.md 十大流派详细设计
.trae/documents/01_策划设计/修仙基础概念设定/大道元素属性.md 37种大道属性