From dfe911cae4451f4df04316145fe1f67d433c62f4 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期四, 04 十二月 2025 10:38:25 +0800
Subject: [PATCH] Merge branch 'master' of http://mobile.secondworld.net.cn:10010/r/Project_SG_scripts

---
 Main/System/Chat/ChatManager.cs                          |    2 
 Main/System/Battle/BattleObject/BattleObject.cs          |    2 
 Main/System/Battle/BattleObject/BattleObjectFactory.cs   |    7 +-
 Main/System/Battle/BattleResources/BattleCacheManager.cs |  113 +++++++++++++++++++++++++++++++++++++
 Main/System/Chat/ChatWin.cs                              |   15 +++++
 5 files changed, 134 insertions(+), 5 deletions(-)

diff --git a/Main/System/Battle/BattleObject/BattleObject.cs b/Main/System/Battle/BattleObject/BattleObject.cs
index 27c700b..f0b173b 100644
--- a/Main/System/Battle/BattleObject/BattleObject.cs
+++ b/Main/System/Battle/BattleObject/BattleObject.cs
@@ -359,7 +359,7 @@
             {
                 if (!buffMgr.isControled[BattleConst.HardControlGroup])
                 {
-                    battleField.soundManager.PlayEffectSound(teamHero.heroConfig.HitSFX);
+                    battleField.soundManager.PlayEffectSound(teamHero.heroConfig.HitSFX, false);
                     motionBase.PlayAnimation(MotionName.hit, false);
                 }
             }
diff --git a/Main/System/Battle/BattleObject/BattleObjectFactory.cs b/Main/System/Battle/BattleObject/BattleObjectFactory.cs
index 58cae7d..d991f1d 100644
--- a/Main/System/Battle/BattleObject/BattleObjectFactory.cs
+++ b/Main/System/Battle/BattleObject/BattleObjectFactory.cs
@@ -31,11 +31,10 @@
             return null;
         }
 
-        // ===== 绠�鍖栵細鐩存帴浠庣紦瀛樿幏鍙栵紝缂撳瓨鍐呴儴浼氳嚜鍔ㄥ姞杞� =====
-        SkeletonDataAsset skeletonDataAsset = BattleResManager.Instance.GetSpineResource(
+        // ===== 鐩存帴鍔犺浇璧勬簮锛堥潪棰勫姞杞界殑璧勬簮涓嶈蛋缂撳瓨绯荤粺锛�=====
+        SkeletonDataAsset skeletonDataAsset = ResManager.Instance.LoadAsset<SkeletonDataAsset>(
             "Hero/SpineRes/", 
-            skinCfg.SpineRes, 
-            _battleField.guid
+            skinCfg.SpineRes
         );
         
         if (skeletonDataAsset == null)
diff --git a/Main/System/Battle/BattleResources/BattleCacheManager.cs b/Main/System/Battle/BattleResources/BattleCacheManager.cs
index e0c36b4..79682a6 100644
--- a/Main/System/Battle/BattleResources/BattleCacheManager.cs
+++ b/Main/System/Battle/BattleResources/BattleCacheManager.cs
@@ -259,4 +259,117 @@
         
         return $"Spine: {spineTotal}, Audio: {audioTotal}";
     }
+    
+    // ===== 缂栬緫鍣ㄨ皟璇曟帴鍙� =====
+#if UNITY_EDITOR
+    // 缂栬緫鍣ㄦā寮忎笅鐨勮祫婧愬紩鐢ㄨ皟璇曠被
+    public class ResourceReferenceDebug
+    {
+        public BattleResCache.CachedResource CachedResource;
+        public Dictionary<string, HashSet<string>> BattlefieldOwners;
+        
+        public int RefCount
+        {
+            get
+            {
+                int count = 0;
+                foreach (var owners in BattlefieldOwners.Values)
+                {
+                    count += owners.Count;
+                }
+                return count;
+            }
+        }
+        
+        // 绉佹湁鏋勯�犲嚱鏁帮紝鍙兘鐢� DebugAPI 璋冪敤
+        internal ResourceReferenceDebug()
+        {
+        }
+    }
+    
+    public static class DebugAPI
+    {
+        public static Dictionary<string, ResourceReferenceDebug> GetSpineCache()
+        {
+            var result = new Dictionary<string, ResourceReferenceDebug>();
+            foreach (var kvp in globalSpineCache)
+            {
+                // 鐩存帴鍦ㄨ繖閲岃祴鍊硷紝涓嶉�氳繃鏋勯�犲嚱鏁颁紶閫掔鏈夌被
+                result[kvp.Key] = new ResourceReferenceDebug
+                {
+                    CachedResource = kvp.Value.CachedResource,
+                    BattlefieldOwners = kvp.Value.BattlefieldOwners
+                };
+            }
+            return result;
+        }
+        
+        public static Dictionary<string, ResourceReferenceDebug> GetAudioCache()
+        {
+            var result = new Dictionary<string, ResourceReferenceDebug>();
+            foreach (var kvp in globalAudioCache)
+            {
+                result[kvp.Key] = new ResourceReferenceDebug
+                {
+                    CachedResource = kvp.Value.CachedResource,
+                    BattlefieldOwners = kvp.Value.BattlefieldOwners
+                };
+            }
+            return result;
+        }
+        
+        public static int GetTotalSpineCount() => globalSpineCache.Count;
+        public static int GetTotalAudioCount() => globalAudioCache.Count;
+        
+        public static HashSet<string> GetAllBattleGuids()
+        {
+            var guids = new HashSet<string>();
+            foreach (var refInfo in globalSpineCache.Values)
+            {
+                foreach (var guid in refInfo.BattlefieldOwners.Keys)
+                {
+                    guids.Add(guid);
+                }
+            }
+            foreach (var refInfo in globalAudioCache.Values)
+            {
+                foreach (var guid in refInfo.BattlefieldOwners.Keys)
+                {
+                    guids.Add(guid);
+                }
+            }
+            return guids;
+        }
+        
+        public static void ClearAllCache()
+        {
+            globalSpineCache.Clear();
+            globalAudioCache.Clear();
+            Debug.Log("BattleCacheManager: All cache cleared (Editor only)");
+        }
+    }
+    
+    // 璧勬簮寮曠敤瑙嗗浘绫伙紙渚涚紪杈戝櫒浣跨敤锛�
+    public class ResourceReferenceView
+    {
+        public string ResourceKey;
+        public string ResourcePath;
+        public bool IsLoaded;
+        public int TotalRefCount;
+        public Dictionary<string, int> BattlefieldRefCounts = new Dictionary<string, int>();
+        
+        public ResourceReferenceView(string key, ResourceReferenceDebug refInfo)
+        {
+            ResourceKey = key;
+            ResourcePath = refInfo.CachedResource.Identifier.Directory + "/" + refInfo.CachedResource.Identifier.AssetName;
+            IsLoaded = refInfo.CachedResource.Asset != null;
+            TotalRefCount = refInfo.RefCount;
+            
+            foreach (var kvp in refInfo.BattlefieldOwners)
+            {
+                BattlefieldRefCounts[kvp.Key] = kvp.Value.Count;
+            }
+        }
+    }
+#endif
 }
