From 83a5355c80bee53c88c83932a9015ec4384d7d41 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期四, 12 十二月 2019 00:43:43 +0800
Subject: [PATCH] 8354 商城优化

---
 System/Store/StoreModel.cs |  141 +++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 136 insertions(+), 5 deletions(-)

diff --git a/System/Store/StoreModel.cs b/System/Store/StoreModel.cs
index 2def97e..4fea323 100644
--- a/System/Store/StoreModel.cs
+++ b/System/Store/StoreModel.cs
@@ -48,6 +48,24 @@
 
     public int fairyStoreJumpShopId = 0;
 
+    int m_SelectClassifyId = 0;
+    public int selectSecondType
+    {
+        get { return m_SelectClassifyId; }
+        set
+        {
+            if (m_SelectClassifyId != value)
+            {
+                m_SelectClassifyId = value;
+                if (selectClassifyRefresh != null)
+                {
+                    selectClassifyRefresh();
+                }
+            }
+        }
+    }
+
+    public event Action selectClassifyRefresh;
     public event Action mysteryShopRefreshEvent;
 
     RuneModel runeModel { get { return ModelCenter.Instance.GetModel<RuneModel>(); } }
@@ -79,6 +97,7 @@
         isUpdatePlayerLv = false;
         IsMustBuyDay = false;
         isLogin = true;
+        sortStoreSecondType = true;
         ClearJump();
         StageLoad.Instance.onStageLoadFinish -= OnStageLoadFinish;
         FuncOpen.Instance.OnFuncStateChangeEvent -= FuncStateChange;
@@ -359,9 +378,8 @@
     {
         int sort1 = start.storeConfig.ShopSort;
         int sort2 = end.storeConfig.ShopSort;
-        if (sort1.CompareTo(sort2) != 0) return sort1.CompareTo(sort2);
 
-        return 0;
+        return sort1.CompareTo(sort2);
     }
 
     public class StoreData
@@ -376,11 +394,15 @@
 
     private Dictionary<int, List<StoreData>> showStoreTypeDict = new Dictionary<int, List<StoreData>>();
 
