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 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 EncryptionFloat attSpeed = new EncryptionFloat(); public EncryptionFloat crit = new EncryptionFloat(); public EncryptionFloat critDamage = new EncryptionFloat(); // public EncryptionFloat dodge = new EncryptionFloat(); public EncryptionInt level; public HeroModelConfig modelConfig; public HeroPowerUpConfig powerUpConfig; public MonsterPowerUpConfig MonsterPowerUpConfig; public HeroPromoteConfig promoteConfig; public HeroBasicEquipConfig basicEquipConfig; public long defK; /// /// 闪避 默认10%的几率 /// public float dodge = 5; /// /// 1=英雄 2=小怪 3=精英怪 4=boss /// public int heroType; public string modelName; public float maxDis = 2; public float maxDisTo = 2 * 2; public bool isMonster; // public int[] skillId; // public List skillConfigs; /// /// 所有已解锁技能的ID /// public List unLockSkills; public bool isGpu; public string heroName; public List MagicWeaponID; public CombatHeroInfo() { } private float rarityFactor; private float starFactor; private float factor; protected Map _AttributeCacheValue = new Map(); /// /// 计算影响基础属性的参数 /// (稀有度、星级) /// protected void CalFactor() { rarityFactor = PlayerManager.Instance.gameConstantConfig.monsterRarityAttributeFactor[modelConfig.rarity - 1] / 100f; starFactor = promoteConfig.star_Power / 100f; factor = rarityFactor * starFactor; } public void AddAttributeValueToCache(AttributeType attributeType, int value) { if (_AttributeCacheValue.TryGetValue(attributeType, out int v)) { value += v; } _AttributeCacheValue[attributeType] = value; } protected void CalBasicAttribute() { _AttributeCacheValue.Clear(); if (isMonster) { hp = (EncryptionLong)(modelConfig.hp * MonsterPowerUpConfig.HPFactor * factor); defense = (EncryptionLong)(modelConfig.def * MonsterPowerUpConfig.DEFFactor * factor); attack = (EncryptionLong)(modelConfig.attack * MonsterPowerUpConfig.ATKFactor * factor); defK = MonsterPowerUpConfig.defK; // expGain = (EncryptionLong)(modelConfig.expGain * MonsterPowerUpConfig.EXPFactor * factor); } else { hp = (EncryptionLong)(modelConfig.hp * powerUpConfig.HPFactor * factor); defense = (EncryptionLong)(modelConfig.def * powerUpConfig.DEFFactor * factor); attack = (EncryptionLong)(modelConfig.attack * powerUpConfig.ATKFactor * factor); defK = powerUpConfig.defK; //职业装备提供的属性 hp += PlayerManager.Instance.eqController.zyEqAddAttributeDic[modelConfig.profession].hp; defense += PlayerManager.Instance.eqController.zyEqAddAttributeDic[modelConfig.profession].def; attack += PlayerManager.Instance.eqController.zyEqAddAttributeDic[modelConfig.profession].atk; } CalUnLockSkill(); 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; } } } 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 (skillConfig.IDGroup == idGroup) { return skillConfig; } } return default; } protected void CalAttribute() { CalBasicAttribute(); attSpeed = (EncryptionFloat)modelConfig.speed_atk; crit = (EncryptionFloat)modelConfig.crit; // skillId = modelConfig.skillID; modelName = modelConfig.model; isGpu = modelConfig.isUseGpu; maxDis = modelConfig.range_atk; maxDisTo = maxDis * maxDis; heroType = modelConfig.heroType; } /// /// 计算解锁技能 /// public void CalUnLockSkill() { unLockSkills = new List(); } protected void AddSkillAttribute(SkillConfig skillConfig) { if (skillConfig.addPropertyType == null) { return; } for (int i = 0; i < skillConfig.addPropertyType.Length; i++) { int propertyType = skillConfig.addPropertyType[i]; int value = skillConfig.addPropertyValue[i]; switch (propertyType) { case 1: AddAttributeValueToCache(AttributeType.Hp, value); break; case 2: AddAttributeValueToCache(AttributeType.Att, value); break; case 3: AddAttributeValueToCache(AttributeType.Def, value); break; } } } protected void SetDataConfig(int modelID, int level, int star) { modelConfig = ConfigComponent.Instance.Get(modelID); if (isMonster) { MonsterPowerUpConfig = ConfigComponent.Instance.Get(level); } else { powerUpConfig = ConfigComponent.Instance.Get(level); } promoteConfig = ConfigComponent.Instance.Get(star); this.level = (EncryptionInt)level; heroName = LanguageManager.Instance.Text(modelConfig.name); } public void InitMonster(int modelID, int level, int star = 1) { isMonster = true; SetDataConfig(modelID, level, star); CalFactor(); CalAttribute(); } public CombatHeroInfo Copy() { CombatHeroInfo combatHeroInfo = (CombatHeroInfo)MemberwiseClone(); return combatHeroInfo; } }