From feeceecc1252fd472a7027fc2049cd95816ea162 Mon Sep 17 00:00:00 2001
From: client_Hale <339726288@qq.com>
Date: 星期五, 19 四月 2019 17:32:31 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.0.87:10010/r/snxxz_scripts

---
 System/Alchemy/AlchemyModel.cs |  201 ++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 192 insertions(+), 9 deletions(-)

diff --git a/System/Alchemy/AlchemyModel.cs b/System/Alchemy/AlchemyModel.cs
index d0939db..18c9077 100644
--- a/System/Alchemy/AlchemyModel.cs
+++ b/System/Alchemy/AlchemyModel.cs
@@ -10,6 +10,9 @@
         Dictionary<int, AlchemyCount> m_AlchemyCounts = new Dictionary<int, AlchemyCount>();
         Dictionary<int, int> m_AlchemyQualityLucks = new Dictionary<int, int>();
         Dictionary<int, List<Item>> m_AlchemyMaterials = new Dictionary<int, List<Item>>();
+        Dictionary<int, AlchemyDrugUseLimit> m_AlchemyDrugUseLimits = new Dictionary<int, AlchemyDrugUseLimit>();
+        List<int> m_AlchemyDrugs = new List<int>();
+        List<int> m_AlchemyDrugQualitys = new List<int>();
 
         int m_SelectQuality = 0;
         public int selectQuality
@@ -56,6 +59,7 @@
         public event Action selectQualityRefresh;
         public event Action selectAlchemyRefresh;
         public event Action alchemyStateRefresh;
+        public event Action alchemyDrugUseRefresh;
 
         PackModel packModel { get { return ModelCenter.Instance.GetModel<PackModel>(); } }
 
@@ -69,12 +73,20 @@
             m_AlchemyTimes.Clear();
             stoveLevel = 0;
             stoveExp = 0;
+            foreach (var item in m_AlchemyDrugUseLimits.Values)
+            {
+                item.SetTimes(0, 0);
+            }
             isServerPrepare = false;
         }
 
         public void OnPlayerLoginOk()
         {
             isServerPrepare = true;
+        }
+
+        public override void UnInit()
+        {
         }
 
         void ParseConfig()
@@ -139,6 +151,25 @@
                     }
                 }
             }
+
+            {
+                var configs = AttrFruitConfig.GetValues();
+                foreach (var config in configs)
+                {
+                    if (config.FuncID == 2)
+                    {
+                        m_AlchemyDrugs.Add(config.ID);
+                        var itemConfig = ItemConfig.Get(config.ID);
+                        if (!m_AlchemyDrugQualitys.Contains(itemConfig.LV))
+                        {
+                            m_AlchemyDrugQualitys.Add(itemConfig.LV);
+                        }
+                        m_AlchemyDrugUseLimits.Add(config.ID, new AlchemyDrugUseLimit(config.ID));
+                    }
+                }
+
+                m_AlchemyDrugQualitys.Sort();
+            }
         }
 
         public bool TryGetAlchemyStartTime(int alchemyId, out uint tick)
@@ -165,6 +196,11 @@
         public bool TryGetAlchemyMaterials(int alchemyId, out List<Item> items)
         {
             return m_AlchemyMaterials.TryGetValue(alchemyId, out items);
+        }
+
+        public bool TryGetAlchemyUseLimit(int id,out AlchemyDrugUseLimit drugUseLimit)
+        {
+            return m_AlchemyDrugUseLimits.TryGetValue(id, out drugUseLimit);
         }
 
         public float GetAlchemySuccRate(int alchemyId)
@@ -204,6 +240,44 @@
                 var startTime = TimeUtility.GetTime(tick);
                 var seconds = (int)(config.NeedTime - (float)(TimeUtility.ServerNow - startTime).TotalSeconds);
                 return seconds > 0 ? 1 : 2;
+            }
+            return 0;
+        }
+
+        public ICollection<int> GetDrugQualitys()
+        {
+            return m_AlchemyDrugQualitys;
+        }
+
+        public ICollection<int> GetAlchemyDrugs()
+        {
+            return m_AlchemyDrugs;
+        }
+
+        public int GetAlchemyDrugState(int id)//0-鍙湇鐢ㄤ腹鑽� 1-杈惧埌涓婇檺 2-娌℃湁涓硅嵂 3-娌℃湁鎻愬崌绌洪棿
+        {
+            AlchemyDrugUseLimit drugUseLimit;
+            if (TryGetAlchemyUseLimit(id, out drugUseLimit))
+            {
+                if (!drugUseLimit.IsReachLimit())
+                {
+                    var count = packModel.GetItemCountByID(PackType.Item, id);
+                    return count > 0 ? 0 : 2;
+                }
+                else
+                {
+                    return drugUseLimit.CanUpgradeLimit() ? 1 : 3;
+                }
+            }
+            return int.MaxValue;
+        }
+
+        public int GetAlchemyDrugUseLimit(int id)
+        {
+            AlchemyDrugUseLimit drugUseLimit;
+            if (TryGetAlchemyUseLimit(id, out drugUseLimit))
+            {
+                return drugUseLimit.GetUseLimit();
             }
             return 0;
         }
