void OnGrabTry(BaseEventParameters baseParams) { if (IsDead()) { return; } GrabTryEventParameters grabTryParams = (GrabTryEventParameters)baseParams; PlayerBaseAttackLogic grabAttackLogic = grabTryParams.m_AttackLogic; ChronicleManager.AddChronicle(gameObject, EChronicleCategory.Health, "On grab try"); if (CanBlockGrabAttack(grabAttackLogic)) { // Here, both players are currently playing grab attack // But one is the attacker, and the second the defender // Only the defender can trigger GrabBlocked event and start a block animation // If the player who's trying to grab is the first one to have triggered the grab attack, he's the attacker, so we can block it if (IsGrabAttacker(grabAttackLogic)) { ChronicleManager.AddChronicle(gameObject, EChronicleCategory.Health, "On grab blocked"); Utils.GetEnemyEventManager(gameObject).TriggerEvent(EPlayerEvent.GrabBlocked, new GrabBlockedEventParameters(grabAttackLogic)); m_StunInfoSC.StartStun(grabAttackLogic, EAttackResult.Blocked); PlayBlockAnimation(grabAttackLogic); } } else if (!m_StunInfoSC.IsHitStunned() && !m_StunInfoSC.IsBlockStunned() && !m_MovementComponent.IsJumping()) // A grab can't touch if player is stunned or is jumping { ChronicleManager.AddChronicle(gameObject, EChronicleCategory.Health, "On grab touched"); Utils.GetEnemyEventManager(gameObject).TriggerEvent(EPlayerEvent.GrabTouched, new GrabTouchedEventParameters(grabAttackLogic)); } }