少年修仙传客户端代码仓库
client_Wu Xijin
2019-04-13 c67274ce67055c6e0e6acf8bff9d9a59bb9a203e
Merge branch 'master' of http://192.168.0.87:10010/r/snxxz_scripts
4个文件已修改
218 ■■■■■ 已修改文件
Core/GameEngine/Model/Config/ReikiRootConfig.cs 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/ReikiRootConfig.cs.meta 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Lua/Gen/ReikiRootConfigWrap.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Role/ReikiRootModel.cs 183 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/ReikiRootConfig.cs
@@ -1,6 +1,6 @@
//--------------------------------------------------------
//    [Author]:           Fish
//    [  Date ]:           Monday, March 25, 2019
//    [  Date ]:           Saturday, April 13, 2019
//--------------------------------------------------------
using System.Collections.Generic;
@@ -15,8 +15,8 @@
    public readonly int id;
    public readonly Int2 propertyPerPoint;
    public readonly int promoteProperty;
    public readonly int[] promoteValue;
    public readonly Int2[] promoteProperty;
    public readonly string promoteValue;
    public readonly int[] qualityArea;
    public ReikiRootConfig()
@@ -33,15 +33,15 @@
            Int2.TryParse(tables[1],out propertyPerPoint); 
            int.TryParse(tables[2],out promoteProperty);
            string[] promoteValueStringArray = tables[3].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
            promoteValue = new int[promoteValueStringArray.Length];
            for (int i=0;i<promoteValueStringArray.Length;i++)
            string[] promotePropertyStringArray = tables[2].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
            promoteProperty = new Int2[promotePropertyStringArray.Length];
            for (int i=0;i<promotePropertyStringArray.Length;i++)
            {
                 int.TryParse(promoteValueStringArray[i],out promoteValue[i]);
                 Int2.TryParse(promotePropertyStringArray[i],out promoteProperty[i]);
            }
            promoteValue = tables[3];
            string[] qualityAreaStringArray = tables[4].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
            qualityArea = new int[qualityAreaStringArray.Length];
            for (int i=0;i<qualityAreaStringArray.Length;i++)
Core/GameEngine/Model/Config/ReikiRootConfig.cs.meta
@@ -1,6 +1,6 @@
fileFormatVersion: 2
guid: 98b9f6b38bc0b1841bddba5f9aa30611
timeCreated: 1553483326
timeCreated: 1555119994
licenseType: Pro
MonoImporter:
  serializedVersion: 2
Lua/Gen/ReikiRootConfigWrap.cs
@@ -27,7 +27,6 @@
            
            Utils.RegisterFunc(L, Utils.GETTER_IDX, "id", _g_get_id);
            Utils.RegisterFunc(L, Utils.GETTER_IDX, "propertyPerPoint", _g_get_propertyPerPoint);
            Utils.RegisterFunc(L, Utils.GETTER_IDX, "promoteProperty", _g_get_promoteProperty);
            Utils.RegisterFunc(L, Utils.GETTER_IDX, "promoteValue", _g_get_promoteValue);
            Utils.RegisterFunc(L, Utils.GETTER_IDX, "qualityArea", _g_get_qualityArea);
            
@@ -299,20 +298,6 @@
            
                ReikiRootConfig gen_to_be_invoked = (ReikiRootConfig)translator.FastGetCSObj(L, 1);
                translator.Push(L, gen_to_be_invoked.propertyPerPoint);
            } catch(System.Exception gen_e) {
                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
            }
            return 1;
        }
        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
        static int _g_get_promoteProperty(RealStatePtr L)
        {
            try {
                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
                ReikiRootConfig gen_to_be_invoked = (ReikiRootConfig)translator.FastGetCSObj(L, 1);
                LuaAPI.xlua_pushinteger(L, gen_to_be_invoked.promoteProperty);
            } catch(System.Exception gen_e) {
                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
            }
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;
        }
    }
}