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, IInitable { public List DataList; public Dictionary DataDic; void IInitable.Init() { DataList = new List(); DataDic = new Dictionary(); } 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.LogError("载具配置表中没有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 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() { } /// /// 载具本地化名称 /// 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]; } /// /// 选定升级类型强化至满级增加的总数值 /// /// 升级类型 /// public float MaxUpgrades(VihecleUpgradeType viType) { DataVehicleUpgrade dataVehicleUpgrade = VehicleUpgradeTableHelper.Get(Cfg.ID, viType); return dataVehicleUpgrade.PowerUpAmount * dataVehicleUpgrade.MaxCount; } /// /// 载具强化次数 /// /// /// 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 baseDamage = Cfg.Damage + 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() { return Cfg.BulletCount; } 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; } /// /// 获取基础最大血量(不计入强化奖励额外增益) /// /// public float GetMaxHp() { return Cfg.HP + MaxUpgrades(VihecleUpgradeType.HP);// + VehicleCulitvateLevelUpBonusTableHelper.GetMaxValBonusByID(nID, BonusType.Hp); } /// /// 获取基础最大攻击(不计入强化奖励额外增益) /// /// public float GetMaxAttack() { // return Cfg.Damages[Cfg.Damages.Count - 1]; return Cfg.Damage + MaxUpgrades(VihecleUpgradeType.Damage); } /// /// 获取基础最大防御(不计入强化奖励额外增益) /// /// 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() { return Cfg.AttackShiledScale + SumBonus(BonusType.AttackShiledScale); } public float AttackHpScale() { return Cfg.AttackHpScale + SumBonus(BonusType.AttackHpScale); } public float ScaleForHuman() { return Cfg.ScaleForHuman + SumBonus(BonusType.ScaleForHuman); } public float ScaleForVehicle() { return Cfg.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); } }