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;