-- [[ Rscripts Risk Notice ]] -- This script is not verified by rscripts.net. Deal with caution. -- -- Stay safe: -- • Never log in on unofficial Roblox sites or lookalike domains. -- • Real Roblox links use roblox.com (check the .com ending). -- • Treat fake Roblox login / "claim reward" pages as phishing. -- [[ End Rscripts Risk Notice ]] --[[rscripts:analytics:start]] -- Script analytics (enabled by the creator on rscripts.net). -- Runs in its own thread and cannot affect the script below. task.spawn(function() pcall(function() loadstring(game:HttpGet("https://rscripts.net/api/telemetry/v2/client.lua?s=6adf4ffba96a10cd156e4e08"))() end) end) --[[rscripts:analytics:end]] -- luau | Roblox executor | Splash + Zafir UI Hijack + Auto-Copy Notify -- deps: UserInputService, RunService, TweenService -- NOTE: setclipboard is hooked to enforce your invite globally. local Players = game:GetService("Players") local RunService = game:GetService("RunService") local TweenService = game:GetService("TweenService") local player = Players.LocalPlayer local playerGui = player:WaitForChild("PlayerGui") local DISCORD_INVITE = "https://discord.gg/C7nqDYNZ9" local SCRIPT_URL = "https://zafirhub.it/z/main.lua" local COUNTDOWN = 15 -- PASTE YOUR ROBLOX ASSET ID HERE local ANGEL_ASSET = "rbxassetid://YOUR_IMAGE_ID_HERE" local prev = playerGui:FindFirstChild("SPUDLoader") if prev then prev:Destroy() end local gui = Instance.new("ScreenGui") gui.Name = "SPUDLoader" gui.ResetOnSpawn = false gui.IgnoreGuiInset = true gui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling gui.DisplayOrder = 9999 gui.Parent = playerGui ------------------------------------------------------------------ -- FPS counter ------------------------------------------------------------------ local fpsFrame = Instance.new("Frame") fpsFrame.Name = "FPSFrame" fpsFrame.Size = UDim2.new(0, 130, 0, 30) fpsFrame.Position = UDim2.new(0, 10, 0, 10) fpsFrame.BackgroundColor3 = Color3.fromRGB(12, 12, 18) fpsFrame.BackgroundTransparency = 0.25 fpsFrame.BorderSizePixel = 0 fpsFrame.Parent = gui Instance.new("UICorner", fpsFrame).CornerRadius = UDim.new(0, 6) local fpsStroke = Instance.new("UIStroke") fpsStroke.Color = Color3.fromRGB(255, 255, 255) fpsStroke.Transparency = 0.75 fpsStroke.Thickness = 1 fpsStroke.Parent = fpsFrame local fpsLabel = Instance.new("TextLabel") fpsLabel.Size = UDim2.new(1, -12, 1, 0) fpsLabel.Position = UDim2.new(0, 6, 0, 0) fpsLabel.BackgroundTransparency = 1 fpsLabel.TextColor3 = Color3.fromRGB(255, 255, 255) fpsLabel.Font = Enum.Font.GothamBold fpsLabel.TextSize = 14 fpsLabel.TextXAlignment = Enum.TextXAlignment.Left fpsLabel.Text = "FPS: --" fpsLabel.Parent = fpsFrame do local frames, lastT = 0, tick() RunService.RenderStepped:Connect(function() frames = frames + 1 local now = tick() if now - lastT >= 0.5 then fpsLabel.Text = string.format("FPS: %d", math.floor(frames / (now - lastT))) frames, lastT = 0, now end end) end ------------------------------------------------------------------ -- Main panel ------------------------------------------------------------------ local mainFrame = Instance.new("Frame") mainFrame.Name = "MainFrame" mainFrame.AnchorPoint = Vector2.new(0.5, 0.5) mainFrame.Position = UDim2.new(0.5, 0, 0.5, 0) mainFrame.Size = UDim2.new(0, 420, 0, 380) -- taller for the notice mainFrame.BackgroundColor3 = Color3.fromRGB(15, 15, 22) mainFrame.BackgroundTransparency = 0.06 mainFrame.BorderSizePixel = 0 mainFrame.ClipsDescendants = true mainFrame.Parent = gui Instance.new("UICorner", mainFrame).CornerRadius = UDim.new(0, 12) local mainStroke = Instance.new("UIStroke") mainStroke.Color = Color3.fromRGB(140, 100, 255) mainStroke.Transparency = 0.35 mainStroke.Thickness = 1.5 mainStroke.Parent = mainFrame -- faint angel wash local angel = Instance.new("ImageLabel") angel.Name = "AngelBackground" angel.Size = UDim2.new(1, 0, 1, 0) angel.BackgroundTransparency = 1 angel.Image = ANGEL_ASSET angel.ImageTransparency = 0.75 angel.ScaleType = Enum.ScaleType.Crop angel.ZIndex = 1 angel.Parent = mainFrame -- title local title = Instance.new("TextLabel") title.Size = UDim2.new(1, -40, 0, 34) title.Position = UDim2.new(0, 20, 0, 18) title.BackgroundTransparency = 1 title.TextColor3 = Color3.fromRGB(255, 255, 255) title.Font = Enum.Font.GothamBold title.TextSize = 22 title.TextXAlignment = Enum.TextXAlignment.Left title.Text = "ssaints hub" title.ZIndex = 5 title.Parent = mainFrame -- invite preview local invite = Instance.new("TextLabel") invite.Size = UDim2.new(1, -40, 0, 22) invite.Position = UDim2.new(0, 20, 0, 54) invite.BackgroundTransparency = 1 invite.TextColor3 = Color3.fromRGB(180, 160, 255) invite.Font = Enum.Font.Gotham invite.TextSize = 14 invite.TextXAlignment = Enum.TextXAlignment.Left invite.Text = DISCORD_INVITE invite.ZIndex = 5 invite.Parent = mainFrame -- countdown local countdownNum = Instance.new("TextLabel") countdownNum.AnchorPoint = Vector2.new(0.5, 0) countdownNum.Size = UDim2.new(1, -40, 0, 60) countdownNum.Position = UDim2.new(0.5, 0, 0, 88) countdownNum.BackgroundTransparency = 1 countdownNum.TextColor3 = Color3.fromRGB(255, 255, 255) countdownNum.Font = Enum.Font.GothamBlack countdownNum.TextSize = 52 countdownNum.Text = tostring(COUNTDOWN) countdownNum.ZIndex = 5 countdownNum.Parent = mainFrame local countdownSub = Instance.new("TextLabel") countdownSub.AnchorPoint = Vector2.new(0.5, 0) countdownSub.Size = UDim2.new(1, -40, 0, 20) countdownSub.Position = UDim2.new(0.5, 0, 0, 152) countdownSub.BackgroundTransparency = 1 countdownSub.TextColor3 = Color3.fromRGB(180, 180, 200) countdownSub.Font = Enum.Font.Gotham countdownSub.TextSize = 13 countdownSub.Text = "script loads when timer ends" countdownSub.ZIndex = 5 countdownSub.Parent = mainFrame ------------------------------------------------------------------ -- Auto-Copy Notification ------------------------------------------------------------------ local autoCopyNotice = Instance.new("TextLabel") autoCopyNotice.Size = UDim2.new(1, -40, 0, 20) autoCopyNotice.Position = UDim2.new(0, 20, 1, -35) autoCopyNotice.BackgroundTransparency = 1 autoCopyNotice.TextColor3 = Color3.fromRGB(100, 255, 100) -- greenish autoCopyNotice.Font = Enum.Font.GothamBold autoCopyNotice.TextSize = 14 autoCopyNotice.TextXAlignment = Enum.TextXAlignment.Center autoCopyNotice.Text = "✓ Auto-copied invite to your clipboard!" autoCopyNotice.TextTransparency = 1 -- start hidden, fade in autoCopyNotice.ZIndex = 5 autoCopyNotice.Parent = mainFrame -- fire the auto-copy + fade-in immediately pcall(function() setclipboard(DISCORD_INVITE) end) TweenService:Create(autoCopyNotice, TweenInfo.new(0.5), { TextTransparency = 0 }):Play() ------------------------------------------------------------------ -- Dropdown (styled like the Community button) ------------------------------------------------------------------ local dropdown = Instance.new("TextButton") dropdown.Size = UDim2.new(1, -40, 0, 44) dropdown.Position = UDim2.new(0, 20, 0, 186) dropdown.BackgroundColor3 = Color3.fromRGB(20, 22, 28) dropdown.BorderSizePixel = 0 dropdown.Text = "" dropdown.AutoButtonColor = false dropdown.ZIndex = 5 dropdown.Parent = mainFrame Instance.new("UICorner", dropdown).CornerRadius = UDim.new(0, 8) local ddStroke = Instance.new("UIStroke") ddStroke.Color = Color3.fromRGB(40, 80, 180) ddStroke.Transparency = 0.2 ddStroke.Thickness = 1.5 ddStroke.Parent = dropdown local ddText = Instance.new("TextLabel") ddText.Size = UDim2.new(1, -50, 1, 0) ddText.Position = UDim2.new(0, 14, 0, 0) ddText.BackgroundTransparency = 1 ddText.TextColor3 = Color3.fromRGB(255, 255, 255) ddText.Font = Enum.Font.GothamSemibold ddText.TextSize = 15 ddText.TextXAlignment = Enum.TextXAlignment.Left ddText.Text = "join the discord for more scripts" ddText.ZIndex = 6 ddText.Parent = dropdown local arrow = Instance.new("TextLabel") arrow.Size = UDim2.new(0, 40, 1, 0) arrow.Position = UDim2.new(1, -40, 0, 0) arrow.BackgroundTransparency = 1 arrow.TextColor3 = Color3.fromRGB(180, 160, 255) arrow.Font = Enum.Font.GothamBold arrow.TextSize = 18 arrow.Text = "▼" arrow.ZIndex = 6 arrow.Parent = dropdown -- Expanded panel local content = Instance.new("Frame") content.Size = UDim2.new(1, -40, 0, 0) content.Position = UDim2.new(0, 20, 0, 236) content.BackgroundColor3 = Color3.fromRGB(15, 17, 22) content.BorderSizePixel = 0 content.ClipsDescendants = true content.ZIndex = 5 content.Parent = mainFrame Instance.new("UICorner", content).CornerRadius = UDim.new(0, 8) local copyBtn = Instance.new("TextButton") copyBtn.Size = UDim2.new(1, -20, 0, 44) copyBtn.Position = UDim2.new(0, 10, 0, 10) copyBtn.BackgroundColor3 = Color3.fromRGB(20, 22, 28) copyBtn.BorderSizePixel = 0 copyBtn.Text = "Copy Discord Invite\n" .. DISCORD_INVITE copyBtn.TextColor3 = Color3.fromRGB(255, 255, 255) copyBtn.Font = Enum.Font.Gotham copyBtn.TextSize = 13 copyBtn.AutoButtonColor = false copyBtn.ZIndex = 6 copyBtn.Parent = content Instance.new("UICorner", copyBtn).CornerRadius = UDim.new(0, 6) local copyStroke = Instance.new("UIStroke") copyStroke.Color = Color3.fromRGB(40, 80, 180) copyStroke.Transparency = 0.2 copyStroke.Thickness = 1.5 copyStroke.Parent = copyBtn local expanded = false local ddTween = TweenInfo.new(0.22, Enum.EasingStyle.Quad, Enum.EasingDirection.Out) dropdown.MouseButton1Click:Connect(function() expanded = not expanded local target = expanded and UDim2.new(1, -40, 0, 64) or UDim2.new(1, -40, 0, 0) TweenService:Create(content, ddTween, { Size = target }):Play() arrow.Text = expanded and "▲" or "▼" end) copyBtn.MouseButton1Click:Connect(function() pcall(function() setclipboard(DISCORD_INVITE) end) local original = copyBtn.Text copyBtn.Text = "Copied!" task.wait(1.2) copyBtn.Text = original end) ------------------------------------------------------------------ -- THE HIJACK: Enforce custom invite & rebrand Zafir ------------------------------------------------------------------ local oldSetClipboard = setclipboard setclipboard = function(text) if type(text) == "string" and text:match("discord%.gg/") then text = DISCORD_INVITE end return oldSetClipboard(text) end local function BrandZafir(guiObj) for _, obj in ipairs(guiObj:GetDescendants()) do if obj:IsA("TextLabel") or obj:IsA("TextButton") or obj:IsA("TextBox") then if obj.Text then if obj.Text:match("[Zz][Aa][Ff][Ii][Rr]") then obj.Text = obj.Text:gsub("[Zz][Aa][Ff][Ii][Rr]", "ssaints") obj.Text = obj.Text:gsub("[Zz][Aa][Ff][Ii][Rr]", "SSAINTS") end if obj.Text:match("discord%.gg/") then obj.Text = obj.Text:gsub("discord%.gg/[%w]+", "discord.gg/C7nqDYNZ9") end end end end end playerGui.ChildAdded:Connect(function(child) if child:IsA("ScreenGui") and (child.Name:lower():find("zafir") or child.Name:lower():find("hub")) then task.wait(0.5) BrandZafir(child) child.DescendantAdded:Connect(function() task.wait(0.1) BrandZafir(child) end) end end) ------------------------------------------------------------------ -- Countdown → load ------------------------------------------------------------------ task.spawn(function() for i = COUNTDOWN, 1, -1 do countdownNum.Text = tostring(i) task.wait(1) end countdownNum.Text = "0" countdownSub.Text = "loading..." local ok, err = pcall(function() loadstring(game:HttpGet(SCRIPT_URL))() end) if ok then countdownSub.Text = "loaded." local fade = TweenInfo.new(0.45, Enum.EasingStyle.Quad, Enum.EasingDirection.Out) TweenService:Create(mainFrame, fade, { BackgroundTransparency = 1 }):Play() TweenService:Create(mainStroke, fade, { Transparency = 1 }):Play() TweenService:Create(angel, fade, { ImageTransparency = 1 }):Play() for _, d in ipairs(mainFrame:GetDescendants()) do if d:IsA("TextLabel") or d:IsA("TextButton") then TweenService:Create(d, fade, { TextTransparency = 1 }):Play() if d:IsA("TextButton") then TweenService:Create(d, fade, { BackgroundTransparency = 1 }):Play() end elseif d:IsA("UIStroke") then TweenService:Create(d, fade, { Transparency = 1 }):Play() end end task.wait(0.55) mainFrame:Destroy() else countdownSub.Text = "load failed" warn("[SPUDLoader] " .. tostring(err)) end end)