From 579bc3cbd7fcec5d143ae9c926f598cfe5bc648f Mon Sep 17 00:00:00 2001 From: waynebian01 Date: Wed, 2 Sep 2026 21:29:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E2=80=9C=E7=89=B9=E6=AE=8A?= =?UTF-8?q?=E2=80=9D=E7=8A=B6=E6=80=81=E5=88=86=E7=B1=BB=EF=BC=8C=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E7=9B=B8=E5=85=B3=E7=8A=B6=E6=80=81=E5=9D=97=E9=80=BB?= =?UTF-8?q?=E8=BE=91=EF=BC=8C=E4=BC=98=E5=8C=96=E7=8A=B6=E6=80=81=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E5=92=8C=E6=9B=B4=E6=96=B0=E5=8A=9F=E8=83=BD=E3=80=82?= =?UTF-8?q?=E5=90=84=E8=81=8C=E4=B8=9A=E7=B1=BB=E4=B8=AD=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E7=89=B9=E6=AE=8A=E7=8A=B6=E6=80=81=E6=94=AF=E6=8C=81=EF=BC=8C?= =?UTF-8?q?=E7=A1=AE=E4=BF=9D=E7=8A=B6=E6=80=81=E7=AE=A1=E7=90=86=E6=9B=B4?= =?UTF-8?q?=E5=8A=A0=E7=81=B5=E6=B4=BB=E5=92=8C=E5=87=86=E7=A1=AE=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Fuyutsui/class/DeathKnight.lua | 7 ++-- Fuyutsui/class/DemonHunter.lua | 3 +- Fuyutsui/class/Druid.lua | 13 +++++--- Fuyutsui/class/Monk.lua | 5 +-- Fuyutsui/class/Paladin.lua | 8 +++-- Fuyutsui/class/Priest.lua | 3 +- Fuyutsui/class/Warrior.lua | 2 ++ Fuyutsui/core/stateblocks.lua | 28 +++++++++------- Fuyutsui/main.lua | 7 ++-- Fuyutsui/unit/player.lua | 34 ++++++++++---------- Infrastructure/ClassBlocksStore.cs | 39 ++++++++++++++++++++++- Infrastructure/ClassStateCatalog.cs | 9 +++++- Infrastructure/FuyutsuiConfigConverter.cs | 1 + Infrastructure/ModuleDependencyService.cs | 6 +++- UI/ClassConfigEditorControl.cs | 3 +- UI/StatusForm.cs | 26 +++++++++------ 16 files changed, 137 insertions(+), 57 deletions(-) diff --git a/Fuyutsui/class/DeathKnight.lua b/Fuyutsui/class/DeathKnight.lua index 55270fdf..8e367427 100644 --- a/Fuyutsui/class/DeathKnight.lua +++ b/Fuyutsui/class/DeathKnight.lua @@ -26,9 +26,11 @@ Fuyutsui.ClassBlocks = { "敌人数量", "敌人数-无仇恨", "敌人数-有仇恨", - "符文", "一键辅助", "施法技能", + }, + ["特殊"] = { + "符文", "吸血鬼打击", "沸点", }, @@ -240,9 +242,10 @@ Fuyutsui.ClassBlocks = { "首领战", "难度", "敌人数量", + }, + ["特殊"] = { "天启骑士数量", "吸血鬼打击", - }, ["能量"] = { "符文", diff --git a/Fuyutsui/class/DemonHunter.lua b/Fuyutsui/class/DemonHunter.lua index 52514d40..6b005f95 100644 --- a/Fuyutsui/class/DemonHunter.lua +++ b/Fuyutsui/class/DemonHunter.lua @@ -103,8 +103,9 @@ Fuyutsui.ClassBlocks = { "首领战", "难度", "敌人数量", + }, + ["特殊"] = { "收割者战刃", - }, ["能量"] = { "恶魔之怒", diff --git a/Fuyutsui/class/Druid.lua b/Fuyutsui/class/Druid.lua index 300403b9..b31fb722 100644 --- a/Fuyutsui/class/Druid.lua +++ b/Fuyutsui/class/Druid.lua @@ -25,8 +25,9 @@ Fuyutsui.ClassBlocks = { "首领战", "难度", "敌人数量", + }, + ["特殊"] = { "姿态", - }, ["能量"] = { "能量值", @@ -94,8 +95,9 @@ Fuyutsui.ClassBlocks = { "首领战", "难度", "敌人数量", + }, + ["特殊"] = { "姿态", - }, ["能量"] = { "能量值", @@ -160,8 +162,9 @@ Fuyutsui.ClassBlocks = { "首领战", "难度", "敌人数量", + }, + ["特殊"] = { "姿态", - }, ["能量"] = { "怒气值", @@ -249,9 +252,11 @@ Fuyutsui.ClassBlocks = { "队伍人数", "首领战", "难度", - "姿态", "施法技能", }, + ["特殊"] = { + "姿态", + }, ["能量"] = { "法力值", "连击点", diff --git a/Fuyutsui/class/Monk.lua b/Fuyutsui/class/Monk.lua index 4df0069e..752cd36f 100644 --- a/Fuyutsui/class/Monk.lua +++ b/Fuyutsui/class/Monk.lua @@ -24,9 +24,10 @@ Fuyutsui.ClassBlocks = { "队伍人数", "首领战", "难度", - "酒池", "敌人数量", - + }, + ["特殊"] = { + "酒池", }, ["能量"] = { "能量值", diff --git a/Fuyutsui/class/Paladin.lua b/Fuyutsui/class/Paladin.lua index 27e6b41d..401e13aa 100644 --- a/Fuyutsui/class/Paladin.lua +++ b/Fuyutsui/class/Paladin.lua @@ -27,9 +27,10 @@ Fuyutsui.ClassBlocks = { "难度", "施法技能", "施法目标", + }, + ["特殊"] = { "神圣军备", "自律", - }, ["能量"] = { "法力值", @@ -149,8 +150,9 @@ Fuyutsui.ClassBlocks = { "队伍人数", "首领战", "难度", + }, + ["特殊"] = { "自律", - }, ["能量"] = { "法力值", @@ -262,6 +264,8 @@ Fuyutsui.ClassBlocks = { "首领战", "难度", "敌人数量", + }, + ["特殊"] = { "自律", }, ["能量"] = { diff --git a/Fuyutsui/class/Priest.lua b/Fuyutsui/class/Priest.lua index 5773b7e2..9902f3d4 100644 --- a/Fuyutsui/class/Priest.lua +++ b/Fuyutsui/class/Priest.lua @@ -265,8 +265,9 @@ Fuyutsui.ClassBlocks = { "难度", "敌人数量", "施法技能", + }, + ["特殊"] = { "姿态", - }, ["能量"] = { "狂乱值", diff --git a/Fuyutsui/class/Warrior.lua b/Fuyutsui/class/Warrior.lua index eaf28664..5fc2d3b5 100644 --- a/Fuyutsui/class/Warrior.lua +++ b/Fuyutsui/class/Warrior.lua @@ -22,6 +22,8 @@ Fuyutsui.ClassBlocks = { "首领战", "难度", "敌人数量", + }, + ["特殊"] = { "英勇打击", }, ["能量"] = { diff --git a/Fuyutsui/core/stateblocks.lua b/Fuyutsui/core/stateblocks.lua index d37ce9a4..3fb2e8b6 100644 --- a/Fuyutsui/core/stateblocks.lua +++ b/Fuyutsui/core/stateblocks.lua @@ -83,6 +83,7 @@ end -- blocks.state 键:下列分类用名称本身;单位分类用 分类..名称 local bareKeyCategories = { ["状态"] = true, + ["特殊"] = true, ["能量"] = true, ["配置开关"] = true, } @@ -130,17 +131,7 @@ local stateBlockGetters = { ["敌人数-有仇恨"] = function() return state.threatEnemyCount or 0 end, ["上个技能"] = function() return state.PreviousSkill or 0 end, ["公共冷却"] = function(self) return GetSpellCooldownPixel(61304, self.curveMs) end, - -- 职业特殊状态 - ["酒池"] = function() return state.staggerPercent or 0 end, - ["神圣军备"] = function() return state.holyArmaments or 0 end, - ["吸血鬼打击"] = function() return state.VampiricStrike or 0 end, - ["收割者战刃"] = function() return state.reaverGlaive or 0 end, - ["英勇打击"] = function() return state.heroicStrike or 0 end, - ["符文"] = function() return GetRunePixel() end, - ["姿态"] = function() return state.shapeshiftFormID or 0 end, - ["天启骑士数量"] = function() return state.knightCount or 0 end, - ["自律"] = function() return state.forbearance or 0 end, - ["沸点"] = function() return state.boilingPoint or 0 end, + -- 配置开关 ["爆发开关"] = function(self) return GetConfigPixel(self, "cooldowns") end, ["AOE开关"] = function(self) return GetConfigPixel(self, "aoeMode") end, @@ -204,6 +195,19 @@ local stateBlockGetters = { return 0 end, }, + -- 职业特殊状态 + ["特殊"] = { + ["酒池"] = function() return state.staggerPercent or 0 end, + ["神圣军备"] = function() return state.holyArmaments or 0 end, + ["吸血鬼打击"] = function() return state.VampiricStrike or 0 end, + ["收割者战刃"] = function() return state.reaverGlaive or 0 end, + ["英勇打击"] = function() return state.heroicStrike or 0 end, + ["符文"] = function() return GetRunePixel() end, + ["姿态"] = function() return state.shapeshiftFormID or 0 end, + ["天启骑士数量"] = function() return state.knightCount or 0 end, + ["自律"] = function() return state.forbearance or 0 end, + ["沸点"] = function() return state.boilingPoint or 0 end, + }, ["能量"] = { ["符文"] = function() return GetRunePixel() end, ["增压层数"] = function() return state.chargedComboPoints or 0 end, @@ -320,7 +324,7 @@ function Fuyutsui:UpdateStateBlock(category, name) end end ---- 同一名称可能落在 状态 / 能量 / 配置开关;无对应索引时会直接跳过 +--- 同一名称可能落在 状态 / 特殊 / 能量 / 配置开关;无对应索引时会直接跳过 function Fuyutsui:UpdateBareStateBlock(name, categories) for i = 1, #categories do self:UpdateStateBlock(categories[i], name) diff --git a/Fuyutsui/main.lua b/Fuyutsui/main.lua index 4d76b537..551178cc 100644 --- a/Fuyutsui/main.lua +++ b/Fuyutsui/main.lua @@ -53,19 +53,20 @@ function Fuyutsui:LoadPlayerBlocks(specIndex) local index = 1 - -- states 支持分类表:状态/能量/配置开关/目标/焦点/鼠标/宠物/首领1-5 + -- states 支持分类表:状态/特殊/能量/配置开关/目标/焦点/鼠标/宠物/首领1-5 -- blocks.state 键:基础分类用名称本身;单位分类用 分类..名称(如 目标生命值) if type(t.states) == "table" then local stateCategoryOrder = { - "状态", "能量", "配置开关", "目标", "焦点", "鼠标", "宠物", + "状态", "特殊", "能量", "配置开关", "目标", "焦点", "鼠标", "宠物", "首领1", "首领2", "首领3", "首领4", "首领5", } local bareKeyCategories = { ["状态"] = true, + ["特殊"] = true, ["能量"] = true, ["配置开关"] = true, } - local nested = t.states["状态"] or t.states["能量"] + local nested = t.states["状态"] or t.states["特殊"] or t.states["能量"] or t.states["配置开关"] or t.states["目标"] or t.states["焦点"] or t.states["鼠标"] or t.states["宠物"] or t.states["首领1"] or t.states["首领2"] or t.states["首领3"] diff --git a/Fuyutsui/unit/player.lua b/Fuyutsui/unit/player.lua index e2e95c1e..166b8801 100644 --- a/Fuyutsui/unit/player.lua +++ b/Fuyutsui/unit/player.lua @@ -285,13 +285,13 @@ function Fuyutsui:UpdateRune() end end state.runeCount = total / 255 or 0 - self:UpdateBareStateBlock("符文", { "能量", "状态" }) + self:UpdateBareStateBlock("符文", { "能量", "特殊", "状态" }) end function Fuyutsui:RefreshShapeshiftFormState() local shapeshiftFormID = GetShapeshiftFormID() or 0 state.shapeshiftFormID = shapeshiftFormID / 255 - self:UpdateStateBlock("状态", "姿态") + self:UpdateStateBlock("特殊", "姿态") end function Fuyutsui:RefreshDrinkStatus(spellID) @@ -384,12 +384,12 @@ function Fuyutsui:UpdatePlayerStagger() local maxHealth = UnitHealthMax(unit) if issecretvalue(damage) or issecretvalue(maxHealth) then state.staggerPercent = 0 - self:UpdateStateBlock("状态", "酒池") + self:UpdateStateBlock("特殊", "酒池") return end local staggerPercent = damage / maxHealth * 100 state.staggerPercent = staggerPercent / 255 or 0 - self:UpdateStateBlock("状态", "酒池") + self:UpdateStateBlock("特殊", "酒池") end local holyArmaments = { @@ -404,7 +404,7 @@ function Fuyutsui:UpdateHolyArmaments(spellID) -- 神圣军备 if not overrideSpellID then return end if overrideSpellID == spellId then state.holyArmaments = index / 255 or 0 - self:UpdateStateBlock("状态", "神圣军备") + self:UpdateStateBlock("特殊", "神圣军备") end end end @@ -419,12 +419,12 @@ function Fuyutsui:UpdatePlayerForbearance() -- 25771 自律 local remaining = 30 state.forbearance = remaining / 255 - self:UpdateStateBlock("状态", "自律") + self:UpdateStateBlock("特殊", "自律") forbearanceTimer = C_Timer.NewTicker(1, function() remaining = remaining - 1 state.forbearance = remaining > 0 and (remaining / 255) or 0 - self:UpdateStateBlock("状态", "自律") + self:UpdateStateBlock("特殊", "自律") if remaining <= 0 then forbearanceTimer = nil end @@ -438,10 +438,10 @@ function Fuyutsui:UpdateVampiricStrike(spellID) -- 吸血鬼打击 if overrideSpellID1 == 433895 or overrideSpellID2 == 433895 then state.VampiricStrike = 1 / 255 - self:UpdateStateBlock("状态", "吸血鬼打击") + self:UpdateStateBlock("特殊", "吸血鬼打击") else state.VampiricStrike = 0 - self:UpdateStateBlock("状态", "吸血鬼打击") + self:UpdateStateBlock("特殊", "吸血鬼打击") end end end @@ -458,12 +458,12 @@ function Fuyutsui:UpdateBoilingPoint(spellID) -- 沸点 local remaining = 3 state.boilingPoint = remaining / 255 - self:UpdateStateBlock("状态", "沸点") + self:UpdateStateBlock("特殊", "沸点") boilingPointTimer = C_Timer.NewTicker(1, function() remaining = remaining - 1 state.boilingPoint = remaining > 0 and (remaining / 255) or 0 - self:UpdateStateBlock("状态", "沸点") + self:UpdateStateBlock("特殊", "沸点") if remaining <= 0 then boilingPointTimer = nil end @@ -506,7 +506,7 @@ end function Fuyutsui:RefreshActiveKnightCount() state.knightCount = GetActiveKnightsCount() / 255 - self:UpdateStateBlock("状态", "天启骑士数量") + self:UpdateStateBlock("特殊", "天启骑士数量") end function Fuyutsui:UpdateReaverGlaive(spellID) -- 收割者战刃 @@ -515,10 +515,10 @@ function Fuyutsui:UpdateReaverGlaive(spellID) -- 收割者战刃 if overrideSpellID == 433895 then state.reaverGlaive = 1 / 255 - self:UpdateStateBlock("状态", "收割者战刃") + self:UpdateStateBlock("特殊", "收割者战刃") else state.reaverGlaive = 0 - self:UpdateStateBlock("状态", "收割者战刃") + self:UpdateStateBlock("特殊", "收割者战刃") end end @@ -536,18 +536,18 @@ function Fuyutsui:UpdateHeroicStrike(spellID) -- 英勇打击 if overrideSpellID == 1269383 then local remaining = 15 state.heroicStrike = remaining / 255 - self:UpdateStateBlock("状态", "英勇打击") + self:UpdateStateBlock("特殊", "英勇打击") heroicStrikeTimer = C_Timer.NewTicker(1, function() remaining = remaining - 1 state.heroicStrike = remaining > 0 and (remaining / 255) or 0 - self:UpdateStateBlock("状态", "英勇打击") + self:UpdateStateBlock("特殊", "英勇打击") if remaining <= 0 then heroicStrikeTimer = nil end end, 15) else state.heroicStrike = 0 - self:UpdateStateBlock("状态", "英勇打击") + self:UpdateStateBlock("特殊", "英勇打击") end end diff --git a/Infrastructure/ClassBlocksStore.cs b/Infrastructure/ClassBlocksStore.cs index 56996eb6..80b82da1 100644 --- a/Infrastructure/ClassBlocksStore.cs +++ b/Infrastructure/ClassBlocksStore.cs @@ -17,6 +17,7 @@ internal static class ClassBlocksStore private static readonly string[] StateCategories = [ ClassStateCatalog.CategoryState, + ClassStateCatalog.CategorySpecial, ClassStateCatalog.CategoryResource, ClassStateCatalog.CategoryConfig, ClassStateCatalog.CategoryTarget, @@ -71,6 +72,7 @@ internal static class ClassBlocksStore public Dictionary> CategorizedStates { get; } = new(StringComparer.Ordinal) { [ClassStateCatalog.CategoryState] = new List(), + [ClassStateCatalog.CategorySpecial] = new List(), [ClassStateCatalog.CategoryResource] = new List(), [ClassStateCatalog.CategoryConfig] = new List(), [ClassStateCatalog.CategoryTarget] = new List(), @@ -565,6 +567,8 @@ internal static class ClassBlocksStore } } } + + RelocateSpecialStateFields(result); } else { @@ -785,6 +789,7 @@ internal static class ClassBlocksStore private static void WriteSpec(StringBuilder sb, SpecBlocks spec, string indent) { + RelocateSpecialStateFields(spec); ValidateItemsForSerialization(spec); // states @@ -937,6 +942,37 @@ internal static class ClassBlocksStore } } + internal static void RelocateSpecialStateFields(SpecBlocks spec) + { + if (!spec.NestedStates) + { + return; + } + + if (!spec.CategorizedStates.TryGetValue(ClassStateCatalog.CategoryState, out var stateList) + || !spec.CategorizedStates.TryGetValue(ClassStateCatalog.CategorySpecial, out var specialList)) + { + return; + } + + for (var index = 0; index < stateList.Count;) + { + var name = stateList[index]; + if (!ClassStateCatalog.IsKnown(ClassStateCatalog.CategorySpecial, name) + || ClassStateCatalog.IsKnown(ClassStateCatalog.CategoryState, name)) + { + index++; + continue; + } + + stateList.RemoveAt(index); + if (!specialList.Contains(name, StringComparer.Ordinal)) + { + specialList.Add(name); + } + } + } + private static void ValidateItemsForSerialization(SpecBlocks spec) { if (spec.Items.Count == 0) @@ -952,6 +988,7 @@ internal static class ClassBlocksStore foreach (var category in new[] { ClassStateCatalog.CategoryState, + ClassStateCatalog.CategorySpecial, ClassStateCatalog.CategoryResource, ClassStateCatalog.CategoryConfig }) @@ -983,7 +1020,7 @@ internal static class ClassBlocksStore if (bareNames.Contains(item.Name)) { - throw new InvalidOperationException($"物品名称“{item.Name}”与状态、能量或配置开关字段重名。"); + throw new InvalidOperationException($"物品名称“{item.Name}”与状态、特殊、能量或配置开关字段重名。"); } } } diff --git a/Infrastructure/ClassStateCatalog.cs b/Infrastructure/ClassStateCatalog.cs index 36213612..693bc365 100644 --- a/Infrastructure/ClassStateCatalog.cs +++ b/Infrastructure/ClassStateCatalog.cs @@ -8,6 +8,7 @@ internal static class ClassStateCatalog { public const string CategoryState = "状态"; public const string CategoryPlayerDisplay = "玩家"; + public const string CategorySpecial = "特殊"; public const string CategoryConfig = "配置开关"; public const string CategoryItem = "物品"; public const string CategoryResource = "能量"; @@ -34,6 +35,7 @@ internal static class ClassStateCatalog public static readonly string[] TopCategories = [ CategoryState, + CategorySpecial, CategoryResource, CategoryConfig, CategoryTarget, @@ -56,7 +58,12 @@ internal static class ClassStateCatalog "首领战", "难度", "英雄天赋", "施法目标", "施法技能", "敌人数量", "敌人数-无仇恨", "敌人数-有仇恨", "施法(正计时)", "施法(倒计时)", "引导", "蓄力", "蓄力层数", - "酒池", "符文", "姿态", "神圣军备", "自律", "上个技能", "公共冷却", "英勇打击", "吸血鬼打击", "收割者战刃", "沸点", + "上个技能", "公共冷却", + ]), + (CategorySpecial, + [ + "酒池", "符文", "姿态", "神圣军备", "自律", "天启骑士数量", + "英勇打击", "吸血鬼打击", "收割者战刃", "沸点", ]), (CategoryConfig, [ diff --git a/Infrastructure/FuyutsuiConfigConverter.cs b/Infrastructure/FuyutsuiConfigConverter.cs index 249af961..5b962003 100644 --- a/Infrastructure/FuyutsuiConfigConverter.cs +++ b/Infrastructure/FuyutsuiConfigConverter.cs @@ -29,6 +29,7 @@ internal static class FuyutsuiConfigConverter private static readonly string[] StateCategoryOrder = [ ClassStateCatalog.CategoryState, + ClassStateCatalog.CategorySpecial, ClassStateCatalog.CategoryResource, ClassStateCatalog.CategoryConfig, ClassStateCatalog.CategoryTarget, diff --git a/Infrastructure/ModuleDependencyService.cs b/Infrastructure/ModuleDependencyService.cs index 3e9f3661..4d01c4b1 100644 --- a/Infrastructure/ModuleDependencyService.cs +++ b/Infrastructure/ModuleDependencyService.cs @@ -6,6 +6,7 @@ internal sealed class ModuleDependencyService private static readonly string[] StateCategories = [ ClassStateCatalog.CategoryState, + ClassStateCatalog.CategorySpecial, ClassStateCatalog.CategoryResource, ClassStateCatalog.CategoryConfig, ClassStateCatalog.CategoryTarget, @@ -243,6 +244,7 @@ internal sealed class ModuleDependencyService foreach (var category in new[] { ClassStateCatalog.CategoryState, + ClassStateCatalog.CategorySpecial, ClassStateCatalog.CategoryResource, ClassStateCatalog.CategoryConfig }) @@ -464,6 +466,7 @@ internal sealed class ModuleDependencyService } } + ClassBlocksStore.RelocateSpecialStateFields(local); var reservedNames = new HashSet(StringComparer.Ordinal); if (local.NestedStates) @@ -471,6 +474,7 @@ internal sealed class ModuleDependencyService foreach (var category in new[] { ClassStateCatalog.CategoryState, + ClassStateCatalog.CategorySpecial, ClassStateCatalog.CategoryResource, ClassStateCatalog.CategoryConfig }) @@ -744,7 +748,7 @@ internal sealed class ModuleDependencyService if (reservedNames.Contains(item.Name)) { - counters.Conflicts.Add($"物品名称“{item.Name}”与本地状态、能量或配置开关字段重名,已跳过。"); + counters.Conflicts.Add($"物品名称“{item.Name}”与本地状态、特殊、能量或配置开关字段重名,已跳过。"); continue; } diff --git a/UI/ClassConfigEditorControl.cs b/UI/ClassConfigEditorControl.cs index baff5b64..6446d33b 100644 --- a/UI/ClassConfigEditorControl.cs +++ b/UI/ClassConfigEditorControl.cs @@ -3669,6 +3669,7 @@ public sealed class ClassConfigEditorControl : UserControl foreach (var category in new[] { ClassStateCatalog.CategoryState, + ClassStateCatalog.CategorySpecial, ClassStateCatalog.CategoryResource, ClassStateCatalog.CategoryConfig }) @@ -3714,7 +3715,7 @@ public sealed class ClassConfigEditorControl : UserControl if (bareNames.Contains(item.Name)) { - error = $"专精 {specId} 的物品名称“{item.Name}”与状态、能量或配置开关字段重名。"; + error = $"专精 {specId} 的物品名称“{item.Name}”与状态、特殊、能量或配置开关字段重名。"; return false; } } diff --git a/UI/StatusForm.cs b/UI/StatusForm.cs index b113de88..0712e1ec 100644 --- a/UI/StatusForm.cs +++ b/UI/StatusForm.cs @@ -1370,7 +1370,7 @@ public sealed class StatusForm : Form Dock = DockStyle.Top, BackColor = UiTheme.Surface, ColumnCount = 2, - RowCount = 4, + RowCount = 5, Margin = new Padding(0) }; fields.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50)); @@ -1379,6 +1379,7 @@ public sealed class StatusForm : Form fields.RowStyles.Add(new RowStyle(SizeType.AutoSize)); fields.RowStyles.Add(new RowStyle(SizeType.AutoSize)); fields.RowStyles.Add(new RowStyle(SizeType.AutoSize)); + fields.RowStyles.Add(new RowStyle(SizeType.AutoSize)); fields.Controls.Add(CreateCommonFieldCard( "状态", @@ -1387,9 +1388,16 @@ public sealed class StatusForm : Form "队伍类型", "队伍人数", "首领战", "难度", "英雄天赋", "施法目标", "施法技能", "敌人数量", "敌人数-无仇恨", "敌人数-有仇恨", "施法(正计时)", "施法(倒计时)", "引导", "蓄力", "蓄力层数", - "酒池", "符文", "姿态", "神圣军备", "自律", "上个技能", "公共冷却", "英勇打击", "吸血鬼打击", "收割者战刃", "沸点" + "上个技能", "公共冷却" ], 150), 0, 0); + fields.Controls.Add(CreateCommonFieldCard( + "特殊", + [ + "酒池", "符文", "姿态", "神圣军备", "自律", "天启骑士数量", + "英勇打击", "吸血鬼打击", "收割者战刃", "沸点" + ], + 150), 1, 0); fields.Controls.Add(CreateCommonFieldCard( "能量", [ @@ -1397,31 +1405,31 @@ public sealed class StatusForm : Form "星界能量", "漩涡值", "狂乱值", "恶魔之怒", "痛苦值", "连击点", "神圣能量", "精华能量", "灵魂碎片", "真气", "增压层数" ], - 150), 1, 0); + 150), 0, 1); fields.Controls.Add(CreateCommonFieldCard( "配置开关", ["爆发开关", "AOE开关", "输出模式", "爆发药水开关", "延迟"], - 92), 0, 1); + 92), 1, 1); fields.Controls.Add(CreateCommonFieldCard( "物品", ["治疗药水", "魔法药水", "治疗石", "鲁莽药水", "圣光潜力"], - 92), 1, 1); + 92), 0, 2); fields.Controls.Add(CreateCommonFieldCard( "目标", ["类型", "生命值", "距离", "施法(倒计时)", "施法(正计时)", "施法可打断", "引导", "引导可打断"], - 104), 0, 2); + 104), 1, 2); fields.Controls.Add(CreateCommonFieldCard( "焦点", ["类型", "生命值", "距离", "施法(倒计时)", "施法(正计时)", "施法可打断", "引导", "引导可打断"], - 104), 1, 2); + 104), 0, 3); fields.Controls.Add(CreateCommonFieldCard( "鼠标", ["类型", "生命值", "距离", "施法(倒计时)", "施法(正计时)", "施法可打断", "引导", "引导可打断"], - 104), 0, 3); + 104), 1, 3); fields.Controls.Add(CreateCommonFieldCard( "宠物", ["存在", "生命值"], - 104), 1, 3); + 104), 0, 4); scrollHost.Controls.Add(fields); return scrollHost;