HeroInfo.cs 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using Common.Utility.CombatEvent;
  4. using Excel2Json;
  5. using Fort23.Core;
  6. using Fort23.UTool;
  7. using GameLogic.Combat.CombatTool;
  8. using Utility;
  9. namespace GameLogic.Hero
  10. {
  11. public class DaoLVBiData
  12. {
  13. public int id;
  14. public float value;
  15. }
  16. public class HeroInfo : CombatHeroInfo
  17. {
  18. public AccountFileInfo.HeroData heroData;
  19. private string _iconZhiYe;
  20. private Map<HeroAttributeType, float> attributeBlValue = new Map<HeroAttributeType, float>();
  21. public Map<int, float> daolvBlMap = new Map<int, float>();
  22. public List<DaoLVBiData> daolvBl = new List<DaoLVBiData>();
  23. // public List<int> ImmortalBond = new List<int>();
  24. public HeroInfo()
  25. {
  26. }
  27. public HeroInfo CopyHero()
  28. {
  29. AccountFileInfo.HeroData heroDataCopy = new AccountFileInfo.HeroData();
  30. heroDataCopy.heroModelId = heroData.heroModelId;
  31. heroDataCopy.heroPowerId = heroData.heroPowerId;
  32. heroDataCopy.exp = heroData.exp;
  33. heroDataCopy.upTime = heroData.upTime;
  34. heroDataCopy.isCombat = heroData.isCombat;
  35. heroDataCopy.TaoismSkillId = heroData.TaoismSkillId;
  36. heroDataCopy.ImmortalBond = heroData.ImmortalBond.ToList();
  37. HeroInfo heroInfo = new HeroInfo();
  38. heroInfo.MagicWeaponID = MagicWeaponID.ToList();
  39. heroInfo.unLockSkills = unLockSkills.ToList();
  40. heroInfo.InitHero(heroData);
  41. return heroInfo;
  42. }
  43. public void InitHero(AccountFileInfo.HeroData heroData)
  44. {
  45. this.heroData = heroData;
  46. InitHero(heroData.heroModelId, heroData.heroPowerId);
  47. }
  48. public void InitHero(int modelID, int powerID)
  49. {
  50. this.modelID = modelID;
  51. SetDataConfig(modelID,
  52. powerID);
  53. ComputeHeroInfo();
  54. //CalBasicAttribute();
  55. }
  56. public HeroInfo Upgrade()
  57. {
  58. int currentMiao = (int)((TimeHelper.ClientNow() - PlayerManager.Instance.myHero.heroData.upTime) / 1000);
  59. float allexp = currentMiao * PlayerManager.Instance.myHero.powerUpConfig.AutoXiuwei;
  60. heroData.exp += allexp;
  61. heroData.exp -= powerUpConfig.levelUpExp;
  62. heroData.upTime = TimeHelper.ClientNow();
  63. heroData.isCombat = false;
  64. heroData.heroPowerId++;
  65. InitHero(heroData);
  66. PlayerManager.Instance.SaveHeroData(this);
  67. EventManager.Instance.Dispatch(CustomEventType.JingJieUpgrade, null);
  68. RedDotManager.Instance.AllRedDotUpDate();
  69. return this;
  70. }
  71. public void GetDaoLvBl()
  72. {
  73. daolvBl.Clear();
  74. foreach (var i in heroData?.ImmortalBond)
  75. {
  76. DaoyouModelConfig daoyouModelConfig = ConfigComponent.Instance.Get<DaoyouModelConfig>(i);
  77. foreach (var i1 in daoyouModelConfig.daolvSkillID)
  78. {
  79. daolvSkill daolvSkill = ConfigComponent.Instance.Get<daolvSkill>(i1);
  80. // //唯一只加一次
  81. // if (daolvSkill.type == 1)
  82. // {
  83. // if (!daolvBlMap.ContainsKey(i1))
  84. // {
  85. // daolvBlMap.Add(i1, daolvSkill.para[0]);
  86. // }
  87. // }
  88. // else
  89. // {
  90. // if (!daolvBlMap.ContainsKey(i1))
  91. // {
  92. // daolvBlMap.Add(i1, daolvSkill.para[0]);
  93. // }
  94. // else
  95. // {
  96. // daolvBlMap[i1] += daolvSkill.para[0];
  97. // }
  98. // }
  99. DaoLVBiData daoLvBiData;
  100. if (daolvSkill.type == 1)
  101. {
  102. daoLvBiData = daolvBl.FirstOrDefault(d => d.id == i1);
  103. if (daoLvBiData != null)
  104. {
  105. daoLvBiData = new DaoLVBiData();
  106. daoLvBiData.id = i1;
  107. daoLvBiData.value = daolvSkill.para[0];
  108. daolvBl.Add(daoLvBiData);
  109. }
  110. }
  111. else
  112. {
  113. daoLvBiData = new DaoLVBiData();
  114. daoLvBiData.id = i1;
  115. daoLvBiData.value = daolvSkill.para[0];
  116. daolvBl.Add(daoLvBiData);
  117. // if (!daolvBlMap.ContainsKey(i1))
  118. // {
  119. // daolvBlMap.Add(i1, daolvSkill.para[0]);
  120. // }
  121. // else
  122. // {
  123. // daolvBlMap[i1] += daolvSkill.para[0];
  124. // }
  125. }
  126. }
  127. }
  128. }
  129. public void ComputeHeroInfo()
  130. {
  131. attributeBlValue.Clear();
  132. Metal = 100;
  133. Wood = 100;
  134. Water = 100;
  135. Fire = 100;
  136. Earth = 100;
  137. CalAttribute();
  138. GetDaoLvBl();
  139. if (!PlayerManager.Instance.isTest)
  140. {
  141. List<FaBaoInfo> myAllFaBao = PlayerManager.Instance.FaBaoControl.myAllFaBao;
  142. foreach (var faBaoInfo in myAllFaBao)
  143. {
  144. if (faBaoInfo.SkillConfig.addPropertyType != null)
  145. {
  146. for (int i = 0; i < faBaoInfo.SkillConfig.addPropertyType.Length; i++)
  147. {
  148. int shuxingID = faBaoInfo.SkillConfig.addPropertyType[i];
  149. float shuxingValue = faBaoInfo.SkillConfig.addPropertyValue[i];
  150. ComputeHeroAttributeType(shuxingID, shuxingValue);
  151. }
  152. }
  153. }
  154. ///功法加被动属性
  155. List<SkillInfo> allSkill = PlayerManager.Instance.GongFaControl.allSkill;
  156. for (int j = 0; j < allSkill.Count; j++)
  157. {
  158. SkillInfo skillInfo = allSkill[j];
  159. if (skillInfo.skillConfig.addPropertyType != null)
  160. {
  161. for (int i = 0; i < skillInfo.skillConfig.addPropertyType.Length; i++)
  162. {
  163. int shuxingID = skillInfo.skillConfig.addPropertyType[i];
  164. float shuxingValue = skillInfo.skillConfig.addPropertyValue[i];
  165. ComputeHeroAttributeType(shuxingID, shuxingValue);
  166. }
  167. }
  168. }
  169. foreach (var VARIABLE in attributeBlValue)
  170. {
  171. ComputeHeroAttributeType((int)VARIABLE.Key, VARIABLE.Value);
  172. }
  173. }
  174. //道侣带来的属性加成
  175. foreach (var keyValuePair in daolvBlMap)
  176. {
  177. daolvSkill daolvSkill = ConfigComponent.Instance.Get<daolvSkill>(keyValuePair.Key);
  178. ComputeHeroAttributeType(daolvSkill.AttrID, keyValuePair.Value);
  179. }
  180. if (CombatController.currActiveCombat != null && CombatController.currActiveCombat.playerHeroEntity != null)
  181. {
  182. CombatController.currActiveCombat.playerHeroEntity.CurrCombatHeroInfo = this.Copy();
  183. CombatController.currActiveCombat.playerHeroEntity.MaxCombatHeroInfo = this.Copy();
  184. }
  185. }
  186. private void ComputeHeroAttributeType(int shuxingID, float value)
  187. {
  188. switch ((HeroAttributeType)shuxingID)
  189. {
  190. case HeroAttributeType.HP:
  191. hp.Value += (int)value;
  192. break;
  193. case HeroAttributeType.ATT:
  194. attack.Value += (int)value;
  195. break;
  196. case HeroAttributeType.DEF:
  197. defense.Value += (int)value;
  198. break;
  199. case HeroAttributeType.HP_BL:
  200. hp.Value += (long)(hp.Value * (value / 100f));
  201. break;
  202. case HeroAttributeType.ATT_BL:
  203. attack.Value += (long)(attack.Value * (value / 100f));
  204. break;
  205. case HeroAttributeType.DEF_BL:
  206. defense.Value += (long)(defense.Value * (value / 100f));
  207. break;
  208. case HeroAttributeType.ShengShi_BL:
  209. shenshi.Value += (long)(shenshi.Value * (value / 100f));
  210. break;
  211. case HeroAttributeType.Gold:
  212. Metal += value;
  213. break;
  214. case HeroAttributeType.Wood:
  215. Wood += value;
  216. break;
  217. case HeroAttributeType.Fire:
  218. Fire += value;
  219. break;
  220. case HeroAttributeType.Water:
  221. Water += value;
  222. break;
  223. case HeroAttributeType.Earth:
  224. Earth += value;
  225. break;
  226. case HeroAttributeType.Shields:
  227. Shield.Value += (int)value;
  228. break;
  229. default:
  230. if (attributeBlValue.TryGetValue((HeroAttributeType)shuxingID, out var value1)
  231. )
  232. {
  233. attributeBlValue[(HeroAttributeType)shuxingID] = value1 + value;
  234. }
  235. else
  236. {
  237. attributeBlValue.Add((HeroAttributeType)shuxingID, value);
  238. }
  239. break;
  240. }
  241. }
  242. }
  243. }