+    private Dictionary<int, Dictionary<int, List<StoreData>>> showStoreSecondTypeDict = new Dictionary<int, Dictionary<int, List<StoreData>>>();
+
+
+    // 鏂拌鍒欏垎浜岀骇鏍囩锛屾鍑芥暟淇濈暀锛屽彟澧炲姞UpdateShowStoreEx鍑芥暟
     public void UpdateShowStore()
     {
         showStoreTypeDict.Clear();
         int playeLv = PlayerDatas.Instance.baseData.LV;
-        int vipLevel = PlayerDatas.Instance.baseData.VIPLv;
+        //int vipLevel = PlayerDatas.Instance.baseData.VIPLv;
         foreach (var type in storeTypeDict.Keys)
         {
             var storeDatas = storeTypeDict[type];
@@ -390,7 +412,7 @@
                 for (int i = 0; i < storeDatas.Count; i++)
                 {
                     var storeData = storeDatas[i];
-                    bool isReachLv = playeLv >= storeData.storeConfig.LV ? true : false;
+                    bool isReachLv = playeLv >= storeData.storeConfig.LVSee ? true : false; 
                     bool isReachSpec = true;
                     switch (storeData.storeConfig.ShopType)
                     {
@@ -430,6 +452,78 @@
                 showStoreTypeDict.Add(type, showStoreDatas);
             }
         }
+        UpdateShowStoreEx();
+    }
+
+    // 鍟嗗煄鍒嗕簩绾ф爣绛�
+    public void UpdateShowStoreEx()
+    {
+        sortStoreSecondType = true;
+        showStoreSecondTypeDict.Clear();
+        foreach (var type in showStoreTypeDict.Keys)
+        {
+            if (!showStoreSecondTypeDict.ContainsKey(type))
+                showStoreSecondTypeDict[type] = new Dictionary<int, List<StoreData>>();
+
+            foreach (var storeData in showStoreTypeDict[type])
+            {
+
+                foreach (var secondType in storeData.storeConfig.SecondType)
+                {
+                    if (!showStoreSecondTypeDict[type].ContainsKey(secondType))
+                        showStoreSecondTypeDict[type][secondType] = new List<StoreData>();
+
+                    showStoreSecondTypeDict[type][secondType].Add(storeData);
+                }
+
+            }
+        }
+
+    }
+
+    bool sortStoreSecondType = true;
+
+    public void SortStoreSecondType()
+    {
+        //ArrayList lst = new ArrayList(showStoreSecondTypeDict.Keys);
+        if (!sortStoreSecondType)
+            return;
+
+        foreach (var type in showStoreSecondTypeDict.Keys)
+        {
+            foreach (var secondType in showStoreSecondTypeDict[type].Keys)
+            {
+                var storeList = showStoreSecondTypeDict[type][secondType];
+                storeList.Sort(CompareSecondShop);
+            }
+        }
+
+        sortStoreSecondType = false;
+    }
+
+    private bool IsSellOut(StoreData storeData)
+    {
+        int remainNum = 0;
+        if (TryGetIsSellOut(storeData.storeConfig, out remainNum))
+            return true;
+
+        if (storeData.storeConfig.TheOnlyShop == 1 && CheckTheOnlyShopSellOut(storeData.shopId))
+            return true;
+
+        return false;
+    }
+
+    private int CompareSecondShop(StoreData start, StoreData end)
+    {
+        bool isSellOut1 = IsSellOut(start);
+        bool isSellOut2 = IsSellOut(end);
+
+        if (isSellOut1 != isSellOut2)
+            return isSellOut1.CompareTo(isSellOut2);
+        int sort1 = start.storeConfig.ShopSort;
+        int sort2 = end.storeConfig.ShopSort;
+
+        return sort1.CompareTo(sort2);
     }
 
     /// <summary>
@@ -486,6 +580,41 @@
         }
 
         return results;
+    }
+
+    // 鑾峰彇浜岀骇鏍囩鍟嗗搧
+    public List<StoreData> TryGetStoreDatasBySecondType(int type, int secondType)
+    {
+        if (!showStoreSecondTypeDict.ContainsKey(type))
+            return null;
+
+        if (!showStoreSecondTypeDict[type].ContainsKey(secondType))
+            return null;
+
+        SortStoreSecondType();
+        return showStoreSecondTypeDict[type][secondType];
+    }
+
+    // 鑾峰緱浜岀骇鏍囩鐨勭涓�涓爣绛剧被鍨�
+    public int GetFirstStoreSecondType(int type)
+    {
+        if (!showStoreSecondTypeDict.ContainsKey(type))
+            return 0;
+
+        ArrayList sortList = new ArrayList(showStoreSecondTypeDict[type].Keys);
+        sortList.Sort();
+        return (int)sortList[0];
+    }
+
+    // 鑾峰緱浜岀骇鏍囩鐨勭涓�涓爣绛剧被鍨�
+    public ArrayList GetStoreSecondTypeList(int type)
+    {
+        if (!showStoreSecondTypeDict.ContainsKey(type))
+            return null;
+
+        ArrayList sortList = new ArrayList(showStoreSecondTypeDict[type].Keys);
+        sortList.Sort();
+        return sortList;
     }
 
     public StoreData GetStoreData(int shopId)
@@ -724,9 +853,10 @@
         return remainSecond;
     }
 
-
+    int refreshTime = 0;
     private void UpdateSecond()
     {
+        if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Store)) return;
         if (isUpdatePlayerLv)
         {
             UpdatePlayerLv();
@@ -851,6 +981,7 @@
 
         if (!isLogin)
         {
+            sortStoreSecondType = true;
             UpdateShowStore();
             UpdateFreeShopRedpoint();
             UpdateCanBuyRedpoint();

--
Gitblit v1.8.0