@@ -264,14 +338,6 @@
 
             if (package.ItemID != 0)
             {
-                if (package.ItemCnt > 0)//鐐间腹鎴愬姛
-                {
-                    
-                }
-                else//鐐间腹澶辫触
-                {
-
-                }
                 if (isServerPrepare)
                 {
                     if (!NewBieCenter.Instance.inGuiding && WindowCenter.Instance.IsOpen<AlchemyBaseWin>())
@@ -292,8 +358,22 @@
             }
         }
 
-        public override void UnInit()
+        public void ReceivePackage(HA339_tagMCAttrFruitEatCntList vNetData)
         {
+            for (int i = 0; i < vNetData.count; i++)
+            {
+                var data = vNetData.EatCntList[i];
+                AlchemyDrugUseLimit drugUseLimit;
+                if (TryGetAlchemyUseLimit((int)data.ItemID, out drugUseLimit))
+                {
+                    drugUseLimit.SetTimes(data.EatCnt, (int)data.AddItemCnt);
+                }
+            }
+
+            if (alchemyDrugUseRefresh != null)
+            {
+                alchemyDrugUseRefresh();
+            }
         }
     }
 
@@ -314,5 +394,108 @@
             max = 1,
         };
     }
+
+    public class AlchemyDrugUseLimit
+    {
+        public readonly int id;
+        public readonly Item addItem;
+        public readonly int addLimitPerTimes;
+        Dictionary<int, int> realmLimits = new Dictionary<int, int>();
+
+        public int addTimes { get; private set; }
+
+        public int eatTimes { get; private set; }
+
+        PackModel packModel { get { return ModelCenter.Instance.GetModel<PackModel>(); } }
+
+        public AlchemyDrugUseLimit(int id)
+        {
+            this.id = id;
+            var config = AttrFruitConfig.Get(id);
+            foreach (var realmLimit in config.MaxUseCnt)
+            {
+                realmLimits.Add(realmLimit.x, realmLimit.y);
+            }
+            if (!string.IsNullOrEmpty(config.AddItemMaxCnt))
+            {
+                var array = LitJson.JsonMapper.ToObject<int[]>(config.AddItemMaxCnt);
+                addItem = new Item()
+                {
+                    id = array[0],
+                    count = array[1],
+                };
+                addLimitPerTimes = array[2];
+            }
+        }
+
+        public void SetTimes(int eatTimes, int addTimes)
+        {
+            this.eatTimes = eatTimes;
+            this.addTimes = addTimes / (addItem.count <= 0 ? 1 : addItem.count);
+        }
+
+        public int GetUseLimit()
+        {
+            var times = 0;
+            var realmLevel = PlayerDatas.Instance.baseData.realmLevel;
+            foreach (var level in realmLimits.Keys)
+            {
+                if (realmLevel >= level)
+                {
+                    times = realmLimits[level];
+                }
+            }
+            if (addItem.id != 0)
+            {
+                times += addTimes * addLimitPerTimes;
+            }
+            return times;
+        }
+
+        public int GetRealmLimit(int realmLevel)
+        {
+            var limit = 0;
+            foreach (var level in realmLimits.Keys)
+            {
+                if (realmLevel >= level)
+                {
+                    limit = realmLimits[level];
+                }
+            }
+            return limit;
+        }
+
+        public bool IsReachLimit()
+        {
+            var limit = GetUseLimit();
+            return eatTimes >= limit;
+        }
+
+        public bool CanUpgradeLimit()
+        {
+            if (addItem.id != 0)
+            {
+                return true;
+            }
+            if (GetNextUpgradeRealm() > 0)
+            {
+                return true;
+            }
+            return false;
+        }
+
+        public int GetNextUpgradeRealm()
+        {
+            var realmLevel = PlayerDatas.Instance.baseData.realmLevel;
+            foreach (var level in realmLimits.Keys)
+            {
+                if (realmLevel < level)
+                {
+                    return level;
+                }
+            }
+            return 0;
+        }
+    }
 }
 

--
Gitblit v1.8.0