少年修仙传客户端代码仓库
client_Hale
2018-09-10 fb0345c8f9815f1b9f655d6363da3a9cedd3944f
Core/GameEngine/Model/Player/Skill/PlayerSkillDatas.cs
@@ -1,363 +1,363 @@
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
using TableConfig;
using System.Text;
using System.Linq;
using Snxxz.UI;
public class PlayerSkillDatas
{
    private Dictionary<int, PlayerSkillData> _playerSkills = new Dictionary<int, PlayerSkillData>();
    private Dictionary<int, PlayerSkillData> _quickSkills = new Dictionary<int, PlayerSkillData>();
    public static event Action OnQuickSkillRefresh;
    public static event Action OnRefreshSkill;
    private Dictionary<int, List<int>> filterPlayerSkillDic = new Dictionary<int, List<int>>();
    private Dictionary<int, int> filterQuickSkillDic = new Dictionary<int, int>();
    private bool hasInitQuickSkill = false;
    private bool isServerPrepare = false;
    SkillModel m_Model;
    SkillModel model
    {
        get
        {
            return m_Model ?? (m_Model = ModelCenter.Instance.GetModel<SkillModel>());
        }
    }
    TreasureModel treasureModel { get { return ModelCenter.Instance.GetModel<TreasureModel>(); } }
    public void OnRoleSkillChange(H0310_tagRoleSkillChange vNetData)
    {
        SkillConfig skillCfg = ConfigManager.Instance.GetTemplate<SkillConfig>(vNetData.NewSkillID);
        if (skillCfg == null || (skillCfg.UseType != 0 && skillCfg.UseType != Math.Pow(2, PlayerDatas.Instance.baseData.Job)))
        {
            return;
        }
        PlayerSkillData data = null;
        _playerSkills.TryGetValue(vNetData.NewSkillID, out data);
        if (data == null)
        {
            data = new PlayerSkillData(vNetData.NewSkillID, 1);
            _playerSkills.Add(data.id, data);
        }
        model.CheckEquipPassSkill(data);
        bool fitter = GetFilterPlayerSkill(PlayerDatas.Instance.baseData.Job).Contains(data.id);
        PlayerSkillData olddata = null;
        _playerSkills.TryGetValue(vNetData.OldSkillID, out olddata);
        if (olddata != null)
        {
            if (hasInitQuickSkill)
            {
                int pos = ContainsQuickSkill(olddata.id);
                if (pos != -1 && !fitter)
                {
                    SetQuickSkill(pos, data.id);
                }
            }
            _playerSkills.Remove(vNetData.OldSkillID);
            olddata = null;
        }
        UpdateQuickSkill(data);
        for (int i = 0; i < GeneralConfig.Instance.EarlierGetTreasure.Count; i++)
        {
            var _treasureId = GeneralConfig.Instance.EarlierGetTreasure[i];
            var _mapId = treasureModel.GetMapIdByTreasure(_treasureId);
            if (PlayerDatas.Instance.baseData.MapID == _mapId)
            {
                return;
            }
        }
        if (OnRefreshSkill != null)
        {
            OnRefreshSkill();
        }
    }
    public void SetQuickSkills()
    {
        _quickSkills.Clear();
        for (int i = 0; i < SkillModel.QUICK_SKILL_COUNT; i++)
        {
            _quickSkills.Add(i, null);
        }
        for (int i = 0; i <= SkillModel.QUICK_SKILL_COUNT; i++)
        {
            string str = QuickSetting.Instance.GetQuickSetting(QuickSetting.QuickSettingType.Skill, i);
            if (!string.IsNullOrEmpty(str))
            {
                int id = MathUtils.Convert64To10(str);
                if (id == 0)
                {
                    continue;
                }
                PlayerSkillData data = GetSKillById(id);
                if (data == null)
                {
                    data = new PlayerSkillData(id, 1);
                }
                if (!GetFilterPlayerSkill(PlayerDatas.Instance.baseData.Job).Contains(data.id))
                {
                    _quickSkills[i] = data;
                }
            }
        }
        if (OnQuickSkillRefresh != null)
        {
            OnQuickSkillRefresh();
        }
        hasInitQuickSkill = true;
    }
    public void CheckQuickSet()
    {
        if (!isServerPrepare)
        {
            QuickSetting.Instance.SendPackage();
        }
        isServerPrepare = true;
    }
    public void UpdateQuickSkill(PlayerSkillData data)
    {
        if (!hasInitQuickSkill) return;
        bool fitter = GetFilterPlayerSkill(PlayerDatas.Instance.baseData.Job).Contains(data.id);
        if (fitter || data.skillCfg.FuncType != SkillModel.ACT_SKILL_TYPE)
        {
            return;
        }
        FuncConfigConfig func = ConfigManager.Instance.GetTemplate<FuncConfigConfig>(string.Format("QuickJobSkill{0}", PlayerDatas.Instance.baseData.Job));
        if (func != null)
        {
            int[] intarray = ConfigParse.GetMultipleStr<int>(func.Numerical1);
            for (int i = 0; i < intarray.Length; i++)
            {
                if (intarray[i] == data.id)
                {
                    if (GetQuickSkillByPos(i) == null)
                    {
                        SetQuickSkill(i, data.id);
                    }
                    break;
                }
            }
        }
        for (int i = 0; i < SkillModel.QUICK_SKILL_COUNT; i++)
        {
            if (ContainsQuickSkill(data.id) != -1)
            {
                break;
            }
            PlayerSkillData quick = GetQuickSkillByPos(i);
            if (quick == null)
            {
                SetQuickSkill(i, data.id);
                break;
            }
        }
    }
    public PlayerSkillData GetQuickSkillByPos(int pos)
    {
        PlayerSkillData data = null;
        _quickSkills.TryGetValue(pos, out data);
        return data;
    }
    public PlayerSkillData GetSKillById(int id)
    {
        PlayerSkillData data = null;
        _playerSkills.TryGetValue(id, out data);
        return data;
    }
    public Dictionary<int, PlayerSkillData> GetQuickSkills()
    {
        return _quickSkills;
    }
    public void SetQuickSkill(int pos, int id)
    {
        if (model.GetXpSkillID() == id)
        {
            return;
        }
        PlayerSkillData data = GetSKillById(id);
        if (data == null)
        {
            MessageWin.Inst.ShowFixedTip(Language.Get("ThisSkillIsNotObtained_Z"));
            return;
        }
        if (data.skillCfg.UseType == 0)
        {
            return;
        }
        if (data.skillCfg == null || PlayerDatas.Instance.baseData.LV < data.skillCfg.LearnLVReq
            || data.skillCfg.FuncType != SkillModel.ACT_SKILL_TYPE)
        {
            MessageWin.Inst.ShowFixedTip(Language.Get("L1009"));
            return;
        }
        bool change = false;
        for (int i = 0; i < _quickSkills.Count; i++)
        {
            PlayerSkillData skill = null;
            _quickSkills.TryGetValue(i, out skill);
            if (skill == null)
            {
                continue;
            }
            if (skill.id == id && i == pos)
            {
                return;
            }
            else if (skill.id == id)
            {
                change = true;
                PlayerSkillData temp = _quickSkills[pos];
                _quickSkills[pos] = skill;
                _quickSkills[i] = temp;
                break;
            }
        }
        if (!change)
        {
            _quickSkills[pos] = data;
        }
        for (int i = 0; i < _quickSkills.Count; i++)
        {
            PlayerSkillData skill = null;
            _quickSkills.TryGetValue(i, out skill);
            if (skill != null)
            {
                string val = MathUtils.Convert10To64(skill.id);
                QuickSetting.Instance.SetQuickSetting(QuickSetting.QuickSettingType.Skill, val, i);
            }
        }
        if (isServerPrepare)
        {
            QuickSetting.Instance.SendPackage();
        }
        if (OnQuickSkillRefresh != null)
        {
            OnQuickSkillRefresh();
        }
    }
    public Dictionary<int, PlayerSkillData> GetAllSkill()
    {
        return _playerSkills;
    }
    public int ContainsQuickSkill(int id)
    {
        foreach (int pos in _quickSkills.Keys)
        {
            if (_quickSkills[pos] == null) continue;
            if (_quickSkills[pos].id == id) return pos;
        }
        return -1;
    }
    public List<int> GetFilterPlayerSkill(int job)
    {
        List<int> list = null;
        if (filterPlayerSkillDic.Count == 0)
        {
            FuncConfigConfig funcCfg = ConfigManager.Instance.GetTemplate<FuncConfigConfig>("JobFitterSkill");
            if (funcCfg != null)
            {
                int[] intarray = null;
                intarray = ConfigParse.GetMultipleStr<int>(funcCfg.Numerical1);
                list = new List<int>(); list.AddRange(intarray);
                filterPlayerSkillDic.Add(1, list);
                intarray = ConfigParse.GetMultipleStr<int>(funcCfg.Numerical2);
                list = new List<int>(); list.AddRange(intarray);
                filterPlayerSkillDic.Add(2, list);
                intarray = ConfigParse.GetMultipleStr<int>(funcCfg.Numerical3);
                list = new List<int>(); list.AddRange(intarray);
                filterPlayerSkillDic.Add(3, list);
            }
        }
        filterPlayerSkillDic.TryGetValue(job, out list);
        return list;
    }
    public PlayerSkillData GetSkillBySkillTypeID(int typeID)
    {
        foreach (var skill in _playerSkills.Values)
        {
            if (skill.typeID == typeID)
                return skill;
        }
        return null;
    }
    public int GetSkillCountByType(int _type)
    {
        var count = 0;
        foreach (var _skill in _playerSkills.Values)
        {
            if (_skill.skillCfg.FuncType == _type)
            {
                count++;
            }
        }
        return count;
    }
    public void ClearSkillData()
    {
        _quickSkills.Clear();
        _playerSkills.Clear();
    }
}
public class PlayerSkillData
{
    private int _typeID;
    public int typeID
    {
        get
        {
            return _typeID;
        }
    }
    /**技能ID*/
    private int _id;
    public int id
    {
        get { return _id; }
    }
    public int level
    {
        get { return skillCfg.SkillLV; }
    }
    public SkillConfig skillCfg
    {
        private set;
        get;
    }
    public PlayerSkillData(int id, int level)
    {
        _id = id;
        skillCfg = ConfigManager.Instance.GetTemplate<SkillConfig>(id);
        _typeID = skillCfg.SkillTypeID;
    }
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
using TableConfig;
using System.Text;
using System.Linq;
using Snxxz.UI;
public class PlayerSkillDatas
{
    private Dictionary<int, PlayerSkillData> _playerSkills = new Dictionary<int, PlayerSkillData>();
    private Dictionary<int, PlayerSkillData> _quickSkills = new Dictionary<int, PlayerSkillData>();
    public static event Action OnQuickSkillRefresh;
    public static event Action OnRefreshSkill;
    private Dictionary<int, List<int>> filterPlayerSkillDic = new Dictionary<int, List<int>>();
    private Dictionary<int, int> filterQuickSkillDic = new Dictionary<int, int>();
    private bool hasInitQuickSkill = false;
    private bool isServerPrepare = false;
    SkillModel m_Model;
    SkillModel model
    {
        get
        {
            return m_Model ?? (m_Model = ModelCenter.Instance.GetModel<SkillModel>());
        }
    }
    TreasureModel treasureModel { get { return ModelCenter.Instance.GetModel<TreasureModel>(); } }
    public void OnRoleSkillChange(H0310_tagRoleSkillChange vNetData)
    {
        SkillConfig skillCfg = Config.Instance.Get<SkillConfig>(vNetData.NewSkillID);
        if (skillCfg == null || (skillCfg.UseType != 0 && skillCfg.UseType != Math.Pow(2, PlayerDatas.Instance.baseData.Job)))
        {
            return;
        }
        PlayerSkillData data = null;
        _playerSkills.TryGetValue(vNetData.NewSkillID, out data);
        if (data == null)
        {
            data = new PlayerSkillData(vNetData.NewSkillID, 1);
            _playerSkills.Add(data.id, data);
        }
        model.CheckEquipPassSkill(data);
        bool fitter = GetFilterPlayerSkill(PlayerDatas.Instance.baseData.Job).Contains(data.id);
        PlayerSkillData olddata = null;
        _playerSkills.TryGetValue(vNetData.OldSkillID, out olddata);
        if (olddata != null)
        {
            if (hasInitQuickSkill)
            {
                int pos = ContainsQuickSkill(olddata.id);
                if (pos != -1 && !fitter)
                {
                    SetQuickSkill(pos, data.id);
                }
            }
            _playerSkills.Remove(vNetData.OldSkillID);
            olddata = null;
        }
        UpdateQuickSkill(data);
        for (int i = 0; i < GeneralConfig.Instance.EarlierGetTreasure.Count; i++)
        {
            var _treasureId = GeneralConfig.Instance.EarlierGetTreasure[i];
            var _mapId = treasureModel.GetMapIdByTreasure(_treasureId);
            if (PlayerDatas.Instance.baseData.MapID == _mapId)
            {
                return;
            }
        }
        if (OnRefreshSkill != null)
        {
            OnRefreshSkill();
        }
    }
    public void SetQuickSkills()
    {
        _quickSkills.Clear();
        for (int i = 0; i < SkillModel.QUICK_SKILL_COUNT; i++)
        {
            _quickSkills.Add(i, null);
        }
        for (int i = 0; i <= SkillModel.QUICK_SKILL_COUNT; i++)
        {
            string str = QuickSetting.Instance.GetQuickSetting(QuickSetting.QuickSettingType.Skill, i);
            if (!string.IsNullOrEmpty(str))
            {
                int id = MathUtils.Convert64To10(str);
                if (id == 0)
                {
                    continue;
                }
                PlayerSkillData data = GetSKillById(id);
                if (data == null)
                {
                    data = new PlayerSkillData(id, 1);
                }
                if (!GetFilterPlayerSkill(PlayerDatas.Instance.baseData.Job).Contains(data.id))
                {
                    _quickSkills[i] = data;
                }
            }
        }
        if (OnQuickSkillRefresh != null)
        {
            OnQuickSkillRefresh();
        }
        hasInitQuickSkill = true;
    }
    public void CheckQuickSet()
    {
        if (!isServerPrepare)
        {
            QuickSetting.Instance.SendPackage();
        }
        isServerPrepare = true;
    }
    public void UpdateQuickSkill(PlayerSkillData data)
    {
        if (!hasInitQuickSkill) return;
        bool fitter = GetFilterPlayerSkill(PlayerDatas.Instance.baseData.Job).Contains(data.id);
        if (fitter || data.skillCfg.FuncType != SkillModel.ACT_SKILL_TYPE)
        {
            return;
        }
        FuncConfigConfig func = Config.Instance.Get<FuncConfigConfig>(string.Format("QuickJobSkill{0}", PlayerDatas.Instance.baseData.Job));
        if (func != null)
        {
            int[] intarray = ConfigParse.GetMultipleStr<int>(func.Numerical1);
            for (int i = 0; i < intarray.Length; i++)
            {
                if (intarray[i] == data.id)
                {
                    if (GetQuickSkillByPos(i) == null)
                    {
                        SetQuickSkill(i, data.id);
                    }
                    break;
                }
            }
        }
        for (int i = 0; i < SkillModel.QUICK_SKILL_COUNT; i++)
        {
            if (ContainsQuickSkill(data.id) != -1)
            {
                break;
            }
            PlayerSkillData quick = GetQuickSkillByPos(i);
            if (quick == null)
            {
                SetQuickSkill(i, data.id);
                break;
            }
        }
    }
    public PlayerSkillData GetQuickSkillByPos(int pos)
    {
        PlayerSkillData data = null;
        _quickSkills.TryGetValue(pos, out data);
        return data;
    }
    public PlayerSkillData GetSKillById(int id)
    {
        PlayerSkillData data = null;
        _playerSkills.TryGetValue(id, out data);
        return data;
    }
    public Dictionary<int, PlayerSkillData> GetQuickSkills()
    {
        return _quickSkills;
    }
    public void SetQuickSkill(int pos, int id)
    {
        if (model.GetXpSkillID() == id)
        {
            return;
        }
        PlayerSkillData data = GetSKillById(id);
        if (data == null)
        {
            MessageWin.Inst.ShowFixedTip(Language.Get("ThisSkillIsNotObtained_Z"));
            return;
        }
        if (data.skillCfg.UseType == 0)
        {
            return;
        }
        if (data.skillCfg == null || PlayerDatas.Instance.baseData.LV < data.skillCfg.LearnLVReq
            || data.skillCfg.FuncType != SkillModel.ACT_SKILL_TYPE)
        {
            MessageWin.Inst.ShowFixedTip(Language.Get("L1009"));
            return;
        }
        bool change = false;
        for (int i = 0; i < _quickSkills.Count; i++)
        {
            PlayerSkillData skill = null;
            _quickSkills.TryGetValue(i, out skill);
            if (skill == null)
            {
                continue;
            }
            if (skill.id == id && i == pos)
            {
                return;
            }
            else if (skill.id == id)
            {
                change = true;
                PlayerSkillData temp = _quickSkills[pos];
                _quickSkills[pos] = skill;
                _quickSkills[i] = temp;
                break;
            }
        }
        if (!change)
        {
            _quickSkills[pos] = data;
        }
        for (int i = 0; i < _quickSkills.Count; i++)
        {
            PlayerSkillData skill = null;
            _quickSkills.TryGetValue(i, out skill);
            if (skill != null)
            {
                string val = MathUtils.Convert10To64(skill.id);
                QuickSetting.Instance.SetQuickSetting(QuickSetting.QuickSettingType.Skill, val, i);
            }
        }
        if (isServerPrepare)
        {
            QuickSetting.Instance.SendPackage();
        }
        if (OnQuickSkillRefresh != null)
        {
            OnQuickSkillRefresh();
        }
    }
    public Dictionary<int, PlayerSkillData> GetAllSkill()
    {
        return _playerSkills;
    }
    public int ContainsQuickSkill(int id)
    {
        foreach (int pos in _quickSkills.Keys)
        {
            if (_quickSkills[pos] == null) continue;
            if (_quickSkills[pos].id == id) return pos;
        }
        return -1;
    }
    public List<int> GetFilterPlayerSkill(int job)
    {
        List<int> list = null;
        if (filterPlayerSkillDic.Count == 0)
        {
            FuncConfigConfig funcCfg = Config.Instance.Get<FuncConfigConfig>("JobFitterSkill");
            if (funcCfg != null)
            {
                int[] intarray = null;
                intarray = ConfigParse.GetMultipleStr<int>(funcCfg.Numerical1);
                list = new List<int>(); list.AddRange(intarray);
                filterPlayerSkillDic.Add(1, list);
                intarray = ConfigParse.GetMultipleStr<int>(funcCfg.Numerical2);
                list = new List<int>(); list.AddRange(intarray);
                filterPlayerSkillDic.Add(2, list);
                intarray = ConfigParse.GetMultipleStr<int>(funcCfg.Numerical3);
                list = new List<int>(); list.AddRange(intarray);
                filterPlayerSkillDic.Add(3, list);
            }
        }
        filterPlayerSkillDic.TryGetValue(job, out list);
        return list;
    }
    public PlayerSkillData GetSkillBySkillTypeID(int typeID)
    {
        foreach (var skill in _playerSkills.Values)
        {
            if (skill.typeID == typeID)
                return skill;
        }
        return null;
    }
    public int GetSkillCountByType(int _type)
    {
        var count = 0;
        foreach (var _skill in _playerSkills.Values)
        {
            if (_skill.skillCfg.FuncType == _type)
            {
                count++;
            }
        }
        return count;
    }
    public void ClearSkillData()
    {
        _quickSkills.Clear();
        _playerSkills.Clear();
    }
}
public class PlayerSkillData
{
    private int _typeID;
    public int typeID
    {
        get
        {
            return _typeID;
        }
    }
    /**技能ID*/
    private int _id;
    public int id
    {
        get { return _id; }
    }
    public int level
    {
        get { return skillCfg.SkillLV; }
    }
    public SkillConfig skillCfg
    {
        private set;
        get;
    }
    public PlayerSkillData(int id, int level)
    {
        _id = id;
        skillCfg = Config.Instance.Get<SkillConfig>(id);
        _typeID = skillCfg.SkillTypeID;
    }
}