From 01a6a9d95daa7d650f29b867baa437b8b1e38697 Mon Sep 17 00:00:00 2001
From: lcy <1459594991@qq.com>
Date: 星期二, 17 三月 2026 19:26:57 +0800
Subject: [PATCH] 262 幻境阁-客户端 支持配置关联皮肤解锁

---
 Main/System/HeroUI/HeroUIManager.Collect.cs |   85 +++++++++++++++++++++++++++++++++---------
 1 files changed, 67 insertions(+), 18 deletions(-)

diff --git a/Main/System/HeroUI/HeroUIManager.Collect.cs b/Main/System/HeroUI/HeroUIManager.Collect.cs
index 862f42e..36417b6 100644
--- a/Main/System/HeroUI/HeroUIManager.Collect.cs
+++ b/Main/System/HeroUI/HeroUIManager.Collect.cs
@@ -30,25 +30,10 @@
             var newHeroData = netPack.HeroInfoList[i];
             int heroID = (int)newHeroData.HeroID;
 
-            // ---- 鏂板锛氬姣旀棫鏁版嵁锛屾娴嬬毊鑲ょ姸鎬佸彉鍖� ----
-            if (heroCollectInfoDic.TryGetValue(heroID, out var oldHeroData))
-            {
-                if (newHeroData.SkinList != null)
-                {
-                    foreach (var newSkin in newHeroData.SkinList)
-                    {
-                        // 鍦ㄦ棫鏁版嵁涓鎵惧搴旂殑鐨偆
-                        var oldSkin = oldHeroData.SkinList?.FirstOrDefault(s => s.SkinID == newSkin.SkinID);
+            // 1. 璋冪敤灏佽濂界殑鏂规硶锛氭娴嬪苟瑙﹀彂鏂扮毊鑲や簨浠�
+            CheckAndTriggerNewSkinEvents(heroID, newHeroData);
 
-                        // 濡傛灉鏃ф暟鎹腑娌℃湁杩欎釜鐨偆(棣栨鑾峰緱)锛屾垨鑰呯姸鎬佸彂鐢熶簡鍙樺寲
-                        if (oldSkin == null || oldSkin.State != newSkin.State)
-                        {
-                            OnHeroSkinStateChanged?.Invoke(heroID, (int)newSkin.SkinID, newSkin.State);
-                        }
-                    }
-                }
-            }
-
+            // 2. 鏇存柊瀛楀吀涓烘渶鏂扮殑缃戠粶鍖呮暟鎹�
             heroCollectInfoDic[heroID] = newHeroData;
         }
 
@@ -60,6 +45,70 @@
         OnHeroCollectEvent?.Invoke();
     }
 
+    public event Action<int, int> OnNewSkinAcquired;// 褰撶帺瀹惰幏寰楁柊鐨偆锛堟縺娲荤毊鑲わ級鏃惰Е鍙戠殑浜嬩欢 HeroID SkinID
+
+    /// <summary>
+    /// 妫�鏌ュ苟瑙﹀彂鑾峰緱鏂扮毊鑲ょ殑浜嬩欢
+    /// </summary>
+    private void CheckAndTriggerNewSkinEvents(int heroID, HB122_tagSCHeroInfo.tagSCHero newHeroData)
+    {
+        // 濡傛灉鏂版暟鎹腑娌℃湁鐨偆淇℃伅锛岀洿鎺ヨ繑鍥�
+        if (newHeroData?.SkinList == null || newHeroData?.SkinCnt <= 0) return;
+
+        // 灏濊瘯鑾峰彇鏃ф暟鎹�
+        bool isOldHeroExist = heroCollectInfoDic.TryGetValue(heroID, out var oldHeroData);
+
+        for (int j = 0; j < newHeroData.SkinCnt; j++)
+        {
+            var newSkin = newHeroData.SkinList[j];
+            
+            // 濡傛灉鏂扮毊鑲ゆ湭婵�娲伙紝鐩存帴璺宠繃褰撳墠寰幆锛屾鏌ヤ笅涓�涓毊鑲�
+            if (newSkin.State <= 0) continue;
+
+            bool isNewlyAcquired = false;
+
+            if (!isOldHeroExist)
+            {
+                // 鍦烘櫙A锛氳繖鏄竴涓叏鏂扮殑姝﹀皢锛屼笖鑷甫浜嗗凡婵�娲荤殑闈為粯璁ょ毊鑲�
+                isNewlyAcquired = true;
+            }
+            else
+            {
+                // 鍦烘櫙B锛氬凡鏈夌殑鑰佹灏嗭紝闇�瑕佸姣旀棫鏁版嵁鐪嬭繖涓毊鑲ゆ槸涓嶆槸鍒氬垰鎵嶈幏寰楃殑
+                bool foundOldSkin = false;
+
+                if (oldHeroData.SkinList != null)
+                {
+                    for (int k = 0; k < oldHeroData.SkinCnt; k++)
+                    {
+                        var oldSkin = oldHeroData.SkinList[k];
+                        if (oldSkin.SkinID == newSkin.SkinID)
+                        {
+                            foundOldSkin = true;
+                            // 濡傛灉鏃ф暟鎹腑璇ョ毊鑲ゆ湭婵�娲� (State == 0)锛岀幇鍦ㄦ縺娲讳簡锛岀畻浣滆幏寰楁柊鐨偆
+                            if (oldSkin.State == 0)
+                            {
+                                isNewlyAcquired = true;
+                            }
+                            break; 
+                        }
+                    }
+                }
+
+                // 濡傛灉鏃ф灏嗘暟鎹噷鍘嬫牴娌℃湁杩欎釜鐨偆鐨勬暟鎹紙鐜板湪鏄縺娲荤姸鎬侊級锛屼篃绠椾綔鑾峰緱鏂扮毊鑲�
+                if (!foundOldSkin)
+                {
+                    isNewlyAcquired = true;
+                }
+            }
+
+            // 濡傛灉鏈�缁堝垽瀹氫负鈥滃叏鏂拌幏寰椻�濈殑鐨偆锛屽垯瑙﹀彂浜嬩欢
+            if (isNewlyAcquired)
+            {
+                OnNewSkinAcquired?.Invoke(heroID, (int)newSkin.SkinID);
+            }
+        }
+    }
 
     // public int GetHeroCollectBookPer()
     // {

--
Gitblit v1.8.0