少年修仙传客户端代码仓库
client_Zxw
2018-08-30 51fab14cee367849d673ccf9a0809c68cac843fc
System/Skill/SkillModel.cs
@@ -14,11 +14,13 @@
        {
            ParseConfig();
            FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
            PlayerTaskDatas.Event_TaskInformation += TaskInformationUpdate;
        }
        public override void UnInit()
        {
            FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
            PlayerTaskDatas.Event_TaskInformation -= TaskInformationUpdate;
        }
        public void OnBeforePlayerDataInitialize()
@@ -27,6 +29,7 @@
            equipPassSkills.Clear();
            playerLoginOk = false;
            equipPassPage = false;
            taskHoleCondition = 0;
        }
        #region 配置
@@ -44,6 +47,8 @@
        public Dictionary<int, Dictionary<int, List<SkillConfig>>> skillActDict { get; private set; }
        public List<int> betterPassSkills { get; private set; }
        public bool jumpToPass { get; set; }
        public int minTaskHole { get; private set; }
        public int maxTaskHole { get; private set; }
        void ParseConfig()
        {
            for (int i = 1; i <= 3; i++)
@@ -68,8 +73,17 @@
                    PassSkillLimit limit = JsonMapper.ToObject<PassSkillLimit>(jsonData[key].ToJson());
                    limit.hole = int.Parse(key);
                    passSkillLimits.Add(limit);
                    if (minTaskHole == 0 && limit.OpenSkillSlots > 0)
                    {
                        minTaskHole = limit.OpenSkillSlots;
                    }
                    if (limit.OpenSkillSlots > maxTaskHole)
                    {
                        maxTaskHole = limit.OpenSkillSlots;
                    }
                }
                passEquipCnt = int.Parse(funcCfg.Numerical2);
                taskHoleDict = ConfigParse.GetDic<int, int>(funcCfg.Numerical4);
            }
            funcCfg = Config.Instance.Get<FuncConfigConfig>("PassSkillEquipGetWay");
            if (funcCfg != null)
@@ -212,6 +226,7 @@
        public int presentEquipPage { get; private set; }
        public bool playerLoginOk = false;
        private Dictionary<int, Dictionary<int, int>> equipPassSkills = new Dictionary<int, Dictionary<int, int>>();
        public Dictionary<int, int> taskHoleDict { get; private set; }
        public event Action UpdatePassEquipSkillEvent;
        public bool equipPassPage { get; set; }
        public bool TryGetEquipPassSkills(int page, int hole, out int _skillId)
@@ -283,6 +298,60 @@
            }
        }
        public event Action taskUnlockUpdate;
        public uint taskHoleCondition { get; private set; }
        public const string TASKHOLEKEY = "OpenSkillSlots";
        public int UnlockPassHole
        {
            get { return LocalSave.GetInt(StringUtility.Contact(TASKHOLEKEY, "_", PlayerDatas.Instance.baseData.PlayerID)); }
            set { LocalSave.SetInt(StringUtility.Contact(TASKHOLEKEY, "_", PlayerDatas.Instance.baseData.PlayerID), value); }
        }
        public bool IsTaskHoleUnlock(int condition)
        {
            if (task._DicTaskInformation.ContainsKey(1)
                && task._DicTaskInformation[1].ContainsKey(TASKHOLEKEY))
            {
                uint value = 0;
                uint.TryParse(task._DicTaskInformation[1][TASKHOLEKEY], out value);
                return MathUtility.GetBitValue(value, (ushort)condition);
                //return value >= condition;
            }
            return false;
        }
        private void TaskInformationUpdate(int _id, Dictionary<int, Dictionary<string, string>> _Dic)
        {
            if (_Dic != null && _Dic.ContainsKey(1))
            {
                var dict = _Dic[1];
                if (dict.ContainsKey(TASKHOLEKEY))
                {
                    uint result = 0;
                    uint.TryParse(dict[TASKHOLEKEY], out result);
                    if (playerLoginOk)
                    {
                        for (int k = minTaskHole; k <= maxTaskHole; k++)
                        {
                            if (!MathUtility.GetBitValue(taskHoleCondition, (ushort)k)
                                && MathUtility.GetBitValue(result, (ushort)k))
                            {
                                UnlockPassHole = k;
                            }
                        }
                        if (taskUnlockUpdate != null)
                        {
                            taskUnlockUpdate();
                        }
                    }
                    taskHoleCondition = result;
                }
            }
        }
        RolePromoteModel m_PromoteModel;
        RolePromoteModel promoteModel
        {
@@ -291,6 +360,8 @@
                return m_PromoteModel ?? (m_PromoteModel = ModelCenter.Instance.GetModel<RolePromoteModel>());
            }
        }
        PlayerTaskDatas task { get { return ModelCenter.Instance.GetModel<PlayerTaskDatas>(); } }
        public void SendEquipPassSkill(int _page, int _index, int _skillId)
        {
@@ -335,6 +406,13 @@
                else if (limit.MountLv > 0)
                {
                    if (promoteModel.GetMountTotallv() < limit.MountLv)
                    {
                        return false;
                    }
                }
                else if (limit.OpenSkillSlots > 0)
                {
                    if (!IsTaskHoleUnlock(limit.OpenSkillSlots))
                    {
                        return false;
                    }
@@ -584,6 +662,7 @@
        public int level;
        public int vipLv;
        public int MountLv;
        public int OpenSkillSlots;
    }
    [Serializable]