
Keyless

--[[
Apollo Hub - Roblox LocalScript
Categorias: Informação, Início, Jogador, Jogadores, Avatar, Casa, Áudio/Música,
Proteção, Teleporte, Configuração, Crédito
COMO USAR:
1. Coloque este script como um LocalScript dentro de StarterPlayer > StarterPlayerScripts
(ou dentro de um ScreenGui em StarterGui, como LocalScript).
2. Ao entrar no jogo vai aparecer um botão (ícone) no canto superior esquerdo.
3. Clique nele para abrir/fechar o painel.
OBS: As categorias aqui são só a estrutura visual (placeholders), exceto
Informação, Início, Jogador, Jogadores, Avatar e Teleporte/Configuração,
que já vêm com conteúdo pronto.
Pra cada categoria fazer algo de verdade (teleportar, trocar avatar, etc.)
você precisa ligar isso a um sistema do SEU jogo (RemoteEvents, módulos etc.).
ATUALIZAÇÕES:
- Ícones novos em "Jogador" e "Jogadores".
- Ícones das categorias maiores.
- Aba "Informação" com créditos + Discord.
- Aba "Início" com status do jogador, servidor e resolução (FOV da câmera).
- Aba "Jogador" com barras de Velocidade / Super Pulo / Gravidade (0-1000) + botão de reset.
- Aba "Jogadores" com seletor de jogador (busca + lista + foto + id), Teleportar,
Visualizar (spectate) e Atualizar lista.
- Aba "Avatar" com seletor de jogador, botão de copiar o visual completo (corpo,
roupas, acessórios, cores e altura/escala) e um sistema de "código de skin"
pra copiar/colar (igual a ideia de skins do Brookhaven, mas só visual no cliente).
- Popup de boas-vindas atualizado com botão de Discord + OK.
IMPORTANTE SOBRE A ABA "AVATAR":
Mudar a aparência via HumanoidDescription a partir de um LocalScript só é visível
PRA VOCÊ MESMO. O Roblox não deixa um cliente mudar o visual de um jeito que os
outros jogadores da sala vejam — isso só é possível com um Script (servidor).
Então o "código de skin" daqui serve pra você guardar/compartilhar uma combinação
de visual e aplicar localmente, não pra sincronizar com todo mundo no servidor.
]]
local Players = game:GetService("Players")
local TweenService = game:GetService("TweenService")
local UserInputService = game:GetService("UserInputService")
local LocalPlayer = Players.LocalPlayer
local PlayerGui = LocalPlayer:WaitForChild("PlayerGui")
local oldGui = PlayerGui:FindFirstChild("ApolloUI")
if oldGui then oldGui:Destroy() end
------------------------------------------------------------
-- IMAGENS (rbxassetid)
------------------------------------------------------------
local IMAGES = {
Background = "rbxassetid://112936672736233",
OpenButton = "rbxassetid://75536915971879",
Informacao = "rbxassetid://99817994990650",
Inicio = "rbxassetid://96654633860104",
Jogador = "rbxassetid://100103388050732",
Jogadores = "rbxassetid://87153697054693",
Avatar = "rbxassetid://94082885196830",
Casa = "rbxassetid://82488438051860",
Musica = "rbxassetid://83223736609777",
Protecao = "rbxassetid://106618616722076",
Teleporte = "rbxassetid://85775708362810",
Configuracao = "rbxassetid://126678377094199",
Discord = "", -- coloque aqui o rbxassetid do seu ícone do Discord quando tiver um
}
-- Link de convite do Discord. Deixe "" enquanto ainda não tiver um servidor.
local DISCORD_LINK = ""
------------------------------------------------------------
-- CORES (tema roxo)
------------------------------------------------------------
local COLORS = {
Background = Color3.fromRGB(20, 12, 30),
Panel = Color3.fromRGB(70, 20, 120),
PanelLight = Color3.fromRGB(95, 30, 160),
Purple = Color3.fromRGB(170, 60, 245),
Text = Color3.fromRGB(240, 240, 245),
TextDim = Color3.fromRGB(200, 180, 225),
}
------------------------------------------------------------
-- UTILITÁRIOS
------------------------------------------------------------
local function create(class, props, children)
local inst = Instance.new(class)
for prop, value in pairs(props or {}) do
inst[prop] = value
end
for _, child in ipairs(children or {}) do
child.Parent = inst
end
return inst
end
local function corner(radius)
return create("UICorner", { CornerRadius = UDim.new(0, radius or 10) })
end
local function stroke(color, thickness)
return create("UIStroke", {
Color = color or COLORS.Purple,
Thickness = thickness or 1.5,
ApplyStrokeMode = Enum.ApplyStrokeMode.Border,
})
end
------------------------------------------------------------
-- SCREEN GUI
------------------------------------------------------------
local ScreenGui = create("ScreenGui", {
Name = "ApolloUI",
ResetOnSpawn = false,
ZIndexBehavior = Enum.ZIndexBehavior.Sibling,
Parent = PlayerGui,
})
------------------------------------------------------------
-- BOTÃO PARA ABRIR O PAINEL
------------------------------------------------------------
local OpenButton = create("TextButton", {
Name = "OpenButton",
Parent = ScreenGui,
Size = UDim2.new(0, 54, 0, 54),
Position = UDim2.new(0, 20, 0, 20),
BackgroundColor3 = COLORS.Panel,
BackgroundTransparency = 0.15,
AutoButtonColor = false,
Text = "",
}, {
corner(14),
stroke(COLORS.Purple, 2),
create("ImageLabel", {
Name = "Icon",
AnchorPoint = Vector2.new(0.5, 0.5),
Position = UDim2.new(0.5, 0, 0.5, 0),
Size = UDim2.new(0, 32, 0, 32),
BackgroundTransparency = 1,
Image = IMAGES.OpenButton,
ScaleType = Enum.ScaleType.Fit,
}),
})
------------------------------------------------------------
-- FRAME PRINCIPAL
------------------------------------------------------------
local MainFrame = create("Frame", {
Name = "MainFrame",
Parent = ScreenGui,
AnchorPoint = Vector2.new(0.5, 0.5),
Position = UDim2.new(0.5, 0, 0.5, 0),
Size = UDim2.new(0, 0, 0, 0),
BackgroundColor3 = COLORS.Background,
BackgroundTransparency = 1,
ClipsDescendants = true,
Visible = false,
}, {
corner(16),
stroke(COLORS.Purple, 2),
})
-- Imagem de fundo do painel inteiro
local BackgroundImage = create("ImageLabel", {
Name = "BackgroundImage",
Parent = MainFrame,
Size = UDim2.new(1, 0, 1, 0),
BackgroundColor3 = COLORS.Background,
BackgroundTransparency = 0.25,
Image = IMAGES.Background,
ScaleType = Enum.ScaleType.Crop,
ImageTransparency = 0.05,
ZIndex = 0,
}, { corner(16) })
local FULL_SIZE = UDim2.new(0, 640, 0, 430)
local MIN_SIZE = UDim2.new(0, 640, 0, 42)
------------------------------------------------------------
-- BARRA SUPERIOR
------------------------------------------------------------
local TopBar = create("Frame", {
Name = "TopBar",
Parent = MainFrame,
Size = UDim2.new(1, 0, 0, 42),
BackgroundColor3 = COLORS.Panel,
BackgroundTransparency = 0.25,
ZIndex = 2,
}, { corner(16) })
create("Frame", {
Parent = TopBar,
Size = UDim2.new(1, 0, 0, 16),
Position = UDim2.new(0, 0, 1, -16),
BackgroundColor3 = COLORS.Panel,
BackgroundTransparency = 0.25,
BorderSizePixel = 0,
ZIndex = 1,
})
create("ImageLabel", {
Name = "TitleIcon",
Parent = TopBar,
BackgroundTransparency = 1,
Position = UDim2.new(0, 16, 0.5, -12),
Size = UDim2.new(0, 24, 0, 24),
Image = IMAGES.OpenButton,
ScaleType = Enum.ScaleType.Fit,
ZIndex = 2,
})
create("TextLabel", {
Parent = TopBar,
BackgroundTransparency = 1,
Position = UDim2.new(0, 48, 0, 0),
Size = UDim2.new(0, 280, 1, 0),
Text = "Apollo Hub",
TextXAlignment = Enum.TextXAlignment.Left,
Font = Enum.Font.GothamBold,
TextSize = 16,
TextColor3 = COLORS.Text,
ZIndex = 2,
})
local CloseButton = create("TextButton", {
Name = "CloseButton",
Parent = TopBar,
AnchorPoint = Vector2.new(1, 0.5),
Position = UDim2.new(1, -10, 0.5, 0),
Size = UDim2.new(0, 28, 0, 28),
BackgroundColor3 = COLORS.PanelLight,
Text = "X",
TextColor3 = COLORS.Text,
Font = Enum.Font.GothamBold,
TextSize = 14,
AutoButtonColor = false,
ZIndex = 2,
}, { corner(8), stroke(COLORS.Purple, 1.5) })
local MinimizeButton = create("TextButton", {
Name = "MinimizeButton",
Parent = TopBar,
AnchorPoint = Vector2.new(1, 0.5),
Position = UDim2.new(1, -46, 0.5, 0),
Size = UDim2.new(0, 28, 0, 28),
BackgroundColor3 = COLORS.PanelLight,
Text = "-",
TextColor3 = COLORS.Text,
Font = Enum.Font.GothamBold,
TextSize = 18,
AutoButtonColor = false,
ZIndex = 2,
}, { corner(8), stroke(COLORS.Purple, 1.5) })
------------------------------------------------------------
-- CONTAINER (sidebar + conteúdo)
------------------------------------------------------------
local Container = create("Frame", {
Name = "Container",
Parent = MainFrame,
Position = UDim2.new(0, 0, 0, 42),
Size = UDim2.new(1, 0, 1, -42),
BackgroundTransparency = 1,
ZIndex = 2,
})
------------------------------------------------------------
-- SIDEBAR
------------------------------------------------------------
local Sidebar = create("Frame", {
Name = "Sidebar",
Parent = Container,
Size = UDim2.new(0, 190, 1, 0),
BackgroundColor3 = COLORS.Panel,
BackgroundTransparency = 0.3,
})
create("UIListLayout", {
Parent = Sidebar,
Padding = UDim.new(0, 4),
SortOrder = Enum.SortOrder.LayoutOrder,
})
create("UIPadding", {
Parent = Sidebar,
PaddingTop = UDim.new(0, 8),
PaddingLeft = UDim.new(0, 6),
PaddingRight = UDim.new(0, 6),
})
------------------------------------------------------------
-- ÁREA DE CONTEÚDO
------------------------------------------------------------
local ContentArea = create("Frame", {
Name = "ContentArea",
Parent = Container,
Position = UDim2.new(0, 190, 0, 0),
Size = UDim2.new(1, -190, 1, 0),
BackgroundTransparency = 1,
})
------------------------------------------------------------
-- CATEGORIAS (nome + ícone, usa imagem quando disponível, senão emoji)
------------------------------------------------------------
local categorias = {
{ nome = "Informação", icone = "ℹ️", imagem = IMAGES.Informacao },
{ nome = "Início", icone = "🏠", imagem = IMAGES.Inicio },
{ nome = "Jogador", icone = "🧍", imagem = IMAGES.Jogador },
{ nome = "Jogadores", icone = "👥", imagem = IMAGES.Jogadores },
{ nome = "Avatar", icone = "🧥", imagem = IMAGES.Avatar },
{ nome = "Casa", icone = "🏡", imagem = IMAGES.Casa },
{ nome = "Áudio/Música", icone = "🎵", imagem = IMAGES.Musica },
{ nome = "Proteção", icone = "🛡️", imagem = IMAGES.Protecao },
{ nome = "Teleporte", icone = "🌀", imagem = IMAGES.Teleporte },
{ nome = "Configuração", icone = "⚙️", imagem = IMAGES.Configuracao },
{ nome = "Crédito", icone = "⭐" },
}
local tabButtons = {}
local pages = {}
local currentTab = nil
local function selectTab(name)
if currentTab == name then return end
currentTab = name
for tabName, data in pairs(tabButtons) do
local isSelected = (tabName == name)
TweenService:Create(data.bar, TweenInfo.new(0.18, Enum.EasingStyle.Quad), {
BackgroundTransparency = isSelected and 0 or 1,
}):Play()
TweenService:Create(data.label, TweenInfo.new(0.18, Enum.EasingStyle.Quad), {
TextColor3 = isSelected and COLORS.Text or COLORS.TextDim,
}):Play()
data.button.BackgroundColor3 = isSelected and COLORS.PanelLight or COLORS.Panel
data.button.BackgroundTransparency = isSelected and 0.1 or 0.4
end
for pageName, page in pairs(pages) do
page.Visible = (pageName == name)
end
end
for i, cat in ipairs(categorias) do
local nome = cat.nome
local temImagem = cat.imagem ~= nil and cat.imagem ~= ""
local TabButton = create("Frame", {
Name = nome,
Parent = Sidebar,
LayoutOrder = i,
Size = UDim2.new(1, 0, 0, 34),
BackgroundColor3 = COLORS.Panel,
BackgroundTransparency = 0.4,
ClipsDescendants = true,
}, { corner(8) })
local SelectBar = create("Frame", {
Name = "SelectBar",
Parent = TabButton,
AnchorPoint = Vector2.new(0, 0.5),
Size = UDim2.new(0, 4, 1, -10),
Position = UDim2.new(0, 0, 0.5, 0),
BackgroundColor3 = COLORS.Purple,
BackgroundTransparency = 1,
}, { corner(4) })
local textOffsetX = 14
if temImagem then
create("ImageLabel", {
Name = "Icon",
Parent = TabButton,
Position = UDim2.new(0, 10, 0.5, -12),
Size = UDim2.new(0, 24, 0, 24),
BackgroundTransparency = 1,
Image = cat.imagem,
ScaleType = Enum.ScaleType.Fit,
})
textOffsetX = 42
end
local Label = create("TextLabel", {
Parent = TabButton,
BackgroundTransparency = 1,
Position = UDim2.new(0, textOffsetX, 0, 0),
Size = UDim2.new(1, -textOffsetX - 6, 1, 0),
Text = temImagem and nome or (cat.icone .. " " .. nome),
TextXAlignment = Enum.TextXAlignment.Left,
Font = Enum.Font.Gotham,
TextSize = 14,
TextColor3 = COLORS.TextDim,
})
local ClickDetector = create("TextButton", {
Parent = TabButton,
BackgroundTransparency = 1,
Size = UDim2.new(1, 0, 1, 0),
Text = "",
})
ClickDetector.MouseButton1Click:Connect(function()
selectTab(nome)
end)
tabButtons[nome] = { button = TabButton, bar = SelectBar, label = Label }
local Page = create("ScrollingFrame", {
Name = nome .. "Page",
Parent = ContentArea,
Size = UDim2.new(1, 0, 1, 0),
BackgroundTransparency = 1,
Visible = false,
ScrollBarThickness = 4,
ScrollBarImageColor3 = COLORS.Purple,
AutomaticCanvasSize = Enum.AutomaticSize.Y,
CanvasSize = UDim2.new(0, 0, 0, 0),
})
create("UIPadding", {
Parent = Page,
PaddingTop = UDim.new(0, 14),
PaddingLeft = UDim.new(0, 16),
PaddingRight = UDim.new(0, 16),
})
create("UIListLayout", {
Parent = Page,
Padding = UDim.new(0, 8),
SortOrder = Enum.SortOrder.LayoutOrder,
})
local HeaderRow = create("Frame", {
Parent = Page,
BackgroundTransparency = 1,
Size = UDim2.new(1, 0, 0, 30),
})
local headerTextOffset = 0
if temImagem then
create("ImageLabel", {
Parent = HeaderRow,
Position = UDim2.new(0, 0, 0.5, -15),
Size = UDim2.new(0, 30, 0, 30),
BackgroundTransparency = 1,
Image = cat.imagem,
ScaleType = Enum.ScaleType.Fit,
})
headerTextOffset = 40
end
create("TextLabel", {
Parent = HeaderRow,
BackgroundTransparency = 1,
Position = UDim2.new(0, headerTextOffset, 0, 0),
Size = UDim2.new(1, -headerTextOffset, 1, 0),
Text = temImagem and nome or (cat.icone .. " " .. nome),
Font = Enum.Font.GothamBold,
TextSize = 20,
TextColor3 = COLORS.Text,
TextXAlignment = Enum.TextXAlignment.Left,
})
-- "Informação", "Início", "Jogador", "Jogadores", "Avatar", "Teleporte" e
-- "Configuração" têm conteúdo próprio (montado depois deste loop), então
-- não recebem o placeholder genérico.
if nome ~= "Informação" and nome ~= "Início" and nome ~= "Jogador" and nome ~= "Jogadores"
and nome ~= "Avatar" and nome ~= "Teleporte" and nome ~= "Configuração" then
create("TextLabel", {
Parent = Page,
BackgroundTransparency = 1,
Size = UDim2.new(1, 0, 0, 20),
Text = 'Conteúdo da categoria "' .. nome .. '" vai aqui.',
Font = Enum.Font.Gotham,
TextSize = 13,
TextColor3 = COLORS.TextDim,
TextXAlignment = Enum.TextXAlignment.Left,
})
end
pages[nome] = Page
end
------------------------------------------------------------
-- CONTEÚDO PERSONALIZADO: INFORMAÇÃO
------------------------------------------------------------
do
local InfoPage = pages["Informação"]
local CreditCard = create("Frame", {
Name = "CreditCard",
Parent = InfoPage,
LayoutOrder = 1,
Size = UDim2.new(1, 0, 0, 150),
BackgroundColor3 = COLORS.Panel,
BackgroundTransparency = 0.35,
}, { corner(10), stroke(COLORS.Purple, 1.5) })
create("UIPadding", {
Parent = CreditCard,
PaddingTop = UDim.new(0, 14),
PaddingLeft = UDim.new(0, 14),
PaddingRight = UDim.new(0, 14),
})
create("UIListLayout", {
Parent = CreditCard,
Padding = UDim.new(0, 8),
SortOrder = Enum.SortOrder.LayoutOrder,
})
create("TextLabel", {
Parent = CreditCard,
LayoutOrder = 1,
BackgroundTransparency = 1,
Size = UDim2.new(1, 0, 0, 20),
Text = "By Lightbolt_dev",
Font = Enum.Font.GothamBold,
TextSize = 14,
TextColor3 = COLORS.Purple,
TextXAlignment = Enum.TextXAlignment.Left,
})
create("TextLabel", {
Parent = CreditCard,
LayoutOrder = 2,
BackgroundTransparency = 1,
Size = UDim2.new(1, 0, 0, 18),
Text = "Dono: Lightbolt_dev",
Font = Enum.Font.Gotham,
TextSize = 13,
TextColor3 = COLORS.Text,
TextXAlignment = Enum.TextXAlignment.Left,
})
create("TextLabel", {
Parent = CreditCard,
LayoutOrder = 3,
BackgroundTransparency = 1,
Size = UDim2.new(1, 0, 0, 18),
Text = "Tik Tok: light.bolt",
Font = Enum.Font.Gotham,
TextSize = 13,
TextColor3 = COLORS.Text,
TextXAlignment = Enum.TextXAlignment.Left,
})
local DiscordRow = create("Frame", {
Parent = CreditCard,
LayoutOrder = 4,
BackgroundTransparency = 1,
Size = UDim2.new(1, 0, 0, 22),
})
if IMAGES.Discord ~= "" then
create("ImageLabel", {
Parent = DiscordRow,
Position = UDim2.new(0, 0, 0.5, -9),
Size = UDim2.new(0, 18, 0, 18),
BackgroundTransparency = 1,
Image = IMAGES.Discord,
ScaleType = Enum.ScaleType.Fit,
})
end
create("TextLabel", {
Name = "DiscordLabel",
Parent = DiscordRow,
Position = UDim2.new(0, IMAGES.Discord ~= "" and 24 or 0, 0, 0),
Size = UDim2.new(1, IMAGES.Discord ~= "" and -24 or 0, 1, 0),
BackgroundTransparency = 1,
Text = (DISCORD_LINK ~= "" and ("Discord: " .. DISCORD_LINK)) or "Discord: ainda não temos",
Font = Enum.Font.Gotham,
TextSize = 13,
TextColor3 = COLORS.Text,
TextXAlignment = Enum.TextXAlignment.Left,
})
end
------------------------------------------------------------
-- CONTEÚDO PERSONALIZADO: INÍCIO
------------------------------------------------------------
do
local InicioPage = pages["Início"]
local RunService = game:GetService("RunService")
------------------------------------------------------
-- Status do jogador
------------------------------------------------------
local StatusCard = create("Frame", {
Name = "StatusCard",
Parent = InicioPage,
LayoutOrder = 1,
Size = UDim2.new(1, 0, 0, 100),
BackgroundColor3 = COLORS.Panel,
BackgroundTransparency = 0.35,
}, { corner(10), stroke(COLORS.Purple, 1.5) })
local AvatarImage = create("ImageLabel", {
Name = "AvatarImage",
Parent = StatusCard,
Position = UDim2.new(0, 12, 0.5, -38),
Size = UDim2.new(0, 76, 0, 76),
BackgroundColor3 = COLORS.PanelLight,
Image = "",
ScaleType = Enum.ScaleType.Fit,
}, { corner(10) })
task.spawn(function()
local ok, content = pcall(function()
return Players:GetUserThumbnailAsync(
LocalPlayer.UserId,
Enum.ThumbnailType.HeadShot,
Enum.ThumbnailSize.Size180x180
)
end)
if ok and content then
AvatarImage.Image = content
end
end)
local InfoColumn = create("Frame", {
Parent = StatusCard,
Position = UDim2.new(0, 100, 0, 10),
Size = UDim2.new(1, -112, 1, -20),
BackgroundTransparency = 1,
})
create("UIListLayout", {
Parent = InfoColumn,
Padding = UDim.new(0, 2),
SortOrder = Enum.SortOrder.LayoutOrder,
})
create("TextLabel", {
Parent = InfoColumn,
LayoutOrder = 1,
BackgroundTransparency = 1,
Size = UDim2.new(1, 0, 0, 18),
Text = "Nome: " .. LocalPlayer.Name,
Font = Enum.Font.Gotham,
TextSize = 13,
TextColor3 = COLORS.Text,
TextXAlignment = Enum.TextXAlignment.Left,
})
create("TextLabel", {
Parent = InfoColumn,
LayoutOrder = 2,
BackgroundTransparency = 1,
Size = UDim2.new(1, 0, 0, 18),
Text = "Id: " .. LocalPlayer.UserId,
Font = Enum.Font.Gotham,
TextSize = 13,
TextColor3 = COLORS.Text,
TextXAlignment = Enum.TextXAlignment.Left,
})
local TempoLabel = create("TextLabel", {
Parent = InfoColumn,
LayoutOrder = 3,
BackgroundTransparency = 1,
Size = UDim2.new(1, 0, 0, 18),
Text = "Tempo: 0s",
Font = Enum.Font.Gotham,
TextSize = 13,
TextColor3 = COLORS.Text,
TextXAlignment = Enum.TextXAlignment.Left,
})
local FpsLabel = create("TextLabel", {
Parent = InfoColumn,
LayoutOrder = 4,
BackgroundTransparency = 1,
Size = UDim2.new(1, 0, 0, 18),
Text = "Fps: 0",
Font = Enum.Font.Gotham,
TextSize = 13,
TextColor3 = COLORS.Text,
TextXAlignment = Enum.TextXAlignment.Left,
})
-- Tempo jogado
local joinTime = os.clock()
local function formatTempo(segundos)
local h = math.floor(segundos / 3600)
local m = math.floor((segundos % 3600) / 60)
local s = math.floor(segundos % 60)
if h > 0 then
return string.format("%dh %02dm %02ds", h, m, s)
end
return string.format("%02dm %02ds", m, s)
end
task.spawn(function()
while InicioPage.Parent do
TempoLabel.Text = "Tempo: " .. formatTempo(os.clock() - joinTime)
task.wait(1)
end
end)
-- FPS
local frameCount = 0
local fpsTimer = 0
RunService.Heartbeat:Connect(function(dt)
frameCount += 1
fpsTimer += dt
if fpsTimer >= 0.5 then
FpsLabel.Text = "Fps: " .. math.floor(frameCount / fpsTimer)
frameCount = 0
fpsTimer = 0
end
end)
------------------------------------------------------
-- Servidor
------------------------------------------------------
create("TextLabel", {
Parent = InicioPage,
LayoutOrder = 2,
BackgroundTransparency = 1,
Size = UDim2.new(1, 0, 0, 22),
Text = "--server--",
Font = Enum.Font.GothamBold,
TextSize = 15,
TextColor3 = COLORS.Purple,
TextXAlignment = Enum.TextXAlignment.Left,
})
local ServerCard = create("Frame", {
Parent = InicioPage,
LayoutOrder = 3,
Size = UDim2.new(1, 0, 0, 56),
BackgroundColor3 = COLORS.Panel,
BackgroundTransparency = 0.35,
}, { corner(10), stroke(COLORS.Purple, 1.5) })
create("UIPadding", {
Parent = ServerCard,
PaddingTop = UDim.new(0, 8),
PaddingLeft = UDim.new(0, 12),
})
create("UIListLayout", {
Parent = ServerCard,
Padding = UDim.new(0, 2),
SortOrder = Enum.SortOrder.LayoutOrder,
})
create("TextLabel", {
Parent = ServerCard,
LayoutOrder = 1,
BackgroundTransparency = 1,
Size = UDim2.new(1, -12, 0, 18),
Text = "Id do server: " .. game.JobId,
Font = Enum.Font.Gotham,
TextSize = 13,
TextColor3 = COLORS.Text,
TextXAlignment = Enum.TextXAlignment.Left,
})
local OnlineLabel = create("TextLabel", {
Parent = ServerCard,
LayoutOrder = 2,
BackgroundTransparency = 1,
Size = UDim2.new(1, -12, 0, 18),
Text = "Online: " .. #Players:GetPlayers() .. "/" .. Players.MaxPlayers,
Font = Enum.Font.Gotham,
TextSize = 13,
TextColor3 = COLORS.Text,
TextXAlignment = Enum.TextXAlignment.Left,
})
local function updateOnline()
OnlineLabel.Text = "Online: " .. #Players:GetPlayers() .. "/" .. Players.MaxPlayers
end
Players.PlayerAdded:Connect(updateOnline)
Players.PlayerRemoving:Connect(function()
task.wait()
updateOnline()
end)
------------------------------------------------------
-- Resolução (FOV da câmera)
------------------------------------------------------
create("TextLabel", {
Parent = InicioPage,
LayoutOrder = 4,
BackgroundTransparency = 1,
Size = UDim2.new(1, 0, 0, 22),
Text = "--resolução--",
Font = Enum.Font.GothamBold,
TextSize = 15,
TextColor3 = COLORS.Purple,
TextXAlignment = Enum.TextXAlignment.Left,
})
local ResRow = create("Frame", {
Parent = InicioPage,
LayoutOrder = 5,
Size = UDim2.new(1, 0, 0, 34),
BackgroundTransparency = 1,
})
create("UIListLayout", {
Parent = ResRow,
FillDirection = Enum.FillDirection.Horizontal,
Padding = UDim.new(0, 8),
SortOrder = Enum.SortOrder.LayoutOrder,
})
local BASE_FOV = 70
local resolucoes = {
{ label = "1.85", mult = 1.85 },
{ label = "1.75", mult = 1.75 },
{ label = "Normal", mult = 1.0 },
{ label = "0.85", mult = 0.85 },
{ label = "0.75", mult = 0.75 },
}
local resButtons = {}
local selectedMult = 1.0
local function applyFOV(mult)
local cam = workspace.CurrentCamera
if cam then
cam.FieldOfView = math.clamp(BASE_FOV * mult, 1, 120)
end
end
workspace:GetPropertyChangedSignal("CurrentCamera"):Connect(function()
task.wait()
applyFOV(selectedMult)
end)
for i, res in ipairs(resolucoes) do
local Btn = create("TextButton", {
Name = "Res_" .. res.label,
Parent = ResRow,
LayoutOrder = i,
Size = UDim2.new(0, 70, 1, 0),
BackgroundColor3 = res.mult == 1.0 and COLORS.PanelLight or COLORS.Panel,
BackgroundTransparency = res.mult == 1.0 and 0.1 or 0.4,
Text = res.label,
Font = Enum.Font.GothamBold,
TextSize = 13,
TextColor3 = COLORS.Text,
AutoButtonColor = false,
}, { corner(8), stroke(COLORS.Purple, 1.5) })
resButtons[res.label] = Btn
Btn.MouseButton1Click:Connect(function()
selectedMult = res.mult
applyFOV(selectedMult)
for _, b in pairs(resButtons) do
b.BackgroundColor3 = COLORS.Panel
b.BackgroundTransparency = 0.4
end
Btn.BackgroundColor3 = COLORS.PanelLight
Btn.BackgroundTransparency = 0.1
end)
end
end
------------------------------------------------------------
-- CONTEÚDO PERSONALIZADO: JOGADOR (Velocidade / Super Pulo / Gravidade)
------------------------------------------------------------
do
local JogadorPage = pages["Jogador"]
-- Valores padrão "normais" do Roblox, usados pelo botão de reset
local DEFAULTS = {
Velocidade = 16,
SuperPulo = 50,
Gravidade = 196.2,
}
local statState = {
Velocidade = DEFAULTS.Velocidade,
SuperPulo = DEFAULTS.SuperPulo,
Gravidade = DEFAULTS.Gravidade,
}
local SLIDER_MIN = 0
local SLIDER_MAX = 1000 -- todas as 3 barras vão de 0 a 1000, como pedido
local function applyStats()
workspace.Gravity = statState.Gravidade
local char = LocalPlayer.Character
if char then
local hum = char:FindFirstChildOfClass("Humanoid")
if hum then
hum.WalkSpeed = statState.Velocidade
hum.UseJumpPower = true
hum.JumpPower = statState.SuperPulo
end
end
end
LocalPlayer.CharacterAdded:Connect(function()
task.wait(0.1)
applyStats()
end)
-- guarda a função "setValue" de cada barra, pra poder resetar depois
local sliderSetters = {}
local function createStatRow(layoutOrder, key, label)
local Row = create("Frame", {
Name = key .. "Row",
Parent = JogadorPage,
LayoutOrder = layoutOrder,
Size = UDim2.new(1, 0, 0, 64),
BackgroundTransparency = 1,
})
create("TextLabel", {
Parent = Row,
Size = UDim2.new(1, 0, 0, 18),
BackgroundTransparency = 1,
Text = label,
Font = Enum.Font.GothamBold,
TextSize = 13,
TextColor3 = COLORS.Text,
TextXAlignment = Enum.TextXAlignment.Left,
})
local Track = create("Frame", {
Name = "Track",
Parent = Row,
Position = UDim2.new(0, 0, 0, 28),
Size = UDim2.new(1, -92, 0, 18),
BackgroundColor3 = COLORS.Panel,
BackgroundTransparency = 0.2,
}, { corner(9) })
local Fill = create("Frame", {
Name = "Fill",
Parent = Track,
Size = UDim2.new(0, 0, 1, 0),
BackgroundColor3 = COLORS.Purple,
BorderSizePixel = 0,
}, { corner(9) })
local Knob = create("Frame", {
Name = "Knob",
Parent = Track,
AnchorPoint = Vector2.new(0.5, 0.5),
Position = UDim2.new(0, 0, 0.5, 0),
Size = UDim2.new(0, 16, 0, 16),
BackgroundColor3 = COLORS.Text,
ZIndex = 3,
}, { corner(8), stroke(COLORS.Purple, 1.5) })
local Box = create("TextBox", {
Name = "ValueBox",
Parent = Row,
AnchorPoint = Vector2.new(1, 0),
Position = UDim2.new(1, 0, 0, 26),
Size = UDim2.new(0, 82, 0, 22),
BackgroundColor3 = COLORS.PanelLight,
Text = tostring(math.floor(statState[key])),
Font = Enum.Font.GothamBold,
TextSize = 13,
TextColor3 = COLORS.Text,
ClearTextOnFocus = false,
}, { corner(6), stroke(COLORS.Purple, 1.5) })
local function setValue(value, fromTyping)
value = math.clamp(math.floor(value + 0.5), SLIDER_MIN, SLIDER_MAX)
statState[key] = value
local pct = (value - SLIDER_MIN) / (SLIDER_MAX - SLIDER_MIN)
Fill.Size = UDim2.new(pct, 0, 1, 0)
Knob.Position = UDim2.new(pct, 0, 0.5, 0)
if not fromTyping then
Box.Text = tostring(value)
end
applyStats()
end
sliderSetters[key] = setValue
-- arrastar/clicar na barra pra mudar o valor
local draggingSlider = false
local function updateFromInputPos(inputPos)
local relativeX = inputPos.X - Track.AbsolutePosition.X
local pct = math.clamp(relativeX / Track.AbsoluteSize.X, 0, 1)
setValue(SLIDER_MIN + pct * (SLIDER_MAX - SLIDER_MIN))
end
Track.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
draggingSlider = true
updateFromInputPos(input.Position)
end
end)
Track.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
draggingSlider = false
end
end)
UserInputService.InputChanged:Connect(function(input)
if draggingSlider and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
updateFromInputPos(input.Position)
end
end)
-- digitar o número direto na caixinha
Box.FocusLost:Connect(function()
local num = tonumber(Box.Text)
if num then
setValue(num, true)
else
Box.Text = tostring(statState[key])
end
end)
setValue(statState[key])
return Row
end
createStatRow(1, "Velocidade", "Velocidade (Speed)")
createStatRow(2, "SuperPulo", "Super Pulo (Jump Power)")
createStatRow(3, "Gravidade", "Gravidade (Gravity)")
local ResetButton = create("TextButton", {
Name = "ResetButton",
Parent = JogadorPage,
LayoutOrder = 4,
Size = UDim2.new(1, 0, 0, 36),
BackgroundColor3 = COLORS.PanelLight,
Text = "Resetar Status",
Font = Enum.Font.GothamBold,
TextSize = 14,
TextColor3 = COLORS.Text,
AutoButtonColor = false,
}, { corner(8), stroke(COLORS.Purple, 1.5) })
ResetButton.MouseButton1Click:Connect(function()
sliderSetters.Velocidade(DEFAULTS.Velocidade)
sliderSetters.SuperPulo(DEFAULTS.SuperPulo)
sliderSetters.Gravidade(DEFAULTS.Gravidade)
end)
applyStats()
end
------------------------------------------------------------
-- CONTEÚDO PERSONALIZADO: JOGADORES (seletor / teleporte / visualizar)
------------------------------------------------------------
do
local JogadoresPage = pages["Jogadores"]
local selectedPlayer = nil
local viewing = false
local dropdownOpen = false
local playerRows = {} -- [Player] = { Frame = ..., name = ... }
------------------------------------------------------
-- Barra "Selecionar um jogador ->"
------------------------------------------------------
create("TextLabel", {
Parent = JogadoresPage,
LayoutOrder = 1,
Size = UDim2.new(1, 0, 0, 16),
BackgroundTransparency = 1,
Text = "Selecionar um jogador ->",
Font = Enum.Font.GothamBold,
TextSize = 13,
TextColor3 = COLORS.Text,
TextXAlignment = Enum.TextXAlignment.Left,
})
local SelectorContainer = create("Frame", {
Name = "SelectorContainer",
Parent = JogadoresPage,
LayoutOrder = 2,
Size = UDim2.new(1, 0, 0, 38),
BackgroundTransparency = 1,
ClipsDescendants = true,
})
local SelectBar = create("TextButton", {
Name = "SelectBar",
Parent = SelectorContainer,
Size = UDim2.new(1, 0, 0, 38),
BackgroundColor3 = COLORS.Panel,
BackgroundTransparency = 0.25,
Text = "",
AutoButtonColor = false,
}, { corner(8), stroke(COLORS.Purple, 1.5) })
local SelectBarLabel = create("TextLabel", {
Parent = SelectBar,
Position = UDim2.new(0, 12, 0, 0),
Size = UDim2.new(1, -40, 1, 0),
BackgroundTransparency = 1,
Text = "Nenhum jogador selecionado",
Font = Enum.Font.Gotham,
TextSize = 13,
TextColor3 = COLORS.TextDim,
TextXAlignment = Enum.TextXAlignment.Left,
})
local SelectBarArrow = create("TextLabel", {
Parent = SelectBar,
AnchorPoint = Vector2.new(1, 0.5),
Position = UDim2.new(1, -12, 0.5, 0),
Size = UDim2.new(0, 16, 0, 16),
BackgroundTransparency = 1,
Text = "v",
Font = Enum.Font.GothamBold,
TextSize = 13,
TextColor3 = COLORS.TextDim,
})
local DropdownArea = create("Frame", {
Name = "DropdownArea",
Parent = SelectorContainer,
Position = UDim2.new(0, 0, 0, 44),
Size = UDim2.new(1, 0, 0, 290),
BackgroundTransparency = 1,
})
local SearchBox = create("TextBox", {
Name = "SearchBox",
Parent = DropdownArea,
Size = UDim2.new(1, 0, 0, 28),
BackgroundColor3 = COLORS.PanelLight,
PlaceholderText = "Pesquisar jogador...",
Text = "",
Font = Enum.Font.Gotham,
TextSize = 13,
TextColor3 = COLORS.Text,
PlaceholderColor3 = COLORS.TextDim,
ClearTextOnFocus = false,
}, { corner(7), stroke(COLORS.Purple, 1.5) })
-- ScrollingFrame mostra ~5 jogadores por vez; o resto aparece arrastando/rolando
local ListScroll = create("ScrollingFrame", {
Name = "ListScroll",
Parent = DropdownArea,
Position = UDim2.new(0, 0, 0, 36),
Size = UDim2.new(1, 0, 0, 254),
BackgroundTransparency = 1,
ScrollBarThickness = 4,
ScrollBarImageColor3 = COLORS.Purple,
AutomaticCanvasSize = Enum.AutomaticSize.Y,
CanvasSize = UDim2.new(0, 0, 0, 0),
})
create("UIListLayout", {
Parent = ListScroll,
Padding = UDim.new(0, 6),
SortOrder = Enum.SortOrder.LayoutOrder,
})
-- permite arrastar com o mouse (ou dedo) pra cima/baixo pra rolar a lista
do
local scrollDragging = false
local dragStartY = 0
local startCanvasY = 0
ListScroll.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
scrollDragging = true
dragStartY = input.Position.Y
startCanvasY = ListScroll.CanvasPosition.Y
end
end)
ListScroll.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
scrollDragging = false
end
end)
UserInputService.InputChanged:Connect(function(input)
if scrollDragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
local deltaY = input.Position.Y - dragStartY
local maxY = math.max(0, ListScroll.CanvasSize.Y.Offset - ListScroll.AbsoluteSize.Y)
ListScroll.CanvasPosition = Vector2.new(0, math.clamp(startCanvasY - deltaY, 0, maxY))
end
end)
end
local function setDropdown(open)
dropdownOpen = open
SelectorContainer.Size = open and UDim2.new(1, 0, 0, 38 + 6 + 290) or UDim2.new(1, 0, 0, 38)
SelectBarArrow.Text = open and "^" or "v"
if open then
SearchBox.Text = ""
for _, row in pairs(playerRows) do
row.Frame.Visible = true
end
end
end
SelectBar.MouseButton1Click:Connect(function()
setDropdown(not dropdownOpen)
end)
SearchBox:GetPropertyChangedSignal("Text"):Connect(function()
local query = SearchBox.Text:lower()
for _, row in pairs(playerRows) do
if query == "" then
row.Frame.Visible = true
else
row.Frame.Visible = row.name:lower():find(query, 1, true) ~= nil
end
end
end)
------------------------------------------------------
-- Botões de ação: Teleportar / Visualizar
------------------------------------------------------
local ActionsRow = create("Frame", {
Name = "ActionsRow",
Parent = JogadoresPage,
LayoutOrder = 3,
Size = UDim2.new(1, 0, 0, 36),
BackgroundTransparency = 1,
})
create("UIListLayout", {
Parent = ActionsRow,
FillDirection = Enum.FillDirection.Horizontal,
Padding = UDim.new(0, 8),
SortOrder = Enum.SortOrder.LayoutOrder,
})
local TeleportButton = create("TextButton", {
Name = "TeleportButton",
Parent = ActionsRow,
LayoutOrder = 1,
Size = UDim2.new(0, 150, 1, 0),
BackgroundColor3 = COLORS.Purple,
Text = "Teleportar",
Font = Enum.Font.GothamBold,
TextSize = 13,
TextColor3 = COLORS.Text,
AutoButtonColor = false,
}, { corner(8) })
local ViewButton = create("TextButton", {
Name = "ViewButton",
Parent = ActionsRow,
LayoutOrder = 2,
Size = UDim2.new(0, 150, 1, 0),
BackgroundColor3 = COLORS.Panel,
Text = "Visualizar: Desativado",
Font = Enum.Font.GothamBold,
TextSize = 13,
TextColor3 = COLORS.Text,
AutoButtonColor = false,
}, { corner(8), stroke(COLORS.Purple, 1.5) })
local function getCharRoot(plr)
local char = plr.Character
if not char then return nil end
return char:FindFirstChild("HumanoidRootPart")
end
TeleportButton.MouseButton1Click:Connect(function()
if not selectedPlayer or not selectedPlayer.Parent then return end
local myRoot = getCharRoot(LocalPlayer)
local targetRoot = getCharRoot(selectedPlayer)
if myRoot and targetRoot then
myRoot.CFrame = targetRoot.CFrame + Vector3.new(2, 0, 2)
end
end)
local function stopViewing()
viewing = false
ViewButton.Text = "Visualizar: Desativado"
ViewButton.BackgroundColor3 = COLORS.Panel
local cam = workspace.CurrentCamera
if cam and LocalPlayer.Character then
local hum = LocalPlayer.Character:FindFirstChildOfClass("Humanoid")
cam.CameraSubject = hum
cam.CameraType = Enum.CameraType.Custom
end
end
ViewButton.MouseButton1Click:Connect(function()
if not selectedPlayer or not selectedPlayer.Parent then return end
viewing = not viewing
if viewing then
ViewButton.Text = "Visualizar: Ativado"
ViewButton.BackgroundColor3 = COLORS.PanelLight
local cam = workspace.CurrentCamera
local char = selectedPlayer.Character
if cam and char then
local hum = char:FindFirstChildOfClass("Humanoid")
if hum then
cam.CameraSubject = hum
cam.CameraType = Enum.CameraType.Custom
end
end
else
stopViewing()
end
end)
------------------------------------------------------
-- Botão Atualizar lista
------------------------------------------------------
local UpdateButton = create("TextButton", {
Name = "UpdateButton",
Parent = JogadoresPage,
LayoutOrder = 4,
Size = UDim2.new(1, 0, 0, 32),
BackgroundColor3 = COLORS.PanelLight,
Text = "Atualizar lista",
Font = Enum.Font.GothamBold,
TextSize = 13,
TextColor3 = COLORS.Text,
AutoButtonColor = false,
}, { corner(8), stroke(COLORS.Purple, 1.5) })
------------------------------------------------------
-- Linhas da lista de jogadores (foto sem borda + nome + id)
------------------------------------------------------
local function selectPlayer(plr)
selectedPlayer = plr
SelectBarLabel.Text = plr.Name
SelectBarLabel.TextColor3 = COLORS.Text
setDropdown(false)
if viewing then
stopViewing()
end
end
local function createPlayerRow(plr, layoutOrder)
local Row = create("TextButton", {
Name = plr.Name,
Parent = ListScroll,
LayoutOrder = layoutOrder,
Size = UDim2.new(1, -4, 0, 46),
BackgroundColor3 = COLORS.Panel,
BackgroundTransparency = 0.4,
Text = "",
AutoButtonColor = false,
}, { corner(8) })
-- foto sem nenhuma borda (sem UIStroke)
local Avatar = create("ImageLabel", {
Name = "Avatar",
Parent = Row,
Position = UDim2.new(0, 6, 0.5, -17),
Size = UDim2.new(0, 34, 0, 34),
BackgroundColor3 = COLORS.PanelLight,
Image = "",
ScaleType = Enum.ScaleType.Fit,
}, { corner(17) })
create("TextLabel", {
Parent = Row,
Position = UDim2.new(0, 50, 0, 4),
Size = UDim2.new(1, -56, 0, 18),
BackgroundTransparency = 1,
Text = plr.Name,
Font = Enum.Font.GothamBold,
TextSize = 13,
TextColor3 = COLORS.Text,
TextXAlignment = Enum.TextXAlignment.Left,
})
create("TextLabel", {
Parent = Row,
Position = UDim2.new(0, 50, 0, 22),
Size = UDim2.new(1, -56, 0, 16),
BackgroundTransparency = 1,
Text = "Id: " .. plr.UserId,
Font = Enum.Font.Gotham,
TextSize = 11,
TextColor3 = COLORS.TextDim,
TextXAlignment = Enum.TextXAlignment.Left,
})
task.spawn(function()
local ok, content = pcall(function()
return Players:GetUserThumbnailAsync(plr.UserId, Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size180x180)
end)
if ok and content and Avatar.Parent then
Avatar.Image = content
end
end)
Row.MouseButton1Click:Connect(function()
selectPlayer(plr)
end)
return { Frame = Row, name = plr.Name }
end
local function refreshPlayerList()
for _, row in pairs(playerRows) do
row.Frame:Destroy()
end
playerRows = {}
local order = 1
for _, plr in ipairs(Players:GetPlayers()) do
if plr ~= LocalPlayer then
playerRows[plr] = createPlayerRow(plr, order)
order += 1
end
end
if selectedPlayer and not selectedPlayer.Parent then
selectedPlayer = nil
SelectBarLabel.Text = "Nenhum jogador selecionado"
SelectBarLabel.TextColor3 = COLORS.TextDim
if viewing then
stopViewing()
end
end
end
UpdateButton.MouseButton1Click:Connect(refreshPlayerList)
-- some sozinho quando sai, aparece sozinho quando entra
Players.PlayerAdded:Connect(refreshPlayerList)
Players.PlayerRemoving:Connect(function()
task.wait()
refreshPlayerList()
end)
refreshPlayerList()
end
------------------------------------------------------------
-- CONTEÚDO PERSONALIZADO: AVATAR (copiar skin de um jogador + código de skin)
------------------------------------------------------------
do
local AvatarPage = pages["Avatar"]
local HttpService = game:GetService("HttpService")
local selectedAvatarPlayer = nil
local avatarDropdownOpen = false
local avatarPlayerRows = {}
------------------------------------------------------
-- Aviso
------------------------------------------------------
create("TextLabel", {
Parent = AvatarPage,
LayoutOrder = 1,
BackgroundTransparency = 1,
Size = UDim2.new(1, 0, 0, 32),
Text = "Copia o corpo, roupas, acessórios, cores e altura de outro jogador pro seu personagem. É só visual, só você vê (não sincroniza com o servidor).",
Font = Enum.Font.Gotham,
TextSize = 12,
TextColor3 = COLORS.TextDim,
TextWrapped = true,
TextXAlignment = Enum.TextXAlignment.Left,
})
------------------------------------------------------
-- Seletor de jogador (igual o de "Jogadores")
------------------------------------------------------
create("TextLabel", {
Parent = AvatarPage,
LayoutOrder = 2,
Size = UDim2.new(1, 0, 0, 16),
BackgroundTransparency = 1,
Text = "Selecionar jogador pra copiar ->",
Font = Enum.Font.GothamBold,
TextSize = 13,
TextColor3 = COLORS.Text,
TextXAlignment = Enum.TextXAlignment.Left,
})
local AvSelectorContainer = create("Frame", {
Name = "AvSelectorContainer",
Parent = AvatarPage,
LayoutOrder = 3,
Size = UDim2.new(1, 0, 0, 38),
BackgroundTransparency = 1,
ClipsDescendants = true,
})
local AvSelectBar = create("TextButton", {
Name = "AvSelectBar",
Parent = AvSelectorContainer,
Size = UDim2.new(1, 0, 0, 38),
BackgroundColor3 = COLORS.Panel,
BackgroundTransparency = 0.25,
Text = "",
AutoButtonColor = false,
}, { corner(8), stroke(COLORS.Purple, 1.5) })
local AvSelectBarLabel = create("TextLabel", {
Parent = AvSelectBar,
Position = UDim2.new(0, 12, 0, 0),
Size = UDim2.new(1, -40, 1, 0),
BackgroundTransparency = 1,
Text = "Nenhum jogador selecionado",
Font = Enum.Font.Gotham,
TextSize = 13,
TextColor3 = COLORS.TextDim,
TextXAlignment = Enum.TextXAlignment.Left,
})
local AvSelectBarArrow = create("TextLabel", {
Parent = AvSelectBar,
AnchorPoint = Vector2.new(1, 0.5),
Position = UDim2.new(1, -12, 0.5, 0),
Size = UDim2.new(0, 16, 0, 16),
BackgroundTransparency = 1,
Text = "v",
Font = Enum.Font.GothamBold,
TextSize = 13,
TextColor3 = COLORS.TextDim,
})
local AvDropdownArea = create("Frame", {
Name = "AvDropdownArea",
Parent = AvSelectorContainer,
Position = UDim2.new(0, 0, 0, 44),
Size = UDim2.new(1, 0, 0, 220),
BackgroundTransparency = 1,
})
local AvSearchBox = create("TextBox", {
Name = "AvSearchBox",
Parent = AvDropdownArea,
Size = UDim2.new(1, 0, 0, 28),
BackgroundColor3 = COLORS.PanelLight,
PlaceholderText = "Pesquisar jogador...",
Text = "",
Font = Enum.Font.Gotham,
TextSize = 13,
TextColor3 = COLORS.Text,
PlaceholderColor3 = COLORS.TextDim,
ClearTextOnFocus = false,
}, { corner(7), stroke(COLORS.Purple, 1.5) })
local AvListScroll = create("ScrollingFrame", {
Name = "AvListScroll",
Parent = AvDropdownArea,
Position = UDim2.new(0, 0, 0, 36),
Size = UDim2.new(1, 0, 0, 184),
BackgroundTransparency = 1,
ScrollBarThickness = 4,
ScrollBarImageColor3 = COLORS.Purple,
AutomaticCanvasSize = Enum.AutomaticSize.Y,
CanvasSize = UDim2.new(0, 0, 0, 0),
})
create("UIListLayout", {
Parent = AvListScroll,
Padding = UDim.new(0, 6),
SortOrder = Enum.SortOrder.LayoutOrder,
})
local function setAvatarDropdown(open)
avatarDropdownOpen = open
AvSelectorContainer.Size = open and UDim2.new(1, 0, 0, 38 + 6 + 220) or UDim2.new(1, 0, 0, 38)
AvSelectBarArrow.Text = open and "^" or "v"
if open then
AvSearchBox.Text = ""
for _, row in pairs(avatarPlayerRows) do
row.Frame.Visible = true
end
end
end
AvSelectBar.MouseButton1Click:Connect(function()
setAvatarDropdown(not avatarDropdownOpen)
end)
AvSearchBox:GetPropertyChangedSignal("Text"):Connect(function()
local query = AvSearchBox.Text:lower()
for _, row in pairs(avatarPlayerRows) do
if query == "" then
row.Frame.Visible = true
else
row.Frame.Visible = row.name:lower():find(query, 1, true) ~= nil
end
end
end)
local function selectAvatarPlayer(plr)
selectedAvatarPlayer = plr
AvSelectBarLabel.Text = plr.Name
AvSelectBarLabel.TextColor3 = COLORS.Text
setAvatarDropdown(false)
end
local function createAvatarPlayerRow(plr, layoutOrder)
local Row = create("TextButton", {
Name = plr.Name,
Parent = AvListScroll,
LayoutOrder = layoutOrder,
Size = UDim2.new(1, -4, 0, 46),
BackgroundColor3 = COLORS.Panel,
BackgroundTransparency = 0.4,
Text = "",
AutoButtonColor = false,
}, { corner(8) })
local Avatar = create("ImageLabel", {
Name = "Avatar",
Parent = Row,
Position = UDim2.new(0, 6, 0.5, -17),
Size = UDim2.new(0, 34, 0, 34),
BackgroundColor3 = COLORS.PanelLight,
Image = "",
ScaleType = Enum.ScaleType.Fit,
}, { corner(17) })
create("TextLabel", {
Parent = Row,
Position = UDim2.new(0, 50, 0, 4),
Size = UDim2.new(1, -56, 0, 18),
BackgroundTransparency = 1,
Text = plr.Name,
Font = Enum.Font.GothamBold,
TextSize = 13,
TextColor3 = COLORS.Text,
TextXAlignment = Enum.TextXAlignment.Left,
})
create("TextLabel", {
Parent = Row,
Position = UDim2.new(0, 50, 0, 22),
Size = UDim2.new(1, -56, 0, 16),
BackgroundTransparency = 1,
Text = "Id: " .. plr.UserId,
Font = Enum.Font.Gotham,
TextSize = 11,
TextColor3 = COLORS.TextDim,
TextXAlignment = Enum.TextXAlignment.Left,
})
task.spawn(function()
local ok, content = pcall(function()
return Players:GetUserThumbnailAsync(plr.UserId, Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size180x180)
end)
if ok and content and Avatar.Parent then
Avatar.Image = content
end
end)
Row.MouseButton1Click:Connect(function()
selectAvatarPlayer(plr)
end)
return { Frame = Row, name = plr.Name }
end
local function refreshAvatarPlayerList()
for _, row in pairs(avatarPlayerRows) do
row.Frame:Destroy()
end
avatarPlayerRows = {}
local order = 1
for _, plr in ipairs(Players:GetPlayers()) do
avatarPlayerRows[plr] = createAvatarPlayerRow(plr, order)
order += 1
end
if selectedAvatarPlayer and not selectedAvatarPlayer.Parent then
selectedAvatarPlayer = nil
AvSelectBarLabel.Text = "Nenhum jogador selecionado"
AvSelectBarLabel.TextColor3 = COLORS.TextDim
end
end
Players.PlayerAdded:Connect(refreshAvatarPlayerList)
Players.PlayerRemoving:Connect(function()
task.wait()
refreshAvatarPlayerList()
end)
refreshAvatarPlayerList()
------------------------------------------------------
-- Conversão HumanoidDescription <-> tabela/código
------------------------------------------------------
local DESC_FIELDS = {
"Head", "LeftArm", "LeftLeg", "RightArm", "RightLeg", "Torso",
"Shirt", "Pants", "GraphicTShirt", "Face",
"BackAccessory", "FaceAccessory", "FrontAccessory", "HairAccessory",
"HatAccessory", "NeckAccessory", "ShouldersAccessory", "WaistAccessory",
}
local DESC_COLOR_FIELDS = {
"HeadColor", "LeftArmColor", "LeftLegColor", "RightArmColor", "RightLegColor", "TorsoColor",
}
-- estes campos controlam a ALTURA / proporção do corpo (escala R15)
local DESC_SCALE_FIELDS = {
"BodyTypeScale", "DepthScale", "HeadScale", "HeightScale", "ProportionScale", "WidthScale",
}
local function descToTable(desc)
local t = {}
for _, field in ipairs(DESC_FIELDS) do
t[field] = desc[field]
end
for _, field in ipairs(DESC_COLOR_FIELDS) do
local c = desc[field]
t[field] = { c.R, c.G, c.B }
end
for _, field in ipairs(DESC_SCALE_FIELDS) do
t[field] = desc[field]
end
return t
end
local function tableToDesc(t)
local desc = Instance.new("HumanoidDescription")
for _, field in ipairs(DESC_FIELDS) do
if t[field] ~= nil then
desc[field] = t[field]
end
end
for _, field in ipairs(DESC_COLOR_FIELDS) do
local c = t[field]
if c then
desc[field] = Color3.new(c[1], c[2], c[3])
end
end
for _, field in ipairs(DESC_SCALE_FIELDS) do
if t[field] ~= nil then
desc[field] = t[field]
end
end
return desc
end
local function applyDescriptionToLocal(desc)
local char = LocalPlayer.Character
if not char then return false end
local hum = char:FindFirstChildOfClass("Humanoid")
if not hum then return false end
local ok = pcall(function()
hum:ApplyDescription(desc)
end)
return ok
end
------------------------------------------------------
-- Botão: copiar visual do jogador selecionado
------------------------------------------------------
local CopyVisualButton = create("TextButton", {
Name = "CopyVisualButton",
Parent = AvatarPage,
LayoutOrder = 4,
Size = UDim2.new(1, 0, 0, 36),
BackgroundColor3 = COLORS.Purple,
Text = "Copiar visual do jogador selecionado",
Font = Enum.Font.GothamBold,
TextSize = 14,
TextColor3 = COLORS.Text,
AutoButtonColor = false,
}, { corner(8) })
local AvatarFeedback = create("TextLabel", {
Name = "AvatarFeedback",
Parent = AvatarPage,
LayoutOrder = 5,
BackgroundTransparency = 1,
Size = UDim2.new(1, 0, 0, 16),
Text = "",
Font = Enum.Font.Gotham,
TextSize = 12,
TextColor3 = COLORS.TextDim,
TextXAlignment = Enum.TextXAlignment.Left,
})
------------------------------------------------------
-- Caixa do "Código da Skin" gerado (copiável, igual JobId/PlaceId)
------------------------------------------------------
create("TextLabel", {
Parent = AvatarPage,
LayoutOrder = 6,
BackgroundTransparency = 1,
Size = UDim2.new(1, 0, 0, 18),
Text = "Código da skin (gerado)",
Font = Enum.Font.GothamBold,
TextSize = 14,
TextColor3 = COLORS.Purple,
TextXAlignment = Enum.TextXAlignment.Left,
})
local CodeRow = create("Frame", {
Name = "CodeRow",
Parent = AvatarPage,
LayoutOrder = 7,
Size = UDim2.new(1, 0, 0, 30),
BackgroundTransparency = 1,
})
create("UIListLayout", {
Parent = CodeRow,
FillDirection = Enum.FillDirection.Horizontal,
Padding = UDim.new(0, 8),
SortOrder = Enum.SortOrder.LayoutOrder,
})
local CodeBox = create("TextBox", {
Name = "CodeBox",
Parent = CodeRow,
LayoutOrder = 1,
Size = UDim2.new(0, 366, 1, 0),
BackgroundColor3 = COLORS.Panel,
BackgroundTransparency = 0.25,
Text = "",
PlaceholderText = "Copie um jogador pra gerar o código...",
TextTruncate = Enum.TextTruncate.AtEnd,
Font = Enum.Font.Gotham,
TextSize = 12,
TextColor3 = COLORS.TextDim,
TextEditable = false,
ClearTextOnFocus = false,
}, { corner(8), stroke(COLORS.Purple, 1.5) })
local CopyCodeButton = create("TextButton", {
Name = "CopyCodeButton",
Parent = CodeRow,
LayoutOrder = 2,
Size = UDim2.new(0, 80, 1, 0),
BackgroundColor3 = COLORS.PanelLight,
Text = "Copiar",
Font = Enum.Font.GothamBold,
TextSize = 12,
TextColor3 = COLORS.Text,
AutoButtonColor = false,
}, { corner(8), stroke(COLORS.Purple, 1.5) })
CopyCodeButton.MouseButton1Click:Connect(function()
if CodeBox.Text == "" then return end
CodeBox.SelectionStart = 1
CodeBox.CursorPosition = #CodeBox.Text + 1
CodeBox:CaptureFocus()
local original = CopyCodeButton.Text
CopyCodeButton.Text = "Selecionado!"
task.delay(1.2, function()
if CopyCodeButton and CopyCodeButton.Parent then
CopyCodeButton.Text = original
end
end)
end)
CopyVisualButton.MouseButton1Click:Connect(function()
if not selectedAvatarPlayer or not selectedAvatarPlayer.Parent then
AvatarFeedback.Text = "Selecione um jogador primeiro."
AvatarFeedback.TextColor3 = Color3.fromRGB(255, 120, 120)
return
end
local targetChar = selectedAvatarPlayer.Character
local targetHum = targetChar and targetChar:FindFirstChildOfClass("Humanoid")
local desc
if targetHum then
-- pega o visual ATUAL do personagem (já com tudo que ele tá usando agora)
local ok, result = pcall(function()
return targetHum:GetAppliedDescription()
end)
if ok then desc = result end
end
if not desc then
-- fallback: pega o visual "oficial" da conta dele (caso não tenha char carregado)
local ok, result = pcall(function()
return Players:GetHumanoidDescriptionFromUserId(selectedAvatarPlayer.UserId)
end)
if ok then desc = result end
end
if not desc then
AvatarFeedback.Text = "Não foi possível ler o visual desse jogador."
AvatarFeedback.TextColor3 = Color3.fromRGB(255, 120, 120)
return
end
local applied = applyDescriptionToLocal(desc)
if applied then
AvatarFeedback.Text = "Visual de " .. selectedAvatarPlayer.Name .. " copiado! (só você vê)"
AvatarFeedback.TextColor3 = COLORS.TextDim
else
AvatarFeedback.Text = "Seu personagem ainda não carregou, tenta de novo."
AvatarFeedback.TextColor3 = Color3.fromRGB(255, 120, 120)
end
-- gera o código da skin (texto que dá pra copiar e usar em "Colar código")
local ok, json = pcall(function()
return HttpService:JSONEncode(descToTable(desc))
end)
if ok then
CodeBox.Text = json
CodeBox.TextColor3 = COLORS.Text
end
end)
------------------------------------------------------
-- Colar código e aplicar (pra "importar" uma skin de outro lugar)
------------------------------------------------------
create("TextLabel", {
Parent = AvatarPage,
LayoutOrder = 8,
BackgroundTransparency = 1,
Size = UDim2.new(1, 0, 0, 18),
Text = "Usar um código de skin",
Font = Enum.Font.GothamBold,
TextSize = 14,
TextColor3 = COLORS.Purple,
TextXAlignment = Enum.TextXAlignment.Left,
})
local PasteRow = create("Frame", {
Name = "PasteRow",
Parent = AvatarPage,
LayoutOrder = 9,
Size = UDim2.new(1, 0, 0, 30),
BackgroundTransparency = 1,
})
create("UIListLayout", {
Parent = PasteRow,
FillDirection = Enum.FillDirection.Horizontal,
Padding = UDim.new(0, 8),
SortOrder = Enum.SortOrder.LayoutOrder,
})
local PasteBox = create("TextBox", {
Name = "PasteBox",
Parent = PasteRow,
LayoutOrder = 1,
Size = UDim2.new(0, 366, 1, 0),
BackgroundColor3 = COLORS.Panel,
BackgroundTransparency = 0.25,
PlaceholderText = "Cole aqui o código da skin...",
Text = "",
Font = Enum.Font.Gotham,
TextSize = 12,
TextColor3 = COLORS.Text,
PlaceholderColor3 = COLORS.TextDim,
ClearTextOnFocus = false,
}, { corner(8), stroke(COLORS.Purple, 1.5) })
local ApplyCodeButton = create("TextButton", {
Name = "ApplyCodeButton",
Parent = PasteRow,
LayoutOrder = 2,
Size = UDim2.new(0, 80, 1, 0),
BackgroundColor3 = COLORS.Purple,
Text = "Aplicar",
Font = Enum.Font.GothamBold,
TextSize = 12,
TextColor3 = COLORS.Text,
AutoButtonColor = false,
}, { corner(8) })
ApplyCodeButton.MouseButton1Click:Connect(function()
if PasteBox.Text == "" then
AvatarFeedback.Text = "Cole um código antes de aplicar."
AvatarFeedback.TextColor3 = Color3.fromRGB(255, 120, 120)
return
end
local ok, t = pcall(function()
return HttpService:JSONDecode(PasteBox.Text)
end)
if not ok or type(t) ~= "table" then
AvatarFeedback.Text = "Código inválido."
AvatarFeedback.TextColor3 = Color3.fromRGB(255, 120, 120)
return
end
local desc = tableToDesc(t)
local applied = applyDescriptionToLocal(desc)
if applied then
AvatarFeedback.Text = "Código aplicado com sucesso!"
AvatarFeedback.TextColor3 = COLORS.TextDim
else
AvatarFeedback.Text = "Seu personagem ainda não carregou, tenta de novo."
AvatarFeedback.TextColor3 = Color3.fromRGB(255, 120, 120)
end
end)
end
------------------------------------------------------------
-- CONTEÚDO PERSONALIZADO: TELEPORTE (locais fixos + entrar em servidor)
------------------------------------------------------------
do
local TeleportePage = pages["Teleporte"]
local TeleportService = game:GetService("TeleportService")
local function getTeleporteRoot()
local char = LocalPlayer.Character
return char and char:FindFirstChild("HumanoidRootPart")
end
------------------------------------------------------
-- Locais
------------------------------------------------------
create("TextLabel", {
Parent = TeleportePage,
LayoutOrder = 1,
BackgroundTransparency = 1,
Size = UDim2.new(1, 0, 0, 18),
Text = "Locais",
Font = Enum.Font.GothamBold,
TextSize = 14,
TextColor3 = COLORS.Purple,
TextXAlignment = Enum.TextXAlignment.Left,
})
-- Lista de locais fixos. Pra adicionar mais, só incluir outra linha aqui.
local locais = {
{ nome = "Lobby", pos = Vector3.new(-26.52, 3.62, -0.97) },
{ nome = "Escola", pos = Vector3.new(-247.28, 3.61, 212.07) },
{ nome = "Morro", pos = Vector3.new(-306.51, 72.51, -404.82) },
{ nome = "Mar 1", pos = Vector3.new(-1623.39, 4.21, -270.60) },
{ nome = "Mar 2", pos = Vector3.new(65.25, 4.21, -1597.10) },
{ nome = "Mar 3", pos = Vector3.new(63.18, 4.21, 1586.60) },
}
local LocaisGrid = create("Frame", {
Name = "LocaisGrid",
Parent = TeleportePage,
LayoutOrder = 2,
Size = UDim2.new(1, 0, 0, 0),
AutomaticSize = Enum.AutomaticSize.Y,
BackgroundTransparency = 1,
})
create("UIGridLayout", {
Parent = LocaisGrid,
CellSize = UDim2.new(0, 130, 0, 36),
CellPadding = UDim2.new(0, 8, 0, 8),
SortOrder = Enum.SortOrder.LayoutOrder,
})
for i, local_ in ipairs(locais) do
local LocalButton = create("TextButton", {
Name = "Local_" .. local_.nome,
Parent = LocaisGrid,
LayoutOrder = i,
BackgroundColor3 = COLORS.Panel,
BackgroundTransparency = 0.3,
Text = local_.nome,
Font = Enum.Font.GothamBold,
TextSize = 13,
TextColor3 = COLORS.Text,
AutoButtonColor = false,
}, { corner(8), stroke(COLORS.Purple, 1.5) })
LocalButton.MouseButton1Click:Connect(function()
local root = getTeleporteRoot()
if root then
root.CFrame = CFrame.new(local_.pos)
end
end)
end
------------------------------------------------------
-- Servidor
------------------------------------------------------
create("TextLabel", {
Parent = TeleportePage,
LayoutOrder = 3,
BackgroundTransparency = 1,
Size = UDim2.new(1, 0, 0, 18),
Text = "Servidor",
Font = Enum.Font.GothamBold,
TextSize = 14,
TextColor3 = COLORS.Purple,
TextXAlignment = Enum.TextXAlignment.Left,
})
-- Caixa de JobId + botões de entrar
local JobIdRow = create("Frame", {
Name = "JobIdRow",
Parent = TeleportePage,
LayoutOrder = 4,
Size = UDim2.new(1, 0, 0, 36),
BackgroundTransparency = 1,
})
create("UIListLayout", {
Parent = JobIdRow,
FillDirection = Enum.FillDirection.Horizontal,
Padding = UDim.new(0, 8),
SortOrder = Enum.SortOrder.LayoutOrder,
})
local JobIdInputBox = create("TextBox", {
Name = "JobIdInputBox",
Parent = JobIdRow,
LayoutOrder = 1,
Size = UDim2.new(0, 230, 1, 0),
BackgroundColor3 = COLORS.Panel,
BackgroundTransparency = 0.25,
PlaceholderText = "Cole o JobId aqui...",
Text = "",
Font = Enum.Font.Gotham,
TextSize = 13,
TextColor3 = COLORS.Text,
PlaceholderColor3 = COLORS.TextDim,
ClearTextOnFocus = false,
}, { corner(8), stroke(COLORS.Purple, 1.5) })
local JoinServerButton = create("TextButton", {
Name = "JoinServerButton",
Parent = JobIdRow,
LayoutOrder = 2,
Size = UDim2.new(0, 150, 1, 0),
BackgroundColor3 = COLORS.Purple,
Text = "Entrar no Servidor",
Font = Enum.Font.GothamBold,
TextSize = 12,
TextColor3 = COLORS.Text,
AutoButtonColor = false,
}, { corner(8) })
local RandomServerButton = create("TextButton", {
Name = "RandomServerButton",
Parent = JobIdRow,
LayoutOrder = 3,
Size = UDim2.new(0, 150, 1, 0),
BackgroundColor3 = COLORS.PanelLight,
Text = "Servidor Aleatório",
Font = Enum.Font.GothamBold,
TextSize = 12,
TextColor3 = COLORS.Text,
AutoButtonColor = false,
}, { corner(8), stroke(COLORS.Purple, 1.5) })
local ServerFeedback = create("TextLabel", {
Name = "ServerFeedback",
Parent = TeleportePage,
LayoutOrder = 5,
BackgroundTransparency = 1,
Size = UDim2.new(1, 0, 0, 16),
Text = "",
Font = Enum.Font.Gotham,
TextSize = 12,
TextColor3 = COLORS.TextDim,
TextXAlignment = Enum.TextXAlignment.Left,
})
JoinServerButton.MouseButton1Click:Connect(function()
local jobId = JobIdInputBox.Text:gsub("%s+", "")
if jobId == "" then
ServerFeedback.Text = "Cole um JobId válido antes de entrar."
ServerFeedback.TextColor3 = Color3.fromRGB(255, 120, 120)
return
end
ServerFeedback.Text = "Entrando no servidor..."
ServerFeedback.TextColor3 = COLORS.TextDim
local ok = pcall(function()
TeleportService:TeleportToPlaceInstance(game.PlaceId, jobId, LocalPlayer)
end)
if not ok then
ServerFeedback.Text = "Não foi possível entrar (JobId inválido ou servidor indisponível)."
ServerFeedback.TextColor3 = Color3.fromRGB(255, 120, 120)
end
end)
-- "Aleatório" aqui usa o mesmo mecanismo do botão "Jogar" do Roblox: ele
-- deixa o próprio Roblox escolher uma instância disponível pra esse jogo,
-- então normalmente cai em um servidor diferente do atual. O Roblox não
-- libera pra um LocalScript pedir uma lista de servidores e escolher um
-- na mão sem um Script do lado do servidor + HttpService.
RandomServerButton.MouseButton1Click:Connect(function()
ServerFeedback.Text = "Procurando um servidor disponível..."
ServerFeedback.TextColor3 = COLORS.TextDim
local ok = pcall(function()
TeleportService:Teleport(game.PlaceId, LocalPlayer)
end)
if not ok then
ServerFeedback.Text = "Não foi possível teleportar para outro servidor."
ServerFeedback.TextColor3 = Color3.fromRGB(255, 120, 120)
end
end)
------------------------------------------------------
-- JobId / PlaceId atuais + copiar
------------------------------------------------------
local function createCopyRow(layoutOrder, labelText, value)
local Row = create("Frame", {
Parent = TeleportePage,
LayoutOrder = layoutOrder,
Size = UDim2.new(1, 0, 0, 30),
BackgroundTransparency = 1,
})
create("UIListLayout", {
Parent = Row,
FillDirection = Enum.FillDirection.Horizontal,
Padding = UDim.new(0, 8),
SortOrder = Enum.SortOrder.LayoutOrder,
})
create("TextLabel", {
Parent = Row,
LayoutOrder = 1,
Size = UDim2.new(0, 64, 1, 0),
BackgroundTransparency = 1,
Text = labelText,
Font = Enum.Font.GothamBold,
TextSize = 13,
TextColor3 = COLORS.Text,
TextXAlignment = Enum.TextXAlignment.Left,
})
-- TextEditable = false deixa o texto selecionável (pra copiar) mas
-- impede que o jogador edite o valor mostrado.
local ValueBox = create("TextBox", {
Name = "ValueBox",
Parent = Row,
LayoutOrder = 2,
Size = UDim2.new(0, 286, 1, 0),
BackgroundColor3 = COLORS.Panel,
BackgroundTransparency = 0.25,
Text = value,
TextTruncate = Enum.TextTruncate.AtEnd,
Font = Enum.Font.Gotham,
TextSize = 12,
TextColor3 = COLORS.TextDim,
TextEditable = false,
ClearTextOnFocus = false,
}, { corner(8), stroke(COLORS.Purple, 1.5) })
local CopyButton = create("TextButton", {
Name = "CopyButton",
Parent = Row,
LayoutOrder = 3,
Size = UDim2.new(0, 80, 1, 0),
BackgroundColor3 = COLORS.PanelLight,
Text = "Copiar",
Font = Enum.Font.GothamBold,
TextSize = 12,
TextColor3 = COLORS.Text,
AutoButtonColor = false,
}, { corner(8), stroke(COLORS.Purple, 1.5) })
CopyButton.MouseButton1Click:Connect(function()
-- O Roblox não deixa um LocalScript escrever direto na área de
-- transferência do sistema (por segurança). Então selecionamos todo
-- o texto e focamos a caixa: o jogador só precisa apertar Ctrl+C
-- (ou usar o menu de copiar, no celular) pra copiar de verdade.
ValueBox.SelectionStart = 1
ValueBox.CursorPosition = #ValueBox.Text + 1
ValueBox:CaptureFocus()
local original = CopyButton.Text
CopyButton.Text = "Selecionado!"
task.delay(1.2, function()
if CopyButton and CopyButton.Parent then
CopyButton.Text = original
end
end)
end)
return ValueBox
end
createCopyRow(6, "JobId:", game.JobId)
createCopyRow(7, "PlaceId:", tostring(game.PlaceId))
end
------------------------------------------------------------
-- CONTEÚDO PERSONALIZADO: CONFIGURAÇÃO (Teleporte por coordenadas)
------------------------------------------------------------
do
local ConfigPage = pages["Configuração"]
create("TextLabel", {
Parent = ConfigPage,
LayoutOrder = 1,
BackgroundTransparency = 1,
Size = UDim2.new(1, 0, 0, 18),
Text = "Teleporte por coordenadas",
Font = Enum.Font.GothamBold,
TextSize = 14,
TextColor3 = COLORS.Purple,
TextXAlignment = Enum.TextXAlignment.Left,
})
local CoordRow = create("Frame", {
Name = "CoordRow",
Parent = ConfigPage,
LayoutOrder = 2,
Size = UDim2.new(1, 0, 0, 36),
BackgroundTransparency = 1,
})
create("UIListLayout", {
Parent = CoordRow,
FillDirection = Enum.FillDirection.Horizontal,
Padding = UDim.new(0, 8),
SortOrder = Enum.SortOrder.LayoutOrder,
})
local coordBoxes = {}
for i, eixo in ipairs({ "X", "Y", "Z" }) do
local Box = create("TextBox", {
Name = eixo .. "Box",
Parent = CoordRow,
LayoutOrder = i,
Size = UDim2.new(0, 90, 1, 0),
BackgroundColor3 = COLORS.Panel,
BackgroundTransparency = 0.25,
PlaceholderText = eixo,
Text = "",
Font = Enum.Font.GothamBold,
TextSize = 14,
TextColor3 = COLORS.Text,
PlaceholderColor3 = COLORS.TextDim,
ClearTextOnFocus = false,
}, { corner(8), stroke(COLORS.Purple, 1.5) })
coordBoxes[eixo] = Box
end
local CoordTeleportButton = create("TextButton", {
Name = "CoordTeleportButton",
Parent = CoordRow,
LayoutOrder = 4,
Size = UDim2.new(0, 140, 1, 0),
BackgroundColor3 = COLORS.Purple,
Text = "Teleportar",
Font = Enum.Font.GothamBold,
TextSize = 13,
TextColor3 = COLORS.Text,
AutoButtonColor = false,
}, { corner(8) })
local CoordFeedback = create("TextLabel", {
Name = "CoordFeedback",
Parent = ConfigPage,
LayoutOrder = 3,
BackgroundTransparency = 1,
Size = UDim2.new(1, 0, 0, 16),
Text = "",
Font = Enum.Font.Gotham,
TextSize = 12,
TextColor3 = COLORS.TextDim,
TextXAlignment = Enum.TextXAlignment.Left,
})
local function getRoot()
local char = LocalPlayer.Character
return char and char:FindFirstChild("HumanoidRootPart")
end
local function teleportToCoords(x, y, z)
local root = getRoot()
if not root then
CoordFeedback.Text = "Seu personagem não foi encontrado."
CoordFeedback.TextColor3 = Color3.fromRGB(255, 120, 120)
return false
end
root.CFrame = CFrame.new(x, y, z)
CoordFeedback.Text = string.format("Teleportado para %.1f, %.1f, %.1f", x, y, z)
CoordFeedback.TextColor3 = COLORS.TextDim
return true
end
CoordTeleportButton.MouseButton1Click:Connect(function()
local x = tonumber(coordBoxes.X.Text)
local y = tonumber(coordBoxes.Y.Text)
local z = tonumber(coordBoxes.Z.Text)
if not (x and y and z) then
CoordFeedback.Text = "Preencha X, Y e Z com números válidos."
CoordFeedback.TextColor3 = Color3.fromRGB(255, 120, 120)
return
end
teleportToCoords(x, y, z)
end)
------------------------------------------------------
-- Locais salvos (lista de pontos de teleporte)
------------------------------------------------------
create("TextLabel", {
Parent = ConfigPage,
LayoutOrder = 4,
BackgroundTransparency = 1,
Size = UDim2.new(1, 0, 0, 18),
Text = "Locais salvos",
Font = Enum.Font.GothamBold,
TextSize = 14,
TextColor3 = COLORS.Purple,
TextXAlignment = Enum.TextXAlignment.Left,
})
local SaveRow = create("Frame", {
Name = "SaveRow",
Parent = ConfigPage,
LayoutOrder = 5,
Size = UDim2.new(1, 0, 0, 36),
BackgroundTransparency = 1,
})
create("UIListLayout", {
Parent = SaveRow,
FillDirection = Enum.FillDirection.Horizontal,
Padding = UDim.new(0, 8),
SortOrder = Enum.SortOrder.LayoutOrder,
})
local NameBox = create("TextBox", {
Name = "NameBox",
Parent = SaveRow,
LayoutOrder = 1,
Size = UDim2.new(0, 200, 1, 0),
BackgroundColor3 = COLORS.Panel,
BackgroundTransparency = 0.25,
PlaceholderText = "Nome do local (ex: Base)",
Text = "",
Font = Enum.Font.Gotham,
TextSize = 13,
TextColor3 = COLORS.Text,
PlaceholderColor3 = COLORS.TextDim,
ClearTextOnFocus = false,
}, { corner(8), stroke(COLORS.Purple, 1.5) })
local SaveButton = create("TextButton", {
Name = "SaveButton",
Parent = SaveRow,
LayoutOrder = 2,
Size = UDim2.new(0, 150, 1, 0),
BackgroundColor3 = COLORS.PanelLight,
Text = "Salvar local (X/Y/Z)",
Font = Enum.Font.GothamBold,
TextSize = 12,
TextColor3 = COLORS.Text,
AutoButtonColor = false,
}, { corner(8), stroke(COLORS.Purple, 1.5) })
local SavedList = create("Frame", {
Name = "SavedList",
Parent = ConfigPage,
LayoutOrder = 6,
Size = UDim2.new(1, 0, 0, 0),
AutomaticSize = Enum.AutomaticSize.Y,
BackgroundTransparency = 1,
})
create("UIListLayout", {
Parent = SavedList,
Padding = UDim.new(0, 6),
SortOrder = Enum.SortOrder.LayoutOrder,
})
local savedSpots = {} -- { {name=, x=, y=, z=}, ... }
local function rebuildSavedList()
for _, child in ipairs(SavedList:GetChildren()) do
child:Destroy()
end
for i, spot in ipairs(savedSpots) do
local Row = create("Frame", {
Name = "Spot_" .. i,
Parent = SavedList,
LayoutOrder = i,
Size = UDim2.new(1, 0, 0, 38),
BackgroundColor3 = COLORS.Panel,
BackgroundTransparency = 0.35,
}, { corner(8) })
create("TextLabel", {
Parent = Row,
Position = UDim2.new(0, 10, 0, 0),
Size = UDim2.new(1, -190, 1, 0),
BackgroundTransparency = 1,
Text = string.format("%s (%.0f, %.0f, %.0f)", spot.name, spot.x, spot.y, spot.z),
Font = Enum.Font.Gotham,
TextSize = 13,
TextColor3 = COLORS.Text,
TextXAlignment = Enum.TextXAlignment.Left,
TextTruncate = Enum.TextTruncate.AtEnd,
})
local GoButton = create("TextButton", {
Parent = Row,
AnchorPoint = Vector2.new(1, 0.5),
Position = UDim2.new(1, -46, 0.5, 0),
Size = UDim2.new(0, 90, 0, 26),
BackgroundColor3 = COLORS.Purple,
Text = "Teleportar",
Font = Enum.Font.GothamBold,
TextSize = 12,
TextColor3 = COLORS.Text,
AutoButtonColor = false,
}, { corner(6) })
local DelButton = create("TextButton", {
Parent = Row,
AnchorPoint = Vector2.new(1, 0.5),
Position = UDim2.new(1, -8, 0.5, 0),
Size = UDim2.new(0, 30, 0, 26),
BackgroundColor3 = COLORS.PanelLight,
Text = "X",
Font = Enum.Font.GothamBold,
TextSize = 12,
TextColor3 = COLORS.Text,
AutoButtonColor = false,
}, { corner(6), stroke(COLORS.Purple, 1.5) })
GoButton.MouseButton1Click:Connect(function()
teleportToCoords(spot.x, spot.y, spot.z)
end)
DelButton.MouseButton1Click:Connect(function()
table.remove(savedSpots, i)
rebuildSavedList()
end)
end
end
SaveButton.MouseButton1Click:Connect(function()
local x = tonumber(coordBoxes.X.Text)
local y = tonumber(coordBoxes.Y.Text)
local z = tonumber(coordBoxes.Z.Text)
if not (x and y and z) then
CoordFeedback.Text = "Preencha X, Y e Z antes de salvar."
CoordFeedback.TextColor3 = Color3.fromRGB(255, 120, 120)
return
end
local name = NameBox.Text ~= "" and NameBox.Text or ("Local " .. (#savedSpots + 1))
table.insert(savedSpots, { name = name, x = x, y = y, z = z })
NameBox.Text = ""
rebuildSavedList()
end)
end
------------------------------------------------------------
-- POPUP DE BOAS-VINDAS
------------------------------------------------------------
local WelcomeOverlay = create("Frame", {
Name = "WelcomeOverlay",
Parent = MainFrame,
Size = UDim2.new(1, 0, 1, -42),
Position = UDim2.new(0, 0, 0, 42),
BackgroundColor3 = Color3.new(0, 0, 0),
BackgroundTransparency = 0.45,
Visible = false,
ZIndex = 10,
})
local WelcomeCard = create("Frame", {
Name = "WelcomeCard",
Parent = WelcomeOverlay,
AnchorPoint = Vector2.new(0.5, 0.5),
Position = UDim2.new(0.5, 0, 0.5, 0),
Size = UDim2.new(0, 380, 0, 230),
BackgroundColor3 = COLORS.Panel,
BackgroundTransparency = 0.05,
ZIndex = 11,
}, { corner(14), stroke(COLORS.Purple, 2) })
create("ImageLabel", {
Parent = WelcomeCard,
BackgroundTransparency = 1,
Position = UDim2.new(0, 18, 0, 16),
Size = UDim2.new(0, 24, 0, 24),
Image = IMAGES.OpenButton,
ScaleType = Enum.ScaleType.Fit,
ZIndex = 11,
})
create("TextLabel", {
Parent = WelcomeCard,
BackgroundTransparency = 1,
Position = UDim2.new(0, 50, 0, 16),
Size = UDim2.new(1, -68, 0, 26),
Text = "Seja Bem-Vindo(a)",
Font = Enum.Font.GothamBold,
TextSize = 18,
TextColor3 = COLORS.Text,
TextXAlignment = Enum.TextXAlignment.Left,
ZIndex = 11,
})
create("TextLabel", {
Parent = WelcomeCard,
BackgroundTransparency = 1,
Position = UDim2.new(0, 18, 0, 52),
Size = UDim2.new(1, -36, 0, 100),
Text = "Somos uma comunidade organizada. Aproveite e entre no Discord, e dê uma olhada nas categorias do menu caso queira.",
Font = Enum.Font.Gotham,
TextSize = 13,
TextColor3 = COLORS.TextDim,
TextWrapped = true,
TextXAlignment = Enum.TextXAlignment.Left,
TextYAlignment = Enum.TextYAlignment.Top,
ZIndex = 11,
})
local DiscordButton = create("TextButton", {
Name = "DiscordButton",
Parent = WelcomeCard,
AnchorPoint = Vector2.new(0, 1),
Position = UDim2.new(0, 18, 1, -16),
Size = UDim2.new(0, 170, 0, 34),
BackgroundColor3 = COLORS.Purple,
Text = "Entrar no Discord",
Font = Enum.Font.GothamBold,
TextSize = 13,
TextColor3 = COLORS.Text,
AutoButtonColor = false,
ZIndex = 11,
}, { corner(8) })
local OkButton = create("TextButton", {
Name = "OkButton",
Parent = WelcomeCard,
AnchorPoint = Vector2.new(1, 1),
Position = UDim2.new(1, -18, 1, -16),
Size = UDim2.new(0, 130, 0, 34),
BackgroundColor3 = COLORS.PanelLight,
Text = "OK, entendi",
Font = Enum.Font.GothamBold,
TextSize = 13,
TextColor3 = COLORS.Text,
AutoButtonColor = false,
ZIndex = 11,
}, { corner(8), stroke(COLORS.Purple, 1.5) })
local function closeWelcome()
WelcomeOverlay.Visible = false
end
DiscordButton.MouseButton1Click:Connect(function()
if DISCORD_LINK ~= "" then
-- Roblox não permite abrir o navegador direto de um LocalScript comum,
-- então aqui só fechamos o popup. Quando tiver o link, troque DISCORD_LINK
-- no topo do script e, se quiser, ligue isso a um TextBox copiável.
closeWelcome()
else
local originalText = DiscordButton.Text
DiscordButton.Text = "Ainda não temos 😅"
task.delay(1.5, function()
if DiscordButton and DiscordButton.Parent then
DiscordButton.Text = originalText
end
end)
closeWelcome()
end
end)
OkButton.MouseButton1Click:Connect(closeWelcome)
------------------------------------------------------------
-- ANIMAÇÕES: ABRIR / FECHAR / MINIMIZAR
------------------------------------------------------------
local isOpen = false
local isMinimized = false
local firstOpen = true
local function openMenu()
if isOpen then return end
isOpen = true
MainFrame.Visible = true
MainFrame.Size = UDim2.new(0, 0, 0, 0)
TweenService:Create(MainFrame, TweenInfo.new(0.35, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {
Size = FULL_SIZE,
}):Play()
if not currentTab then
selectTab(categorias[1].nome)
end
if firstOpen then
firstOpen = false
task.delay(0.35, function()
WelcomeOverlay.Visible = true
end)
end
end
local function closeMenu()
if not isOpen then return end
isOpen = false
local tween = TweenService:Create(MainFrame, TweenInfo.new(0.25, Enum.EasingStyle.Quad, Enum.EasingDirection.In), {
Size = UDim2.new(0, 0, 0, 0),
})
tween:Play()
tween.Completed:Connect(function()
if not isOpen then
MainFrame.Visible = false
end
end)
end
local function toggleMinimize()
isMinimized = not isMinimized
Container.Visible = not isMinimized
local targetSize = isMinimized and MIN_SIZE or FULL_SIZE
TweenService:Create(MainFrame, TweenInfo.new(0.25, Enum.EasingStyle.Quad), {
Size = targetSize,
}):Play()
MinimizeButton.Text = isMinimized and "+" or "-"
end
OpenButton.MouseButton1Click:Connect(function()
if isOpen then
closeMenu()
else
openMenu()
end
end)
CloseButton.MouseButton1Click:Connect(closeMenu)
MinimizeButton.MouseButton1Click:Connect(toggleMinimize)
------------------------------------------------------------
-- ARRASTAR O PAINEL PELA BARRA SUPERIOR
------------------------------------------------------------
local dragging = false
local dragStart, startPos
TopBar.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)
UserInputService.InputChanged:Connect(function(input)
if dragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
local delta = input.Position - dragStart
MainFrame.Position = UDim2.new(
startPos.X.Scale, startPos.X.Offset + delta.X,
startPos.Y.Scale, startPos.Y.Offset + delta.Y
)
end
end)



????
would be absolute aura if this was in english