2024-02-06 18:46:00 +08:00
|
|
|
|
using cfg.ActorCfg;
|
2024-02-26 17:36:25 +08:00
|
|
|
|
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 17:09:17 +08:00
|
|
|
|
/// 获取解锁技能树某层数需要的技能等级
|
2024-03-08 12:59:24 +08:00
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <returns></returns>
|
2024-03-08 17:09:17 +08:00
|
|
|
|
public static int UnLockFloorNeedLevel(int floor)
|
2024-02-06 18:46:00 +08:00
|
|
|
|
{
|
2024-03-08 17:09:17 +08:00
|
|
|
|
List<int> listUnLockTotalLevel = TableManager.Instance.Tables.GlobalConfig.PlayerSkillUpgradeUnLockTotalLevel;
|
|
|
|
|
|
int index = floor - 1;
|
2024-03-08 12:59:24 +08:00
|
|
|
|
|
2024-03-08 17:09:17 +08:00
|
|
|
|
if (listUnLockTotalLevel == null || index >= listUnLockTotalLevel.Count)
|
2024-02-06 18:46:00 +08:00
|
|
|
|
{
|
2024-03-08 17:09:17 +08:00
|
|
|
|
DebugUtil.LogError("配置错误或传入数据错误");
|
|
|
|
|
|
return int.MaxValue;
|
2024-02-06 18:46:00 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-03-08 17:09:17 +08:00
|
|
|
|
return listUnLockTotalLevel[index];
|
2024-02-26 17:36:25 +08:00
|
|
|
|
}
|
2024-02-06 18:46:00 +08:00
|
|
|
|
|
2024-03-08 12:59:24 +08:00
|
|
|
|
/// <summary>
|
2024-03-08 17:09:17 +08:00
|
|
|
|
/// 判断技能树的某层是否锁住
|
2024-03-08 12:59:24 +08:00
|
|
|
|
/// </summary>
|
2024-03-08 17:09:17 +08:00
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public static bool IsFloorLock(int floor)
|
2024-02-29 17:33:54 +08:00
|
|
|
|
{
|
2024-03-08 17:09:17 +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
|
|
|
|
{
|
2024-03-08 17:09:17 +08:00
|
|
|
|
DebugUtil.LogError("配置错误或传入数据错误");
|
|
|
|
|
|
return true;
|
2024-02-29 17:33:54 +08:00
|
|
|
|
}
|
2024-03-08 12:59:24 +08:00
|
|
|
|
|
2024-03-08 17:09:17 +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 17:09:17 +08:00
|
|
|
|
/// 判断技能是否锁住
|
2024-03-08 12:59:24 +08:00
|
|
|
|
/// </summary>
|
2024-03-08 17:09:17 +08:00
|
|
|
|
/// <param name="data"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public static bool IsSkillLock(DataPlayerSkillUpgrade data)
|
2024-02-26 17:36:25 +08:00
|
|
|
|
{
|
2024-03-08 17:09:17 +08:00
|
|
|
|
for (int i = 0; i < data.Unlock.Length; i++)
|
2024-02-26 17:36:25 +08:00
|
|
|
|
{
|
2024-03-08 17:09:17 +08:00
|
|
|
|
int level = Actor.Instance.PlayerSkill.GetLevel(data.Unlock[i]);
|
|
|
|
|
|
if (level < 1)
|
|
|
|
|
|
return true;
|
2024-02-26 17:36:25 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-03-08 17:09:17 +08:00
|
|
|
|
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 属性
|
2024-03-08 17:09:17 +08:00
|
|
|
|
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>
|
2024-03-21 13:58:53 +08:00
|
|
|
|
/// 前置解锁条件列表(配置的id升一级就解锁)
|
2024-03-08 12:59:24 +08:00
|
|
|
|
/// </summary>
|
2024-03-21 13:58:53 +08:00
|
|
|
|
public int[] ListPreSkillID
|
2024-03-08 12:59:24 +08:00
|
|
|
|
{
|
2024-03-21 13:58:53 +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
|
|
|
|
|
|
{
|
2024-03-08 17:09:17 +08:00
|
|
|
|
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
|
|
|
|
}
|