scriptName _00E_LiftPlayerHookScript extends ObjectReference {Place this on a lift platform (and follow the tutorial in the comments!) to make a platform move when a trigger is activated.} ;-- Properties -------------------------------------- Float property MovementSpeed = 100.000 auto {How fast the platform should move - Start at 100.0 and work your way up! 1 is barely visible to the human eye.} sound property _00E_SternenstadtLifeSoundMarker auto sound property DRSStoneRotatingDiscLPM auto ObjectReference property LiftMarkerTop auto {The X-Marker Reference where the lift will stop moving at the top} Bool property DisablePlayerControlsDuringRide auto {Should the player controls be disabled once the switch has been hit?} ObjectReference property LiftMarkerBottom auto {The X-Marker Reference where the lift will stop moving at the bottom (Set this XMarker's coordinates to match the platforms coordinates!} Bool property MechanicalLift = false auto {Set this to true if the lift should play a mechanical sound instead of a "crumbling stone"-sound} Bool property UpDownHeuristic = false auto {Set this to true if you want the lift to figure out its UpDown value by getDistance heuristic} ;-- Variables --------------------------------------- Int MoveSound Int UpDown Bool bTranslationOnGoing = false ;-- Functions --------------------------------------- ; Skipped compiler generated GetState Event OnTranslationAlmostComplete() If DisablePlayerControlsDuringRide == true Game.EnablePlayerControls() EndIf bTranslationOnGoing = false sound.StopInstance(MoveSound) If UpDown == 0 UpDown = 1 ElseIf UpDown == 1 UpDown = 0 EndIf EndEvent ; Skipped compiler generated GotoState Event OnActivate(ObjectReference akActionRef) bTranslationOnGoing = true If DisablePlayerControlsDuringRide == true Game.DisablePlayerControls() EndIf If UpDownHeuristic ; decide whether to go up or down If self.getDistance(LiftMarkerTop) < self.getDistance(LiftMarkerBottom) UpDown = 1 Else UpDown = 0 Endif Endif If UpDown == 0 LiftMarkerTop.SetAngle(self.GetAngleX(), self.GetAngleY(), self.GetAngleZ()) self.TranslateToRef(LiftMarkerTop, MovementSpeed, 10.0000) ElseIf UpDown == 1 self.TranslateToRef(LiftMarkerBottom, MovementSpeed, 10.0000) LiftMarkerBottom.SetAngle(self.GetAngleX(), self.GetAngleY(), self.GetAngleZ()) EndIf If MechanicalLift == true MoveSound = _00E_SternenstadtLifeSoundMarker.Play(self as ObjectReference) Else MoveSound = DRSStoneRotatingDiscLPM.Play(self as ObjectReference) EndIf EndEvent Event OnCellDetach() If bTranslationOnGoing == true Self.StopTranslation() ; stop translation? is this even necessary? EndIf EndEvent Event OnCellAttach() ; there seems to be some kind of bug where lifts get disabled(or their 3D model is no longer loaded?) for some reason ; couldn't reproduce it but there were reports (might actually have something do to with them being translated?) Self.Enable() If bTranslationOnGoing == true ; resume translation in case they were mid translation when the player exited the cell Self.Activate(Self) EndIf EndEvent