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

590 lines
14 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;
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;
void IInitable.Init()
{
DataList = new List<CharacterDataInfo>();
DataDic = new Dictionary<uint, CharacterDataInfo>();
}
void IInitable.Release()
{
DataList.Clear();
DataDic.Clear();
}
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)
{
CharacterDataInfo info = new CharacterDataInfo(item);
2024-01-11 14:12:39 +08:00
if (DataDic.ContainsKey((uint)info.Cfg.RoleID))
{
continue;
}
2023-08-22 19:08:45 +08:00
DataList.Add(info);
DataDic[(uint)info.Cfg.RoleID] = info;
}
}
public void Add(CharacterInfo info)
{
CharacterDataInfo info2;
if (DataDic.TryGetValue(info.ID, out info2))
{
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();
newInfo.Refresh(info);
DataList.Add(newInfo);
DataDic[info.ID] = newInfo;
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-11-01 14:50:52 +08:00
2023-08-22 19:08:45 +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
}
public class CharacterDataInfo : CharacterInfo
{
public DataCharacterAttri Cfg => _cfg;
2023-10-19 15:00:19 +08:00
private DataCharacterAttri _cfg;
private DataCharacterBreak _breakCfg;
private DataCharacterAwaking _awakeCfg;
2023-08-22 19:08:45 +08:00
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;
SkinID = 0;
CfgLoad();
}
2023-10-19 15:00:19 +08:00
private void CfgLoad()
2023-08-22 19:08:45 +08:00
{
2023-10-19 15:00:19 +08:00
_cfg = TableManager.Instance.Tables.CharacterAttri.GetOrDefault((int)ID);
2023-08-22 19:08:45 +08:00
OnBreakCfgLoaded(TableManager.Instance.Tables.CharacterBreak);
OnAwakeCfgLoaded(TableManager.Instance.Tables.CharacterAwaking);
}
2023-10-19 15:00:19 +08:00
2023-08-22 19:08:45 +08:00
private void OnAwakeCfgLoaded(CharacterAwaking characterAwaking)
{
2023-10-19 15:00:19 +08:00
_awakeCfg = characterAwaking.Get((int)Cfg.RoleID, (int)AwakeLevel);
if (_awakeCfg != null) return;
if (AwakeLevel >= characterAwaking.DataList[^1].AwakingLevel)
{
_awakeCfg = characterAwaking.DataList[^1];
DebugUtil.LogError("该角色的觉醒等级超过觉醒表最大等级 {0}", Cfg.RoleID);
}
2023-08-22 19:08:45 +08:00
}
private void OnBreakCfgLoaded(CharacterBreak characterBreak)
{
2023-10-19 15:00:19 +08:00
_breakCfg = characterBreak.Get((int)Cfg.RoleID, (int)BreakLevel);
if (_breakCfg != null) return;
if (AwakeLevel >= characterBreak.DataList[^1].BreakLevel)
{
_breakCfg = characterBreak.DataList[^1];
DebugUtil.LogError("该角色的突破等级超过突破表最大等级 {0}", Cfg.RoleID);
}
2023-08-22 19:08:45 +08:00
}
public int GetBreakPassiveId()
{
if (BreakLevel == 0)
{
return Cfg.PassiveBreakSkillID;
}
else
{
2023-10-19 15:00:19 +08:00
return _breakCfg.PassiveSkillID;
}
}
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
2023-10-19 15:00:19 +08:00
public int GetMaxBreakPassiveSkillLv()
{
return GetMaxBreakLevel();
}
public int GetMaxAwakePassiveSkillLv()
{
return 0;
2023-08-22 19:08:45 +08:00
}
public int GetAwakePassiveId()
{
if (AwakeLevel == 0)
{
return Cfg.PassiveAwakeSkillID;
}
else
{
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;
CfgLoad();
}
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;
CfgLoad();
}
private float HPBreakLvUp()
{
2023-10-19 15:00:19 +08:00
return _breakCfg.Hp;
2023-08-22 19:08:45 +08:00
}
private float HpAwakeLvUp()
{
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;
}
private int AttackBreakLvUp()
{
2023-10-19 15:00:19 +08:00
return _breakCfg.Attack;
2023-08-22 19:08:45 +08:00
}
private int AttackAwakeLvUp()
{
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.Attack;
2023-08-22 19:08:45 +08:00
}
return 0;
}
2023-12-29 15:07:04 +08:00
public string Name => CommonUtils.GetLocalizeText(_cfg.NameRead);
2023-08-22 19:08:45 +08:00
public float HP()
{
return HpLevelUp((int)Level) + HPBreakLvUp() + HpAwakeLvUp();
2023-10-19 15:00:19 +08:00
}
public float HpLevelUp(int level)
{
if (level > Cfg.Hp.Count)
{
DebugUtil.LogError("characterDefault表的HP不够了!!!!!");
return Cfg.Hp[Cfg.Hp.Count - 1];
}
else
{
return Cfg.Hp[(int)level - 1];
}
2023-08-22 19:08:45 +08:00
}
public int Attack()
{
return AttackLevelUp((int)Level) + AttackAwakeLvUp() + AttackBreakLvUp();
2023-08-22 19:08:45 +08:00
}
2023-10-19 15:00:19 +08:00
public int AttackLevelUp(int level)
{
if (level > Cfg.Attack.Count)
{
DebugUtil.LogError("characterDefault表的attack不够了!!!!!");
return Cfg.Attack[Cfg.Attack.Count - 1];
}
else
{
return Cfg.Attack[(int)level - 1];
}
}
2023-08-22 19:08:45 +08:00
//private float LevelUpDefence()
//{
// return Cfg.DefenceLevelUpTemplate[Level - 1];
//}
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) + ArmorAwakeLvUp() + ArmorBreakLvUp();
2023-08-22 19:08:45 +08:00
}
2023-10-19 15:00:19 +08:00
public int ArmorLevelUp(int level)
{
if (level > Cfg.Shield.Count)
{
DebugUtil.LogError("characterDefault表的shield不够了!!!!!");
return Cfg.Shield[Cfg.Shield.Count - 1];
}
else
{
return Cfg.Shield[(int)Level - 1];
}
}
2023-08-22 19:08:45 +08:00
//private float LevelUpArmor()
//{
// return Cfg.ShieldLevelUpTemplate[Level - 1];
//}
private float DenfenceBreakLvUp()
{
2023-10-19 15:00:19 +08:00
return _breakCfg.Defence;
2023-08-22 19:08:45 +08:00
}
private float DenfenceAwakeLvUp()
{
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;
}
public float Defence()
{
return DefenceLevelUp((int)Level) + DenfenceAwakeLvUp() + DenfenceBreakLvUp();
2023-10-19 15:00:19 +08:00
}
public int DefenceLevelUp(int level)
{
if (level > Cfg.Defence.Count)
{
DebugUtil.LogError("characterDefault表的dnfence不够了!!!!!");
return Cfg.Defence[Cfg.Defence.Count - 1];
}
else
{
return Cfg.Defence[(int)level - 1];
}
2023-08-22 19:08:45 +08:00
}
public float Corrage()
{
// 最大士气值
return Cfg.MaxMorale;
}
private int ManagazinContainAwakeLvUp()
{
if (_awakeCfg != null)
2023-08-22 19:08:45 +08:00
{
2023-10-19 15:00:19 +08:00
return _awakeCfg.ManagazinContain;
2023-08-22 19:08:45 +08:00
}
return 0;
}
public int BulletCapacity()
{
return Cfg.ManagazinContain + _breakCfg.ManagazinContain + ManagazinContainAwakeLvUp();
2023-10-19 15:00:19 +08:00
}
2023-10-19 15:00:19 +08:00
public float ChangeBulletTime()
{
return Cfg.ChangeBulletTime + _breakCfg.ChangeBulletTime + ChangeBulletTimeAwakeLvUp();
2023-08-22 19:08:45 +08:00
}
private float ShootSpeedAwakeLvUp()
{
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.ShootSpeed;
2023-08-22 19:08:45 +08:00
}
return 0;
}
public float ShootSpeed()
{
return Cfg.ShootSpeed + _breakCfg.ShootSpeed + ShootSpeedAwakeLvUp(); ;
2023-08-22 19:08:45 +08:00
}
private float ChangeBulletTimeAwakeLvUp()
{
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.ChangeBulletTime;
2023-08-22 19:08:45 +08:00
}
return 0;
}
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;
}
public float MoveSpeed()
{
return Cfg.Speed + _breakCfg.Speed + SpeedAwakeLvUp();
2023-08-22 19:08:45 +08:00
}
private float YaZhiAwakeLvUp()
{
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.YaZhi;
2023-08-22 19:08:45 +08:00
}
return 0;
}
public float YaZhi()
{
return Cfg.YaZhi + _breakCfg.YaZhi + YaZhiAwakeLvUp();
2023-08-22 19:08:45 +08:00
}
private float DamageToHumanAwakeLvUp()
{
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.DamageToHuman;
2023-08-22 19:08:45 +08:00
}
return 0;
}
public float DamageToHuman()
{
2023-10-19 15:00:19 +08:00
return Cfg.DamageToHuman + _breakCfg.DamageToHuman + DamageToHumanAwakeLvUp();
2023-08-22 19:08:45 +08:00
}
private float DamageToCarrierAwakeLvUp()
{
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.DamageToCarrier;
2023-08-22 19:08:45 +08:00
}
return 0;
}
public float DamageToCarrier()
{
2023-10-19 15:00:19 +08:00
return Cfg.DamageToCarrier + _breakCfg.DamageToCarrier + DamageToCarrierAwakeLvUp();
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 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;
}
public bool IsMaxAwake()
{
if ((GetAwakePassiveId() == 0) || AwakeLevel >= GetMaxAwakeLevel())
{
return true;
}
return false;
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;
}
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;
}
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)
Skinindex = Cfg.DefaultSkinIndex;
return 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(dataWeapon.Name);
}
2023-08-22 19:08:45 +08:00
}