diff --git a/CLAUDE.md b/CLAUDE.md index 5b2247c8..e20e4409 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -98,7 +98,7 @@ wow_process.txt 目标游戏进程名列表;构建时复制,运行期间每 - **DynamicSpells**:每项占 30 热键槽位 - **StaticSpells / SpecialSpells**:顺序数组条目(`ArrayEntry`:text + 可选行尾注释);空字符串保留槽位 -保存后 [Infrastructure/FuyutsuiKeymapConverter.cs](Infrastructure/FuyutsuiKeymapConverter.cs)`.UpdateFromClassMacros` 将 Lua 宏表按 dynamic(每项 30 槽)→ static → special 顺序转换为 `keymap/*.json`,把宏槽位映射到热键池(先 7 修饰符 × 39 键 = 273,再追加 7 × 11 个导航/减号/方向键 = 350 组合/职业;不含 F4)。`DeriveSpellName` 解析 WoW 宏文本提取技能名。 +保存后 [Infrastructure/FuyutsuiKeymapConverter.cs](Infrastructure/FuyutsuiKeymapConverter.cs)`.UpdateFromClassMacros` 将 Lua 宏表按 dynamic(每项 30 槽)→ static → special 顺序转换为 `keymap/*.json`,把宏槽位映射到热键池(7 修饰符 × 50 键 = 350 组合/职业;不含 F4)。`DeriveSpellName` 解析 WoW 宏文本提取技能名。 ### UI 编辑器 diff --git a/Fuyutsui/core/macro.lua b/Fuyutsui/core/macro.lua index 4ba70aca..3e59054a 100644 --- a/Fuyutsui/core/macro.lua +++ b/Fuyutsui/core/macro.lua @@ -15,12 +15,7 @@ local keys = { "NUMPADDECIMAL", "NUMPADPLUS", "NUMPADMINUS", "NUMPADMULTIPLY", "NUMPADDIVIDE", "F1", "F2", "F3", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", ",", ".", "/", ";", "'", "[", "]", "\\", - "7", "8", "9", "0", "=" -} - --- 接在原 273 槽之后,避免把新主键插入 keys 导致后续修饰组错位。 --- 不含 F4(ALT-F4 关客户端)、反引号、NUMPADENTER。 -local extraKeys = { + "7", "8", "9", "0", "=", "-", "INSERT", "DELETE", "HOME", "END", "PAGEUP", "PAGEDOWN", "UP", "DOWN", "LEFT", "RIGHT" } @@ -33,12 +28,6 @@ do i = i + 1 end end - for _, m in ipairs(modifiers) do - for _, k in ipairs(extraKeys) do - macroKind[i] = m .. "-" .. k - i = i + 1 - end - end end diff --git a/Infrastructure/FuyutsuiKeymapConverter.cs b/Infrastructure/FuyutsuiKeymapConverter.cs index ee31a46e..7d1a25d6 100644 --- a/Infrastructure/FuyutsuiKeymapConverter.cs +++ b/Infrastructure/FuyutsuiKeymapConverter.cs @@ -32,19 +32,14 @@ internal static partial class FuyutsuiKeymapConverter "NUMPADDECIMAL", "NUMPADPLUS", "NUMPADMINUS", "NUMPADMULTIPLY", "NUMPADDIVIDE", "F1", "F2", "F3", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", ",", ".", "/", ";", "'", "[", "]", "\\", - "7", "8", "9", "0", "=" - ]; - - // 接在原 273 槽之后;不含 F4、反引号、NUMPADENTER。 - private static readonly string[] ExtraKeys = - [ + "7", "8", "9", "0", "=", "-", "INSERT", "DELETE", "HOME", "END", "PAGEUP", "PAGEDOWN", "UP", "DOWN", "LEFT", "RIGHT" ]; private static readonly string[] MacroKind = BuildMacroKind(); - internal static int MacroSlotCapacity => Modifiers.Length * (Keys.Length + ExtraKeys.Length); + internal static int MacroSlotCapacity => Modifiers.Length * Keys.Length; private static readonly Dictionary ClassFileToId = new(StringComparer.OrdinalIgnoreCase) { @@ -654,14 +649,6 @@ internal static partial class FuyutsuiKeymapConverter } } - foreach (var modifier in Modifiers) - { - foreach (var key in ExtraKeys) - { - list[i++] = $"{modifier}-{key}"; - } - } - return list; } diff --git a/Obsidian/20-Fuyutsui/09-Fuyutsui-动作条键位扫描.md b/Obsidian/20-Fuyutsui/09-Fuyutsui-动作条键位扫描.md index de1d7ec0..73fd7e08 100644 --- a/Obsidian/20-Fuyutsui/09-Fuyutsui-动作条键位扫描.md +++ b/Obsidian/20-Fuyutsui/09-Fuyutsui-动作条键位扫描.md @@ -43,7 +43,7 @@ verified_at: 2026-08-09 ## AI 快速摘要 -> `ReadKeybindings()` 延迟 0.5 秒扫描动作槽 1..180,把可识别的 macro/spell 记录为 `Fuyutsui.keybindings[spellID] = {key, slot, keycode, icon, name}`。这是游戏内诊断缓存;Shigure 的实际发送映射来自 `ClassMacros` 转换出的 keymap,而不是读取该 Lua 表。插件自己的安全宏按钮先按 7 种修饰键×39 个基础键生成 273 槽,再追加 7×11 个导航/减号/方向键,共 350 个顺序槽。 +> `ReadKeybindings()` 延迟 0.5 秒扫描动作槽 1..180,把可识别的 macro/spell 记录为 `Fuyutsui.keybindings[spellID] = {key, slot, keycode, icon, name}`。这是游戏内诊断缓存;Shigure 的实际发送映射来自 `ClassMacros` 转换出的 keymap,而不是读取该 Lua 表。插件自己的安全宏按钮使用 7 种修饰键×50 个基础键,共 350 个顺序槽。 ## 范围与非范围 @@ -93,12 +93,11 @@ OnEnable / UPDATE_BINDINGS / SPELLS_CHANGED / ACTIONBAR_*GRID ## 安全宏键池 -`core/macro.lua` 分两段生成固定键池: +`core/macro.lua` 生成固定键池: - 修饰键顺序:`CTRL`、`ALT`、`SHIFT`、`ALT-CTRL`、`ALT-SHIFT`、`CTRL-SHIFT`、`ALT-CTRL-SHIFT`。 -- 第一段基础键 39 个,包括小键盘、F 键(无 F4)、标点和部分数字键,形成槽 1–273。 -- 第二段在末尾追加 `-`、`INSERT`、`DELETE`、`HOME`、`END`、`PAGEUP`、`PAGEDOWN`、`UP`、`DOWN`、`LEFT`、`RIGHT`,再乘 7 种修饰符,形成槽 274–350。不加反引号、`NUMPADENTER`。 -- 总容量 `273 + 7 × 11 = 350`。 +- 基础键 50 个:小键盘、F 键(无 F4)、标点、部分数字,以及末尾的 `-`、`INSERT`、`DELETE`、`HOME`、`END`、`PAGEUP`、`PAGEDOWN`、`UP`、`DOWN`、`LEFT`、`RIGHT`。不加反引号、`NUMPADENTER`。 +- 总容量 `7 × 50 = 350`。 - 第 `i` 槽创建名为 `s{i}` 的 `SecureActionButtonTemplate`,通过 `SetOverrideBindingClick()` 绑定对应按键。 宏体解析顺序:先查 `Fuyutsui.MacroBodies` 的命名宏体;字符串以 `/` 开头则原样使用;否则包装为 `/cast <字符串>`。 @@ -134,7 +133,7 @@ OnEnable / UPDATE_BINDINGS / SPELLS_CHANGED / ACTIONBAR_*GRID ## 修改影响 -- 修改 `modifiers`、`keys`、`extraKeys` 或三段展开顺序时,必须同步 [[40-跨项目/03-Shigure-ClassMacros到keymap与按键契约]] 与 Shigure 转换器。 +- 修改 `modifiers`、`keys` 或三段展开顺序时,必须同步 [[40-跨项目/03-Shigure-ClassMacros到keymap与按键契约]] 与 Shigure 转换器。 - 修改 `ClassMacros` 后使用 Shigure 的配置/宏同步流程,见 [[30-Shigure/09-Shigure-Fuyutsui配置宏编辑与同步]]。 - 修复动作条宏识别时应按 WoW 当前 API 先解析宏信息/宏体或宏所示技能,再调用 Spell API。 - 若要让游戏内缓存成为外部契约,需新增明确序列化与版本字段;当前没有这条链路。 diff --git a/Obsidian/30-Shigure/09-Shigure-Fuyutsui配置宏编辑与同步.md b/Obsidian/30-Shigure/09-Shigure-Fuyutsui配置宏编辑与同步.md index aabadcdc..50628f46 100644 --- a/Obsidian/30-Shigure/09-Shigure-Fuyutsui配置宏编辑与同步.md +++ b/Obsidian/30-Shigure/09-Shigure-Fuyutsui配置宏编辑与同步.md @@ -117,7 +117,7 @@ verified_at: 2026-08-10 ## ClassMacros → keymap -- 固定键池先按 7 个修饰组合 × 39 个主键生成 **273** 项(主键序列刻意不含 F4),再在末尾追加 7 × 11 项(`-`、导航六键、四个方向键),共 **350** 项。不含反引号和 `NUMPADENTER`。Lua `macroKind` 与 C# `FuyutsuiKeymapConverter` 必须逐项相同。 +- 固定键池为 7 个修饰组合 × 50 个主键 = **350** 项。主键含原小键盘/F 键/标点/数字,末尾追加 `-`、导航六键和四个方向键;刻意不含 F4、反引号和 `NUMPADENTER`。Lua `macroKind` 与 C# `FuyutsuiKeymapConverter` 必须逐项相同。 - 动态宏项每项预留/消耗 30 个单位位置,然后是静态宏和特殊宏;超过容量会警告并截断。 - 旧 flat 格式或 common+spec 格式都可转换;专精输出是“common + 当前 spec + static + special”的完整映射,以适配运行时不合并顶层的语义。 - party1..4 映射组员槽 2..5;原始 `@player` 动态语义映射组员槽 1;显式中文/player 保留单位 31;raid1..30 映射 1..30。 @@ -167,7 +167,7 @@ verified_at: 2026-08-10 - `Infrastructure/ClassBlocksStore.cs:102-207`:modern 判定、替换保存与 legacy 行为。 - `Infrastructure/ClassMacrosStore.cs:63-354`:宏表加载、直接写回和 canonical 序列化。 - `Infrastructure/FuyutsuiConfigConverter.cs:44-483`:13 职业、步骤顺序、组员与字段规范化。 -- `Infrastructure/FuyutsuiKeymapConverter.cs`:350 键池(前 273 不变)、单位映射、宏/注释解析。 +- `Infrastructure/FuyutsuiKeymapConverter.cs`:350 键池、单位映射、宏/注释解析。 - `UI/MainForm.cs:624-867`:启动部署、串行更新尾、转换、全量/单文件部署、刷新和告警。 - `UI/MainForm.cs:781-958`:运行前等待队列并重启会话。 diff --git a/Obsidian/40-跨项目/03-Shigure-ClassMacros到keymap与按键契约.md b/Obsidian/40-跨项目/03-Shigure-ClassMacros到keymap与按键契约.md index 956e0179..f0865f17 100644 --- a/Obsidian/40-跨项目/03-Shigure-ClassMacros到keymap与按键契约.md +++ b/Obsidian/40-跨项目/03-Shigure-ClassMacros到keymap与按键契约.md @@ -56,7 +56,7 @@ dynamicSpells(每项展开 30 个团队槽) → specialSpells ``` -`dynamicSpells` 支持 `common + [specIndex]`;Fuyutsui 运行时和 Shigure 转换器必须按相同专精解析。宏键池容量由 Fuyutsui 预设组合决定:先 7 组修饰符 × 39 个原主键(273),再追加 7 × 11 个主键(减号、导航六键、四个方向键)共 350 个组合。不含 F4、反引号、NUMPADENTER。新增内容必须先做容量预算,且只能往键池末尾追加,不能插入原 39 键中间。 +`dynamicSpells` 支持 `common + [specIndex]`;Fuyutsui 运行时和 Shigure 转换器必须按相同专精解析。宏键池容量由 Fuyutsui 预设组合决定:7 组修饰符 × 50 个主键共 350 个组合(原 39 键末尾追加减号、导航六键、四个方向键)。不含 F4、反引号、NUMPADENTER。新增主键只能往 `keys` 末尾追加,插入中间会平移后续槽位。 ## 范围 diff --git a/Obsidian/50-参考资料/CLASSMACROS_AI_Reference_zh-CN.md b/Obsidian/50-参考资料/CLASSMACROS_AI_Reference_zh-CN.md index 120ec7e5..53b44355 100644 --- a/Obsidian/50-参考资料/CLASSMACROS_AI_Reference_zh-CN.md +++ b/Obsidian/50-参考资料/CLASSMACROS_AI_Reference_zh-CN.md @@ -102,11 +102,11 @@ macro.lua:CreateMacro(dynamic, static, special) | 修饰键顺序 | 基础键 | |---|---| -| `CTRL` → `ALT` → `SHIFT` → `ALT-CTRL` → `ALT-SHIFT` → `CTRL-SHIFT` → `ALT-CTRL-SHIFT` | **第一段 39 键(槽 1–273)**:小键盘 0–9 / 小数点 / + / − / × / ÷;`F1–F3,F5–F12`(**无 F4**);`, . / ; ' [ ] \`;`7 8 9 0 =`。**第二段 11 键(槽 274–350)**:`-`、`INSERT` `DELETE` `HOME` `END` `PAGEUP` `PAGEDOWN`、`UP` `DOWN` `LEFT` `RIGHT`。不加反引号、`NUMPADENTER`。 | +| `CTRL` → `ALT` → `SHIFT` → `ALT-CTRL` → `ALT-SHIFT` → `CTRL-SHIFT` → `ALT-CTRL-SHIFT` | 小键盘 0–9 / 小数点 / + / − / × / ÷;`F1–F3,F5–F12`(**无 F4**);`, . / ; ' [ ] \`;`7 8 9 0 =`;末尾 `-`、`INSERT` `DELETE` `HOME` `END` `PAGEUP` `PAGEDOWN`、`UP` `DOWN` `LEFT` `RIGHT`。不加反引号、`NUMPADENTER`。 | -- 总槽位数 = `273 + 7 × 11 = 350`。 +- 总槽位数 = `7 × 50 = 350`。 - 按钮名:`s1`、`s2`、…(与 `macroKind` 下标一致)。 -- 当前键池定义直接见 `Fuyutsui/core/macro.lua`(ID 1 = `CTRL-NUMPAD1`,以此类推;新键从槽 274 的 `CTRL--` 起)。 +- 当前键池定义直接见 `Fuyutsui/core/macro.lua`(ID 1 = `CTRL-NUMPAD1`,以此类推)。 **AI 改宏时**:关心的是解析后的 `dynamic` 占用多少槽、以及 static/special 数组下标对应的全局热键;不必手算,除非要核对外部程序按键映射。