CombatReportEntityInfo.cs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  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 BattleReportValueDataModule gongFaBeiXueRuo = new BattleReportValueDataModule();
  37. /// <summary>
  38. /// 战斗日子面板
  39. /// </summary>
  40. public ReportFightMassgeLogDataModule MsgModule = new ReportFightMassgeLogDataModule();
  41. public long allHarm = 0;
  42. public long allZhiLiao = 0;
  43. public long allBeiZhiLiao = 0;
  44. public long allChengShang = 0;
  45. public void Init(CombatHeroEntity combatHeroEntity)
  46. {
  47. CombatHeroEntity = combatHeroEntity;
  48. HeroInfoModule.SetMax("计算K", CombatHeroEntity.MaxCombatHeroInfo.k);
  49. HeroInfoModule.SetMax("生命", CombatHeroEntity.MaxCombatHeroInfo.hp.Value);
  50. HeroInfoModule.SetMax("攻击力", CombatHeroEntity.MaxCombatHeroInfo.attack.Value);
  51. HeroInfoModule.SetMax("防御", CombatHeroEntity.MaxCombatHeroInfo.defense.Value);
  52. HeroInfoModule.SetMax("攻击速度", CombatHeroEntity.MaxCombatHeroInfo.attSpeed.Value);
  53. HeroInfoModule.SetMax("额外攻击速度%", CombatHeroEntity.MaxCombatHeroInfo.addAttSpeed_bl);
  54. HeroInfoModule.SetMax("护盾值", CombatHeroEntity.MaxCombatHeroInfo.Shield.Value);
  55. HeroInfoModule.SetMax("神识", CombatHeroEntity.MaxCombatHeroInfo.shenshi.Value);
  56. HeroInfoModule.SetMax("金灵根", CombatHeroEntity.MaxCombatHeroInfo.Metal);
  57. HeroInfoModule.SetMax("木灵根", CombatHeroEntity.MaxCombatHeroInfo.Wood);
  58. HeroInfoModule.SetMax("水灵根", CombatHeroEntity.MaxCombatHeroInfo.Water);
  59. HeroInfoModule.SetMax("火灵根", CombatHeroEntity.MaxCombatHeroInfo.Fire);
  60. HeroInfoModule.SetMax("土灵根", CombatHeroEntity.MaxCombatHeroInfo.Earth);
  61. HeroInfoModule.SetMax("金伤势", CombatHeroEntity.MaxCombatHeroInfo.Metal_Injury);
  62. HeroInfoModule.SetMax("木伤势", CombatHeroEntity.MaxCombatHeroInfo.Wood_Injury);
  63. HeroInfoModule.SetMax("水伤势", CombatHeroEntity.MaxCombatHeroInfo.Water_Injury);
  64. HeroInfoModule.SetMax("火伤势", CombatHeroEntity.MaxCombatHeroInfo.Fire_Injury);
  65. HeroInfoModule.SetMax("土伤势", CombatHeroEntity.MaxCombatHeroInfo.Earth_Injury);
  66. CombatEventManager.Instance.AddEventListener(CombatEventType.HeroInjured, HeroInjured);
  67. CombatEventManager.Instance.AddEventListener(CombatEventType.RecoverUpdate, RecoverUpdate);
  68. CombatEventManager.Instance.AddEventListener(CombatEventType.AddBuff, AddBuff);
  69. CombatEventManager.Instance.AddEventListener(CombatEventType.RemoveBuff, RemoveBuff);
  70. CombatEventManager.Instance.AddEventListener(CombatEventType.UseSkill, UseSkill);
  71. CombatEventManager.Instance.AddEventListener(CombatEventType.UseMagicWeapon, UseMagicWeapon);
  72. CombatEventManager.Instance.AddEventListener(CombatEventType.GongFaPengZhuangFinish2,
  73. GongFaPengZhuangFinish2);
  74. }
  75. public void Update()
  76. {
  77. UpdateHeroInfo();
  78. }
  79. private void UpdateHeroInfo()
  80. {
  81. HeroInfoModule.Add("计算K", CombatHeroEntity.CurrCombatHeroInfo.k);
  82. HeroInfoModule.Add("生命", CombatHeroEntity.CurrCombatHeroInfo.hp.Value);
  83. HeroInfoModule.Add("攻击力", CombatHeroEntity.CurrCombatHeroInfo.attack.Value);
  84. HeroInfoModule.Add("防御", CombatHeroEntity.CurrCombatHeroInfo.defense.Value);
  85. HeroInfoModule.Add("攻击速度", CombatHeroEntity.CurrCombatHeroInfo.attSpeed.Value);
  86. HeroInfoModule.Add("额外攻击速度%", CombatHeroEntity.CurrCombatHeroInfo.addAttSpeed_bl);
  87. HeroInfoModule.Add("护盾值", CombatHeroEntity.CurrCombatHeroInfo.Shield.Value);
  88. HeroInfoModule.Add("神识", CombatHeroEntity.CurrCombatHeroInfo.shenshi.Value);
  89. HeroInfoModule.Add("金灵根", CombatHeroEntity.CurrCombatHeroInfo.Metal);
  90. HeroInfoModule.Add("木灵根", CombatHeroEntity.CurrCombatHeroInfo.Wood);
  91. HeroInfoModule.Add("水灵根", CombatHeroEntity.CurrCombatHeroInfo.Water);
  92. HeroInfoModule.Add("火灵根", CombatHeroEntity.CurrCombatHeroInfo.Fire);
  93. HeroInfoModule.Add("土灵根", CombatHeroEntity.CurrCombatHeroInfo.Earth);
  94. HeroInfoModule.Add("金伤势", CombatHeroEntity.CurrCombatHeroInfo.Metal_Injury);
  95. HeroInfoModule.Add("木伤势", CombatHeroEntity.CurrCombatHeroInfo.Wood_Injury);
  96. HeroInfoModule.Add("水伤势", CombatHeroEntity.CurrCombatHeroInfo.Water_Injury);
  97. HeroInfoModule.Add("火伤势", CombatHeroEntity.CurrCombatHeroInfo.Fire_Injury);
  98. HeroInfoModule.Add("土伤势", CombatHeroEntity.CurrCombatHeroInfo.Earth_Injury);
  99. }
  100. private void GongFaPengZhuangFinish2(IEventData iEventData)
  101. {
  102. GongFaPengZhuangFinishEventData gongFaPengZhuangFinishEventData =iEventData as GongFaPengZhuangFinishEventData;
  103. bool isOk = false;
  104. string msgTou = "";
  105. if (gongFaPengZhuangFinishEventData.a.SkillBasic.CombatHeroEntity == CombatHeroEntity)
  106. {
  107. isOk = true;
  108. msgTou =
  109. $"我的功法{gongFaPengZhuangFinishEventData.a.SkillBasic.SelfSkillConfig.ID} 和敌人的 {gongFaPengZhuangFinishEventData.b.SkillBasic.SelfSkillConfig.ID} 功法碰撞" +
  110. $"剩余强度为{gongFaPengZhuangFinishEventData.a.hp} 敌人的剩余强度为{gongFaPengZhuangFinishEventData.b.hp}";
  111. long c = gongFaPengZhuangFinishEventData.a.pengZhuangHp - gongFaPengZhuangFinishEventData.a.hp;
  112. float bl = c * 100.0f / gongFaPengZhuangFinishEventData.a.maxHp;
  113. string k = gongFaPengZhuangFinishEventData.a.SkillBasic.SelfSkillConfig.ID.ToString();
  114. gongFaBeiXueRuo.SetMax(k, 1, true);
  115. gongFaBeiXueRuo.Add(k, bl, true);
  116. }
  117. else if (gongFaPengZhuangFinishEventData.b.SkillBasic.CombatHeroEntity == CombatHeroEntity)
  118. {
  119. isOk = true;
  120. msgTou =
  121. $"敌人的功法{gongFaPengZhuangFinishEventData.a.SkillBasic.SelfSkillConfig.ID} 和我的 {gongFaPengZhuangFinishEventData.b.SkillBasic.SelfSkillConfig.ID} 功法碰撞" +
  122. $"敌人的剩余强度为{gongFaPengZhuangFinishEventData.a.hp} 我的剩余强度为{gongFaPengZhuangFinishEventData.b.hp}";
  123. long c = gongFaPengZhuangFinishEventData.b.pengZhuangHp - gongFaPengZhuangFinishEventData.b.hp;
  124. float bl = c * 100.0f / gongFaPengZhuangFinishEventData.b.maxHp;
  125. string k = gongFaPengZhuangFinishEventData.b.SkillBasic.SelfSkillConfig.ID.ToString();
  126. gongFaBeiXueRuo.SetMax(k, 1, true);
  127. gongFaBeiXueRuo.Add(k, bl, true);
  128. }
  129. float t = CombatController.currActiveCombat.combatTime;
  130. if (isOk)
  131. {
  132. MsgModule.Add(t, msgTou);
  133. }
  134. }
  135. private void UseMagicWeapon(IEventData iEventData)
  136. {
  137. UseMagicWeaponEventData useMagicWeaponEventData = iEventData as UseMagicWeaponEventData;
  138. if (useMagicWeaponEventData.combatHeroEntity == CombatHeroEntity)
  139. {
  140. string msg =
  141. $"使用法宝 {useMagicWeaponEventData.combatMagicWeaponEntity.FaBaoInfo.FabaoConfig.ID}";
  142. float t = CombatController.currActiveCombat.combatTime;
  143. MsgModule.Add(t, msg);
  144. }
  145. }
  146. private void UseSkill(IEventData iEventData)
  147. {
  148. CombatUseSkillEventData combatUseSkillEventData = iEventData as CombatUseSkillEventData;
  149. if (combatUseSkillEventData.useSkill.CombatHeroEntity == CombatHeroEntity)
  150. {
  151. string msg =
  152. $"使用技能 {combatUseSkillEventData.useSkill.SelfSkillConfig.ID}";
  153. float t = CombatController.currActiveCombat.combatTime;
  154. MsgModule.Add(t, msg);
  155. }
  156. }
  157. private void RemoveBuff(IEventData iEventData)
  158. {
  159. BuffEventData buffEventData = iEventData as BuffEventData;
  160. if (buffEventData.target == CombatHeroEntity)
  161. {
  162. string msg =
  163. $"移除了一个buff {buffEventData.BuffBasic.buffInf.BuffConfig.scriptsName}" +
  164. $" 数量 {buffEventData.BuffBasic.buffInf.count}";
  165. float t = CombatController.currActiveCombat.combatTime;
  166. MsgModule.Add(t, msg);
  167. }
  168. }
  169. private void AddBuff(IEventData iEventData)
  170. {
  171. BuffEventData buffEventData = iEventData as BuffEventData;
  172. if (buffEventData.target == CombatHeroEntity)
  173. {
  174. string msg =
  175. $"获得buff {buffEventData.BuffBasic.buffInf.BuffConfig.scriptsName}" +
  176. $" 数量 {buffEventData.BuffBasic.buffInf.count} 施放者{buffEventData.source.CurrCombatHeroInfo.modelID}";
  177. float t = CombatController.currActiveCombat.combatTime;
  178. MsgModule.Add(t, msg);
  179. }
  180. else if (buffEventData.source == CombatHeroEntity)
  181. {
  182. string msg =
  183. $"施加buff {buffEventData.BuffBasic.buffInf.BuffConfig.scriptsName}" +
  184. $" 数量 {buffEventData.BuffBasic.buffInf.count} 目标{buffEventData.target.CurrCombatHeroInfo.modelID}";
  185. float t = CombatController.currActiveCombat.combatTime;
  186. MsgModule.Add(t, msg);
  187. }
  188. }
  189. private void RecoverUpdate(IEventData iEventData)
  190. {
  191. HarmUpdateEventData recoverUpdateEventData = iEventData as HarmUpdateEventData;
  192. if (recoverUpdateEventData.HarmReturnInfo.source == CombatHeroEntity)
  193. {
  194. string msg =
  195. $"我治疗了目标 {recoverUpdateEventData.HarmReturnInfo.target.combatHeroEntity.CurrCombatHeroInfo.heroName}" +
  196. $" 治疗量 {recoverUpdateEventData.HarmReturnInfo.att} 治疗类型 {recoverUpdateEventData.HarmReturnInfo.attType}";
  197. float t = CombatController.currActiveCombat.combatTime;
  198. MsgModule.Add(t, msg);
  199. string harmKey = "无";
  200. SkillBasic skillBasic = recoverUpdateEventData.HarmReturnInfo.triggerData.Source as SkillBasic;
  201. if (skillBasic != null)
  202. {
  203. harmKey = "S" + LanguageManager.Instance.Text(skillBasic.SelfSkillConfig.name);
  204. }
  205. BuffBasic buffBasic = recoverUpdateEventData.HarmReturnInfo.triggerData.Source as BuffBasic;
  206. if (buffBasic != null)
  207. {
  208. harmKey = "B" + LanguageManager.Instance.Text(buffBasic.buffInf.BuffConfig.buffName);
  209. }
  210. allZhiLiao += recoverUpdateEventData.HarmReturnInfo.att;
  211. zhiLiao.Add(harmKey, recoverUpdateEventData.HarmReturnInfo.att, true);
  212. }
  213. else if (recoverUpdateEventData.HarmReturnInfo.target.combatHeroEntity == CombatHeroEntity)
  214. {
  215. string msg =
  216. $"被治疗 {recoverUpdateEventData.HarmReturnInfo.source.CurrCombatHeroInfo.heroName}" +
  217. $" 受到治疗 {recoverUpdateEventData.HarmReturnInfo.att} 治疗类型 {recoverUpdateEventData.HarmReturnInfo.attType} 治疗来源{recoverUpdateEventData.HarmReturnInfo.triggerData.Source}";
  218. float t = CombatController.currActiveCombat.combatTime;
  219. MsgModule.Add(t, msg);
  220. string harmKey = "其他";
  221. SkillBasic skillBasic = recoverUpdateEventData.HarmReturnInfo.triggerData.Source as SkillBasic;
  222. if (skillBasic != null)
  223. {
  224. harmKey = "S" + LanguageManager.Instance.Text(skillBasic.SelfSkillConfig.name);
  225. }
  226. BuffBasic buffBasic = recoverUpdateEventData.HarmReturnInfo.triggerData.Source as BuffBasic;
  227. if (buffBasic != null)
  228. {
  229. harmKey = "B" + LanguageManager.Instance.Text(buffBasic.buffInf.BuffConfig.buffName);
  230. }
  231. allBeiZhiLiao += recoverUpdateEventData.HarmReturnInfo.att;
  232. beiZhiLiao.Add(harmKey, recoverUpdateEventData.HarmReturnInfo.att, true);
  233. }
  234. }
  235. private void HeroInjured(IEventData iEventData)
  236. {
  237. HeroInjuredEventData heroInjuredEventData = iEventData as HeroInjuredEventData;
  238. if (heroInjuredEventData.HarmReturnInfo.source == CombatHeroEntity)
  239. {
  240. string harmKey = "无";
  241. SkillBasic skillBasic = heroInjuredEventData.HarmReturnInfo.triggerData.Source as SkillBasic;
  242. if (skillBasic != null)
  243. {
  244. harmKey = LanguageManager.Instance.Text(skillBasic.SelfSkillConfig.name) + " id:" +
  245. skillBasic.SelfSkillConfig.ID;
  246. }
  247. BuffBasic buffBasic = heroInjuredEventData.HarmReturnInfo.triggerData.Source as BuffBasic;
  248. if (buffBasic != null)
  249. {
  250. harmKey = "B" + LanguageManager.Instance.Text(buffBasic.buffInf.BuffConfig.buffName);
  251. }
  252. string msg =
  253. $"我攻击了目标 {heroInjuredEventData.HarmReturnInfo.target.combatHeroEntity.CurrCombatHeroInfo.heroName} 来源{harmKey} 原始伤害{heroInjuredEventData.HarmReturnInfo.yuanShiAtt}" +
  254. $" 造成伤害 {heroInjuredEventData.HarmReturnInfo.att} 伤害类型 {heroInjuredEventData.HarmReturnInfo.attType} 强度{heroInjuredEventData.HarmReturnInfo.QiangDu}";
  255. float t = CombatController.currActiveCombat.combatTime;
  256. MsgModule.Add(t, msg);
  257. allHarm += heroInjuredEventData.HarmReturnInfo.att;
  258. CombatInfoModule.Add(harmKey, heroInjuredEventData.HarmReturnInfo.att, true);
  259. }
  260. else if (heroInjuredEventData.HarmReturnInfo.target.combatHeroEntity == CombatHeroEntity)
  261. {
  262. string harmKey = "其他";
  263. SkillBasic skillBasic = heroInjuredEventData.HarmReturnInfo.triggerData.Source as SkillBasic;
  264. if (skillBasic != null)
  265. {
  266. harmKey = LanguageManager.Instance.Text(skillBasic.SelfSkillConfig.name) + " id:" +
  267. skillBasic.SelfSkillConfig.ID;
  268. }
  269. BuffBasic buffBasic = heroInjuredEventData.HarmReturnInfo.triggerData.Source as BuffBasic;
  270. if (buffBasic != null)
  271. {
  272. harmKey = "B" + LanguageManager.Instance.Text(buffBasic.buffInf.BuffConfig.buffName);
  273. }
  274. string msg =
  275. $"被攻击 {heroInjuredEventData.HarmReturnInfo.source.CurrCombatHeroInfo.heroName} 来源{harmKey} 原始伤害{heroInjuredEventData.HarmReturnInfo.yuanShiAtt}" +
  276. $" 受到伤害 {heroInjuredEventData.HarmReturnInfo.att} 伤害类型 {heroInjuredEventData.HarmReturnInfo.attType} 强度{heroInjuredEventData.HarmReturnInfo.QiangDu}";
  277. float t = CombatController.currActiveCombat.combatTime;
  278. MsgModule.Add(t, msg);
  279. allChengShang += heroInjuredEventData.HarmReturnInfo.att;
  280. InjuredInfoModule.Add(harmKey, heroInjuredEventData.HarmReturnInfo.att, true);
  281. }
  282. }
  283. public void Dispose()
  284. {
  285. CombatHeroEntity = null;
  286. CombatEventManager.Instance.RemoveEventListener(CombatEventType.HeroInjured, HeroInjured);
  287. CombatEventManager.Instance.RemoveEventListener(CombatEventType.RecoverUpdate, RecoverUpdate);
  288. CombatEventManager.Instance.RemoveEventListener(CombatEventType.AddBuff, AddBuff);
  289. CombatEventManager.Instance.RemoveEventListener(CombatEventType.RemoveBuff, RemoveBuff);
  290. CombatEventManager.Instance.RemoveEventListener(CombatEventType.UseSkill, UseSkill);
  291. CombatEventManager.Instance.RemoveEventListener(CombatEventType.UseMagicWeapon, UseMagicWeapon);
  292. }
  293. }
  294. }