mcpField
G
godot-rpg-stats

godot-rpg-stats

github.com/thedivergentai开发907438 次安装2 周前更新
代码仓库

关于 godot-rpg-stats

godot-rpg-stats 是面向 Godot RPG 开发者的属性、成长、状态效果和战斗计算技能。它区分设计用 Resource 模板与运行时响应式属性,并集中管理修正叠加和伤害公式。

主要功能

  1. 01基于 Resource 的基础属性与成长
  2. 02响应式属性重新计算
  3. 03类型化增益与减益数据
  4. 04修正叠加与持续时间刷新
  5. 05集中式伤害公式
  6. 06持久化与信号驱动的界面

适用场景

  1. 01定义角色属性和升级曲线
  2. 02应用或移除装备及状态修正
  3. 03根据共享属性计算战斗伤害
  4. 04保存成长数据并更新属性标签

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/thedivergentai/game-dev-agentic-skills --skill godot-rpg-stats

安装后在 Claude Code 中输入/godot-rpg-stats确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
elite-stat-patterns.md
migration-notes.md
scripts/
base_stats_resource.gd
damage_formula_handler.gd
derived_stat_resource.gd
dynamic_stat_label_sync.gd
equipment_tooltip_helper.gd
exp_progression_resource.gd
level_up_system.gd
modifier_stack_stats.gd
persistent_character_stats.gd
resource_stat_inheritance.gd
rpg_stat_resource.gd
stat_modifier_stacking.gd
stat_resource.gd
stats_component_reactive.gd
status_effect_data.gd

详细介绍

可用脚本

必须根据场景阅读后再实现:

base_stats_resource.gd

用于存储基础属性(Str、Dex、Int)和派生缩放规则的核心数据容器。

status_effect_data.gd

使用 StatusEffectData.Type { ADDITIVE, MULTIPLICATIVE, OVERRIDE } 定义并序列化增益/减益。

stats_component_reactive.gd

负责通过活动修饰符堆叠进行 JIT(即时)属性计算的协调器。

exp_progression_resource.gd

使用成长因子和基础 XP 定义由数据驱动的升级曲线。

dynamic_stat_label_sync.gd

响应式 UI 钩子,无需轮询即可让 Label 与属性变化同步。

damage_formula_handler.gd

用于复杂战斗计算和伤害计算的集中式 RefCounted 工具。

stat_modifier_stacking.gd

用于处理唯一与可堆叠增益以及刷新持续时间的逻辑。

resource_stat_inheritance.gd

用于通过专用属性(元素抗性)扩展基础属性的模式。

persistent_character_stats.gd

用于将角色成长序列化到 .tres 文件。

level_up_system.gd

用于发放经验并触发升级奖励的逻辑。

rpg_stat_resource.gd

带上限的基础属性 Resource,包含 setter 限制和 stat_changed 信号。

derived_stat_resource.gd

当基础属性依赖项发生变化时重新计算的派生属性。

equipment_tooltip_helper.gd

BBCode 装备对比工具提示(_make_custom_tooltip)。

RPG 属性中绝对不要做的事

  • 绝不要用整数表示百分比 — 始终使用 float(0.0–1.0 或 0.0–100.0),避免截断。
  • 绝不要在不发出信号的情况下修改 current_health — 不广播会导致 UI 不同步。
  • 绝不要只依赖加法修饰符 — 长期成长应使用乘法或混合缩放。
  • 绝不要添加没有唯一 ID 或 Key 的修饰符 — 移除特定效果时需要它们。
  • 绝不要使用没有成长上限的指数 XP 公式 — 无上限的 pow() 会溢出或导致等级卡死。
  • 绝不要忘记限制派生值 — 负活力不能导致最大 HP 为负值(maxi(val, 1))。
  • 绝不要在 _process() 中执行大量属性重算 — 仅在修饰符/基础值变化时重新计算(响应式)。
  • 绝不要在逻辑中硬编码属性名称 — 使用 StringNames 或枚举。
  • 绝不要将临时运行时增益存储在永久 Save Resource 中 — 序列化前移除短时长修饰符。
  • 绝不要直接在 Character 脚本中计算伤害 — 集中到 damage_formula_handler.gd 中。
  • 绝不要在示例中臆造仅基于 Dictionary 的修饰符 API — 与 StatusEffectData.Type 和堆叠脚本保持一致。

