
KeylessUniversal

--[[
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 = trueNo comments yet for this script.



