scriptName HeadChopBlockHookupSCRIPT extends ObjectReference {This script hooks up the two people in the head chop block furniture and makes them play the chop animation together.} import utility import Debug ObjectReference executionerActor ObjectReference executioneeActor ObjectReference executionGuardActor GlobalVariable Property MQ15_SC4_ChopHeadFailsave Auto Idle property animIdle auto {This is the idle that the executionee will play when everything is ready.} Idle property playerAnimIdle auto {This is the idle that the player will play when everything is ready.} Keyword property executionerKeyword auto {The keyword that designates the executioner from the soon to be dead.} Keyword property executionGuardKeyword auto {The keyword that designates the executioner from the soon to be dead.} ;***************************************** auto STATE readyToChop Event OnActivate( ObjectReference akActionRef ) If MQ15_SC4_ChopHeadFailsave.GetValueInt() == 1 ; debug.trace(self + " OnActivate: " + akActionRef) if ( akActionRef.HasKeyword( executionerKeyword ) ) ; debug.trace(self+ "The executioner is in place: " + akActionRef ) executionerActor = akActionRef elseif ( akActionRef.HasKeyword( executionGuardKeyword ) ) ; debug.trace(self+ "The execution guard is in place: " + akActionRef ) executionGuardActor = akActionRef elseif (akActionRef == Game.GetPlayer()) ;Make sure the player can't look around during the execution ; debug.trace(self+ "The victim is in place: " + akActionRef ) executioneeActor = akActionRef else ; debug.trace(self+ "The victim is in place: " + akActionRef ) executioneeActor = akActionRef endif ;if it's ready, then do the chop! if ( executioneeActor != none && executionerActor != none ) ; if ( executioneeActor != none && executionGuardActor != none && executionerActor != none ) gotoState("chopping") ; debug.trace(self+ "Both in place, ready to chop" ) RegisterForSingleUpdate(0.5) endif EndIf endEvent endState STATE chopping ; do nothing for now endState Event OnUpdate() ; debug.trace(self + " OnUpdate") ;if it's ready, then do the chop! if ( executioneeActor != none && executionerActor != none ) ; debug.trace(self+ "CHOPPING START" ) wait(0.5) ;set up the relationship if ( !executioneeActor.AddDependentAnimatedObjectReference( executionerActor ) || !executioneeActor.AddDependentAnimatedObjectReference( executionGuardActor ) ) Notification( "dependence broken." ) endif ;play the idle and wait.. Actor myExecutionee = executioneeActor as Actor Actor myExecutioner = executionerActor as Actor ; do NOT kill the player! if myExecutionee == Game.GetPlayer() If (!myExecutioner.PlayIdle( playerAnimIdle) ) ; debug.trace(self+ "executioner play idle failed" ) EndIf if ( !myExecutionee.PlayIdle( playerAnimIdle ) ) ; debug.trace(self+ "player play idle failed" ) endif wait(5) else if ( !myExecutionee.PlayIdle( animIdle ) ) ; debug.trace(self+ " play idle failed" ) endif wait(2) endif ;Now clean up. Set the executionee to NULL, since he's no longer needed... executioneeActor.RemoveDependentAnimatedObjectReference( executionerActor ) executioneeActor.RemoveDependentAnimatedObjectReference( executionGuardActor ) executioneeActor = none gotoState("readyToChop") ; debug.trace(self+ "CHOPPING END" ) endif endEvent