--[[ Roblox Server Teleporter GUI - Shows on join - Search bar - Draggable / Minimizable / Closable - Modern UI --]] --// Services local Players = game:GetService("Players") local TeleportService = game:GetService("TeleportService") local AssetService = game:GetService("AssetService") local TweenService = game:GetService("TweenService") local UserInputService = game:GetService("UserInputService") local RunService = game:GetService("RunService") local player = Players.LocalPlayer local playerGui = player:WaitForChild("PlayerGui") --// GUI Container local screenGui = Instance.new("ScreenGui") screenGui.Name = "ServerTeleporterGUI" screenGui.ResetOnSpawn = false screenGui.DisplayOrder = 100 screenGui.Parent = playerGui --// Main Frame local mainFrame = Instance.new("Frame") mainFrame.Size = UDim2.new(0.42, 0, 0.65, 0) mainFrame.Position = UDim2.new(0.29, 0, 0.175, 0) mainFrame.BackgroundColor3 = Color3.fromRGB(30, 30, 35) mainFrame.BorderSizePixel = 0 mainFrame.ClipsDescendants = true mainFrame.Parent = screenGui local mainCorner = Instance.new("UICorner") mainCorner.CornerRadius = UDim.new(0, 14) mainCorner.Parent = mainFrame -- Shadow local shadow = Instance.new("ImageLabel") shadow.Size = UDim2.new(1, 24, 1, 24) shadow.Position = UDim2.new(0, -12, 0, -12) shadow.BackgroundTransparency = 1 shadow.Image = "rbxassetid://6014261993" shadow.ImageColor3 = Color3.new(0,0,0) shadow.ImageTransparency = 0.55 shadow.ZIndex = 0 shadow.Parent = mainFrame --// Header local header = Instance.new("Frame") header.Size = UDim2.new(1, 0, 0, 44) header.BackgroundColor3 = Color3.fromRGB(55, 55, 70) header.BorderSizePixel = 0 header.Parent = mainFrame local headerCorner = Instance.new("UICorner") headerCorner.CornerRadius = UDim.new(0, 14) headerCorner.Parent = header local headerGradient = Instance.new("UIGradient") headerGradient.Color = ColorSequence.new{ ColorSequenceKeypoint.new(0, Color3.fromRGB(120, 120, 255)), ColorSequenceKeypoint.new(1, Color3.fromRGB(80, 80, 200)) } headerGradient.Rotation = 90 headerGradient.Parent = header -- Title local titleLabel = Instance.new("TextLabel") titleLabel.Text = "Server Teleporter" titleLabel.Size = UDim2.new(1, -130, 1, 0) titleLabel.Position = UDim2.new(0, 16, 0, 0) titleLabel.BackgroundTransparency = 1 titleLabel.TextColor3 = Color3.fromRGB(255, 255, 255) titleLabel.Font = Enum.Font.GothamBold titleLabel.TextSize = 18 titleLabel.TextXAlignment = Enum.TextXAlignment.Left titleLabel.Parent = header -- Minimize Button local minimizeBtn = Instance.new("TextButton") minimizeBtn.Size = UDim2.new(0, 36, 0, 36) minimizeBtn.Position = UDim2.new(1, -80, 0, 4) minimizeBtn.BackgroundColor3 = Color3.fromRGB(50, 50, 65) minimizeBtn.Text = "−" minimizeBtn.TextColor3 = Color3.fromRGB(255, 255, 255) minimizeBtn.Font = Enum.Font.GothamBold minimizeBtn.TextSize = 22 minimizeBtn.Parent = header local minCorner = Instance.new("UICorner") minCorner.CornerRadius = UDim.new(0, 10) minCorner.Parent = minimizeBtn -- Close Button local closeBtn = Instance.new("TextButton") closeBtn.Size = UDim2.new(0, 36, 0, 36) closeBtn.Position = UDim2.new(1, -40, 0, 4) closeBtn.BackgroundColor3 = Color3.fromRGB(220, 50, 50) closeBtn.Text = "×" closeBtn.TextColor3 = Color3.fromRGB(255, 255, 255) closeBtn.Font = Enum.Font.GothamBold closeBtn.TextSize = 22 closeBtn.Parent = header local closeCorner = Instance.new("UICorner") closeCorner.CornerRadius = UDim.new(0, 10) closeCorner.Parent = closeBtn --// Search Bar local searchFrame = Instance.new("Frame") searchFrame.Size = UDim2.new(1, -24, 0, 38) searchFrame.Position = UDim2.new(0, 12, 0, 52) searchFrame.BackgroundColor3 = Color3.fromRGB(45, 45, 55) searchFrame.Parent = mainFrame local searchCorner = Instance.new("UICorner") searchCorner.CornerRadius = UDim.new(0, 10) searchCorner.Parent = searchFrame local searchBox = Instance.new("TextBox") searchBox.PlaceholderText = "Search places..." searchBox.Text = "" searchBox.Size = UDim2.new(1, -10, 1, 0) searchBox.Position = UDim2.new(0, 5, 0, 0) searchBox.BackgroundTransparency = 1 searchBox.TextColor3 = Color3.fromRGB(220, 220, 230) searchBox.PlaceholderColor3 = Color3.fromRGB(150, 150, 170) searchBox.Font = Enum.Font.Gotham searchBox.TextSize = 16 searchBox.TextXAlignment = Enum.TextXAlignment.Left searchBox.Parent = searchFrame local searchIcon = Instance.new("ImageLabel") searchIcon.Size = UDim2.new(0, 20, 0, 20) searchIcon.Position = UDim2.new(0, 10, 0.5, -10) searchIcon.BackgroundTransparency = 1 searchIcon.Image = "rbxassetid://7072716849" -- Magnifying glass searchIcon.ImageColor3 = Color3.fromRGB(150, 150, 170) searchIcon.Parent = searchFrame --// Scrolling List local scroll = Instance.new("ScrollingFrame") scroll.Size = UDim2.new(1, -24, 1, -100) scroll.Position = UDim2.new(0, 12, 0, 98) scroll.BackgroundTransparency = 1 scroll.BorderSizePixel = 0 scroll.ScrollBarThickness = 6 scroll.ScrollBarImageColor3 = Color3.fromRGB(100, 100, 130) scroll.ScrollingDirection = Enum.ScrollingDirection.Y scroll.Parent = mainFrame local listLayout = Instance.new("UIListLayout") listLayout.Padding = UDim.new(0, 9) listLayout.SortOrder = Enum.SortOrder.LayoutOrder listLayout.Parent = scroll --// Draggable local dragging, dragInput, dragStart, startPos local function updateDrag(input) local delta = input.Position - dragStart local pos = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) TweenService:Create(mainFrame, TweenInfo.new(0.15), {Position = pos}):Play() end header.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startPos = mainFrame.Position input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end) end end) header.InputChanged:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then dragInput = input end end) UserInputService.InputChanged:Connect(function(input) if dragging and input == dragInput then updateDrag(input) end end) --// Minimize local minimized = false local normalSize = mainFrame.Size minimizeBtn.MouseButton1Click:Connect(function() if minimized then TweenService:Create(mainFrame, TweenInfo.new(0.3, Enum.EasingStyle.Quint), {Size = normalSize}):Play() scroll.Visible = true searchFrame.Visible = true minimizeBtn.Text = "−" minimized = false else normalSize = mainFrame.Size TweenService:Create(mainFrame, TweenInfo.new(0.3, Enum.EasingStyle.Quint), {Size = UDim2.new(mainFrame.Size.X.Scale, 0, 0, 44)}):Play() scroll.Visible = false searchFrame.Visible = false minimizeBtn.Text = "+" minimized = true end end) --// Close closeBtn.MouseButton1Click:Connect(function() TweenService:Create(mainFrame, TweenInfo.new(0.2), {BackgroundTransparency = 1}):Play() task.delay(0.22, function() screenGui:Destroy() end) end) --// Hover Helper local function hover(btn, normal, hover) btn.MouseEnter:Connect(function() TweenService:Create(btn, TweenInfo.new(0.2), {BackgroundColor3 = hover}):Play() end) btn.MouseLeave:Connect(function() TweenService:Create(btn, TweenInfo.new(0.2), {BackgroundColor3 = normal}):Play() end) end --// Place Buttons Container local placeButtons = {} local function createPlaceButton(placeInfo) local btn = Instance.new("TextButton") btn.Size = UDim2.new(1, -10, 0, 52) btn.BackgroundColor3 = Color3.fromRGB(45, 45, 55) btn.TextColor3 = Color3.fromRGB(220, 220, 230) btn.Font = Enum.Font.Gotham btn.TextSize = 16 btn.TextXAlignment = Enum.TextXAlignment.Left btn.Text = " " .. (placeInfo.Name or ("Place ID: %d"):format(placeInfo.PlaceId)) btn.Parent = scroll local corner = Instance.new("UICorner") corner.CornerRadius = UDim.new(0, 10) corner.Parent = btn hover(btn, Color3.fromRGB(45,45,55), Color3.fromRGB(70,70,85)) btn.MouseButton1Click:Connect(function() btn.Text = " Teleporting..." TeleportService:Teleport(placeInfo.PlaceId, player) end) return btn end --// Search Filter local function filterPlaces(query) query = query:lower() for _, btn in ipairs(placeButtons) do local placeName = btn.Text:lower() btn.Visible = (query == "" or placeName:find(query, 1, true)) end end searchBox:GetPropertyChangedSignal("Text"):Connect(function() filterPlaces(searchBox.Text) end) --// Load Places task.spawn(function() local pages = AssetService:GetGamePlacesAsync() repeat local current = pages:GetCurrentPage() for _, info in ipairs(current) do if info.PlaceId ~= game.PlaceId then local btn = createPlaceButton(info) table.insert(placeButtons, btn) end end if not pages.IsFinished then pages:AdvanceToNextPageAsync() end until pages.IsFinished -- Initial canvas size scroll.CanvasSize = UDim2.new(0,0,0, listLayout.AbsoluteContentSize.Y + 20) end) -- Auto-resize canvas listLayout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function() scroll.CanvasSize = UDim2.new(0,0,0, listLayout.AbsoluteContentSize.Y + 20) end) --// Make sure GUI appears instantly screenGui.Enabled = true