using System.Collections; using System.Collections.Generic; using Core.Language; using Core.Utility; using Excel2Json; using Fort23.UTool; using GameLogic.Combat.CombatTool; using GameLogic.Hero; using GameLogic.Player; using UnityEngine; using UnityEngine.Serialization; using Utility; [System.Serializable] public class CombatHeroInfo { public enum AttributeType { Hp, Att, Def, } public int modelID; public EncryptionLong hp = new EncryptionLong(); public EncryptionLong defense = new EncryptionLong(); public EncryptionLong attack = new EncryptionLong(); // public long public EncryptionFloat attSpeed { get { return _attSpeed; } } public EncryptionInt level; public EncryptionInt exp = new EncryptionInt(); public HeroModelConfig modelConfig; public HeroPowerUpConfig powerUpConfig; public MonsterPowerUpConfig MonsterPowerUpConfig; public EncryptionFloat _attSpeed; /// /// 功法强度的加成 % /// public float gongFaStrength; /// /// 护盾 /// public EncryptionLong Shield; /// /// 神识 /// public EncryptionLong shenshi; /// /// 添加的攻击速度比例% /// public float addAttSpeed_bl; /// /// 金 /// public float Metal = 100; /// /// 木 /// public float Wood = 100; /// /// 水 /// public float Water = 100; /// /// 火 /// public float Fire = 100; /// /// 土 /// public float Earth = 100; /// /// 金 /// public float Metal_Injury; /// /// 木 /// public float Wood_Injury; /// /// 水 /// public float Water_Injury; /// /// 火 /// public float Fire_Injury; /// /// 土 /// public float Earth_Injury; /// /// 1=英雄 2=小怪 3=精英怪 4=boss /// public int heroType; public string modelName; public bool isMonster; public int k; // public int[] skillId; // public List skillConfigs; /// /// 所有已解锁技能的ID /// public List unLockSkills = new List(); public bool isGpu; public string heroName; public List MagicWeaponID = new List(); /// /// 大道修炼ID /// public int TaoismSkillId; public float GetAttSpeed { get { float speed = CombatCalculateTool.Instance.GetVlaueRatioForFloat(attSpeed.Value, addAttSpeed_bl + 100); if (speed < 0) { speed = 0.01f; } return speed; } } public float GetAnimationSpeed { get { return GetAttSpeed / _attSpeed.Value; } } public CombatHeroInfo() { } protected Map _AttributeCacheValue = new Map(); /// /// 获取五行灵根属性 /// /// /// public float GetWuXingShuXing(WuXingType wuXingType) { switch (wuXingType) { case WuXingType.Gold: float Metal_v = Metal - Metal_Injury; if (Metal_v < 0) { Metal_v = 0; } return Metal_v; break; case WuXingType.Wood: float Wood_v = Wood - Wood_Injury; if (Wood_v < 0) { Wood_v = 0; } return Wood_v; break; case WuXingType.Water: float Water_v = Water - Water_Injury; if (Water_v < 0) { Water_v = 0; } return Water_v; break; case WuXingType.Fire: float Fire_v = Fire - Fire_Injury; if (Fire_v < 0) { Fire_v = 0; } return Fire_v; break; case WuXingType.Earth: float Earth_v = Earth - Earth_Injury; if (Earth_v < 0) { Earth_v = 0; } return Earth_v; break; default: return 0; } } protected void CalBasicAttribute() { _AttributeCacheValue.Clear(); modelID = modelConfig.ID; if (isMonster) { unLockSkills.Clear(); hp = (EncryptionLong)(modelConfig.hp * MonsterPowerUpConfig.HPFactor); defense = (EncryptionLong)(modelConfig.def * MonsterPowerUpConfig.DEFFactor); attack = (EncryptionLong)(modelConfig.attack * MonsterPowerUpConfig.ATKFactor); k = MonsterPowerUpConfig.defK; Metal = modelConfig.Linggen[0] * MonsterPowerUpConfig.LinggenUp / 100; Water = modelConfig.Linggen[1] * MonsterPowerUpConfig.LinggenUp / 100; Wood = modelConfig.Linggen[2] * MonsterPowerUpConfig.LinggenUp / 100; Fire = modelConfig.Linggen[3] * MonsterPowerUpConfig.LinggenUp / 100; Earth = modelConfig.Linggen[4] * MonsterPowerUpConfig.LinggenUp / 100; Shield = (EncryptionLong)(modelConfig.shield * MonsterPowerUpConfig.HudunFactor); SetSkillAttSpeed(modelConfig.speed_atk); if (modelConfig.skillID != null) { for (int i = 0; i < modelConfig.skillID.Length; i++) { int id = modelConfig.skillID[i]; if (id <= 0) { continue; } int startLevel = modelConfig.skillActiveLv[i]; if (startLevel > 0 && level < startLevel) { continue; } SkillInfo skillInfo = new SkillInfo(id, MonsterPowerUpConfig.GongfaLv, MonsterPowerUpConfig.GongfaStar); skillInfo.index = i; unLockSkills.Add(skillInfo); } } if (modelConfig.fa_bao_id != null) { for (int i = 0; i < modelConfig.fa_bao_id.Length; i++) { int faBaoId = modelConfig.fa_bao_id[i]; int startLevel = modelConfig.fabaoActiveLv[i]; if (startLevel > 0 && level < startLevel) { continue; } if (faBaoId > 0) { FaBaoInfo faBaoInfo = new FaBaoInfo(faBaoId, MonsterPowerUpConfig.FabaoLv, MonsterPowerUpConfig.FabaoStar); MagicWeaponID.Add(faBaoInfo); } } } } else { hp = (EncryptionLong)(modelConfig.hp * powerUpConfig.HPFactor); defense = (EncryptionLong)(modelConfig.def * powerUpConfig.DEFFactor); attack = (EncryptionLong)(modelConfig.attack * powerUpConfig.ATKFactor); Shield = (EncryptionLong)(modelConfig.shield * powerUpConfig.HudunFactor); // shenshi = (EncryptionLong)(modelConfig.shenshi * powerUpConfig.ShenshiFactor); k = powerUpConfig.defK; } for (_AttributeCacheValue.Begin(); _AttributeCacheValue.Next();) { switch (_AttributeCacheValue.Key) { case AttributeType.Hp: hp += CombatCalculateTool.Instance.GetVlaueRatioForLong(hp.Value, _AttributeCacheValue.Value); break; case AttributeType.Att: attack += CombatCalculateTool.Instance.GetVlaueRatioForLong(attack.Value, _AttributeCacheValue.Value); break; case AttributeType.Def: defense += CombatCalculateTool.Instance.GetVlaueRatioForLong(defense.Value, _AttributeCacheValue.Value); break; } } if (!isMonster) { for (int i = 0; i < MagicWeaponID.Count; i++) { FaBaoInfo faBaoInfo = MagicWeaponID[i]; foreach (var VARIABLE in faBaoInfo.attriButedIC) { switch (VARIABLE.Key) { case 1: hp += VARIABLE.Value; break; case 2: defense += VARIABLE.Value; break; case 3: attack += VARIABLE.Value; break; } } } } } public SkillConfig GetGroupSkillConfig(int idGroup) { if (unLockSkills == null) { return default; } for (int i = 0; i < unLockSkills.Count; i++) { // SkillConfig skillConfig = ConfigComponent.Instance.Get(unLockSkills[i]); if (unLockSkills[i].skillConfig.IDGroup == idGroup) { return unLockSkills[i].skillConfig; } } return default; } protected void CalAttribute() { CalBasicAttribute(); // skillId = modelConfig.skillID; modelName = modelConfig.model; isGpu = modelConfig.isUseGpu; heroType = modelConfig.heroType; } public void SetSkillAttSpeed(float attSpeed) { _attSpeed = (EncryptionFloat)(1.0f / attSpeed); } protected void SetDataConfig(int modelID, int level) { modelConfig = ConfigComponent.Instance.Get(modelID); if (isMonster) { MonsterPowerUpConfig = ConfigComponent.Instance.Get(level); } else { powerUpConfig = ConfigComponent.Instance.Get(level); } this.level = (EncryptionInt)level; heroName = LanguageManager.Instance.Text(modelConfig.name); } public void InitMonster(int modelID, int level) { isMonster = true; SetDataConfig(modelID, level); CalAttribute(); } public CombatHeroInfo Copy() { CombatHeroInfo combatHeroInfo = (CombatHeroInfo)MemberwiseClone(); return combatHeroInfo; } }