CombatReportEntityInfo.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. using System;
  2. using Common.Utility.CombatEvent;
  3. using Core.BattleReport;
  4. using Core.Language;
  5. using Fort23.Core;
  6. using GameLogic.Combat.Buff;
  7. using GameLogic.Combat.Skill;
  8. namespace GameLogic.Combat.CombatTool.CombatReport
  9. {
  10. public class CombatReportEntityInfo : IDisposable
  11. {
  12. public CombatHeroEntity CombatHeroEntity;
  13. /// <summary>
  14. /// 英雄数据面板
  15. /// </summary>
  16. public BattleReportValueDataModule HeroInfoModule = new BattleReportValueDataModule();
  17. /// <summary>
  18. /// 战斗照成信息面板
  19. /// </summary>
  20. public BattleReportValueDataModule CombatInfoModule = new BattleReportValueDataModule();
  21. /// <summary>
  22. /// 治疗信息
  23. /// </summary>
  24. public BattleReportValueDataModule zhiLiao = new BattleReportValueDataModule();
  25. /// <summary>
  26. /// 被治疗信息
  27. /// </summary>
  28. public BattleReportValueDataModule beiZhiLiao = new BattleReportValueDataModule();
  29. /// <summary>
  30. /// 战斗受到伤害信息面板
  31. /// </summary>
  32. public BattleReportValueDataModule InjuredInfoModule = new BattleReportValueDataModule();
  33. /// <summary>
  34. /// 战斗日子面板
  35. /// </summary>
  36. public ReportFightMassgeLogDataModule MsgModule = new ReportFightMassgeLogDataModule();
  37. public long allHarm = 0;
  38. public long allZhiLiao = 0;
  39. public long allBeiZhiLiao = 0;
  40. public long allChengShang = 0;
  41. public void Init(CombatHeroEntity combatHeroEntity)
  42. {
  43. CombatHeroEntity = combatHeroEntity;
  44. HeroInfoModule.SetMax("计算K", CombatHeroEntity.MaxCombatHeroInfo.k);
  45. HeroInfoModule.SetMax("生命", CombatHeroEntity.MaxCombatHeroInfo.hp.Value);
  46. HeroInfoModule.SetMax("攻击力", CombatHeroEntity.MaxCombatHeroInfo.attack.Value);
  47. HeroInfoModule.SetMax("防御", CombatHeroEntity.MaxCombatHeroInfo.defense.Value);
  48. HeroInfoModule.SetMax("攻击速度", CombatHeroEntity.MaxCombatHeroInfo.attSpeed.Value);
  49. HeroInfoModule.SetMax("额外攻击速度%", CombatHeroEntity.MaxCombatHeroInfo.addAttSpeed_bl);
  50. HeroInfoModule.SetMax("护盾值", CombatHeroEntity.MaxCombatHeroInfo.Shield.Value);
  51. HeroInfoModule.SetMax("神识", CombatHeroEntity.MaxCombatHeroInfo.shenshi.Value);
  52. HeroInfoModule.SetMax("金灵根", CombatHeroEntity.MaxCombatHeroInfo.Metal);
  53. HeroInfoModule.SetMax("木灵根", CombatHeroEntity.MaxCombatHeroInfo.Wood);
  54. HeroInfoModule.SetMax("水灵根", CombatHeroEntity.MaxCombatHeroInfo.Water);
  55. HeroInfoModule.SetMax("火灵根", CombatHeroEntity.MaxCombatHeroInfo.Fire);
  56. HeroInfoModule.SetMax("土灵根", CombatHeroEntity.MaxCombatHeroInfo.Earth);
  57. HeroInfoModule.SetMax("金伤势", CombatHeroEntity.MaxCombatHeroInfo.Metal_Injury);
  58. HeroInfoModule.SetMax("木伤势", CombatHeroEntity.MaxCombatHeroInfo.Wood_Injury);
  59. HeroInfoModule.SetMax("水伤势", CombatHeroEntity.MaxCombatHeroInfo.Water_Injury);
  60. HeroInfoModule.SetMax("火伤势", CombatHeroEntity.MaxCombatHeroInfo.Fire_Injury);
  61. HeroInfoModule.SetMax("土伤势", CombatHeroEntity.MaxCombatHeroInfo.Earth_Injury);
  62. CombatEventManager.Instance.AddEventListener(CombatEventType.HeroInjured, HeroInjured);
  63. CombatEventManager.Instance.AddEventListener(CombatEventType.RecoverUpdate, RecoverUpdate);
  64. CombatEventManager.Instance.AddEventListener(CombatEventType.AddBuff, AddBuff);
  65. CombatEventManager.Instance.AddEventListener(CombatEventType.RemoveBuff, RemoveBuff);
  66. CombatEventManager.Instance.AddEventListener(CombatEventType.UseSkill, UseSkill);
  67. CombatEventManager.Instance.AddEventListener(CombatEventType.UseMagicWeapon, UseMagicWeapon);
  68. }
  69. public void Update()
  70. {
  71. UpdateHeroInfo();
  72. }
  73. private void UpdateHeroInfo()
  74. {
  75. HeroInfoModule.Add("计算K", CombatHeroEntity.CurrCombatHeroInfo.k);
  76. HeroInfoModule.Add("生命", CombatHeroEntity.CurrCombatHeroInfo.hp.Value);
  77. HeroInfoModule.Add("攻击力", CombatHeroEntity.CurrCombatHeroInfo.attack.Value);
  78. HeroInfoModule.Add("防御", CombatHeroEntity.CurrCombatHeroInfo.defense.Value);
  79. HeroInfoModule.Add("攻击速度", CombatHeroEntity.CurrCombatHeroInfo.attSpeed.Value);
  80. HeroInfoModule.Add("额外攻击速度%", CombatHeroEntity.CurrCombatHeroInfo.addAttSpeed_bl);
  81. HeroInfoModule.Add("护盾值", CombatHeroEntity.CurrCombatHeroInfo.Shield.Value);
  82. HeroInfoModule.Add("神识", CombatHeroEntity.CurrCombatHeroInfo.shenshi.Value);
  83. HeroInfoModule.Add("金灵根", CombatHeroEntity.CurrCombatHeroInfo.Metal);
  84. HeroInfoModule.Add("木灵根", CombatHeroEntity.CurrCombatHeroInfo.Wood);
  85. HeroInfoModule.Add("水灵根", CombatHeroEntity.CurrCombatHeroInfo.Water);
  86. HeroInfoModule.Add("火灵根", CombatHeroEntity.CurrCombatHeroInfo.Fire);
  87. HeroInfoModule.Add("土灵根", CombatHeroEntity.CurrCombatHeroInfo.Earth);
  88. HeroInfoModule.Add("金伤势", CombatHeroEntity.CurrCombatHeroInfo.Metal_Injury);
  89. HeroInfoModule.Add("木伤势", CombatHeroEntity.CurrCombatHeroInfo.Wood_Injury);
  90. HeroInfoModule.Add("水伤势", CombatHeroEntity.CurrCombatHeroInfo.Water_Injury);
  91. HeroInfoModule.Add("火伤势", CombatHeroEntity.CurrCombatHeroInfo.Fire_Injury);
  92. HeroInfoModule.Add("土伤势", CombatHeroEntity.CurrCombatHeroInfo.Earth_Injury);
  93. }
  94. private void UseMagicWeapon(IEventData iEventData)
  95. {
  96. UseMagicWeaponEventData useMagicWeaponEventData = iEventData as UseMagicWeaponEventData;
  97. if (useMagicWeaponEventData.combatHeroEntity == CombatHeroEntity)
  98. {
  99. string msg =
  100. $"使用法宝 {useMagicWeaponEventData.combatMagicWeaponEntity.FaBaoInfo.FabaoConfig.ID}";
  101. float t = CombatController.currActiveCombat.combatTime;
  102. MsgModule.Add(t, msg);
  103. }
  104. }
  105. private void UseSkill(IEventData iEventData)
  106. {
  107. CombatUseSkillEventData combatUseSkillEventData = iEventData as CombatUseSkillEventData;
  108. if (combatUseSkillEventData.useSkill.CombatHeroEntity == CombatHeroEntity)
  109. {
  110. string msg =
  111. $"使用技能 {combatUseSkillEventData.useSkill.SelfSkillConfig.ID}";
  112. float t = CombatController.currActiveCombat.combatTime;
  113. MsgModule.Add(t, msg);
  114. }
  115. }
  116. private void RemoveBuff(IEventData iEventData)
  117. {
  118. BuffEventData buffEventData = iEventData as BuffEventData;
  119. if (buffEventData.target == CombatHeroEntity)
  120. {
  121. string msg =
  122. $"移除了一个buff {buffEventData.BuffBasic.buffInf.BuffConfig.scriptsName}" +
  123. $" 数量 {buffEventData.BuffBasic.buffInf.count}";
  124. float t = CombatController.currActiveCombat.combatTime;
  125. MsgModule.Add(t, msg);
  126. }
  127. }
  128. private void AddBuff(IEventData iEventData)
  129. {
  130. BuffEventData buffEventData = iEventData as BuffEventData;
  131. if (buffEventData.target == CombatHeroEntity)
  132. {
  133. string msg =
  134. $"获得buff {buffEventData.BuffBasic.buffInf.BuffConfig.scriptsName}" +
  135. $" 数量 {buffEventData.BuffBasic.buffInf.count} 施放者{buffEventData.source.CurrCombatHeroInfo.modelID}";
  136. float t = CombatController.currActiveCombat.combatTime;
  137. MsgModule.Add(t, msg);
  138. }
  139. else if (buffEventData.source == CombatHeroEntity)
  140. {
  141. string msg =
  142. $"施加buff {buffEventData.BuffBasic.buffInf.BuffConfig.scriptsName}" +
  143. $" 数量 {buffEventData.BuffBasic.buffInf.count} 目标{buffEventData.target.CurrCombatHeroInfo.modelID}";
  144. float t = CombatController.currActiveCombat.combatTime;
  145. MsgModule.Add(t, msg);
  146. }
  147. }
  148. private void RecoverUpdate(IEventData iEventData)
  149. {
  150. HarmUpdateEventData recoverUpdateEventData = iEventData as HarmUpdateEventData;
  151. if (recoverUpdateEventData.HarmReturnInfo.source == CombatHeroEntity)
  152. {
  153. string msg =
  154. $"我治疗了目标 {recoverUpdateEventData.HarmReturnInfo.target.combatHeroEntity.CurrCombatHeroInfo.heroName}" +
  155. $" 治疗量 {recoverUpdateEventData.HarmReturnInfo.att} 治疗类型 {recoverUpdateEventData.HarmReturnInfo.attType}";
  156. float t = CombatController.currActiveCombat.combatTime;
  157. MsgModule.Add(t, msg);
  158. string harmKey = "无";
  159. SkillBasic skillBasic = recoverUpdateEventData.HarmReturnInfo.triggerData.Source as SkillBasic;
  160. if (skillBasic != null)
  161. {
  162. harmKey = "S" + LanguageManager.Instance.Text(skillBasic.SelfSkillConfig.name);
  163. }
  164. BuffBasic buffBasic = recoverUpdateEventData.HarmReturnInfo.triggerData.Source as BuffBasic;
  165. if (buffBasic != null)
  166. {
  167. harmKey = "B" + LanguageManager.Instance.Text(buffBasic.buffInf.BuffConfig.buffName);
  168. }
  169. allZhiLiao += recoverUpdateEventData.HarmReturnInfo.att;
  170. zhiLiao.Add(harmKey, recoverUpdateEventData.HarmReturnInfo.att,true);
  171. }
  172. else if (recoverUpdateEventData.HarmReturnInfo.target.combatHeroEntity == CombatHeroEntity)
  173. {
  174. string msg =
  175. $"被治疗 {recoverUpdateEventData.HarmReturnInfo.source.CurrCombatHeroInfo.heroName}" +
  176. $" 受到治疗 {recoverUpdateEventData.HarmReturnInfo.att} 治疗类型 {recoverUpdateEventData.HarmReturnInfo.attType} 治疗来源{recoverUpdateEventData.HarmReturnInfo.triggerData.Source}";
  177. float t = CombatController.currActiveCombat.combatTime;
  178. MsgModule.Add(t, msg);
  179. string harmKey = "其他";
  180. SkillBasic skillBasic = recoverUpdateEventData.HarmReturnInfo.triggerData.Source as SkillBasic;
  181. if (skillBasic != null)
  182. {
  183. harmKey = "S" + LanguageManager.Instance.Text(skillBasic.SelfSkillConfig.name);
  184. }
  185. BuffBasic buffBasic = recoverUpdateEventData.HarmReturnInfo.triggerData.Source as BuffBasic;
  186. if (buffBasic != null)
  187. {
  188. harmKey = "B" + LanguageManager.Instance.Text(buffBasic.buffInf.BuffConfig.buffName);
  189. }
  190. allBeiZhiLiao += recoverUpdateEventData.HarmReturnInfo.att;
  191. beiZhiLiao.Add(harmKey, recoverUpdateEventData.HarmReturnInfo.att,true);
  192. }
  193. }
  194. private void HeroInjured(IEventData iEventData)
  195. {
  196. HeroInjuredEventData heroInjuredEventData = iEventData as HeroInjuredEventData;
  197. if (heroInjuredEventData.HarmReturnInfo.source == CombatHeroEntity)
  198. {
  199. string harmKey = "无";
  200. SkillBasic skillBasic = heroInjuredEventData.HarmReturnInfo.triggerData.Source as SkillBasic;
  201. if (skillBasic != null)
  202. {
  203. harmKey = LanguageManager.Instance.Text(skillBasic.SelfSkillConfig.name)+" id:"+skillBasic.SelfSkillConfig.ID;
  204. }
  205. BuffBasic buffBasic = heroInjuredEventData.HarmReturnInfo.triggerData.Source as BuffBasic;
  206. if (buffBasic != null)
  207. {
  208. harmKey = "B" + LanguageManager.Instance.Text(buffBasic.buffInf.BuffConfig.buffName);
  209. }
  210. string msg =
  211. $"我攻击了目标 {heroInjuredEventData.HarmReturnInfo.target.combatHeroEntity.CurrCombatHeroInfo.heroName} 来源{harmKey} 原始伤害{ heroInjuredEventData.HarmReturnInfo.yuanShiAtt }" +
  212. $" 造成伤害 {heroInjuredEventData.HarmReturnInfo.att} 伤害类型 {heroInjuredEventData.HarmReturnInfo.attType}";
  213. float t = CombatController.currActiveCombat.combatTime;
  214. MsgModule.Add(t, msg);
  215. allHarm += heroInjuredEventData.HarmReturnInfo.att;
  216. CombatInfoModule.Add(harmKey, heroInjuredEventData.HarmReturnInfo.att,true);
  217. }
  218. else if (heroInjuredEventData.HarmReturnInfo.target.combatHeroEntity == CombatHeroEntity)
  219. {
  220. string harmKey = "其他";
  221. SkillBasic skillBasic = heroInjuredEventData.HarmReturnInfo.triggerData.Source as SkillBasic;
  222. if (skillBasic != null)
  223. {
  224. harmKey = LanguageManager.Instance.Text(skillBasic.SelfSkillConfig.name)+" id:"+skillBasic.SelfSkillConfig.ID;
  225. }
  226. BuffBasic buffBasic = heroInjuredEventData.HarmReturnInfo.triggerData.Source as BuffBasic;
  227. if (buffBasic != null)
  228. {
  229. harmKey = "B" + LanguageManager.Instance.Text(buffBasic.buffInf.BuffConfig.buffName);
  230. }
  231. string msg =
  232. $"被攻击 {heroInjuredEventData.HarmReturnInfo.source.CurrCombatHeroInfo.heroName} 来源{harmKey} 原始伤害{ heroInjuredEventData.HarmReturnInfo.yuanShiAtt }" +
  233. $" 受到伤害 {heroInjuredEventData.HarmReturnInfo.att} 伤害类型 {heroInjuredEventData.HarmReturnInfo.attType}";
  234. float t = CombatController.currActiveCombat.combatTime;
  235. MsgModule.Add(t, msg);
  236. allChengShang += heroInjuredEventData.HarmReturnInfo.att;
  237. InjuredInfoModule.Add(harmKey, heroInjuredEventData.HarmReturnInfo.att,true);
  238. }
  239. }
  240. public void Dispose()
  241. {
  242. CombatHeroEntity = null;
  243. CombatEventManager.Instance.RemoveEventListener(CombatEventType.HeroInjured, HeroInjured);
  244. CombatEventManager.Instance.RemoveEventListener(CombatEventType.RecoverUpdate, RecoverUpdate);
  245. CombatEventManager.Instance.RemoveEventListener(CombatEventType.AddBuff, AddBuff);
  246. CombatEventManager.Instance.RemoveEventListener(CombatEventType.RemoveBuff, RemoveBuff);
  247. CombatEventManager.Instance.RemoveEventListener(CombatEventType.UseSkill, UseSkill);
  248. CombatEventManager.Instance.RemoveEventListener(CombatEventType.UseMagicWeapon, UseMagicWeapon);
  249. }
  250. }
  251. }