载入中...
搜索中...
未找到
Effect.h
浏览该文件的文档.
1#pragma once
2
3// 效果系统:数据驱动的 Effect "定义/模板"(类似 GAS 的 GameplayEffect)。
4//
5// 一个 EffectDefinition 描述"施加后会发生什么",本身不含运行时状态;
6// 施加到具体 actor 后由 StatusSystem 产生 StatusInstance(见 StatusTypes.h)。
7//
8// 灵活性/可定制点:
9// - 完全数据驱动:C++ 侧 registerEffect() 或脚本侧 loadFromJson() 均可定义新效果,
10// 无需修改引擎代码;effect id、属性名、tag、op 全部是字符串。
11// - durationPolicy / stackPolicy 同样是字符串,方便未来扩展新策略而不破坏 ABI;
12// 未知 stackPolicy 可走 StatusSystem::registerStackPolicy 注册的自定义策略。
13// - period > 0 的周期效果不会自动改属性,而是产生 tick 事件交给上层处理,
14// 从而可以让周期伤害/治疗完整走 Settlement 结算流水线(见 Settlement.h)。
15// - extra 字段是任意 string→string 自定义数据(图标、VFX、脚本钩子名……),
16// 无需为每个新效果特性修改引擎结构体。
17
18#include <string>
19#include <unordered_map>
20#include <vector>
21
22namespace eve::rpg {
23
26 std::string attribute;
27 std::string op = "add";
28 double value = 0.0;
29 int priority = 0;
30};
31
33 std::string id;
34
36 std::string durationPolicy = "instant";
37 float duration = 0.f;
38
40 float period = 0.f;
41
46 std::string stackPolicy = "none";
47 int maxStacks = 1;
48
50 std::vector<EffectModifierSpec> modifiers;
51
52 std::vector<std::string> tags;
53
55 std::unordered_map<std::string, std::string> extra;
56
57 bool hasTag(const std::string &tag) const;
58 std::string getExtra(const std::string &key, const std::string &fallback = {}) const;
59};
60
63public:
64 static void registerEffect(const EffectDefinition &def);
65 static const EffectDefinition *find(const std::string &id);
66 static bool remove(const std::string &id);
67 static void clear();
68 static int count();
69
81 static int loadFromJson(const std::string &json, std::string *error = nullptr);
82
83private:
84 static std::unordered_map<std::string, EffectDefinition> &table();
85};
86
87} // namespace eve::rpg
std::string error
全局效果定义表:进程级单例,供任意模块 / 脚本按 id 引用。
Definition Effect.h:62
static bool remove(const std::string &id)
Definition Effect.cpp:36
static void clear()
Definition Effect.cpp:38
static int loadFromJson(const std::string &json, std::string *error=nullptr)
从 JSON 数组批量注册效果定义,返回成功注册的数量。 每个元素形如: { "id": "poison", "durationPolicy": "duration",...
Definition Effect.cpp:71
static const EffectDefinition * find(const std::string &id)
Definition Effect.cpp:30
static void registerEffect(const EffectDefinition &def)
Definition Effect.cpp:25
RPG 模块入口:属性 / 效果 / 状态 / 技能 / 结算五套系统的脚本绑定与帧调度点。
float duration
durationPolicy == "duration" 时使用(秒)
Definition Effect.h:37
float period
> 0 时为周期效果:每隔 period 秒产生一次 StatusTickEvent。
Definition Effect.h:40
std::string getExtra(const std::string &key, const std::string &fallback={}) const
Definition Effect.cpp:15
std::string durationPolicy
"instant" | "duration" | "infinite"(未知值按 "instant" 处理)。
Definition Effect.h:36
std::unordered_map< std::string, std::string > extra
游戏自定义附加数据(图标路径、特效名、脚本钩子……)。
Definition Effect.h:55
std::vector< std::string > tags
Definition Effect.h:52
bool hasTag(const std::string &tag) const
Definition Effect.cpp:11
std::string stackPolicy
"none" | "refresh" | "extend" | "stack",或 StatusSystem::registerStackPolicy 注册的名字。 未知且未注册时按 "none" 处理...
Definition Effect.h:46
std::vector< EffectModifierSpec > modifiers
durationPolicy 为 duration/infinite 且 period<=0 时,apply 会直接写入这些修改器。
Definition Effect.h:50
效果里携带的一条属性修改规格(应用到 AttributeSystem::addModifier)。
Definition Effect.h:25