From c67274ce67055c6e0e6acf8bff9d9a59bb9a203e Mon Sep 17 00:00:00 2001
From: client_Wu Xijin <364452445@qq.com>
Date: 星期六, 13 四月 2019 11:33:49 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.0.87:10010/r/snxxz_scripts

---
 System/Role/ReikiRootModel.cs |  183 ++++++++++++++++++++++++++++++---------------
 1 files changed, 121 insertions(+), 62 deletions(-)

diff --git a/System/Role/ReikiRootModel.cs b/System/Role/ReikiRootModel.cs
index b2a8fa1..bf387f0 100644
--- a/System/Role/ReikiRootModel.cs
+++ b/System/Role/ReikiRootModel.cs
@@ -13,6 +13,7 @@
         Dictionary<int, int> m_MainReikiRoots = new Dictionary<int, int>();
         Dictionary<int, int> m_ReikiQualityMapColors;
         Dictionary<int, int> m_CacheReikiRootPoints = new Dictionary<int, int>();
+        Dictionary<int, Dictionary<int, int[]>> m_PromotePropertyValues = new Dictionary<int, Dictionary<int, int[]>>();
 
         public List<int> reikiRoots = new List<int>();
 
@@ -117,6 +118,18 @@
             reikiRoots.Add((int)PropertyType.Fire);
             reikiRoots.Add((int)PropertyType.Earth);
 
+            var configs = ReikiRootConfig.GetValues();
+            foreach (var _config in configs)
+            {
+                m_PromotePropertyValues.Add(_config.id, new Dictionary<int, int[]>());
+                var _json = LitJson.JsonMapper.ToObject(_config.promoteValue);
+                foreach (var _jobKey in _json.Keys)
+                {
+                    var job = int.Parse(_jobKey);
+                    m_PromotePropertyValues[_config.id].Add(job,
+                        LitJson.JsonMapper.ToObject<int[]>(_json[_jobKey].ToJson()));
+                }
+            }
         }
 
         public int GetReikiRootQuality(int id, int point)
@@ -168,72 +181,95 @@
                 return null;
             }
 
-            m_CacheReikiRootPoints.Clear();
-            foreach (var id in m_ReikiRootPoints.Keys)
-            {
-                m_CacheReikiRootPoints[id] = m_ReikiRootPoints[id];
-            }
+            //m_CacheReikiRootPoints.Clear();
+            //foreach (var id in m_ReikiRootPoints.Keys)
+            //{
+            //    m_CacheReikiRootPoints[id] = m_ReikiRootPoints[id];
+            //}
 
             var recommends = new List<ReikiRootRecommend>();
             var job = PlayerDatas.Instance.baseData.Job;
-            var remainPoint = point;
-            var currentMaxQuality = 1;
 
-            foreach (var id in reikiRoots)
+            if (m_RecommendProportion.ContainsKey(job))
             {
-                var quality = GetReikiRootQuality(id);
-                if (quality >= currentMaxQuality)
+                var proportions = m_RecommendProportion[job];
+                var index = 0;
+                var surplusPoint = point;
+                foreach (var id in proportions.Keys)
                 {
-                    currentMaxQuality = quality;
+                    var recommendPoint = Mathf.Min(surplusPoint, (int)(point * proportions[id]));
+                    if (index == proportions.Keys.Count - 1)
+                    {
+                        recommendPoint = surplusPoint;
+                    }
+                    recommends.Add(new ReikiRootRecommend()
+                    {
+                        id = id,
+                        value = recommendPoint,
+                    });
+                    surplusPoint -= recommendPoint;
+                    index++;
                 }
             }
 
