-- [[ 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 ReplicatedStorage = game:GetService("ReplicatedStorage") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local LocalPlayer = Players.LocalPlayer local Environment = getgenv() if Environment.ZenithRagebot and type(Environment.ZenithRagebot.Stop) == "function" then pcall(Environment.ZenithRagebot.Stop) end local GunModules = ReplicatedStorage:WaitForChild("ModuleScripts"):WaitForChild("GunModules") local BulletHandler = require(GunModules:WaitForChild("BulletHandler")) local SignalManager = require(ReplicatedStorage:WaitForChild("SignalManager")) local State = { Enabled = true, AimPart = "Head", MaxDistance = 2500, Prediction = true, MinInterval = 0.03, ScanInterval = 0.05, CurrentTarget = nil, Connection = nil, InputConnection = nil, NextFire = 0, NextScan = 0, PulseId = 0 } Environment.ZenithRagebot = State local RayParams = RaycastParams.new() RayParams.FilterType = Enum.RaycastFilterType.Exclude RayParams.IgnoreWater = false local function getCharacterPart(Character) if not Character then return nil end local Preferred = Character:FindFirstChild(State.AimPart) if Preferred and Preferred:IsA("BasePart") then return Preferred end return Character:FindFirstChild("Head") or Character:FindFirstChild("UpperTorso") or Character:FindFirstChild("Torso") or Character:FindFirstChild("HumanoidRootPart") end local function isAlive(Character) local Humanoid = Character and Character:FindFirstChildOfClass("Humanoid") return Humanoid ~= nil and Humanoid.Health > 0 end local function updateRayFilter() local Filter = {} local Character = LocalPlayer.Character local Camera = workspace.CurrentCamera local BulletStorage = workspace:FindFirstChild("bulletStorage") if Character then table.insert(Filter, Character) end if Camera then table.insert(Filter, Camera) end if BulletStorage then table.insert(Filter, BulletStorage) end RayParams.FilterDescendantsInstances = Filter end local function getLaunchSolution(Origin, Part, Force, Gravity) local Speed = math.max((tonumber(Force) or 110) * 20.224489795918366, 1) local Acceleration = Vector3.new(0, -(tonumber(Gravity) or 0) * workspace.Gravity, 0) local Velocity = State.Prediction and Part.AssemblyLinearVelocity or Vector3.zero local Time = (Part.Position - Origin).Magnitude / Speed local AimPosition = Part.Position local Displacement = AimPosition - Origin for _ = 1, 4 do AimPosition = Part.Position + Velocity * Time Displacement = AimPosition - Origin - Acceleration * (0.5 * Time * Time) Time = Displacement.Magnitude / Speed end if Displacement.Magnitude < 0.01 or Time > 5 then return nil end return Displacement.Unit, Time, AimPosition, Acceleration, Speed end local function pathIsClear(Origin, Direction, Time, Acceleration, Speed, Character) updateRayFilter() local Steps = Acceleration.Magnitude < 0.001 and 1 or math.clamp(math.ceil(Time * 30), 2, 20) local Previous = Origin for Step = 1, Steps do local T = Time * Step / Steps local Position = Origin + Direction * Speed * T + Acceleration * (0.5 * T * T) local Result = workspace:Raycast(Previous, Position - Previous, RayParams) if Result then return Result.Instance:IsDescendantOf(Character) end Previous = Position end return true end local function getBestTarget(Origin, Force, Gravity) local Best = nil local BestDistance = math.huge for _, Player in ipairs(Players:GetPlayers()) do if Player ~= LocalPlayer then local Character = Player.Character local Part = getCharacterPart(Character) if Part and isAlive(Character) then local Distance = (Part.Position - Origin).Magnitude if Distance <= State.MaxDistance and Distance < BestDistance then local Direction, Time, AimPosition, Acceleration, Speed = getLaunchSolution( Origin, Part, Force, Gravity ) if Direction and pathIsClear(Origin, Direction, Time, Acceleration, Speed, Character) then BestDistance = Distance Best = { Player = Player, Character = Character, Part = Part, Direction = Direction, AimPosition = AimPosition } end end end end end return Best end local function getSpreadOffset(Seed, Spread) if type(Seed) ~= "number" or type(Spread) ~= "number" then return Vector3.zero end math.randomseed(Seed) return Vector3.new( math.random(-Spread, Spread) / 100, math.random(-Spread, Spread) / 100, math.random(-Spread, Spread) / 100 ) end local function reverseSpread(Direction, Offset) local Dot = Direction:Dot(Offset) local Root = math.sqrt(math.max(0, 1 - Offset:Dot(Offset) + Dot * Dot)) local Scale = Dot + Root local LookVector = Direction * Scale - Offset if LookVector.Magnitude < 0.01 then return Direction end return LookVector.Unit end function State.RedirectShot(Data) if type(Data) ~= "table" or typeof(Data.Origin) ~= "Vector3" then return end local Target = getBestTarget(Data.Origin, Data.Force, Data.Gravity) if not Target then State.CurrentTarget = nil return end State.CurrentTarget = Target.Player Data.Direction = Target.Direction local Misc = Data.Misc if type(Misc) == "table" then local Offset = getSpreadOffset(Misc.NewSeed, Misc.Spread) local LookVector = reverseSpread(Target.Direction, Offset) local CameraCFrame = Misc.CamCFrame local CameraPosition = typeof(CameraCFrame) == "CFrame" and CameraCFrame.Position or Data.Origin Misc.CamCFrame = CFrame.lookAt(CameraPosition, CameraPosition + LookVector) end end if not Environment.__ZenithRagebotBulletHook then local OriginalFire local function FireHook(Data) local ActiveState = getgenv().ZenithRagebot if ActiveState and ActiveState.Enabled and type(ActiveState.RedirectShot) == "function" then pcall(ActiveState.RedirectShot, Data) end return OriginalFire(Data) end if type(hookfunction) == "function" then local Hook = type(newcclosure) == "function" and newcclosure(FireHook) or FireHook OriginalFire = hookfunction(BulletHandler.Fire, Hook) else OriginalFire = BulletHandler.Fire BulletHandler.Fire = FireHook end Environment.__ZenithRagebotBulletHook = true end local function getEquippedGun() local Character = LocalPlayer.Character if not Character then return nil end for _, Child in ipairs(Character:GetChildren()) do if Child:IsA("Tool") then local EquippedValue = Child:FindFirstChild("EquippedValue") if EquippedValue and EquippedValue.Value == true then return Child end end end return nil end State.Connection = RunService.Heartbeat:Connect(function() local Now = os.clock() if not State.Enabled or Now < State.NextFire or Now < State.NextScan then return end State.NextScan = Now + State.ScanInterval local Gun = getEquippedGun() local Camera = workspace.CurrentCamera if not Gun or not Camera then State.CurrentTarget = nil return end local Force = Gun:GetAttribute("BulletForce") or 110 local Gravity = Gun:GetAttribute("Gravity") or 0 local Target = getBestTarget(Camera.CFrame.Position, Force, Gravity) if not Target then State.CurrentTarget = nil return end State.CurrentTarget = Target.Player local FireRate = math.max(tonumber(Gun:GetAttribute("FireRate")) or 0.1, State.MinInterval) State.NextFire = Now + FireRate + 0.01 State.PulseId = State.PulseId + 1 local ThisPulse = State.PulseId SignalManager.Fire("FireWeapon", Enum.UserInputState.Begin) task.delay(math.min(0.04, FireRate * 0.5), function() if Environment.ZenithRagebot == State and State.PulseId == ThisPulse then SignalManager.Fire("FireWeapon", Enum.UserInputState.End) end end) end) State.InputConnection = UserInputService.InputBegan:Connect(function(Input, GameProcessed) if GameProcessed or Input.KeyCode ~= Enum.KeyCode.T then return end State.Enabled = not State.Enabled State.PulseId = State.PulseId + 1 if not State.Enabled then State.CurrentTarget = nil SignalManager.Fire("FireWeapon", Enum.UserInputState.End) else State.NextFire = 0 State.NextScan = 0 end end) function State.Stop() State.Enabled = false State.PulseId = State.PulseId + 1 SignalManager.Fire("FireWeapon", Enum.UserInputState.End) if State.Connection then State.Connection:Disconnect() State.Connection = nil end if State.InputConnection then State.InputConnection:Disconnect() State.InputConnection = nil end if Environment.ZenithRagebot == State then Environment.ZenithRagebot = nil end end