From a0ede150686a218c92b901b1f20aef12a9913890 Mon Sep 17 00:00:00 2001
From: client_linchunjie <461730578@qq.com>
Date: 星期五, 14 九月 2018 09:36:59 +0800
Subject: [PATCH] 1930【1.0.15】【主干】功能预告跳转八卦炉激活,功能预告界面未关闭
---
System/Skill/SkillModel.cs | 1387 +++++++++++++++++++++++++++++++--------------------------
1 files changed, 751 insertions(+), 636 deletions(-)
diff --git a/System/Skill/SkillModel.cs b/System/Skill/SkillModel.cs
index b2e34cd..c988c69 100644
--- a/System/Skill/SkillModel.cs
+++ b/System/Skill/SkillModel.cs
@@ -1,636 +1,751 @@
-锘縰sing System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-using TableConfig;
-using System;
-using UnityEngine.UI;
-using LitJson;
-
-namespace Snxxz.UI
-{
- public class SkillModel : Model, IBeforePlayerDataInitialize,IPlayerLoginOk
- {
- public override void Init()
- {
- ParseConfig();
- FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
- }
-
- public override void UnInit()
- {
- FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
- }
-
- public void OnBeforePlayerDataInitialize()
- {
- PlayerDatas.Instance.skill.ClearSkillData();
- equipPassSkills.Clear();
- playerLoginOk = false;
- equipPassPage = false;
- }
-
- #region 閰嶇疆
- public const int ACT_SKILL_NUM = 8;
- public const int PASS_SKILL_TYPE = 2;
- public const int ACT_SKILL_TYPE = 1;
- public const int PASS_SKILL_NUM = 8;
- public const int QUICK_SKILL_COUNT = 7;
- private Dictionary<int, int[]> quickBaseSkillDic = new Dictionary<int, int[]>();
- private Dictionary<int, int> xpSkillsDic = new Dictionary<int, int>();
- public List<PassSkillLimit> passSkillLimits = new List<PassSkillLimit>();
- public int passEquipCnt { get; private set; }
- public Dictionary<int, int[]> passEquipGetWays = new Dictionary<int, int[]>();
- public Dictionary<int, string> passEquipGetWayTxts;
- public Dictionary<int, Dictionary<int, List<SkillConfig>>> skillActDict { get; private set; }
- public List<int> betterPassSkills { get; private set; }
- public bool jumpToPass { get; set; }
- void ParseConfig()
- {
- for (int i = 1; i <= 3; i++)
- {
- var cfg = ConfigManager.Instance.GetTemplate<FuncConfigConfig>(StringUtility.Contact("QuickJobSkill", i));
- if (cfg != null)
- {
- quickBaseSkillDic.Add(i, ConfigParse.GetMultipleStr<int>(cfg.Numerical1));
- }
- }
- FuncConfigConfig funcCfg = ConfigManager.Instance.GetTemplate<FuncConfigConfig>("XpSkillID");
- if (funcCfg != null)
- {
- xpSkillsDic = ConfigParse.GetDic<int, int>(funcCfg.Numerical1);
- }
- funcCfg = ConfigManager.Instance.GetTemplate<FuncConfigConfig>("PassSkillEquipLimit");
- if (funcCfg != null)
- {
- JsonData jsonData = JsonMapper.ToObject(funcCfg.Numerical1);
- foreach (string key in jsonData.Keys)
- {
- PassSkillLimit limit = JsonMapper.ToObject<PassSkillLimit>(jsonData[key].ToJson());
- limit.hole = int.Parse(key);
- passSkillLimits.Add(limit);
- }
- passEquipCnt = int.Parse(funcCfg.Numerical2);
- }
- funcCfg = ConfigManager.Instance.GetTemplate<FuncConfigConfig>("PassSkillEquipGetWay");
- if (funcCfg != null)
- {
- JsonData jsonData = JsonMapper.ToObject(funcCfg.Numerical1);
- foreach (string key in jsonData.Keys)
- {
- int[] intarray = JsonMapper.ToObject<int[]>(jsonData[key].ToJson());
- passEquipGetWays.Add(int.Parse(key), intarray);
- }
- passEquipGetWayTxts = ConfigParse.GetDic<int, string>(funcCfg.Numerical2);
- }
- funcCfg = ConfigManager.Instance.GetTemplate<FuncConfigConfig>("SkillActTypeIdSort");
- skillActDict = new Dictionary<int, Dictionary<int, List<SkillConfig>>>();
- var _JobTypeIds = ConfigParse.GetMultipleStr<int>(funcCfg.Numerical1);
- var _dict = new Dictionary<int, List<SkillConfig>>();
- for (int i = 0; i < _JobTypeIds.Length; i++)
- {
- var _list = SkillConfig.GetSkillActConfigs(2, ACT_SKILL_TYPE, _JobTypeIds[i]);
- if (_list != null)
- {
- _dict.Add(_JobTypeIds[i], _list);
- }
- }
- skillActDict.Add(2, _dict);
- _JobTypeIds = ConfigParse.GetMultipleStr<int>(funcCfg.Numerical2);
- _dict = new Dictionary<int, List<SkillConfig>>();
- for (int i = 0; i < _JobTypeIds.Length; i++)
- {
- var _list = SkillConfig.GetSkillActConfigs(4, ACT_SKILL_TYPE, _JobTypeIds[i]);
- if (_list != null)
- {
- _dict.Add(_JobTypeIds[i], _list);
- }
- }
- skillActDict.Add(4, _dict);
- _JobTypeIds = ConfigParse.GetMultipleStr<int>(funcCfg.Numerical3);
- _dict = new Dictionary<int, List<SkillConfig>>();
- for (int i = 0; i < _JobTypeIds.Length; i++)
- {
- var _list = SkillConfig.GetSkillActConfigs(8, ACT_SKILL_TYPE, _JobTypeIds[i]);
- if (_list != null)
- {
- _dict.Add(_JobTypeIds[i], _list);
- }
- }
- skillActDict.Add(8, _dict);
- funcCfg = ConfigManager.Instance.GetTemplate<FuncConfigConfig>("SpecialPassSkills");
- betterPassSkills = new List<int>();
- var _array = ConfigParse.GetMultipleStr<int>(funcCfg.Numerical1);
- if (_array != null)
- {
- betterPassSkills.AddRange(_array);
- }
-
- for (int i = 0; i < passEquipCnt; i++)
- {
- passSkillHoleRedpoints.Add(new Redpoint(10302, 10302 * 100 + i));
- }
- }
-
- public int[] GetQuickBaseSkillArray(int occupy)
- {
- int[] array = null;
- quickBaseSkillDic.TryGetValue(occupy, out array);
- return array;
- }
-
- public int GetQuickSkillIdByPos(int pos)
- {
- int skillid = 0;
- PlayerSkillData data = PlayerDatas.Instance.skill.GetQuickSkillByPos(pos);
- if (data == null)
- {
- var intarray = quickBaseSkillDic[PlayerDatas.Instance.baseData.Job];
- if (pos < intarray.Length)
- {
- skillid = intarray[pos];
- }
- }
- else
- {
- skillid = data.id;
- }
- return skillid;
- }
-
- public int GetXpSkillID()
- {
- int skillID;
- xpSkillsDic.TryGetValue(PlayerDatas.Instance.baseData.Job, out skillID);
- return skillID;
- }
- #endregion
-
- #region 涓诲姩鎶�鑳�
- public int presentSltSkillID = 0;
- public event Action OnRefreshSltSkill;
- public void RefreshSltSkill()
- {
- if (OnRefreshSltSkill != null)
- OnRefreshSltSkill();
- }
- public bool skillDraging = false;
- public int skillDragId = 0;
- public float onDragDelay = 0.1f;
- private Skill m_XpSkill;
- public Skill xpSkill
- {
- get
- {
- return m_XpSkill ?? (m_XpSkill = PlayerDatas.Instance.hero.SkillMgr.Get(GetXpSkillID()));
- }
- }
-
- public event Action OnAutoUseXpEvent;
- public bool AutoUseXp()
- {
- return QuickSetting.Instance.GetQuickSettingBool(QuickSetting.QuickSettingType.AutoUseXp, 0, false);
- }
-
- public void SetAutoUseXp(bool _auto)
- {
- if (_auto != AutoUseXp())
- {
- QuickSetting.Instance.SetQuickSetting(QuickSetting.QuickSettingType.AutoUseXp, _auto);
- QuickSetting.Instance.SendPackage();
- if (OnAutoUseXpEvent != null)
- {
- OnAutoUseXpEvent();
- }
- }
- }
-
-
- #endregion
-
- #region 琚姩鎶�鑳�
- public int presentSltPage = 0;
- public int presentEquipPage { get; private set; }
- public bool playerLoginOk = false;
- private Dictionary<int, Dictionary<int, int>> equipPassSkills = new Dictionary<int, Dictionary<int, int>>();
- public event Action UpdatePassEquipSkillEvent;
- public bool equipPassPage { get; set; }
- public bool TryGetEquipPassSkills(int page, int hole, out int _skillId)
- {
- _skillId = 0;
- if (equipPassSkills.ContainsKey(page))
- {
- Dictionary<int, int> dic = equipPassSkills[page];
- if (dic.ContainsKey(hole))
- {
- _skillId = dic[hole];
- if (_skillId != 0)
- {
- return true;
- }
- }
- }
- return false;
- }
- public void SendEquipPassSkills(int _skillId, int _hole)
- {
- PlayerSkillData data = PlayerDatas.Instance.skill.GetSKillById(_skillId);
- if (data != null && data.skillCfg.FuncType == PASS_SKILL_TYPE)
- {
- Dictionary<int, int> dic = null;
- if (equipPassSkills.TryGetValue(presentSltPage, out dic))
- {
- int _preHole = -1;
- if (dic.ContainsKey(_hole) && dic[_hole] == _skillId)
- {
- return;
- }
- foreach (var _key in dic.Keys)
- {
- if (_skillId == dic[_key] && (!dic.ContainsKey(_hole) || dic[_hole] == 0))
- {
- _preHole = _key;
- break;
- }
- else if (_skillId == dic[_key])
- {
- SysNotifyMgr.Instance.ShowTip("PassSkillSameError");
- return;
- }
- }
- if (_preHole != -1)
- {
- SendEquipPassSkill(presentSltPage, _preHole, 0);
- }
- }
- int _skill = 0;
- if (TryGetEquipPassSkills(presentSltPage, _hole, out _skill) && betterPassSkills.Contains(_skill))
- {
- ConfirmCancel.ShowPopConfirm(Language.Get("TeamPrepare1"), Language.Get("ReBetterSkill"), (bool isOk) =>
- {
- if (isOk)
- {
- SoundPlayer.Instance.PlayUIAudio(28);
- SendEquipPassSkill(presentSltPage, _hole, _skillId);
- }
- });
- }
- else
- {
- SoundPlayer.Instance.PlayUIAudio(28);
- SendEquipPassSkill(presentSltPage, _hole, _skillId);
- }
-
- }
- }
-
- RolePromoteModel m_PromoteModel;
- RolePromoteModel promoteModel
- {
- get
- {
- return m_PromoteModel ?? (m_PromoteModel = ModelCenter.Instance.GetModel<RolePromoteModel>());
- }
- }
-
- public void SendEquipPassSkill(int _page, int _index, int _skillId)
- {
- var pak = new CB407_tagCMPassiveSet();
- pak.Page = (byte)_page;
- pak.Index = (byte)_index;
- pak.SkillID = (uint)_skillId;
- GameNetSystem.Instance.SendInfo(pak);
- }
-
- public void SendEquipPage()
- {
- if (presentSltPage == presentEquipPage)
- {
- return;
- }
- equipPassPage = true;
- CB408_tagCMPassivePage pak = new CB408_tagCMPassivePage();
- pak.Page = (byte)presentSltPage;
- GameNetSystem.Instance.SendInfo(pak);
- }
-
- public bool IsPassSkillHoleOpen(int _hole)
- {
- PassSkillLimit limit;
- if (TryGetPassSkillLimit(_hole, out limit))
- {
- if (limit.level > 0)
- {
- if (PlayerDatas.Instance.baseData.LV < limit.level)
- {
- return false;
- }
- }
- else if (limit.vipLv > 0)
- {
- if (PlayerDatas.Instance.baseData.VIPLv < limit.vipLv)
- {
- return false;
- }
- }
- else if (limit.MountLv > 0)
- {
- if (promoteModel.GetMountTotallv() < limit.MountLv)
- {
- return false;
- }
- }
- return true;
- }
- return false;
- }
-
- public int PassOpenHoleCount()
- {
- var count = 0;
- for (int i = 0; i < 6; i++)
- {
- if (IsPassSkillHoleOpen(i))
- {
- count++;
- }
- }
- return count;
- }
-
- public bool TryGetPassSkillLimit(int _hole, out PassSkillLimit _limit)
- {
- _limit = default(PassSkillLimit);
- int index = passSkillLimits.FindIndex((x) =>
- {
- return x.hole == _hole;
- });
- if (index == -1)
- {
- return false;
- }
- _limit = passSkillLimits[index];
- return true;
- }
-
- public void UpdateEquipPassSkills(HB406_tagMCPassiveSet package)
- {
- if (package.PageCnt == 0)
- {
- return;
- }
- for (int i = 0; i < package.PassiveSkills.Length; i++)
- {
- if (package.PassiveSkills[i].Count == 0)
- {
- continue;
- }
- for (int j = 0; j < package.PassiveSkills[i].Count; j++)
- {
- SetEquipPassSkill(i, j, (int)package.PassiveSkills[i].SkillIDList[j]);
- }
- }
- if (UpdatePassEquipSkillEvent != null)
- {
- UpdatePassEquipSkillEvent();
- }
- UpdateRedpoint();
- }
-
- public void UpdateEquipPassPage(HB407_tagMCPassivePage package)
- {
- presentEquipPage = package.Page;
- if (equipPassPage)
- {
- SysNotifyMgr.Instance.ShowTip("SetPassEquipPageSuccess", presentEquipPage + 1);
- }
- equipPassPage = false;
- UpdateRedpoint();
- }
-
- public void UpdateEquipPassSkill(HB408_tagMCPassiveSetAnswer package)
- {
- SetEquipPassSkill(package.Page, package.Index, (int)package.SkillID);
- if (UpdatePassEquipSkillEvent != null)
- {
- UpdatePassEquipSkillEvent();
- }
- }
-
- public void SetEquipPassSkill(int _page, int _index, int _skillId)
- {
- Dictionary<int, int> dic = null;
- if (!equipPassSkills.TryGetValue(_page, out dic))
- {
- dic = new Dictionary<int, int>();
- equipPassSkills.Add(_page, dic);
- }
- dic[_index] = _skillId;
- }
-
- public void OnPlayerLoginOk()
- {
- if (GetEquipPassSkillCnt() == 0)
- {
- Dictionary<int, PlayerSkillData> playerskills = PlayerDatas.Instance.skill.GetAllSkill();
- var _cnt = 0;
- presentSltPage = 0;
- foreach (var _skill in playerskills.Values)
- {
- if (_cnt >= 2)
- {
- break;
- }
- if (_skill.skillCfg.FuncType == PASS_SKILL_TYPE)
- {
- SendEquipPassSkills(_skill.id, _cnt);
- _cnt++;
- }
- }
- }
- playerLoginOk = true;
- UpdateRedpoint();
- }
-
- public void CheckEquipPassSkill(PlayerSkillData _skill)
- {
- if (!playerLoginOk)
- {
- return;
- }
- if (_skill.skillCfg.FuncType != PASS_SKILL_TYPE)
- {
- return;
- }
- var _cnt = GetEquipPassSkillCnt();
- if (_cnt < 2)
- {
- for (int i = 0; i < passEquipCnt; i++)
- {
- var _id = 0;
- if (!TryGetEquipPassSkills(0, i, out _id))
- {
- SendEquipPassSkills(_skill.id, i);
- break;
- }
- }
- }
- }
-
- public bool ContainsEquipPassSkill(int _skillId)
- {
- foreach (var _dict in equipPassSkills.Values)
- {
- foreach (var _id in _dict.Values)
- {
- if (_skillId == _id)
- {
- return true;
- }
- }
- }
- return false;
- }
-
- public int GetEquipPassSkillCnt()
- {
- var _totalCnt = 0;
- foreach (var _dict in equipPassSkills.Values)
- {
- foreach (var _id in _dict.Values)
- {
- if (_id != 0)
- {
- _totalCnt += 1;
- }
- }
- }
- return _totalCnt;
- }
-
- public int GetEquipPassSkillCount(int _page)
- {
- if (!equipPassSkills.ContainsKey(_page))
- {
- return 0;
- }
- var _dict = equipPassSkills[_page];
- var count = 0;
- foreach (var _id in _dict.Values)
- {
- if (_id != 0)
- {
- count += 1;
- }
- }
- return count;
- }
- #endregion
-
- #region 绾㈢偣
- public Redpoint skillRedpoint = new Redpoint(1, 103);
- public Redpoint passSkillRedpoint = new Redpoint(103, 10302);
- public List<Redpoint> passSkillHoleRedpoints = new List<Redpoint>();
-
- void UpdateRedpoint()
- {
- for (int i = 0; i < passSkillHoleRedpoints.Count; i++)
- {
- passSkillHoleRedpoints[i].state = RedPointState.None;
- }
- if (!FuncOpen.Instance.IsFuncOpen(109))
- {
- return;
- }
- if (DayRemind.Instance.GetDayRemind(DayRemind.PASS_SKILL_REDPOINT))
- {
- return;
- }
- var _count = GetEquipPassSkillCount(presentEquipPage);
- if (PlayerDatas.Instance.skill.GetSkillCountByType(PASS_SKILL_TYPE) > _count
- && PassOpenHoleCount() > _count)
- {
- for (int i = 0; i < passEquipCnt; i++)
- {
- var _skillId = 0;
- if (!TryGetEquipPassSkills(presentEquipPage, i, out _skillId)
- && IsPassSkillHoleOpen(i))
- {
- passSkillHoleRedpoints[i].state = RedPointState.Simple;
- return;
- }
- }
- }
- }
-
- public void SetDayRemind()
- {
- DayRemind.Instance.SetDayRemind(DayRemind.PASS_SKILL_REDPOINT, true);
- UpdateRedpoint();
- }
- #endregion
-
- private void OnFuncStateChangeEvent(int _id)
- {
- if (_id == 109)
- {
- UpdateRedpoint();
- }
- }
- }
-
- public struct PassSkillLimit
- {
- public int hole;
- public int level;
- public int vipLv;
- public int MountLv;
- }
-
- [Serializable]
- public class SkillData
- {
- [HideInInspector]
- public int skillId;
- [HideInInspector]
- public SkillConfig skillCfg;
- public Image m_LockImg;
- public Image m_SelectImg;
- public Button m_SkillBtn;
- public Text m_SkillNameTxt;
- [SerializeField] Image m_BottomImg;
- [SerializeField] Image m_SkillIcon;
- [SerializeField] Text m_SkillSourceTxt;
-
- public void SetSkillData(int _id)
- {
- this.skillId = _id;
- if (skillId == 0)
- {
- m_SkillIcon.gameObject.SetActive(false);
- return;
- }
- m_SkillIcon.gameObject.SetActive(true);
- skillCfg = ConfigManager.Instance.GetTemplate<SkillConfig>(_id);
- m_SkillIcon.SetSprite(skillCfg.IconName);
-
- if (m_SkillNameTxt != null)
- {
- m_SkillNameTxt.text = skillCfg.SkillName;
- }
- if (m_SkillSourceTxt != null)
- {
- m_SkillSourceTxt.text = skillCfg.Skillsource;
- }
- }
-
- public void SetActive(bool _active)
- {
- m_SkillIcon.material = _active ? MaterialUtility.GetUIDefaultGraphicMaterial() : MaterialUtility.GetDefaultSpriteGrayMaterial();
- if (m_BottomImg != null)
- {
- m_BottomImg.material = _active ? MaterialUtility.GetUIDefaultGraphicMaterial() : MaterialUtility.GetDefaultSpriteGrayMaterial();
- }
- }
- }
-}
-
+锘縰sing System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using TableConfig;
+using System;
+using UnityEngine.UI;
+using LitJson;
+
+namespace Snxxz.UI
+{
+ public class SkillModel : Model, IBeforePlayerDataInitialize,IPlayerLoginOk
+ {
+ public override void Init()
+ {
+ ParseConfig();
+ FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
+ PlayerTaskDatas.Event_TaskInformation += TaskInformationUpdate;
+ }
+
+ public override void UnInit()
+ {
+ FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
+ PlayerTaskDatas.Event_TaskInformation -= TaskInformationUpdate;
+ }
+
+ public void OnBeforePlayerDataInitialize()
+ {
+ PlayerDatas.Instance.skill.ClearSkillData();
+ equipPassSkills.Clear();
+ playerLoginOk = false;
+ equipPassPage = false;
+ taskHoleCondition = 0;
+ }
+
+ #region 閰嶇疆
+ public const int ACT_SKILL_NUM = 8;
+ public const int PASS_SKILL_TYPE = 2;
+ public const int ACT_SKILL_TYPE = 1;
+ public const int PASS_SKILL_NUM = 8;
+ public const int QUICK_SKILL_COUNT = 7;
+ private Dictionary<int, int[]> quickBaseSkillDic = new Dictionary<int, int[]>();
+ private Dictionary<int, int> xpSkillsDic = new Dictionary<int, int>();
+ public List<PassSkillLimit> passSkillLimits = new List<PassSkillLimit>();
+ public int passEquipCnt { get; private set; }
+ public Dictionary<int, int[]> passEquipGetWays = new Dictionary<int, int[]>();
+ public Dictionary<int, string> passEquipGetWayTxts;
+ 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; }
+ public int immediatelyUnlockTask { get; private set; }
+ void ParseConfig()
+ {
+ for (int i = 1; i <= 3; i++)
+ {
+ var cfg = Config.Instance.Get<FuncConfigConfig>(StringUtility.Contact("QuickJobSkill", i));
+ if (cfg != null)
+ {
+ quickBaseSkillDic.Add(i, ConfigParse.GetMultipleStr<int>(cfg.Numerical1));
+ }
+ }
+ FuncConfigConfig funcCfg = Config.Instance.Get<FuncConfigConfig>("XpSkillID");
+ if (funcCfg != null)
+ {
+ xpSkillsDic = ConfigParse.GetDic<int, int>(funcCfg.Numerical1);
+ }
+ funcCfg = Config.Instance.Get<FuncConfigConfig>("PassSkillEquipLimit");
+ if (funcCfg != null)
+ {
+ JsonData jsonData = JsonMapper.ToObject(funcCfg.Numerical1);
+ foreach (string key in jsonData.Keys)
+ {
+ 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>("PassiveSkillTask");
+ immediatelyUnlockTask = int.Parse(funcCfg.Numerical2);
+ funcCfg = Config.Instance.Get<FuncConfigConfig>("PassSkillEquipGetWay");
+ if (funcCfg != null)
+ {
+ JsonData jsonData = JsonMapper.ToObject(funcCfg.Numerical1);
+ foreach (string key in jsonData.Keys)
+ {
+ int[] intarray = JsonMapper.ToObject<int[]>(jsonData[key].ToJson());
+ passEquipGetWays.Add(int.Parse(key), intarray);
+ }
+ passEquipGetWayTxts = ConfigParse.GetDic<int, string>(funcCfg.Numerical2);
+ }
+ funcCfg = Config.Instance.Get<FuncConfigConfig>("SkillActTypeIdSort");
+ skillActDict = new Dictionary<int, Dictionary<int, List<SkillConfig>>>();
+ var _JobTypeIds = ConfigParse.GetMultipleStr<int>(funcCfg.Numerical1);
+ var _dict = new Dictionary<int, List<SkillConfig>>();
+ for (int i = 0; i < _JobTypeIds.Length; i++)
+ {
+ var _list = SkillConfig.GetSkillActConfigs(2, ACT_SKILL_TYPE, _JobTypeIds[i]);
+ if (_list != null)
+ {
+ _dict.Add(_JobTypeIds[i], _list);
+ }
+ }
+ skillActDict.Add(2, _dict);
+ _JobTypeIds = ConfigParse.GetMultipleStr<int>(funcCfg.Numerical2);
+ _dict = new Dictionary<int, List<SkillConfig>>();
+ for (int i = 0; i < _JobTypeIds.Length; i++)
+ {
+ var _list = SkillConfig.GetSkillActConfigs(4, ACT_SKILL_TYPE, _JobTypeIds[i]);
+ if (_list != null)
+ {
+ _dict.Add(_JobTypeIds[i], _list);
+ }
+ }
+ skillActDict.Add(4, _dict);
+ _JobTypeIds = ConfigParse.GetMultipleStr<int>(funcCfg.Numerical3);
+ _dict = new Dictionary<int, List<SkillConfig>>();
+ for (int i = 0; i < _JobTypeIds.Length; i++)
+ {
+ var _list = SkillConfig.GetSkillActConfigs(8, ACT_SKILL_TYPE, _JobTypeIds[i]);
+ if (_list != null)
+ {
+ _dict.Add(_JobTypeIds[i], _list);
+ }
+ }
+ skillActDict.Add(8, _dict);
+ funcCfg = Config.Instance.Get<FuncConfigConfig>("SpecialPassSkills");
+ betterPassSkills = new List<int>();
+ var _array = ConfigParse.GetMultipleStr<int>(funcCfg.Numerical1);
+ if (_array != null)
+ {
+ betterPassSkills.AddRange(_array);
+ }
+
+ for (int i = 0; i < passEquipCnt; i++)
+ {
+ passSkillHoleRedpoints.Add(new Redpoint(10302, 10302 * 100 + i));
+ }
+ }
+
+ public int[] GetQuickBaseSkillArray(int occupy)
+ {
+ int[] array = null;
+ quickBaseSkillDic.TryGetValue(occupy, out array);
+ return array;
+ }
+
+ public int GetQuickSkillIdByPos(int pos)
+ {
+ int skillid = 0;
+ PlayerSkillData data = PlayerDatas.Instance.skill.GetQuickSkillByPos(pos);
+ if (data == null)
+ {
+ var intarray = quickBaseSkillDic[PlayerDatas.Instance.baseData.Job];
+ if (pos < intarray.Length)
+ {
+ skillid = intarray[pos];
+ }
+ }
+ else
+ {
+ skillid = data.id;
+ }
+ return skillid;
+ }
+
+ public int GetXpSkillID()
+ {
+ int skillID;
+ xpSkillsDic.TryGetValue(PlayerDatas.Instance.baseData.Job, out skillID);
+ return skillID;
+ }
+ #endregion
+
+ #region 涓诲姩鎶�鑳�
+ public int presentSltSkillID = 0;
+ public event Action OnRefreshSltSkill;
+ public void RefreshSltSkill()
+ {
+ if (OnRefreshSltSkill != null)
+ OnRefreshSltSkill();
+ }
+ public bool skillDraging = false;
+ public int skillDragId = 0;
+ public float onDragDelay = 0.1f;
+ private Skill m_XpSkill;
+ public Skill xpSkill
+ {
+ get
+ {
+ return m_XpSkill ?? (m_XpSkill = PlayerDatas.Instance.hero.SkillMgr.Get(GetXpSkillID()));
+ }
+ }
+
+ public event Action OnAutoUseXpEvent;
+ public bool AutoUseXp()
+ {
+ return QuickSetting.Instance.GetQuickSettingBool(QuickSetting.QuickSettingType.AutoUseXp, 0, false);
+ }
+
+ public void SetAutoUseXp(bool _auto)
+ {
+ if (_auto != AutoUseXp())
+ {
+ QuickSetting.Instance.SetQuickSetting(QuickSetting.QuickSettingType.AutoUseXp, _auto);
+ QuickSetting.Instance.SendPackage();
+ if (OnAutoUseXpEvent != null)
+ {
+ OnAutoUseXpEvent();
+ }
+ }
+ }
+
+
+ #endregion
+
+ #region 琚姩鎶�鑳�
+ public int presentSltPage = 0;
+ 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)
+ {
+ _skillId = 0;
+ if (equipPassSkills.ContainsKey(page))
+ {
+ Dictionary<int, int> dic = equipPassSkills[page];
+ if (dic.ContainsKey(hole))
+ {
+ _skillId = dic[hole];
+ if (_skillId != 0)
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+ public void SendEquipPassSkills(int _skillId, int _hole)
+ {
+ PlayerSkillData data = PlayerDatas.Instance.skill.GetSKillById(_skillId);
+ if (data != null && data.skillCfg.FuncType == PASS_SKILL_TYPE)
+ {
+ Dictionary<int, int> dic = null;
+ if (equipPassSkills.TryGetValue(presentSltPage, out dic))
+ {
+ int _preHole = -1;
+ if (dic.ContainsKey(_hole) && dic[_hole] == _skillId)
+ {
+ return;
+ }
+ foreach (var _key in dic.Keys)
+ {
+ if (_skillId == dic[_key] && (!dic.ContainsKey(_hole) || dic[_hole] == 0))
+ {
+ _preHole = _key;
+ break;
+ }
+ else if (_skillId == dic[_key])
+ {
+ SysNotifyMgr.Instance.ShowTip("PassSkillSameError");
+ return;
+ }
+ }
+ if (_preHole != -1)
+ {
+ SendEquipPassSkill(presentSltPage, _preHole, 0);
+ }
+ }
+ int _skill = 0;
+ if (TryGetEquipPassSkills(presentSltPage, _hole, out _skill) && betterPassSkills.Contains(_skill))
+ {
+ ConfirmCancel.ShowPopConfirm(Language.Get("TeamPrepare1"), Language.Get("ReBetterSkill"), (bool isOk) =>
+ {
+ if (isOk)
+ {
+ SoundPlayer.Instance.PlayUIAudio(28);
+ SendEquipPassSkill(presentSltPage, _hole, _skillId);
+ }
+ });
+ }
+ else
+ {
+ SoundPlayer.Instance.PlayUIAudio(28);
+ SendEquipPassSkill(presentSltPage, _hole, _skillId);
+ }
+
+ }
+ }
+
+ 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;
+ }
+ }
+ UpdateTaskHoleRedpoint();
+ }
+
+ RolePromoteModel m_PromoteModel;
+ RolePromoteModel promoteModel
+ {
+ get
+ {
+ 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)
+ {
+ var pak = new CB407_tagCMPassiveSet();
+ pak.Page = (byte)_page;
+ pak.Index = (byte)_index;
+ pak.SkillID = (uint)_skillId;
+ GameNetSystem.Instance.SendInfo(pak);
+ }
+
+ public void SendEquipPage()
+ {
+ if (presentSltPage == presentEquipPage)
+ {
+ return;
+ }
+ equipPassPage = true;
+ CB408_tagCMPassivePage pak = new CB408_tagCMPassivePage();
+ pak.Page = (byte)presentSltPage;
+ GameNetSystem.Instance.SendInfo(pak);
+ }
+
+ public bool IsPassSkillHoleOpen(int _hole)
+ {
+ PassSkillLimit limit;
+ if (TryGetPassSkillLimit(_hole, out limit))
+ {
+ if (limit.level > 0)
+ {
+ if (PlayerDatas.Instance.baseData.LV < limit.level)
+ {
+ return false;
+ }
+ }
+ else if (limit.vipLv > 0)
+ {
+ if (PlayerDatas.Instance.baseData.VIPLv < limit.vipLv)
+ {
+ return false;
+ }
+ }
+ else if (limit.MountLv > 0)
+ {
+ if (promoteModel.GetMountTotallv() < limit.MountLv)
+ {
+ return false;
+ }
+ }
+ else if (limit.OpenSkillSlots > 0)
+ {
+ if (!IsTaskHoleUnlock(limit.OpenSkillSlots))
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+ return false;
+ }
+
+ public int PassOpenHoleCount()
+ {
+ var count = 0;
+ for (int i = 0; i < 6; i++)
+ {
+ if (IsPassSkillHoleOpen(i))
+ {
+ count++;
+ }
+ }
+ return count;
+ }
+
+ public bool TryGetPassSkillLimit(int _hole, out PassSkillLimit _limit)
+ {
+ _limit = default(PassSkillLimit);
+ int index = passSkillLimits.FindIndex((x) =>
+ {
+ return x.hole == _hole;
+ });
+ if (index == -1)
+ {
+ return false;
+ }
+ _limit = passSkillLimits[index];
+ return true;
+ }
+
+ public void UpdateEquipPassSkills(HB406_tagMCPassiveSet package)
+ {
+ if (package.PageCnt == 0)
+ {
+ return;
+ }
+ for (int i = 0; i < package.PassiveSkills.Length; i++)
+ {
+ if (package.PassiveSkills[i].Count == 0)
+ {
+ continue;
+ }
+ for (int j = 0; j < package.PassiveSkills[i].Count; j++)
+ {
+ SetEquipPassSkill(i, j, (int)package.PassiveSkills[i].SkillIDList[j]);
+ }
+ }
+ if (UpdatePassEquipSkillEvent != null)
+ {
+ UpdatePassEquipSkillEvent();
+ }
+ UpdateRedpoint();
+ }
+
+ public void UpdateEquipPassPage(HB407_tagMCPassivePage package)
+ {
+ presentEquipPage = package.Page;
+ if (equipPassPage)
+ {
+ SysNotifyMgr.Instance.ShowTip("SetPassEquipPageSuccess", presentEquipPage + 1);
+ }
+ equipPassPage = false;
+ UpdateRedpoint();
+ }
+
+ public void UpdateEquipPassSkill(HB408_tagMCPassiveSetAnswer package)
+ {
+ SetEquipPassSkill(package.Page, package.Index, (int)package.SkillID);
+ if (UpdatePassEquipSkillEvent != null)
+ {
+ UpdatePassEquipSkillEvent();
+ }
+ }
+
+ public void SetEquipPassSkill(int _page, int _index, int _skillId)
+ {
+ Dictionary<int, int> dic = null;
+ if (!equipPassSkills.TryGetValue(_page, out dic))
+ {
+ dic = new Dictionary<int, int>();
+ equipPassSkills.Add(_page, dic);
+ }
+ dic[_index] = _skillId;
+ }
+
+ public void OnPlayerLoginOk()
+ {
+ if (GetEquipPassSkillCnt() == 0)
+ {
+ Dictionary<int, PlayerSkillData> playerskills = PlayerDatas.Instance.skill.GetAllSkill();
+ var _cnt = 0;
+ presentSltPage = 0;
+ foreach (var _skill in playerskills.Values)
+ {
+ if (_cnt >= 2)
+ {
+ break;
+ }
+ if (_skill.skillCfg.FuncType == PASS_SKILL_TYPE)
+ {
+ SendEquipPassSkills(_skill.id, _cnt);
+ _cnt++;
+ }
+ }
+ }
+ playerLoginOk = true;
+ UpdateRedpoint();
+ UpdateTaskHoleRedpoint();
+ }
+
+ public void CheckEquipPassSkill(PlayerSkillData _skill)
+ {
+ if (!playerLoginOk)
+ {
+ return;
+ }
+ if (_skill.skillCfg.FuncType != PASS_SKILL_TYPE)
+ {
+ return;
+ }
+ var _cnt = GetEquipPassSkillCnt();
+ if (_cnt < 2)
+ {
+ for (int i = 0; i < passEquipCnt; i++)
+ {
+ var _id = 0;
+ if (!TryGetEquipPassSkills(0, i, out _id))
+ {
+ SendEquipPassSkills(_skill.id, i);
+ break;
+ }
+ }
+ }
+ }
+
+ public bool ContainsEquipPassSkill(int _skillId)
+ {
+ foreach (var _dict in equipPassSkills.Values)
+ {
+ foreach (var _id in _dict.Values)
+ {
+ if (_skillId == _id)
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ public int GetEquipPassSkillCnt()
+ {
+ var _totalCnt = 0;
+ foreach (var _dict in equipPassSkills.Values)
+ {
+ foreach (var _id in _dict.Values)
+ {
+ if (_id != 0)
+ {
+ _totalCnt += 1;
+ }
+ }
+ }
+ return _totalCnt;
+ }
+
+ public int GetEquipPassSkillCount(int _page)
+ {
+ if (!equipPassSkills.ContainsKey(_page))
+ {
+ return 0;
+ }
+ var _dict = equipPassSkills[_page];
+ var count = 0;
+ foreach (var _id in _dict.Values)
+ {
+ if (_id != 0)
+ {
+ count += 1;
+ }
+ }
+ return count;
+ }
+ #endregion
+
+ #region 绾㈢偣
+ public Redpoint skillRedpoint = new Redpoint(1, 103);
+ public Redpoint passSkillRedpoint = new Redpoint(103, 10302);
+ public List<Redpoint> passSkillHoleRedpoints = new List<Redpoint>();
+
+ void UpdateRedpoint()
+ {
+ for (int i = 0; i < passSkillHoleRedpoints.Count; i++)
+ {
+ passSkillHoleRedpoints[i].state = RedPointState.None;
+ }
+ if (!FuncOpen.Instance.IsFuncOpen(109))
+ {
+ return;
+ }
+ if (DayRemind.Instance.GetDayRemind(DayRemind.PASS_SKILL_REDPOINT))
+ {
+ return;
+ }
+ var _count = GetEquipPassSkillCount(presentEquipPage);
+ if (PlayerDatas.Instance.skill.GetSkillCountByType(PASS_SKILL_TYPE) > _count
+ && PassOpenHoleCount() > _count)
+ {
+ for (int i = 0; i < passEquipCnt; i++)
+ {
+ var _skillId = 0;
+ if (!TryGetEquipPassSkills(presentEquipPage, i, out _skillId)
+ && IsPassSkillHoleOpen(i))
+ {
+ passSkillHoleRedpoints[i].state = RedPointState.Simple;
+ return;
+ }
+ }
+ }
+ }
+
+ public void SetDayRemind()
+ {
+ DayRemind.Instance.SetDayRemind(DayRemind.PASS_SKILL_REDPOINT, true);
+ UpdateRedpoint();
+ }
+
+ public Redpoint taskHoleRedpoint = new Redpoint(10302, 1030299);
+ void UpdateTaskHoleRedpoint()
+ {
+ taskHoleRedpoint.state = RedPointState.None;
+ if (DayRemind.Instance.GetDayRemind(DayRemind.TASK_SKILL_HOLE))
+ {
+ return;
+ }
+ foreach (var hole in taskHoleDict.Keys)
+ {
+ var taskId = taskHoleDict[hole];
+ if (taskId == immediatelyUnlockTask)
+ {
+ var config = Config.Instance.Get<PyTaskConfig>(taskId);
+ if (PlayerDatas.Instance.baseData.LV >= config.lv
+ && !IsTaskHoleUnlock(hole))
+ {
+ taskHoleRedpoint.state = RedPointState.Simple;
+ }
+ return;
+ }
+ }
+ }
+
+ public void SetTaskHoleRemind()
+ {
+ DayRemind.Instance.SetDayRemind(DayRemind.TASK_SKILL_HOLE, true);
+ UpdateTaskHoleRedpoint();
+ }
+ #endregion
+
+ private void OnFuncStateChangeEvent(int _id)
+ {
+ if (_id == 109)
+ {
+ UpdateRedpoint();
+ UpdateTaskHoleRedpoint();
+ }
+ }
+ }
+
+ public struct PassSkillLimit
+ {
+ public int hole;
+ public int level;
+ public int vipLv;
+ public int MountLv;
+ public int OpenSkillSlots;
+ }
+
+ [Serializable]
+ public class SkillData
+ {
+ [HideInInspector]
+ public int skillId;
+ [HideInInspector]
+ public SkillConfig skillCfg;
+ public Image m_LockImg;
+ public Image m_SelectImg;
+ public Button m_SkillBtn;
+ public Text m_SkillNameTxt;
+ [SerializeField] Image m_BottomImg;
+ [SerializeField] Image m_SkillIcon;
+ [SerializeField] Text m_SkillSourceTxt;
+
+ public void SetSkillData(int _id)
+ {
+ this.skillId = _id;
+ if (skillId == 0)
+ {
+ m_SkillIcon.gameObject.SetActive(false);
+ return;
+ }
+ m_SkillIcon.gameObject.SetActive(true);
+ skillCfg = Config.Instance.Get<SkillConfig>(_id);
+ m_SkillIcon.SetSprite(skillCfg.IconName);
+
+ if (m_SkillNameTxt != null)
+ {
+ m_SkillNameTxt.text = skillCfg.SkillName;
+ }
+ if (m_SkillSourceTxt != null)
+ {
+ m_SkillSourceTxt.text = skillCfg.Skillsource;
+ }
+ }
+
+ public void SetActive(bool _active)
+ {
+ m_SkillIcon.material = _active ? MaterialUtility.GetUIDefaultGraphicMaterial() : MaterialUtility.GetDefaultSpriteGrayMaterial();
+ if (m_BottomImg != null)
+ {
+ m_BottomImg.material = _active ? MaterialUtility.GetUIDefaultGraphicMaterial() : MaterialUtility.GetDefaultSpriteGrayMaterial();
+ }
+ }
+ }
+}
+
--
Gitblit v1.8.0