-            if (m_RecommendReikiRoots.ContainsKey(job))
-            {
-                var reikiRoots = m_RecommendReikiRoots[job];
-                while (remainPoint > 0)
-                {
-                    reikiRoots.Sort(QualityCompare);
-                    var id = reikiRoots[0];
-                    var quality = GetReikiRootQuality(id, m_CacheReikiRootPoints[id]);
-                    var addpoint = 0;
-                    if (quality >= maxQuality)
-                    {
-                        var proportions = m_RecommendProportion[job];
-                        foreach (var key in proportions.Keys)
-                        {
-                            addpoint = Mathf.RoundToInt(remainPoint * proportions[key]);
-                            recommends.Add(new ReikiRootRecommend()
-                            {
-                                id = key,
-                                value = addpoint,
-                            });
-                            if (!m_CacheReikiRootPoints.ContainsKey(key))
-                            {
-                                m_CacheReikiRootPoints.Add(key, 0);
-                            }
-                            m_CacheReikiRootPoints[key] += addpoint;
-                        }
-                        remainPoint = 0;
-                    }
-                    else
-                    {
-                        addpoint = Mathf.Min(remainPoint, GetCacheQualityRequrePoint(id,
-                            quality < currentMaxQuality ? currentMaxQuality : quality + 1));
-                        remainPoint -= addpoint;
-                        recommends.Add(new ReikiRootRecommend()
-                        {
-                            id = id,
-                            value = addpoint,
-                        });
-                        if (!m_CacheReikiRootPoints.ContainsKey(id))
-                        {
-                            m_CacheReikiRootPoints.Add(id, 0);
-                        }
-                        m_CacheReikiRootPoints[id] += addpoint;
-                    }
-                }
-            }
+            //var remainPoint = point;
+            //var currentMaxQuality = 1;
+
+            //foreach (var id in reikiRoots)
+            //{
+            //    var quality = GetReikiRootQuality(id);
+            //    if (quality >= currentMaxQuality)
+            //    {
+            //        currentMaxQuality = quality;
+            //    }
+            //}
+            //
+            //if (m_RecommendReikiRoots.ContainsKey(job))
+            //{
+            //    var reikiRoots = m_RecommendReikiRoots[job];
+            //    while (remainPoint > 0)
+            //    {
+            //        reikiRoots.Sort(QualityCompare);
+            //        var id = reikiRoots[0];
+            //        var quality = GetReikiRootQuality(id, m_CacheReikiRootPoints[id]);
+            //        var addpoint = 0;
+            //        if (quality >= maxQuality)
+            //        {
+            //            var proportions = m_RecommendProportion[job];
+            //            foreach (var key in proportions.Keys)
+            //            {
+            //                addpoint = Mathf.RoundToInt(remainPoint * proportions[key]);
+            //                recommends.Add(new ReikiRootRecommend()
+            //                {
+            //                    id = key,
+            //                    value = addpoint,
+            //                });
+            //                if (!m_CacheReikiRootPoints.ContainsKey(key))
+            //                {
+            //                    m_CacheReikiRootPoints.Add(key, 0);
+            //                }
+            //                m_CacheReikiRootPoints[key] += addpoint;
+            //            }
+            //            remainPoint = 0;
+            //        }
+            //        else
+            //        {
+            //            addpoint = Mathf.Min(remainPoint, GetCacheQualityRequrePoint(id,
+            //                quality < currentMaxQuality ? currentMaxQuality : quality + 1));
+            //            remainPoint -= addpoint;
+            //            recommends.Add(new ReikiRootRecommend()
+            //            {
+            //                id = id,
+            //                value = addpoint,
+            //            });
+            //            if (!m_CacheReikiRootPoints.ContainsKey(id))
+            //            {
+            //                m_CacheReikiRootPoints.Add(id, 0);
+            //            }
+            //            m_CacheReikiRootPoints[id] += addpoint;
+            //        }
+            //    }
+            //}
             return recommends;
         }
 
@@ -272,23 +308,28 @@
             }
             propertyDict[config.propertyPerPoint.x] += config.propertyPerPoint.y * point;
 
-            if (!propertyDict.ContainsKey(config.promoteProperty))
+            var job = PlayerDatas.Instance.baseData.Job;
+            var promotePropertyId = config.GetPromotePropertyId(job);
+
+            if (!propertyDict.ContainsKey(promotePropertyId))
             {
-                propertyDict.Add(config.promoteProperty, 0);
+                propertyDict.Add(promotePropertyId, 0);
             }
             var quality = GetReikiRootQuality(id, point);
-            propertyDict[config.promoteProperty] += GetQualityProperty(id, quality);
+            propertyDict[promotePropertyId] += GetQualityProperty(id, quality);
         }
 
         public int GetQualityProperty(int id, int quality)
         {
             var config = ReikiRootConfig.Get(id);
+            var job = PlayerDatas.Instance.baseData.Job;
+            var promoteValues = m_PromotePropertyValues[id][job];
             var value = 0;
-            for (int i = 0; i < config.promoteValue.Length; i++)
+            for (int i = 0; i < promoteValues.Length; i++)
             {
                 if (quality > i)
                 {
-                    value = config.promoteValue[i];
+                    value = promoteValues[i];
                 }
                 else
                 {
@@ -389,6 +430,24 @@
         public int id;
         public int value;
     }
+
+    public static class ReikiRootConfigUtil
+    {
+        public static int GetPromotePropertyId(this ReikiRootConfig config, int job)
+        {
+            if (config != null)
+            {
+                foreach (var item in config.promoteProperty)
+                {
+                    if (item.x == job)
+                    {
+                        return item.y;
+                    }
+                }
+            }
+            return 0;
+        }
+    }
 }
 
 

--
Gitblit v1.8.0