using System.Collections.Generic; using Games.LogicObj; using GCGame; using GCGame.Table; using UnityEngine; using UnityEngine.UI; using System.Collections; using Games.Fellow; using Games.Events; public class PetSkillsInfoWnd : MonoBehaviour { public UIContainerSelect m_Contains; public Toggle IsShowHas; public Toggle IsLow; public Image skillIcon; //选中的技能的图片 public Text skillname; //选中的技能的名称 public Text skillDescript; //选中的技能的描述 public Image payItemQuility; public Image payItemIcon; //消耗道具图标 public Text payItemName; //消耗道具名称 public Text PayItemNum; //消耗道具量 public Text PayCost; //消耗货币量 public Text PayHas; //消耗货币拥有量 public Image PayMoneyIcon; public Image PayMoneyHasIcon; public Text skillLockNum; //锁定的技能数 public Text currAdd; //当前加成 public Text TipText; public GameObject[] hadStudySkills = new GameObject[8]; public GameObject skillHaveselect; //选中外框 public GameObject LockSkillBtn; public GameObject LockSkillOKBtn; public GameObject UNLockSkillBtn; public GameObject GetBtnObj; public GameObject PayTip; private int m_currSelectSkillId = 0; private Dictionary LockObjs = new Dictionary(); private Dictionary toggles = new Dictionary(); private bool _OpenLockSkill = false; public bool OpenLockSkill { get { return _OpenLockSkill; } } public void Awake() { Hashtable calbackMoveparam2 = new Hashtable(); calbackMoveparam2["name"] = "LockFellowSkill"; MessageEventCallBack fun2 = LockFellowSkill; calbackMoveparam2.Add("callFun", fun2); EventDispatcher.Instance.AddMessageEvent(Games.Events.EventId.LockFellowSkill, calbackMoveparam2); Hashtable calbackMoveparam3 = new Hashtable(); calbackMoveparam3["name"] = "SkillsInfoPayFresh"; MessageEventCallBack fun3 = PayFresh; calbackMoveparam3.Add("callFun", fun3); EventDispatcher.Instance.AddMessageEvent(Games.Events.EventId.FRESHSAMEUSETIP, calbackMoveparam3); } public void OnDestroy() { EventDispatcher.Instance.RemoveMessage(Games.Events.EventId.StudyFellowSkillSuccess, "StudyFellowSkill"); EventDispatcher.Instance.RemoveMessage(Games.Events.EventId.LockFellowSkill, "LockFellowSkill"); EventDispatcher.Instance.RemoveMessage(Games.Events.EventId.FRESHSAMEUSETIP, "SkillsInfoPayFresh"); } public void PayFresh(Hashtable addparam, Hashtable sendparam) { CountCost(m_currSelectSkillId); } public void LockFellowSkill(Hashtable addparam, Hashtable sendparam) { if (sendparam == null) return; if (sendparam.ContainsKey("fellowId") == false) return; ulong guid = (ulong)sendparam["fellowId"]; if (PetMainWnd.CurrentSelectFellowId != guid) return; Fellow pet = GameManager.gameManager.PlayerDataPool.FellowContainer.GetFellowByGuid(PetMainWnd.CurrentSelectFellowId); if (pet == null) return; foreach (var lockObj in LockObjs) { if (pet.isSkillLocked(lockObj.Key)) { lockObj.Value.SetActive(true); } else lockObj.Value.SetActive(false); } int lockNum = pet.GetlockNum(); int lockNumMax = GetMaxLockNum(); skillLockNum.text = string.Format("{0}/{1}", lockNum, lockNumMax); OpenLockSkillBtn(true); } public void StudyFellowSkill(Hashtable addparam, Hashtable sendparam) { if (sendparam == null) return; if (sendparam.ContainsKey("fellowId") == false) return; ulong guid = (ulong)sendparam["fellowId"]; if (PetMainWnd.CurrentSelectFellowId != guid) return; Fellow pet = GameManager.gameManager.PlayerDataPool.FellowContainer.GetFellowByGuid(PetMainWnd.CurrentSelectFellowId); if (pet == null) return; InitHasSkillInfo(pet); int learnSkill = (int)sendparam["learn"]; int replaceSkill = (int)sendparam["replace"]; UpdateSkillBook(learnSkill, replaceSkill, pet); OpenLockSkillBtn(true); CountCost(m_currSelectSkillId); } public bool IsHasSkillBook(int fellodSkillId) { Tab_FellowLearnSkillCost skilllearnCost = TableManager.GetFellowLearnSkillCostByID(fellodSkillId, 0); if (skilllearnCost == null) { return false; } Tab_CommonItem commonItem = null; for (int i = 0; i < skilllearnCost.getConsumeTypeCount(); i++) { if (skilllearnCost.GetConsumeTypebyIndex(i) == (int)CONSUM_TYPE.ITEM) { commonItem = TableManager.GetCommonItemByID(skilllearnCost.GetConsumeSubTypebyIndex(i), 0); } } if (commonItem == null) { return false; } return GameManager.gameManager.PlayerDataPool.BackPack.GetItemCountByDataId(commonItem.Id) > 0; } public void ShowHas(bool Low) { Fellow pet = GameManager.gameManager.PlayerDataPool.FellowContainer.GetFellowByGuid(PetMainWnd.CurrentSelectFellowId); if (pet == null) return; var fellowSkills = TableManager.GetFellowLearnSkillCost().Values; List showList = new List(); List selects = new List(); if(!Low) { showList.Insert(0, -3); showList.Insert(0, -3); showList.Insert(0, -2); } int TypeThree = 0; foreach (var value in fellowSkills) { Tab_FellowSkill skillInfo = TableManager.GetFellowSkillByID(value.Id, 0); if (skillInfo == null || skillInfo.Type == -1 || skillInfo.IsShow!=1) continue; if (IsShowHas.isOn && IsHasSkillBook(skillInfo.Id) == false) continue; if (skillInfo.Type == 1 && Low) { showList.Add(value.Id); } if(!Low) { if (skillInfo.Type == 3) { showList.Insert(0, value.Id); TypeThree++; } if (skillInfo.Type == 2) { showList.Add(value.Id); } } } if (showList.Count > 0) selects.Add(showList[0]); if (!Low) { int need = TypeThree % 3; if(need>0) { for (int i = 0; i < 3 - need; i++) { showList.Insert(TypeThree + i, -3); } } showList.Insert(0, -3); showList.Insert(0, -3); showList.Insert(0, -1); } m_Contains.InitSelectContent(showList, selects, OnSelectSkillBook, null); InitHasSkillInfo(pet); OpenLockSkillBtn(true); } void OnEnable() { ShowHas(IsLow.isOn); TipText.text = StrDictionary.GetClientDictionaryString("#{20171}"); } public void UpdateSkillBook(int learn,int replace,Fellow pet) { Hashtable table = new Hashtable(); table["learn"] = learn; table["replace"] = replace; m_Contains.RefreshItems(table); CountCost(m_currSelectSkillId); } int needLearnSkillNum = 0; public void InitHasSkillInfo(Fellow fellow) { LockObjs.Clear(); toggles.Clear(); for (int i = 0; i < hadStudySkills.Length; i++) { if (i == 0) { AddStudySkill(fellow, fellow.GY_skillid, i); continue; } if (i == 1) { AddStudySkill(fellow, fellow.MW_skillid, i); continue; } AddStudySkill(fellow, fellow.GetOwnSkillId(i - 2), i); } int lockNumMax = GetMaxLockNum(); if(lockNumMax <= 0) { var lockInfos = TableManager.GetFellowSkillLockNum().Values; foreach(var oneLock in lockInfos) { if (oneLock.MaxLockNum > 0) { needLearnSkillNum = oneLock.Id; break; } } } else { needLearnSkillNum = 0; } int lockNum = fellow.GetlockNum(); skillLockNum.text = string.Format("{0}/{1}", lockNum, lockNumMax); Tab_FellowLearnSkillAttr skillAttr = TableManager.GetFellowLearnSkillAttrByID(fellow.GetOwnTotleCount(), 0); if(skillAttr==null) { //currAdd.text = StrDictionary.GetClientDictionaryString("#{20142}",0); } else { //currAdd.text = StrDictionary.GetClientDictionaryString("#{20142}", skillAttr.AddPercent*1.0f / 100.0f)+"%"; } UNLockSkillBtn.SetActive(needLearnSkillNum > 0); } public void OpenLockSkillBtn(bool state) { _OpenLockSkill = state; LockSkillBtn.SetActive(state); LockSkillOKBtn.SetActive(!state); UNLockSkillBtn.SetActive(needLearnSkillNum > 0); } public void OnSelectSkillBook(object param) { int skillId = (int)param; m_currSelectSkillId = skillId; CountCost(skillId); } int hasCount = 0; int commonItem_Cost = 0; int commonItem_Money = 0; int commonItem_Money_Cost = 0; public void CountCost(int bookID) { if (m_currSelectSkillId != bookID) return; Tab_FellowLearnSkillCost skillBookInfo = TableManager.GetFellowLearnSkillCostByID(m_currSelectSkillId, 0); if(skillBookInfo==null) { return; } Tab_FellowSkill skill = TableManager.GetFellowSkillByID(bookID, 0); if (skill == null || skill.Type == -1) return; Tab_CommonItem commonItem = null; for (int i = 0; i < skillBookInfo.getConsumeTypeCount(); i++) { if (skillBookInfo.GetConsumeTypebyIndex(i) == (int)CONSUM_TYPE.ITEM) { commonItem = TableManager.GetCommonItemByID(skillBookInfo.GetConsumeSubTypebyIndex(i), 0); commonItem_Cost = skillBookInfo.GetConsumeNumbyIndex(i); } if (skillBookInfo.GetConsumeTypebyIndex(i) == (int)CONSUM_TYPE.MONEY) { commonItem_Money = skillBookInfo.GetConsumeSubTypebyIndex(i); commonItem_Money_Cost = skillBookInfo.GetConsumeNumbyIndex(i); long count = GameManager.gameManager.PlayerDataPool.Money.GetMoneyByType((MONEYTYPE)commonItem_Money); PayTip.SetActive(count < commonItem_Money_Cost); } } if (commonItem == null) return; LoadAssetBundle.Instance.SetImageSprite(skillIcon, skill.SkillIcon); skillname.text = skillBookInfo.SkillName; string strItemDesc = StrDictionary.GetClientString_WithNameSex(skillBookInfo.SkillDesc); skillDescript.text = strItemDesc; LoadAssetBundle.Instance.SetImageSprite(payItemQuility, GCGame.Utils.GetItemQualityFrame(commonItem.Quality)); LoadAssetBundle.Instance.SetImageSprite(payItemIcon, commonItem.Icon); if (commonItem.QualityEffect > 0) { CommonItemContainerItem.ShowQualityEffect(true, commonItem.QualityEffect, payItemIcon.transform); } else { CommonItemContainerItem.ShowQualityEffect(false, commonItem.QualityEffect, payItemIcon.transform); } payItemName.text = commonItem.Name; hasCount = GameManager.gameManager.PlayerDataPool.BackPack.GetItemCountByDataId(commonItem.Id); if (hasCount < commonItem_Cost) { PayItemNum.text = string.Format("{0}/{1}", hasCount, commonItem_Cost); GetBtnObj.SetActive(true); Button btn = GetBtnObj.GetComponent