361 lines
9.8 KiB
C#
361 lines
9.8 KiB
C#
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;
|
||
|
||
/// <summary>
|
||
/// 玩家技能升级帮助类
|
||
/// </summary>
|
||
public static class PlayerSkillUpgradeHelper
|
||
{
|
||
/// <summary>
|
||
/// 获取解锁技能树某层数需要的技能等级
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public static int UnLockFloorNeedLevel(int floor)
|
||
{
|
||
List<int> listUnLockTotalLevel = TableManager.Instance.Tables.GlobalConfig.PlayerSkillUpgradeUnLockTotalLevel;
|
||
int index = floor - 1;
|
||
|
||
if (listUnLockTotalLevel == null || index >= listUnLockTotalLevel.Count)
|
||
{
|
||
DebugUtil.LogError("配置错误或传入数据错误");
|
||
return int.MaxValue;
|
||
}
|
||
|
||
return listUnLockTotalLevel[index];
|
||
}
|
||
|
||
/// <summary>
|
||
/// 判断技能树的某层是否锁住
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public static bool IsFloorLock(int floor)
|
||
{
|
||
List<int> 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];
|
||
}
|
||
|
||
/// <summary>
|
||
/// 判断技能是否锁住
|
||
/// </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;
|
||
}
|
||
}
|
||
|
||
/// <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>
|
||
private int playSkillID;
|
||
/// <summary>
|
||
/// 技能等级
|
||
/// </summary>
|
||
private int skillLevel;
|
||
/// <summary>
|
||
/// 指挥官技能养成配置数据
|
||
/// </summary>
|
||
private DataPlayerSkillUpgrade skillUpgradeData;
|
||
/// <summary>
|
||
/// 指挥官技能配置数据
|
||
/// </summary>
|
||
private DataPlayerSkill playerSkill;
|
||
|
||
#region 属性
|
||
public DataPlayerSkillUpgrade SkillUpgradeData
|
||
{
|
||
get { return skillUpgradeData; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 技能ID
|
||
/// </summary>
|
||
public int SkillID
|
||
{
|
||
get { return playSkillID; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 前置解锁条件列表(配置的id升一级就解锁)
|
||
/// </summary>
|
||
public int[] ListPreSkillID
|
||
{
|
||
get { return skillUpgradeData.PreSkillID; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 技能名
|
||
/// </summary>
|
||
public string Name
|
||
{
|
||
get
|
||
{
|
||
if (0 == skillLevel)
|
||
return CommonUtils.GetLocalizeText(E_LocalizePrefix.PlayerSkill, playerSkill.ID - 1);
|
||
|
||
return CommonUtils.GetLocalizeText(E_LocalizePrefix.PlayerSkill, playerSkill.ID);
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 技能描述
|
||
/// </summary>
|
||
public string Desc
|
||
{
|
||
get
|
||
{
|
||
if (0 == skillLevel)
|
||
return CommonUtils.GetLocalizeText(E_LocalizePrefix.PassiveSkillDesc, playerSkill.ID - 1);
|
||
|
||
return CommonUtils.GetLocalizeText(E_LocalizePrefix.PassiveSkillDesc, playerSkill.ID);
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 图标路径
|
||
/// </summary>
|
||
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";
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 当前等级
|
||
/// </summary>
|
||
public int Level
|
||
{
|
||
get { return skillLevel; }
|
||
}
|
||
|
||
/// <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);
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 是否满级
|
||
/// </summary>
|
||
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;
|
||
}
|
||
} |