
KeylessUniversal

-- ================================================================
-- Lilly's Snipes | discord.gg/7nNG53SHJY
-- Join games by ID, search players, see what world they're in
-- ================================================================
local Players = game:GetService("Players")
local TeleportService = game:GetService("TeleportService")
local TweenService = game:GetService("TweenService")
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local plr = Players.LocalPlayer
local function notify(t, m, d)
pcall(function()
game:GetService("StarterGui"):SetCore("SendNotification",
{Title = "Lilly's Snipes | " .. t, Text = m, Duration = d or 4})
end)
end
-- ================================================================
-- COLORS
-- ================================================================
local C = {
BG = Color3.fromRGB(6, 3, 14),
PANEL = Color3.fromRGB(11, 6, 24),
DARK = Color3.fromRGB(18, 10, 38),
ACC = Color3.fromRGB(110, 22, 230),
ACC2 = Color3.fromRGB(170, 65, 255),
ON = Color3.fromRGB(35, 195, 80),
OFF = Color3.fromRGB(165, 25, 25),
TXT = Color3.fromRGB(230, 218, 255),
TXTM = Color3.fromRGB(140, 120, 175),
WHT = Color3.new(1, 1, 1),
RED = Color3.fromRGB(200, 30, 30),
GRN = Color3.fromRGB(30, 175, 65),
BLUE = Color3.fromRGB(32, 100, 200),
GOLD = Color3.fromRGB(205, 155, 15),
TEAL = Color3.fromRGB(20, 165, 160),
PINK = Color3.fromRGB(200, 45, 140),
ORANGE= Color3.fromRGB(205, 100, 15),
}
-- ================================================================
-- API HELPERS
-- ================================================================
local function getUserId(username)
if not username or username == "" then return nil end
local lname = username:lower()
for _, p2 in ipairs(Players:GetPlayers()) do
if p2.Name:lower() == lname or p2.DisplayName:lower() == lname then
return p2.UserId
end
end
local ok, result = pcall(function()
return Players:GetUserIdFromNameAsync(username)
end)
if ok and result then return result end
local variations = {
username,
username:sub(1,1):upper() .. username:sub(2):lower(),
username:upper(),
username:lower(),
}
for _, v in ipairs(variations) do
local ok2, result2 = pcall(function()
return Players:GetUserIdFromNameAsync(v)
end)
if ok2 and result2 then return result2 end
end
return nil
end
local function getUsername(userId)
if not userId then return nil end
for _, p2 in ipairs(Players:GetPlayers()) do
if p2.UserId == userId then return p2.Name end
end
local ok, result = pcall(function()
return Players:GetNameFromUserIdAsync(userId)
end)
if ok and result then return result end
return nil
end
local function getDisplayName(userId)
if not userId then return nil end
for _, p2 in ipairs(Players:GetPlayers()) do
if p2.UserId == userId then return p2.DisplayName end
end
return getUsername(userId)
end
local function getGameName(placeId)
local ok, info = pcall(function()
return game:GetService("MarketplaceService"):GetProductInfo(placeId, Enum.InfoType.Asset)
end)
if ok and info and info.Name then return info.Name end
return "Game " .. tostring(placeId)
end
local function httpGet(url)
local ok, res = pcall(function() return game:HttpGet(url) end)
if ok and type(res) == "string" and #res > 0 then return res end
return nil
end
local function getServers(placeId, limit)
limit = limit or 100
local url = "https://games.roblox.com/v1/games/" .. tostring(placeId) ..
"/servers/Public?sortOrder=Desc&excludeFullGames=false&limit=" ..
tostring(limit)
local data = httpGet(url)
if not data then return {} end
local servers = {}
for block in data:gmatch("{[^}]+}") do
local id = block:match('"id"%s*:%s*"([^"]+)"')
local playing = tonumber(block:match('"playing"%s*:%s*(%d+)')) or 0
local maxP = tonumber(block:match('"maxPlayers"%s*:%s*(%d+)')) or 0
if id and id ~= "" then
table.insert(servers, {id = id, playing = playing, maxPlayers = maxP})
end
end
return servers
end
local function getPlayerPresence(userId)
for _, p2 in ipairs(Players:GetPlayers()) do
if p2.UserId == userId then
return { placeId = game.PlaceId, jobId = game.JobId, inThisServer = true }
end
end
return nil
end
local function joinByPlaceId(placeId)
notify("Joining", "Teleporting to game " .. tostring(placeId) .. "...", 4)
local ok, err = pcall(function() TeleportService:Teleport(placeId, plr) end)
if not ok then notify("Error", tostring(err):sub(1, 60), 4) end
end
local function joinByJobId(placeId, jobId)
notify("Joining", "Connecting to specific server...", 4)
local ok, err = pcall(function()
TeleportService:TeleportToPlaceInstance(placeId, jobId, plr)
end)
if not ok then notify("Error", tostring(err):sub(1, 60), 4) end
end
local function joinNewServer(placeId)
placeId = placeId or game.PlaceId
local servers = getServers(placeId, 100)
local eligible = {}
for _, sv in ipairs(servers) do
if sv.id ~= game.JobId and sv.playing < sv.maxPlayers then
table.insert(eligible, sv)
end
end
if #eligible > 0 then
local sv = eligible[math.random(1, #eligible)]
joinByJobId(placeId, sv.id)
else
joinByPlaceId(placeId)
end
end
-- ================================================================
-- GUI
-- ================================================================
local sg = Instance.new("ScreenGui")
sg.Name = "LillysSnipes"; sg.ResetOnSpawn = false; sg.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
local _ok2, _hh = pcall(function() return gethui() end)
pcall(function() sg.Parent = (_ok2 and _hh) or plr:WaitForChild("PlayerGui", 8) end)
if not sg.Parent then sg.Parent = plr.PlayerGui end
local win = Instance.new("Frame", sg)
win.Size = UDim2.new(0, 480, 0, 580); win.Position = UDim2.new(0.5, -240, 0.5, -290)
win.BackgroundColor3 = C.BG; win.BorderSizePixel = 0
win.Active = true; win.Draggable = true
Instance.new("UICorner", win).CornerRadius = UDim.new(0, 14)
local winStr = Instance.new("UIStroke", win); winStr.Color = C.ACC; winStr.Thickness = 1.8
local stripe = Instance.new("Frame", win)
stripe.Size = UDim2.new(1, 0, 0, 4); stripe.BackgroundColor3 = C.ACC; stripe.BorderSizePixel = 0
local strG = Instance.new("UIGradient", stripe)
strG.Color = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(55, 0, 165)),
ColorSequenceKeypoint.new(0.5, Color3.fromRGB(195, 70, 255)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(55, 0, 165)),
})
local tBar = Instance.new("Frame", win)
tBar.Size = UDim2.new(1, 0, 0, 48); tBar.Position = UDim2.new(0, 0, 0, 4)
tBar.BackgroundColor3 = C.PANEL; tBar.BorderSizePixel = 0
local tTitle = Instance.new("TextLabel", tBar)
tTitle.Size = UDim2.new(1, -90, 0, 22); tTitle.Position = UDim2.new(0, 14, 0, 5)
tTitle.BackgroundTransparency = 1; tTitle.Font = Enum.Font.GothamBold
tTitle.TextSize = 17; tTitle.TextColor3 = C.TXT
tTitle.TextXAlignment = Enum.TextXAlignment.Left; tTitle.Text = "Lilly's Snipes"
local tSub = Instance.new("TextLabel", tBar)
tSub.Size = UDim2.new(1, -90, 0, 14); tSub.Position = UDim2.new(0, 14, 0, 29)
tSub.BackgroundTransparency = 1; tSub.Font = Enum.Font.Gotham
tSub.TextSize = 10; tSub.TextColor3 = C.TXTM
tSub.TextXAlignment = Enum.TextXAlignment.Left; tSub.Text = "discord.gg/7nNG53SHJY"
local minBtn = Instance.new("TextButton", tBar)
minBtn.Size = UDim2.new(0, 30, 0, 22); minBtn.Position = UDim2.new(1, -38, 0.5, -11)
minBtn.BackgroundColor3 = Color3.fromRGB(30, 16, 60); minBtn.BorderSizePixel = 0
minBtn.Font = Enum.Font.GothamBold; minBtn.TextSize = 14; minBtn.TextColor3 = C.TXT
minBtn.Text = "-"; minBtn.AutoButtonColor = false
Instance.new("UICorner", minBtn).CornerRadius = UDim.new(0, 6)
minBtn.MouseEnter:Connect(function()
TweenService:Create(minBtn, TweenInfo.new(0.12), {BackgroundColor3 = C.ACC}):Play()
end)
minBtn.MouseLeave:Connect(function()
TweenService:Create(minBtn, TweenInfo.new(0.12), {BackgroundColor3 = Color3.fromRGB(30, 16, 60)}):Play()
end)
local scroll = Instance.new("ScrollingFrame", win)
scroll.Size = UDim2.new(1, -8, 1, -60); scroll.Position = UDim2.new(0, 4, 0, 58)
scroll.BackgroundTransparency = 1; scroll.BorderSizePixel = 0
scroll.ScrollBarThickness = 4; scroll.ScrollBarImageColor3 = C.ACC
scroll.AutomaticCanvasSize = Enum.AutomaticSize.Y; scroll.CanvasSize = UDim2.new(0, 0, 0, 0)
local layout = Instance.new("UIListLayout", scroll)
layout.Padding = UDim.new(0, 6); layout.SortOrder = Enum.SortOrder.LayoutOrder
local sPad = Instance.new("UIPadding", scroll)
sPad.PaddingLeft = UDim.new(0, 8); sPad.PaddingRight = UDim.new(0, 8)
sPad.PaddingTop = UDim.new(0, 8); sPad.PaddingBottom = UDim.new(0, 8)
local minimised = false
minBtn.MouseButton1Click:Connect(function()
minimised = not minimised
TweenService:Create(win, TweenInfo.new(0.22, Enum.EasingStyle.Quart), {
Size = minimised and UDim2.new(0, 480, 0, 56) or UDim2.new(0, 480, 0, 580)
}):Play()
scroll.Visible = not minimised
minBtn.Text = minimised and "+" or "-"
end)
-- ================================================================
-- BUILDERS
-- ================================================================
local ord = 0
local function nxt() ord = ord + 1; return ord end
local function Sec(txt)
local f = Instance.new("Frame", scroll)
f.Size = UDim2.new(1, 0, 0, 24); f.BackgroundTransparency = 1; f.LayoutOrder = nxt()
local l = Instance.new("TextLabel", f)
l.Size = UDim2.new(1, 0, 1, 0); l.BackgroundTransparency = 1
l.Text = " " .. txt:upper(); l.Font = Enum.Font.GothamBold
l.TextSize = 10; l.TextColor3 = C.ACC2; l.TextXAlignment = Enum.TextXAlignment.Left
local ln = Instance.new("Frame", f)
ln.Size = UDim2.new(1, -4, 0, 1); ln.Position = UDim2.new(0, 2, 1, -1)
ln.BackgroundColor3 = C.ACC; ln.BorderSizePixel = 0; ln.BackgroundTransparency = 0.6
end
local function Act(label, col, fn)
local b = Instance.new("TextButton", scroll)
b.Size = UDim2.new(1, 0, 0, 34); b.BackgroundColor3 = col or C.ACC
b.BorderSizePixel = 0; b.Font = Enum.Font.GothamSemibold; b.TextSize = 12
b.TextColor3 = C.WHT; b.Text = label; b.LayoutOrder = nxt(); b.AutoButtonColor = false
Instance.new("UICorner", b).CornerRadius = UDim.new(0, 8)
local bc = col or C.ACC
b.MouseEnter:Connect(function()
TweenService:Create(b, TweenInfo.new(0.12), {BackgroundColor3 = Color3.new(
math.min(bc.R+0.12,1), math.min(bc.G+0.12,1), math.min(bc.B+0.12,1))}):Play()
end)
b.MouseLeave:Connect(function()
TweenService:Create(b, TweenInfo.new(0.12), {BackgroundColor3 = bc}):Play()
end)
b.MouseButton1Click:Connect(fn); return b
end
local function Info(txt)
local f = Instance.new("Frame", scroll)
f.Size = UDim2.new(1, 0, 0, 16); f.BackgroundTransparency = 1; f.LayoutOrder = nxt()
local l = Instance.new("TextLabel", f)
l.Size = UDim2.new(1, 0, 1, 0); l.BackgroundTransparency = 1
l.Text = " " .. txt; l.Font = Enum.Font.Gotham; l.TextSize = 10
l.TextColor3 = C.TXTM; l.TextXAlignment = Enum.TextXAlignment.Left
end
local function InputRow(lbl, ph, btnTxt, btnCol, fn)
local row = Instance.new("Frame", scroll)
row.Size = UDim2.new(1, 0, 0, 38); row.BackgroundColor3 = C.PANEL
row.BorderSizePixel = 0; row.LayoutOrder = nxt()
Instance.new("UICorner", row).CornerRadius = UDim.new(0, 8)
local lLabel = Instance.new("TextLabel", row)
lLabel.Size = UDim2.new(0, 76, 1, 0); lLabel.Position = UDim2.new(0, 8, 0, 0)
lLabel.BackgroundTransparency = 1; lLabel.Font = Enum.Font.Gotham; lLabel.TextSize = 11
lLabel.TextColor3 = C.TXTM; lLabel.TextXAlignment = Enum.TextXAlignment.Left
lLabel.Text = lbl
local btnW = btnTxt and 72 or 0
local box = Instance.new("TextBox", row)
box.Size = UDim2.new(1, -88 - (btnTxt and (btnW + 6) or 0), 0, 26)
box.Position = UDim2.new(0, 84, 0.5, -13)
box.BackgroundColor3 = C.DARK; box.BorderSizePixel = 0
box.Font = Enum.Font.GothamSemibold; box.TextSize = 12; box.TextColor3 = C.TXT
box.PlaceholderText = ph; box.PlaceholderColor3 = C.TXTM
box.Text = ""; box.ClearTextOnFocus = false
Instance.new("UICorner", box).CornerRadius = UDim.new(0, 6)
if btnTxt and fn then
local btn = Instance.new("TextButton", row)
btn.Size = UDim2.new(0, btnW, 0, 26); btn.Position = UDim2.new(1, -(btnW+6), 0.5, -13)
btn.BackgroundColor3 = btnCol or C.ACC; btn.BorderSizePixel = 0
btn.Font = Enum.Font.GothamBold; btn.TextSize = 11; btn.TextColor3 = C.WHT
btn.Text = btnTxt; btn.AutoButtonColor = false
Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 6)
local bc = btnCol or C.ACC
btn.MouseEnter:Connect(function()
TweenService:Create(btn, TweenInfo.new(0.12), {BackgroundColor3 = Color3.new(
math.min(bc.R+0.12,1), math.min(bc.G+0.12,1), math.min(bc.B+0.12,1))}):Play()
end)
btn.MouseLeave:Connect(function()
TweenService:Create(btn, TweenInfo.new(0.12), {BackgroundColor3 = bc}):Play()
end)
btn.MouseButton1Click:Connect(function() fn(box.Text) end)
box.FocusLost:Connect(function(enter) if enter then fn(box.Text) end end)
end
return box
end
local function ResultCard(h, defaultTxt)
local f = Instance.new("Frame", scroll)
f.Size = UDim2.new(1, 0, 0, h or 50); f.BackgroundColor3 = C.DARK
f.BorderSizePixel = 0; f.LayoutOrder = nxt()
Instance.new("UICorner", f).CornerRadius = UDim.new(0, 8)
local fStr = Instance.new("UIStroke", f)
fStr.Color = C.ACC; fStr.Thickness = 1; fStr.Transparency = 0.65
local lbl = Instance.new("TextLabel", f)
lbl.Size = UDim2.new(1, -14, 1, -4); lbl.Position = UDim2.new(0, 8, 0, 2)
lbl.BackgroundTransparency = 1; lbl.Font = Enum.Font.Gotham; lbl.TextSize = 11
lbl.TextColor3 = C.TXTM; lbl.TextWrapped = true; lbl.TextYAlignment = Enum.TextYAlignment.Top
lbl.TextXAlignment = Enum.TextXAlignment.Left
lbl.Text = defaultTxt or "Result will appear here"
return f, lbl
end
-- ================================================================
-- SECTION 1 - JOIN BY PLACE ID
-- ================================================================
Sec("Join Game by Place ID")
Info("Paste any Roblox Place ID to teleport straight into that game")
local placeBox = InputRow("Place ID:", "e.g. 17017769", "Join", C.ACC, function(txt)
local id = tonumber(txt:match("^%s*(%d+)%s*$"))
if not id then notify("Error", "Enter a valid numeric Place ID", 3); return end
task.spawn(function()
local name = getGameName(id)
notify("Joining", "Teleporting to: " .. name, 4)
task.wait(0.5)
joinByPlaceId(id)
end)
end)
-- ================================================================
-- SECTION 2 - JOIN SPECIFIC SERVER (Place ID + Job ID)
-- ================================================================
Sec("Join Specific Server")
Info("Paste a Job ID (and optional Place ID) to land in one exact server")
local specPlaceBox = InputRow("Place ID:", "Place ID (blank = this game)", nil, nil, nil)
local specJobBox = InputRow("Job ID:", "Paste Job ID here...", "Snipe", C.TEAL, function(txt)
local jid = txt:match("^%s*(.-)%s*$")
if jid == "" then notify("Error", "Paste a Job ID first", 3); return end
local pid = tonumber((specPlaceBox.Text or ""):match("^%s*(%d+)%s*$")) or game.PlaceId
task.spawn(function() joinByJobId(pid, jid) end)
end)
Act("📋 Copy MY Job ID — share this so friends can join you", Color3.fromRGB(35, 22, 72), function()
pcall(function() setclipboard(game.JobId) end)
notify("Copied!", "Your Job ID is now on your clipboard. Share it!", 4)
end)
Act("📋 Copy MY Place ID", Color3.fromRGB(35, 22, 72), function()
pcall(function() setclipboard(tostring(game.PlaceId)) end)
notify("Copied", "Place ID: " .. tostring(game.PlaceId), 4)
end)
-- ================================================================
-- SECTION 3 - PLAYERS IN THIS SERVER
-- ================================================================
Sec("Players In This Server")
Info("Everyone here right now — grab their Job ID to rejoin or share")
local lobbyContainer = Instance.new("Frame", scroll)
lobbyContainer.Size = UDim2.new(1, 0, 0, 200); lobbyContainer.BackgroundColor3 = C.DARK
lobbyContainer.BorderSizePixel = 0; lobbyContainer.LayoutOrder = nxt()
Instance.new("UICorner", lobbyContainer).CornerRadius = UDim.new(0, 9)
local lcStr = Instance.new("UIStroke", lobbyContainer)
lcStr.Color = C.ACC; lcStr.Thickness = 1; lcStr.Transparency = 0.55
local lobbyScroll = Instance.new("ScrollingFrame", lobbyContainer)
lobbyScroll.Size = UDim2.new(1, -6, 1, -6); lobbyScroll.Position = UDim2.new(0, 3, 0, 3)
lobbyScroll.BackgroundTransparency = 1; lobbyScroll.BorderSizePixel = 0
lobbyScroll.ScrollBarThickness = 3; lobbyScroll.ScrollBarImageColor3 = C.ACC
lobbyScroll.AutomaticCanvasSize = Enum.AutomaticSize.Y; lobbyScroll.CanvasSize = UDim2.new(0,0,0,0)
Instance.new("UICorner", lobbyScroll).CornerRadius = UDim.new(0, 7)
local llLayout = Instance.new("UIListLayout", lobbyScroll)
llLayout.Padding = UDim.new(0, 3); llLayout.SortOrder = Enum.SortOrder.LayoutOrder
local llPad = Instance.new("UIPadding", lobbyScroll)
llPad.PaddingLeft = UDim.new(0, 4); llPad.PaddingRight = UDim.new(0, 4)
llPad.PaddingTop = UDim.new(0, 4); llPad.PaddingBottom = UDim.new(0, 4)
local function buildLobbyList()
for _, ch in ipairs(lobbyScroll:GetChildren()) do
if ch:IsA("Frame") then ch:Destroy() end
end
for idx, p2 in ipairs(Players:GetPlayers()) do
local isMe = p2 == plr
local row = Instance.new("Frame", lobbyScroll)
row.Size = UDim2.new(1, 0, 0, 54)
row.BackgroundColor3 = isMe and Color3.fromRGB(12, 26, 12) or C.PANEL
row.BorderSizePixel = 0; row.LayoutOrder = idx
Instance.new("UICorner", row).CornerRadius = UDim.new(0, 6)
if isMe then Instance.new("UIStroke", row).Color = C.ON end
local nameLbl = Instance.new("TextLabel", row)
nameLbl.Size = UDim2.new(1, -10, 0, 17); nameLbl.Position = UDim2.new(0, 8, 0, 4)
nameLbl.BackgroundTransparency = 1; nameLbl.Font = Enum.Font.GothamBold; nameLbl.TextSize = 12
nameLbl.TextColor3 = isMe and C.ON or C.TXT; nameLbl.TextXAlignment = Enum.TextXAlignment.Left
nameLbl.Text = (isMe and "★ YOU " or "") .. "@" .. p2.Name .. " (" .. p2.DisplayName .. ")"
local idLbl = Instance.new("TextLabel", row)
idLbl.Size = UDim2.new(1, -10, 0, 12); idLbl.Position = UDim2.new(0, 8, 0, 22)
idLbl.BackgroundTransparency = 1; idLbl.Font = Enum.Font.Gotham; idLbl.TextSize = 9
idLbl.TextColor3 = C.TXTM; idLbl.TextXAlignment = Enum.TextXAlignment.Left
idLbl.Text = "ID: " .. p2.UserId .. " JID: " .. game.JobId:sub(1,20) .. "..."
local capP = p2
local capJid = game.JobId
local capPid = game.PlaceId
local b1 = Instance.new("TextButton", row)
b1.Size = UDim2.new(0, 60, 0, 19); b1.Position = UDim2.new(0, 6, 1, -23)
b1.BackgroundColor3 = Color3.fromRGB(30, 18, 60); b1.BorderSizePixel = 0
b1.Font = Enum.Font.GothamBold; b1.TextSize = 9; b1.TextColor3 = C.TXTM
b1.Text = "Copy ID"; b1.AutoButtonColor = false
Instance.new("UICorner", b1).CornerRadius = UDim.new(0, 4)
b1.MouseButton1Click:Connect(function()
pcall(function() setclipboard(tostring(capP.UserId)) end)
local o = b1.Text; b1.Text = "✓ Done"
TweenService:Create(b1, TweenInfo.new(0.1), {BackgroundColor3 = C.ACC}):Play()
notify("Copied", "User ID: " .. tostring(capP.UserId), 3)
task.delay(2, function()
if b1 and b1.Parent then b1.Text = o
TweenService:Create(b1, TweenInfo.new(0.1), {BackgroundColor3 = Color3.fromRGB(30,18,60)}):Play() end
end)
end)
local b2 = Instance.new("TextButton", row)
b2.Size = UDim2.new(0, 72, 0, 19); b2.Position = UDim2.new(0, 70, 1, -23)
b2.BackgroundColor3 = Color3.fromRGB(22, 14, 48); b2.BorderSizePixel = 0
b2.Font = Enum.Font.GothamBold; b2.TextSize = 9; b2.TextColor3 = C.TXTM
b2.Text = "Copy Name"; b2.AutoButtonColor = false
Instance.new("UICorner", b2).CornerRadius = UDim.new(0, 4)
b2.MouseButton1Click:Connect(function()
pcall(function() setclipboard(capP.Name) end)
local o = b2.Text; b2.Text = "✓ Done"
TweenService:Create(b2, TweenInfo.new(0.1), {BackgroundColor3 = C.ACC}):Play()
task.delay(2, function()
if b2 and b2.Parent then b2.Text = o
TweenService:Create(b2, TweenInfo.new(0.1), {BackgroundColor3 = Color3.fromRGB(22,14,48)}):Play() end
end)
end)
local b3 = Instance.new("TextButton", row)
b3.Size = UDim2.new(0, 88, 0, 19); b3.Position = UDim2.new(0, 146, 1, -23)
b3.BackgroundColor3 = Color3.fromRGB(12, 48, 52); b3.BorderSizePixel = 0
b3.Font = Enum.Font.GothamBold; b3.TextSize = 9; b3.TextColor3 = C.TEAL
b3.Text = "📋 Copy Job ID"; b3.AutoButtonColor = false
Instance.new("UICorner", b3).CornerRadius = UDim.new(0, 4)
b3.MouseButton1Click:Connect(function()
pcall(function() setclipboard(capJid) end)
specJobBox.Text = capJid
local o = b3.Text; b3.Text = "✓ Copied!"
TweenService:Create(b3, TweenInfo.new(0.1), {BackgroundColor3 = C.TEAL}):Play()
notify("Job ID Copied!", "Paste it in 'Join Specific Server' so anyone can join this server!", 5)
task.delay(2.5, function()
if b3 and b3.Parent then b3.Text = o
TweenService:Create(b3, TweenInfo.new(0.1), {BackgroundColor3 = Color3.fromRGB(12,48,52)}):Play() end
end)
end)
if not isMe then
local b4 = Instance.new("TextButton", row)
b4.Size = UDim2.new(0, 50, 0, 19); b4.Position = UDim2.new(1, -56, 1, -23)
b4.BackgroundColor3 = Color3.fromRGB(16, 50, 16); b4.BorderSizePixel = 0
b4.Font = Enum.Font.GothamBold; b4.TextSize = 9; b4.TextColor3 = C.ON
b4.Text = "⚡ Join"; b4.AutoButtonColor = false
Instance.new("UICorner", b4).CornerRadius = UDim.new(0, 4)
b4.MouseButton1Click:Connect(function()
b4.Text = "..."
task.spawn(function() joinByJobId(capPid, capJid) end)
end)
end
end
end
buildLobbyList()
Players.PlayerAdded:Connect(function() task.delay(0.5, buildLobbyList) end)
Players.PlayerRemoving:Connect(function() task.delay(0.1, buildLobbyList) end)
-- ================================================================
-- SECTION 4 - PLAYER SEARCH
-- ================================================================
Sec("Player Search")
Info("Search any username — if they're here you'll get their Job ID to copy or join")
local lastFoundPlaceId = nil
local lastFoundJobId = nil
local lastFoundName = nil
local playerResult, playerResultLbl = ResultCard(112, "Search a username above to see their info")
local jobBar = Instance.new("Frame", scroll)
jobBar.Size = UDim2.new(1, 0, 0, 36)
jobBar.BackgroundColor3 = Color3.fromRGB(10, 30, 12)
jobBar.BorderSizePixel = 0; jobBar.LayoutOrder = nxt(); jobBar.Visible = false
Instance.new("UICorner", jobBar).CornerRadius = UDim.new(0, 8)
local jbStr = Instance.new("UIStroke", jobBar)
jbStr.Color = C.ON; jbStr.Thickness = 1; jbStr.Transparency = 0.45
local jbLabel = Instance.new("TextLabel", jobBar)
jbLabel.Size = UDim2.new(0, 110, 1, 0); jbLabel.Position = UDim2.new(0, 10, 0, 0)
jbLabel.BackgroundTransparency = 1; jbLabel.Font = Enum.Font.GothamBold; jbLabel.TextSize = 11
jbLabel.TextColor3 = C.ON; jbLabel.TextXAlignment = Enum.TextXAlignment.Left
jbLabel.Text = "✅ Found here:"
local jbCopyBtn = Instance.new("TextButton", jobBar)
jbCopyBtn.Size = UDim2.new(0, 128, 0, 24); jbCopyBtn.Position = UDim2.new(0, 118, 0.5, -12)
jbCopyBtn.BackgroundColor3 = Color3.fromRGB(12, 48, 52); jbCopyBtn.BorderSizePixel = 0
jbCopyBtn.Font = Enum.Font.GothamBold; jbCopyBtn.TextSize = 11; jbCopyBtn.TextColor3 = C.TEAL
jbCopyBtn.Text = "📋 Copy Job ID"; jbCopyBtn.AutoButtonColor = false
Instance.new("UICorner", jbCopyBtn).CornerRadius = UDim.new(0, 6)
jbCopyBtn.MouseEnter:Connect(function()
TweenService:Create(jbCopyBtn, TweenInfo.new(0.12), {BackgroundColor3 = Color3.fromRGB(16, 72, 78)}):Play()
end)
jbCopyBtn.MouseLeave:Connect(function()
TweenService:Create(jbCopyBtn, TweenInfo.new(0.12), {BackgroundColor3 = Color3.fromRGB(12, 48, 52)}):Play()
end)
jbCopyBtn.MouseButton1Click:Connect(function()
if not lastFoundJobId then return end
pcall(function() setclipboard(lastFoundJobId) end)
specJobBox.Text = lastFoundJobId
local o = jbCopyBtn.Text; jbCopyBtn.Text = "✓ Copied!"
TweenService:Create(jbCopyBtn, TweenInfo.new(0.15), {BackgroundColor3 = C.TEAL}):Play()
notify("Job ID Copied!", "@" .. (lastFoundName or "?") .. "'s server Job ID is on your clipboard!", 5)
task.delay(2.5, function()
if jbCopyBtn and jbCopyBtn.Parent then jbCopyBtn.Text = o
TweenService:Create(jbCopyBtn, TweenInfo.new(0.15), {BackgroundColor3 = Color3.fromRGB(12,48,52)}):Play() end
end)
end)
local jbJoinBtn = Instance.new("TextButton", jobBar)
jbJoinBtn.Size = UDim2.new(0, 136, 0, 24); jbJoinBtn.Position = UDim2.new(1, -142, 0.5, -12)
jbJoinBtn.BackgroundColor3 = Color3.fromRGB(14, 48, 14); jbJoinBtn.BorderSizePixel = 0
jbJoinBtn.Font = Enum.Font.GothamBold; jbJoinBtn.TextSize = 11; jbJoinBtn.TextColor3 = C.ON
jbJoinBtn.Text = "⚡ Join Their Server"; jbJoinBtn.AutoButtonColor = false
Instance.new("UICorner", jbJoinBtn).CornerRadius = UDim.new(0, 6)
jbJoinBtn.MouseEnter:Connect(function()
TweenService:Create(jbJoinBtn, TweenInfo.new(0.12), {BackgroundColor3 = Color3.fromRGB(20, 72, 20)}):Play()
end)
jbJoinBtn.MouseLeave:Connect(function()
TweenService:Create(jbJoinBtn, TweenInfo.new(0.12), {BackgroundColor3 = Color3.fromRGB(14, 48, 14)}):Play()
end)
jbJoinBtn.MouseButton1Click:Connect(function()
if not lastFoundJobId or not lastFoundPlaceId then
notify("Error", "No Job ID — search a player in this server first", 4); return
end
jbJoinBtn.Text = "Joining..."
task.spawn(function() joinByJobId(lastFoundPlaceId, lastFoundJobId) end)
task.delay(4, function()
if jbJoinBtn and jbJoinBtn.Parent then jbJoinBtn.Text = "⚡ Join Their Server" end
end)
end)
local playerBox = InputRow("Username:", "Username or Display Name...", "Search", C.GOLD, function(txt)
local name = txt:match("^%s*(.-)%s*$")
if name == "" then notify("Search", "Enter a username", 3); return end
playerResultLbl.Text = "🔍 Searching for '" .. name .. "'..."
playerResultLbl.TextColor3 = C.TXTM
jobBar.Visible = false
task.spawn(function()
local userId = getUserId(name)
if not userId then
local lobbyNames = {}
for _, p2 in ipairs(Players:GetPlayers()) do table.insert(lobbyNames, "@" .. p2.Name) end
playerResultLbl.Text =
"❌ Not found: '" .. name .. "'\n" ..
"Use their exact Roblox Username, not Display Name.\n" ..
"Players here: " .. (#lobbyNames > 0 and table.concat(lobbyNames, ", ") or "none")
playerResultLbl.TextColor3 = C.OFF
notify("Not Found", "Try their exact Roblox username", 4)
return
end
local confirmedName = getUsername(userId) or name
local displayName = getDisplayName(userId) or confirmedName
local presInfo = getPlayerPresence(userId)
lastFoundName = confirmedName
if presInfo and presInfo.inThisServer then
lastFoundPlaceId = game.PlaceId
lastFoundJobId = game.JobId
specJobBox.Text = game.JobId
playerResultLbl.Text =
"✅ @" .. confirmedName .. " (" .. displayName .. ")\n" ..
"User ID: " .. tostring(userId) .. "\n" ..
"Status: IN THIS SERVER ↓ Job ID ready below\n" ..
"Job ID: " .. game.JobId
playerResultLbl.TextColor3 = C.ON
jobBar.Visible = true
jbLabel.Text = "✅ " .. confirmedName .. " is here:"
jbCopyBtn.Text = "📋 Copy Job ID"
jbJoinBtn.Text = "⚡ Join Their Server"
pcall(function() setclipboard(game.JobId) end)
notify("Found!", "@" .. confirmedName .. " is HERE — Job ID auto-copied to clipboard!", 5)
else
lastFoundPlaceId = nil
lastFoundJobId = nil
playerResultLbl.Text =
"👤 @" .. confirmedName .. " (" .. displayName .. ")\n" ..
"User ID: " .. tostring(userId) .. "\n" ..
"Status: Not in this server.\n" ..
"Tip: Ask them for their Job ID, then paste it in 'Join Specific Server'."
playerResultLbl.TextColor3 = C.TXT
jobBar.Visible = false
pcall(function() setclipboard(tostring(userId)) end)
notify("Found", "@" .. confirmedName .. " | User ID copied: " .. tostring(userId), 4)
end
end)
end)
-- ================================================================
-- SECTION 5 - USER ID LOOKUP
-- ================================================================
Sec("User ID Lookup")
Info("Convert username to User ID, or User ID to username")
local utoiResult, utoiResultLbl = ResultCard(36, "Result will show here")
local utoiBox = InputRow("Username:", "Exact Roblox username...", "Get ID", C.GOLD, function(txt)
local name = txt:match("^%s*(.-)%s*$")
if name == "" then return end
utoiResultLbl.Text = "Looking up '" .. name .. "'..."; utoiResultLbl.TextColor3 = C.TXTM
task.spawn(function()
local id = getUserId(name)
if id then
local confirmed = getUsername(id) or name
utoiResultLbl.Text = "@" .. confirmed .. " -> User ID: " .. tostring(id)
utoiResultLbl.TextColor3 = C.TXT
pcall(function() setclipboard(tostring(id)) end)
notify("ID Found", "@" .. confirmed .. " = " .. tostring(id) .. " (copied!)", 4)
else
utoiResultLbl.Text = "Not found: '" .. name .. "' (use exact Roblox username)"
utoiResultLbl.TextColor3 = C.OFF
notify("Not Found", "Use their exact Roblox username, not display name", 4)
end
end)
end)
local itonResult, itonResultLbl = ResultCard(36, "Result will show here")
local itonBox = InputRow("User ID:", "Numeric User ID...", "Get Name", C.GOLD, function(txt)
local id = tonumber(txt:match("^%s*(%d+)%s*$"))
if not id then notify("Error", "Enter a valid number", 3); return end
itonResultLbl.Text = "Looking up ID " .. id .. "..."; itonResultLbl.TextColor3 = C.TXTM
task.spawn(function()
local name = getUsername(id)
if name then
itonResultLbl.Text = "ID " .. id .. " -> @" .. name
itonResultLbl.TextColor3 = C.TXT
pcall(function() setclipboard(name) end)
notify("Found", "@" .. name .. " (username copied!)", 4)
else
itonResultLbl.Text = "No account found for ID: " .. tostring(id)
itonResultLbl.TextColor3 = C.OFF
end
end)
end)
-- ================================================================
-- SECTION 6 - SERVER BROWSER
-- ================================================================
Sec("Server Browser")
Info("Browse active servers — copy any Job ID or jump straight in")
local browserPlaceBox = InputRow("Place ID:", "Blank = current game", nil, nil, nil)
local browserContainer = Instance.new("Frame", scroll)
browserContainer.Size = UDim2.new(1, 0, 0, 300); browserContainer.BackgroundColor3 = C.DARK
browserContainer.BorderSizePixel = 0; browserContainer.LayoutOrder = nxt()
Instance.new("UICorner", browserContainer).CornerRadius = UDim.new(0, 10)
local bcStr = Instance.new("UIStroke", browserContainer)
bcStr.Color = C.ACC; bcStr.Thickness = 1; bcStr.Transparency = 0.55
local bcHeader = Instance.new("Frame", browserContainer)
bcHeader.Size = UDim2.new(1, 0, 0, 38); bcHeader.BackgroundColor3 = C.PANEL; bcHeader.BorderSizePixel = 0
Instance.new("UICorner", bcHeader).CornerRadius = UDim.new(0, 10)
local bcStatusLbl = Instance.new("TextLabel", bcHeader)
bcStatusLbl.Size = UDim2.new(1, -120, 1, 0); bcStatusLbl.Position = UDim2.new(0, 10, 0, 0)
bcStatusLbl.BackgroundTransparency = 1; bcStatusLbl.Font = Enum.Font.GothamSemibold
bcStatusLbl.TextSize = 11; bcStatusLbl.TextColor3 = C.TXTM
bcStatusLbl.TextXAlignment = Enum.TextXAlignment.Left; bcStatusLbl.Text = "Press Load to browse servers"
local bcLoadBtn = Instance.new("TextButton", bcHeader)
bcLoadBtn.Size = UDim2.new(0, 108, 0, 26); bcLoadBtn.Position = UDim2.new(1, -114, 0.5, -13)
bcLoadBtn.BackgroundColor3 = C.ACC; bcLoadBtn.BorderSizePixel = 0
bcLoadBtn.Font = Enum.Font.GothamBold; bcLoadBtn.TextSize = 11; bcLoadBtn.TextColor3 = C.WHT
bcLoadBtn.Text = "Load Servers"; bcLoadBtn.AutoButtonColor = false
Instance.new("UICorner", bcLoadBtn).CornerRadius = UDim.new(0, 6)
bcLoadBtn.MouseEnter:Connect(function()
TweenService:Create(bcLoadBtn, TweenInfo.new(0.12), {BackgroundColor3 = C.ACC2}):Play()
end)
bcLoadBtn.MouseLeave:Connect(function()
TweenService:Create(bcLoadBtn, TweenInfo.new(0.12), {BackgroundColor3 = C.ACC}):Play()
end)
local serverListScroll = Instance.new("ScrollingFrame", browserContainer)
serverListScroll.Size = UDim2.new(1, -6, 1, -44); serverListScroll.Position = UDim2.new(0, 3, 0, 41)
serverListScroll.BackgroundColor3 = Color3.fromRGB(10, 6, 20); serverListScroll.BorderSizePixel = 0
serverListScroll.ScrollBarThickness = 3; serverListScroll.ScrollBarImageColor3 = C.ACC
serverListScroll.AutomaticCanvasSize = Enum.AutomaticSize.Y; serverListScroll.CanvasSize = UDim2.new(0,0,0,0)
Instance.new("UICorner", serverListScroll).CornerRadius = UDim.new(0, 7)
local slLayout = Instance.new("UIListLayout", serverListScroll)
slLayout.Padding = UDim.new(0, 4); slLayout.SortOrder = Enum.SortOrder.LayoutOrder
local slPad = Instance.new("UIPadding", serverListScroll)
slPad.PaddingLeft = UDim.new(0, 4); slPad.PaddingRight = UDim.new(0, 4)
slPad.PaddingTop = UDim.new(0, 4); slPad.PaddingBottom = UDim.new(0, 4)
local function buildServerRows(placeId, servers)
for _, ch in ipairs(serverListScroll:GetChildren()) do
if ch:IsA("Frame") then ch:Destroy() end
end
if #servers == 0 then
local noLbl = Instance.new("TextLabel", serverListScroll)
noLbl.Size = UDim2.new(1, 0, 0, 30); noLbl.BackgroundTransparency = 1
noLbl.Font = Enum.Font.Gotham; noLbl.TextSize = 12; noLbl.LayoutOrder = 1
noLbl.TextColor3 = C.TXTM; noLbl.TextXAlignment = Enum.TextXAlignment.Center
noLbl.Text = "No servers found for this game"
return
end
table.sort(servers, function(a, b) return (a.playing or 0) < (b.playing or 0) end)
for idx, sv in ipairs(servers) do
local fillPct = (sv.maxPlayers and sv.maxPlayers > 0)
and math.floor((sv.playing / sv.maxPlayers) * 100) or 0
local isCurrent = sv.id == game.JobId
local row = Instance.new("Frame", serverListScroll)
row.Size = UDim2.new(1, 0, 0, 50); row.LayoutOrder = idx
row.BackgroundColor3 = isCurrent and Color3.fromRGB(14, 28, 12) or C.PANEL
row.BorderSizePixel = 0
Instance.new("UICorner", row).CornerRadius = UDim.new(0, 7)
if isCurrent then
local rs = Instance.new("UIStroke", row)
rs.Color = C.ON; rs.Thickness = 1; rs.Transparency = 0.4
end
local topLbl = Instance.new("TextLabel", row)
topLbl.Size = UDim2.new(1, -170, 0, 18); topLbl.Position = UDim2.new(0, 10, 0, 5)
topLbl.BackgroundTransparency = 1; topLbl.Font = Enum.Font.GothamSemibold; topLbl.TextSize = 12
topLbl.TextColor3 = isCurrent and C.ON or C.TXT; topLbl.TextXAlignment = Enum.TextXAlignment.Left
topLbl.Text = (isCurrent and "★ YOU " or "") .. sv.playing .. "/" .. (sv.maxPlayers or "?") .. " players (" .. fillPct .. "%)"
local idLbl = Instance.new("TextLabel", row)
idLbl.Size = UDim2.new(1, -170, 0, 13); idLbl.Position = UDim2.new(0, 10, 0, 26)
idLbl.BackgroundTransparency = 1; idLbl.Font = Enum.Font.Gotham; idLbl.TextSize = 9
idLbl.TextColor3 = C.TXTM; idLbl.TextXAlignment = Enum.TextXAlignment.Left
idLbl.Text = "JID: " .. sv.id:sub(1, 24) .. "..."
idLbl.TextTruncate = Enum.TextTruncate.AtEnd
local barTrack = Instance.new("Frame", row)
barTrack.Size = UDim2.new(0, 5, 0.7, 0); barTrack.Position = UDim2.new(1, -14, 0.15, 0)
barTrack.BackgroundColor3 = Color3.fromRGB(28, 16, 50); barTrack.BorderSizePixel = 0
Instance.new("UICorner", barTrack).CornerRadius = UDim.new(1, 0)
local barFill = Instance.new("Frame", barTrack)
barFill.Size = UDim2.new(1, 0, fillPct / 100, 0)
barFill.Position = UDim2.new(0, 0, 1 - fillPct / 100, 0)
barFill.BackgroundColor3 = fillPct >= 85 and C.OFF or (fillPct >= 50 and C.GOLD or C.ON)
barFill.BorderSizePixel = 0
Instance.new("UICorner", barFill).CornerRadius = UDim.new(1, 0)
local capSv = sv; local capPid = placeId
local cjBtn = Instance.new("TextButton", row)
cjBtn.Size = UDim2.new(0, 74, 0, 22); cjBtn.Position = UDim2.new(1, -156, 0.5, -11)
cjBtn.BackgroundColor3 = Color3.fromRGB(12, 48, 52); cjBtn.BorderSizePixel = 0
cjBtn.Font = Enum.Font.GothamBold; cjBtn.TextSize = 10; cjBtn.TextColor3 = C.TEAL
cjBtn.Text = "📋 Copy JID"; cjBtn.AutoButtonColor = false
Instance.new("UICorner", cjBtn).CornerRadius = UDim.new(0, 5)
cjBtn.MouseEnter:Connect(function()
TweenService:Create(cjBtn, TweenInfo.new(0.12), {BackgroundColor3 = Color3.fromRGB(16, 68, 74)}):Play()
end)
cjBtn.MouseLeave:Connect(function()
TweenService:Create(cjBtn, TweenInfo.new(0.12), {BackgroundColor3 = Color3.fromRGB(12, 48, 52)}):Play()
end)
cjBtn.MouseButton1Click:Connect(function()
pcall(function() setclipboard(capSv.id) end)
specJobBox.Text = capSv.id
lastFoundPlaceId = capPid
local o = cjBtn.Text; cjBtn.Text = "✓ Copied!"
TweenService:Create(cjBtn, TweenInfo.new(0.1), {BackgroundColor3 = C.TEAL}):Play()
notify("Job ID Copied", "Also filled into 'Join Specific Server' box for you!", 4)
task.delay(2.5, function()
if cjBtn and cjBtn.Parent then cjBtn.Text = o
TweenService:Create(cjBtn, TweenInfo.new(0.1), {BackgroundColor3 = Color3.fromRGB(12,48,52)}):Play() end
end)
end)
local joinBtn = Instance.new("TextButton", row)
joinBtn.Size = UDim2.new(0, 68, 0, 22); joinBtn.Position = UDim2.new(1, -80, 0.5, -11)
joinBtn.BackgroundColor3 = isCurrent and C.GRN or C.ACC
joinBtn.BorderSizePixel = 0; joinBtn.Font = Enum.Font.GothamBold
joinBtn.TextSize = 11; joinBtn.TextColor3 = C.WHT
joinBtn.Text = isCurrent and "YOU'RE HERE" or "⚡ Join"; joinBtn.AutoButtonColor = false
Instance.new("UICorner", joinBtn).CornerRadius = UDim.new(0, 6)
joinBtn.MouseButton1Click:Connect(function()
if capSv.id == game.JobId then notify("Info", "You are already in this server!", 3); return end
joinBtn.Text = "..."
task.spawn(function() joinByJobId(capPid, capSv.id) end)
end)
end
end
bcLoadBtn.MouseButton1Click:Connect(function()
local pid = tonumber((browserPlaceBox.Text or ""):match("^%s*(%d+)%s*$")) or game.PlaceId
bcStatusLbl.Text = "Loading servers for " .. pid .. "..."
bcLoadBtn.Text = "Loading..."
bcLoadBtn.BackgroundColor3 = Color3.fromRGB(50, 50, 80)
task.spawn(function()
local servers = getServers(pid, 100)
bcStatusLbl.Text = #servers .. " servers for " .. pid
bcLoadBtn.Text = "Refresh"
bcLoadBtn.BackgroundColor3 = C.ACC
buildServerRows(pid, servers)
if #servers > 0 then
notify("Browser", "Loaded " .. #servers .. " servers!", 3)
else
notify("Browser", "No servers found for " .. pid, 3)
end
end)
end)
-- ================================================================
-- SECTION 7 - PLAYER WATCH LIST
-- ================================================================
local function fetchPresence(userId)
local url = "https://presence.roblox.com/v1/presence/users"
local body = '{"userIds":[' .. tostring(userId) .. ']}'
local ok, res = pcall(function()
return game:HttpPost(url, body, "application/json")
end)
if not ok or not res then return "unknown" end
local presType = tonumber(res:match('"userPresenceType"%s*:%s*(%d+)'))
local lastLoc = res:match('"lastLocation"%s*:%s*"([^"]*)"') or ""
local placeId = res:match('"placeId"%s*:%s*(%d+)')
local gameId = res:match('"gameId"%s*:%s*"([^"]*)"') or ""
if presType == 2 or presType == 3 then
return "in_game", tonumber(placeId), gameId, lastLoc
elseif presType == 1 then
return "online", nil, nil, "On Roblox website"
else
return "offline", nil, nil, ""
end
end
local WATCH_FILE = "lillys_snipes_watchlist.txt"
local watchList = {}
local function saveWatchList()
pcall(function()
if not writefile then return end
local parts = {}
for _, w in ipairs(watchList) do
table.insert(parts, tostring(w.userId) .. ":" .. w.username)
end
writefile(WATCH_FILE, table.concat(parts, "\n"))
end)
end
local function loadWatchList()
pcall(function()
if not isfile or not readfile then return end
if not isfile(WATCH_FILE) then return end
local data = readfile(WATCH_FILE)
for line in data:gmatch("[^\n]+") do
local uid, uname = line:match("^(%d+):(.+)$")
uid = tonumber(uid)
if uid and uname and uname ~= "" then
table.insert(watchList, {userId = uid, username = uname, displayName = uname})
end
end
end)
end
loadWatchList()
task.spawn(function()
for _, w in ipairs(watchList) do
local dn = getDisplayName(w.userId)
if dn then w.displayName = dn end
end
end)
Sec("Player Watch List")
Info("Add players to track — shows Online / In-Game / Offline. Updates every 12 seconds.")
local addWatchRow = Instance.new("Frame", scroll)
addWatchRow.Size = UDim2.new(1, 0, 0, 38); addWatchRow.BackgroundColor3 = C.PANEL
addWatchRow.BorderSizePixel = 0; addWatchRow.LayoutOrder = nxt()
Instance.new("UICorner", addWatchRow).CornerRadius = UDim.new(0, 8)
local awLbl = Instance.new("TextLabel", addWatchRow)
awLbl.Size = UDim2.new(0, 76, 1, 0); awLbl.Position = UDim2.new(0, 8, 0, 0)
awLbl.BackgroundTransparency = 1; awLbl.Font = Enum.Font.Gotham; awLbl.TextSize = 11
awLbl.TextColor3 = C.TXTM; awLbl.TextXAlignment = Enum.TextXAlignment.Left
awLbl.Text = "Add Player:"
local awBox = Instance.new("TextBox", addWatchRow)
awBox.Size = UDim2.new(1, -162, 0, 26); awBox.Position = UDim2.new(0, 84, 0.5, -13)
awBox.BackgroundColor3 = C.DARK; awBox.BorderSizePixel = 0
awBox.Font = Enum.Font.GothamSemibold; awBox.TextSize = 12; awBox.TextColor3 = C.TXT
awBox.PlaceholderText = "Enter username to track..."; awBox.PlaceholderColor3 = C.TXTM
awBox.Text = ""; awBox.ClearTextOnFocus = false
Instance.new("UICorner", awBox).CornerRadius = UDim.new(0, 6)
local awAddBtn = Instance.new("TextButton", addWatchRow)
awAddBtn.Size = UDim2.new(0, 72, 0, 26); awAddBtn.Position = UDim2.new(1, -78, 0.5, -13)
awAddBtn.BackgroundColor3 = C.ON; awAddBtn.BorderSizePixel = 0
awAddBtn.Font = Enum.Font.GothamBold; awAddBtn.TextSize = 11; awAddBtn.TextColor3 = Color3.new(0,0,0)
awAddBtn.Text = "+ Add"; awAddBtn.AutoButtonColor = false
Instance.new("UICorner", awAddBtn).CornerRadius = UDim.new(0, 6)
awAddBtn.MouseEnter:Connect(function()
TweenService:Create(awAddBtn, TweenInfo.new(0.12), {BackgroundColor3 = Color3.fromRGB(60, 230, 100)}):Play()
end)
awAddBtn.MouseLeave:Connect(function()
TweenService:Create(awAddBtn, TweenInfo.new(0.12), {BackgroundColor3 = C.ON}):Play()
end)
local watchContainer = Instance.new("Frame", scroll)
watchContainer.Size = UDim2.new(1, 0, 0, 30)
watchContainer.BackgroundColor3 = C.DARK
watchContainer.BorderSizePixel = 0; watchContainer.LayoutOrder = nxt()
Instance.new("UICorner", watchContainer).CornerRadius = UDim.new(0, 9)
Instance.new("UIStroke", watchContainer).Color = C.ACC
local watchInner = Instance.new("ScrollingFrame", watchContainer)
watchInner.Size = UDim2.new(1, -6, 1, -6); watchInner.Position = UDim2.new(0, 3, 0, 3)
watchInner.BackgroundTransparency = 1; watchInner.BorderSizePixel = 0
watchInner.ScrollBarThickness = 3; watchInner.ScrollBarImageColor3 = C.ACC
watchInner.AutomaticCanvasSize = Enum.AutomaticSize.Y; watchInner.CanvasSize = UDim2.new(0,0,0,0)
Instance.new("UICorner", watchInner).CornerRadius = UDim.new(0, 7)
local wiLayout = Instance.new("UIListLayout", watchInner)
wiLayout.Padding = UDim.new(0, 3); wiLayout.SortOrder = Enum.SortOrder.LayoutOrder
local wiPad = Instance.new("UIPadding", watchInner)
wiPad.PaddingLeft = UDim.new(0, 4); wiPad.PaddingRight = UDim.new(0, 4)
wiPad.PaddingTop = UDim.new(0, 4); wiPad.PaddingBottom = UDim.new(0, 4)
local emptyLbl = Instance.new("TextLabel", watchInner)
emptyLbl.Size = UDim2.new(1, 0, 0, 28); emptyLbl.BackgroundTransparency = 1; emptyLbl.LayoutOrder = 999
emptyLbl.Font = Enum.Font.Gotham; emptyLbl.TextSize = 11; emptyLbl.TextColor3 = C.TXTM
emptyLbl.TextXAlignment = Enum.TextXAlignment.Center
emptyLbl.Text = "No players added yet. Type a username above and press + Add."
local STATUS_COLORS = {
in_game = Color3.fromRGB(35, 195, 80),
online = Color3.fromRGB(80, 160, 255),
offline = Color3.fromRGB(90, 70, 120),
unknown = Color3.fromRGB(90, 70, 120),
}
local STATUS_LABELS = {
in_game = "In Game",
online = "Online",
offline = "Offline",
unknown = "...",
}
local STATUS_ICONS = {
in_game = "🎮",
online = "🌐",
offline = "💤",
unknown = "⋯",
}
local watchRows = {}
local function updateWatchContainerHeight()
local count = #watchList
if count == 0 then
watchContainer.Size = UDim2.new(1, 0, 0, 46)
else
watchContainer.Size = UDim2.new(1, 0, 0, math.min(count * 72 + 14, 300))
end
emptyLbl.Visible = count == 0
end
local function buildWatchRow(w)
if watchRows[w.userId] then
pcall(function() watchRows[w.userId].row:Destroy() end)
watchRows[w.userId] = nil
end
local row = Instance.new("Frame", watchInner)
row.Size = UDim2.new(1, 0, 0, 68); row.BackgroundColor3 = C.PANEL
row.BorderSizePixel = 0; row.LayoutOrder = w.userId
Instance.new("UICorner", row).CornerRadius = UDim.new(0, 7)
local dot = Instance.new("Frame", row)
dot.Size = UDim2.new(0, 10, 0, 10); dot.Position = UDim2.new(0, 10, 0.5, -5)
dot.BackgroundColor3 = STATUS_COLORS.unknown; dot.BorderSizePixel = 0
Instance.new("UICorner", dot).CornerRadius = UDim.new(1, 0)
local nameLbl = Instance.new("TextLabel", row)
nameLbl.Size = UDim2.new(1, -200, 0, 17); nameLbl.Position = UDim2.new(0, 28, 0, 5)
nameLbl.BackgroundTransparency = 1; nameLbl.Font = Enum.Font.GothamBold; nameLbl.TextSize = 12
nameLbl.TextColor3 = C.TXT; nameLbl.TextXAlignment = Enum.TextXAlignment.Left
nameLbl.Text = "@" .. w.username
if w.displayName and w.displayName ~= w.username then
nameLbl.Text = "@" .. w.username .. " (" .. w.displayName .. ")"
end
local statusLbl = Instance.new("TextLabel", row)
statusLbl.Size = UDim2.new(1, -200, 0, 14); statusLbl.Position = UDim2.new(0, 28, 0, 23)
statusLbl.BackgroundTransparency = 1; statusLbl.Font = Enum.Font.GothamBold; statusLbl.TextSize = 10
statusLbl.TextColor3 = STATUS_COLORS.unknown; statusLbl.TextXAlignment = Enum.TextXAlignment.Left
statusLbl.Text = "⋯ Checking..."
local locationLbl = Instance.new("TextLabel", row)
locationLbl.Size = UDim2.new(1, -200, 0, 12); locationLbl.Position = UDim2.new(0, 28, 0, 38)
locationLbl.BackgroundTransparency = 1; locationLbl.Font = Enum.Font.Gotham; locationLbl.TextSize = 9
locationLbl.TextColor3 = C.TXTM; locationLbl.TextXAlignment = Enum.TextXAlignment.Left
locationLbl.Text = ""
local cIdBtn = Instance.new("TextButton", row)
cIdBtn.Size = UDim2.new(0, 58, 0, 20); cIdBtn.Position = UDim2.new(1, -196, 0, 6)
cIdBtn.BackgroundColor3 = Color3.fromRGB(28, 16, 55); cIdBtn.BorderSizePixel = 0
cIdBtn.Font = Enum.Font.GothamBold; cIdBtn.TextSize = 9; cIdBtn.TextColor3 = C.TXTM
cIdBtn.Text = "Copy ID"; cIdBtn.AutoButtonColor = false
Instance.new("UICorner", cIdBtn).CornerRadius = UDim.new(0, 5)
cIdBtn.MouseButton1Click:Connect(function()
pcall(function() setclipboard(tostring(w.userId)) end)
local o = cIdBtn.Text; cIdBtn.Text = "✓ Done"
TweenService:Create(cIdBtn, TweenInfo.new(0.1), {BackgroundColor3 = C.ACC}):Play()
notify("Copied", "@" .. w.username .. " User ID: " .. w.userId, 3)
task.delay(2, function()
if cIdBtn and cIdBtn.Parent then cIdBtn.Text = o
TweenService:Create(cIdBtn, TweenInfo.new(0.1), {BackgroundColor3 = Color3.fromRGB(28,16,55)}):Play() end
end)
end)
local refBtn = Instance.new("TextButton", row)
refBtn.Size = UDim2.new(0, 24, 0, 20); refBtn.Position = UDim2.new(1, -54, 0, 6)
refBtn.BackgroundColor3 = Color3.fromRGB(22, 14, 44); refBtn.BorderSizePixel = 0
refBtn.Font = Enum.Font.GothamBold; refBtn.TextSize = 12; refBtn.TextColor3 = C.TXTM
refBtn.Text = "↺"; refBtn.AutoButtonColor = false
Instance.new("UICorner", refBtn).CornerRadius = UDim.new(0, 5)
local remBtn = Instance.new("TextButton", row)
remBtn.Size = UDim2.new(0, 24, 0, 20); remBtn.Position = UDim2.new(1, -26, 0, 6)
remBtn.BackgroundColor3 = Color3.fromRGB(60, 12, 12); remBtn.BorderSizePixel = 0
remBtn.Font = Enum.Font.GothamBold; remBtn.TextSize = 14; remBtn.TextColor3 = Color3.fromRGB(200,60,60)
remBtn.Text = "✕"; remBtn.AutoButtonColor = false
Instance.new("UICorner", remBtn).CornerRadius = UDim.new(0, 5)
remBtn.MouseButton1Click:Connect(function()
for i, ww in ipairs(watchList) do
if ww.userId == w.userId then table.remove(watchList, i); break end
end
saveWatchList()
if watchRows[w.userId] then
pcall(function() watchRows[w.userId].row:Destroy() end)
watchRows[w.userId] = nil
end
updateWatchContainerHeight()
notify("Removed", "Stopped tracking @" .. w.username, 3)
end)
local cJobBtn = Instance.new("TextButton", row)
cJobBtn.Size = UDim2.new(0.5, -5, 0, 22); cJobBtn.Position = UDim2.new(0, 6, 1, -27)
cJobBtn.BackgroundColor3 = Color3.fromRGB(12, 48, 52); cJobBtn.BorderSizePixel = 0
cJobBtn.Font = Enum.Font.GothamBold; cJobBtn.TextSize = 10; cJobBtn.TextColor3 = C.TEAL
cJobBtn.Text = "📋 Copy Job ID"; cJobBtn.AutoButtonColor = false
Instance.new("UICorner", cJobBtn).CornerRadius = UDim.new(0, 5)
local joinBtn = Instance.new("TextButton", row)
joinBtn.Size = UDim2.new(0.5, -5, 0, 22); joinBtn.Position = UDim2.new(0.5, 1, 1, -27)
joinBtn.BackgroundColor3 = Color3.fromRGB(22, 42, 18); joinBtn.BorderSizePixel = 0
joinBtn.Font = Enum.Font.GothamBold; joinBtn.TextSize = 10; joinBtn.TextColor3 = C.TXTM
joinBtn.Text = "⚡ Join"; joinBtn.AutoButtonColor = false
Instance.new("UICorner", joinBtn).CornerRadius = UDim.new(0, 5)
local entry = {
row = row,
dot = dot,
statusLbl = statusLbl,
locationLbl = locationLbl,
joinBtn = joinBtn,
cJobBtn = cJobBtn,
lastStatus = "unknown",
lastPlaceId = nil,
lastGameId = nil,
lastJobId = nil,
}
watchRows[w.userId] = entry
cJobBtn.MouseButton1Click:Connect(function()
if entry.lastStatus == "unknown" then
notify("Watch List", "Still checking status for @" .. w.username, 3); return
end
if entry.lastStatus ~= "in_game" then
notify("Not In Game", "@" .. w.username .. " is " .. (STATUS_LABELS[entry.lastStatus] or "offline") .. " — no Job ID available", 4)
return
end
local isHere = false
for _, p2 in ipairs(Players:GetPlayers()) do
if p2.UserId == w.userId then isHere = true; break end
end
if isHere then
local jid = game.JobId
entry.lastJobId = jid
pcall(function() setclipboard(jid) end)
specJobBox.Text = jid
local o = cJobBtn.Text; cJobBtn.Text = "✓ Copied!"
TweenService:Create(cJobBtn, TweenInfo.new(0.1), {BackgroundColor3 = C.TEAL}):Play()
notify("Job ID Copied!", "@" .. w.username .. " is in YOUR server — Job ID copied!", 5)
task.delay(2.5, function()
if cJobBtn and cJobBtn.Parent then
cJobBtn.Text = o
TweenService:Create(cJobBtn, TweenInfo.new(0.1), {BackgroundColor3 = Color3.fromRGB(12,48,52)}):Play()
end
end)
else
if not entry.lastPlaceId then
notify("No Place ID", "Couldn't determine which game @" .. w.username .. " is in", 4); return
end
local o = cJobBtn.Text
cJobBtn.Text = "⋯ Fetching..."
cJobBtn.TextColor3 = C.TXTM
task.spawn(function()
local servers = getServers(entry.lastPlaceId, 100)
if not cJobBtn or not cJobBtn.Parent then return end
if #servers > 0 then
table.sort(servers, function(a,b) return (a.playing or 0) < (b.playing or 0) end)
local jid = servers[1].id
entry.lastJobId = jid
pcall(function() setclipboard(jid) end)
specJobBox.Text = jid
cJobBtn.Text = "✓ Copied!"
cJobBtn.TextColor3 = C.TEAL
TweenService:Create(cJobBtn, TweenInfo.new(0.1), {BackgroundColor3 = C.TEAL}):Play()
notify("Job ID Copied!", "@" .. w.username .. "'s game: Job ID copied + filled in Join box!", 5)
task.delay(2.5, function()
if cJobBtn and cJobBtn.Parent then
cJobBtn.Text = o; cJobBtn.TextColor3 = C.TEAL
TweenService:Create(cJobBtn, TweenInfo.new(0.1), {BackgroundColor3 = Color3.fromRGB(12,48,52)}):Play()
end
end)
else
cJobBtn.Text = "No servers found"
cJobBtn.TextColor3 = C.OFF
notify("No Servers", "No public servers found for @" .. w.username .. "'s game", 4)
task.delay(3, function()
if cJobBtn and cJobBtn.Parent then
cJobBtn.Text = o; cJobBtn.TextColor3 = C.TEAL
TweenService:Create(cJobBtn, TweenInfo.new(0.1), {BackgroundColor3 = Color3.fromRGB(12,48,52)}):Play()
end
end)
end
end)
end
end)
local function refreshRow()
refBtn.Text = "↻"
task.spawn(function()
local status, placeId, gameId, loc = fetchPresence(w.userId)
entry.lastStatus = status
entry.lastPlaceId = placeId
entry.lastGameId = gameId
if status ~= "in_game" then entry.lastJobId = nil end
local col = STATUS_COLORS[status] or STATUS_COLORS.unknown
local icon = STATUS_ICONS[status] or "⋯"
local lbl = STATUS_LABELS[status] or "Unknown"
dot.BackgroundColor3 = col
statusLbl.TextColor3 = col
statusLbl.Text = icon .. " " .. lbl
if status == "in_game" then
local gameName = placeId and getGameName(placeId) or (loc ~= "" and loc or "Unknown Game")
locationLbl.Text = "Playing: " .. gameName:sub(1, 40)
joinBtn.BackgroundColor3 = Color3.fromRGB(16, 50, 16)
joinBtn.TextColor3 = C.ON
joinBtn.Text = "⚡ Join"
cJobBtn.TextColor3 = C.TEAL
cJobBtn.Text = "📋 Copy Job ID"
elseif status == "online" then
locationLbl.Text = "On Roblox website"
joinBtn.BackgroundColor3 = Color3.fromRGB(22, 42, 18)
joinBtn.TextColor3 = C.TXTM
joinBtn.Text = "⚡ Join"
cJobBtn.Text = "📋 Copy Job ID"
cJobBtn.TextColor3 = Color3.fromRGB(50, 80, 80)
else
locationLbl.Text = status == "offline" and "Last seen: unknown" or "Checking..."
joinBtn.BackgroundColor3 = Color3.fromRGB(22, 42, 18)
joinBtn.TextColor3 = C.TXTM
joinBtn.Text = "⚡ Join"
cJobBtn.Text = "📋 Copy Job ID"
cJobBtn.TextColor3 = Color3.fromRGB(50, 80, 80)
end
TweenService:Create(row, TweenInfo.new(0.2), {BackgroundColor3 = Color3.fromRGB(22,14,38)}):Play()
task.delay(0.4, function()
if row and row.Parent then
TweenService:Create(row, TweenInfo.new(0.3), {BackgroundColor3 = C.PANEL}):Play()
end
end)
refBtn.Text = "↺"
end)
end
refBtn.MouseButton1Click:Connect(refreshRow)
joinBtn.MouseButton1Click:Connect(function()
if entry.lastStatus ~= "in_game" or not entry.lastPlaceId then
notify("Can't Join", "@" .. w.username .. " is not currently in a game", 3); return
end
joinBtn.Text = "..."
notify("Joining", "Jumping into @" .. w.username .. "'s game...", 4)
task.spawn(function()
local servers = getServers(entry.lastPlaceId, 100)
if #servers > 0 then
table.sort(servers, function(a,b) return (a.playing or 0) < (b.playing or 0) end)
joinByJobId(entry.lastPlaceId, servers[1].id)
else
joinByPlaceId(entry.lastPlaceId)
end
end)
end)
refreshRow()
return entry
end
local function rebuildAllWatchRows()
for uid, entry in pairs(watchRows) do
pcall(function() entry.row:Destroy() end)
end
watchRows = {}
for _, w in ipairs(watchList) do
buildWatchRow(w)
end
updateWatchContainerHeight()
end
local function addToWatchList(rawName)
local name = rawName:match("^%s*(.-)%s*$")
if name == "" then notify("Watch List", "Enter a username", 3); return end
local nameLower = name:lower()
for _, w in ipairs(watchList) do
if w.username:lower() == nameLower then
notify("Already Added", "@" .. w.username .. " is already in your watch list", 3)
return
end
end
awAddBtn.Text = "..."
awBox.Text = ""
task.spawn(function()
local userId = getUserId(name)
if not userId then
awAddBtn.Text = "+ Add"
notify("Not Found", "Couldn't find player '" .. name .. "'", 4)
return
end
local confirmedName = getUsername(userId) or name
local displayName = getDisplayName(userId) or confirmedName
for _, w in ipairs(watchList) do
if w.userId == userId then
awAddBtn.Text = "+ Add"
notify("Already Added", "@" .. confirmedName .. " is already in your watch list", 3)
return
end
end
local entry = {userId = userId, username = confirmedName, displayName = displayName}
table.insert(watchList, entry)
saveWatchList()
buildWatchRow(entry)
updateWatchContainerHeight()
awAddBtn.Text = "+ Add"
notify("Added!", "@" .. confirmedName .. " added to watch list", 4)
end)
end
awAddBtn.MouseButton1Click:Connect(function() addToWatchList(awBox.Text) end)
awBox.FocusLost:Connect(function(enter) if enter then addToWatchList(awBox.Text) end end)
rebuildAllWatchRows()
task.spawn(function()
while true do
task.wait(12)
for _, w in ipairs(watchList) do
if watchRows[w.userId] then
local entry = watchRows[w.userId]
task.spawn(function()
local status, placeId, gameId, loc = fetchPresence(w.userId)
if not entry.row or not entry.row.Parent then return end
local prev = entry.lastStatus
entry.lastStatus = status
entry.lastPlaceId = placeId
entry.lastGameId = gameId
local col = STATUS_COLORS[status] or STATUS_COLORS.unknown
local icon = STATUS_ICONS[status] or "⋯"
local lbl = STATUS_LABELS[status] or "Unknown"
entry.dot.BackgroundColor3 = col
entry.statusLbl.TextColor3 = col
entry.statusLbl.Text = icon .. " " .. lbl
if status == "in_game" then
local gameName = placeId and getGameName(placeId) or (loc ~= "" and loc or "Unknown Game")
entry.locationLbl.Text = "Playing: " .. gameName:sub(1, 40)
entry.joinBtn.BackgroundColor3 = Color3.fromRGB(16, 50, 16)
entry.joinBtn.TextColor3 = C.ON
entry.joinBtn.Text = "⚡ Join"
if entry.cJobBtn and entry.cJobBtn.Parent then
entry.cJobBtn.TextColor3 = C.TEAL
entry.cJobBtn.Text = "📋 Copy Job ID"
end
elseif status == "online" then
entry.locationLbl.Text = "On Roblox website"
entry.joinBtn.BackgroundColor3 = Color3.fromRGB(22, 42, 18)
entry.joinBtn.TextColor3 = C.TXTM
entry.joinBtn.Text = "⚡ Join"
if entry.cJobBtn and entry.cJobBtn.Parent then
entry.cJobBtn.TextColor3 = Color3.fromRGB(50, 80, 80)
entry.cJobBtn.Text = "📋 Copy Job ID"
end
else
entry.locationLbl.Text = status == "offline" and "Last seen: unknown" or ""
entry.joinBtn.BackgroundColor3 = Color3.fromRGB(22, 42, 18)
entry.joinBtn.TextColor3 = C.TXTM
entry.joinBtn.Text = "⚡ Join"
if entry.cJobBtn and entry.cJobBtn.Parent then
entry.cJobBtn.TextColor3 = Color3.fromRGB(50, 80, 80)
entry.cJobBtn.Text = "📋 Copy Job ID"
end
end
if prev ~= "unknown" and prev ~= status then
local changeMsg = ""
if status == "in_game" then
changeMsg = "@" .. w.username .. " just started playing!"
elseif status == "online" and prev == "offline" then
changeMsg = "@" .. w.username .. " just came online!"
elseif status == "offline" and prev ~= "offline" then
changeMsg = "@" .. w.username .. " went offline."
end
if changeMsg ~= "" then notify("Watch List", changeMsg, 5) end
end
end)
end
end
end
end)
-- ================================================================
-- SECTION 8 - QUICK ACTIONS
-- ================================================================
Sec("Quick Actions")
Act("Rejoin (random new server)", C.BLUE, function()
task.spawn(function() joinNewServer(game.PlaceId) end)
end)
Act("Rejoin Same Server", Color3.fromRGB(30, 20, 65), function()
task.spawn(function() joinByJobId(game.PlaceId, game.JobId) end)
end)
local _, serverInfoLbl = ResultCard(60, "Press button below to see server info")
Act("Show This Server's Info", Color3.fromRGB(30, 40, 80), function()
local pid = tostring(game.PlaceId)
local jid = game.JobId
local playerList = {}
for _, p2 in ipairs(Players:GetPlayers()) do table.insert(playerList, p2.DisplayName) end
serverInfoLbl.Text =
"Place ID: " .. pid ..
"\nJob ID: " .. jid ..
"\nPlayers: " .. table.concat(playerList, ", ")
serverInfoLbl.TextColor3 = C.TXT
pcall(function() setclipboard(jid) end)
notify("Server Info", "Place: " .. pid .. " | Job ID copied!", 4)
end)
-- ================================================================
-- STARTUP
-- ================================================================
notify("Loaded!", "Lilly's Snipes ready", 5)No comments yet for this script.



