From f19dbf78a00c590c54eec4c59b9c450859853eda Mon Sep 17 00:00:00 2001 From: mfkvfhpdx Date: Sun, 3 May 2026 19:07:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9=E8=A7=92=E8=89=B2=E5=9F=B9=E5=85=BB?= =?UTF-8?q?=E7=B4=A0=E6=9D=90=20=E5=86=85=E9=83=A8=E6=8C=89=E7=85=A7=20=20?= =?UTF-8?q?=E7=A8=80=E6=9C=89=E5=BA=A6=E6=8E=92=E5=BA=8F=EF=BC=88=E5=8C=BA?= =?UTF-8?q?=E5=88=86=20=E4=B8=96=E7=95=8Cboss=20=E5=92=8C=20=E5=91=A8?= =?UTF-8?q?=E6=9C=AC=E6=80=AA=E7=89=A9=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StatisticsCultivateItemCollection.cs | 2 +- .../StatisticsCultivateItemComparer.cs | 41 +++++++++++++++++-- 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Cultivation/StatisticsCultivateItemCollection.cs b/src/Snap.Hutao/Snap.Hutao/Service/Cultivation/StatisticsCultivateItemCollection.cs index 9429fbc..97396fb 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Cultivation/StatisticsCultivateItemCollection.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Cultivation/StatisticsCultivateItemCollection.cs @@ -50,7 +50,7 @@ internal sealed partial class StatisticsCultivateItemCollection : ICollection +/// +/// 材料统计默认顺序:与原先一致按 ,但当两项均为「角色培养素材」时先按 再按物品 Id。 +/// +internal sealed class StatisticsCultivateItemComparer : IComparer { private static readonly LazySlim LazyShared = new(() => new()); private StatisticsCultivateItemComparer() - : base(static i => i.Inner.Id, MaterialIdComparer.Shared) { } public static StatisticsCultivateItemComparer Shared { get => LazyShared.Value; } -} \ No newline at end of file + + public int Compare(StatisticsCultivateItem? x, StatisticsCultivateItem? y) + { + return (x, y) switch + { + (null, not null) => -1, + (not null, null) => 1, + (null, null) => 0, + (not null, not null) => CompareCore(x, y), + }; + } + + internal static int CompareCore(StatisticsCultivateItem x, StatisticsCultivateItem y) + { + string? tx = x.Inner.TypeDescription; + string? ty = y.Inner.TypeDescription; + if (IsCharacterLevelUpMaterial(tx) && IsCharacterLevelUpMaterial(ty)) + { + int rank = x.Inner.RankLevel.CompareTo(y.Inner.RankLevel); + if (rank is not 0) + { + return rank; + } + } + + return MaterialIdComparer.Shared.Compare(x.Inner.Id, y.Inner.Id); + } + + private static bool IsCharacterLevelUpMaterial(string? typeDescription) + { + return typeDescription == SH.ModelMetadataMaterialCharacterLevelUpMaterial; + } +}