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);
}
}
}