少年修仙传客户端代码仓库
client_linchunjie
2019-04-26 8804ac2cf4cfdbffa4bb2adb9fa8964a5cf86ade
3335 修改加点推荐逻辑
1个文件已修改
185 ■■■■■ 已修改文件
System/Role/ReikiRootModel.cs 185 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Role/ReikiRootModel.cs
@@ -9,8 +9,6 @@
        Dictionary<int, int> m_ReikiRootPoints = new Dictionary<int, int>();
        Dictionary<int, int> m_ReikiRootFreePoints = new Dictionary<int, int>();
        Dictionary<int, List<int>> m_RecommendReikiRoots = new Dictionary<int, List<int>>();
        Dictionary<int, Dictionary<int, float>> m_RecommendProportion = new Dictionary<int, Dictionary<int, float>>();
        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[]>>();
@@ -39,15 +37,6 @@
                        onCacheFreePointRefresh();
                    }
                }
            }
        }
        public int mainReikiRoot
        {
            get
            {
                var job = PlayerDatas.Instance.baseData.Job;
                return m_MainReikiRoots[job];
            }
        }
@@ -88,22 +77,7 @@
            foreach (var jobKey in json.Keys)
            {
                var job = int.Parse(jobKey);
                var _mainReikiRoot = 0;
                var _proportion = 0f;
                m_RecommendProportion.Add(job, new Dictionary<int, float>());
                foreach (var idKey in json[jobKey].Keys)
                {
                    var id = int.Parse(idKey);
                    var proportion = int.Parse(json[jobKey][idKey].ToString()) / 100f;
                    if (proportion > _proportion)
                    {
                        _mainReikiRoot = id;
                        _proportion = proportion;
                    }
                    m_RecommendProportion[job].Add(id, proportion);
                }
                m_MainReikiRoots.Add(job, _mainReikiRoot);
                m_RecommendReikiRoots.Add(job, new List<int>(m_RecommendProportion[job].Keys));
                m_RecommendReikiRoots.Add(job, new List<int>(LitJson.JsonMapper.ToObject<int[]>(json[jobKey].ToJson())));
            }
            var config = ReikiRootConfig.GetValues()[0];
@@ -181,95 +155,81 @@
                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;
            if (m_RecommendProportion.ContainsKey(job))
            if (m_RecommendReikiRoots.ContainsKey(job))
            {
                var proportions = m_RecommendProportion[job];
                var index = 0;
                var reikis = m_RecommendReikiRoots[job];
                var surplusPoint = point;
                foreach (var id in proportions.Keys)
                while (surplusPoint > 0)
                {
                    var recommendPoint = Mathf.Min(surplusPoint, (int)(point * proportions[id]));
                    if (index == proportions.Keys.Count - 1)
                    reikis.Sort((int x, int y) =>
                    {
                        recommendPoint = surplusPoint;
                    }
                    recommends.Add(new ReikiRootRecommend()
                    {
                        id = id,
                        value = recommendPoint,
                        var x_point = GetReikiRootCachePoint(x);
                        var y_point = GetReikiRootCachePoint(y);
                        if (x_point != y_point)
                        {
                            return x_point.CompareTo(y_point);
                        }
                        return x.CompareTo(y);
                    });
                    surplusPoint -= recommendPoint;
                    index++;
                    var minpoint = GetReikiRootCachePoint(reikis[0]);
                    var samepointIds = reikis.FindAll((x) =>
                    {
                        return GetReikiRootCachePoint(x) == minpoint;
                    });
                    var recommendPoint = 0;
                    if (samepointIds.Count != reikis.Count)
                    {
                        var secondpointId = reikis.Find((x) =>
                        {
                            return GetReikiRootCachePoint(x) > minpoint;
                        });
                        var secondpoint = GetReikiRootCachePoint(secondpointId);
                        recommendPoint = Mathf.Min((secondpoint - minpoint) * samepointIds.Count, surplusPoint) / samepointIds.Count;
                    }
                    else
                    {
                        recommendPoint = surplusPoint / samepointIds.Count;
                    }
                    if (recommendPoint > 0)
                    {
                        foreach (var id in samepointIds)
                        {
                            recommends.Add(new ReikiRootRecommend()
                            {
                                id = id,
                                value = recommendPoint,
                            });
                            surplusPoint -= recommendPoint;
                            m_CacheReikiRootPoints[id] += recommendPoint;
                        }
                    }
                    else
                    {
                        var id = samepointIds[0];
                        recommends.Add(new ReikiRootRecommend()
                        {
                            id = id,
                            value = 1,
                        });
                        surplusPoint -= 1;
                        m_CacheReikiRootPoints[id] += 1;
                    }
                }
            }
            //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;
        }
@@ -366,23 +326,6 @@
            pak.PointValueList = pointValues;
            pak.PointAttrIDCount = (byte)points.Length;
            GameNetSystem.Instance.SendInfo(pak);
        }
        int QualityCompare(int lhs, int rhs)
        {
            var lhsQuality = GetReikiRootQuality(lhs, GetReikiRootCachePoint(lhs));
            var rhsQuality = GetReikiRootQuality(rhs, GetReikiRootCachePoint(rhs));
            if (lhs != rhs)
            {
                if (mainReikiRoot == lhs || mainReikiRoot == rhs)
                {
                    if (lhsQuality == rhsQuality)
                    {
                        return mainReikiRoot == lhs ? -1 : 1;
                    }
                }
            }
            return lhsQuality.CompareTo(rhsQuality);
        }
        private void PlayerDataRefreshEvent(PlayerDataType dataType)