From 09bc892c7283df8757a07b646d5af21ddaa263d1 Mon Sep 17 00:00:00 2001
From: lcy <1459594991@qq.com>
Date: 星期四, 06 十一月 2025 18:22:34 +0800
Subject: [PATCH] 164 天子的考验-客户端

---
 Main/System/KnapSack/PackManager.cs |  185 +++++++++++++++++++++++++++++++++-------------
 1 files changed, 133 insertions(+), 52 deletions(-)

diff --git a/Main/System/KnapSack/PackManager.cs b/Main/System/KnapSack/PackManager.cs
index d60e762..a66d931 100644
--- a/Main/System/KnapSack/PackManager.cs
+++ b/Main/System/KnapSack/PackManager.cs
@@ -36,7 +36,8 @@
     public Dictionary<int, int> PackMaxCountDict = new Dictionary<int, int>(); //鑳屽寘绫诲瀷锛氳儗鍖呮牸瀛愭渶澶ф暟閲�
     public int initBagGridCount { get; private set; } //鍒濆鐗╁搧鑳屽寘鏍煎瓙鏁�
     public int[] itemPackSortTyps { get; private set; }    //鑳屽寘鐗╁搧鐨勬寜绫诲瀷鎺掑簭
-    public List<string> composeItemGuidList = new List<string>();  //鍚堟垚鍒楄〃鐗╁搧guid
+    public List<int> composeItemIDList = new List<int>();  //鍚堟垚鍒楄〃鐗╁搧ID
+    List<int> canComposeItemIDList = new List<int>(); //鏁伴噺瓒冲鍚堟垚鍒楄〃鐗╁搧ID 鎺掑簭鍒ゆ柇鐢�
 
     //寮�鏍煎瓙
     public Dictionary<int, int> openGirdMoneyDict = new Dictionary<int, int>(); //鑳屽寘绫诲瀷锛氭秷鑰楄揣甯佺被鍨�
@@ -49,7 +50,8 @@
     string RoleEquipLocalSave = "";
     List<int> LocalSavePlaceArray { get; set; }
     Dictionary<int, List<int>> sharedUseCountItemDict { get; set; }
-    bool isUpdatePlayerLv = false;
+    // bool isUpdatePlayerLv = false;
+    bool isItemChange = false;  //寤惰繜澶勭悊鐗╁搧鍙樺寲
 
     public int[] gameCashShow;  //浠i噾鍒哥壒娈婃樉绀� 闄や互100
     public int[] autoUseItemIDs;
@@ -102,7 +104,7 @@
     public void OnBeforePlayerDataInitialize()
     {
         GlobalTimeEvent.Instance.secondEvent -= UpdateSecond;
-        PlayerDatas.Instance.playerDataRefreshEvent -= UpdatePlayerLv;
+        // PlayerDatas.Instance.playerDataRefreshEvent -= UpdatePlayerLv;
         LocalSave.DeleteKey(RecordKnapsackTitle);
         playerPackDict.Clear();
         itemDayUseCntDict.Clear();
@@ -127,8 +129,8 @@
             LocalSavePlaceArray = null;
         }
         GlobalTimeEvent.Instance.secondEvent += UpdateSecond;
-        PlayerDatas.Instance.playerDataRefreshEvent += UpdatePlayerLv;
-        isUpdatePlayerLv = true;
+        // PlayerDatas.Instance.playerDataRefreshEvent += UpdatePlayerLv;
+        // isUpdatePlayerLv = true;
         FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
     }
 
@@ -192,8 +194,8 @@
         {
             refrechPackEvent(packType);
         }
-
-        UpdatePackRedpoint(packType);
+        
+        DelayNotifyPackChange(packType);
     }
 
     public void UpdateItem(H0704_tagRolePackRefresh serverItem)
@@ -236,8 +238,8 @@
         //         ItemOperateUtility.Instance.ShowPutOnNewEquipRemind(itemInfo.itemId);
         //     }
         // }
-
-        UpdatePackRedpoint(type);
+        
+        DelayNotifyPackChange(type);
         //EquipDecomRedCtrl();
         AutoUseItem(itemInfo.itemId, serverItem.ItemGUID);
     }
@@ -302,7 +304,8 @@
             gridRefreshEvent(type);
         }
 
-        UpdatePackRedpoint(type);
+        
+        DelayNotifyPackChange(type);
     }
 
     
@@ -329,6 +332,7 @@
 
             }
         }
+        DelayNotifyPackChange(type);
 
     }
 
@@ -382,7 +386,7 @@
 
         }
 
-        UpdatePackRedpoint(type);
+        DelayNotifyPackChange(type);
 
         if (GetItemByGuid(guid) == null)
         {
@@ -543,7 +547,8 @@
         else
 #endif
         {
-            path = AssetVersionUtility.GetAssetFilePath($"Config/{name}.ini");
+            //浠庢湇鍔$鎷疯礉鏄痠ni锛屾墦鍖呯敤txt缁熶竴澶勭悊
+            path = AssetVersionUtility.GetAssetFilePath($"Config/{name}.txt");
         }
 
         return File.ReadAllLines(path);
@@ -561,18 +566,19 @@
 
     private void UpdateSecond()
     {
-        if (isUpdatePlayerLv)
+        if (isItemChange)
         {
-            isUpdatePlayerLv = false;
+            isItemChange = false;
+            DelayRefreshItemPackEvent();
         }
     }
 
-    private void UpdatePlayerLv(PlayerDataType type)
-    {
-        if (type != PlayerDataType.LV) return;
+    // private void UpdatePlayerLv(PlayerDataType type)
+    // {
+    //     if (type != PlayerDataType.LV) return;
 
-        isUpdatePlayerLv = true;
-    }
+    //     isUpdatePlayerLv = true;
+    // }
 
     #endregion
 
@@ -870,48 +876,123 @@
         return useCnt;
     }
 
