4
Fork 0
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

169 lines
4.8 KiB

scriptName PressureReleasePlate extends TrapTriggerBase
;
;
;======================================================
import debug
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 ;This is to determine trigger to send to the trap
bool bdownVar = true
weapon property pressEffect auto
ammo property pressEffectAmmo auto
bool property DoNotAllowActors = FALSE auto hidden
objectReference property selfRef auto hidden
; Property to represent the animation state of the pressure plate. If true the plate is down.
; Setting this property will also ansure the object is animated to the right state.
bool property bDown
bool Function Get()
return bdownVar
endFunction
; Set the down state and send playAnimation event if state changed.
Function Set(bool bValue)
;if (bdownVar != bValue)
if (bValue == true)
;TraceStack("Playing Down")
playAnimation("Down")
goToState("Inactive")
else
;TraceStack("Playing Up")
playAnimation("Up")
goToState("Active")
endif
bdownVar = bValue
;endif
endFunction
endProperty
Event onCellAttach()
; debug.Trace(self + ": onCellAttach called")
selfRef = self as objectReference
objectsInTrigger = self.GetTriggerObjectCount()
if (objectsInTrigger > 0)
bDown = true
;goToState("Inactive")
else
bDown = false
;goToState("Active")
endif
endevent
; We are in the inactive state when something is in the trigger and the pressure plate is in the down position.
; This is the default state.
auto State Inactive
event OnTriggerEnter (objectReference triggerRef)
; debug.TRACE(self + " in state Inactive has been entered by " + triggerRef)
;lastTriggerRef = triggerRef
objectsInTrigger = self.GetTriggerObjectCount()
;Something has entered so we are going to push down.
if (objectsInTrigger > 0)
;/
if (bDown == false)
;if (FiniteUse == TRUE && CountUsed < Count);if finite use and count > count used
; CountUsed += 1 ;increase count for hold type triggers
;endif
; ;debug.Trace(self + ": has activated in Inactive onTriggerEnter")
;activate(selfRef)
bDown = true
endif
/;
endif
endevent
event OnTriggerLeave (objectReference triggerRef)
; debug.TRACE(self + " in state Inactive has been exited by " + triggerRef)
;lastTriggerRef = triggerRef
objectsInTrigger = self.GetTriggerObjectCount()
; If no objects left in the trigger then set to the active state.
if (objectsInTrigger == 0)
bDown = false
;goToState( "Active" )
;if (FiniteUse == FALSE)
;TRACE("Infinite Use")
; goToState( "Active" )
;endif
endif
endevent
endstate
; We are in the active state when nothing is in the trigger and the pressure plate is in the up position.
State Active
Event onBeginState()
if !selfRef
selfRef = self as objectReference
endif
;pressEffect.fire(selfRef, pressEffectAmmo)
; EFFECT IS HERE ^^^^^ UNCOMMENT ONCE PROJECTILES OR PARTICLES CAN LEAVE A TRIGGER BOX CORRECTLY
; debug.Trace(self + ": has activated in Active onBeginState")
activate(selfRef)
; If used as many times as we wished then set inactive.
if (Type != 1) ;type 1 = hold so only increase on leave
CountUsed += 1 ;increase count used
endif
if (FiniteUse == TRUE && CountUsed >= Count)
;TRACE("Finite use amount reached, going inactive.")
goToState( "DoNothing" )
endif
endEvent
event OnTriggerEnter( objectReference triggerRef )
; debug.TRACE(self + " in state Active has been entered by " + triggerRef)
objectsInTrigger = self.GetTriggerObjectCount()
;This will always be true.
if (objectsInTrigger > 0)
bDown = true
;goToState ("Inactive")
endif
endEvent
event OnTriggerLeave( objectReference triggerRef )
; debug.TRACE(self + " in state Active has been exited by " + triggerRef)
objectsInTrigger = self.GetTriggerObjectCount()
;This is just to make sure but bDowns should already be false if we are still in the active state.
if (objectsInTrigger == 0)
bDown = false
endif
endEvent
endState
State DoNothing ;Dummy state, don't do anything if animating
event OnTriggerEnter( objectReference triggerRef )
; debug.TRACE(self + " in state DoNothing has been entered by " + triggerRef)
;Put this in to make the trigger animate even when doing nothing.
;bDown = true
endEvent
event OnTriggerLeave( objectReference triggerRef )
; debug.TRACE(self + " in state DoNothing has been exited by " + triggerRef)
objectsInTrigger = self.GetTriggerObjectCount()
;Put this in to make the trigger animate even when doing nothing.
;if (objectsInTrigger == 0)
; bDown = false
;endif
endEvent
EndState
event onReset()
CountUsed = 0
self.Reset()
goToState("Inactive")
endEvent