116 lines
2.9 KiB
Plaintext
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
|
|
|