72 lines
1.5 KiB
Plaintext
72 lines
1.5 KiB
Plaintext
Scriptname _00E_LightSwitchMainScript extends ObjectReference
|
|
|
|
Actor Property PlayerRef Auto
|
|
|
|
; The brightness of some lights starts glitching if enabled more than once in a row, so we have to track the light's enable status.
|
|
Int iLightStatus = -1 ; -1 - Unknown, 0 - disabled, 1 - enabled
|
|
Int iEnterCounter = 0
|
|
|
|
Event OnLoad()
|
|
If iLightStatus < 0
|
|
RegisterForSingleUpdate(0.1)
|
|
EndIf
|
|
EndEvent
|
|
|
|
Event OnTriggerEnter(ObjectReference akActionRef)
|
|
if akActionRef == PlayerRef
|
|
TurnSwitchOn()
|
|
EndIf
|
|
EndEvent
|
|
|
|
Event OnTriggerLeave(ObjectReference akActionRef)
|
|
if akActioNRef == PlayerRef
|
|
TurnSwitchOff()
|
|
EndIf
|
|
EndEvent
|
|
|
|
Event OnUpdate()
|
|
If iEnterCounter <= 0 && iLightStatus != 0
|
|
EnableDisableLight(0)
|
|
EndIf
|
|
EndEvent
|
|
|
|
Function TurnSwitchOn()
|
|
If iEnterCounter < 0
|
|
iEnterCounter = 0 ; Failsafe, can become negative on version update...
|
|
EndIf
|
|
iEnterCounter += 1
|
|
If iLightStatus != 1
|
|
EnableDisableLight(1)
|
|
EndIf
|
|
EndFunction
|
|
|
|
Function TurnSwitchOff()
|
|
iEnterCounter -= 1
|
|
If iEnterCounter <= 0
|
|
iEnterCounter = 0 ; Failsafe, can become negative on version update...
|
|
RegisterForSingleUpdate(0.1)
|
|
EndIf
|
|
EndFunction
|
|
|
|
Function EnableDisableLight(Int iNewStatus)
|
|
Int iOldStatus = (iLightStatus as Int)
|
|
iLightStatus = iNewStatus
|
|
|
|
ObjectReference lightRef = GetLinkedRef()
|
|
|
|
If iOldStatus < 0
|
|
If lightRef.IsEnabled()
|
|
iOldStatus = 1
|
|
Else
|
|
iOldStatus = 0
|
|
EndIf
|
|
EndIf
|
|
|
|
If iOldStatus != iNewStatus
|
|
If iNewStatus > 0
|
|
lightRef.Enable()
|
|
Else
|
|
lightRef.Disable()
|
|
EndIf
|
|
EndIf
|
|
EndFunction |