From d07fc6d6f5de633784f38df4095311ee9fdb0a8a Mon Sep 17 00:00:00 2001 From: VaDiM Date: Mon, 7 Apr 2025 16:03:20 +0300 Subject: [PATCH] Fix for avg sprites --- .../Components/Arknights/AvgSprite.cs | 39 +++++++++++++++---- .../Components/Arknights/AvgSprite.cs | 39 +++++++++++++++---- 2 files changed, 62 insertions(+), 16 deletions(-) diff --git a/AssetStudioCLI/Components/Arknights/AvgSprite.cs b/AssetStudioCLI/Components/Arknights/AvgSprite.cs index 3f8c469..ae5fad2 100644 --- a/AssetStudioCLI/Components/Arknights/AvgSprite.cs +++ b/AssetStudioCLI/Components/Arknights/AvgSprite.cs @@ -4,6 +4,7 @@ using AssetStudioCLI; using SixLabors.ImageSharp; using System.Linq; using System; +using System.Collections.Specialized; using Newtonsoft.Json; namespace Arknights @@ -43,17 +44,39 @@ namespace Arknights private bool TryGetSpriteHub(AssetItem assetItem, out AvgSpriteConfig spriteHubData) { spriteHubData = null; - var avgSpriteHubItem = Studio.loadedAssetsList.Find(x => + var scriptAssets = Studio.loadedAssetsList.FindAll(x => x.Type == ClassIDType.MonoBehaviour - && x.Container == assetItem.Container - && x.Text.IndexOf("AVGCharacterSpriteHub", StringComparison.OrdinalIgnoreCase) >= 0 - ); - if (avgSpriteHubItem == null) + && x.Container == assetItem.Container); + if (scriptAssets.Count == 0) { - Logger.Warning("AVGCharacterSpriteHub was not found."); + Logger.Warning("No MonoBehaviours were found."); return false; } - var spriteHubDict = ((MonoBehaviour)avgSpriteHubItem.Asset).ToType(); + + OrderedDictionary spriteHubDict = null; + var isGrouped = false; + foreach (var scriptAsset in scriptAssets) + { + var scriptAssetDict = ((MonoBehaviour)scriptAsset.Asset).ToType(); + if (scriptAssetDict == null) + { + Logger.Warning("MonoBehaviour is not readable."); + return false; + } + + if (scriptAssetDict.Contains("spriteGroups")) + { + spriteHubDict = scriptAssetDict; + isGrouped = true; + break; + } + if (scriptAssetDict.Contains("sprites")) + { + spriteHubDict = scriptAssetDict; + break; + } + } + if (spriteHubDict == null) { Logger.Warning("AVGCharacterSpriteHub is not readable."); @@ -61,7 +84,7 @@ namespace Arknights } var spriteHubJson = JsonConvert.SerializeObject(spriteHubDict); - if (avgSpriteHubItem.Text.ToLower().Contains("hubgroup")) + if (isGrouped) { var groupedSpriteHub = JsonConvert.DeserializeObject(spriteHubJson); spriteHubData = GetCurSpriteGroup(groupedSpriteHub, assetItem.m_PathID, assetItem.Text); diff --git a/AssetStudioGUI/Components/Arknights/AvgSprite.cs b/AssetStudioGUI/Components/Arknights/AvgSprite.cs index 788ff1d..de0444b 100644 --- a/AssetStudioGUI/Components/Arknights/AvgSprite.cs +++ b/AssetStudioGUI/Components/Arknights/AvgSprite.cs @@ -4,6 +4,7 @@ using AssetStudioGUI; using SixLabors.ImageSharp; using System.Linq; using System; +using System.Collections.Specialized; using Newtonsoft.Json; namespace Arknights @@ -43,17 +44,39 @@ namespace Arknights private bool TryGetSpriteHub(AssetItem assetItem, out AvgSpriteConfig spriteHubData) { spriteHubData = null; - var avgSpriteHubItem = Studio.exportableAssets.Find(x => + var scriptAssets = Studio.exportableAssets.FindAll(x => x.Type == ClassIDType.MonoBehaviour - && x.Container == assetItem.Container - && x.Text.IndexOf("AVGCharacterSpriteHub", StringComparison.OrdinalIgnoreCase) >= 0 - ); - if (avgSpriteHubItem == null) + && x.Container == assetItem.Container); + if (scriptAssets.Count == 0) { - Logger.Warning("AVGCharacterSpriteHub was not found."); + Logger.Warning("No MonoBehaviours were found."); return false; } - var spriteHubDict = ((MonoBehaviour)avgSpriteHubItem.Asset).ToType(); + + OrderedDictionary spriteHubDict = null; + var isGrouped = false; + foreach (var scriptAsset in scriptAssets) + { + var scriptAssetDict = ((MonoBehaviour)scriptAsset.Asset).ToType(); + if (scriptAssetDict == null) + { + Logger.Warning("MonoBehaviour is not readable."); + return false; + } + + if (scriptAssetDict.Contains("spriteGroups")) + { + spriteHubDict = scriptAssetDict; + isGrouped = true; + break; + } + if (scriptAssetDict.Contains("sprites")) + { + spriteHubDict = scriptAssetDict; + break; + } + } + if (spriteHubDict == null) { Logger.Warning("AVGCharacterSpriteHub is not readable."); @@ -61,7 +84,7 @@ namespace Arknights } var spriteHubJson = JsonConvert.SerializeObject(spriteHubDict); - if (avgSpriteHubItem.Text.ToLower().Contains("hubgroup")) + if (isGrouped) { var groupedSpriteHub = JsonConvert.DeserializeObject(spriteHubJson); spriteHubData = GetCurSpriteGroup(groupedSpriteHub, assetItem.m_PathID, assetItem.Text);