From 5f4500fe393e362d51cc4f444c2bb2e8c04ed86d Mon Sep 17 00:00:00 2001
From: client_linchunjie <461730578@qq.com>
Date: 星期四, 27 六月 2019 18:31:15 +0800
Subject: [PATCH] 7625 子 【主干】新增商店红点 / 【前端】【主干】新增商店红点

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

diff --git a/System/Store/StoreModel.cs b/System/Store/StoreModel.cs
index c99c2cc..128a457 100644
--- a/System/Store/StoreModel.cs
+++ b/System/Store/StoreModel.cs
@@ -30,6 +30,8 @@
 [XLua.CSharpCallLua]
 public class StoreModel : Model, IBeforePlayerDataInitialize, IAfterPlayerDataInitialize, IPlayerLoginOk, ISwitchAccount
 {
+    Dictionary<int, List<int>> storeAlchemyStudyItemShopIds = new Dictionary<int, List<int>>();
+
     public int[] normalBuyCoinsTypes { get; private set; }
     public string UNIONSTORESAVE_KEY { get; private set; }
     public string MUSTBUYSAVE_KEY { get; private set; }
@@ -50,7 +52,7 @@
 
     RuneModel runeModel { get { return ModelCenter.Instance.GetModel<RuneModel>(); } }
     PackModel packModel { get { return ModelCenter.Instance.GetModel<PackModel>(); } }
-    
+    AlchemyModel alchemyModel { get { return ModelCenter.Instance.GetModel<AlchemyModel>(); } }
 
     private bool isUpdatePlayerLv;
 
@@ -69,6 +71,7 @@
         storeTrailerLv = int.Parse(mallPush.Numerical1);
 
         MainPositionTween.switchFunctionStateEvent += OnMoveTopPart;
+        alchemyModel.alchemyStateRefresh += AlchemyStateRefresh;
     }
 
     public void OnBeforePlayerDataInitialize()
@@ -122,6 +125,7 @@
         UpdateCanBuyRedpoint();
         UpdateMustBuyRedpoint();
         UpdatePetAndMountPutAwayRedpoint();
+        UpdateAlchemyStudyItemRedpoint();
         isLogin = false;
     }
 
@@ -133,6 +137,12 @@
     public override void UnInit()
     {
         MainPositionTween.switchFunctionStateEvent -= OnMoveTopPart;
+        alchemyModel.alchemyStateRefresh -= AlchemyStateRefresh;
+    }
+
+    private void AlchemyStateRefresh()
+    {
+        UpdateAlchemyStudyItemRedpoint();
     }
 
     public void RefreshMysteryShop()
@@ -239,6 +249,17 @@
                         }
                     }
                     storePushDict.Add(pushType, shopIdlist);
+                }
+            }
+
+            if (!string.IsNullOrEmpty(storeRedRules.Numerical3))
+            {
+                var json = JsonMapper.ToObject(storeRedRules.Numerical3);
+                foreach (var typeKey in json.Keys)
+                {
+                    var type = int.Parse(typeKey);
+                    storeAlchemyStudyItemShopIds.Add(type,
+                        new List<int>(JsonMapper.ToObject<int[]>(json[typeKey].ToJson())));
                 }
             }
         }
@@ -718,6 +739,7 @@
         UpdateCanBuyRedpoint();
         UpdateMustBuyRedpoint();
         UpdatePetAndMountPutAwayRedpoint();
+        UpdateAlchemyStudyItemRedpoint();
     }
 
     private void RefreshPlayerData(PlayerDataType type)
@@ -732,10 +754,15 @@
             case PlayerDataType.GoldPaper:
                 UpdateFreeShopRedpoint();
                 UpdateCanBuyRedpoint();
+                UpdateAlchemyStudyItemRedpoint();
+                break;
+            case PlayerDataType.UnionLiven:
+                UpdateAlchemyStudyItemRedpoint(8);
                 break;
             case PlayerDataType.FBHelpPoint:
                 UpdateFreeShopRedpoint();
                 UpdateCanBuyRedpoint();
