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; using Gameplay.Net; using System; public class VehicleCultivateDataManager : Singlenton, IInitable { //旧版本载具数据 //public List DataList; //public Dictionary DataDic; //组件升级版本载具数据 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.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 Add(Gameplay.Net.VehicleInfo info) { var id = info.nID; if (TableManager.Instance.Tables.VehicleConfig.GetOrDefault((int)id) == null) { DebugUtil.LogWarning("载具配置表中没有ID为{0}的载具", id); return; } if (DataDic.TryGetValue(id,out var info2)) { DataDic[id].Refresh(info); } else { info2 = new VehicleCultivateData((int)info.nID); info2.Refresh(info); DataList.Add(info2); DataDic[id] = 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(long selectID) { VehicleCultivateData info; if (DataDic.TryGetValue(selectID, out info)) { return info; } else { DebugUtil.Log("用户尚未拥有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 VehicleCultivateDataOld : Gameplay.Net.VehicleInfo //{ // public DataVehicle Cfg; // // public VehicleCultivateDataOld(uint ID, // ushort[] UpgradeCountParam) // { // nID = ID; // for (ushort i = 0; i < UpgradeCount.Length; i++) // { // UpgradeCount[i] = UpgradeCountParam[i]; // // } // } // public VehicleCultivateDataOld() { } // // /// // /// 载具本地化名称 // /// // 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 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; // } // /// // /// 获取基础最大血量(不计入强化奖励额外增益) // /// // /// // public float GetMaxHp() // { // return Cfg.HP + MaxUpgrades(VihecleUpgradeType.HP);// + VehicleCulitvateLevelUpBonusTableHelper.GetMaxValBonusByID(nID, BonusType.Hp); // } // /// // /// 获取基础最大攻击(不计入强化奖励额外增益) // /// // /// // 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); // // } // /// // /// 获取基础最大防御(不计入强化奖励额外增益) // /// // /// // 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); // // } // // //} // /// /// 组件升级版本载具属性 /// public class VehicleCultivateData : Gameplay.Net.VehicleInfo { public DataVehicle Cfg; //public List UpgradedComponents;//已升级的组件 public VehicleCultivateData(int vehicleID) { Cfg = TableManager.Instance.Tables.VehicleConfig.GetOrDefault(vehicleID); UpgradedComponents = new List(); } public VehicleCultivateData() : base() { } public void Refresh(VehicleInfo info) { nID = info.nID; Cfg = TableManager.Instance.Tables.VehicleConfig.GetOrDefault((int)info.nID); UpgradedComponents = new List(); UpgradedComponents.AddRange(info.UpgradedComponents); if (Cfg == null) DebugUtil.LogError("载具Cfg为空,请检查!载具ID:" + (int)info.nID); } /// /// 获取载具所使用的炮台 /// /// public long WeaponId() { var maxLevelWeapon = VehicleDataHelper.FindMaxLevelWeapon(UpgradedComponents); if (maxLevelWeapon != 0) { var compCfg = TableManager.Instance.Tables.VehicleComponent.GetOrDefault(maxLevelWeapon); if (compCfg == null) { DebugUtil.LogError("载具配置ID为{0}的组件配置为空", maxLevelWeapon); } else { return compCfg.BatteryID; } } return Cfg.WeaponId; } public int Hp() { var baseValue = Cfg.HP; var componentValue = 0; var tableCfg = TableManager.Instance.Tables.VehicleComponent; foreach (var comp in UpgradedComponents) { if (comp == 0) continue; var compCfg = tableCfg.GetOrDefault(comp); if (compCfg == null) { DebugUtil.LogError("载具配置ID为{0}的组件配置为空", comp); continue; } componentValue += compCfg.HP; } return baseValue + componentValue; } public int SeatCount() { var baseValue = Cfg.SeatCount; return baseValue; } public int Defense() { var baseValue = Cfg.Defense; var componentValue = 0; var tableCfg = TableManager.Instance.Tables.VehicleComponent; foreach (var comp in UpgradedComponents) { if (comp == 0) continue; var compCfg = tableCfg.GetOrDefault(comp); if (compCfg == null) { DebugUtil.LogError("载具配置ID为{0}的组件配置为空", comp); continue; } componentValue += compCfg.Defense; } return baseValue + componentValue; } public float MoveSpeed() { var baseValue = Cfg.MoveSpeed; return baseValue; } public int Attack() { var weaponId = WeaponId(); var batteryConfig = TableManager.Instance.Tables.BatteryConfig.GetOrDefault(weaponId); if (batteryConfig == null) { DebugUtil.LogError("载具配置ID为{0}的武器配置为空", weaponId); return 0; } var baseDamage = batteryConfig.DamagePower; return baseDamage; } public int BulletCapacity() { var weaponId = WeaponId(); var batteryConfig = TableManager.Instance.Tables.BatteryConfig.GetOrDefault(weaponId); if (batteryConfig == null) { DebugUtil.LogError("载具配置ID为{0}的武器配置为空", weaponId); return 0; } return batteryConfig.MaxBulletCount; } public float AttackShiledScale() { var weaponId = WeaponId(); var batteryConfig = TableManager.Instance.Tables.BatteryConfig.GetOrDefault(weaponId); if (batteryConfig == null) { DebugUtil.LogError("载具配置ID为{0}的武器配置为空", weaponId); return 0; } return batteryConfig.AttackShiledScale; } public float AttackHpScale() { var weaponId = WeaponId(); var batteryConfig = TableManager.Instance.Tables.BatteryConfig.GetOrDefault(weaponId); if (batteryConfig == null) { DebugUtil.LogError("载具配置ID为{0}的武器配置为空", weaponId); return 0; } return batteryConfig.AttackHpScale; } public float ScaleForHuman() { var weaponId = WeaponId(); var batteryConfig = TableManager.Instance.Tables.BatteryConfig.GetOrDefault(weaponId); if (batteryConfig == null) { DebugUtil.LogError("载具配置ID为{0}的武器配置为空", weaponId); return 0; } return batteryConfig.ScaleForHuman; } public float ScaleForVehicle() { var weaponId = WeaponId(); var batteryConfig = TableManager.Instance.Tables.BatteryConfig.GetOrDefault(weaponId); if (batteryConfig == null) { DebugUtil.LogError("载具配置ID为{0}的武器配置为空", weaponId); return 0; } return batteryConfig.ScaleForVehicle; } /// /// 获取地形适应文本 /// /// /// public string GetTerrainAdapt(BonusType terrainPlain) { var TehuaEnvironment = Cfg.SupperAdjustTerrain;//特化地形 var MalaEnvironment = Cfg.MalaAdjustTerrain;//不适应地形 int terrainAdaptVal = 1; switch (terrainPlain) { case BonusType.TerrainPlain: if (TehuaEnvironment.Contains(cfg.FightCfg.ELevelTerrainType.Plain)) { terrainAdaptVal = VehicleDataHelper.VeryAdapt; } else if (MalaEnvironment.Contains(cfg.FightCfg.ELevelTerrainType.Plain)) { terrainAdaptVal = VehicleDataHelper.NotAdapt; } break; case BonusType.TerrainMountain: if (TehuaEnvironment.Contains(cfg.FightCfg.ELevelTerrainType.Mountain)) { terrainAdaptVal = VehicleDataHelper.VeryAdapt; } else if (MalaEnvironment.Contains(cfg.FightCfg.ELevelTerrainType.Mountain)) { terrainAdaptVal = VehicleDataHelper.NotAdapt; } break; case BonusType.TerrainForest: if (TehuaEnvironment.Contains(cfg.FightCfg.ELevelTerrainType.Forest)) { terrainAdaptVal = VehicleDataHelper.VeryAdapt; } else if (MalaEnvironment.Contains(cfg.FightCfg.ELevelTerrainType.Forest)) { terrainAdaptVal = VehicleDataHelper.NotAdapt; } break; case BonusType.TerrainSnow: if (TehuaEnvironment.Contains(cfg.FightCfg.ELevelTerrainType.Snow)) { terrainAdaptVal = VehicleDataHelper.VeryAdapt; } else if (MalaEnvironment.Contains(cfg.FightCfg.ELevelTerrainType.Snow)) { terrainAdaptVal = VehicleDataHelper.NotAdapt; } break; default: DebugUtil.LogError("不包含的地形类型,请检查"); break; } return VehicleDataHelper.GetTerrainAdaptStr(terrainAdaptVal); } public int SumPowerLevel() { return 0; } /// /// 载具本地化名称 /// public string Name { get { return VehicleDataHelper.GetVehicleLocalizeName(Cfg.ID); } } }