//============================================================================= // KFSM_GrappleVictim //============================================================================= // Killing Floor 2 // Copyright (C) 2015 Tripwire Interactive LLC //============================================================================= class KFSM_GrappleVictim extends KFSM_InteractionPawnFollower; var transient KFPlayerController OwnerController; var AkEvent GrabbedSoundModeStartEvent; var AkEvent GrabbedSoundModeEndEvent; /** Recently grabbed targets get a repreive */ var float GrabVictimCooldownTime; /** Notification called when Special Move starts */ function SpecialMoveStarted(bool bForced, Name PrevMove ) { local KFPawn_Human KFPH; local KFGameInfo KFGI; local KFInventoryManager KFIM; super.SpecialMoveStarted( bForced, PrevMove ); OwnerController = KFPlayerController( PawnOwner.Controller ); if( OwnerController != none) { SetGrabEffect(OwnerController, true); if( OwnerController.IsLocalController() ) { OwnerController.PostAkEvent(GrabbedSoundModeStartEvent,,,true); if ( bDisableLook || !OwnerController.bSkipNonCriticalForceLookAt ) { OwnerController.SetForceLookAtPawn(Leader); } } } KFPH = KFPawn_Human(PawnOwner); if (KFPH != none) { if (PawnOwner.Role == ROLE_Authority) { KFGI = KFGameInfo(KFPH.WorldInfo.Game); if (KFGI != none && KFGI.DialogManager != none) { KFGI.DialogManager.PlayPlayerGrabbedDialog(KFPH); } } if (KFPOwner.WorldInfo.NetMode != NM_DedicatedServer) { KFIM = KFInventoryManager(KFPH.InvManager); if (KFIM != none && KFPH.MyKFWeapon != none && KFPH.MyKFWeapon.IsA('KFWeap_Welder')) { KFIM.SwitchToLastWeapon(); } } } KFPOwner.ShouldCrouch( false ); if( KFPOwner.bIsCrouched ) { KFPOwner.ForceUnCrouch(); } KFPOwner.bCanCrouch = false; KFPOwner.bCanJump = false; KFPOwner.bJumpCapable = false; } function SpecialMoveEnded( Name PrevMove, Name NextMove ) { super.SpecialMoveEnded( PrevMove, NextMove ); if( OwnerController != none ) { // Clear the force look at from being grabbed OwnerController.SetForceLookAtPawn(None); SetGrabEffect(OwnerController, false); if( OwnerController.IsLocalController() ) { OwnerController.PostAkEvent(GrabbedSoundModeEndEvent); } } if ( PawnOwner.Role == ROLE_Authority ) { KFPOwner.SetWeakGrabCoolDown(GrabVictimCooldownTime); } KFPOwner.bCanCrouch = KFPOwner.default.bCanCrouch; KFPOwner.bCanJump = KFPOwner.default.bCanJump; KFPOwner.bJumpCapable = KFPOwner.default.bJumpCapable; } function SetGrabEffect( KFPlayerController KFPC, bool bValue ) { KFPC.SetGrabEffect(bValue, (Leader != none && Leader.IsHumanControlled()) ); } DefaultProperties { // --------------------------------------------- // SpecialMove Handle=SM_GrappleVictim bDisableMovement=true bLockPawnRotation=false bDisableLook=false // KFSpecialMove bAllowThirdPersonWeaponAnims=true // Audio GrabbedSoundModeStartEvent=AkEvent'WW_UI_PlayerCharacter.Play_Grab_Start' GrabbedSoundModeEndEvent=AkEvent'WW_UI_PlayerCharacter.Play_Grab_Stop' GrabVictimCooldownTime=5.f }