+                UpdateAlchemyStudyItemRedpoint();
                 break;
         }
     }
@@ -747,7 +774,7 @@
         {
             ControllerRedPoint();
         }
-
+        UpdateAlchemyStudyItemRedpoint(8);
     }
 
     private void RefreshServerHour()
@@ -771,6 +798,8 @@
         {
             PlayerPrefs.DeleteKey(UNIONSTORESAVE_KEY);
         }
+
+        UpdateAlchemyStudyItemRedpoint(8);
     }
 
     public event Action RefreshBuyShopLimitEvent;
@@ -815,6 +844,7 @@
             UpdateCanBuyRedpoint();
             UpdateMustBuyRedpoint();
             UpdatePetAndMountPutAwayRedpoint();
+            UpdateAlchemyStudyItemRedpoint();
         }
         if (RefreshBuyShopLimitEvent != null)
             RefreshBuyShopLimitEvent();
@@ -1076,9 +1106,11 @@
                 UpdateCanBuyRedpoint();
                 UpdateMustBuyRedpoint();
                 UpdatePetAndMountPutAwayRedpoint();
+                UpdateAlchemyStudyItemRedpoint();
                 break;
             case FuncOpenEnum.BlastFurnace:
                 ControllerRedPoint();
+                UpdateAlchemyStudyItemRedpoint();
                 break;
         }
     }
@@ -1188,7 +1220,7 @@
 
     public void ControllerRedPoint(bool isLook = false)
     {
-        MainRedDot.Instance.fairyStoreRedPoint.state = RedPointState.None;
+        fairyStoreRemindRedpoint.state = RedPointState.None;
         if (!ModelCenter.Instance.GetModel<FairyModel>().fairyStoreOpen
             || !FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.BlastFurnace))
         {
@@ -1200,13 +1232,13 @@
         {
             if (CheckIsBuyNewItem(familyLv))
             {
-                MainRedDot.Instance.fairyStoreRedPoint.state = RedPointState.Simple;
+                fairyStoreRemindRedpoint.state = RedPointState.Simple;
                 return;
             }
 
             if (CheckIsNewMonth())
             {
-                MainRedDot.Instance.fairyStoreRedPoint.state = RedPointState.Simple;
+                fairyStoreRemindRedpoint.state = RedPointState.Simple;
                 return;
             }
         }
@@ -1223,12 +1255,16 @@
     public const int StoreFunc3_RedKey = 2203;
     public const int StoreFunc4_RedKey = 2204;
     public const int StoreFunc5_RedKey = 2205;
+    public const int StoreFunc8_RedKey = 2208;
+    public const int FairyStoreRemind_RedKey = 107010601;
     public Redpoint storeFuncPoint = new Redpoint(StoreFunc_RedKey);
     public Redpoint storeFunc1Point = new Redpoint(StoreFunc_RedKey, StoreFunc1_RedKey);
     public Redpoint storeFunc2Point = new Redpoint(StoreFunc_RedKey, StoreFunc2_RedKey);
     public Redpoint storeFunc3Point = new Redpoint(StoreFunc_RedKey, StoreFunc3_RedKey);
     public Redpoint storeFunc4Point = new Redpoint(StoreFunc_RedKey, StoreFunc4_RedKey);
     public Redpoint storeFunc5Point = new Redpoint(StoreFunc_RedKey, StoreFunc5_RedKey);
+    public Redpoint storeFunc8Point = new Redpoint(MainRedDot.FAIRYStore_REDPOINT_KEY3, StoreFunc8_RedKey);
+    public Redpoint fairyStoreRemindRedpoint = new Redpoint(MainRedDot.FAIRYStore_REDPOINT_KEY3, FairyStoreRemind_RedKey);
     public Dictionary<int, Redpoint> shopRedDict = new Dictionary<int, Redpoint>();
     public void SetShopRedpoint()
     {
@@ -1264,6 +1300,11 @@
                 case 5:
                     redKey = StoreFunc5_RedKey * 10000 + storeConfig.ID;
                     redpoint = new Redpoint(StoreFunc5_RedKey, redKey);
+                    shopRedDict.Add(storeConfig.ID, redpoint);
+                    break;
+                case 8:
+                    redKey = StoreFunc8_RedKey * 10000 + storeConfig.ID;
+                    redpoint = new Redpoint(StoreFunc8_RedKey, redKey);
                     shopRedDict.Add(storeConfig.ID, redpoint);
                     break;
             }
@@ -1363,6 +1404,101 @@
         }
     }
 
