enderalse/source/scripts/trapgenericeffecthazard.psc

208 lines
5.4 KiB
Plaintext

scriptName TrapGenericEffectHazard extends TrapBase
;This script is for steam, fire, geysers etc.
;
;================================================================
int Count ;if Finite = 1, Determines how many times this trigger can be used
int CountUsed ;Used to compare times triggered to max triggers allowed
int Type
weapon property pressEffect auto
ammo property pressEffectAmmo auto
hazard property myHazard auto
objectReference myHazardRef
bool property HazardIsPlaced auto hidden
bool property finishedPlaying auto hidden
bool property isFiring auto hidden
bool property isLoaded auto hidden
float property initialDelay = 0.0 auto
float property minimumFiringTime = 3.0 auto
float firingTime
event onLoad()
objectReference selfRef = self
isLoaded = TRUE
if isFiring == True
fireTrap()
endif
EndEvent
event onUnload()
isLoaded = FALSE
endEvent
Function fireTrap()
;TRACE("fireTrap called")
isFiring = True
finishedPlaying = False
firingTime = (utility.getCurrentRealTime() + minimumFiringTime)
if WindupSound
WindupSound.play( self as ObjectReference) ;play windup sound
endif
utility.wait( initialDelay ) ;wait for windup
;TRACE("Initial Delay complete")
trapDisarmed = fireOnlyOnce ;If this can be fired only once then disarm
if (fireOnlyOnce == True) ;If this can be fired only once then disarm
trapDisarmed = True
endif
;Trap Guts
while(finishedPlaying == False && isLoaded == true)
if (HazardIsPlaced == FALSE)
myHazardRef = PlaceAtMe(myHazard, 1)
; ;debug.Trace(self + "has finished anim once")
HazardIsPlaced = TRUE
Else
utility.wait(0.5)
endif
finishedPlaying = True
; debug.Trace(self + " firingTime == " + firingTime)
; debug.Trace(self + " currentRealTime == " + utility.getCurrentRealTime())
if (loop == TRUE || utility.getCurrentRealTime() > firingTime) ;Reset Limiter
; ;debug.Trace(self + "is looping because loop = " + loop)
resetLimiter()
endif
endWhile
if isLoaded
isFiring = false
myHazardRef.Disable()
myHazardRef.Delete()
goToState("Reset")
endif
goToState("Reset")
;TRACE("fireTrap has finished")
endFunction
State Reset
Event OnBeginState()
GoToState ( "Idle" )
endEvent
Event OnActivate( objectReference activateRef )
EndEvent
endState
Function ResetLimiter()
finishedPlaying = False
EndFunction
;;;;;;;;;;;;;;;;;;;;;;;;;
;/
State Active
Event onBeginState()
goToState( "DoNothing" )
;pressEffect.fire(selfRef, pressEffectAmmo)
; EFFECT IS HERE ^^^^^ UNCOMMENT ONCE PROJECTILES OR PARTICLES CAN LEAVE A TRIGGER BOX CORRECTLY
activate(self as objectReference)
;playAnimationAndWait( "trigger", "reset" )
playAnimation("Down")
myHazardRef = PlaceAtMe(myHazard, 1)
if objectsInTrigger == 0
goToState( "Inactive" )
playAnimation("Up")
myHazardRef.Disable()
myHazardRef.Delete()
endif
endEvent
event OnTriggerEnter( objectReference triggerRef )
; ;debug.TRACE(self + " has been entered by " + triggerRef)
objectsInTrigger = self.GetTriggerObjectCount()
endEvent
event OnTrigger( objectReference triggerRef )
endEvent
event OnTriggerLeave( objectReference triggerRef )
; ;debug.TRACE(self + " has been exited by " + triggerRef)
objectsInTrigger = self.GetTriggerObjectCount()
if objectsInTrigger == 0
goToState ("Inactive")
playAnimation("Up")
myHazardRef.Disable()
myHazardRef.Delete()
endif
endEvent
endState
State DoNothing ;Dummy state, don't do anything if animating
event OnTriggerEnter( objectReference triggerRef )
; ;debug.TRACE(self + " has been entered by " + triggerRef)
objectsInTrigger = self.GetTriggerObjectCount()
endEvent
event OnTrigger( objectReference triggerRef )
endEvent
event OnTriggerLeave( objectReference triggerRef )
; ;debug.TRACE(self + " has been exited by " + triggerRef)
objectsInTrigger = self.GetTriggerObjectCount()
if objectsInTrigger == 0
goToState ("Inactive")
playAnimation("Up")
myHazardRef.Disable()
myHazardRef.Delete()
endif
endEvent
EndState
auto State Inactive
event onBeginState()
if (Type == 1 && objectsInTrigger == 0) ;type 1 = hold, so deprecate here if necessary
if (FiniteUse == TRUE && CountUsed < Count);if finite use and count > count used
CountUsed += 1 ;increase count for hold type triggers
endif
activate(self as objectReference)
endif
endEvent
event OnTriggerEnter (objectReference triggerRef)
; ;debug.TRACE(self + " has been entered by " + triggerRef)
lastTriggerRef = triggerRef
objectsInTrigger = self.GetTriggerObjectCount()
if (FiniteUse == TRUE && CountUsed < Count) ;if finite use and count > count used
;TRACE("Finite Use")
if (Type != 1) ;type 1 = hold so only increase on leave
CountUsed += 1 ;increase count used
;TRACE("Increasing Count on enter")
endif
goToState( "Active" )
endif
if (FiniteUse == FALSE)
;TRACE("Infinite Use")
goToState( "Active" )
endif
endevent
event OnTriggerLeave (objectReference triggerRef)
; ;debug.TRACE(self + " has been exited by " + triggerRef)
lastTriggerRef = triggerRef
objectsInTrigger = self.GetTriggerObjectCount()
if (Type == 1 && objectsInTrigger == 0) ;type 1 = hold, so deprecate here if necessary
if (FiniteUse == TRUE && CountUsed < Count);if finite use and count > count used
CountUsed += 1 ;increase count for hold type triggers
endif
activate(self as objectReference)
endif
endevent
endstate
/;