private IEnumerator InvokeMonsterDiedEvent(Single waitTime) { yield return(new WaitForSeconds(waitTime)); DelayedEventManager.InvokeEvent(EDelayType.ON_FX_FINISH, EEventType.MONSTER_DIED, m_sender, m_eventArgs); yield break; }
private void OnTrapTriggered(Object p_sender, EventArgs p_args) { TrapEventArgs trapEventArgs = p_args as TrapEventArgs; if (trapEventArgs != null && trapEventArgs.Trap == MyController) { EventHandler eventHandler = delegate(Object p_localSender, EventArgs p_localArgs) { DelayedEventManager.InvokeEvent(EDelayType.ON_FX_HIT, EEventType.TRAP_TRIGGERED, p_sender, p_args); }; String gfx = trapEventArgs.TrapEffect.GFX; if (!String.IsNullOrEmpty(gfx)) { FXQueue fxqueue = Helper.ResourcesLoad <FXQueue>(gfx, false); if (fxqueue != null) { fxqueue = Helper.Instantiate <FXQueue>(fxqueue); FXArgs args = new FXArgs(gameObject, gameObject, gameObject, gameObject, Vector3.zero, transform.forward, -transform.right, Vector3.zero); fxqueue.Finished += eventHandler; fxqueue.Execute(args); } else { eventHandler(this, EventArgs.Empty); Debug.LogError("OnTrapTriggered: given GFX does not exist! " + gfx); } } else { eventHandler(this, EventArgs.Empty); Debug.LogWarning("OnTrapTriggered: Trap GFX is missing!"); } } }
protected virtual void ChangeStateFromAttackToIdle(Action pOnFXFinished) { if (pOnFXFinished != null) { pOnFXFinished(); } Boolean flag = m_State.IsState(EState.ATTACK_RANGED); if (m_State.IsState(EState.ATTACK) || m_State.IsState(EState.ATTACK_RANGED)) { m_State.ChangeState(EState.IDLE); } else { Debug.LogError("Current state is not ATTACK and not ATTACKRANGED!", this); } if (MyController != null) { MyController.AttackingDone.Trigger(); if (MyController is Monster) { CheckForReflectedDamage(); m_reflectedMagicDamage.Clear(); ((Monster)MyController).AbilityHandler.FlushActionLog(EExecutionPhase.END_OF_MONSTERS_TURN); ((Monster)MyController).BuffHandler.FlushActionLog(MonsterBuffHandler.ELogEntryPhase.ON_END_TURN); DelayedEventManager.InvokeEvent(EDelayType.ON_FX_FINISH, (!flag) ? EEventType.MONSTER_ATTACKS : EEventType.MONSTER_ATTACKS_RANGED, (Monster)MyController, EventArgs.Empty); } } }
private void OnFXCancel(Object p_sender, EventArgs p_args) { if (MyController != null) { ((Character)p_sender).FightHandler.FlushDelayedActionLog(); } DelayedEventManager.InvokeEvent(EDelayType.ON_FX_FINISH, EEventType.CHARACTER_CAST_SPELL, p_sender, p_args); }
private void OnRangedFXHit(Object p_sender, EventArgs p_args) { Character character = (Character)p_sender; character.FightHandler.FlushActionLog(); character.FightHandler.FlushDelayedActionLog(); character.EnchantmentHandler.FlushActionLog(); DelayedEventManager.InvokeEvent(EDelayType.ON_FX_HIT, EEventType.CHARACTER_ATTACKS_RANGED, p_sender, p_args); }
private void TakeHitDoFinishBySpell(Object p_sender, EventArgs p_args) { ((Monster)MyController).HitAnimationDone.Trigger(); if (p_sender is Summon) { ((Summon)p_sender).FlushActionLog(); } FlushMonsterLogEntries(); if (!(p_sender is Summon)) { DelayedEventManager.InvokeEvent(EDelayType.ON_FX_FINISH, EEventType.CHARACTER_CAST_SPELL, p_sender, p_args); } }
private void OnFXQueueFinish(Object p_sender, EventArgs p_args) { if (MyController != null) { ((Character)p_sender).FightHandler.FlushDelayedActionLog(); } DelayedEventManager.InvokeEvent(EDelayType.ON_FX_HIT, EEventType.CHARACTER_CAST_SPELL, p_sender, p_args); ETargetType targetType = ((SpellEventArgs)p_args).Spell.TargetType; if ((targetType & ETargetType.PARTY) == ETargetType.PARTY) { DelayedEventManager.InvokeEvent(EDelayType.ON_FX_FINISH, EEventType.CHARACTER_CAST_SPELL, p_sender, p_args); } }
private void OnCharacterAttacks(Object p_sender, EventArgs p_args) { AttacksEventArgs attacksEventArgs = (AttacksEventArgs)p_args; if (attacksEventArgs.Attacks.Count == 0) { OnCharacterFXDone(p_sender, p_args); return; } Character character = (Character)p_sender; character.FightHandler.FlushActionLog(); character.EnchantmentHandler.FlushActionLog(); DelayedEventManager.InvokeEvent(EDelayType.ON_FX_HIT, EEventType.CHARACTER_ATTACKS, p_sender, p_args); GameObject currentCamera = FXMainCamera.Instance.CurrentCamera; if (currentCamera != null) { Int32 num = Random.Range(1, 4); GameObject gameObject = Helper.Instantiate <GameObject>(Helper.ResourcesLoad <GameObject>("FX/Hit/HitFx" + num)); Vector3 a = Vector3.zero; foreach (AttacksEventArgs.AttackedTarget attackedTarget in attacksEventArgs.Attacks) { if (attackedTarget.AttackTarget != null && attackedTarget.AttackTarget is Monster) { Monster p_controller = (Monster)attackedTarget.AttackTarget; GameObject gameObject2 = ViewManager.Instance.FindView(p_controller).gameObject; MonsterHPBarView component = gameObject2.GetComponent <MonsterHPBarView>(); a = gameObject2.transform.position + new Vector3(0f, component.HPBarAnchor.position.y / 1.8f, 0f); } } gameObject.transform.position = a - currentCamera.transform.forward * 1.9f; gameObject.transform.rotation = currentCamera.transform.rotation; Destroy(gameObject.gameObject, 0.5f); } }
private static IEnumerator PlayLateShakeFX(DelayedEventManagerWorker p_Worker) { yield return(new WaitForSeconds(ANIM_TIME - 0.9f)); Vector3 vec = new Vector3(0f, 0.1f, 0f); AudioController.Play("LightningBoltImpact", p_Worker.transform.position, null); FXMainCamera.Instance.PlayShakeFX(0.3f, vec); yield return(new WaitForSeconds(2.2f)); Single jingleTime = -1f; AudioObject jingle = AudioController.Play("BossDefeatedJingle", p_Worker.transform.position, null); if (jingle != null) { jingleTime = jingle.clipLength; } GameMessageEventArgs gameMessageArgs = new GameMessageEventArgs("GAME_MESSAGE_MAMUSHI_DEFEATED", jingleTime - 2.4f); DelayedEventManager.InvokeEvent(EDelayType.ON_FRAME_END, EEventType.GAME_MESSAGE, null, gameMessageArgs); DelayedEventManager.InvokeEvent(EDelayType.ON_FIXED_DELAY, EEventType.GAME_MESSAGE, null, gameMessageArgs); Destroy(p_Worker); yield break; }
private void OnTakeHitAttackGeneric(Object p_sender, EventArgs p_args, EEventType p_eventType) { Boolean flag = true; Boolean flag2 = false; if (p_args is AttacksEventArgs) { AttacksEventArgs attacksEventArgs = (AttacksEventArgs)p_args; foreach (AttacksEventArgs.AttackedTarget attackedTarget in attacksEventArgs.Attacks) { if (attackedTarget.AttackTarget == MyController) { AttackResult attackResult = attackedTarget.AttackResult; if (!flag2 && attacksEventArgs.PushToParty) { flag2 = true; m_MainView.PushEntityToPosition(); } foreach (AttacksEventArgs.AttackedTarget attackedTarget2 in attacksEventArgs.Attacks) { if (attackedTarget2.AttackTarget != null && attackedTarget2.AttackTarget == MyController) { Monster monster = (Monster)MyController; FlushMonsterLogEntries(); monster.CombatHandler.CheckCounterAttack((Character)p_sender); List <CombatEntryEventArgs> counterLogEntries = monster.CombatHandler.CounterLogEntries; if (counterLogEntries.Count > 0) { foreach (CombatEntryEventArgs p_args2 in counterLogEntries) { LegacyLogic.Instance.ActionLog.PushEntry(p_args2); if (LegacyLogic.Instance.WorldManager.Party.Buffs.HasBuff(EPartyBuffs.CELESTIAL_ARMOR)) { if (LegacyLogic.Instance.WorldManager.Party.Buffs.GetBuff(EPartyBuffs.CELESTIAL_ARMOR).IsExpired()) { LegacyLogic.Instance.WorldManager.Party.Buffs.RemoveBuff(EPartyBuffs.CELESTIAL_ARMOR); } LegacyLogic.Instance.WorldManager.Party.Buffs.FlushActionLog(); } ((Character)p_sender).ConditionHandler.FlushActionLog(); ((Character)p_sender).ConditionHandler.FlushDelayedActionLog(); } } counterLogEntries.Clear(); if (monster.AiHandler is MamushiAIHandler) { ((Character)p_sender).FightHandler.FlushActionLog(); ((Character)p_sender).FightHandler.FlushDelayedActionLog(); ((Character)p_sender).FlushNormalActionLog(); } } } if (attackResult.ReflectedDamage != null && attackResult.ReflectedDamage.Damages.Count > 0 && MyController is Monster) { Monster p_attacker = MyController as Monster; AttackResult attackResult2 = ((Character)p_sender).FightHandler.AttackEntity(attackResult.ReflectedDamage, true, EDamageType.PHYSICAL, true, 0, false); ((Character)p_sender).ApplyDamages(attackResult2, p_attacker); Object p_source = (attackResult2.ReflectedDamageSource != null) ? attackResult2.ReflectedDamageSource : MyController; CombatEntryEventArgs p_args3 = new CombatEntryEventArgs(p_source, p_sender, attackResult2, null); LegacyLogic.Instance.ActionLog.PushEntry(p_args3); AttacksEventArgs attacksEventArgs2 = new AttacksEventArgs(false); attacksEventArgs2.Attacks.Add(new AttacksEventArgs.AttackedTarget(p_sender, attackResult2)); DelayedEventManager.InvokeEvent(EDelayType.ON_FX_FINISH, EEventType.REFLECTED_MAGIC_DAMAGE, p_sender, attacksEventArgs2); } if (flag) { flag = false; m_CommandQueue.Enqueue(delegate { ((Monster)MyController).HitAnimationDone.Trigger(); DelayedEventManager.InvokeEvent(EDelayType.ON_FX_FINISH, p_eventType, p_sender, p_args); }); PlayTakeHitSound(p_sender, attackResult, p_eventType == EEventType.CHARACTER_ATTACKS_RANGED); } TakeHit(attackedTarget.AttackResult, false); } } } else if (p_args is SpellEventArgs) { SpellEventArgs spellEventArgs = (SpellEventArgs)p_args; foreach (AttackedTarget attackedTarget3 in spellEventArgs.SpellTargetsOfType <AttackedTarget>()) { if (attackedTarget3.Target == MyController) { if (p_sender is Summon) { ((Summon)p_sender).FlushActionLog(); } FlushMonsterLogEntries(); if (flag) { flag = false; m_CommandQueue.Enqueue(delegate { ((Monster)MyController).HitAnimationDone.Trigger(); if (!(p_sender is Summon)) { DelayedEventManager.InvokeEvent(EDelayType.ON_FX_FINISH, EEventType.CHARACTER_CAST_SPELL, p_sender, p_args); } }); } TakeHit(attackedTarget3.Result, spellEventArgs.DamageType != EDamageType.PHYSICAL); } } foreach (PushedTarget pushedTarget in spellEventArgs.SpellTargetsOfType <PushedTarget>()) { if (pushedTarget.Target == MyController) { m_MainView.PushEntityToPosition(); } } } }
protected virtual void OnEntityCastSpell(Object p_sender, EventArgs p_args) { if (p_sender != MyController) { return; } SpellEventArgs args = (SpellEventArgs)p_args; MonsterSpell spell = (MonsterSpell)args.Spell; EventHandler eventHandler = delegate(Object sender, EventArgs e) { DelayedEventManager.InvokeEvent(EDelayType.ON_FX_HIT, EEventType.MONSTER_CAST_SPELL, p_sender, args); MyController.AttackingDone.Trigger(); if (spell.SpellType == EMonsterSpell.FLICKER) { m_MainView.SetEntityPosition(); } if (MyController is Monster) { ((Monster)MyController).BuffHandler.FlushActionLog(MonsterBuffHandler.ELogEntryPhase.ON_CAST_SPELL); ((Monster)MyController).BuffHandler.RemoveFlaggedBuffs(); } SpellEffectEntryEventArgs p_args9 = new SpellEffectEntryEventArgs(p_sender, args); LegacyLogic.Instance.ActionLog.PushEntry(p_args9); foreach (SpellTarget spellTarget2 in args.SpellTargets) { if (spellTarget2.Target is Character) { ((Character)spellTarget2.Target).ConditionHandler.FlushActionLog(); ((Character)spellTarget2.Target).ConditionHandler.FlushDelayedActionLog(); LegacyLogic.Instance.WorldManager.Party.Buffs.FlushActionLog(); } } if (MyController is Monster) { ((Monster)MyController).BuffHandler.FlushActionLog(MonsterBuffHandler.ELogEntryPhase.ON_END_TURN); } }; FXDescription fxdescription = Helper.ResourcesLoad <FXDescription>(spell.EffectKey, false); if (fxdescription == null) { Debug.LogError("FXDescription not found! at " + spell.EffectKey, this); eventHandler(this, EventArgs.Empty); return; } fxdescription = Helper.Instantiate <FXDescription>(fxdescription); fxdescription.Finished += eventHandler; Vector3 p_slotOriginPosition; Vector3 p_slotForward; Vector3 p_slotLeft; Vector3 p_slotTargetPosition; ViewManager.GetSlotDatas(MyController.Position, LegacyLogic.Instance.WorldManager.Party.Position, out p_slotOriginPosition, out p_slotForward, out p_slotLeft, out p_slotTargetPosition); Int32 animationID; if (Int32.TryParse(spell.EffectAnimationClip, out animationID)) { m_animatorControl.AttackMagic(animationID); } else { Debug.LogError("Error parse animation id for attack magic '" + spell.EffectAnimationClip + "'"); m_animatorControl.AttackMagic(); } GameObject gameObject = this.gameObject; ETargetType targetType = spell.TargetType; if (args.SpellTargets.Count == 0) { Debug.LogError("Error, missing targets for effects\n" + DebugUtil.DumpObjectText(spell)); FXArgs p_args2 = new FXArgs(gameObject, gameObject, gameObject, gameObject, p_slotOriginPosition, p_slotForward, p_slotLeft, p_slotTargetPosition, new List <GameObject> { gameObject }); fxdescription.Configurate(m_eventHandler, p_args2); return; } if ((targetType & ETargetType.MONSTER) == ETargetType.MONSTER) { PlayerEntityView playerEntityView = ViewManager.Instance.FindViewAndGetComponent <PlayerEntityView>(LegacyLogic.Instance.WorldManager.Party); MovingEntity movingEntity = null; List <GameObject> list = new List <GameObject>(); foreach (SpellTarget spellTarget in args.SpellTargets) { GameObject gameObject2 = null; if (spellTarget.Target is Character) { if (movingEntity == null) { movingEntity = LegacyLogic.Instance.WorldManager.Party; } gameObject2 = playerEntityView.GetMemberGameObject(((Character)spellTarget.Target).Index); } else if (spellTarget.Target is MovingEntity) { if (movingEntity == null) { movingEntity = (MovingEntity)spellTarget.Target; } gameObject2 = ViewManager.Instance.FindView((MovingEntity)spellTarget.Target); } if (gameObject2 != null) { list.Add(gameObject2); } } ViewManager.GetSlotDatas(MyController.Position, movingEntity.Position, out p_slotOriginPosition, out p_slotForward, out p_slotLeft, out p_slotTargetPosition); FXArgs p_args3 = new FXArgs(gameObject, playerEntityView.gameObject, gameObject, playerEntityView.gameObject, p_slotOriginPosition, p_slotForward, p_slotLeft, p_slotTargetPosition, list); fxdescription.Configurate(m_eventHandler, p_args3); } else if ((targetType & ETargetType.MULTY) == ETargetType.MULTY) { PlayerEntityView playerEntityView2 = ViewManager.Instance.FindViewAndGetComponent <PlayerEntityView>(LegacyLogic.Instance.WorldManager.Party); List <GameObject> list2 = new List <GameObject>(4); for (Int32 i = 0; i < 4; i++) { list2.Add(playerEntityView2.GetMemberGameObject(i)); } FXArgs p_args4 = new FXArgs(gameObject, playerEntityView2.gameObject, gameObject, playerEntityView2.gameObject, p_slotOriginPosition, p_slotForward, p_slotLeft, p_slotTargetPosition, list2); fxdescription.Configurate(m_eventHandler, p_args4); } else if ((targetType & ETargetType.SINGLE) == ETargetType.SINGLE) { Boolean flag = true; foreach (AttackedTarget attackedTarget in args.SpellTargetsOfType <AttackedTarget>()) { Character character = (Character)attackedTarget.Target; GameObject characterGO = FXHelper.GetCharacterGO(character.Index); if (!flag) { fxdescription = Helper.Instantiate <FXDescription>(fxdescription); } FXArgs p_args5 = new FXArgs(gameObject, characterGO, gameObject, characterGO, p_slotOriginPosition, p_slotForward, p_slotLeft, p_slotTargetPosition, new List <GameObject> { characterGO }); fxdescription.Configurate(m_eventHandler, p_args5); flag = false; } foreach (MonsterBuffTarget monsterBuffTarget in args.SpellTargetsOfType <MonsterBuffTarget>()) { Character character2 = (Character)monsterBuffTarget.Target; GameObject characterGO2 = FXHelper.GetCharacterGO(character2.Index); if (!flag) { fxdescription = Helper.Instantiate <FXDescription>(fxdescription); } FXArgs p_args6 = new FXArgs(gameObject, characterGO2, gameObject, characterGO2, p_slotOriginPosition, p_slotForward, p_slotLeft, p_slotTargetPosition, new List <GameObject> { characterGO2 }); fxdescription.Configurate(m_eventHandler, p_args6); flag = false; } } else if ((targetType & ETargetType.ADJACENT) == ETargetType.ADJACENT) { FXArgs p_args7 = new FXArgs(gameObject, gameObject, gameObject, gameObject, p_slotOriginPosition, p_slotForward, p_slotLeft, p_slotTargetPosition); fxdescription.Configurate(m_eventHandler, p_args7); } else { FXArgs p_args8 = new FXArgs(gameObject, gameObject, gameObject, gameObject, p_slotOriginPosition, p_slotForward, p_slotLeft, p_slotTargetPosition); fxdescription.Configurate(m_eventHandler, p_args8); } }
protected virtual void OnMonsterAttacksGeneric(Object p_sender, AttacksEventArgs p_args, Boolean p_isRanged) { PlayerEntityView playerEntity = FXHelper.GetPlayerEntity(); Vector3 p_slotOriginPosition; Vector3 p_slotForward; Vector3 p_slotLeft; Vector3 p_slotTargetPosition; ViewManager.GetSlotDatas(MyController.Position, LegacyLogic.Instance.WorldManager.Party.Position, out p_slotOriginPosition, out p_slotForward, out p_slotLeft, out p_slotTargetPosition); Boolean flag = false; GameObject gameObject = null; List <Action> callbacks = new List <Action>(p_args.Attacks.Count); EResultType eresultType = EResultType.HIT; Int32 num = 0; List <Character> targets = new List <Character>(); AttacksEventArgs.AttackedTarget attack; foreach (AttacksEventArgs.AttackedTarget attack2 in p_args.Attacks) { attack = attack2; num++; if (attack.AttackTarget is Character) { Character chara = (Character)attack.AttackTarget; AttackResult result = attack.AttackResult; targets.Add(chara); if (playerEntity != null) { gameObject = playerEntity.GetMemberGameObject(chara.Index); } if (gameObject == null) { Debug.LogError("Could not find target character! Char-Index: " + chara.Index); } else { flag |= attack.IsCriticalAttack; callbacks.Add(delegate { if (p_sender is Monster && ((Monster)p_sender).AbilityHandler.HasEntriesForPhase(EExecutionPhase.BEFORE_MONSTER_ATTACK)) { ((Monster)p_sender).AbilityHandler.FlushActionLog(EExecutionPhase.BEFORE_MONSTER_ATTACK); chara.ConditionHandler.FlushActionLog(); } if (((Monster)p_sender).AbilityHandler.HasEntriesForPhase(EExecutionPhase.AFTER_DAMAGE_CALCULATION)) { ((Monster)p_sender).AbilityHandler.FlushActionLog(EExecutionPhase.AFTER_DAMAGE_CALCULATION); } CombatEntryEventArgs p_args2 = new CombatEntryEventArgs(p_sender, chara, result, attack.BloodMagicEventArgs); LegacyLogic.Instance.ActionLog.PushEntry(p_args2); if (LegacyLogic.Instance.WorldManager.Party.Buffs.HasBuff(EPartyBuffs.SHADOW_CLOAK) && result.Result == EResultType.EVADE) { LegacyLogic.Instance.WorldManager.Party.Buffs.RemoveBuff(EPartyBuffs.SHADOW_CLOAK); } if (LegacyLogic.Instance.WorldManager.Party.Buffs.HasBuff(EPartyBuffs.CELESTIAL_ARMOR)) { if (LegacyLogic.Instance.WorldManager.Party.Buffs.GetBuff(EPartyBuffs.CELESTIAL_ARMOR).IsExpired()) { LegacyLogic.Instance.WorldManager.Party.Buffs.RemoveBuff(EPartyBuffs.CELESTIAL_ARMOR); } LegacyLogic.Instance.WorldManager.Party.Buffs.FlushActionLog(); } chara.FightHandler.FlushCounterAttackActionLog(); LegacyLogic.Instance.WorldManager.Party.Buffs.FlushActionLog(); if (p_sender is Monster && ((Monster)p_sender).AbilityHandler.HasEntriesForPhase(EExecutionPhase.AFTER_MONSTER_ATTACK)) { ((Monster)p_sender).AbilityHandler.FlushActionLog(EExecutionPhase.AFTER_MONSTER_ATTACK); chara.ConditionHandler.FlushActionLog(); } }); if (attack.AttackResult.Result == EResultType.BLOCK) { eresultType = EResultType.BLOCK; } else if (eresultType != EResultType.BLOCK && attack.AttackResult.Result == EResultType.EVADE) { eresultType = EResultType.EVADE; } } } } Action action = delegate { DelayedEventManager.InvokeEvent(EDelayType.ON_FX_HIT, (!p_isRanged) ? EEventType.MONSTER_ATTACKS : EEventType.MONSTER_ATTACKS_RANGED, p_sender, p_args); if (!p_isRanged) { foreach (AttacksEventArgs.AttackedTarget attackedTarget in p_args.Attacks) { ((Monster)MyController).CombatHandler.TriggerCounterAttacks(attackedTarget.AttackTarget, attackedTarget.AttackResult); } } foreach (Action action2 in callbacks) { action2(); } foreach (Character character in targets) { character.ConditionHandler.FlushDelayedActionLog(); } }; if (gameObject == null) { gameObject = playerEntity.GetMemberGameObject(UnityEngine.Random.Range(0, 4)); if (gameObject == null) { Debug.LogError("No target character could be found! Will skip whole FX! Num of Attacks = " + p_args.Attacks.Count); action(); return; } } FXArgs p_fxArgs = new FXArgs(this.gameObject, gameObject, this.gameObject, gameObject, p_slotOriginPosition, p_slotForward, p_slotLeft, p_slotTargetPosition); if (p_isRanged) { AttackRanged(p_fxArgs, action, (!flag) ? eresultType : EResultType.CRITICAL_HIT); } else if (flag) { AttackCritical(p_fxArgs, action); } else { Attack(p_fxArgs, action); } }
private void TakeHit(Object p_sender, EventArgs p_args, Boolean p_isRanged) { Int32 tagHash = m_animator.GetCurrentAnimatorStateInfo(0).tagHash; Int32 tagHash2 = m_animator.GetNextAnimatorStateInfo(0).tagHash; Int32 num = Animator.StringToHash("ATTACK"); Int32 num2 = Animator.StringToHash("DIE"); Boolean flag = true; Boolean flag2 = false; if (p_args is AttacksEventArgs) { AttacksEventArgs attacksEventArgs = (AttacksEventArgs)p_args; foreach (AttacksEventArgs.AttackedTarget attackedTarget in attacksEventArgs.Attacks) { if (attackedTarget.AttackTarget == MyController) { AttackResult attackResult = attackedTarget.AttackResult; if (flag) { flag = false; ((Monster)MyController).HitAnimationDone.Trigger(); FlushMonsterLogEntries(); DelayedEventManager.InvokeEvent(EDelayType.ON_FX_FINISH, (!p_isRanged) ? EEventType.CHARACTER_ATTACKS : EEventType.CHARACTER_ATTACKS_RANGED, p_sender, p_args); if (attackedTarget.AttackResult.DamageDone > 0 && num2 != tagHash && num2 != tagHash2 && num != tagHash && num != tagHash2) { m_animatorControl.Hit(); } PlayTakeHitSound(p_sender, attackResult, p_isRanged); } if (!flag2 && attacksEventArgs.PushToParty) { flag2 = true; m_MainView.PushEntityToPosition(); } foreach (AttacksEventArgs.AttackedTarget attackedTarget2 in attacksEventArgs.Attacks) { if (attackedTarget2.AttackTarget != null && attackedTarget2.AttackTarget == MyController) { Monster monster = (Monster)MyController; monster.CombatHandler.CheckCounterAttack((Character)p_sender); List <CombatEntryEventArgs> counterLogEntries = monster.CombatHandler.CounterLogEntries; if (counterLogEntries.Count > 0) { foreach (CombatEntryEventArgs p_args2 in counterLogEntries) { LegacyLogic.Instance.ActionLog.PushEntry(p_args2); if (LegacyLogic.Instance.WorldManager.Party.Buffs.HasBuff(EPartyBuffs.CELESTIAL_ARMOR)) { if (LegacyLogic.Instance.WorldManager.Party.Buffs.GetBuff(EPartyBuffs.CELESTIAL_ARMOR).IsExpired()) { LegacyLogic.Instance.WorldManager.Party.Buffs.RemoveBuff(EPartyBuffs.CELESTIAL_ARMOR); } LegacyLogic.Instance.WorldManager.Party.Buffs.FlushActionLog(); } ((Character)p_sender).ConditionHandler.FlushActionLog(); ((Character)p_sender).ConditionHandler.FlushDelayedActionLog(); } } counterLogEntries.Clear(); } } if (attackResult.ReflectedDamage != null && attackResult.ReflectedDamage.Damages.Count > 0 && MyController is Monster && (!p_isRanged || (p_isRanged && ((Monster)MyController).DistanceToParty < 1.1f))) { ((Monster)MyController).AbilityHandler.FlushActionLog(EExecutionPhase.ON_CHARACTER_ATTACKS_MONSTER_AFTER_DAMAGE_REDUCTION); AttackResult attackResult2 = ((Character)p_sender).FightHandler.AttackEntity(attackResult.ReflectedDamage, true, EDamageType.PHYSICAL, true, 0, false); ((Character)p_sender).ApplyDamages(attackResult2, (Monster)MyController); Object p_source = (attackResult2.ReflectedDamageSource != null) ? attackResult2.ReflectedDamageSource : MyController; CombatEntryEventArgs p_args3 = new CombatEntryEventArgs(p_source, p_sender, attackResult2, null); LegacyLogic.Instance.ActionLog.PushEntry(p_args3); DelayedEventManager.InvokeEvent(EDelayType.ON_FX_FINISH, EEventType.REFLECTED_MAGIC_DAMAGE, p_sender, new AttacksEventArgs(false) { Attacks = { new AttacksEventArgs.AttackedTarget(p_sender, attackResult2) } }); } this.SendEvent("OnReceivedAttacks", new AttacksUnityEventArgs(this, attackResult, false)); } } } else if (p_args is SpellEventArgs) { SpellEventArgs spellEventArgs = (SpellEventArgs)p_args; foreach (AttackedTarget attackedTarget3 in spellEventArgs.SpellTargetsOfType <AttackedTarget>()) { if (attackedTarget3.Target == MyController) { if (flag) { flag = false; TakeHitDoFinishBySpell(p_sender, p_args); if (attackedTarget3.Result.DamageDone > 0 && num2 != tagHash && num2 != tagHash2 && num != tagHash && num != tagHash2) { m_animatorControl.Hit(); } } if (attackedTarget3.Result.ReflectedDamage != null && attackedTarget3.Result.ReflectedDamage.Damages.Count > 0 && MyController is Monster && (!p_isRanged || (p_isRanged && ((Monster)MyController).DistanceToParty < 1.1f))) { ((Monster)MyController).AbilityHandler.FlushActionLog(EExecutionPhase.ON_CHARACTER_ATTACKS_MONSTER_AFTER_DAMAGE_REDUCTION); AttackResult attackResult3 = ((Character)p_sender).FightHandler.AttackEntity(attackedTarget3.Result.ReflectedDamage, true, EDamageType.PHYSICAL, true, 0, false); ((Character)p_sender).ApplyDamages(attackResult3, (Monster)MyController); Object p_source2 = (attackResult3.ReflectedDamageSource != null) ? attackResult3.ReflectedDamageSource : MyController; CombatEntryEventArgs p_args4 = new CombatEntryEventArgs(p_source2, p_sender, attackResult3, null); LegacyLogic.Instance.ActionLog.PushEntry(p_args4); DelayedEventManager.InvokeEvent(EDelayType.ON_FX_FINISH, EEventType.REFLECTED_MAGIC_DAMAGE, p_sender, new AttacksEventArgs(false) { Attacks = { new AttacksEventArgs.AttackedTarget(p_sender, attackResult3) } }); } this.SendEvent("OnReceivedAttacks", new AttacksUnityEventArgs(this, attackedTarget3.Result, spellEventArgs.DamageType != EDamageType.PHYSICAL)); } } foreach (PushedTarget pushedTarget in spellEventArgs.SpellTargetsOfType <PushedTarget>()) { if (pushedTarget.Target == MyController) { m_MainView.PushEntityToPosition(); } } foreach (MonsterBuffTarget monsterBuffTarget in spellEventArgs.SpellTargetsOfType <MonsterBuffTarget>()) { if (flag && monsterBuffTarget.Target == MyController) { flag = false; TakeHitDoFinishBySpell(p_sender, p_args); } } } }