-    public void GotoWashAttributePoint(string guid)
-    {
-        // ItemModel itemModel = GetItemByGuid(guid);
-        // if (itemModel == null) return;
-
-        // WashAttrPointWin.itemModel = itemModel;
-        // WindowCenter.Instance.Open<WashAttrPointWin>();
-    }
 
     #region 绾㈢偣閫昏緫鍒ゆ柇
 
-    const int ITEMPACK_REDKEY = 102011003;
-    Redpoint redpointItemPack = new Redpoint(MainRedDot.RedPoint_BagFuncKey, ITEMPACK_REDKEY);
+    Redpoint redpointItemPack = new Redpoint(MainRedDot.RedPoint_MainPackKey, MainRedDot.RedPoint_BagFuncKey);
+    Redpoint redpointComposePack = new Redpoint(MainRedDot.RedPoint_MainPackKey, MainRedDot.RedPoint_ComposeFuncKey);
 
-
-    private void UpdatePackRedpoint(PackType type)
+    //寤惰繜閫氱煡鑳屽寘鍙樺寲锛岄伩鍏嶅湪鍚屼竴甯у唴澶氭閫氱煡
+    private void DelayNotifyPackChange(PackType type)
     {
-        var singlePack = GetSinglePack(type);
-        if (singlePack == null)
+        if (type == PackType.Item)
         {
-            return;
-        }
-
-        switch (type)
-        {
-            case PackType.Item:
-                if (singlePack.GetEmptyGridCount() <= 0)
-                {
-                    redpointItemPack.state = RedPointState.Full;
-                    //SysNotifyMgr.Instance.ShowTip("BagFull");
-                }
-                else
-                {
-                    redpointItemPack.state = RedPointState.None;
-                }
-
-                break;
-
+            isItemChange = true;
         }
     }
 
-    
+
+    void DelayRefreshItemPackEvent()
+    {
+        //鍚堟垚绾㈢偣
+        SinglePack singlePack = GetSinglePack(PackType.Item);
+        var items = singlePack.GetAllItems();
+
+        redpointComposePack.state = RedPointState.None;
+        foreach (var item in items.Values)
+        {
+            int makeID = ItemCompoundConfig.GetMakeIDByMaterial(item.itemId);
+            if (makeID != 0)
+            {
+                var config = ItemCompoundConfig.GetItemCompoundConfig(makeID);
+                var targetID = config.itemID;
+                var targetCnt = config.itemCount;
+                if (GetItemCountByID(PackType.Item, targetID) >= targetCnt)
+                {
+                    redpointComposePack.state = RedPointState.Simple;
+                    break;
+                }
+            }
+        }
+
+
+        //鑳屽寘绾㈢偣
+        if (singlePack.GetEmptyGridCount() <= 0)
+        {
+            redpointItemPack.state = RedPointState.Full;
+            SysNotifyMgr.Instance.ShowTip("BagFull");
+        }
+        else
+        {
+            redpointItemPack.state = RedPointState.None;
+
+            //鏃犳潯浠跺紑鍚殑瀹濈绾㈢偣
+            foreach (var item in items.Values)
+            {
+                var chestConfig = ChestsConfig.Get(item.itemId);
+                if (chestConfig != null && chestConfig.ExpendItemID == 0 && chestConfig.OpenMoney == 0)
+                {
+                    redpointItemPack.state = RedPointState.Simple;
+                    break;
+                }
+            }
+        }
+
+
+    }
+
+    public void RefreshItemComposeList()
+    {
+        //鏀堕泦鍚堟垚鐗╁搧
+        composeItemIDList.Clear();
+        canComposeItemIDList.Clear();
+
+        SinglePack singlePack = GetSinglePack(PackType.Item);
+        var items = singlePack.GetAllItems();
+
+        foreach (var item in items.Values)
+        {
+            var makeID = ItemCompoundConfig.GetMakeIDByMaterial(item.itemId);
+            if (makeID != 0)
+            {
+                composeItemIDList.Add(makeID);
+
+                var config = ItemCompoundConfig.GetItemCompoundConfig(makeID);
+                var targetID = config.itemID;
+                var targetCnt = config.itemCount;
+                if (GetItemCountByID(PackType.Item, targetID) >= targetCnt)
+                {
+                    canComposeItemIDList.Add(makeID);
+                }
+            }
+        }
+
+        composeItemIDList.Sort(SortItemCompose);
+    }
+
+    int SortItemCompose(int itemIDA, int itemIDB)
+    {
+        // 鍚堟垚鏉愭枡澶熶笉澶�
+        var isEnoughA = canComposeItemIDList.Contains(itemIDA);
+        var isEnoughB = canComposeItemIDList.Contains(itemIDB);
+        if (isEnoughA != isEnoughB)
+        {
+            return isEnoughA ? -1 : 1;
+        }
+
+        var itemA = ItemConfig.Get(itemIDA);
+        var itemB = ItemConfig.Get(itemIDB);
+
+        var colorA = itemA.ItemColor;
+        var colorB = itemB.ItemColor;
+        if (colorA != colorB)
+        {
+            return colorB - colorA;
+        }
+
+        return itemA.ID - itemB.ID;
+    }
+
     #endregion
 
     #region 鏌ョ湅鏌愪釜浣嶇疆鐨勭墿鍝�

--
Gitblit v1.8.0