NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/UI/ShowAllCharacter/PlayerSkillCultivateData.cs

361 lines
9.8 KiB
C#
Raw Normal View History

2024-02-06 18:46:00 +08:00
using cfg.ActorCfg;
using cfg.PlayerSkillCfg;
2024-02-06 18:46:00 +08:00
using cfg.SkillCfg;
using Framework;
2024-02-29 17:33:54 +08:00
using Framework.Condition;
2024-02-23 13:16:47 +08:00
using Gameplay;
2024-02-06 18:46:00 +08:00
using Gameplay.Net;
2024-02-23 13:16:47 +08:00
using System;
2024-02-06 18:46:00 +08:00
using System.Collections.Generic;
2024-02-23 13:16:47 +08:00
using System.Linq;
2024-02-29 17:33:54 +08:00
using PhxhSDK;
using Constants = Framework.Constants;
2024-03-08 12:59:24 +08:00
using cfg.CharacterCfg;
2024-02-06 18:46:00 +08:00
2024-03-08 12:59:24 +08:00
/// <summary>
/// 玩家技能升级帮助类
/// </summary>
2024-02-29 17:33:54 +08:00
public static class PlayerSkillUpgradeHelper
2024-02-28 13:39:44 +08:00
{
2024-03-08 12:59:24 +08:00
/// <summary>
/// 获取解锁技能树某层数需要的技能等级
2024-03-08 12:59:24 +08:00
/// </summary>
/// <returns></returns>
public static int UnLockFloorNeedLevel(int floor)
2024-02-06 18:46:00 +08:00
{
List<int> listUnLockTotalLevel = TableManager.Instance.Tables.GlobalConfig.PlayerSkillUpgradeUnLockTotalLevel;
int index = floor - 1;
2024-03-08 12:59:24 +08:00
if (listUnLockTotalLevel == null || index >= listUnLockTotalLevel.Count)
2024-02-06 18:46:00 +08:00
{
DebugUtil.LogError("配置错误或传入数据错误");
return int.MaxValue;
2024-02-06 18:46:00 +08:00
}
return listUnLockTotalLevel[index];
}
2024-02-06 18:46:00 +08:00
2024-03-08 12:59:24 +08:00
/// <summary>
/// 判断技能树的某层是否锁住
2024-03-08 12:59:24 +08:00
/// </summary>
/// <returns></returns>
public static bool IsFloorLock(int floor)
2024-02-29 17:33:54 +08:00
{
List<int> listUnLockTotalLevel = TableManager.Instance.Tables.GlobalConfig.PlayerSkillUpgradeUnLockTotalLevel;
int index = floor - 1;
if (listUnLockTotalLevel == null || index >= listUnLockTotalLevel.Count)
2024-02-29 17:33:54 +08:00
{
DebugUtil.LogError("配置错误或传入数据错误");
return true;
2024-02-29 17:33:54 +08:00
}
2024-03-08 12:59:24 +08:00
return Actor.Instance.PlayerSkill.GetSumLevel() < listUnLockTotalLevel[index];
2024-02-29 17:33:54 +08:00
}
2024-03-08 12:59:24 +08:00
/// <summary>
/// 判断技能是否锁住
2024-03-08 12:59:24 +08:00
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
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;
2024-02-06 18:46:00 +08:00
}
}
2024-03-08 12:59:24 +08:00
/// <summary>
/// 指挥官所有技能树数据
/// </summary>
public class AllCommandSkillTreeData
{
/// <summary>
/// 指挥官技能树字典,key:技能类型 value:技能树数据
/// </summary>
private readonly Dictionary<PlayerSkillType, CommandSkillTreeData> 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);
}
}
/// <summary>
/// 根据技能类型获取技能树数据
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
public CommandSkillTreeData GetSkillTreeDataByType(PlayerSkillType type)
{
dicSkillTree.TryGetValue(type, out CommandSkillTreeData data);
return data;
}
}
/// <summary>
/// 指挥官技能树数据
/// </summary>
public class CommandSkillTreeData
{
/// <summary>
/// 每层指挥官技能
/// </summary>
private readonly List<HashSet<int>> listSetSkillId = new();
/// <summary>
/// 获取技能树层数
/// </summary>
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);
}
/// <summary>
/// 获取该层的技能配置数据列表
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
public List<CommandSkillData> GetSkillIDs(int index)
{
if (index > listSetSkillId.Count)
{
DebugUtil.LogError("数组越界");
return null;
}
HashSet<int> setId = listSetSkillId[index];
List<CommandSkillData> listSkillData = new(setId.Count);
foreach (int skillID in setId)
{
listSkillData.Add(new CommandSkillData(skillID));
}
return listSkillData;
}
}
/// <summary>
/// 指挥官技能数据
/// </summary>
public class CommandSkillData
{
/// <summary>
/// 技能id
/// </summary>
2024-06-24 15:58:15 +08:00
private int playSkillID;
2024-03-08 12:59:24 +08:00
/// <summary>
/// 技能等级
/// </summary>
private int skillLevel;
/// <summary>
/// 指挥官技能养成配置数据
/// </summary>
private DataPlayerSkillUpgrade skillUpgradeData;
/// <summary>
/// 指挥官技能配置数据
/// </summary>
private DataPlayerSkill playerSkill;
#region 属性
public DataPlayerSkillUpgrade SkillUpgradeData
{
get { return skillUpgradeData; }
}
2024-03-08 12:59:24 +08:00
/// <summary>
/// 技能ID
/// </summary>
public int SkillID
{
2024-06-24 15:58:15 +08:00
get { return playSkillID; }
2024-03-08 12:59:24 +08:00
}
/// <summary>
/// 前置解锁条件列表(配置的id升一级就解锁)
2024-03-08 12:59:24 +08:00
/// </summary>
public int[] ListPreSkillID
2024-03-08 12:59:24 +08:00
{
get { return skillUpgradeData.PreSkillID; }
2024-03-08 12:59:24 +08:00
}
/// <summary>
/// 技能名
/// </summary>
public string Name
{
2024-09-25 13:51:04 +08:00
get
{
if (0 == skillLevel)
return CommonUtils.GetLocalizeText(E_LocalizePrefix.PlayerSkill, playerSkill.ID - 1);
return CommonUtils.GetLocalizeText(E_LocalizePrefix.PlayerSkill, playerSkill.ID);
}
2024-03-08 12:59:24 +08:00
}
/// <summary>
/// 技能描述
/// </summary>
public string Desc
{
2024-09-25 13:51:04 +08:00
get
{
if (0 == skillLevel)
return CommonUtils.GetLocalizeText(E_LocalizePrefix.PassiveSkillDesc, playerSkill.ID - 1);
return CommonUtils.GetLocalizeText(E_LocalizePrefix.PassiveSkillDesc, playerSkill.ID);
}
2024-03-08 12:59:24 +08:00
}
/// <summary>
/// 图标路径
/// </summary>
public string IconPath
{
2024-07-22 18:56:45 +08:00
get
{
if (null == playerSkill)
2024-09-25 13:51:04 +08:00
{
DebugUtil.LogError($"指挥官养成技能id:{skillUpgradeData.ID},配置的技能id{skillUpgradeData.SkillID}没有找到");
return string.Empty;
}
2024-07-22 18:56:45 +08:00
return $"{Constants.UI_PlaySkill_IconPathFolder}{playerSkill.IconPath}.png";
}
2024-03-08 12:59:24 +08:00
}
/// <summary>
/// 当前等级
/// </summary>
public int Level
{
2024-09-25 13:51:04 +08:00
get { return skillLevel; }
2024-03-08 12:59:24 +08:00
}
/// <summary>
/// 最大等级
/// </summary>
public int MaxLevel
{
get { return skillUpgradeData.MaxLevel; }
}
/// <summary>
/// 所在第几层
/// </summary>
public int Floor
{
get { return skillUpgradeData.LayerID; }
}
/// <summary>
/// 是否锁住
/// </summary>
public bool IsLock
{
get
{
return PlayerSkillUpgradeHelper.IsSkillLock(skillUpgradeData) ||
PlayerSkillUpgradeHelper.IsFloorLock(skillUpgradeData.LayerID);
2024-03-08 12:59:24 +08:00
}
}
/// <summary>
/// 是否满级
/// </summary>
public bool IsFullLevel
{
get { return Level >= MaxLevel; }
}
#endregion
public CommandSkillData(int id)
{
2024-06-24 15:58:15 +08:00
playSkillID = id;
skillLevel = Actor.Instance.PlayerSkill.GetLevel(playSkillID);
2024-09-25 13:51:04 +08:00
if (0 == skillLevel)
skillUpgradeData = TableManager.Instance.Tables.PlayerSkillUpgrade.Get(playSkillID, 1);
else
skillUpgradeData = TableManager.Instance.Tables.PlayerSkillUpgrade.Get(playSkillID, skillLevel);
2024-06-24 15:58:15 +08:00
if (null != skillUpgradeData)
playerSkill = TableManager.Instance.Tables.PlayerSkillConfig.Get(skillUpgradeData.SkillID);
2024-03-08 12:59:24 +08:00
}
2024-09-25 13:51:04 +08:00
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;
}
2024-03-08 12:59:24 +08:00
}