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;
}
}