| | |
| | | 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[]>>();
|
| | |
| | | onCacheFreePointRefresh();
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | public int mainReikiRoot
|
| | | {
|
| | | get
|
| | | {
|
| | | var job = PlayerDatas.Instance.baseData.Job;
|
| | | return m_MainReikiRoots[job];
|
| | | }
|
| | | }
|
| | |
|
| | |
| | | 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];
|
| | |
| | | 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;
|
| | | }
|
| | |
|
| | |
| | | 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)
|