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

1320 lines
42 KiB
C#
Raw Normal View History

2023-10-19 15:00:19 +08:00
using System.Collections.Generic;
2023-08-22 19:08:45 +08:00
using cfg.CharacterCfg;
using Framework;
using CharacterInfo = Gameplay.Net.CharacterInfo;
using cfg;
using Gameplay;
2024-01-15 12:39:20 +08:00
using Gameplay.Utils;
2023-10-19 15:00:19 +08:00
using PhxhSDK;
using cfg.WeaponCfg;
2024-03-19 18:37:00 +08:00
using UnityEngine;
2024-06-25 18:53:27 +08:00
using Gameplay.Common;
using System.Text;
using Gameplay.Character.Utils;
using System;
2025-03-24 14:18:02 +08:00
using cfg.SkillCfg;
2023-08-22 19:08:45 +08:00
2023-10-19 15:00:19 +08:00
public class CharacterDataInfoManager : Singlenton<CharacterDataInfoManager>, IInitable
2023-08-22 19:08:45 +08:00
{
public List<CharacterDataInfo> DataList;
public Dictionary<uint, CharacterDataInfo> DataDic;
private const int CharacterRedPointParentID = 30;
2023-08-22 19:08:45 +08:00
void IInitable.Init()
{
DataList = new List<CharacterDataInfo>();
DataDic = new Dictionary<uint, CharacterDataInfo>();
}
void IInitable.Release()
{
DataList.Clear();
DataDic.Clear();
}
public void Dispose()
{
DataList.Clear();
DataDic.Clear();
}
2023-08-22 19:08:45 +08:00
public void AddAllCfgCharacter()
{
DataList.Clear();
DataDic.Clear();
2024-01-08 13:13:35 +08:00
cfg.Tables Table = TableManager.Instance.Tables;
2023-08-22 19:08:45 +08:00
CharacterAttri attriCfg = Table.CharacterAttri;
foreach (var item in attriCfg.DataList)
{
2024-03-19 18:37:00 +08:00
var isAvaliable = _CheckCharacterCfgAvaliable(item);
if (!isAvaliable)
{
DebugUtil.LogError("角色ID:{0}的配置不可用", item.RoleID);
continue;
}
2023-08-22 19:08:45 +08:00
CharacterDataInfo info = new CharacterDataInfo(item);
2024-01-11 14:12:39 +08:00
if (DataDic.ContainsKey((uint)info.Cfg.RoleID))
{
continue;
}
info.ConstructRedPointTree(CharacterRedPointParentID);
2023-08-22 19:08:45 +08:00
DataList.Add(info);
DataDic[(uint)info.Cfg.RoleID] = info;
}
}
2024-03-19 18:37:00 +08:00
private bool _CheckCharacterCfgAvaliable(DataCharacterAttri checkCfg)
{
2024-06-25 18:53:27 +08:00
var skinCfg = TableManager.Instance.Tables.SkinCfg.Get(GLConfig.Inst.data.DEFAULTSKINID, checkCfg.RoleID);
2024-03-19 18:37:00 +08:00
if (skinCfg == null)
{
DebugUtil.LogError($"角色ID:{checkCfg.RoleID}的皮肤配置为空");
return false;
}
var picHeadPath = CommonUtils.GetCharacterPicPath(checkCfg.RoleID, CommonUtils.ECharacterPicPathType.HeadPic);//CommonUtils.GetWholeHeadPath(skinCfg.PIcHeadPath);
2024-03-19 18:37:00 +08:00
if (!AssetManager.Instance.CanLocateAsset<Sprite>(picHeadPath))
{
DebugUtil.LogError($"角色ID:{checkCfg.RoleID}的头像资源路径:{picHeadPath}不存在");
// TODO: 暂时允许头像资源不存在
// return false;
2024-03-19 18:37:00 +08:00
}
var fakeSkillLevel = 1;
2024-03-19 18:37:00 +08:00
var skillLevelInfo = TableManager.Instance.Tables.CharacterSkillLevel.Get(checkCfg.RoleID, fakeSkillLevel);
if (skillLevelInfo == null)
{
DebugUtil.LogError($"角色ID:{checkCfg.RoleID}的技能等级配置为空");
return false;
}
var skillGroupInfo = TableManager.Instance.Tables.SkillReferConfig.Get(skillLevelInfo.SkillGroupId);
if (skillGroupInfo == null)
{
DebugUtil.LogError($"角色ID:{checkCfg.RoleID}的技能组配置为空");
return false;
}
var awakeLevel = 1;
2024-03-19 18:37:00 +08:00
var awakeCfg = TableManager.Instance.Tables.CharacterAwaking.Get(checkCfg.RoleID, awakeLevel);
if (awakeCfg == null)
{
DebugUtil.LogError($"角色ID:{checkCfg.RoleID}的觉醒配置为空");
return false;
}
var breakLevel = 1;
2024-03-19 18:37:00 +08:00
var breakCfg = TableManager.Instance.Tables.CharacterBreak.Get(checkCfg.RoleID, breakLevel);
if (breakCfg == null)
{
DebugUtil.LogError($"角色ID:{checkCfg.RoleID}的突破配置为空");
return false;
}
return true;
}
2023-08-22 19:08:45 +08:00
public void Add(CharacterInfo info)
{
if (DataDic.TryGetValue(info.ID, out CharacterDataInfo info2))//已添加则刷新相关信息
2023-08-22 19:08:45 +08:00
{
DataDic[info.ID].Refresh(info);
for (int i = 0; i < DataList.Count; i++)
{
if (DataList[i].ID == info.ID)
{
DataList[i].Refresh(info);
return;
}
}
}
else
{
CharacterDataInfo newInfo = new CharacterDataInfo();
var cfg = TableManager.Instance.Tables.CharacterAttri.GetOrDefault((int)info.ID);
if (cfg == null)
{
DebugUtil.LogError($"CharacterDefaultConfig缺少角色配置,当前角色ID:{info.ID}");
return;
}
2023-08-22 19:08:45 +08:00
newInfo.Refresh(info);
DataList.Add(newInfo);
DataDic[info.ID] = newInfo;
newInfo.ConstructRedPointTree(CharacterRedPointParentID);
2023-11-01 14:50:52 +08:00
EventManager.Instance.Send(EventManager.EventName.GetNewCharacter, info.ID);
2023-08-22 19:08:45 +08:00
}
2023-08-22 19:08:45 +08:00
}
2024-06-07 18:48:55 +08:00
public void SortCharactersByLevel()
{
2024-07-09 14:04:13 +08:00
DataList.Sort((a, b) => b.Level.CompareTo(a.Level));
2024-06-07 18:48:55 +08:00
}
2024-08-02 14:23:00 +08:00
public void SortCharactersByID()//角色ID排序默认为从小到大升序
{
2024-08-02 14:23:00 +08:00
DataList.Sort((a, b) => a.Cfg.RoleID.CompareTo(b.Cfg.RoleID));
}
2024-08-02 15:57:31 +08:00
public void SortCharacterDefault()//默认排序方式:整体以等级降序,等级相同的情况下按照角色ID升序
{
DataList.Sort((a, b) =>
{
int ret = b.Level.CompareTo(a.Level);
if (ret == 0)
{
ret = a.Cfg.RoleID.CompareTo(b.Cfg.RoleID);
}
return ret;
});
}
2024-06-07 18:48:55 +08:00
public void SortCharactersByLevel(List<CharacterDataInfo> dataInfos)
{
2024-08-02 14:23:00 +08:00
dataInfos.Sort((a, b) => b.Level.CompareTo(a.Level));
2024-06-07 18:48:55 +08:00
}
2023-10-19 15:00:19 +08:00
public CharacterDataInfo GetCharacterInfo(uint selectId)
2023-08-22 19:08:45 +08:00
{
2023-10-19 15:00:19 +08:00
if (DataDic.TryGetValue(selectId, out var info))
2023-08-22 19:08:45 +08:00
{
return info;
}
else
{
2023-10-19 15:00:19 +08:00
DebugUtil.LogError("找不到该角色ID {0}", selectId);
2023-08-22 19:08:45 +08:00
return null;
}
}
public CharacterDataInfo GetMaxLevelCharacter()
{
if (DataList.Count <= 0)
{
return null;
}
var dataList = new List<CharacterDataInfo>(DataList);
dataList.Sort((a, b) =>
{
if (a.Level > b.Level) return 1;
return 0;
});
2023-08-22 19:08:45 +08:00
return dataList[0];
}
2023-08-22 19:08:45 +08:00
2024-10-16 14:15:35 +08:00
/// <summary>
/// 获取指挥官推荐职业列表
/// </summary>
public List<ProvideJob> GetCommanderProvideJobs(uint id)
2024-10-08 16:35:07 +08:00
{
var jobs = new List<ProvideJob>();
2025-03-26 12:20:45 +08:00
DataCharacterAttri cfg = null;
2024-10-08 16:35:07 +08:00
if (DataDic.TryGetValue(id, out var characterDataInfo))
{
2025-03-26 12:20:45 +08:00
cfg = characterDataInfo.Cfg;
}
else
{
cfg = TableManager.Instance.Tables.CharacterAttri.GetOrDefault((int)id);
}
if (cfg.Job != Ejob.Job_Commander)
{
DebugUtil.LogError("该角色不为指挥官{0}", id);
return jobs;
}
var provideJobs = cfg.ProvideJob;
if (provideJobs.Length == 0)
{
DebugUtil.LogError("该指挥官{0}推荐职位为空", id);
return jobs;
}
var vehicleList = new List<ProvideJob>();
var characterList = new List<ProvideJob>();
foreach (var job in provideJobs)
{
if (job == ProvideJob.ProvideJob_None)
2024-10-16 14:15:35 +08:00
{
2025-03-26 12:20:45 +08:00
DebugUtil.LogError("该指挥官{0}配置的推荐职业包含空");
continue;
2024-10-16 14:15:35 +08:00
}
2025-03-26 12:20:45 +08:00
if (job == ProvideJob.ProvideJob_Vehicle)
2024-10-16 14:15:35 +08:00
{
2025-03-26 12:20:45 +08:00
vehicleList.Add(job);
2024-10-16 14:15:35 +08:00
}
2025-03-26 12:20:45 +08:00
else
2024-10-16 14:15:35 +08:00
{
2025-03-26 12:20:45 +08:00
characterList.Add(job);
2024-10-16 14:15:35 +08:00
}
2024-10-08 16:35:07 +08:00
2025-03-26 12:20:45 +08:00
}
jobs.AddRange(vehicleList);
jobs.AddRange(characterList);
2024-10-16 14:15:35 +08:00
return jobs;
}
2024-10-11 15:22:03 +08:00
public int GetSpendLeadership(uint id)
{
if (DataDic.TryGetValue(id, out var characterDataInfo))
{
if (characterDataInfo.Cfg != null)
return characterDataInfo.SpendLeadership();
2024-10-11 15:22:03 +08:00
}
return 0;
}
2023-08-22 19:08:45 +08:00
}
public class CharacterDataInfo : CharacterInfo, IRedPointTreeNode
2023-08-22 19:08:45 +08:00
{
public DataCharacterAttri Cfg => _cfg;
2023-10-19 15:00:19 +08:00
private DataCharacterAttri _cfg;
private DataCharacterBreak _breakCfg;
public DataCharacterBreak BreakCfg => _breakCfg;
2023-10-19 15:00:19 +08:00
private DataCharacterAwaking _awakeCfg;
public DataCharacterAwaking AwakeCfg => _awakeCfg;
2023-08-22 19:08:45 +08:00
2025-02-19 14:30:52 +08:00
private DataCharacterLevelup _levelUpCfg;
public DataCharacterLevelup LevelUpCfg => _levelUpCfg;
RedPointNodeCharacter _redPointNode;
public RedPointNodeCharacter RedPointNode => _redPointNode;
RedPointNodeCharacter characterAwakingNode;
public RedPointNodeCharacter CharacterAwakingNode => characterAwakingNode;
2023-10-19 15:00:19 +08:00
public uint Uid => ID;
2023-08-22 19:08:45 +08:00
public CharacterDataInfo()
{
}
2023-12-27 13:57:32 +08:00
public CharacterDataInfo(uint id, uint level, uint breakLevel, uint awakeLevel)
2023-08-22 19:08:45 +08:00
{
2023-10-19 15:00:19 +08:00
ID = id;
2023-08-22 19:08:45 +08:00
Level = level;
BreakLevel = breakLevel;
2023-12-27 13:57:32 +08:00
AwakeLevel = awakeLevel;
2023-08-22 19:08:45 +08:00
LikelyExp = 0;
LikelyLevel = 0;
UltraSkillLevel = 0;
2024-06-24 13:53:23 +08:00
SkinID = 1;
2024-12-24 13:59:36 +08:00
isCheck = 1;
LoadAllConfigs();
2023-08-22 19:08:45 +08:00
}
2023-10-19 15:00:19 +08:00
private void LoadConfig<T>(Func<int, int, T> getConfig, int roleId, int level, out T config)
2023-08-22 19:08:45 +08:00
{
config = getConfig(roleId, level);
if (config == null)
2023-10-19 15:00:19 +08:00
{
DebugUtil.LogError($"未能加载到该角色{roleId}的该等级{level}配置,请检查配置");
2023-10-19 15:00:19 +08:00
}
2023-08-22 19:08:45 +08:00
}
private void LoadAllConfigs()
2023-08-22 19:08:45 +08:00
{
_cfg = TableManager.Instance.Tables.CharacterAttri.GetOrDefault((int)ID);
LoadConfig(TableManager.Instance.Tables.CharacterBreak.Get, (int)Cfg.RoleID, (int)BreakLevel, out _breakCfg);
LoadConfig(TableManager.Instance.Tables.CharacterAwaking.Get, (int)Cfg.RoleID, (int)AwakeLevel, out _awakeCfg);
LoadConfig(TableManager.Instance.Tables.CharacterLevelUp.Get, Cfg.LevelUpTemplate, (int)Level, out _levelUpCfg);
2025-03-24 14:18:02 +08:00
2025-02-19 14:30:52 +08:00
}
2023-08-22 19:08:45 +08:00
public int GetBreakPassiveId()
{
// if (BreakLevel == 0)
// {
// return Cfg.PassiveBreakSkillID;
// }
// else
if (_breakCfg != null)
2023-10-19 15:00:19 +08:00
return _breakCfg.PassiveSkillID;
return 0;
2023-10-19 15:00:19 +08:00
}
public int HasPassiveSkillCount()
{
var count = 0;
if (GetBreakPassiveId() != 0)
{
count++;
2023-08-22 19:08:45 +08:00
}
if (GetAwakePassiveId() != 0)
2023-10-19 15:00:19 +08:00
{
count++;
}
return count;
}
2023-08-22 19:08:45 +08:00
public int GetAwakePassiveId()
{
// if (AwakeLevel == 0)
// {
// return Cfg.PassiveAwakeSkillID;
// }
// else
2023-08-22 19:08:45 +08:00
{
2023-10-19 15:00:19 +08:00
return _awakeCfg.PassiveSkillID;
2023-08-22 19:08:45 +08:00
}
}
public CharacterDataInfo(DataCharacterAttri cfg)
{
ID = (uint)cfg.RoleID;
Exp = 10000;
Level = 10;
BreakLevel = 1;
AwakeLevel = 1;
LikelyExp = 1;
LikelyLevel = 1;
UltraSkillLevel = 1;
SkinID = 1;
2024-12-24 13:59:36 +08:00
isCheck = 1;
LoadAllConfigs();
2023-08-22 19:08:45 +08:00
}
2023-08-22 19:08:45 +08:00
public void Refresh(CharacterInfo info)
{
ID = info.ID;
Exp = info.Exp;
Level = info.Level;
BreakLevel = info.BreakLevel;
AwakeLevel = info.AwakeLevel;
LikelyExp = info.LikelyExp;
LikelyLevel = info.LikelyLevel;
UltraSkillLevel = info.UltraSkillLevel;
SkinID = info.SkinID;
2024-12-24 13:59:36 +08:00
isCheck = info.isCheck;
LoadAllConfigs();
2023-08-22 19:08:45 +08:00
}
2025-03-10 15:36:14 +08:00
/// <summary>
/// 养成属性枚举
/// </summary>
public enum CultivateProperty
{
2025-03-10 18:57:47 +08:00
/// <summary>
/// 生命值
/// </summary>
2025-03-10 15:36:14 +08:00
HP,
2025-03-10 18:57:47 +08:00
/// <summary>
/// 护甲值
/// </summary>
Shiled,
/// <summary>
/// 士气值
/// </summary>
Solider,
/// <summary>
/// 熟练度
/// </summary>
Proficiency,
/// <summary>
/// 防御力
/// </summary>
Defend,
/// <summary>
/// 移动速度
/// </summary>
MoveSpeed,
/// <summary>
/// 所属势力
/// </summary>
Belong,
/// <summary>
/// 装配武器
/// </summary>
Weapon,
/// <summary>
/// 单发伤害
/// </summary>
BulletAttack,
/// <summary>
/// 弹夹容量
/// </summary>
BulletCapacity,
/// <summary>
/// 主动技能名
/// </summary>
ActiveSkillName,
/// <summary>
/// 主动技能描述
/// </summary>
ActiveSkillDesc,
/// <summary>
/// 主动技能等级
/// </summary>
ActiveSkillLevel,
/// <summary>
/// 主动技能CD
/// </summary>
ActiveSkillCD,
/// <summary>
/// 被动技能名1
/// </summary>
PassivitySkillName1,
/// <summary>
/// 被动技能描述1
/// </summary>
PassivitySkillDesc1,
/// <summary>
/// 被动技能名2
/// </summary>
PassivitySkillName2,
/// <summary>
/// 被动技能描述2
/// </summary>
PassivitySkillDesc2,
2025-03-10 15:36:14 +08:00
}
/// <summary>
/// 获取初始属性值
/// </summary>
/// <param name="prop"></param>
/// <returns></returns>
2025-03-11 14:40:23 +08:00
public string GetInitialProperty(CultivateProperty prop)
2025-03-10 15:36:14 +08:00
{
2025-03-24 14:18:02 +08:00
// 创建一个字典,映射 CultivateProperty 到对应的获取属性方法
var propertyGetters = new Dictionary<CultivateProperty, Func<string>>
2025-03-10 15:36:14 +08:00
{
2025-03-24 14:18:02 +08:00
{ CultivateProperty.HP, this.HpLevelUp(1).ToString},
{ CultivateProperty.Shiled, this.ArmorLevelUp(1).ToString },
{ CultivateProperty.Solider, this.Corrage().ToString },
{ CultivateProperty.Proficiency, this.WeaponDegree(1).ToString },
{ CultivateProperty.Defend, DefenceLevelUp(1).ToString },
{ CultivateProperty.MoveSpeed, Cfg.Speed.ToString },
{ CultivateProperty.Belong, this.CharacterBelong },
{ CultivateProperty.Weapon, () => CommonUtils.GetLocalizeText(E_LocalizePrefix.weapon, this.InitialWeapon().ID) },
{ CultivateProperty.BulletAttack, this.InitialWeapon().AttackPower.ToString },
{ CultivateProperty.BulletCapacity, () => TableManager.Instance.Tables.WeaponConfig.Get(Cfg.WeaponId).MaxBulletCount.ToString() },
{ CultivateProperty.ActiveSkillName, () => CommonUtils.GetLocalizeText(E_LocalizePrefix.skill, CharacterDataHelper.GetCharacterSkillId((int)ID, 1)) },
{ CultivateProperty.ActiveSkillDesc, () => CommonUtils.GetLocalizeText(E_LocalizePrefix.skill_desc, CharacterDataHelper.GetCharacterSkillId((int)ID, 1)) },
{ CultivateProperty.ActiveSkillLevel, () => CommonUtils.GetRomanCode(1) },
{ CultivateProperty.ActiveSkillCD, () => TableManager.Instance.Tables.SkillConfig.Get(CharacterDataHelper.GetCharacterSkillId((int)ID, 1))?.ChargeParam.ToString() },
{ CultivateProperty.PassivitySkillName1, () => CommonUtils.GetLocalizeText(E_LocalizePrefix.PassiveSkill, TableManager.Instance.Tables.CharacterBreak.Get(Cfg.RoleID, 0).PassiveSkillID) },
{ CultivateProperty.PassivitySkillDesc1, () => CommonUtils.GetLocalizeText(E_LocalizePrefix.PassiveSkillDesc, TableManager.Instance.Tables.CharacterBreak.Get(Cfg.RoleID, 0).PassiveSkillID) },
{ CultivateProperty.PassivitySkillDesc2, () => CommonUtils.GetLocalizeText(E_LocalizePrefix.PassiveSkillDesc, TableManager.Instance.Tables.CharacterAwaking.Get(Cfg.RoleID, 0).PassiveSkillID) },
{ CultivateProperty.PassivitySkillName2, () => CommonUtils.GetLocalizeText(E_LocalizePrefix.PassiveSkill, TableManager.Instance.Tables.CharacterAwaking.Get(Cfg.RoleID, 0).PassiveSkillID) }
};
try
{
// 通过字典调用相应的方法
if (propertyGetters.TryGetValue(prop, out var getter))
{
return getter();
}
2025-03-10 15:36:14 +08:00
}
2025-03-24 14:18:02 +08:00
catch (Exception e)
{
DebugUtil.LogError("获取ID{0}初始属性值失败,错误信息:{1}", ID, e.Message);
}
return string.Empty;
2025-03-10 15:36:14 +08:00
}
2025-03-24 14:18:02 +08:00
//public string GetInitialProperty(CultivateProperty prop)
//{
// switch (prop)
// {
// case CultivateProperty.HP:
// return HpLevelUp(1).ToString();
//
// case CultivateProperty.Shiled:
// return ArmorLevelUp(1).ToString();
//
// case CultivateProperty.Solider:
// return Corrage().ToString();
//
// case CultivateProperty.Proficiency:
// return WeaponDegree(1).ToString();
//
// case CultivateProperty.Defend:
// return DefenceLevelUp(1).ToString();
//
// case CultivateProperty.MoveSpeed:
// return Cfg.Speed.ToString();
//
// case CultivateProperty.Belong:
// return CharacterBelong();
//
// case CultivateProperty.Weapon:
// return CommonUtils.GetLocalizeText(E_LocalizePrefix.weapon, InitialWeapon().ID);
//
// case CultivateProperty.BulletAttack:
// return InitialWeapon().AttackPower.ToString();
//
// case CultivateProperty.BulletCapacity:
// return TableManager.Instance.Tables.WeaponConfig.Get(Cfg.WeaponId).MaxBulletCount.ToString();
//
// case CultivateProperty.ActiveSkillName:
// var skillCfg = TableManager.Instance.Tables.SkillConfig.Get(CharacterDataHelper.GetCharacterSkillId((int)ID, 1));
// return CommonUtils.GetLocalizeText(E_LocalizePrefix.skill, skillCfg.ID);
//
// case CultivateProperty.ActiveSkillDesc:
// var skillCfg2 = TableManager.Instance.Tables.SkillConfig.Get(CharacterDataHelper.GetCharacterSkillId((int)ID, 1));
// return CommonUtils.GetLocalizeText(E_LocalizePrefix.skill_desc, skillCfg2.ID);
//
// case CultivateProperty.ActiveSkillLevel:
// return CommonUtils.GetRomanCode(1);
//
// case CultivateProperty.ActiveSkillCD:
// var skillCfg3 = TableManager.Instance.Tables.SkillConfig.Get(CharacterDataHelper.GetCharacterSkillId((int)ID, 1));
// return skillCfg3.ChargeParam.ToString();
//
// case CultivateProperty.PassivitySkillName1:
// var _breakCfg = TableManager.Instance.Tables.CharacterBreak.Get(Cfg.RoleID, 0);
// return CommonUtils.GetLocalizeText(E_LocalizePrefix.PassiveSkill, _breakCfg.PassiveSkillID);
//
// case CultivateProperty.PassivitySkillDesc1:
// var _breakCfg2 = TableManager.Instance.Tables.CharacterBreak.Get(Cfg.RoleID, 0);
// return CommonUtils.GetLocalizeText(E_LocalizePrefix.PassiveSkillDesc, _breakCfg2.PassiveSkillID);
//
// case CultivateProperty.PassivitySkillDesc2:
// var _awakeCfg = TableManager.Instance.Tables.CharacterAwaking.Get(Cfg.RoleID, 0);
// return CommonUtils.GetLocalizeText(E_LocalizePrefix.PassiveSkillDesc, _awakeCfg.PassiveSkillID);
//
// case CultivateProperty.PassivitySkillName2:
// var _awakeCfg2 = TableManager.Instance.Tables.CharacterAwaking.Get(Cfg.RoleID, 0);
// return CommonUtils.GetLocalizeText(E_LocalizePrefix.PassiveSkill, _awakeCfg2.PassiveSkillID);
//
// default:
// return string.Empty;
// }
//}
2025-03-10 15:36:14 +08:00
/// <summary>
/// 获取最大养成属性值
/// </summary>
/// <param name="prop"></param>
/// <returns></returns>
2025-03-11 14:40:23 +08:00
public string GetMaxProperty(CultivateProperty prop)
2025-03-10 15:36:14 +08:00
{
2025-03-24 14:18:02 +08:00
// 创建一个字典,映射 CultivateProperty 到对应的获取属性方法
var propertyGetters = new Dictionary<CultivateProperty, Func<string>>
2025-03-10 15:36:14 +08:00
{
2025-03-24 14:18:02 +08:00
{ CultivateProperty.HP, () => HpLevelUp(GetMaxLevel()).ToString() },
{ CultivateProperty.Shiled, () => ArmorLevelUp(GetMaxLevel()).ToString() },
{ CultivateProperty.Solider, this.Corrage().ToString },
{ CultivateProperty.Proficiency, () => WeaponDegree(GetMaxLevel()).ToString() },
{ CultivateProperty.Defend, () => DefenceLevelUp(GetMaxLevel()).ToString() },
{ CultivateProperty.MoveSpeed, () => (Cfg.Speed + TableManager.Instance.Tables.CharacterBreak.Get(Cfg.RoleID, GetMaxBreakLevel()).Speed + SpeedAwakeLvUp()).ToString() },
{ CultivateProperty.Belong, this.CharacterBelong },
{ CultivateProperty.Weapon, () => CommonUtils.GetLocalizeText(E_LocalizePrefix.weapon, MaxWeapon().ID) },
{ CultivateProperty.BulletAttack, () => (AttackLevelUp(GetMaxLevel(), GetMaxBreakLevel()) + MaxWeapon().AttackPower).ToString() },
{ CultivateProperty.BulletCapacity, () => TableManager.Instance.Tables.WeaponConfig.Get(MaxWeapon().ID).MaxBulletCount.ToString() },
{ CultivateProperty.ActiveSkillName, () => CommonUtils.GetLocalizeText(E_LocalizePrefix.skill, TableManager.Instance.Tables.SkillConfig.Get(CharacterDataHelper.GetCharacterSkillId((int)ID, GetMaxUltralSkillLevel(), GetMaxBreakLevel())).ID) },
{ CultivateProperty.ActiveSkillDesc, () => CommonUtils.GetLocalizeText(E_LocalizePrefix.skill_desc, TableManager.Instance.Tables.SkillConfig.Get(CharacterDataHelper.GetCharacterSkillId((int)ID, GetMaxUltralSkillLevel(), GetMaxBreakLevel())).ID) },
{ CultivateProperty.ActiveSkillLevel, () => CommonUtils.GetRomanCode(GetMaxUltralSkillLevel()) },
{ CultivateProperty.ActiveSkillCD, () => TableManager.Instance.Tables.SkillConfig.Get(CharacterDataHelper.GetCharacterSkillId((int)ID, GetMaxUltralSkillLevel(), GetMaxBreakLevel())).ChargeParam.ToString() },
{ CultivateProperty.PassivitySkillName1, () => CommonUtils.GetLocalizeText(E_LocalizePrefix.PassiveSkill, TableManager.Instance.Tables.CharacterBreak.Get(Cfg.RoleID, GetMaxBreakLevel()).PassiveSkillID) },
{ CultivateProperty.PassivitySkillDesc1, () => CommonUtils.GetLocalizeText(E_LocalizePrefix.PassiveSkillDesc, TableManager.Instance.Tables.CharacterBreak.Get(Cfg.RoleID, GetMaxBreakLevel()).PassiveSkillID) },
{ CultivateProperty.PassivitySkillDesc2, () => CommonUtils.GetLocalizeText(E_LocalizePrefix.PassiveSkillDesc, TableManager.Instance.Tables.CharacterAwaking.Get(Cfg.RoleID, GetMaxAwakeLevel()).PassiveSkillID) },
{ CultivateProperty.PassivitySkillName2, () => CommonUtils.GetLocalizeText(E_LocalizePrefix.PassiveSkill, TableManager.Instance.Tables.CharacterAwaking.Get(Cfg.RoleID, GetMaxAwakeLevel()).PassiveSkillID) }
};
try
{
// 通过字典调用相应的方法
if (propertyGetters.TryGetValue(prop, out var getter))
{
return getter();
}
2025-03-10 15:36:14 +08:00
}
2025-03-24 14:18:02 +08:00
catch (Exception e)
{
DebugUtil.LogError("获取ID{0}最大属性值失败,错误信息:{1}", ID, e.Message);
}
return string.Empty;
2025-03-10 15:36:14 +08:00
}
private int GetMaxLevel()
{
var maxBreakLevel = GetMaxBreakLevel();
var breakCfg = TableManager.Instance.Tables.CharacterBreak.Get(Cfg.RoleID, maxBreakLevel);
return breakCfg.LevelLimit;
}
private DataWeapon InitialWeapon()
{
2025-03-11 14:40:23 +08:00
var breakcfg = TableManager.Instance.Tables.CharacterBreak.Get(Cfg.RoleID, 0);
var weaponConfig = TableManager.Instance.Tables.WeaponConfig.Get(breakcfg.WeaponId);
return weaponConfig;
}
private DataWeapon MaxWeapon()
{
var breakcfg = TableManager.Instance.Tables.CharacterBreak.Get(Cfg.RoleID, GetMaxBreakLevel());
var weaponConfig = TableManager.Instance.Tables.WeaponConfig.Get(breakcfg.WeaponId);
return weaponConfig;
}
public int SpendLeadership()
{
var spendLeadership = Cfg.SpendLeadership;
if (BreakLevel == 0)
{
return spendLeadership;
}
else
{
return _breakCfg.SpendLeadership;
}
}
2023-08-22 19:08:45 +08:00
2025-03-25 13:58:04 +08:00
private int HPBreakLvUp()
2023-08-22 19:08:45 +08:00
{
if (_breakCfg != null)
return _breakCfg.Hp;
return 0;
2023-08-22 19:08:45 +08:00
}
2025-03-25 13:58:04 +08:00
private int HpAwakeLvUp()
2023-08-22 19:08:45 +08:00
{
2023-10-19 15:00:19 +08:00
if (_awakeCfg != null)
2023-08-22 19:08:45 +08:00
{
2023-10-19 15:00:19 +08:00
return _awakeCfg.Hp;
2023-08-22 19:08:45 +08:00
}
return 0;
}
/// <summary>
/// 突破获取的攻击力,受武器影响
/// </summary>
/// <returns></returns>
2023-08-22 19:08:45 +08:00
private int AttackBreakLvUp()
{
//更换武器后,攻击力不再由突破表上的攻击力决定,而是由武器表上的攻击力决定
var weaponConfig = TableManager.Instance.Tables.WeaponConfig.Get(WeaponId());
if (weaponConfig == null)
{
DebugUtil.LogError("武器id为{0}的武器没配" + WeaponId());
return 0;
}
else
return weaponConfig.AttackPower;
2023-08-22 19:08:45 +08:00
}
2023-12-29 15:07:04 +08:00
public string Name => CommonUtils.GetCharacterName(_cfg.RoleID);
2023-12-29 15:07:04 +08:00
2025-03-26 12:18:08 +08:00
public string NickName { get { return CommonUtils.GetLocalizeText(E_LocalizePrefix.Chara_NickName, _cfg.RoleID); } }
2025-03-25 13:58:04 +08:00
public int HP()
{
return HpLevelUp((int)Level) + HPBreakLvUp() + HpAwakeLvUp();
2023-10-19 15:00:19 +08:00
}
2025-03-25 13:58:04 +08:00
public int HpLevelUp(int level)
2023-10-19 15:00:19 +08:00
{
2025-02-19 16:07:07 +08:00
var mCharacterLevelExpCfg = TableManager.Instance.Tables.CharacterLevelUp;
var CharacterLevelupTemplate = Cfg.LevelUpTemplate;
if (CharacterLevelupTemplate == 0)
{
DebugUtil.LogWarning("没有配置该角色等级模板:{0},自动使用默认模板", Cfg.RoleID);
CharacterLevelupTemplate = 1;
}
var levelCfg = mCharacterLevelExpCfg.Get(CharacterLevelupTemplate, level);
if (levelCfg == null)
2023-10-19 15:00:19 +08:00
{
2025-02-19 16:07:07 +08:00
DebugUtil.LogError("CharacterLevelUp表{0}模板不包含{1}等级的defence配置", Cfg.LevelUpTemplate, level);
return Cfg.HpBase;
2023-10-19 15:00:19 +08:00
}
else
{
2025-03-25 13:58:04 +08:00
var hp = levelCfg.Hp * Cfg.HpBase;
DebugUtil.Log("基础血量{0},等级{1},等级血量{2}", Cfg.HpBase, level, hp);
return Mathf.RoundToInt(hp);
2023-10-19 15:00:19 +08:00
}
2023-08-22 19:08:45 +08:00
}
/// <summary>
/// 武器熟练度 * 养成攻击力
/// </summary>
/// <returns></returns>
2023-08-22 19:08:45 +08:00
public int Attack()
{
2025-03-25 13:58:04 +08:00
var res = WeaponDegree((int)Level) * AttackBreakLvUp();
return Mathf.RoundToInt(res);
2023-08-22 19:08:45 +08:00
}
public int AttackLevelUp(int level, int breakLevel = -1)
2023-10-19 15:00:19 +08:00
{
//角色攻击力受等级武器熟练度影响
if (breakLevel == -1)
return (int)(WeaponDegree(level) * AttackBreakLvUp());
else
{
var breakcfg = TableManager.Instance.Tables.CharacterBreak.Get(Cfg.RoleID, breakLevel);
var weaponConfig = TableManager.Instance.Tables.WeaponConfig.Get(breakcfg.WeaponId);
if (weaponConfig == null)
{
DebugUtil.LogError("武器id为{0}的武器没配" + WeaponId());
return 0;
}
else
2025-03-25 13:58:04 +08:00
{
var result = (weaponConfig.AttackPower * WeaponDegree(level));
return Mathf.RoundToInt(result);
}
}
2023-10-19 15:00:19 +08:00
}
/// <summary>
/// 武器熟练度
/// </summary>
/// <returns></returns>
public float WeaponDegree(int level = -1)
{
if (level == -1)
level = (int)Level;
var mCharacterLevelExpCfg = TableManager.Instance.Tables.CharacterLevelUp;
var CharacterLevelupTemplate = Cfg.LevelUpTemplate;
if (CharacterLevelupTemplate == 0)
{
DebugUtil.LogWarning("没有配置该角色等级模板:{0},自动使用默认模板", Cfg.RoleID);
CharacterLevelupTemplate = 1;
}
var levelCfg = mCharacterLevelExpCfg.Get(CharacterLevelupTemplate, level);
if (levelCfg == null)
{
DebugUtil.LogError("CharacterLevelUp表{0}模板不包含{1}等级的defence配置", Cfg.LevelUpTemplate, level);
return Cfg.WeaponDegree;
}
else
{
return levelCfg.WeaponDegree;
}
}
/// <summary>
2025-03-03 13:14:09 +08:00
/// 武器掌握度,受觉醒影响
/// </summary>
/// <returns></returns>
public float WeaponGrasp()
{
2025-03-03 13:14:09 +08:00
if (_awakeCfg != null)
{
return _awakeCfg.WeaponGrasp;
}
return 0;
}
2023-08-22 19:08:45 +08:00
private int ArmorAwakeLvUp()
{
2023-10-19 15:00:19 +08:00
if (_awakeCfg != null)
2023-08-22 19:08:45 +08:00
{
2023-10-19 15:00:19 +08:00
return _awakeCfg.Shield;
2023-08-22 19:08:45 +08:00
}
return 0;
}
private int ArmorBreakLvUp()
{
2023-10-19 15:00:19 +08:00
return _breakCfg.Shield;
2023-08-22 19:08:45 +08:00
}
public float Armor()
{
return ArmorLevelUp((int)Level);
2023-08-22 19:08:45 +08:00
}
/// <summary>
/// 指定等级护盾值
/// </summary>
/// <param name="level"></param>
/// <returns></returns>
2023-10-19 15:00:19 +08:00
public int ArmorLevelUp(int level)
{
2025-02-19 15:03:08 +08:00
var mCharacterLevelExpCfg = TableManager.Instance.Tables.CharacterLevelUp;
var CharacterLevelupTemplate = Cfg.LevelUpTemplate;
if (CharacterLevelupTemplate == 0)
{
DebugUtil.LogWarning("没有配置该角色等级模板:{0},自动使用默认模板", Cfg.RoleID);
CharacterLevelupTemplate = 1;
}
var levelCfg = mCharacterLevelExpCfg.Get(CharacterLevelupTemplate, level);
if (levelCfg == null)
2023-10-19 15:00:19 +08:00
{
2025-02-19 15:03:08 +08:00
DebugUtil.LogError("CharacterLevelUp表{0}模板不包含{1}等级的defence配置", Cfg.LevelUpTemplate, level);
return Cfg.Shield;
2023-10-19 15:00:19 +08:00
}
else
{
2025-03-25 13:58:04 +08:00
var shield = levelCfg.Shield * Cfg.Shield;
return Mathf.RoundToInt(shield);
2023-10-19 15:00:19 +08:00
}
}
2023-08-22 19:08:45 +08:00
//private float LevelUpArmor()
//{
// return Cfg.ShieldLevelUpTemplate[Level - 1];
//}
2025-03-25 13:58:04 +08:00
private int DenfenceBreakLvUp()
2023-08-22 19:08:45 +08:00
{
if (_breakCfg != null)
return _breakCfg.Defence;
return 0;
2023-08-22 19:08:45 +08:00
}
2025-03-25 13:58:04 +08:00
private int DenfenceAwakeLvUp()
2023-08-22 19:08:45 +08:00
{
2023-10-19 15:00:19 +08:00
if (_awakeCfg != null)
2023-08-22 19:08:45 +08:00
{
2023-10-19 15:00:19 +08:00
return _awakeCfg.Defence;
2023-08-22 19:08:45 +08:00
}
return 0;
}
2025-03-25 13:58:04 +08:00
public int Defence()
2023-08-22 19:08:45 +08:00
{
return DefenceLevelUp((int)Level) + DenfenceAwakeLvUp() + DenfenceBreakLvUp();
2023-10-19 15:00:19 +08:00
}
public int DefenceLevelUp(int level)
{
2025-02-19 14:30:52 +08:00
var mCharacterLevelExpCfg = TableManager.Instance.Tables.CharacterLevelUp;
var CharacterLevelupTemplate = Cfg.LevelUpTemplate;
if (CharacterLevelupTemplate == 0)
{
2025-02-19 15:03:08 +08:00
DebugUtil.LogWarning("没有配置该角色等级模板:{0},自动使用默认模板", Cfg.RoleID);
2025-02-19 14:30:52 +08:00
CharacterLevelupTemplate = 1;
}
var levelCfg = mCharacterLevelExpCfg.Get(CharacterLevelupTemplate, level);
if (levelCfg == null)
2023-10-19 15:00:19 +08:00
{
2025-02-19 14:30:52 +08:00
DebugUtil.LogError("CharacterLevelUp表{0}模板不包含{1}等级的defence配置", Cfg.LevelUpTemplate, level);
return Cfg.Defence;
2023-10-19 15:00:19 +08:00
}
else
{
2025-03-25 13:58:04 +08:00
var result = levelCfg.Defence * Cfg.Defence;
return Mathf.RoundToInt(result);
2023-10-19 15:00:19 +08:00
}
2023-08-22 19:08:45 +08:00
}
public float Corrage()
{
// 最大士气值
return Cfg.MaxMorale;
}
2024-11-11 19:21:33 +08:00
/// <summary>
/// 弹夹容量
/// </summary>
/// <returns></returns>
2023-08-22 19:08:45 +08:00
public int BulletCapacity()
{
2024-11-11 19:21:33 +08:00
var weaponConfig = TableManager.Instance.Tables.WeaponConfig.Get(WeaponId());
if (weaponConfig == null)
{
DebugUtil.LogError("武器id为{0}的武器没配" + WeaponId());
return 0;
}
return weaponConfig.MaxBulletCount;
2023-10-19 15:00:19 +08:00
}
2024-11-11 19:21:33 +08:00
/// <summary>
/// 换弹时间
/// </summary>
/// <returns></returns>
2023-10-19 15:00:19 +08:00
public float ChangeBulletTime()
{
2024-11-11 19:21:33 +08:00
var weaponConfig = TableManager.Instance.Tables.WeaponConfig.Get(WeaponId());
if (weaponConfig == null)
{
DebugUtil.LogError("武器id为{0}的武器没配" + WeaponId());
return 0;
}
return weaponConfig.ReloadTime;
2023-08-22 19:08:45 +08:00
}
/// <summary>
/// 攻击轮次,每次攻击多少轮进入一次攻击间隔
/// </summary>
/// <returns></returns>
public int AttackLoopCount()
{
return Cfg.AttackLoopCount;
}
2024-11-11 19:21:33 +08:00
/// <summary>
/// 射速,每秒开几枪
/// </summary>
/// <returns></returns>
2023-08-22 19:08:45 +08:00
public float ShootSpeed()
{
2024-11-11 19:21:33 +08:00
var weaponConfig = TableManager.Instance.Tables.WeaponConfig.Get(WeaponId());
if (weaponConfig == null)
{
DebugUtil.LogError("武器id为{0}的武器没配" + WeaponId());
return 0;
}
return weaponConfig.ShootSpeed;
2023-08-22 19:08:45 +08:00
}
2025-01-21 16:38:05 +08:00
/// <summary>
/// 攻击校准时间(后摇时间)
/// </summary>
/// <returns></returns>
public float AttackEndTime()
{
var weaponConfig = TableManager.Instance.Tables.WeaponConfig.Get(WeaponId());
if (weaponConfig == null)
{
DebugUtil.LogError("武器id为{0}的武器没配" + WeaponId());
return 0;
}
return weaponConfig.AttackEndTime;
}
2024-11-11 19:28:18 +08:00
/// <summary>
/// 攻击范围,单位:格子
/// </summary>
/// <returns></returns>
public int AttackDistance()
{
var weaponConfig = TableManager.Instance.Tables.WeaponConfig.Get(WeaponId());
if (weaponConfig == null)
{
DebugUtil.LogError("武器id为{0}的武器没配" + WeaponId());
return 0;
}
return weaponConfig.AttackDistance;
}
2023-08-22 19:08:45 +08:00
private float SpeedAwakeLvUp()
{
2023-10-19 15:00:19 +08:00
if (_awakeCfg != null)
2023-08-22 19:08:45 +08:00
{
2023-10-19 15:00:19 +08:00
return _awakeCfg.Speed;
2023-08-22 19:08:45 +08:00
}
return 0;
}
float SpeedBreakLvUp()
{
if (_breakCfg != null)
return _breakCfg.Speed;
return 0;
}
2023-08-22 19:08:45 +08:00
public float MoveSpeed()
{
return Cfg.Speed + SpeedBreakLvUp() + SpeedAwakeLvUp();
2023-08-22 19:08:45 +08:00
}
2024-11-11 19:21:33 +08:00
public int WeaponId()
{
if (_breakCfg == null || _breakCfg.WeaponId == 0)
{
return Cfg.WeaponId;
}
return _breakCfg.WeaponId;
}
2023-08-22 19:08:45 +08:00
public float YaZhi()
{
2024-11-11 19:21:33 +08:00
var weaponConfig = TableManager.Instance.Tables.WeaponConfig.Get(WeaponId());
if (weaponConfig == null)
{
DebugUtil.LogError("武器id为{0}的武器没配" + WeaponId());
return 0;
}
return weaponConfig.MoraleDamage;
2023-08-22 19:08:45 +08:00
}
2024-11-11 19:21:33 +08:00
/// <summary>
/// 对人形伤害缩放
/// </summary>
/// <returns></returns>
public float DamageScaleToHuman()
2023-08-22 19:08:45 +08:00
{
2024-11-11 19:21:33 +08:00
var weaponConfig = TableManager.Instance.Tables.WeaponConfig.Get(WeaponId());
if (weaponConfig == null)
{
DebugUtil.LogError("武器id为{0}的武器没配" + WeaponId());
return 0;
}
return weaponConfig.DamageScaleForHuman;
2023-08-22 19:08:45 +08:00
}
2024-11-11 19:21:33 +08:00
/// <summary>
/// 对载具伤害缩放
/// </summary>
/// <returns></returns>
public float DamageScaleToCarrier()
2023-08-22 19:08:45 +08:00
{
2024-11-11 19:21:33 +08:00
var weaponConfig = TableManager.Instance.Tables.WeaponConfig.Get(WeaponId());
if (weaponConfig == null)
{
DebugUtil.LogError("武器id为{0}的武器没配" + WeaponId());
return 0;
}
return weaponConfig.DamageScaleForVehicle;
2023-08-22 19:08:45 +08:00
}
2024-11-11 19:21:33 +08:00
/// <summary>
/// 对建筑伤害缩放
/// </summary>
/// <returns></returns>
public float DamageScaleToBuilding()
2024-10-16 13:51:40 +08:00
{
2024-11-11 19:21:33 +08:00
var weaponConfig = TableManager.Instance.Tables.WeaponConfig.Get(WeaponId());
if (weaponConfig == null)
{
DebugUtil.LogError("武器id为{0}的武器没配" + WeaponId());
return 0;
}
return weaponConfig.DamageScaleForBuilding;
2024-10-16 13:51:40 +08:00
}
2024-11-11 19:21:33 +08:00
/// <summary>
/// 对血量伤害缩放
/// </summary>
/// <returns></returns>
public float DamageScaleToHp()
2024-10-16 13:51:40 +08:00
{
2024-11-11 19:21:33 +08:00
var weaponConfig = TableManager.Instance.Tables.WeaponConfig.Get(WeaponId());
if (weaponConfig == null)
{
DebugUtil.LogError("武器id为{0}的武器没配" + WeaponId());
return 1f;
}
return weaponConfig.DamageScaleForHp;
}
public float DamageScaleToShiled()
{
var weaponConfig = TableManager.Instance.Tables.WeaponConfig.Get(WeaponId());
if (weaponConfig == null)
{
DebugUtil.LogError("武器id为{0}的武器没配" + WeaponId());
return 1f;
}
return weaponConfig.DamageScaleForShiled;
2024-10-16 13:51:40 +08:00
}
2023-08-22 19:08:45 +08:00
private float CriticalDamageAwakeLvUp()
{
2023-10-19 15:00:19 +08:00
if (_awakeCfg != null)
2023-08-22 19:08:45 +08:00
{
2023-10-19 15:00:19 +08:00
return _awakeCfg.CriticalDamage;
2023-08-22 19:08:45 +08:00
}
return 0;
}
public float CriticalDamage()
{
return Cfg.CriticalDamage + _breakCfg.CriticalDamage + CriticalDamageAwakeLvUp();
2023-08-22 19:08:45 +08:00
}
private float CriticalRatioAwakeLvUp()
{
2023-10-19 15:00:19 +08:00
if (_awakeCfg != null)
2023-08-22 19:08:45 +08:00
{
2023-10-19 15:00:19 +08:00
return _awakeCfg.CriticalRatio;
2023-08-22 19:08:45 +08:00
}
return 0;
}
public float CriticalRatio()
{
return Cfg.CriticalRatio + _breakCfg.CriticalRatio + CriticalRatioAwakeLvUp();
2023-08-22 19:08:45 +08:00
}
public string CharacterBelong()
{
var factionCfg = TableManager.Instance.Tables.FactionAttri.Get((int)CommonUtils.GetEfactionByCfg(Cfg));
StringBuilder sb = new StringBuilder();
if (factionCfg == null)
{
DebugUtil.LogError($"势力配置为空,RoleID:{ID}");
}
else
sb.Append(CommonUtils.GetLocalizeText(E_LocalizePrefix.faction, (int)CommonUtils.GetEfactionByCfg(Cfg)));
Army armyData = CommonUtils.GetArmyByCfg(Cfg);
var armyCfg = TableManager.Instance.Tables.ArmyAttri.Get((int)armyData);
if (armyCfg == null)
{
DebugUtil.LogError($"部队配置为空,RoleID:{ID}");
}
else
sb.Append(sb.Length > 0 ? "-" : "").Append(CommonUtils.GetLocalizeText(E_LocalizePrefix.army, (int)armyData));
return sb.ToString();
}
2023-08-22 19:08:45 +08:00
public void AddLikeLyEXPInfo(int exp)
{
SetLikelyLv();
}
private void SetLikelyLv()
{
2023-10-19 15:00:19 +08:00
}
public bool IsMaxBreak()
{
if ((GetBreakPassiveId() == 0) || BreakLevel >= GetMaxBreakLevel())
2023-10-19 15:00:19 +08:00
{
return true;
}
return false;
}
2024-05-29 16:55:12 +08:00
2023-10-19 15:00:19 +08:00
public bool IsMaxAwake()
{
if ((GetAwakePassiveId() == 0) || AwakeLevel >= GetMaxAwakeLevel())
{
return true;
}
return false;
2023-08-22 19:08:45 +08:00
}
2024-05-29 16:55:12 +08:00
/// <summary>
/// 是否满好感度
/// </summary>
/// <returns></returns>
public bool IsMaxLikely()
{
return LikelyLevel >= GetMaxLikelyLevel();
}
public int GetMaxLikelyLevel()
{
int maxLevel = 0;
CharacterLikability likelyCfg = TableManager.Instance.Tables.CharacterLikability;
for (int i = 0; i < likelyCfg.DataList.Count; i++)
{
if (likelyCfg.DataList[i].RoleID == ID && likelyCfg.DataList[i].LikabilityLevel > maxLevel)
maxLevel = likelyCfg.DataList[i].LikabilityLevel;
}
return maxLevel;
}
2023-08-22 19:08:45 +08:00
public int GetMaxBreakLevel()
{
2023-10-19 15:00:19 +08:00
int maxLevel = 0;
CharacterBreak breakCfg = TableManager.Instance.Tables.CharacterBreak;
2023-10-19 15:00:19 +08:00
for (int i = 0; i < breakCfg.DataList.Count; i++)
{
if (breakCfg.DataList[i].RoleID == ID)
2023-10-19 15:00:19 +08:00
{
if (breakCfg.DataList[i].BreakLevel > maxLevel)
{
maxLevel = breakCfg.DataList[i].BreakLevel;
}
}
}
return maxLevel;
}
2024-05-29 16:55:12 +08:00
2023-10-19 15:00:19 +08:00
public int GetMaxAwakeLevel()
{
int maxLevel = 0;
CharacterAwaking breakCfg = TableManager.Instance.Tables.CharacterAwaking;
for (int i = 0; i < breakCfg.DataList.Count; i++)
{
if (breakCfg.DataList[i].RoleID == ID)
{
if (breakCfg.DataList[i].AwakingLevel > maxLevel)
{
maxLevel = breakCfg.DataList[i].AwakingLevel;
}
}
}
return maxLevel;
}
2024-05-29 16:55:12 +08:00
2023-10-19 15:00:19 +08:00
public int GetMaxUltralSkillLevel()
{
int maxSkillLevel = 0;
CharacterSkillLevel cfg = TableManager.Instance.Tables.CharacterSkillLevel;
for (int i = 0; i < cfg.DataList.Count; i++)
{
if (cfg.DataList[i].RoleID == ID)
2023-10-19 15:00:19 +08:00
{
if (cfg.DataList[i].SkillLevel > maxSkillLevel)
2023-10-19 15:00:19 +08:00
{
maxSkillLevel = cfg.DataList[i].SkillLevel;
2023-10-19 15:00:19 +08:00
}
}
}
return maxSkillLevel;
2023-08-22 19:08:45 +08:00
}
public string GetWholeHeadPath(int Skinindex = -1)
{
if (Skinindex == -1)
2024-06-25 18:53:27 +08:00
Skinindex = GLConfig.Inst.data.DEFAULTSKINID;
return CommonUtils.GetCharacterPicPath(Cfg.RoleID, CommonUtils.ECharacterPicPathType.HeadPic, Skinindex);//CommonUtils.GetWholeHeadPath(TableManager.Instance.Tables.SkinCfg.Get(Skinindex, Cfg.RoleID).PIcHeadPath);
}
2024-01-03 14:56:46 +08:00
public string PrefabPath =>
2024-01-15 12:39:20 +08:00
PathEx.GetCharacterDisplayModelPath(Cfg.NameID);
public string WeaponName()
{
DataWeapon dataWeapon = TableManager.Instance.Tables.WeaponConfig.Get(Cfg.WeaponId);
if (dataWeapon == null)
{
DebugUtil.LogError("武器id为{0}的武器没配" + Cfg.WeaponId);
return Cfg.WeaponId.ToString();
}
return CommonUtils.GetLocalizeText(E_LocalizePrefix.weapon, Cfg.WeaponId);//dataWeapon.Name
}
public void ConstructRedPointTree(int parentID)
{
//角色列表内节点,非叶子节点
_redPointNode = RedPointManager.Instance.AddDynamicNode
(cfg.RedPoint.NodeType.Character,
parentID,
new List<int>() { (int)ID, (int)RedPointNodeCharacter.CharacterType.Equip }) as RedPointNodeCharacter;
2024-07-16 13:11:18 +08:00
2024-08-15 19:47:57 +08:00
//此处添加角色所需要的所有红点节点,如觉醒,突破,技能等,挂在角色节点下
#region 觉醒红点
characterAwakingNode = RedPointManager.Instance.AddDynamicNode
(cfg.RedPoint.NodeType.Character,
_redPointNode.ID,
new List<int>() { (int)ID, (int)RedPointNodeCharacter.CharacterType.Awaking }) as RedPointNodeCharacter;
2024-08-15 19:47:57 +08:00
#endregion
if (_redPointNode == null)
DebugUtil.LogError("_redPointNode is null");
if (characterAwakingNode == null)
{
DebugUtil.LogError("characterAwakingNode is null");
}
}
public void ConstructRedPointTree(RedPointNode parent)
{
throw new System.NotImplementedException();
}
public void ForceSetCfg(DataCharacterAttri cfg)
{
_cfg = cfg;
}
2023-08-22 19:08:45 +08:00
}