CombatHeroInfo.cs 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using Core.Language;
  4. using Core.Utility;
  5. using Excel2Json;
  6. using Fort23.UTool;
  7. using GameLogic.Combat.CombatTool;
  8. using GameLogic.Hero;
  9. using UnityEngine;
  10. using UnityEngine.Serialization;
  11. using Utility;
  12. [System.Serializable]
  13. public class CombatHeroInfo
  14. {
  15. public enum AttributeType
  16. {
  17. Hp,
  18. Att,
  19. Def,
  20. }
  21. public int modelID;
  22. public EncryptionLong hp = new EncryptionLong();
  23. public EncryptionLong defense = new EncryptionLong();
  24. public EncryptionLong attack = new EncryptionLong();
  25. public EncryptionFloat attSpeed = (EncryptionFloat)2;
  26. public EncryptionInt level;
  27. public EncryptionFloat exp = new EncryptionFloat();
  28. public HeroModelConfig modelConfig;
  29. public HeroPowerUpConfig powerUpConfig;
  30. public MonsterPowerUpConfig MonsterPowerUpConfig;
  31. public HeroPromoteConfig promoteConfig;
  32. /// <summary>
  33. /// 添加的攻击速度比例%
  34. /// </summary>
  35. public float addAttSpeed_bl = (float)2;
  36. /// <summary>
  37. /// 金
  38. /// </summary>
  39. public float Metal;
  40. /// <summary>
  41. /// 木
  42. /// </summary>
  43. public float Wood;
  44. /// <summary>
  45. /// 水
  46. /// </summary>
  47. public float Water;
  48. /// <summary>
  49. /// 火
  50. /// </summary>
  51. public float Fire;
  52. /// <summary>
  53. /// 土
  54. /// </summary>
  55. public float Earth;
  56. /// <summary>
  57. /// 金
  58. /// </summary>
  59. public float Metal_Injury;
  60. /// <summary>
  61. /// 木
  62. /// </summary>
  63. public float Wood_Injury;
  64. /// <summary>
  65. /// 水
  66. /// </summary>
  67. public float Water_Injury;
  68. /// <summary>
  69. /// 火
  70. /// </summary>
  71. public float Fire_Injury;
  72. /// <summary>
  73. /// 土
  74. /// </summary>
  75. public float Earth_Injury;
  76. /// <summary>
  77. /// 1=英雄 2=小怪 3=精英怪 4=boss
  78. /// </summary>
  79. public int heroType;
  80. public string modelName;
  81. public bool isMonster;
  82. // public int[] skillId;
  83. // public List<SkillConfig> skillConfigs;
  84. /// <summary>
  85. /// 所有已解锁技能的ID
  86. /// </summary>
  87. public List<int> unLockSkills;
  88. public bool isGpu;
  89. public string heroName;
  90. public List<int> MagicWeaponID;
  91. public CombatHeroInfo()
  92. {
  93. }
  94. protected Map<AttributeType, int> _AttributeCacheValue = new Map<AttributeType, int>();
  95. public void AddAttributeValueToCache(AttributeType attributeType, int value)
  96. {
  97. if (_AttributeCacheValue.TryGetValue(attributeType, out int v))
  98. {
  99. value += v;
  100. }
  101. _AttributeCacheValue[attributeType] = value;
  102. }
  103. protected void CalBasicAttribute()
  104. {
  105. _AttributeCacheValue.Clear();
  106. if (isMonster)
  107. {
  108. hp = (EncryptionLong)(modelConfig.hp * MonsterPowerUpConfig.HPFactor);
  109. defense = (EncryptionLong)(modelConfig.def * MonsterPowerUpConfig.DEFFactor);
  110. attack = (EncryptionLong)(modelConfig.attack * MonsterPowerUpConfig.ATKFactor);
  111. }
  112. else
  113. {
  114. hp = (EncryptionLong)(modelConfig.hp * powerUpConfig.HPFactor);
  115. defense = (EncryptionLong)(modelConfig.def * powerUpConfig.DEFFactor);
  116. attack = (EncryptionLong)(modelConfig.attack * powerUpConfig.ATKFactor);
  117. //职业装备提供的属性
  118. hp += PlayerManager.Instance.eqController.zyEqAddAttributeDic[modelConfig.profession].hp;
  119. defense += PlayerManager.Instance.eqController.zyEqAddAttributeDic[modelConfig.profession].def;
  120. attack += PlayerManager.Instance.eqController.zyEqAddAttributeDic[modelConfig.profession].atk;
  121. }
  122. CalUnLockSkill();
  123. for (_AttributeCacheValue.Begin(); _AttributeCacheValue.Next();)
  124. {
  125. switch (_AttributeCacheValue.Key)
  126. {
  127. case AttributeType.Hp:
  128. hp += CombatCalculateTool.Instance.GetVlaueRatioForLong(hp.Value, _AttributeCacheValue.Value);
  129. break;
  130. case AttributeType.Att:
  131. attack += CombatCalculateTool.Instance.GetVlaueRatioForLong(attack.Value,
  132. _AttributeCacheValue.Value);
  133. break;
  134. case AttributeType.Def:
  135. defense += CombatCalculateTool.Instance.GetVlaueRatioForLong(defense.Value,
  136. _AttributeCacheValue.Value);
  137. break;
  138. }
  139. }
  140. }
  141. public SkillConfig GetGroupSkillConfig(int idGroup)
  142. {
  143. if (unLockSkills == null)
  144. {
  145. return default;
  146. }
  147. for (int i = 0; i < unLockSkills.Count; i++)
  148. {
  149. SkillConfig skillConfig = ConfigComponent.Instance.Get<SkillConfig>(unLockSkills[i]);
  150. if (skillConfig.IDGroup == idGroup)
  151. {
  152. return skillConfig;
  153. }
  154. }
  155. return default;
  156. }
  157. protected void CalAttribute()
  158. {
  159. CalBasicAttribute();
  160. attSpeed = (EncryptionFloat)modelConfig.speed_atk;
  161. // skillId = modelConfig.skillID;
  162. modelName = modelConfig.model;
  163. isGpu = modelConfig.isUseGpu;
  164. heroType = modelConfig.heroType;
  165. }
  166. /// <summary>
  167. /// 计算解锁技能
  168. /// </summary>
  169. public void CalUnLockSkill()
  170. {
  171. unLockSkills = new List<int>();
  172. }
  173. protected void AddSkillAttribute(SkillConfig skillConfig)
  174. {
  175. if (skillConfig.addPropertyType == null)
  176. {
  177. return;
  178. }
  179. for (int i = 0; i < skillConfig.addPropertyType.Length; i++)
  180. {
  181. int propertyType = skillConfig.addPropertyType[i];
  182. int value = skillConfig.addPropertyValue[i];
  183. switch (propertyType)
  184. {
  185. case 1:
  186. AddAttributeValueToCache(AttributeType.Hp, value);
  187. break;
  188. case 2:
  189. AddAttributeValueToCache(AttributeType.Att, value);
  190. break;
  191. case 3:
  192. AddAttributeValueToCache(AttributeType.Def, value);
  193. break;
  194. }
  195. }
  196. }
  197. protected void SetDataConfig(int modelID, int level, int star)
  198. {
  199. modelConfig = ConfigComponent.Instance.Get<HeroModelConfig>(modelID);
  200. if (isMonster)
  201. {
  202. MonsterPowerUpConfig = ConfigComponent.Instance.Get<MonsterPowerUpConfig>(level);
  203. }
  204. else
  205. {
  206. powerUpConfig = ConfigComponent.Instance.Get<HeroPowerUpConfig>(level);
  207. }
  208. promoteConfig = ConfigComponent.Instance.Get<HeroPromoteConfig>(star);
  209. this.level = (EncryptionInt)level;
  210. heroName = LanguageManager.Instance.Text(modelConfig.name);
  211. }
  212. public void InitMonster(int modelID, int level, int star = 1)
  213. {
  214. isMonster = true;
  215. SetDataConfig(modelID, level, star);
  216. CalAttribute();
  217. }
  218. public CombatHeroInfo Copy()
  219. {
  220. CombatHeroInfo combatHeroInfo = (CombatHeroInfo)MemberwiseClone();
  221. return combatHeroInfo;
  222. }
  223. }