enderalse/source/scripts/removabletorchsconce01script.psc

116 lines
2.9 KiB
Plaintext

Scriptname RemovableTorchSconce01SCRIPT extends ObjectReference Hidden
import debug
Light Property Torch01 Auto
{The Torch01 we look for in the players inventory}
Activator Property RemovableTorch01 Auto
{Base object for torch activator that gets placed}
Bool Property StartsEmpty Auto
{If this is TRUE the sconce will start empty. Default = FALSE}
Bool Property TorchInSconce = TRUE Auto Hidden
{TRUE when there is a torch in the sonce, FALSE when there isn't. Default = TRUE}
ObjectReference Property PlacedTorch Auto Hidden
{A way to refer to the torch after it's been placed at the sconce}
Sound Property ITMGenericUp Auto
Sound Property ITMGenericDown Auto
Event OnCellLoad()
;Trace("DARYL - " + self + "Cell Loaded")
If IsDisabled()
;Remove the old torch (if we had one)
_DisablePlacedTorch()
;Trace("STEVE - " + self + "Sconce is starting disabled, going to Awaiting Activation.")
GoToState("AwaitingActivation")
ElseIf (StartsEmpty == False) || (PlacedTorch != None)
;Trace("DARYL - " + self + "Should start with a torch in it")
_EnablePlacedTorch()
GoToState("HasTorch")
Else
_DisablePlacedTorch()
GoToState("NoTorch")
EndIf
EndEvent
Function RemoveTorch()
_DisablePlacedTorch()
GoToState("NoTorch")
EndFunction
State HasTorch
Event OnActivate(ObjectReference TriggerRef)
GoToState("Busy")
;;Trace("DARYL - " + self + "Player has activated this sconce in the HasTorch State")
_DisablePlacedTorch()
TriggerRef.AddItem(Torch01)
ITMGenericUp.Play(self)
GoToState("NoTorch")
EndEvent
EndState
State NoTorch
Event OnActivate(ObjectReference TriggerRef)
;;Trace("DARYL - " + self + "Player has activated the sconce in the NoTorch State")
If TriggerRef.GetItemCount(Torch01) > 0
GoToState("Busy")
TriggerRef.RemoveItem(Torch01)
_EnablePlacedTorch()
ITMGenericDown.Play(self)
GoToState("HasTorch")
EndIf
EndEvent
EndState
State Busy
;Do Nothing
EndState
State AwaitingActivation
Event OnActivate(ObjectReference obj)
Self.Enable()
OnCellLoad()
EndEvent
EndState
Function _EnablePlacedTorch()
If PlacedTorch
PlacedTorch.Enable()
Else
PlacedTorch = Self.PlaceAtMe(RemovableTorch01)
EndIf
; No EnableLinkChain here because light sources get glitchy if Enable()/Disable() is called for them and they are already enabled/disabled
ObjectReference CurrentLink = GetLinkedRef()
While CurrentLink
If CurrentLink.IsDisabled()
CurrentLink.Enable()
EndIf
CurrentLink = CurrentLink.GetLinkedRef()
EndWhile
EndFunction
Function _DisablePlacedTorch()
If PlacedTorch
PlacedTorch.Disable()
PlacedTorch.Delete()
PlacedTorch = None
EndIf
; No DisableLinkChain here because light sources get glitchy if Enable()/Disable() is called for them and they are already enabled/disabled
ObjectReference CurrentLink = GetLinkedRef()
While CurrentLink
If CurrentLink.IsDisabled() == False
CurrentLink.Disable()
EndIf
CurrentLink = CurrentLink.GetLinkedRef()
EndWhile
EndFunction