-- [[ 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 ]] local Players = game:GetService("Players") local RunService = game:GetService("RunService") local Workspace = game:GetService("Workspace") local ReplicatedStorage = game:GetService("ReplicatedStorage") local Stats = game:GetService("Stats") local VirtualInputManager = game:GetService("VirtualInputManager") while not Players.LocalPlayer do task.wait(0.01) end local LocalPlayer = Players.LocalPlayer _G.ShowVisualBubble = true _G.CalculatedClientPing = 0.020 _G.ActiveTargetBallInstance = nil _G.LatestSniffedWeldArguments = {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1} _G.READY_ZONE_POSITION = Vector3.new(568.2, 284.7, -784.5) _G.PositionCache = _G.PositionCache or {} local PositionCache = _G.PositionCache local PARRY_PREDICTION_BUFFER = 0.065 local MAX_PARRY_DISTANCE = 110 local CRITICAL_CLOSE_RANGE = 16.5 local PARRY_COOLDOWN = 0.08 local VELOCITY_SPIKE_DETECT = 10 local CURVE_ANGLE_THRESHOLD = 10 local MAXIMUM_TRACKING_SPEED = 750 local Q_POS_NOISE = 0.50 local Q_VEL_NOISE = 0.85 local Q_ACC_NOISE = 1.05 local R_MEASUREMENT_NOISE = 0.001 local LastParryTime = 0 local LastParriedBall = nil local TrackedBallsList = {} local CurrentRadiusTarget = CRITICAL_CLOSE_RANGE task.spawn(function() local pingModule = ReplicatedStorage:FindFirstChild("SupportModules") and ReplicatedStorage.SupportModules:FindFirstChild("Ping") local pingFunction = pingModule and pingModule:FindFirstChild("PingRemoteFunction") local setPingEvent = pingModule and pingModule:FindFirstChild("SetPing") if not pingFunction or not setPingEvent then return end local randomGen = Random.new() while true do pcall(function() local startTime = os.clock() pingFunction:InvokeServer() local rawRoundTripTime = os.clock() - startTime local safePingValue = rawRoundTripTime if safePingValue < 0.005 then safePingValue = 0.021 + (randomGen:NextNumber(0, 4) / 1000) end _G.CalculatedClientPing = math.clamp(safePingValue, 0.002, 0.25) setPingEvent:FireServer(safePingValue) end) task.wait(3) end end) task.spawn(function() while true do pcall(function() local Actions = ReplicatedStorage:FindFirstChild("Actions") local Values = ReplicatedStorage:FindFirstChild("Values") if Actions and Actions:FindFirstChild("SET_READY_STATE") then Actions.SET_READY_STATE:Fire(true) end if Values and Values:FindFirstChild("IS_READY") and Values.IS_READY:FindFirstChild("Set") then Values.IS_READY:Set(true) end local PlayerGui = LocalPlayer:FindFirstChild("PlayerGui") local HUD = PlayerGui and PlayerGui:FindFirstChild("HUD") local HolderBottom = HUD and HUD:FindFirstChild("HolderBottom") local IntermissionFrame = HolderBottom and HolderBottom:FindFirstChild("IntermissionFrame") if IntermissionFrame and IntermissionFrame.Visible == true then local character = LocalPlayer.Character local rootPart = character and (character:FindFirstChild("FakeRoot") or character:FindFirstChild("HumanoidRootPart") or character.PrimaryPart) local readyCoords = _G.READY_ZONE_POSITION or Vector3.new(568.2, 284.7, -784.5) if rootPart then local currentLook = rootPart.CFrame.LookVector local flatLook = Vector3.new(currentLook.X, 0, currentLook.Z).Unit rootPart.CFrame = CFrame.lookAt(readyCoords, readyCoords + flatLook) rootPart.AssemblyLinearVelocity = Vector3.zero rootPart.AssemblyAngularVelocity = Vector3.zero end end end) task.wait(0.1) end end) task.spawn(function() local rawMetatable = getrawmetatable(game) if not rawMetatable or not makewriteable then return end setreadonly(rawMetatable, false) local originalNamecall = rawMetatable.__namecall rawMetatable.__namecall = newcclosure(function(self, ...) local method = getnamecallmethod() local args = {...} if self.Name == "UnreliableReplicateWelds" and method == "FireServer" then if #args >= 12 and typeof(args[1]) == "number" then _G.LatestSniffedWeldArguments = args end end return originalNamecall(self, ...) end) setreadonly(rawMetatable, true) end) local VisualBubble = Instance.new("Part") VisualBubble.Name = "DeathBallIndicatorBubble" VisualBubble.Shape = Enum.PartType.Ball VisualBubble.Material = Enum.Material.ForceField VisualBubble.Color = Color3.fromRGB(0, 255, 150) VisualBubble.Transparency = 0.75 VisualBubble.CanCollide = false VisualBubble.Anchored = true VisualBubble.CastShadow = false VisualBubble.Size = Vector3.new(0, 0, 0) VisualBubble.Parent = Workspace local function IdentifyTargetBall(instance) if not instance then return false end local name = instance.Name local class = instance.ClassName return (name == "Ball" or name == "Part") and (class == "Part" or class == "MeshPart") end local function IsBallTargetingMe() local character = LocalPlayer.Character if not character then return false end local highlight = character:FindFirstChildOfClass("Highlight") if highlight and highlight.FillTransparency ~= 1 then return true end for _, item in ipairs(character:GetChildren()) do if item.Name:lower():find("target") and (item:IsA("BoolValue") or item:IsA("ObjectValue")) then return true end end if character:GetAttribute("IsTarget") == true or character:GetAttribute("Target") == LocalPlayer.Name then return true end return false end local function IsCrowdInBubble(playerPos, scanRadius) local crowdCount = 0 for _, player in ipairs(Players:GetPlayers()) do if player ~= LocalPlayer and player.Character then local root = player.Character:FindFirstChild("HumanoidRootPart") or player.Character.PrimaryPart if root then local dist = (playerPos - root.Position).Magnitude if dist <= scanRadius then crowdCount = crowdCount + 1 end end end end return crowdCount > 0 end local function FireParryInput(ballInstance, forceBypass) if not forceBypass and (os.clock() - LastParryTime < PARRY_COOLDOWN) and (LastParriedBall == ballInstance) then return end local sniffedPayload = _G.LatestSniffedWeldArguments local weldRemote = ReplicatedStorage:FindFirstChild("Remotes") and ReplicatedStorage.Remotes:FindFirstChild("UnreliableReplicateWelds") if weldRemote and sniffedPayload then pcall(function() weldRemote:FireServer(unpack(sniffedPayload)) end) end local success, err = pcall(function() local combatFolder = ReplicatedStorage:FindFirstChild("Combat") or ReplicatedStorage:FindFirstChild("Actions") local parryRemote = combatFolder and (combatFolder:FindFirstChild("Parry") or combatFolder:FindFirstChild("Deflect")) if parryRemote and parryRemote:IsA("RemoteEvent") then parryRemote:FireServer() if forceBypass then task.spawn(function() pcall(function() parryRemote:FireServer() end) end) end else VirtualInputManager:SendKeyEvent(true, Enum.KeyCode.F, false, game) task.wait() VirtualInputManager:SendKeyEvent(false, Enum.KeyCode.F, false, game) end end) if success then LastParryTime = os.clock() LastParriedBall = ballInstance end end local function InitializeBallTracking(ballInstance) if not IdentifyTargetBall(ballInstance) or TrackedBallsList[ballInstance] then return end TrackedBallsList[ballInstance] = true local x_est = ballInstance.Position local v_est = Vector3.zero local a_est = Vector3.zero local P_x, P_v, P_a = 1.0, 1.0, 1.0 local lastUpdateClock = os.clock() local isFirstUpdate = true local smoothedSpeed = 0 local SMTH_FACTOR = 0.50 local VisualConnection VisualConnection = RunService.RenderStepped:Connect(function() if not ballInstance or not ballInstance.Parent then if VisualBubble then VisualBubble.Size = Vector3.zero end VisualConnection:Disconnect() return end local character = LocalPlayer.Character local root = character and (character:FindFirstChild("HumanoidRootPart") or character:FindFirstChild("FakeRoot") or character.PrimaryPart) if root and VisualBubble then if _G.ShowVisualBubble == true then VisualBubble.Transparency = 0.75 VisualBubble.Position = root.Position if not IsBallTargetingMe() then VisualBubble.Size = VisualBubble.Size:Lerp(Vector3.new(CRITICAL_CLOSE_RANGE * 2, CRITICAL_CLOSE_RANGE * 2, CRITICAL_CLOSE_RANGE * 2), 0.15) VisualBubble.Color = VisualBubble.Color:Lerp(Color3.fromRGB(0, 255, 150), 0.15) else local renderDiameter = CurrentRadiusTarget * 2 VisualBubble.Size = VisualBubble.Size:Lerp(Vector3.new(renderDiameter, renderDiameter, renderDiameter), 0.15) VisualBubble.Color = VisualBubble.Color:Lerp(Color3.fromRGB(255, 0, 50), 0.15) end else VisualBubble.Transparency = 1 VisualBubble.Size = Vector3.zero end end end) ballInstance:GetPropertyChangedSignal("Position"):Connect(function() if not ballInstance or not ballInstance.Parent then return end local character = LocalPlayer.Character local root = character and (character:FindFirstChild("HumanoidRootPart") or character:FindFirstChild("FakeRoot") or character.PrimaryPart) if not root then return end local ballPos = ballInstance.Position local playerPos = root.Position local lastCached = PositionCache[ballInstance] local distance if lastCached and lastCached.Position == ballPos then distance = lastCached.Distance else distance = (playerPos - ballPos).Magnitude PositionCache[ballInstance] = { Position = ballPos, Distance = distance } end local targetingMe = IsBallTargetingMe() if targetingMe then _G.ActiveTargetBallInstance = ballInstance elseif _G.ActiveTargetBallInstance == ballInstance then _G.ActiveTargetBallInstance = nil end -- FIX: Character movement speed forced to 0 relative to the calculation local forwardPushSpeed = 0 local dynamicPanicRange = CRITICAL_CLOSE_RANGE local crowdNearby = IsCrowdInBubble(playerPos, dynamicPanicRange + 6) if distance <= 28 and targetingMe and v_est.Magnitude > 195 then FireParryInput(ballInstance, true) smoothedSpeed = 0 return end if distance <= (dynamicPanicRange + 4) and targetingMe then if crowdNearby or (os.clock() - LastParryTime > 0.035) then FireParryInput(ballInstance, true) smoothedSpeed = 0 return end end local currentClock = os.clock() local dt = currentClock - lastUpdateClock if dt <= 0.001 then dt = 0.001 end lastUpdateClock = currentClock if isFirstUpdate then x_est = ballPos isFirstUpdate = false return end local old_v_est = v_est x_est = x_est + (v_est * dt) + (0.5 * a_est * dt * dt) v_est = v_est + (a_est * dt) P_x = P_x + (Q_POS_NOISE * dt) P_v = P_v + (Q_VEL_NOISE * dt) P_a = P_a + (Q_ACC_NOISE * dt) local residual = ballPos - x_est local K_x = P_x / (P_x + R_MEASUREMENT_NOISE) local K_v = P_v / (P_v + R_MEASUREMENT_NOISE) local K_a = P_a / (P_a + R_MEASUREMENT_NOISE) x_est = x_est + (K_x * residual) local instantRawVelocity = residual / dt if instantRawVelocity.Magnitude > MAXIMUM_TRACKING_SPEED then instantRawVelocity = instantRawVelocity.Unit * MAXIMUM_TRACKING_SPEED end local instantRawAcceleration = (instantRawVelocity - old_v_est) / dt v_est = v_est + (K_v * (instantRawVelocity - v_est)) a_est = a_est + (K_a * (instantRawAcceleration - a_est)) P_x = (1 - K_x) * P_x P_v = (1 - K_v) * P_v P_a = (1 - K_a) * P_a local curveBypassBypass = false local relativeDirection = (ballPos - playerPos).Unit if old_v_est.Magnitude > 0 and v_est.Magnitude > 0 and targetingMe then local speedDelta = v_est.Magnitude - old_v_est.Magnitude if speedDelta > VELOCITY_SPIKE_DETECT then curveBypassBypass = true if distance <= 55 then LastParriedBall = nil end end local dotProduct = old_v_est.Unit:Dot(v_est.Unit) local angleChange = math.deg(math.acos(math.clamp(dotProduct, -1, 1))) if angleChange > 9 and distance <= 50 then curveBypassBypass = true LastParriedBall = nil P_v, P_a = 2.5, 2.5 elseif angleChange > CURVE_ANGLE_THRESHOLD then local directionToPlayer = (playerPos - ballPos).Unit if v_est.Unit:Dot(directionToPlayer) > 0.1 then curveBypassBypass = true if distance <= 45 then LastParriedBall = nil end end end end if distance <= (dynamicPanicRange + 4) and targetingMe and crowdNearby then curveBypassBypass = true end if LastParriedBall == ballInstance and v_est:Dot(relativeDirection) < -2 then LastParriedBall = nil end local insideCooldown = (os.clock() - LastParryTime < PARRY_COOLDOWN) and (LastParriedBall == ballInstance) if insideCooldown and not curveBypassBypass then return end if not targetingMe then smoothedSpeed = 0 ;return end local approachVector = playerPos - x_est local rawSpeedTowardsPlayer = v_est:Dot(approachVector.Unit) if rawSpeedTowardsPlayer > 5 then smoothedSpeed = smoothedSpeed + (rawSpeedTowardsPlayer - smoothedSpeed) * SMTH_FACTOR local currentPing = _G.CalculatedClientPing or 0.020 -- FIX: Static calculation ignoring character velocity adjustments local dynamicBuffer = PARRY_PREDICTION_BUFFER local activationThreshold = currentPing + dynamicBuffer local d_pos = x_est - playerPos local v_mag_sq = v_est.Magnitude * v_est.Magnitude local cpaTime, cpaDistance = 999, 999 if v_mag_sq > 0.01 then local t_cpa = -d_pos:Dot(v_est) / v_mag_sq cpaTime = math.max(0, t_cpa) local projectedBallPos = x_est + (v_est * cpaTime) + (0.5 * a_est * cpaTime * cpaTime) projectedBallPos = projectedBallPos - playerPos cpaDistance = projectedBallPos.Magnitude else cpaTime = distance / smoothedSpeed cpaDistance = distance end local dynamicTargetRadius = (smoothedSpeed * activationThreshold) + dynamicPanicRange CurrentRadiusTarget = math.clamp(dynamicTargetRadius, dynamicPanicRange, MAX_PARRY_DISTANCE) local willIntersect = (cpaDistance <= dynamicPanicRange) or (cpaDistance <= (currentPing * smoothedSpeed)) local shouldParry = false if willIntersect and (cpaTime <= (activationThreshold + 0.015)) and distance <= MAX_PARRY_DISTANCE then shouldParry = true elseif distance <= (dynamicPanicRange + 2) then shouldParry = true end if shouldParry and (not insideCooldown or curveBypassBypass) then FireParryInput(ballInstance, curveBypassBypass) end else smoothedSpeed = 0 end end) end local function BindContainer(container) if not container then return end container.ChildAdded:Connect(InitializeBallTracking) for _, child in ipairs(container:GetChildren()) do task.spawn(InitializeBallTracking, child) end end Workspace.ChildAdded:Connect(function(child) local cName = child.Name if cName:find("Lobby") or cName:find("Arena") or cName:find("Game") then BindContainer(child) else InitializeBallTracking(child) end end) BindContainer(Workspace) for _, child in ipairs(Workspace:GetChildren()) do local cName = child.Name if cName:find("Lobby") or cName:find("Arena") or cName:find("Game") then BindContainer(child) end end