enderalse/source/scripts/defaultcounter.psc

97 lines
3.6 KiB
Plaintext

ScriptName defaultCounter extends objectReference
{A simple counter. Place on an object, then increment with another script (such as defaultCounterIncrementOnDeath). When the target value is reached (or, optionally, exceeded), the counter:
- Activates itself.
- Optionally, sets a quest stage.
- Optionally, performs a specified action on a specified linkedref.
}
import game
import debug
bool property OnlyOnce Auto
{If true, activates only when the counter equals its target value. If false, activates at and above the target value. Defaults to false.}
bool property OnlyToggle Auto
{If true, activates when the counter first reaches the target value, then when it next drops below it, then when it reaches it again, etc. Overrides OnlyOnce to avoid unpredictable behavior. Defaults to false.}
;A bool to keep track of when we last toggle-activated.
bool toggleState
int property TargetValue Auto
{The first value at which the counter will trigger.}
Quest property myQuest Auto
{Optional. If Desired, when the counter reaches its target, sets myQuest to myStage.}
int property myStage Auto
{Optional. If Desired, when the counter reaches its target, sets myQuest to myStage.}
Keyword property myLinkedRefToActOn Auto
{The name of the LinkedRef to perform the action on. Defaults to the unnamed linkedref.}
int property myLinkedRefAction Auto
{Optional; defaults to 0. Determines what action to perform on the object's linkedref.
- 0 -- Activate
- 1 -- Toggle Enable/Disable
- 2 -- Enable Only
- 3 -- Disable Only
}
int count
function Increment()
count = count + 1
; ;Debug.Trace("Counter: " + count + " TargetValue: " + TargetValue + " ToggleState: " + toggleState)
;Forcibly override OnlyOnce.
if (OnlyToggle)
OnlyOnce = True
EndIf
if (count == TargetValue || (count >= TargetValue && !OnlyOnce) || (count < TargetValue && toggleState && OnlyToggle))
Self.Activate(Self)
toggleState = !toggleState
if (myQuest != None)
myQuest.SetCurrentStageID(myStage)
EndIf
;USKP 2.0.1 - If the linked ref this thing wants isn't set, then it can't do any of what's in this block.
if( GetLinkedRef(myLinkedRefToActOn) != None )
; ;Debug.Trace("Counter passed. Preparing to " + myLinkedRefAction + Self.GetLinkedRef(myLinkedRefToActOn))
if (myLinkedRefAction == 0)
; ;Debug.Trace("Activating: " + Self.GetLinkedRef(myLinkedRefToActOn))
Self.GetLinkedRef(myLinkedRefToActOn).Activate(Self)
ElseIf (myLinkedRefAction == 1)
if (Self.GetLinkedRef(myLinkedRefToActOn).IsDisabled())
Self.GetLinkedRef(myLinkedRefToActOn).Enable()
Else
Self.GetLinkedRef(myLinkedRefToActOn).Disable()
EndIf
ElseIf (myLinkedRefAction == 2)
Self.GetLinkedRef(myLinkedRefToActOn).Enable()
ElseIf (myLinkedRefAction == 3)
Self.GetLinkedRef(myLinkedRefToActOn).Disable()
EndIf
EndIf
EndIf
EndFunction
function Decrement()
count = count - 1
; ;Debug.Trace("Counter: " + count + " TargetValue: " + TargetValue + " ToggleState: " + toggleState)
if (count == TargetValue || (count >= TargetValue && !OnlyOnce) || (count < TargetValue && toggleState && OnlyToggle))
Self.Activate(Self)
toggleState = !toggleState
if (myLinkedRefAction == 0)
Self.GetLinkedRef().Activate(Self)
ElseIf (myLinkedRefAction == 1)
if (Self.GetLinkedRef(myLinkedRefToActOn).IsDisabled())
Self.GetLinkedRef(myLinkedRefToActOn).Enable()
Else
Self.GetLinkedRef(myLinkedRefToActOn).Disable()
EndIf
ElseIf (myLinkedRefAction == 2)
Self.GetLinkedRef(myLinkedRefToActOn).Disable()
ElseIf (myLinkedRefAction == 3)
Self.GetLinkedRef(myLinkedRefToActOn).Enable()
EndIf
EndIf
EndFunction