+    public void UpdateAlchemyStudyItemRedpoint()
+    {
+        foreach (var shopType in storeAlchemyStudyItemShopIds.Keys)
+        {
+            UpdateAlchemyStudyItemRedpoint(shopType);
+        }
+    }
+
+    public void UpdateAlchemyStudyItemRedpoint(int shopType)
+    {
+        if (!storeAlchemyStudyItemShopIds.ContainsKey(shopType))
+        {
+            return;
+        }
+        var shopIds = storeAlchemyStudyItemShopIds[shopType];
+        if (showStoreTypeDict.ContainsKey(shopType))
+        {
+            var shopDatas = showStoreTypeDict[shopType];
+            foreach (var shopId in shopIds)
+            {
+                bool redable = false;
+
+                if (FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Store))
+                {
+                    var shopData = shopDatas.Find((x) =>
+                    {
+                        return x.shopId == shopId;
+                    });
+                    if (shopData != null)
+                    {
+                        var storeConfig = shopData.storeConfig;
+                        var count = 0;
+                        switch (shopType)
+                        {
+                            case 5:
+                                if (!TryGetIsSellOut(storeConfig, out count))
+                                {
+                                    if (UIHelper.GetMoneyCnt(storeConfig.MoneyType) >= (ulong)storeConfig.MoneyNumber)
+                                    {
+                                        redable = IsSatisfyStudyAlchemy(storeConfig.ItemID);
+                                    }
+                                }
+                                break;
+                            case 8:
+                                if (TryGetIsSellOut(storeConfig, out count))
+                                {
+                                    break;
+                                }
+                                if (PlayerDatas.Instance.baseData.FamilyId == 0)
+                                {
+                                    break;
+                                }
+                                if (storeConfig.VIPLV.Length > 0
+                                    && PlayerDatas.Instance.baseData.VIPLv < storeConfig.VIPLV[0])
+                                {
+                                    break;
+                                }
+                                if (PlayerDatas.Instance.fairyData.fairy.FamilyLV < storeConfig.LimitValue)
+                                {
+                                    break;
+                                }
+                                if (!MoneyIsEnough(storeConfig.MoneyType, (ulong)storeConfig.MoneyNumber))
+                                {
+                                    break;
+                                }
+                                redable = IsSatisfyStudyAlchemy(storeConfig.ItemID);
+                                break;
+                        }
+                    }
+                }
+
+                if (shopRedDict.ContainsKey(shopId))
+                {
+                    shopRedDict[shopId].state = redable ? RedPointState.Simple : RedPointState.None;
+                }
+            }
+        }
+    }
+
+    bool IsSatisfyStudyAlchemy(int itemId)
+    {
+        var alchemyModel = ModelCenter.Instance.GetModel<AlchemyModel>();
+        var alchemyId = 0;
+        if (alchemyModel.TryGetAlchemyByStudyMaterial(itemId, out alchemyId))
+        {
+            if (!alchemyModel.IsGraspRecipe(alchemyId))
+            {
+                var error = 0;
+                alchemyModel.TryLearn(alchemyId, out error);
+                return error == 1;
+            }
+        }
+        return false;
+    }
+
     public void ClearMustBuyRedpoint(StoreConfig storeConfig)
     {
         int type = 0;

--
Gitblit v1.8.0