208 lines
5.4 KiB
Plaintext
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
|
|
|
|
/;
|