\ No newline at end of file
diff --git a/Main/System/Chat/ChatManager.cs b/Main/System/Chat/ChatManager.cs
index 0691b0c..5d12a44 100644
--- a/Main/System/Chat/ChatManager.cs
+++ b/Main/System/Chat/ChatManager.cs
@@ -338,6 +338,7 @@
 
     public readonly int maxTalkCount = 1000;  //鑱婂ぉ鏁伴噺涓婇檺
     public readonly int deleteTalkCount = 300;  //鑱婂ぉ鏁伴噺涓婇檺鏃跺垹闄ゅ墠澶氬皯鏉�
+    public event Action<ChatChannel> OnDeleteTalkEvent;
 
     void TryDeleteTalkData(ChatChannel type)
     {
@@ -346,6 +347,7 @@
         if (datas.Count < maxTalkCount)
             return;
         datas.RemoveRange(0, deleteTalkCount);
+        OnDeleteTalkEvent?.Invoke(type);
     }
 
     public int currentDay = -1;
diff --git a/Main/System/Chat/ChatWin.cs b/Main/System/Chat/ChatWin.cs
index 88441ed..1793fce 100644
--- a/Main/System/Chat/ChatWin.cs
+++ b/Main/System/Chat/ChatWin.cs
@@ -99,6 +99,7 @@
         manager.OnChatTabChangeEvent += OnChatTabChange;
         manager.OnUpdateTalkEvent += OnUpdateTalkEvent;
         manager.OnUpdateTalkCacheListEvent += OnUpdateTalkCacheList;
+        manager.OnDeleteTalkEvent += OnDeleteTalkEvent;
 
         scrChatTab.OnRefreshCell += OnRefreshChatTabCell;
         scrWorld.OnGetDynamicSize += OnGetWorldChatDynamicSize;
@@ -110,6 +111,7 @@
 
         clickScreenOtherSpace.AddListener(OnClickScreenOtherSpace);
         GlobalTimeEvent.Instance.secondEvent += OnSecondEvent;
+
 
         isSettingOpen = false;
         transSettings.SetActive(isSettingOpen);
@@ -127,6 +129,7 @@
         manager.OnChatTabChangeEvent -= OnChatTabChange;
         manager.OnUpdateTalkEvent -= OnUpdateTalkEvent;
         manager.OnUpdateTalkCacheListEvent -= OnUpdateTalkCacheList;
+        manager.OnDeleteTalkEvent -= OnDeleteTalkEvent;
 
         scrChatTab.OnRefreshCell -= OnRefreshChatTabCell;
         scrWorld.OnGetDynamicSize -= OnGetWorldChatDynamicSize;
@@ -139,6 +142,18 @@
         clickScreenOtherSpace.RemoveAllListeners();
     }
 
+    private void OnDeleteTalkEvent(ChatChannel channel)
+    {
+        if (channel == ChatChannel.World)
+        {
+            CreateScroller(scrWorld, channel);
+        }
+        else if (channel == ChatChannel.Guild)
+        {
+            CreateScroller(scrGuild, channel);
+        }
+    }
+
     private void OnRefreshGuildCell(ScrollerDataType type, CellView cell)
     {
         OnRefreshCell(type, cell);

--
Gitblit v1.8.0