using System; using Common.Utility.CombatEvent; using Core.BattleReport; using Core.Language; using Fort23.Core; using GameLogic.Combat.Buff; using GameLogic.Combat.Skill; namespace GameLogic.Combat.CombatTool.CombatReport { public class CombatReportEntityInfo : IDisposable { public CombatHeroEntity CombatHeroEntity; /// /// 英雄数据面板 /// public BattleReportValueDataModule HeroInfoModule = new BattleReportValueDataModule(); /// /// 战斗照成信息面板 /// public BattleReportValueDataModule CombatInfoModule = new BattleReportValueDataModule(); /// /// 治疗信息 /// public BattleReportValueDataModule zhiLiao = new BattleReportValueDataModule(); /// /// 被治疗信息 /// public BattleReportValueDataModule beiZhiLiao = new BattleReportValueDataModule(); /// /// 战斗受到伤害信息面板 /// public BattleReportValueDataModule InjuredInfoModule = new BattleReportValueDataModule(); /// /// 战斗日子面板 /// public ReportFightMassgeLogDataModule MsgModule = new ReportFightMassgeLogDataModule(); public long allHarm = 0; public long allZhiLiao = 0; public long allBeiZhiLiao = 0; public long allChengShang = 0; public void Init(CombatHeroEntity combatHeroEntity) { CombatHeroEntity = combatHeroEntity; HeroInfoModule.SetMax("计算K", CombatHeroEntity.MaxCombatHeroInfo.k); HeroInfoModule.SetMax("生命", CombatHeroEntity.MaxCombatHeroInfo.hp.Value); HeroInfoModule.SetMax("攻击力", CombatHeroEntity.MaxCombatHeroInfo.attack.Value); HeroInfoModule.SetMax("防御", CombatHeroEntity.MaxCombatHeroInfo.defense.Value); HeroInfoModule.SetMax("攻击速度", CombatHeroEntity.MaxCombatHeroInfo.attSpeed.Value); HeroInfoModule.SetMax("额外攻击速度%", CombatHeroEntity.MaxCombatHeroInfo.addAttSpeed_bl); HeroInfoModule.SetMax("护盾值", CombatHeroEntity.MaxCombatHeroInfo.Shield.Value); HeroInfoModule.SetMax("神识", CombatHeroEntity.MaxCombatHeroInfo.shenshi.Value); HeroInfoModule.SetMax("金灵根", CombatHeroEntity.MaxCombatHeroInfo.Metal); HeroInfoModule.SetMax("木灵根", CombatHeroEntity.MaxCombatHeroInfo.Wood); HeroInfoModule.SetMax("水灵根", CombatHeroEntity.MaxCombatHeroInfo.Water); HeroInfoModule.SetMax("火灵根", CombatHeroEntity.MaxCombatHeroInfo.Fire); HeroInfoModule.SetMax("土灵根", CombatHeroEntity.MaxCombatHeroInfo.Earth); HeroInfoModule.SetMax("金伤势", CombatHeroEntity.MaxCombatHeroInfo.Metal_Injury); HeroInfoModule.SetMax("木伤势", CombatHeroEntity.MaxCombatHeroInfo.Wood_Injury); HeroInfoModule.SetMax("水伤势", CombatHeroEntity.MaxCombatHeroInfo.Water_Injury); HeroInfoModule.SetMax("火伤势", CombatHeroEntity.MaxCombatHeroInfo.Fire_Injury); HeroInfoModule.SetMax("土伤势", CombatHeroEntity.MaxCombatHeroInfo.Earth_Injury); CombatEventManager.Instance.AddEventListener(CombatEventType.HeroInjured, HeroInjured); CombatEventManager.Instance.AddEventListener(CombatEventType.RecoverUpdate, RecoverUpdate); CombatEventManager.Instance.AddEventListener(CombatEventType.AddBuff, AddBuff); CombatEventManager.Instance.AddEventListener(CombatEventType.RemoveBuff, RemoveBuff); CombatEventManager.Instance.AddEventListener(CombatEventType.UseSkill, UseSkill); CombatEventManager.Instance.AddEventListener(CombatEventType.UseMagicWeapon, UseMagicWeapon); } public void Update() { UpdateHeroInfo(); } private void UpdateHeroInfo() { HeroInfoModule.Add("计算K", CombatHeroEntity.CurrCombatHeroInfo.k); HeroInfoModule.Add("生命", CombatHeroEntity.CurrCombatHeroInfo.hp.Value); HeroInfoModule.Add("攻击力", CombatHeroEntity.CurrCombatHeroInfo.attack.Value); HeroInfoModule.Add("防御", CombatHeroEntity.CurrCombatHeroInfo.defense.Value); HeroInfoModule.Add("攻击速度", CombatHeroEntity.CurrCombatHeroInfo.attSpeed.Value); HeroInfoModule.Add("额外攻击速度%", CombatHeroEntity.CurrCombatHeroInfo.addAttSpeed_bl); HeroInfoModule.Add("护盾值", CombatHeroEntity.CurrCombatHeroInfo.Shield.Value); HeroInfoModule.Add("神识", CombatHeroEntity.CurrCombatHeroInfo.shenshi.Value); HeroInfoModule.Add("金灵根", CombatHeroEntity.CurrCombatHeroInfo.Metal); HeroInfoModule.Add("木灵根", CombatHeroEntity.CurrCombatHeroInfo.Wood); HeroInfoModule.Add("水灵根", CombatHeroEntity.CurrCombatHeroInfo.Water); HeroInfoModule.Add("火灵根", CombatHeroEntity.CurrCombatHeroInfo.Fire); HeroInfoModule.Add("土灵根", CombatHeroEntity.CurrCombatHeroInfo.Earth); HeroInfoModule.Add("金伤势", CombatHeroEntity.CurrCombatHeroInfo.Metal_Injury); HeroInfoModule.Add("木伤势", CombatHeroEntity.CurrCombatHeroInfo.Wood_Injury); HeroInfoModule.Add("水伤势", CombatHeroEntity.CurrCombatHeroInfo.Water_Injury); HeroInfoModule.Add("火伤势", CombatHeroEntity.CurrCombatHeroInfo.Fire_Injury); HeroInfoModule.Add("土伤势", CombatHeroEntity.CurrCombatHeroInfo.Earth_Injury); } private void UseMagicWeapon(IEventData iEventData) { UseMagicWeaponEventData useMagicWeaponEventData = iEventData as UseMagicWeaponEventData; if (useMagicWeaponEventData.combatHeroEntity == CombatHeroEntity) { string msg = $"使用法宝 {useMagicWeaponEventData.combatMagicWeaponEntity.FaBaoInfo.FabaoConfig.ID}"; float t = CombatController.currActiveCombat.combatTime; MsgModule.Add(t, msg); } } private void UseSkill(IEventData iEventData) { CombatUseSkillEventData combatUseSkillEventData = iEventData as CombatUseSkillEventData; if (combatUseSkillEventData.useSkill.CombatHeroEntity == CombatHeroEntity) { string msg = $"使用技能 {combatUseSkillEventData.useSkill.SelfSkillConfig.ID}"; float t = CombatController.currActiveCombat.combatTime; MsgModule.Add(t, msg); } } private void RemoveBuff(IEventData iEventData) { BuffEventData buffEventData = iEventData as BuffEventData; if (buffEventData.target == CombatHeroEntity) { string msg = $"移除了一个buff {buffEventData.BuffBasic.buffInf.BuffConfig.scriptsName}" + $" 数量 {buffEventData.BuffBasic.buffInf.count}"; float t = CombatController.currActiveCombat.combatTime; MsgModule.Add(t, msg); } } private void AddBuff(IEventData iEventData) { BuffEventData buffEventData = iEventData as BuffEventData; if (buffEventData.target == CombatHeroEntity) { string msg = $"获得buff {buffEventData.BuffBasic.buffInf.BuffConfig.scriptsName}" + $" 数量 {buffEventData.BuffBasic.buffInf.count} 施放者{buffEventData.source.CurrCombatHeroInfo.modelID}"; float t = CombatController.currActiveCombat.combatTime; MsgModule.Add(t, msg); } else if (buffEventData.source == CombatHeroEntity) { string msg = $"施加buff {buffEventData.BuffBasic.buffInf.BuffConfig.scriptsName}" + $" 数量 {buffEventData.BuffBasic.buffInf.count} 目标{buffEventData.target.CurrCombatHeroInfo.modelID}"; float t = CombatController.currActiveCombat.combatTime; MsgModule.Add(t, msg); } } private void RecoverUpdate(IEventData iEventData) { HarmUpdateEventData recoverUpdateEventData = iEventData as HarmUpdateEventData; if (recoverUpdateEventData.HarmReturnInfo.source == CombatHeroEntity) { string msg = $"我治疗了目标 {recoverUpdateEventData.HarmReturnInfo.target.combatHeroEntity.CurrCombatHeroInfo.heroName}" + $" 治疗量 {recoverUpdateEventData.HarmReturnInfo.att} 治疗类型 {recoverUpdateEventData.HarmReturnInfo.attType}"; float t = CombatController.currActiveCombat.combatTime; MsgModule.Add(t, msg); string harmKey = "无"; SkillBasic skillBasic = recoverUpdateEventData.HarmReturnInfo.triggerData.Source as SkillBasic; if (skillBasic != null) { harmKey = "S" + LanguageManager.Instance.Text(skillBasic.SelfSkillConfig.name); } BuffBasic buffBasic = recoverUpdateEventData.HarmReturnInfo.triggerData.Source as BuffBasic; if (buffBasic != null) { harmKey = "B" + LanguageManager.Instance.Text(buffBasic.buffInf.BuffConfig.buffName); } allZhiLiao += recoverUpdateEventData.HarmReturnInfo.att; zhiLiao.Add(harmKey, recoverUpdateEventData.HarmReturnInfo.att,true); } else if (recoverUpdateEventData.HarmReturnInfo.target.combatHeroEntity == CombatHeroEntity) { string msg = $"被治疗 {recoverUpdateEventData.HarmReturnInfo.source.CurrCombatHeroInfo.heroName}" + $" 受到治疗 {recoverUpdateEventData.HarmReturnInfo.att} 治疗类型 {recoverUpdateEventData.HarmReturnInfo.attType} 治疗来源{recoverUpdateEventData.HarmReturnInfo.triggerData.Source}"; float t = CombatController.currActiveCombat.combatTime; MsgModule.Add(t, msg); string harmKey = "其他"; SkillBasic skillBasic = recoverUpdateEventData.HarmReturnInfo.triggerData.Source as SkillBasic; if (skillBasic != null) { harmKey = "S" + LanguageManager.Instance.Text(skillBasic.SelfSkillConfig.name); } BuffBasic buffBasic = recoverUpdateEventData.HarmReturnInfo.triggerData.Source as BuffBasic; if (buffBasic != null) { harmKey = "B" + LanguageManager.Instance.Text(buffBasic.buffInf.BuffConfig.buffName); } allBeiZhiLiao += recoverUpdateEventData.HarmReturnInfo.att; beiZhiLiao.Add(harmKey, recoverUpdateEventData.HarmReturnInfo.att,true); } } private void HeroInjured(IEventData iEventData) { HeroInjuredEventData heroInjuredEventData = iEventData as HeroInjuredEventData; if (heroInjuredEventData.HarmReturnInfo.source == CombatHeroEntity) { string harmKey = "无"; SkillBasic skillBasic = heroInjuredEventData.HarmReturnInfo.triggerData.Source as SkillBasic; if (skillBasic != null) { harmKey = LanguageManager.Instance.Text(skillBasic.SelfSkillConfig.name)+" id:"+skillBasic.SelfSkillConfig.ID; } BuffBasic buffBasic = heroInjuredEventData.HarmReturnInfo.triggerData.Source as BuffBasic; if (buffBasic != null) { harmKey = "B" + LanguageManager.Instance.Text(buffBasic.buffInf.BuffConfig.buffName); } string msg = $"我攻击了目标 {heroInjuredEventData.HarmReturnInfo.target.combatHeroEntity.CurrCombatHeroInfo.heroName} 来源{harmKey} 原始伤害{ heroInjuredEventData.HarmReturnInfo.yuanShiAtt }" + $" 造成伤害 {heroInjuredEventData.HarmReturnInfo.att} 伤害类型 {heroInjuredEventData.HarmReturnInfo.attType}"; float t = CombatController.currActiveCombat.combatTime; MsgModule.Add(t, msg); allHarm += heroInjuredEventData.HarmReturnInfo.att; CombatInfoModule.Add(harmKey, heroInjuredEventData.HarmReturnInfo.att,true); } else if (heroInjuredEventData.HarmReturnInfo.target.combatHeroEntity == CombatHeroEntity) { string harmKey = "其他"; SkillBasic skillBasic = heroInjuredEventData.HarmReturnInfo.triggerData.Source as SkillBasic; if (skillBasic != null) { harmKey = LanguageManager.Instance.Text(skillBasic.SelfSkillConfig.name)+" id:"+skillBasic.SelfSkillConfig.ID; } BuffBasic buffBasic = heroInjuredEventData.HarmReturnInfo.triggerData.Source as BuffBasic; if (buffBasic != null) { harmKey = "B" + LanguageManager.Instance.Text(buffBasic.buffInf.BuffConfig.buffName); } string msg = $"被攻击 {heroInjuredEventData.HarmReturnInfo.source.CurrCombatHeroInfo.heroName} 来源{harmKey} 原始伤害{ heroInjuredEventData.HarmReturnInfo.yuanShiAtt }" + $" 受到伤害 {heroInjuredEventData.HarmReturnInfo.att} 伤害类型 {heroInjuredEventData.HarmReturnInfo.attType}"; float t = CombatController.currActiveCombat.combatTime; MsgModule.Add(t, msg); allChengShang += heroInjuredEventData.HarmReturnInfo.att; InjuredInfoModule.Add(harmKey, heroInjuredEventData.HarmReturnInfo.att,true); } } public void Dispose() { CombatHeroEntity = null; CombatEventManager.Instance.RemoveEventListener(CombatEventType.HeroInjured, HeroInjured); CombatEventManager.Instance.RemoveEventListener(CombatEventType.RecoverUpdate, RecoverUpdate); CombatEventManager.Instance.RemoveEventListener(CombatEventType.AddBuff, AddBuff); CombatEventManager.Instance.RemoveEventListener(CombatEventType.RemoveBuff, RemoveBuff); CombatEventManager.Instance.RemoveEventListener(CombatEventType.UseSkill, UseSkill); CombatEventManager.Instance.RemoveEventListener(CombatEventType.UseMagicWeapon, UseMagicWeapon); } } }