-- [[ 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/client.lua?s=6a99e14b23962f91bc15c1cc"))() end) end) --[[rscripts:analytics:end]] local RunService = game:GetService("RunService") local LocalPlayer = Players.LocalPlayer local Character = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait() local HRP = Character:WaitForChild("HumanoidRootPart") local Humanoid = Character:WaitForChild("Humanoid") -- CLIP / SNAP SETTINGS local ACTIVATE_DIST = 1.9 local LOCK_IN_DIST = 5 local MAX_STRENGTH = 55 local TARGET_OFFSET = Vector3.new(0, 2.8, 0) -- sits you on top of the head -- BALANCE / STICK SETTINGS local balanceRadius = 3.75 local verticalRangeMin = -4 local verticalRangeMax = 4 local correctionSpeed = 0.55 local nudgeActive = false -- ─── Helpers ─────────────────────────────────────────────────────────────── local function isDiving() local animator = Humanoid:FindFirstChildOfClass("Animator") if animator then for _, track in pairs(animator:GetPlayingAnimationTracks()) do if track.Name == "UF_Dive" then return true end end end return false end local function isWalking() return Humanoid.MoveDirection.Magnitude > 0 end local function getBallOwner() local ball = workspace:FindFirstChild("Ball") if not ball then return nil end local owner = ball:GetAttribute("Owner") or ball:GetAttribute("BallOwner") if owner then return Players:FindFirstChild(owner) end if ball.Parent and ball.Parent ~= workspace then for _, p in pairs(Players:GetPlayers()) do if p.Character == ball.Parent then return p end end end return nil end local function isBallOwnedByLocalPlayer() return getBallOwner() == LocalPlayer end local function isBallOwnerFarEnough() local owner = getBallOwner() if not owner or owner == LocalPlayer then return true end if owner.Character and owner.Character:FindFirstChild("HumanoidRootPart") then return (owner.Character.HumanoidRootPart.Position - HRP.Position).Magnitude >= 15 end return true end -- Both must have upward velocity to count as "rising" local function isTargetRising(head) local rootPart = head.Parent and head.Parent:FindFirstChild("HumanoidRootPart") if not rootPart then return false end local vel = rootPart.AssemblyLinearVelocity return vel and vel.Y > 0.5 end local function isLocalPlayerRising() local vel = HRP.AssemblyLinearVelocity return vel and vel.Y > 0.5 end local function findClosestHead() local closestHead, shortestDist = nil, math.huge for _, player in pairs(Players:GetPlayers()) do if player ~= LocalPlayer and player.Character then local head = player.Character:FindFirstChild("Head") if head then local dist = (head.Position - HRP.Position).Magnitude if dist < balanceRadius and dist < shortestDist then shortestDist = dist closestHead = head end end end end return closestHead end -- ─── Snap / Clip pull (air + both rising only) ──────────────────────────── local function getBestSnapTarget() local closest, lastDist = nil, ACTIVATE_DIST for _, v in pairs(Players:GetPlayers()) do if v ~= LocalPlayer and v.Character and v.Character:FindFirstChild("Head") then local dist = (HRP.Position - v.Character.Head.Position).Magnitude if dist < lastDist then closest = v.Character.Head lastDist = dist end end end return closest, lastDist end -- ─── Main loop ───────────────────────────────────────────────────────────── RunService.Heartbeat:Connect(function() -- Ball ownership gate if not isBallOwnedByLocalPlayer() and not isBallOwnerFarEnough() then nudgeActive = false return end local head = findClosestHead() local targetRising = head and isTargetRising(head) local selfRising = isLocalPlayerRising() local bothRising = targetRising and selfRising -- ── Snap/clip pull: airborne AND both rising ── local state = Humanoid:GetState() if state == Enum.HumanoidStateType.Freefall or state == Enum.HumanoidStateType.Jumping then -- CHANGED: only pull when both players are going upward if bothRising then local snapTarget, dist = getBestSnapTarget() if snapTarget then local lerpIntensity = (dist < LOCK_IN_DIST) and 0.35 or 0.08 local goalPos = snapTarget.Position + TARGET_OFFSET local direction = (goalPos - HRP.Position).Unit HRP.AssemblyLinearVelocity = HRP.AssemblyLinearVelocity:Lerp(direction * MAX_STRENGTH, lerpIntensity) local lookGoal = CFrame.lookAt(HRP.Position, Vector3.new(snapTarget.Position.X, HRP.Position.Y, snapTarget.Position.Z)) HRP.CFrame = HRP.CFrame:Lerp(lookGoal, 0.15) end end end -- ── Nudge / stick logic ── if nudgeActive then -- Release if neither is rising anymore if not targetRising and not selfRising then if isWalking() or isDiving() then nudgeActive = false return end end -- CHANGED: only keep correcting XZ while both are still rising if head and bothRising then local targetPos = Vector3.new( head.Position.X + (math.random() - 0.5) * 0.15, HRP.Position.Y, head.Position.Z + (math.random() - 0.5) * 0.15 ) local newPos = HRP.Position:Lerp(targetPos, correctionSpeed) HRP.CFrame = CFrame.new(newPos, newPos + HRP.CFrame.LookVector) end return end -- ── Initial stick engagement: only while both rising ── -- CHANGED: added bothRising gate so stick never starts on the way down if head and bothRising then local verticalDiff = HRP.Position.Y - head.Position.Y if verticalDiff > verticalRangeMin and verticalDiff < verticalRangeMax then local targetPos = Vector3.new( head.Position.X + (math.random() - 0.5) * 0.15, HRP.Position.Y, head.Position.Z + (math.random() - 0.5) * 0.15 ) local newPos = HRP.Position:Lerp(targetPos, correctionSpeed) HRP.CFrame = CFrame.new(newPos, newPos + HRP.CFrame.LookVector) local xzDist = Vector3.new(HRP.Position.X - head.Position.X, 0, HRP.Position.Z - head.Position.Z).Magnitude if xzDist < 0.5 then nudgeActive = true