441 lines
14 KiB
C#
441 lines
14 KiB
C#
using cfg.ActorCfg;
|
||
using cfg.VehicleCfg;
|
||
using cfg.VihecleCultivateCfg;
|
||
using Framework;
|
||
using PhxhSDK;
|
||
using System.Collections.Generic;
|
||
using Gameplay;
|
||
using DG.Tweening;
|
||
using NLDPB;
|
||
using UnityEngine;
|
||
|
||
public class VehicleCultivateDataManager : Singlenton<VehicleCultivateDataManager>, IInitable
|
||
{
|
||
public List<VehicleCultivateData> DataList;
|
||
public Dictionary<uint, VehicleCultivateData> DataDic;
|
||
|
||
void IInitable.Init()
|
||
{
|
||
DataList = new List<VehicleCultivateData>();
|
||
DataDic = new Dictionary<uint, VehicleCultivateData>();
|
||
|
||
}
|
||
|
||
void IInitable.Release()
|
||
{
|
||
DataList.Clear();
|
||
DataDic.Clear();
|
||
}
|
||
public void Add(Gameplay.Net.VehicleInfo info)
|
||
{
|
||
|
||
if (TableManager.Instance.Tables.VehicleConfig.GetOrDefault((int)info.nID) == null)
|
||
{
|
||
DebugUtil.LogWarning("载具配置表中没有ID为{0}的载具", info.nID);
|
||
return;
|
||
}
|
||
|
||
if (DataDic.TryGetValue(info.nID, out var info2))
|
||
{
|
||
DataDic[info.nID].Refresh(info);
|
||
}
|
||
else
|
||
{
|
||
info2 = new VehicleCultivateData();
|
||
info2.Refresh(info);
|
||
DataList.Add(info2);
|
||
DataDic[info.nID] = info2;
|
||
|
||
}
|
||
}
|
||
|
||
public void AddAllCfgVehicles()
|
||
{
|
||
var allConfigList = TableManager.Instance.Tables.VehicleConfig.DataList;
|
||
for (int i = 0; i < allConfigList.Count; i++)
|
||
{
|
||
var configItem = allConfigList[i];
|
||
var isAvailable = _CheckVehicleCfgAvailable(configItem);
|
||
if (!isAvailable)
|
||
{
|
||
DebugUtil.LogError($"载具配置不可用:{configItem.ID}");
|
||
continue;
|
||
}
|
||
|
||
var nId = (uint)configItem.ID;
|
||
if (DataDic.ContainsKey(nId))
|
||
{
|
||
continue;
|
||
}
|
||
var info2 = new VehicleCultivateData();
|
||
info2.Cfg = configItem;
|
||
info2.nID = nId;
|
||
DataList.Add(info2);
|
||
DataDic[nId] = info2;
|
||
}
|
||
}
|
||
|
||
private bool _CheckVehicleCfgAvailable(DataVehicle checkCfg)
|
||
{
|
||
if (checkCfg == null)
|
||
{
|
||
DebugUtil.LogError("载具配置为空");
|
||
return false;
|
||
}
|
||
if (checkCfg.ID == 0)
|
||
{
|
||
DebugUtil.LogError("载具配置ID为0");
|
||
return false;
|
||
}
|
||
|
||
var upgradeAttack = TableManager.Instance.Tables.VehicleUpgrade.Get(checkCfg.ID, VihecleUpgradeType.Damage);
|
||
if (upgradeAttack == null)
|
||
{
|
||
DebugUtil.LogError("载具配置ID为{0}的攻击升级配置为空", checkCfg.ID);
|
||
return false;
|
||
}
|
||
|
||
var skillCfg = TableManager.Instance.Tables.VehicleSkllUpgrade.Get(checkCfg.ID);
|
||
if (skillCfg == null)
|
||
{
|
||
DebugUtil.LogError("载具配置ID为{0}的技能升级配置为空", checkCfg.ID);
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
|
||
public VehicleCultivateData GetVehicleCultivateData(uint selectID)
|
||
{
|
||
VehicleCultivateData info;
|
||
if (DataDic.TryGetValue(selectID, out info))
|
||
{
|
||
return info;
|
||
}
|
||
else
|
||
{
|
||
DebugUtil.LogError("该角色找不到没有Id为 {0}的载具", selectID);
|
||
return null;
|
||
}
|
||
}
|
||
|
||
public int GetSpendLeadership(uint id)
|
||
{
|
||
if (DataDic.TryGetValue(id, out var vehicleCultivateData))
|
||
{
|
||
if (vehicleCultivateData.Cfg != null)
|
||
return vehicleCultivateData.Cfg.SpendLeadership;
|
||
}
|
||
|
||
return 0;
|
||
}
|
||
|
||
}
|
||
|
||
public class VehicleCultivateData : Gameplay.Net.VehicleInfo
|
||
{
|
||
public DataVehicle Cfg;
|
||
|
||
public VehicleCultivateData(uint ID,
|
||
ushort[] UpgradeCountParam)
|
||
{
|
||
nID = ID;
|
||
for (ushort i = 0; i < UpgradeCount.Length; i++)
|
||
{
|
||
UpgradeCount[i] = UpgradeCountParam[i];
|
||
|
||
}
|
||
}
|
||
public VehicleCultivateData() { }
|
||
|
||
/// <summary>
|
||
/// 载具本地化名称
|
||
/// </summary>
|
||
public string Name
|
||
{
|
||
get
|
||
{
|
||
var vehicleLocalNameKey = "vehicle_name_" + (Cfg.ID % 100).ToString("D2");
|
||
return CommonUtils.GetLocalizeText(vehicleLocalNameKey);//(Cfg.NameLocal);
|
||
}
|
||
}
|
||
|
||
public int Hp(bool baseVal = false)
|
||
{
|
||
|
||
var baseValue = Cfg.HP + Mathf.RoundToInt(SumUpgrades(VihecleUpgradeType.HP));
|
||
if(baseVal)//显示未加成的基础生命
|
||
{
|
||
return baseValue;
|
||
}
|
||
var scale = SumBonus(BonusType.Hp) + 1f;
|
||
var finalValue = Mathf.RoundToInt(baseValue * scale);
|
||
|
||
return finalValue;
|
||
}
|
||
public float SumUpgrades(VihecleUpgradeType viType)
|
||
{
|
||
DataVehicleUpgrade dataVehicleUpgrade = VehicleUpgradeTableHelper.Get(Cfg.ID, viType);
|
||
|
||
return dataVehicleUpgrade.PowerUpAmount * UpgradeCount[(int)viType];
|
||
|
||
|
||
}
|
||
/// <summary>
|
||
/// 选定升级类型强化至满级增加的总数值
|
||
/// </summary>
|
||
/// <param name="viType">升级类型</param>
|
||
/// <returns></returns>
|
||
public float MaxUpgrades(VihecleUpgradeType viType)
|
||
{
|
||
DataVehicleUpgrade dataVehicleUpgrade = VehicleUpgradeTableHelper.Get(Cfg.ID, viType);
|
||
|
||
return dataVehicleUpgrade.PowerUpAmount * dataVehicleUpgrade.MaxCount;
|
||
|
||
|
||
}
|
||
/// <summary>
|
||
/// 载具强化次数
|
||
/// </summary>
|
||
/// <param name="bType"></param>
|
||
/// <returns></returns>
|
||
public float SumBonus(BonusType bType)
|
||
{
|
||
float count = 0;
|
||
VehicleUpgradeBonusAttri vTable = TableManager.Instance.Tables.VehicleUpgradeBonusAttri;
|
||
for (int i = 0; i < vTable.DataList.Count; i++)
|
||
{
|
||
if (vTable.DataList[i] == null)
|
||
{
|
||
DebugUtil.LogError($"vTable.DataList[{i}]为空");
|
||
continue;
|
||
}
|
||
if (vTable.DataList[i].ID != nID)//Cfg.ID
|
||
{
|
||
continue;
|
||
}
|
||
if ((vTable.DataList[i].BonusType == bType) && (vTable.DataList[i].SumCount <= SumPowerLevel()))
|
||
{
|
||
count += vTable.DataList[i].BonusPropertyCount;
|
||
}
|
||
}
|
||
return count;
|
||
}
|
||
public int Attack(bool baseVal = false)
|
||
{
|
||
|
||
var batteryConfig = TableManager.Instance.Tables.BatteryConfig.GetOrDefault(Cfg.WeaponId);
|
||
if (batteryConfig == null)
|
||
{
|
||
DebugUtil.LogError("载具配置ID为{0}的武器配置为空", Cfg.WeaponId);
|
||
return 0;
|
||
}
|
||
|
||
var baseDamage = batteryConfig.DamagePower + Mathf.RoundToInt(SumUpgrades(VihecleUpgradeType.Damage));
|
||
if (baseVal)//显示未加成的基础攻击
|
||
{
|
||
return baseDamage;
|
||
}
|
||
var scale = SumBonus(BonusType.AttackPercent) + 1f;
|
||
var finalDamage = Mathf.RoundToInt(baseDamage * scale);
|
||
DebugUtil.Log("显示最终攻击力:基础攻击力为" + baseDamage + ",加成比例为" + scale + ",最终攻击力为" + finalDamage);
|
||
return finalDamage;
|
||
|
||
}
|
||
public float MoveSpeed()
|
||
{
|
||
return Cfg.MoveSpeed + SumBonus(BonusType.MoveSpeed);
|
||
}
|
||
public int BulletCapacity()
|
||
{
|
||
var batteryConfig = TableManager.Instance.Tables.BatteryConfig.GetOrDefault(Cfg.WeaponId);
|
||
if (batteryConfig == null)
|
||
{
|
||
DebugUtil.LogError("载具配置ID为{0}的武器配置为空", Cfg.WeaponId);
|
||
return 0;
|
||
}
|
||
return batteryConfig.MaxBulletCount;
|
||
}
|
||
public int Defense(bool baseVal = false)
|
||
{
|
||
var baseDefense = Cfg.Defense + (int)SumUpgrades(VihecleUpgradeType.Defense);
|
||
if(baseVal)//显示未加成的基础防御
|
||
{
|
||
return baseDefense;
|
||
}
|
||
DebugUtil.Log("防御暂时未配置额外加成,如已更改配置,请在此处更新");
|
||
var scale = 1f;// SumBonus(BonusType.) + 1f;
|
||
var finalDefense = Mathf.RoundToInt(baseDefense * scale);
|
||
return finalDefense;
|
||
}
|
||
|
||
public int SkillLevel()
|
||
{
|
||
return (int)SumBonus(BonusType.SkillLv);
|
||
}
|
||
|
||
public void Refresh(Gameplay.Net.VehicleInfo info)
|
||
{
|
||
nID = info.nID;
|
||
for (int i = 0; i < info.UpgradeCount.Length; i++)
|
||
{
|
||
UpgradeCount[i] = (ushort)info.UpgradeCount[i];
|
||
|
||
}
|
||
Cfg = TableManager.Instance.Tables.VehicleConfig.GetOrDefault((int)nID);
|
||
if (Cfg == null) DebugUtil.LogError("载具Cfg为空,请检查!载具ID:" + nID);
|
||
}
|
||
|
||
public int SumPowerLevel()
|
||
{
|
||
int lv = 0;
|
||
for (int i = 0; i < UpgradeCount.Length; i++)
|
||
{
|
||
lv += UpgradeCount[i];
|
||
}
|
||
return lv;
|
||
}
|
||
/// <summary>
|
||
/// 获取基础最大血量(不计入强化奖励额外增益)
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public float GetMaxHp()
|
||
{
|
||
return Cfg.HP + MaxUpgrades(VihecleUpgradeType.HP);// + VehicleCulitvateLevelUpBonusTableHelper.GetMaxValBonusByID(nID, BonusType.Hp);
|
||
}
|
||
/// <summary>
|
||
/// 获取基础最大攻击(不计入强化奖励额外增益)
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public float GetMaxAttack()
|
||
{
|
||
var batteryConfig = TableManager.Instance.Tables.BatteryConfig.GetOrDefault(Cfg.WeaponId);
|
||
if (batteryConfig == null)
|
||
{
|
||
DebugUtil.LogError("载具配置ID为{0}的武器配置为空", Cfg.WeaponId);
|
||
return 0;
|
||
}
|
||
// return Cfg.Damages[Cfg.Damages.Count - 1];
|
||
return batteryConfig.DamagePower + MaxUpgrades(VihecleUpgradeType.Damage);
|
||
|
||
}
|
||
/// <summary>
|
||
/// 获取基础最大防御(不计入强化奖励额外增益)
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public float GetMaxDenfense()
|
||
{
|
||
// return Cfg.Defenses[Cfg.Defenses.Count - 1];
|
||
return Cfg.Defense + MaxUpgrades(VihecleUpgradeType.Defense);
|
||
|
||
}
|
||
public int SeatCount()
|
||
{
|
||
return Cfg.SeatCount + Mathf.RoundToInt(SumBonus(BonusType.SeatCount));
|
||
}
|
||
|
||
public float AttackShiledScale()
|
||
{
|
||
var batteryConfig = TableManager.Instance.Tables.BatteryConfig.GetOrDefault(Cfg.WeaponId);
|
||
if (batteryConfig == null)
|
||
{
|
||
DebugUtil.LogError("载具配置ID为{0}的武器配置为空", Cfg.WeaponId);
|
||
return 0;
|
||
}
|
||
return batteryConfig.AttackShiledScale + SumBonus(BonusType.AttackShiledScale);
|
||
}
|
||
|
||
public float AttackHpScale()
|
||
{
|
||
var batteryConfig = TableManager.Instance.Tables.BatteryConfig.GetOrDefault(Cfg.WeaponId);
|
||
if (batteryConfig == null)
|
||
{
|
||
DebugUtil.LogError("载具配置ID为{0}的武器配置为空", Cfg.WeaponId);
|
||
return 0;
|
||
}
|
||
return batteryConfig.AttackHpScale + SumBonus(BonusType.AttackHpScale);
|
||
}
|
||
|
||
public float ScaleForHuman()
|
||
{
|
||
var batteryConfig = TableManager.Instance.Tables.BatteryConfig.GetOrDefault(Cfg.WeaponId);
|
||
if (batteryConfig == null)
|
||
{
|
||
DebugUtil.LogError("载具配置ID为{0}的武器配置为空", Cfg.WeaponId);
|
||
return 0;
|
||
}
|
||
return batteryConfig.ScaleForHuman + SumBonus(BonusType.ScaleForHuman);
|
||
}
|
||
|
||
public float ScaleForVehicle()
|
||
{
|
||
var batteryConfig = TableManager.Instance.Tables.BatteryConfig.GetOrDefault(Cfg.WeaponId);
|
||
if (batteryConfig == null)
|
||
{
|
||
DebugUtil.LogError("载具配置ID为{0}的武器配置为空", Cfg.WeaponId);
|
||
return 0;
|
||
}
|
||
return batteryConfig.ScaleForVehicle + SumBonus(BonusType.ScaleForVehicle);
|
||
}
|
||
|
||
public int SumPowerMaxLevel()
|
||
{
|
||
int lv = 0;
|
||
|
||
VehicleUpgrade vehicleUpgradeTab = TableManager.Instance.Tables.VehicleUpgrade;
|
||
for (int i = 0; i < vehicleUpgradeTab.DataList.Count; i++)
|
||
{
|
||
if (vehicleUpgradeTab.DataList[i].ID == Cfg.ID)
|
||
{
|
||
lv += vehicleUpgradeTab.DataList[i].MaxCount;
|
||
}
|
||
}
|
||
return lv;
|
||
|
||
}
|
||
public bool IsMaxHpLv()
|
||
{
|
||
return UpgradeCount[(int)cfg.ActorCfg.VihecleUpgradeType.HP] >= TableManager.Instance.Tables.VehicleUpgrade.Get((int)nID, cfg.ActorCfg.VihecleUpgradeType.HP).MaxCount;
|
||
}
|
||
public bool IsMaxDamageLv()
|
||
{
|
||
return UpgradeCount[(int)cfg.ActorCfg.VihecleUpgradeType.Damage] >= TableManager.Instance.Tables.VehicleUpgrade.Get((int)nID, cfg.ActorCfg.VihecleUpgradeType.Damage).MaxCount;
|
||
}
|
||
public bool IsMaxMoveSpeedLv()
|
||
{
|
||
return UpgradeCount[(int)cfg.ActorCfg.VihecleUpgradeType.MoveSpeed - 1] >= TableManager.Instance.Tables.VehicleUpgrade.Get((int)nID, cfg.ActorCfg.VihecleUpgradeType.MoveSpeed).MaxCount;
|
||
}
|
||
public bool IsMaxBulletCountLv()
|
||
{
|
||
return UpgradeCount[(int)cfg.ActorCfg.VihecleUpgradeType.BulletCount - 1] >= TableManager.Instance.Tables.VehicleUpgrade.Get((int)nID, cfg.ActorCfg.VihecleUpgradeType.BulletCount).MaxCount;
|
||
}
|
||
public bool IsMaxDefenseCountLv()
|
||
{
|
||
return UpgradeCount[(int)cfg.ActorCfg.VihecleUpgradeType.Defense - 1] >= TableManager.Instance.Tables.VehicleUpgrade.Get((int)nID, cfg.ActorCfg.VihecleUpgradeType.Defense).MaxCount;
|
||
}
|
||
|
||
public string GetTerrainAdapt(BonusType terrainType) //仅供地形使用
|
||
{
|
||
// VehicleUpgradeBonusAttri vTable = TableManager.Instance.Tables.VehicleUpgradeBonusAttri;
|
||
// int terrinBonusVal = Cfg.TerrainPlain;
|
||
// for (int i = 0; i < vTable.DataList.Count; i++)
|
||
// {
|
||
// if (vTable.DataList[i].SumCount < SumPowerLevel())
|
||
// {
|
||
// if (vTable.DataList[i].BonusType == BonusType.TerrainPlain)
|
||
// {
|
||
// terrinBonusVal = (int)vTable.DataList[i].BonusPropertyCount;
|
||
// }
|
||
// }
|
||
// }
|
||
// return VehicleDataHelper.GetTerrainAdaptStr(terrinBonusVal);
|
||
|
||
// TODO: 这里需要自行修改代码 2024-11-20
|
||
return VehicleDataHelper.GetTerrainAdaptStr(1);
|
||
|
||
}
|
||
|
||
|
||
}
|