更新版本号至 1.2.1.8,添加不带光环的单位选择功能及相关逻辑

This commit is contained in:
waynebian01
2026-08-20 13:31:20 +08:00
parent c993b44333
commit f37df2e7b8
6 changed files with 55 additions and 4 deletions

View File

@@ -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

View File

@@ -11,6 +11,9 @@ public enum UnitSelectorKind
/// <summary>拥有任一光环且生命值最低。get_lowest_health_unit_with_any_aura</summary>
LowestHealthWithAnyAura,
/// <summary>不拥有所选任一光环且生命值最低。</summary>
LowestHealthWithoutAnyAura,
/// <summary>不带某光环且生命值最低。get_lowest_health_unit_without_aura</summary>
LowestHealthWithoutAura,
@@ -38,6 +41,9 @@ public enum UnitSelectorKind
/// <summary>拥有任一光环、治疗吸收高于阈值且治疗吸收最高的单位。</summary>
HighestHealingAbsorbWithAnyAura,
/// <summary>不拥有所选任一光环、治疗吸收高于阈值且治疗吸收最高的单位。</summary>
HighestHealingAbsorbWithoutAnyAura,
/// <summary>不带某光环、治疗吸收高于阈值且治疗吸收最高的单位。</summary>
HighestHealingAbsorbWithoutAura,

View File

@@ -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;

View File

@@ -9,9 +9,9 @@
<AssemblyName>Shigure</AssemblyName>
<RootNamespace>Shigure</RootNamespace>
<Company>Arasaka Corporation</Company>
<Version>1.2.1.7</Version>
<AssemblyVersion>1.2.1.7</AssemblyVersion>
<FileVersion>1.2.1.7</FileVersion>
<Version>1.2.1.8</Version>
<AssemblyVersion>1.2.1.8</AssemblyVersion>
<FileVersion>1.2.1.8</FileVersion>
<ApplicationIcon>Assets\arasaka-icon.ico</ApplicationIcon>
<ApplicationHighDpiMode>PerMonitorV2</ApplicationHighDpiMode>
</PropertyGroup>

View File

@@ -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

View File

@@ -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;