public void RefreshShipSkills() { skillVOs = null; List <PlayerShipSkillVO> skills = new List <PlayerShipSkillVO>(); IShip currentShip = m_ShipProxy.GetAppointWarShip(); if (currentShip != null) { ISkill[] shipSkills = currentShip.GetSkillContainer().GetSkills(); List <ISkill> tempList = new List <ISkill>(shipSkills); tempList.Sort((skill1, skill2) => { int pos1 = m_PackageProxy.GetItem <ItemSkillVO>(skill1.GetUID()).Position; int pos2 = m_PackageProxy.GetItem <ItemSkillVO>(skill2.GetUID()).Position; return(pos1.CompareTo(pos2)); }); foreach (var skill in tempList) { int skillID = (int)skill.GetTID(); if (m_CfgEternityProxy.IsSkillExist(skillID)) { PlayerShipSkillVO skillVO = new PlayerShipSkillVO((int)skill.GetTID()); skills.Add(skillVO); } } } if (skills.Count > 0) { skillVOs = skills.ToArray(); } SendNotification(NotificationName.MSG_SHIP_SKILL_CHANGED); }
/// <summary> /// 重建技能列表 /// </summary> public void RebuildSkillList() { RefreshShipSkills(); ShipProxy shipProxy = GameFacade.Instance.RetrieveProxy(ProxyName.ShipProxy) as ShipProxy; IShip currentShip = shipProxy.GetAppointWarShip(); if (currentShip != null) { if (m_ShipIDToSkillList == null) { m_ShipIDToSkillList = new Dictionary <uint, List <PlayerSkillVO> >(); } // 缓存飞船自带技能 if (!m_ShipIDToSkillList.ContainsKey(currentShip.GetTID())) { ISkill[] shipSkills = currentShip.GetSkillContainer().GetSkills(); List <PlayerSkillVO> listToCache = new List <PlayerSkillVO>(); for (int iSkill = 0; iSkill < shipSkills.Length; iSkill++) { int skillID = (int)shipSkills[iSkill].GetTID(); PlayerSkillVO newSkill = PlayerSkillVO.CreateSkillVO(skillID); if (newSkill != null) { listToCache.Add(newSkill); if (!m_SkillIDToSkill.ContainsKey(skillID)) { m_SkillIDToSkill.Add(skillID, newSkill); } } } m_ShipIDToSkillList.Add(currentShip.GetTID(), listToCache); } // 缓存武器技能 IWeaponContainer container = currentShip.GetWeaponContainer(); if (container != null) { IWeapon[] weapons = container.GetWeapons(); if (weapons != null) { for (int iWeapon = 0; iWeapon < weapons.Length; iWeapon++) { if (weapons[iWeapon] != null) { int skillID = (int)weapons[iWeapon].GetBaseConfig().SkillId; PlayerSkillVO newSkill = PlayerSkillVO.CreateSkillVO(skillID); if (newSkill != null) { if (!m_SkillIDToSkill.ContainsKey(skillID)) { m_SkillIDToSkill.Add(skillID, newSkill); } if (!m_ShipIDToSkillList[currentShip.GetTID()].Contains(newSkill)) { m_ShipIDToSkillList[currentShip.GetTID()].Add(newSkill); } } } } } } } }