-- ================================================================ -- 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)