-- [[ 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=6aa7eabd69ea4aa57bf49398"))() end) end) --[[rscripts:analytics:end]] --========================================================-- -- SAE PASS (STICK BALL TO TARGET UNTIL PICKED) -- --========================================================-- local Players = game:GetService("Players") local UserInputService = game:GetService("UserInputService") local RunService = game:GetService("RunService") local player = Players.LocalPlayer local playerGui = player:WaitForChild("PlayerGui") local camera = workspace.CurrentCamera local BALL_NAME = "Ball" local State = { enabled = true, selectedTarget = nil, targetHighlight = nil, wasHoldingBall = false, isSticking = false -- Trạng thái đang giữ dính bóng } --========================================================-- -- NOTIFICATION SYSTEM --========================================================-- local notificationHolder = Instance.new("Frame") notificationHolder.Name = "SaePassNotifications" notificationHolder.Size = UDim2.fromOffset(280, 200) notificationHolder.AnchorPoint = Vector2.new(0.5, 0) notificationHolder.Position = UDim2.new(0.5, 0, 0, 10) notificationHolder.BackgroundTransparency = 1 local layout = Instance.new("UIListLayout") layout.Padding = UDim.new(0, 5) layout.HorizontalAlignment = Enum.HorizontalAlignment.Center layout.Parent = notificationHolder local function notify(titleText, bodyText, duration) duration = duration or 1.5 local card = Instance.new("Frame") card.Size = UDim2.fromOffset(240, 42) card.BackgroundColor3 = Color3.fromRGB(25, 25, 32) card.BorderSizePixel = 0 card.Parent = notificationHolder Instance.new("UICorner", card).CornerRadius = UDim.new(0, 8) local stroke = Instance.new("UIStroke") stroke.Color = Color3.fromRGB(70, 70, 90) stroke.Transparency = 0.2 stroke.Parent = card local title = Instance.new("TextLabel") title.Size = UDim2.new(1, -12, 0, 16) title.Position = UDim2.fromOffset(6, 4) title.BackgroundTransparency = 1 title.Text = tostring(titleText) title.Font = Enum.Font.GothamBold title.TextSize = 11 title.TextColor3 = Color3.fromRGB(255, 255, 255) title.TextXAlignment = Enum.TextXAlignment.Left title.Parent = card local body = Instance.new("TextLabel") body.Size = UDim2.new(1, -12, 0, 16) body.Position = UDim2.fromOffset(6, 20) body.BackgroundTransparency = 1 body.Text = tostring(bodyText) body.Font = Enum.Font.Gotham body.TextSize = 10 body.TextColor3 = Color3.fromRGB(180, 180, 190) body.TextXAlignment = Enum.TextXAlignment.Left body.Parent = card task.delay(duration, function() if card and card.Parent then card:Destroy() end end) end --========================================================-- -- CORE HELPER FUNCTIONS --========================================================-- local function findBall() local direct = workspace:FindFirstChild(BALL_NAME) if direct and direct:IsA("BasePart") then return direct end for _, obj in ipairs(workspace:GetChildren()) do if obj:IsA("BasePart") and string.lower(obj.Name) == string.lower(BALL_NAME) then return obj end end return workspace:FindFirstChild(BALL_NAME, true) end -- Kiểm tra xem có BẤT KỲ AI đang cầm bóng trong người hay không local function isAnyPlayerHoldingBall() for _, plr in ipairs(Players:GetPlayers()) do if plr.Character and plr.Character:FindFirstChild(BALL_NAME, true) then return true, plr end end return false, nil end local function localHasBall() if not player.Character then return false end return player.Character:FindFirstChild(BALL_NAME, true) ~= nil end local function sameTeam(plr) return plr and player.Team and plr.Team == player.Team end local function getPlayerRoot(plr) if not plr or not plr.Character then return nil end return plr.Character:FindFirstChild("HumanoidRootPart") end local function clearTarget() State.selectedTarget = nil State.isSticking = false if State.targetHighlight then State.targetHighlight:Destroy() State.targetHighlight = nil end end local function highlightTarget(plr) clearTarget() if not plr or not plr.Character then return end State.selectedTarget = plr local hl = Instance.new("Highlight") hl.Name = "SaeTargetHL" hl.FillColor = Color3.fromRGB(0, 255, 120) hl.FillTransparency = 0.4 hl.OutlineColor = Color3.fromRGB(255, 255, 255) hl.OutlineTransparency = 0 hl.Adornee = plr.Character hl.Parent = plr.Character State.targetHighlight = hl end local function getClosestTeammateToMouse() camera = workspace.CurrentCamera if not camera then return nil end local mousePos = UserInputService:GetMouseLocation() local best, bestDist = nil, math.huge for _, plr in ipairs(Players:GetPlayers()) do if plr ~= player and sameTeam(plr) and plr.Character then local hrp = getPlayerRoot(plr) if hrp then local point, onScreen = camera:WorldToViewportPoint(hrp.Position) if onScreen and point.Z > 0 then local dist = (Vector2.new(point.X, point.Y) - mousePos).Magnitude if dist < bestDist then bestDist = dist best = plr end end end end end return best end -- Hàm khóa chặt bóng vào ngay phía trước chân mục tiêu local function stickBallToTarget(target) if not target or not target.Character then return end local targetRoot = getPlayerRoot(target) local ball = findBall() if ball and targetRoot then pcall(function() -- Khóa vận tốc bóng để bóng không bị nảy hay văng ra ngoài ball.AssemblyLinearVelocity = Vector3.zero ball.AssemblyAngularVelocity = Vector3.zero -- Ép vị trí bóng dính sát ngay trước chân mục tiêu (dưới mặt đất 1.5 stud) ball.CFrame = targetRoot.CFrame * CFrame.new(0, -1.5, -1) end) end end --========================================================-- -- GUI INTERFACE --========================================================-- local gui = Instance.new("ScreenGui") gui.Name = "SaePassAutoTPGui" gui.ResetOnSpawn = false gui.IgnoreGuiInset = true gui.Parent = playerGui notificationHolder.Parent = gui local mainFrame = Instance.new("Frame") mainFrame.Size = UDim2.fromOffset(200, 90) mainFrame.Position = UDim2.new(0.05, 0, 0.4, 0) mainFrame.BackgroundColor3 = Color3.fromRGB(20, 20, 26) mainFrame.BorderSizePixel = 0 mainFrame.Parent = gui Instance.new("UICorner", mainFrame).CornerRadius = UDim.new(0, 10) local stroke = Instance.new("UIStroke") stroke.Color = Color3.fromRGB(60, 60, 80) stroke.Transparency = 0.2 stroke.Parent = mainFrame local titleLabel = Instance.new("TextLabel") titleLabel.Size = UDim2.new(1, 0, 0, 30) titleLabel.Position = UDim2.fromOffset(0, 2) titleLabel.BackgroundTransparency = 1 titleLabel.Text = "⚽ SAE PASS (AUTO TP)" titleLabel.TextColor3 = Color3.fromRGB(255, 255, 255) titleLabel.TextSize = 12 titleLabel.Font = Enum.Font.GothamBold titleLabel.Parent = mainFrame local toggleBtn = Instance.new("TextButton") toggleBtn.Size = UDim2.fromOffset(160, 36) toggleBtn.Position = UDim2.fromOffset(20, 40) toggleBtn.BackgroundColor3 = Color3.fromRGB(35, 35, 45) toggleBtn.BorderSizePixel = 0 toggleBtn.Text = "SAE PASS: ON" toggleBtn.TextColor3 = Color3.fromRGB(100, 255, 130) toggleBtn.TextSize = 12 toggleBtn.Font = Enum.Font.GothamMedium toggleBtn.Parent = mainFrame Instance.new("UICorner", toggleBtn).CornerRadius = UDim.new(0, 8) -- Drag UI local dragging, dragStart, startPos titleLabel.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = true dragStart = input.Position startPos = mainFrame.Position input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end) end end) UserInputService.InputChanged:Connect(function(input) if dragging and input.UserInputType == Enum.UserInputType.MouseMovement then local delta = input.Position - dragStart mainFrame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) end end) toggleBtn.MouseButton1Click:Connect(function() State.enabled = not State.enabled if not State.enabled then clearTarget() toggleBtn.Text = "SAE PASS: OFF" toggleBtn.TextColor3 = Color3.fromRGB(255, 100, 100) else toggleBtn.Text = "SAE PASS: ON" toggleBtn.TextColor3 = Color3.fromRGB(100, 255, 130) end notify("SAE PASS", State.enabled and "Enabled" or "Disabled", 1.2) end) --========================================================-- -- EVENT LISTENERS & LOOP --========================================================-- -- Bấm phím F để khóa dính bóng vào đồng đội UserInputService.InputBegan:Connect(function(input, gameProcessed) if gameProcessed or not State.enabled then return end if input.KeyCode == Enum.KeyCode.F then local target = getClosestTeammateToMouse() if not target then notify("SAE PASS", "No teammate found near mouse", 1.2) return end highlightTarget(target) State.isSticking = true if localHasBall() then notify("SAE PASS", "Locked " .. target.Name .. "! Will stick on release", 1.5) else notify("SAE PASS", "Sticking ball to " .. target.Name .. "!", 1.5) end end end) -- Vòng lặp RenderStepped (chạy ở mọi khung hình FPS) để bóng không bị trôi ra ngoài RunService.RenderStepped:Connect(function() if not State.enabled then return end local isHeld, holder = isAnyPlayerHoldingBall() -- Nếu đã có người nhặt bóng thành công (chui vào người/balo) -> Ngắt khóa if isHeld then if State.isSticking then notify("SAE PASS", holder.Name .. " picked up the ball!", 1.2) clearTarget() end return end -- Khóa vị trí bóng liên tục theo từng mili-giây if State.isSticking and State.selectedTarget then stickBallToTarget(State.selectedTarget) end end) notify("SAE PASS", "Script is ready", 1.5)