#==================================================================================# #Addonname: MovePlayerMenu #Author: VM.Dutchshdw (Bass-Driver) #Version: 0.1 #VersionDate: 09-06-2025 #Description: # Move a player by teleportation to a different location on the map. # Admins may also move themself in ShiftU mode # Type # Go to ShiftU modes # Press the Place 'O' button to move yourself or the selected player in the moveplayermenu !mpm #==================================================================================# CatchEvent OnLapperStart() GlobalVar $AllowMoveInShiftU; $AllowMoveInShiftU = 0; EndCatchEvent CatchEvent OnConnect( $userName ) # Player event IF ($userName != "") THEN #Admin ShiftU Values SetPlayerVar($userName,"MovePly_UName",""); SetPlayerVar($userName,"MovePly_X",0); SetPlayerVar($userName,"MovePly_Y",0); SetPlayerVar($userName,"MovePly_Z",0); SetPlayerVar($userName,"MovePly_Heading",0); SetPlayerVar($userName,"MovePlayerMenuIsOpen",0); ENDIF EndCatchEvent CatchEvent OnMSO( $userName, $text ) # Player event $idxOfFirtsSpace = indexOf( $text, " "); IF( $idxOfFirtsSpace == -1 ) THEN $command = $text; $argv = ""; ELSE $command = subStr( $text,0,$idxOfFirtsSpace ); $argv = trim( subStr( $text,$idxOfFirtsSpace ) ); ENDIF SWITCH( $command ) CASE "!mpm": CASE "!moveplayermenu": IF ( UserIsAdmin( $userName ) == 1 ) THEN SetPlayerVar($userName,"MovePlayerMenuIsOpen",1); MovePlayerControlMenu($keyflags,$id); ELSE privmsg("^1ACCESS DENIED!"); ENDIF BREAK; CASE "!asu": CASE "!allowmoveinshiftu": IF ( UserIsAdmin( $userName ) == 1 ) THEN IF($argv == 1) THEN $AllowMoveInShiftU = 1; privmsg("^8Admins are allowed to move in Shift+U mode!"); ENDIF IF($argv == 0) THEN $AllowMoveInShiftU = 0; privmsg("^8Admins are not allowed to move in Shift+U mode!"); ENDIF ELSE privmsg("^1ACCESS DENIED!"); ENDIF BREAK; ENDSWITCH $ConvertShortDate = Replace(GetLapperVar( "ShortDate" ),"/","-"); $NewLine = StripLFSColor("".GetLapperVar( "ShortDate" )."-".GetLapperVar( "ShortTime" ) ."|".$userName."|".$text); EditFile($ConvertShortDate,$User_ChatLog_Dir,$NewLine,-1,".txt"); #NewLine EndCatchEvent ################################################################################## #Moving in Shift + U pressing letter O ################################################################################## CatchEvent OnObjectInfo($userName,$NumO,$Action,$ObjectsInfo) # Player event #verify if player is an admin and moving in Shift+U is allowed IF ( UserIsAdmin( $userName ) == 1 ) THEN IF($AllowMoveInShiftU == 1) THEN $ObjectInfoArray = SplitToArray($ObjectsInfo,":"); $X = $ObjectInfoArray[0]; $Y = $ObjectInfoArray[1]; $Z = $ObjectInfoArray[2]; $Type = $ObjectInfoArray[6]; IF($Type == "Trackside Object")THEN IF(GetPlayerVar($userName,"MovePly_UName") != "") THEN $Ply = GetPlayerVar($userName,"MovePly_UName"); ELSE $Ply = $userName; ENDIF joinrequest($X,$Y,GetPlayerVar($userName,"MovePly_Z"),128,GetPlayerVar($userName,"MovePly_Heading"),GetPlayerVar($Ply,"UCID"),GetPlayerVar($Ply,"PLID"),4); #Spawn Player to location with vehiclereset #Only open/refresh when ControlMenu is open. IF(GetPlayerVar($userName,"MovePlayerMenuIsOpen") == 1)THEN MovePlayerControlMenu(0,0); ENDIF ENDIF ENDIF ENDIF EndCatchEvent Sub MovePlayerControlMenu($keyflags,$id) $userName = Getcurrentplayervar("UserName"); $MovePlayerValue = GetPlayerVar($userName,"MovePly_UName"); ### Background and title openButton($userName,"ShiftU_ControlMenu_bgdlight",161,90,39,51,5,-1,16, ""); openButton($userName,"ShiftU_ControlMenu_bgdDark",162,91,37,49,5,-1,32, ""); openButton($userName,"ShiftU_ControlMenu_Title",162,91,37,5,5,-1,32, "^7Move Player Control Menu"); ### IF Admin has set an specific player to move ### IF($MovePlayerValue != "") THEN $Ply = $MovePlayerValue; ELSE $Ply = $userName; ENDIF ### Admin may set a player by username and clear set username (it will reset the player to the admins own username ### openButton($userName,"ShiftU_ControlMenu_PlyTitle",162,97,9,5,5,-1,96, "^7Player"); opentextButton($userName,"ShiftU_ControlMenu_PlySet",171,97,21,5,5,96,"Set UserName","".GetPlayerVar($Ply,"NickName"),30,SetShiftUPlayer); openButton($userName,"ShiftU_ControlMenu_Plyclr",192,97,7,5,5,-1,32+1, "Clear",ReSetPlayer); openButton($userName,"ShiftU_ControlMenu_BlankTitle",162,103,9,4,5,-1,16, ""); openButton($userName,"ShiftU_ControlMenu_CurrTitle",171,103,14,4,5,-1,16, "^0Current"); openButton($userName,"ShiftU_ControlMenu_SetTitle",185,103,14,4,5,-1,16, "^0Set"); openButton($userName,"ShiftU_ControlMenu_XAxisTitle",162,107,9,4,5,-1,96, "X-Axis:"); openButton($userName,"ShiftU_ControlMenu_YAxisTitle",162,111,9,4,5,-1,96, "Y-Axis:"); openButton($userName,"ShiftU_ControlMenu_ZAxisTitle",162,115,9,4,5,-1,96, "Z-Axis:"); openButton($userName,"ShiftU_ControlMenu_HeadingTitle",162,119,9,4,5,-1,96, "Heading:"); IF(GetPlayerVar($Ply,"OnTrack") == 1) THEN ### Get coordinates of moved player ### openButton($userName,"ShiftU_ControlMenu_XAxisCurrValue",171,107,14,4,5,-1,96, "".GetPlayerVar($Ply,"X")); openButton($userName,"ShiftU_ControlMenu_YAxisCurrValue",171,111,14,4,5,-1,96, "".GetPlayerVar($Ply,"Y")); openButton($userName,"ShiftU_ControlMenu_ZAxisCurrValue",171,115,14,4,5,-1,96, "".GetPlayerVar($Ply,"Z")); openButton($userName,"ShiftU_ControlMenu_HeadingCurrValue",171,119,14,4,5,-1,96, "".GetPlayerVar($Ply,"Heading")); ELSE ### Player is a spectator or in pit ### openButton($userName,"ShiftU_ControlMenu_XAxisCurrValue",171,107,14,4,5,-1,32+7, "NA"); openButton($userName,"ShiftU_ControlMenu_YAxisCurrValue",171,111,14,4,5,-1,32+7, "NA"); openButton($userName,"ShiftU_ControlMenu_ZAxisCurrValue",171,115,14,4,5,-1,32+7, "NA"); openButton($userName,"ShiftU_ControlMenu_HeadingCurrValue",171,119,14,4,5,-1,32+7, "NA"); ENDIF ### Values set by admin ### opentextButton($userName,"ShiftU_ControlMenu_Set_MovePly_X",185,107,14,4,5,96, "Enter X Value","".GetPlayerVar($userName,"MovePly_X"),6,SetShiftUValue); opentextButton($userName,"ShiftU_ControlMenu_Set_MovePly_Y",185,111,14,4,5,96, "Enter Y Value","".GetPlayerVar($userName,"MovePly_Y"),6,SetShiftUValue); opentextButton($userName,"ShiftU_ControlMenu_Set_MovePly_Z",185,115,14,4,5,96, "Value 0 - 60","".GetPlayerVar($userName,"MovePly_Z"),2,SetShiftUValue); opentextButton($userName,"ShiftU_ControlMenu_Set_MovePly_Heading",185,119,14,4,5,96, "Value 0 - 180 or Value - - 180","".GetPlayerVar($userName,"MovePly_Heading"),4,SetShiftUValue); IF((GetPlayerVar($userName,"MovePly_X") != 0) && (GetPlayerVar($userName,"MovePly_Y") != 0)) THEN openButton($userName,"ShiftU_ControlMenu_MovePlayer",162,124,37,5,5,-1,32+4, "Move Player",MoveCurrPlayer); ELSE openButton($userName,"ShiftU_ControlMenu_MovePlayer",162,124,37,5,5,-1,32+7, "Move Player"); ENDIF ### Functions to Get or copy or reset values. ### openButton($userName,"ShiftU_ControlMenu_GetValues",163,130,8,4,5,-1,16, "^0Get",GetCurrValues); openButton($userName,"ShiftU_ControlMenu_CopyValues",172,130,8,4,5,-1,16, "^0Copy",CopyCurrValues); openButton($userName,"ShiftU_ControlMenu_ClearSetValues",181,130,8,4,5,-1,16, "^0Reset",ReSetValues); openButton($userName,"ShiftU_ControlMenu_PrintCurrValues",190,130,8,4,5,-1,16, "^0Print",PrintCurrValues); openButton($userName,"ShiftU_ControlMenu_Close",162,135,37,5,5,-1,32, "^3Close",CloseMovePlyCntlMenu); EndSub Sub ReSetPlayer($keyflags,$id) $userName = Getcurrentplayervar("UserName"); SetPlayerVar($userName,"MovePly_UName",""); SetPlayerVar($userName,"MovePly_X",0); SetPlayerVar($userName,"MovePly_Y",0); SetPlayerVar($userName,"MovePly_Z",0); SetPlayerVar($userName,"MovePly_Heading",0); MovePlayerControlMenu(0,0); EndSub ### Function to print curr values to chat ### Sub PrintCurrValues($keyflags,$id) $userName = Getcurrentplayervar("UserName"); $MovePlayerValue = GetPlayerVar($userName,"MovePly_UName"); ### IF Admin has set a specific player to move ### IF($MovePlayerValue != "") THEN $Ply = $MovePlayerValue; ELSE $Ply = $userName; ENDIF globalmsg("^7Current coordinates of ".GetPlayerVar($Ply,"NickName")); globalmsg("^3X: ^8".GetPlayerVar($Ply,"X")." ^3Y: ^8".GetPlayerVar($Ply,"Y")." ^3Z: ^8".GetPlayerVar($Ply,"Z")." ^3Heading: ^8".GetPlayerVar($Ply,"Heading")); EndSub ### Function to copy current values to 'set' values ### Sub GetCurrValues($keyflags,$id) $userName = Getcurrentplayervar("UserName"); $MovePlayerValue = GetPlayerVar($userName,"MovePly_UName"); ### IF Admin has set a specific player to move ### IF($MovePlayerValue != "") THEN $Ply = $MovePlayerValue; ELSE $Ply = $userName; ENDIF MovePlayerControlMenu(0,0); EndSub ### Function to copy current values to 'set' values ### Sub CopyCurrValues($keyflags,$id) $userName = Getcurrentplayervar("UserName"); $MovePlayerValue = GetPlayerVar($userName,"MovePly_UName"); ### IF Admin has set a specific player to move ### IF($MovePlayerValue != "") THEN $Ply = $MovePlayerValue; ELSE $Ply = $userName; ENDIF SetPlayerVar($userName,"MovePly_X",GetPlayerVar($Ply,"X")); SetPlayerVar($userName,"MovePly_Y",GetPlayerVar($Ply,"Y")); SetPlayerVar($userName,"MovePly_Z",GetPlayerVar($Ply,"Z")); SetPlayerVar($userName,"MovePly_Heading",GetPlayerVar($Ply,"Heading")); MovePlayerControlMenu(0,0); EndSub ### ReSet the Set Values ### Sub ReSetValues($keyflags,$id) $userName = Getcurrentplayervar("UserName"); #Reset Playervalues SetPlayerVar($userName,"MovePly_X",0); SetPlayerVar($userName,"MovePly_Y",0); SetPlayerVar($userName,"MovePly_Z",0); SetPlayerVar($userName,"MovePly_Heading",0); MovePlayerControlMenu(0,0); #GoTo menu. EndSub ### Move player to the set coordinates ### Sub MoveCurrPlayer($keyflags,$id) $userName = Getcurrentplayervar("UserName"); $MovePlayerValue = GetPlayerVar($userName,"MovePly_UName"); ### IF Admin has set a specific player to move ### IF($MovePlayerValue != "") THEN $Ply = $MovePlayerValue; ELSE $Ply = $userName; ENDIF #execute only when player is on track, otherwise LFSLapper will spitt alot of errors. IF(GetPlayerVar($Ply,"OnTrack") == 1) THEN joinrequest(GetPlayerVar($Ply,"MovePly_X"),GetPlayerVar($Ply,"MovePly_Y"),GetPlayerVar($Ply,"MovePly_Z"),128,GetPlayerVar($Ply,"MovePly_Heading"),GetPlayerVar($Ply,"UCID"),GetPlayerVar($Ply,"PLID"),4); #Spawn Player to the set coordinates with vehiclereset Playerdelayedcommand($userName,"GotoControlMenu",1,GotoControlMenu); ELSE MovePlayerControlMenu(0,0); ENDIF EndSub Sub GotoControlMenu($userName) MovePlayerControlMenu(0,0); EndSub Sub SetShiftUPlayer($id,$argv) $userName = GetCurrentPlayerVar("UserName"); $currPly = getPlayerInfo( $argv ); IF( $currPly == "" ) THEN Privmsg("^3Warning: ^7Player not in the server, Check username!"); ELSE SetPlayerVar($userName,"MovePly_UName",$argv); MovePlayerControlMenu(0,0); ENDIF EndSub Sub SetShiftUValue($id,$argv) $userName = GetCurrentPlayerVar("UserName"); #trim the first 23 characters of the buttonID $SelectedValue = trim( subStr( $id,23 )); #Check if Value is numeric IF(IsNum($argv) == 1) THEN SWITCH( $SelectedValue ) CASE "MovePly_X": SetPlayerVar($userName,"MovePly_X",$argv); BREAK; CASE "MovePly_Y": SetPlayerVar($userName,"MovePly_Y",$argv); BREAK; CASE "MovePly_Z": IF(($argv >= 0) && ($argv < 60))THEN SetPlayerVar($userName,"MovePly_Z",$argv); ENDIF BREAK; CASE "MovePly_Heading": IF(((ToNum($argv) >= 0) && (ToNum($argv) <= 180)) || ((ToNum($argv) < 0) && (ToNum($argv) > -180))) THEN SetPlayerVar($userName,"MovePly_Heading",$argv); ENDIF BREAK; ENDSWITCH MovePlayerControlMenu(0,0); ENDIF EndSub #Close playerbuttons and reset playervalues Sub CloseMovePlyCntlMenu($keyflags,$id) $userName = GetCurrentPlayerVar("UserName"); SetPlayerVar($userName,"MovePly_UName",""); SetPlayerVar($userName,"MovePly_X",0); SetPlayerVar($userName,"MovePly_Y",0); SetPlayerVar($userName,"MovePly_Z",0); SetPlayerVar($userName,"MovePly_Heading",0); SetPlayerVar($userName,"MovePlayerMenuIsOpen",0); closeButtonRegex ( $userName, "ShiftU_*" ); EndSub