决策树

层级职责脚本
资源模板由设计师编写的基础属性、曲线和继承base_stats_resource.gd、exp_progression_resource.gd、resource_stat_inheritance.gd
运行时 StatsComponent复制/实例化模板、应用/移除修饰符、发出信号、即时计算派生属性必须使用 stats_component_reactive.gd + stat_modifier_stacking.gd
StatusEffectData类型化增益条目(ADDITIVE / MULTIPLICATIVE / OVERRIDE)status_effect_data.gd
DamageFormula(RefCounted)Player/NPC 共用的纯战斗计算必须使用 damage_formula_handler.gd
持久化保存成长数据;先清除运行时增益persistent_character_stats.gd
UI 同步标签监听信号——不轮询dynamic_stat_label_sync.gd

不要粘贴入门级 class_name Stats / Dictionary 装备教程——请转至上述脚本。


API 对齐(StatusEffectData)

# Author buffs as Resources — not ad-hoc Dictionary modifiers
var haste := StatusEffectData.new()
haste.name = "Haste"
haste.type = StatusEffectData.Type.MULTIPLICATIVE
haste.attribute = "speed"
haste.value = 1.25
haste.duration = 8.0

var flat_str := StatusEffectData.new()
flat_str.type = StatusEffectData.Type.ADDITIVE
flat_str.attribute = "strength"
flat_str.value = 5.0

var break_def := StatusEffectData.new()
break_def.type = StatusEffectData.Type.OVERRIDE
break_def.attribute = "defense"
break_def.value = 0.0

堆叠 / 刷新 / 唯一与可堆叠行为:必须使用 stat_modifier_stacking.gd。通过 stats_component_reactive.gd 应用,确保派生属性在每次变更时只重新计算一次。


高级提醒(有脚本支持)

  1. 上限 — rpg_stat_resource.gd;在 setter 中进行钳制;绝不允许属性溢出。
  2. 依赖图 — derived_stat_resource.gd;基础属性变更时,派生属性通过信号重新计算——绝不使用 _process。
  3. 装备 — 装备/卸下时通过堆叠 API 注册/移除修饰符 ID;通过 equipment_tooltip_helper.gd 显示工具提示。

深入了解(按需加载)

装备钩子、伤害公式、技能门槛、高级上限/派生/工具提示模式——references/elite-stat-patterns.md。

参考

渐进式披露:仅在研究特定 API 时打开官方文档链接;转到相关领域时加载相关技能——不要预加载整个知识网络。

官方文档
  • 资源 — 说明为什么基础属性、曲线和状态效果应放在 Resource 模板中,并按角色复制或实例化。
  • Resource — 了解 duplicate()、resource_local_to_scene 以及共享与独立语义,避免所有敌人共用同一个 HP Resource。
  • GDScript 导出属性 — 使用 @export / @export_group,让设计师无需修改代码即可在 Inspector 中调整属性和成长数值。
  • 使用信号 — 使用 stat_changed / stats_recalculated,让 UI 和派生属性能够响应变化,而无需通过 _process 轮询。
  • 保存游戏 — 序列化成长进度 Resource,并在写入前移除仅供运行时使用的增益效果。
  • Godot 项目中的文件路径 — 了解 user:// 与 res:// 的区别,以便持久化保存角色 .tres。
  • ResourceSaver — 角色升级后将属性 Resource 写入磁盘。
  • ResourceLoader — 恢复成长进度时检查并加载路径。
  • RefCounted — 将伤害公式和纯战斗数学逻辑与场景树分离。
  • 随机数生成 — 使用带种子的暴击/浮动值抽取,让平衡性测试可重复。
  • Label — 将文本绑定到由信号驱动的属性刷新,以同步 HUD。
  • SceneTree — 使用 create_timer 定时让增益效果过期,无需为每个效果创建 Node。
相关技能
前置条件
补充技能
下游/使用方
主技能
  • godot-master — 用于跨技能发现的库路由器和镜像模块入口。

评论

支持 Markdown