using cfg.ActorCfg; using cfg.PlayerSkillCfg; using cfg.SkillCfg; using Framework; using Framework.Condition; using Gameplay; using Gameplay.Net; using System; using System.Collections.Generic; using System.Linq; using PhxhSDK; using Constants = Framework.Constants; using cfg.CharacterCfg; /// /// 玩家技能升级帮助类 /// public static class PlayerSkillUpgradeHelper { /// /// 获取解锁技能树某层数需要的技能等级 /// /// public static int UnLockFloorNeedLevel(int floor) { List listUnLockTotalLevel = TableManager.Instance.Tables.GlobalConfig.PlayerSkillUpgradeUnLockTotalLevel; int index = floor - 1; if (listUnLockTotalLevel == null || index >= listUnLockTotalLevel.Count) { DebugUtil.LogError("配置错误或传入数据错误"); return int.MaxValue; } return listUnLockTotalLevel[index]; } /// /// 判断技能树的某层是否锁住 /// /// public static bool IsFloorLock(int floor) { List listUnLockTotalLevel = TableManager.Instance.Tables.GlobalConfig.PlayerSkillUpgradeUnLockTotalLevel; int index = floor - 1; if (listUnLockTotalLevel == null || index >= listUnLockTotalLevel.Count) { DebugUtil.LogError("配置错误或传入数据错误"); return true; } return Actor.Instance.PlayerSkill.GetSumLevel() < listUnLockTotalLevel[index]; } /// /// 判断技能是否锁住 /// /// /// public static bool IsSkillLock(DataPlayerSkillUpgrade data) { for (int i = 0; i < data.Unlock.Length; i++) { int level = Actor.Instance.PlayerSkill.GetLevel(data.Unlock[i]); if (level < 1) return true; } return false; } } /// /// 指挥官所有技能树数据 /// public class AllCommandSkillTreeData { /// /// 指挥官技能树字典,key:技能类型 value:技能树数据 /// private readonly Dictionary dicSkillTree = new(); public AllCommandSkillTreeData() { foreach (DataPlayerSkillUpgrade skillUpgradeData in TableManager.Instance.Tables.PlayerSkillUpgrade.DataList) { if (!dicSkillTree.TryGetValue(skillUpgradeData.SkillType, out CommandSkillTreeData skillTreeData)) { skillTreeData = new(); dicSkillTree[skillUpgradeData.SkillType] = skillTreeData; } skillTreeData.Add(skillUpgradeData); } } /// /// 根据技能类型获取技能树数据 /// /// /// public CommandSkillTreeData GetSkillTreeDataByType(PlayerSkillType type) { dicSkillTree.TryGetValue(type, out CommandSkillTreeData data); return data; } } /// /// 指挥官技能树数据 /// public class CommandSkillTreeData { /// /// 每层指挥官技能 /// private readonly List> listSetSkillId = new(); /// /// 获取技能树层数 /// public int FloorCount { get { return listSetSkillId.Count; } } public void Add(DataPlayerSkillUpgrade data) { int index = data.LayerID - 1; while (listSetSkillId.Count <= index) { listSetSkillId.Add(new()); } listSetSkillId[index].Add(data.ID); } /// /// 获取该层的技能配置数据列表 /// /// /// public List GetSkillIDs(int index) { if (index > listSetSkillId.Count) { DebugUtil.LogError("数组越界"); return null; } HashSet setId = listSetSkillId[index]; List listSkillData = new(setId.Count); foreach (int skillID in setId) { listSkillData.Add(new CommandSkillData(skillID)); } return listSkillData; } } /// /// 指挥官技能数据 /// public class CommandSkillData { /// /// 技能id /// private int playSkillID; /// /// 技能等级 /// private int skillLevel; /// /// 指挥官技能养成配置数据 /// private DataPlayerSkillUpgrade skillUpgradeData; /// /// 指挥官技能配置数据 /// private DataPlayerSkill playerSkill; #region 属性 public DataPlayerSkillUpgrade SkillUpgradeData { get { return skillUpgradeData; } } /// /// 技能ID /// public int SkillID { get { return playSkillID; } } /// /// 前置解锁条件列表(配置的id升一级就解锁) /// public int[] ListPreSkillID { get { return skillUpgradeData.PreSkillID; } } /// /// 技能名 /// public string Name { get { if (0 == skillLevel) return CommonUtils.GetLocalizeText(E_LocalizePrefix.PlayerSkill, playerSkill.ID - 1); return CommonUtils.GetLocalizeText(E_LocalizePrefix.PlayerSkill, playerSkill.ID); } } /// /// 技能描述 /// public string Desc { get { if (0 == skillLevel) return CommonUtils.GetLocalizeText(E_LocalizePrefix.PassiveSkillDesc, playerSkill.ID - 1); return CommonUtils.GetLocalizeText(E_LocalizePrefix.PassiveSkillDesc, playerSkill.ID); } } /// /// 图标路径 /// public string IconPath { get { if (null == playerSkill) { DebugUtil.LogError($"指挥官养成技能id:{skillUpgradeData.ID},配置的技能id{skillUpgradeData.SkillID}没有找到"); return string.Empty; } return $"{Constants.UI_PlaySkill_IconPathFolder}{playerSkill.IconPath}.png"; } } /// /// 当前等级 /// public int Level { get { return skillLevel; } } /// /// 最大等级 /// public int MaxLevel { get { return skillUpgradeData.MaxLevel; } } /// /// 所在第几层 /// public int Floor { get { return skillUpgradeData.LayerID; } } /// /// 是否锁住 /// public bool IsLock { get { return PlayerSkillUpgradeHelper.IsSkillLock(skillUpgradeData) || PlayerSkillUpgradeHelper.IsFloorLock(skillUpgradeData.LayerID); } } /// /// 是否满级 /// public bool IsFullLevel { get { return Level >= MaxLevel; } } #endregion public CommandSkillData(int id) { playSkillID = id; skillLevel = Actor.Instance.PlayerSkill.GetLevel(playSkillID); if (0 == skillLevel) skillUpgradeData = TableManager.Instance.Tables.PlayerSkillUpgrade.Get(playSkillID, 1); else skillUpgradeData = TableManager.Instance.Tables.PlayerSkillUpgrade.Get(playSkillID, skillLevel); if (null != skillUpgradeData) playerSkill = TableManager.Instance.Tables.PlayerSkillConfig.Get(skillUpgradeData.SkillID); } public string GetNameByLevel(int level) { if (0 == level) { DataPlayerSkillUpgrade upgradeData = TableManager.Instance.Tables.PlayerSkillUpgrade.Get(playSkillID, 1); DataPlayerSkill skillData; if (null != upgradeData) { skillData = TableManager.Instance.Tables.PlayerSkillConfig.Get(upgradeData.SkillID); return CommonUtils.GetLocalizeText(E_LocalizePrefix.PlayerSkill, skillData.ID - 1); } } else { DataPlayerSkillUpgrade upgradeData = TableManager.Instance.Tables.PlayerSkillUpgrade.Get(playSkillID, level); DataPlayerSkill skillData; if (null != upgradeData) { skillData = TableManager.Instance.Tables.PlayerSkillConfig.Get(upgradeData.SkillID); return CommonUtils.GetLocalizeText(E_LocalizePrefix.PlayerSkill, skillData.ID); } } return string.Empty; } public string GetDescByLevel(int level) { if (0 == level) { DataPlayerSkillUpgrade upgradeData = TableManager.Instance.Tables.PlayerSkillUpgrade.Get(playSkillID, 1); DataPlayerSkill skillData; if (null != upgradeData) { skillData = TableManager.Instance.Tables.PlayerSkillConfig.Get(upgradeData.SkillID); return CommonUtils.GetLocalizeText(E_LocalizePrefix.PassiveSkillDesc, skillData.ID - 1); } } else { DataPlayerSkillUpgrade upgradeData = TableManager.Instance.Tables.PlayerSkillUpgrade.Get(playSkillID, level); DataPlayerSkill skillData; if (null != upgradeData) { skillData = TableManager.Instance.Tables.PlayerSkillConfig.Get(upgradeData.SkillID); return CommonUtils.GetLocalizeText(E_LocalizePrefix.PassiveSkillDesc, skillData.ID); } } return string.Empty; } }