docs/SKILL.md
# 技能系统架构设计 当前技能系统已经彻底切换为 **纯代码驱动的 ECS + Observer 架构**。 系统中不再存在以下能力: - `SkillEffect` - `SkillAction` - “静态动作表” - 基于 effect 资产的技能执行分发 所有技能都必须通过 Rust 代码响应 `EventSkillCast`,由 observer 直接编排动作、状态、窗口和冷却。 --- ## 设计目标 `docs/champions` 中的英雄技能包含大量固定动作表无法正确表达的机制: - 分段技能:锐雯 Q、剑魔 Q、鳄鱼 E、刀妹 E - 二段窗口:盲僧 Q/W/E、卡蜜尔 E - 形态/强化态:纳尔、凯隐、鳄鱼、潘森 - 标记与被动联动:剑姬要害、诺手血怒、沃利贝尔 W、塞拉斯偷大 - 条件冷却:命中减冷却、击杀刷新、终段才进主冷却 - 复杂目标逻辑:最近目标、命中英雄才刷新、对特定目标开放二段 这类逻辑如果继续用静态配置表达,只会把复杂性转移到隐蔽角落。 因此现在的原则很直接: - **技能的行为写在代码里** - **技能的状态挂在 ECS
npx skillsauth add mutemoon/moon-lol docsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
当前技能系统已经彻底切换为 纯代码驱动的 ECS + Observer 架构。
系统中不再存在以下能力:
SkillEffectSkillAction所有技能都必须通过 Rust 代码响应 EventSkillCast,由 observer 直接编排动作、状态、窗口和冷却。
docs/champions 中的英雄技能包含大量固定动作表无法正确表达的机制:
这类逻辑如果继续用静态配置表达,只会把复杂性转移到隐蔽角落。
因此现在的原则很直接:
每个技能都对应一个独立实体,通过:
SkillOfSkillsPassiveSkillOf挂到英雄实体上。
技能实体本身承担状态,而不是只做索引占位。
常见状态包括:
统一施法链路如下:
CommandActionAction::Skill 转发为 CommandSkillBeforeStart 与 CommandSkillStarton_skill_cast 完成通用校验EventSkillCast统一入口负责的只有这些通用职责:
具体技能行为不再放在这个入口里。
技能施法通过校验后,会触发:
EventSkillCast {
entity,
skill_entity,
index,
point,
}
之后必须由 observer 处理。
observer 可以直接:
这让复杂技能的逻辑和状态推进保持在一处,可读、可测、可调试。
SkillSkill 现在只表达代码驱动技能所需的最小元数据:
spelllevelslotcooldown_mode字段语义:
spell:数值来源level:技能等级slot:Q/W/E/R/Passive/Customcooldown_mode:默认施法后冷却,或手动冷却不再包含:
SkillCooldownMode当前有两种冷却方式:
AfterCastManualAfterCast 适用于:
Manual 适用于:
SkillRecastWindow这是当前最基础的通用技能状态组件。
包含:
stagemax_stagetimer用于表示:
任何二段/三段技能都应优先考虑基于这个组件建模。
SkillCastLog系统会记录每次施法尝试,供测试和调试使用。
日志内容包括:
当前失败原因覆盖:
这保证了技能行为可以在 headless 环境里直接断言,而不是只能看视觉结果。
虽然不再有 SkillAction,但技能行为仍然是由一组标准化原子动作拼装出来的。
当前常用原子包括:
play_skill_animation(...)spawn_skill_particle(...)despawn_skill_particle(...)skill_dash(...)skill_damage(...)reset_skill_attack(...)这些函数只是对已有 action/event 的代码封装,不是新的数据层。
它们的作用是:
适合:
实现方式:
Skill::new(slot, spell_key)EventSkillCast 中按 slot 匹配适合:
实现方式:
SkillCooldownMode::ManualSkillRecastWindowstage 决定当前段行为被动技能仍然是技能实体,但通常不走主动施法路径。
它们应通过:
PassiveSkillOf与主动技能和角色行为联动。
锐雯 Q 是当前纯代码驱动技能的样板。
实现结构:
QManualEventSkillCastSkillRecastWindowstage 分别执行 Q1/Q2/Q3这个实现直接对应文档里的真实语义:
根据 docs/champions,后续技能可以按以下方式建模:
优先使用:
SkillRecastWindowManual 冷却EventSkillCast observer代表:
优先使用:
代表:
优先使用:
代表:
优先使用:
代表:
现在的技能系统是彻底的代码驱动版本:
这套设计才能覆盖 docs/champions 中那些真正复杂的英雄机制,并在 lol_core::skill::tests / lol_champions::<hero>::tests 中保持足够高的可测试性。
development
Maintainer-only workflow for handling GitHub Secret Scanning alerts on OpenClaw. Use when Codex needs to triage, redact, clean up, and resolve secret leakage found in issue comments, issue bodies, PR comments, or other GitHub content.
development
Maintainer workflow for OpenClaw releases, prereleases, changelog release notes, and publish validation. Use when Codex needs to prepare or verify stable or beta release steps, align version naming, assemble release notes, check release auth requirements, or validate publish-time commands and artifacts.
development
Run, watch, debug, and extend OpenClaw QA testing with qa-lab and qa-channel. Use when Codex needs to execute the repo-backed QA suite, inspect live QA artifacts, debug failing scenarios, add new QA scenarios, or explain the OpenClaw QA workflow. Prefer the live OpenAI lane with regular openai/gpt-5.4 in fast mode; do not use gpt-5.4-pro or gpt-5.4-mini unless the user explicitly overrides that policy.
development
End-to-end Parallels smoke, upgrade, and rerun workflow for OpenClaw across macOS, Windows, and Linux guests. Use when Codex needs to run, rerun, debug, or interpret VM-based install, onboarding, gateway smoke tests, latest-release-to-main upgrade checks, fresh snapshot retests, or optional Discord roundtrip verification under Parallels.