diff --git a/Fuyutsui/Fuyutsui.toc b/Fuyutsui/Fuyutsui.toc index 5b946b08..b758566b 100644 --- a/Fuyutsui/Fuyutsui.toc +++ b/Fuyutsui/Fuyutsui.toc @@ -1,7 +1,7 @@ ## Interface: 120100 ## Title: Fuyutsui -## Version: 1.2.1.7 +## Version: 1.2.1.8 ## Author: Wayne Bian ## IconTexture: Interface\AddOns\Fuyutsui\core\Spell_Misc_EmotionHappy.blp ## OptionalDeps: LibRangeCheck-3.0 diff --git a/Modules/ModuleUnit.cs b/Modules/ModuleUnit.cs index d2b58c86..af700458 100644 --- a/Modules/ModuleUnit.cs +++ b/Modules/ModuleUnit.cs @@ -11,6 +11,9 @@ public enum UnitSelectorKind /// 拥有任一光环且生命值最低。get_lowest_health_unit_with_any_aura LowestHealthWithAnyAura, + /// 不拥有所选任一光环且生命值最低。 + LowestHealthWithoutAnyAura, + /// 不带某光环且生命值最低。get_lowest_health_unit_without_aura LowestHealthWithoutAura, @@ -38,6 +41,9 @@ public enum UnitSelectorKind /// 拥有任一光环、治疗吸收高于阈值且治疗吸收最高的单位。 HighestHealingAbsorbWithAnyAura, + /// 不拥有所选任一光环、治疗吸收高于阈值且治疗吸收最高的单位。 + HighestHealingAbsorbWithoutAnyAura, + /// 不带某光环、治疗吸收高于阈值且治疗吸收最高的单位。 HighestHealingAbsorbWithoutAura, diff --git a/Modules/UnitSelector.cs b/Modules/UnitSelector.cs index 8a2e1483..b791425e 100644 --- a/Modules/UnitSelector.cs +++ b/Modules/UnitSelector.cs @@ -35,6 +35,12 @@ public static class UnitSelector threshold, data => MatchesRoleFilter(data, unit.RoleFilter, unit.Role) && HasAnyAura(data, names)) : null, + UnitSelectorKind.LowestHealthWithoutAnyAura => unit.AuraNames is { Count: > 0 } names + ? LowestHealth( + group, + threshold, + data => MatchesRoleFilter(data, unit.RoleFilter, unit.Role) && !HasAnyAura(data, names)) + : null, UnitSelectorKind.LowestHealthWithoutAura => aura is null ? null : LowestHealth( @@ -68,6 +74,9 @@ public static class UnitSelector UnitSelectorKind.HighestHealingAbsorbWithAnyAura => unit.AuraNames is { Count: > 0 } names ? HighestHealingAbsorb(group, threshold, data => HasAnyAura(data, names)) : null, + UnitSelectorKind.HighestHealingAbsorbWithoutAnyAura => unit.AuraNames is { Count: > 0 } names + ? HighestHealingAbsorb(group, threshold, data => !HasAnyAura(data, names)) + : null, UnitSelectorKind.HighestHealingAbsorbWithoutAura => aura is null ? null : HighestHealingAbsorb(group, threshold, data => !HasAura(data, aura)), @@ -316,6 +325,7 @@ public static class UnitSelector private static bool IsHealingAbsorbKind(UnitSelectorKind kind) => kind is UnitSelectorKind.HighestHealingAbsorb or UnitSelectorKind.HighestHealingAbsorbWithAnyAura + or UnitSelectorKind.HighestHealingAbsorbWithoutAnyAura or UnitSelectorKind.HighestHealingAbsorbWithoutAura or UnitSelectorKind.HighestHealingAbsorbWithAura or UnitSelectorKind.HighestHealingAbsorbWithAuraCount; diff --git a/Shigure.csproj b/Shigure.csproj index d1bc3881..52ba8e7e 100644 --- a/Shigure.csproj +++ b/Shigure.csproj @@ -9,9 +9,9 @@ Shigure Shigure Arasaka Corporation - 1.2.1.7 - 1.2.1.7 - 1.2.1.7 + 1.2.1.8 + 1.2.1.8 + 1.2.1.8 Assets\arasaka-icon.ico PerMonitorV2 diff --git a/UI/UnitEditorForm.cs b/UI/UnitEditorForm.cs index a6452089..26993439 100644 --- a/UI/UnitEditorForm.cs +++ b/UI/UnitEditorForm.cs @@ -31,6 +31,7 @@ public sealed class UnitEditorForm : Form [ new("不筛选光环", LowestHealthAuraFilterKind.None), new("带任一光环", LowestHealthAuraFilterKind.WithAnyAura), + new("不带任一光环", LowestHealthAuraFilterKind.WithoutAnyAura), new("不带某光环", LowestHealthAuraFilterKind.WithoutAura), new("带某光环", LowestHealthAuraFilterKind.WithAura), new("某光环值等于", LowestHealthAuraFilterKind.WithAuraCount) @@ -427,6 +428,7 @@ public sealed class UnitEditorForm : Form switch (SelectedLowestHealthAuraFilter()) { case LowestHealthAuraFilterKind.WithAnyAura: + case LowestHealthAuraFilterKind.WithoutAnyAura: auraMulti = true; break; case LowestHealthAuraFilterKind.WithoutAura: @@ -444,6 +446,7 @@ public sealed class UnitEditorForm : Form switch (SelectedLowestHealthAuraFilter()) { case LowestHealthAuraFilterKind.WithAnyAura: + case LowestHealthAuraFilterKind.WithoutAnyAura: auraMulti = true; break; case LowestHealthAuraFilterKind.WithoutAura: @@ -457,6 +460,7 @@ public sealed class UnitEditorForm : Form break; case UnitSelectorKind.LowestHealthWithAnyAura: + case UnitSelectorKind.LowestHealthWithoutAnyAura: threshold = auraMulti = true; break; case UnitSelectorKind.LowestHealthWithoutAura: @@ -468,6 +472,7 @@ public sealed class UnitEditorForm : Form threshold = auraSingle = auraCount = true; break; case UnitSelectorKind.HighestHealingAbsorbWithAnyAura: + case UnitSelectorKind.HighestHealingAbsorbWithoutAnyAura: threshold = auraMulti = true; break; case UnitSelectorKind.HighestHealingAbsorbWithoutAura: @@ -537,7 +542,9 @@ public sealed class UnitEditorForm : Form DispelType = SelectedDispelType() }; unit.AuraNames = unit.Kind is UnitSelectorKind.LowestHealthWithAnyAura + or UnitSelectorKind.LowestHealthWithoutAnyAura or UnitSelectorKind.HighestHealingAbsorbWithAnyAura + or UnitSelectorKind.HighestHealingAbsorbWithoutAnyAura ? CheckedAuras() : SingleAuraList(); ApplyPreviewThreshold(v => unit.HealthThreshold = v, f => unit.HealthThresholdField = f); @@ -559,6 +566,9 @@ public sealed class UnitEditorForm : Form LowestHealthAuraFilterKind.WithAnyAura => healingAbsorb ? UnitSelectorKind.HighestHealingAbsorbWithAnyAura : UnitSelectorKind.LowestHealthWithAnyAura, + LowestHealthAuraFilterKind.WithoutAnyAura => healingAbsorb + ? UnitSelectorKind.HighestHealingAbsorbWithoutAnyAura + : UnitSelectorKind.LowestHealthWithoutAnyAura, LowestHealthAuraFilterKind.WithoutAura => healingAbsorb ? UnitSelectorKind.HighestHealingAbsorbWithoutAura : UnitSelectorKind.LowestHealthWithoutAura, @@ -738,6 +748,18 @@ public sealed class UnitEditorForm : Form return; } + break; + case LowestHealthAuraFilterKind.WithoutAnyAura: + moduleUnit.Kind = healingAbsorb + ? UnitSelectorKind.HighestHealingAbsorbWithoutAnyAura + : UnitSelectorKind.LowestHealthWithoutAnyAura; + moduleUnit.AuraNames = CheckedAuras(); + if (moduleUnit.AuraNames.Count == 0) + { + MessageBox.Show("请至少勾选一个光环。", "Shigure", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + break; case LowestHealthAuraFilterKind.WithoutAura: moduleUnit.Kind = healingAbsorb @@ -762,7 +784,9 @@ public sealed class UnitEditorForm : Form break; case UnitSelectorKind.LowestHealthWithAnyAura: + case UnitSelectorKind.LowestHealthWithoutAnyAura: case UnitSelectorKind.HighestHealingAbsorbWithAnyAura: + case UnitSelectorKind.HighestHealingAbsorbWithoutAnyAura: if (!ApplyThreshold(moduleUnit)) { return; @@ -970,10 +994,12 @@ public sealed class UnitEditorForm : Form private static bool UnitRequiresAura(UnitSelectorKind kind) => kind is UnitSelectorKind.LowestHealthWithAnyAura + or UnitSelectorKind.LowestHealthWithoutAnyAura or UnitSelectorKind.LowestHealthWithoutAura or UnitSelectorKind.LowestHealthWithAura or UnitSelectorKind.LowestHealthWithAuraCount or UnitSelectorKind.HighestHealingAbsorbWithAnyAura + or UnitSelectorKind.HighestHealingAbsorbWithoutAnyAura or UnitSelectorKind.HighestHealingAbsorbWithoutAura or UnitSelectorKind.HighestHealingAbsorbWithAura or UnitSelectorKind.HighestHealingAbsorbWithAuraCount @@ -1015,11 +1041,13 @@ public sealed class UnitEditorForm : Form private static UnitSelectorKind DisplaySelectorKind(UnitSelectorKind kind) => kind is UnitSelectorKind.LowestHealthWithAnyAura + or UnitSelectorKind.LowestHealthWithoutAnyAura or UnitSelectorKind.LowestHealthWithoutAura or UnitSelectorKind.LowestHealthWithAura or UnitSelectorKind.LowestHealthWithAuraCount ? UnitSelectorKind.LowestHealth : kind is UnitSelectorKind.HighestHealingAbsorbWithAnyAura + or UnitSelectorKind.HighestHealingAbsorbWithoutAnyAura or UnitSelectorKind.HighestHealingAbsorbWithoutAura or UnitSelectorKind.HighestHealingAbsorbWithAura or UnitSelectorKind.HighestHealingAbsorbWithAuraCount @@ -1031,10 +1059,12 @@ public sealed class UnitEditorForm : Form var filter = kind switch { UnitSelectorKind.LowestHealthWithAnyAura => LowestHealthAuraFilterKind.WithAnyAura, + UnitSelectorKind.LowestHealthWithoutAnyAura => LowestHealthAuraFilterKind.WithoutAnyAura, UnitSelectorKind.LowestHealthWithoutAura => LowestHealthAuraFilterKind.WithoutAura, UnitSelectorKind.LowestHealthWithAura => LowestHealthAuraFilterKind.WithAura, UnitSelectorKind.LowestHealthWithAuraCount => LowestHealthAuraFilterKind.WithAuraCount, UnitSelectorKind.HighestHealingAbsorbWithAnyAura => LowestHealthAuraFilterKind.WithAnyAura, + UnitSelectorKind.HighestHealingAbsorbWithoutAnyAura => LowestHealthAuraFilterKind.WithoutAnyAura, UnitSelectorKind.HighestHealingAbsorbWithoutAura => LowestHealthAuraFilterKind.WithoutAura, UnitSelectorKind.HighestHealingAbsorbWithAura => LowestHealthAuraFilterKind.WithAura, UnitSelectorKind.HighestHealingAbsorbWithAuraCount => LowestHealthAuraFilterKind.WithAuraCount, @@ -1310,6 +1340,7 @@ public sealed class UnitEditorForm : Form { None, WithAnyAura, + WithoutAnyAura, WithoutAura, WithAura, WithAuraCount diff --git a/UI/UnitSummary.cs b/UI/UnitSummary.cs index 475cee1d..bb362ec9 100644 --- a/UI/UnitSummary.cs +++ b/UI/UnitSummary.cs @@ -20,6 +20,7 @@ internal static class UnitSummary { UnitSelectorKind.LowestHealth => $"血量最低 (<{threshold})", UnitSelectorKind.LowestHealthWithAnyAura => $"带任一[{auras}]且血最低 (<{threshold})", + UnitSelectorKind.LowestHealthWithoutAnyAura => $"不带任一[{auras}]且血最低 (<{threshold})", UnitSelectorKind.LowestHealthWithoutAura => $"不带[{aura}]且血最低 (<{threshold})", UnitSelectorKind.LowestHealthWithAura => $"带[{aura}]且血最低 (<{threshold})", UnitSelectorKind.LowestHealthWithAuraCount => $"[{aura}]={unit.AuraCount}且血最低 (<{threshold})", @@ -29,6 +30,7 @@ internal static class UnitSummary UnitSelectorKind.UnitWithDispelType => $"驱散类型={unit.DispelType}", UnitSelectorKind.HighestHealingAbsorb => $"治疗吸收最高 (>{threshold})", UnitSelectorKind.HighestHealingAbsorbWithAnyAura => $"带任一[{auras}]且治疗吸收最高 (>{threshold})", + UnitSelectorKind.HighestHealingAbsorbWithoutAnyAura => $"不带任一[{auras}]且治疗吸收最高 (>{threshold})", UnitSelectorKind.HighestHealingAbsorbWithoutAura => $"不带[{aura}]且治疗吸收最高 (>{threshold})", UnitSelectorKind.HighestHealingAbsorbWithAura => $"带[{aura}]且治疗吸收最高 (>{threshold})", UnitSelectorKind.HighestHealingAbsorbWithAuraCount => $"[{aura}]={unit.AuraCount}且治疗吸收最高 (>{threshold})", @@ -77,6 +79,7 @@ internal static class UnitSummary private static bool IsLowestHealthKind(UnitSelectorKind kind) => kind is UnitSelectorKind.LowestHealth or UnitSelectorKind.LowestHealthWithAnyAura + or UnitSelectorKind.LowestHealthWithoutAnyAura or UnitSelectorKind.LowestHealthWithoutAura or UnitSelectorKind.LowestHealthWithAura or UnitSelectorKind.LowestHealthWithAuraCount; @@ -84,6 +87,7 @@ internal static class UnitSummary private static bool IsHealingAbsorbKind(UnitSelectorKind kind) => kind is UnitSelectorKind.HighestHealingAbsorb or UnitSelectorKind.HighestHealingAbsorbWithAnyAura + or UnitSelectorKind.HighestHealingAbsorbWithoutAnyAura or UnitSelectorKind.HighestHealingAbsorbWithoutAura or UnitSelectorKind.HighestHealingAbsorbWithAura or UnitSelectorKind.HighestHealingAbsorbWithAuraCount;