enderalse/scripts/source/trapdwethresher.psc

114 lines
2.7 KiB
Plaintext

scriptName TrapDweThresher extends MovingTrap
;
;
;This is the script for the blade trap
;Activating the trap causes it to toggle on and off
;If activated while in the process of stopping, it should be able to handle that.
;================================================================
bool property startSpinning = false auto hidden
string property startSpinningAnim = "End" auto
{anim event to start already swung}
import debug
import utility
;If Loop is true, it swings until activated again.
;If Loop is false, it swings once when activated.
bool restartLooping = false
bool finishedPlaying = false
float property initialDelay = 0.25 auto
int property MovementType = 0 auto
{This sets if the blade moves while spinning
0 = Static
1 = Short
2 = Long
3 = Start Up}
bool property loadedOnce = false auto hidden
;-----------------------------------
Function fireTrap()
;Basic wind up and fire once checking
;TRACE("fireTrap called")
isFiring = True
ResolveLeveledDamage()
hitBase.goToState("CanHit")
WindupSound.play( self as ObjectReference) ;play windup sound
wait( initialDelay ) ;wait for windup
;TRACE("Initial Delay complete")
if (fireOnlyOnce == True) ;If this can be fired only once then disarm
trapDisarmed = True
endif
;TRACE("Looping =")
;TRACE(Loop)
;Trap Guts
If MovementType != 3
PlayAnimationAndWait("TriggerUp01","BeginAnim")
endif
while(finishedPlaying == False && isLoaded == true)
;USKP 1.3.1 - 3D loaded check added to break a potential infinite loop
if( Is3DLoaded() == false )
isLoaded = False
Else
;TRACE("playing anim Single")
if MovementType == 0
PlayAnimation("LoopStatic")
; debug.Trace(self + " has recieved event " + "EndLoop")
ElseIf MovementType == 1
PlayAnimation("Loop")
; debug.Trace(self + " has recieved event " + "EndLoop")
ElseIf MovementType == 2
PlayAnimation("LoopLong")
; debug.Trace(self + " has recieved event " + "EndLoop")
ElseIf MovementType == 3
PlayAnimation("TriggerUpLoop")
endif
waitForAnimationEvent("EndLoop")
finishedPlaying = True
if (loop == TRUE) ;Reset Limiter
resetLimiter()
endif
endif
endWhile
hitBase.goToState("CannotHit")
if isLoaded
isFiring = false
if movementType < 3 && movementType >=0
PlayAnimationAndWait( "TriggerDown01", "reset" )
elseif movementType == 3
PlayAnimationAndWait( "TriggerEndUp", "TransStartUp" )
Else
; debug.Trace(self + " has invalid movementType value = " + movementType)
endif
goToState("Reset")
endif
;TRACE("fireTrap has finished")
endFunction
Function ResetLimiter()
finishedPlaying = False
EndFunction
event onCellLoad()
if !loadedOnce
if movementType == 3
playAnimation("StartUp")
endif
EndIf
endevent