From 75bdfc17973e08c2ec4c2f35c5964b7136f12759 Mon Sep 17 00:00:00 2001 From: Asval Date: Mon, 21 Jul 2025 18:11:12 +0200 Subject: [PATCH] automated GetInternalSID using Athena_SeasonTitles --- CUE4Parse | 2 +- FModel/Creator/Bases/FN/BaseCommunity.cs | 12 +--- FModel/Creator/Bases/FN/BaseIcon.cs | 47 ++++------------ FModel/ViewModels/CUE4ParseViewModel.cs | 3 +- FModel/Views/SettingsView.xaml | 70 ++++++++++++------------ 5 files changed, 53 insertions(+), 81 deletions(-) diff --git a/CUE4Parse b/CUE4Parse index ff2e96ba..b5a3fd7f 160000 --- a/CUE4Parse +++ b/CUE4Parse @@ -1 +1 @@ -Subproject commit ff2e96ba05bd732564bb7db2d995334bf68062e7 +Subproject commit b5a3fd7fc4463740e885ea1d17dc9a1697b3b9b9 diff --git a/FModel/Creator/Bases/FN/BaseCommunity.cs b/FModel/Creator/Bases/FN/BaseCommunity.cs index 2492426d..39c91fa4 100644 --- a/FModel/Creator/Bases/FN/BaseCommunity.cs +++ b/FModel/Creator/Bases/FN/BaseCommunity.cs @@ -123,15 +123,9 @@ public class BaseCommunity : BaseIcon { if (!bShort) return base.GetCosmeticSeason(seasonNumber); var s = seasonNumber["Cosmetics.Filter.Season.".Length..]; - (int chapterIdx, int seasonIdx) = GetInternalSID(int.Parse(s)); - return s switch - { - "10" => $"C{chapterIdx} SX", - "27" => $"Fortnite: OG", - "32" => $"Fortnite: Remix", - "35" => $"C{chapterIdx} MS1", - _ => $"C{chapterIdx} S{seasonIdx}" - }; + (string chapterIdx, string seasonIdx, bool onlySeason) = GetInternalSID(s); + var prefix = int.TryParse(seasonIdx, out _) ? "S" : ""; + return onlySeason ? $"{prefix}{seasonIdx}" : $"C{chapterIdx} {prefix}{seasonIdx}"; } private new void DrawBackground(SKCanvas c) diff --git a/FModel/Creator/Bases/FN/BaseIcon.cs b/FModel/Creator/Bases/FN/BaseIcon.cs index e131f358..00c1e675 100644 --- a/FModel/Creator/Bases/FN/BaseIcon.cs +++ b/FModel/Creator/Bases/FN/BaseIcon.cs @@ -221,55 +221,32 @@ public class BaseIcon : UCreator return Utils.RemoveHtmlTags(string.Format(format, name)); } - protected (int, int) GetInternalSID(int number) + protected (string, string, bool) GetInternalSID(string number) { - static int GetSeasonsInChapter(int chapter) => chapter switch - { - 1 => 10, - 2 => 8, - 3 => 4, - 4 => 5, - 5 => 5, - _ => 10 - }; + if (!Utils.TryLoadObject("FortniteGame/Plugins/GameFeatures/BattlePassBase/Content/DataTables/Athena_SeasonTitles.Athena_SeasonTitles", out UDataTable seasonTitles) || + !seasonTitles.TryGetDataTableRow(number, StringComparison.InvariantCulture, out var row) || + !row.TryGetValue(out FText chapterText, "DisplayChapterText") || + !row.TryGetValue(out FText seasonText, "DisplaySeasonText") || + !row.TryGetValue(out FName displayType, "DisplayType")) + return (string.Empty, string.Empty, true); - var chapterIdx = 0; - var seasonIdx = 0; - while (number > 0) - { - var seasonsInChapter = GetSeasonsInChapter(++chapterIdx); - if (number > seasonsInChapter) - number -= seasonsInChapter; - else - { - seasonIdx = number; - number = 0; - } - } - return (chapterIdx, seasonIdx); + var onlySeason = displayType.Text.EndsWith("::OnlySeason") || (chapterText.Text == seasonText.Text && !int.TryParse(seasonText.Text, out _)); + return (chapterText.Text, seasonText.Text, onlySeason); } protected string GetCosmeticSeason(string seasonNumber) { var s = seasonNumber["Cosmetics.Filter.Season.".Length..]; - var initial = int.Parse(s); - (int chapterIdx, int seasonIdx) = GetInternalSID(initial); + (string chapterIdx, string seasonIdx, bool onlySeason) = GetInternalSID(s); var season = Utils.GetLocalizedResource("AthenaSeasonItemDefinitionInternal", "SeasonTextFormat", "Season {0}"); var introduced = Utils.GetLocalizedResource("Fort.Cosmetics", "CosmeticItemDescription_Season", "\nIntroduced in {0}."); - if (s == "10") return Utils.RemoveHtmlTags(string.Format(introduced, string.Format(season, "X"))); - if (initial <= 10) return Utils.RemoveHtmlTags(string.Format(introduced, string.Format(season, s))); + if (onlySeason) return Utils.RemoveHtmlTags(string.Format(introduced, string.Format(season, seasonIdx))); var chapter = Utils.GetLocalizedResource("AthenaSeasonItemDefinitionInternal", "ChapterTextFormat", "Chapter {0}"); var chapterFormat = Utils.GetLocalizedResource("AthenaSeasonItemDefinitionInternal", "ChapterSeasonTextFormat", "{0}, {1}"); var d = string.Format(chapterFormat, string.Format(chapter, chapterIdx), string.Format(season, seasonIdx)); - return s switch - { - "27" => Utils.RemoveHtmlTags(string.Format(introduced, string.Format("Fortnite: OG"))), - "32" => Utils.RemoveHtmlTags(string.Format(introduced, string.Format("Fortnite: Remix"))), - "35" => Utils.RemoveHtmlTags(string.Format(introduced, string.Format(chapterFormat, string.Format(chapter, chapterIdx), string.Format("MS1")))), - _ => Utils.RemoveHtmlTags(string.Format(introduced, d)) - }; + return Utils.RemoveHtmlTags(string.Format(introduced, d)); } protected void CheckGameplayTags(FInstancedStruct[] dataList) diff --git a/FModel/ViewModels/CUE4ParseViewModel.cs b/FModel/ViewModels/CUE4ParseViewModel.cs index c3279387..8716cd98 100644 --- a/FModel/ViewModels/CUE4ParseViewModel.cs +++ b/FModel/ViewModels/CUE4ParseViewModel.cs @@ -30,7 +30,7 @@ using CUE4Parse.UE4.IO; using CUE4Parse.UE4.Localization; using CUE4Parse.UE4.Objects.Core.Serialization; using CUE4Parse.UE4.Objects.Engine; -using CUE4Parse.UE4.Oodle.Objects; +using CUE4Parse.UE4.Oodle.Objects; using CUE4Parse.UE4.Pak; using CUE4Parse.UE4.Readers; using CUE4Parse.UE4.Shaders; @@ -39,6 +39,7 @@ using CUE4Parse.UE4.Wwise; using CUE4Parse_Conversion; using CUE4Parse_Conversion.Sounds; using CUE4Parse.FileProvider.Objects; +using CUE4Parse.GameTypes.AshEchoes.FileProvider; using CUE4Parse.UE4.Assets; using CUE4Parse.UE4.BinaryConfig; using CUE4Parse.UE4.Objects.UObject; diff --git a/FModel/Views/SettingsView.xaml b/FModel/Views/SettingsView.xaml index 4c85c8fd..00a7c1f1 100644 --- a/FModel/Views/SettingsView.xaml +++ b/FModel/Views/SettingsView.xaml @@ -465,42 +465,42 @@ IsChecked="{Binding SaveSkeletonAsMesh, Source={x:Static local:Settings.UserSettings.Default}, Mode=TwoWay}" Style="{DynamicResource {x:Static adonisUi:Styles.ToggleSwitch}}" Margin="0 5 0 0"/> - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + Style="{DynamicResource {x:Static adonisUi:Styles.ToggleSwitch}}" Margin="0 5 0 5"/>