scriptName dunFolgunthurCataLeverPuzzle extends ObjectReference Conditional {Synchronized lever-and-portcullis puzzle in Folgunthur. Used to keep all the levers and gates in sync and more explicitly manage the puzzle.} import debug import utility Action property animAction auto Bool Property SingleUse auto Bool Property HasBeenUsed auto Conditional Bool Property InPushedPosition auto int Property PuzzleLeverNumber auto ObjectReference Property Lever1 auto ObjectReference Property Lever2 auto ObjectReference Property Lever3 auto ObjectReference Property Lever4 auto ObjectReference Property Gate1 auto ObjectReference Property Gate2 auto ObjectReference Property Gate3 auto ObjectReference Property Gate4 auto Bool Lever1Up = False Bool Lever2Up = False Bool Lever3Up = False Bool Lever4Up = False Auto STATE WaitingForPlayer EVENT onActivate (objectReference triggerRef) GoToState("WaitingForLever") if (triggerRef == Lever1) Gate1.Activate(Self) Gate3.Activate(Self) Gate4.Activate(Self) if (Lever1Up) Lever1Up = False Lever1.playAnimationandWait("FullPull","FullPulledDown") Else Lever1Up = True Lever1.playAnimationandWait("FullPush","FullPushedUp") EndIf GotoState("WaitingForPlayer") ElseIf (triggerRef == Lever2) Gate2.Activate(Self) Gate3.Activate(Self) if (Lever2Up) Lever2Up = False Lever2.playAnimationandWait("FullPull","FullPulledDown") Else Lever2Up = True Lever2.playAnimationandWait("FullPush","FullPushedUp") EndIf GotoState("WaitingForPlayer") ElseIf (triggerRef == Lever3) Gate3.Activate(Self) if (Lever3Up) Lever3Up = False Lever3.playAnimationandWait("FullPull","FullPulledDown") Else Lever3Up = True Lever3.playAnimationandWait("FullPush","FullPushedUp") EndIf GotoState("WaitingForPlayer") ElseIf (triggerRef == Lever4) Gate1.Activate(Self) Gate4.Activate(Self) if (Lever4Up) Lever4Up = False Lever4.playAnimationandWait("FullPull","FullPulledDown") Else Lever4Up = True Lever4.playAnimationandWait("FullPush","FullPushedUp") EndIf GotoState("WaitingForPlayer") EndIf EndEvent EndState STATE WaitingForLever Event onActivate(objectReference triggerRef) ;Do Nothing EndEvent EndState