-- [[ 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 ]] -- Rivals Script | AIMBOT WORKS + ESP FIXED local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local Camera = workspace.CurrentCamera local LocalPlayer = Players.LocalPlayer local Config = { ESP = { Enabled = true, ShowBoxes = true, ShowNames = true, ShowHealth = true, ShowTracers = true, BoxColor = Color3.fromRGB(255, 80, 80), NameColor = Color3.fromRGB(255, 255, 255), TracerColor = Color3.fromRGB(255, 80, 80), }, Aimbot = { Enabled = true, Key = Enum.KeyCode.E, FOV = 300, Smoothness = 0.35, Prediction = 0.09, TargetPart = "Head", ShowFOV = true, FOVColor = Color3.fromRGB(255, 255, 255), }, Movement = { SpeedEnabled = false, Speed = 30, JumpEnabled = false, JumpPower = 80, NoclipEnabled = false, }, } -- ═══════════════════════════════════════ -- UTILITIES -- ═══════════════════════════════════════ local function GetCharacter(p) return p.Character end local function GetRoot(p) local c=GetCharacter(p); return c and c:FindFirstChild("HumanoidRootPart") end local function GetHumanoid(p) local c=GetCharacter(p); return c and c:FindFirstChildOfClass("Humanoid") end local function GetHead(p) local c=GetCharacter(p); return c and c:FindFirstChild("Head") end local function IsAlive(p) local h=GetHumanoid(p); return h and h.Health > 0 end local function GetDist(p) local r, lr = GetRoot(p), GetRoot(LocalPlayer) return (r and lr) and (r.Position - lr.Position).Magnitude or math.huge end -- ESP uses its own viewport conversion that works regardless of CameraType local function WorldToScreen(pos) local camCF = Camera.CFrame local vp = Camera.ViewportSize local fov = Camera.FieldOfView local aspect = vp.X / vp.Y -- Manual projection so CameraType=Scriptable doesn't break it local rel = camCF:PointToObjectSpace(pos) if rel.Z > 0 then -- Behind camera return Vector2.new(0, 0), -1, false end local depth = -rel.Z local fovRad = math.rad(fov / 2) local scaleY = vp.Y / (2 * math.tan(fovRad)) local scaleX = scaleY * aspect local sx = (rel.X / depth) * scaleX + vp.X / 2 local sy = (-rel.Y / depth) * scaleY + vp.Y / 2 local onScreen = sx >= 0 and sx <= vp.X and sy >= 0 and sy <= vp.Y return Vector2.new(sx, sy), depth, onScreen end -- Aimbot still uses native WorldToViewportPoint (fine since we set Scriptable ourselves) local function ToScreenNative(pos) local s, d, v = Camera:WorldToViewportPoint(pos) return Vector2.new(s.X, s.Y), d, v end -- ═══════════════════════════════════════ -- ESP -- ═══════════════════════════════════════ local ESPObjects = {} local function CreateESP(player) if ESPObjects[player] then return end local d = {} d.Box = Drawing.new("Square"); d.Box.Filled=false; d.Box.Thickness=1.5 d.Name = Drawing.new("Text"); d.Name.Size=13; d.Name.Center=true; d.Name.Outline=true d.HBG = Drawing.new("Square"); d.HBG.Filled=true; d.HBG.Color=Color3.fromRGB(0,0,0); d.HBG.Transparency=0.5 d.Health = Drawing.new("Square"); d.Health.Filled=true d.Tracer = Drawing.new("Line"); d.Tracer.Thickness=1 for _, o in pairs(d) do o.Visible = false end ESPObjects[player] = d end local function RemoveESP(player) if not ESPObjects[player] then return end for _, o in pairs(ESPObjects[player]) do o:Remove() end ESPObjects[player] = nil end local function UpdateESP() for _, player in ipairs(Players:GetPlayers()) do if player == LocalPlayer then continue end if not ESPObjects[player] then CreateESP(player) end local d = ESPObjects[player] if not d then continue end local head = GetHead(player) local root = GetRoot(player) local hum = GetHumanoid(player) if not Config.ESP.Enabled or not IsAlive(player) or not head or not root or not hum then for _, o in pairs(d) do o.Visible = false end continue end -- Use manual projection — immune to CameraType state local hrpS, depth, onScreen = WorldToScreen(root.Position) local headS, headD, headOn = WorldToScreen(head.Position + Vector3.new(0, 0.5, 0)) local feetS, feetD, feetOn = WorldToScreen(root.Position - Vector3.new(0, 3, 0)) if not onScreen or depth <= 0 then for _, o in pairs(d) do o.Visible = false end continue end local bH = math.max(10, math.abs(headS.Y - feetS.Y)) local bW = bH * 0.5 local bX = hrpS.X - bW / 2 local bY = headS.Y -- Box d.Box.Position = Vector2.new(bX, bY) d.Box.Size = Vector2.new(bW, bH) d.Box.Color = Config.ESP.BoxColor d.Box.Visible = Config.ESP.ShowBoxes -- Name d.Name.Position = Vector2.new(hrpS.X, bY - 16) d.Name.Text = player.DisplayName .. " [" .. math.floor(GetDist(player)) .. "m]" d.Name.Color = Config.ESP.NameColor d.Name.Visible = Config.ESP.ShowNames -- Health local ratio = math.clamp(hum.Health / hum.MaxHealth, 0, 1) d.HBG.Position = Vector2.new(bX - 7, bY) d.HBG.Size = Vector2.new(5, bH) d.HBG.Visible = Config.ESP.ShowHealth d.Health.Position = Vector2.new(bX - 7, bY + bH * (1 - ratio)) d.Health.Size = Vector2.new(5, bH * ratio) d.Health.Color = Color3.fromRGB( math.floor(255 * (1 - ratio)), math.floor(255 * ratio), 0) d.Health.Visible = Config.ESP.ShowHealth -- Tracer local vp = Camera.ViewportSize d.Tracer.From = Vector2.new(vp.X / 2, vp.Y) d.Tracer.To = hrpS d.Tracer.Color = Config.ESP.TracerColor d.Tracer.Visible = Config.ESP.ShowTracers end end Players.PlayerAdded:Connect(CreateESP) Players.PlayerRemoving:Connect(RemoveESP) for _, p in ipairs(Players:GetPlayers()) do if p ~= LocalPlayer then CreateESP(p) end end -- ═══════════════════════════════════════ -- FOV CIRCLE -- ═══════════════════════════════════════ local FOVCircle = Drawing.new("Circle") FOVCircle.Filled = false FOVCircle.NumSides = 64 FOVCircle.Radius = Config.Aimbot.FOV FOVCircle.Thickness = 1.5 FOVCircle.Color = Config.Aimbot.FOVColor FOVCircle.Visible = false -- ═══════════════════════════════════════ -- AIMBOT — NUCLEAR FIX -- ═══════════════════════════════════════ local AimbotHeld = false local GoalCF = nil local ForcedCF = nil local function GetTarget() local center = Camera.ViewportSize / 2 local best, bestDist = nil, Config.Aimbot.FOV for _, player in ipairs(Players:GetPlayers()) do if player == LocalPlayer then continue end if not IsAlive(player) then continue end local char = GetCharacter(player) local part = char and (char:FindFirstChild("Head") or char:FindFirstChild("HumanoidRootPart")) if not part then continue end local root = GetRoot(player) local vel = root and root.AssemblyLinearVelocity or Vector3.zero local predicted = part.Position + vel * Config.Aimbot.Prediction local s, depth, onScreen = ToScreenNative(predicted) if not onScreen or depth <= 0 then continue end local dist = (s - center).Magnitude if dist < bestDist then bestDist = dist best = predicted end end return best end UserInputService.InputBegan:Connect(function(i, g) if g then return end if i.KeyCode == Config.Aimbot.Key then AimbotHeld = true GoalCF = nil ForcedCF = nil end end) UserInputService.InputEnded:Connect(function(i) if i.KeyCode == Config.Aimbot.Key then AimbotHeld = false GoalCF = nil ForcedCF = nil pcall(function() Camera.CameraType = Enum.CameraType.Custom end) end end) -- Layer 1: priority 500, above all game scripts RunService:BindToRenderStep("RivalsAim", 500, function() FOVCircle.Position = Camera.ViewportSize / 2 FOVCircle.Visible = Config.Aimbot.ShowFOV and Config.Aimbot.Enabled if not Config.Aimbot.Enabled or not AimbotHeld then ForcedCF = nil pcall(function() Camera.CameraType = Enum.CameraType.Custom end) return end local predicted = GetTarget() if not predicted then ForcedCF = nil pcall(function() Camera.CameraType = Enum.CameraType.Custom end) return end pcall(function() Camera.CameraType = Enum.CameraType.Scriptable end) local cf = Camera.CFrame local hardGoal = CFrame.lookAt(cf.Position, predicted) if not GoalCF then GoalCF = cf end GoalCF = GoalCF:Lerp(hardGoal, Config.Aimbot.Smoothness) ForcedCF = GoalCF Camera.CFrame = ForcedCF end) -- Layer 2: Heartbeat enforcer thread RunService.Heartbeat:Connect(function() if not AimbotHeld or not ForcedCF then return end pcall(function() Camera.CameraType = Enum.CameraType.Scriptable Camera.CFrame = ForcedCF end) end) -- ═══════════════════════════════════════ -- MOVEMENT -- ═══════════════════════════════════════ local function ApplyMovement() local char = LocalPlayer.Character; if not char then return end local hum = char:FindFirstChildOfClass("Humanoid"); if not hum then return end hum.WalkSpeed = Config.Movement.SpeedEnabled and Config.Movement.Speed or 16 hum.JumpPower = Config.Movement.JumpEnabled and Config.Movement.JumpPower or 50 end RunService.Stepped:Connect(function() if not Config.Movement.NoclipEnabled then return end local char = LocalPlayer.Character; if not char then return end for _, p in ipairs(char:GetDescendants()) do if p:IsA("BasePart") then p.CanCollide = false end end end) RunService.RenderStepped:Connect(function() UpdateESP() ApplyMovement() end) -- ═══════════════════════════════════════ -- GUI -- ═══════════════════════════════════════ if game.CoreGui:FindFirstChild("RivalsFixed") then game.CoreGui:FindFirstChild("RivalsFixed"):Destroy() end local ScreenGui = Instance.new("ScreenGui") ScreenGui.Name = "RivalsFixed" ScreenGui.ResetOnSpawn = false ScreenGui.IgnoreGuiInset = true ScreenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling ScreenGui.Parent = game.CoreGui local Pill = Instance.new("TextButton") Pill.Size = UDim2.new(0, 108, 0, 32) Pill.Position = UDim2.new(0, 12, 0, 12) Pill.BackgroundColor3 = Color3.fromRGB(255, 80, 80) Pill.AutoButtonColor = false Pill.Text = "☰ RIVALS" Pill.TextColor3 = Color3.new(1,1,1) Pill.Font = Enum.Font.GothamBold Pill.TextSize = 13; Pill.ZIndex = 20 Pill.Parent = ScreenGui Instance.new("UICorner", Pill).CornerRadius = UDim.new(1, 0) local Frame = Instance.new("Frame") Frame.Size = UDim2.new(0, 210, 0, 0) Frame.AutomaticSize = Enum.AutomaticSize.Y Frame.Position = UDim2.new(0, 12, 0, 52) Frame.BackgroundColor3 = Color3.fromRGB(12, 12, 18) Frame.BorderSizePixel = 0; Frame.Active = true Frame.Draggable = true; Frame.Visible = true Frame.ZIndex = 10; Frame.Parent = ScreenGui Instance.new("UICorner", Frame).CornerRadius = UDim.new(0, 10) do local s=Instance.new("UIStroke",Frame); s.Color=Color3.fromRGB(255,80,80); s.Thickness=1.4 end local Header = Instance.new("Frame", Frame) Header.Size = UDim2.new(1,0,0,38) Header.BackgroundColor3 = Color3.fromRGB(255,80,80) Header.BorderSizePixel = 0; Header.ZIndex = 11 Instance.new("UICorner", Header).CornerRadius = UDim.new(0,10) local HFix = Instance.new("Frame", Header) HFix.Size = UDim2.new(1,0,0,10); HFix.Position=UDim2.new(0,0,1,-10) HFix.BackgroundColor3 = Color3.fromRGB(255,80,80); HFix.BorderSizePixel=0; HFix.ZIndex=11 local HLabel = Instance.new("TextLabel", Header) HLabel.Size = UDim2.new(1,-40,1,0); HLabel.Position=UDim2.new(0,12,0,0) HLabel.BackgroundTransparency=1; HLabel.Text="⚡ RIVALS" HLabel.TextColor3=Color3.new(1,1,1); HLabel.Font=Enum.Font.GothamBold HLabel.TextSize=13; HLabel.TextXAlignment=Enum.TextXAlignment.Left; HLabel.ZIndex=12 local XBtn = Instance.new("TextButton", Header) XBtn.Size = UDim2.new(0,26,0,26); XBtn.Position=UDim2.new(1,-30,0,6) XBtn.BackgroundColor3 = Color3.fromRGB(190,30,30); XBtn.AutoButtonColor=false XBtn.Text="✕"; XBtn.TextColor3=Color3.new(1,1,1) XBtn.Font=Enum.Font.GothamBold; XBtn.TextSize=13; XBtn.ZIndex=13 Instance.new("UICorner",XBtn).CornerRadius=UDim.new(0,6) local Scroll = Instance.new("ScrollingFrame", Frame) Scroll.Size = UDim2.new(1,0,0,300); Scroll.Position=UDim2.new(0,0,0,40) Scroll.BackgroundTransparency=1; Scroll.ScrollBarThickness=2 Scroll.ScrollBarImageColor3=Color3.fromRGB(255,80,80) Scroll.CanvasSize=UDim2.new(0,0,0,0) Scroll.AutomaticCanvasSize=Enum.AutomaticSize.Y; Scroll.ZIndex=11 local List=Instance.new("UIListLayout",Scroll) List.Padding=UDim.new(0,5) List.HorizontalAlignment=Enum.HorizontalAlignment.Center List.SortOrder=Enum.SortOrder.LayoutOrder local Pad=Instance.new("UIPadding",Scroll) Pad.PaddingTop=UDim.new(0,8); Pad.PaddingLeft=UDim.new(0,8) Pad.PaddingRight=UDim.new(0,8); Pad.PaddingBottom=UDim.new(0,8) local PanelOpen = true local function SetPanel(open) PanelOpen=open; Frame.Visible=open Pill.Text=open and "☰ RIVALS" or "☰ OPEN" Pill.BackgroundColor3=open and Color3.fromRGB(255,80,80) or Color3.fromRGB(50,50,65) end Pill.MouseButton1Click:Connect(function() SetPanel(not PanelOpen) end) XBtn.MouseButton1Click:Connect(function() SetPanel(false) end) local order=0 local function NO() order=order+1; return order end local function Section(text) local f=Instance.new("Frame",Scroll); f.Size=UDim2.new(1,0,0,20) f.BackgroundTransparency=1; f.LayoutOrder=NO() local l=Instance.new("TextLabel",f); l.Size=UDim2.new(1,0,1,0) l.BackgroundTransparency=1; l.Text=text l.TextColor3=Color3.fromRGB(255,80,80); l.Font=Enum.Font.GothamBold l.TextSize=11; l.TextXAlignment=Enum.TextXAlignment.Left; l.ZIndex=12 local d=Instance.new("Frame",f); d.Size=UDim2.new(1,0,0,1) d.Position=UDim2.new(0,0,1,-1) d.BackgroundColor3=Color3.fromRGB(255,80,80); d.BorderSizePixel=0; d.ZIndex=12 end local function Toggle(label, tbl, key) local btn=Instance.new("TextButton",Scroll); btn.Size=UDim2.new(1,0,0,30) btn.AutoButtonColor=false btn.BackgroundColor3=tbl[key] and Color3.fromRGB(255,80,80) or Color3.fromRGB(32,32,46) btn.Text=label..": "..(tbl[key] and "ON" or "OFF") btn.TextColor3=Color3.new(1,1,1); btn.Font=Enum.Font.Gotham; btn.TextSize=13 btn.LayoutOrder=NO(); btn.ZIndex=12 Instance.new("UICorner",btn).CornerRadius=UDim.new(0,7) btn.MouseButton1Click:Connect(function() tbl[key]=not tbl[key] btn.Text=label..": "..(tbl[key] and "ON" or "OFF") btn.BackgroundColor3=tbl[key] and Color3.fromRGB(255,80,80) or Color3.fromRGB(32,32,46) end) end Section("ESP") Toggle("ESP", Config.ESP, "Enabled") Toggle("Boxes", Config.ESP, "ShowBoxes") Toggle("Names", Config.ESP, "ShowNames") Toggle("Health Bars", Config.ESP, "ShowHealth") Toggle("Tracers", Config.ESP, "ShowTracers") Section("AIMBOT [Hold E]") Toggle("Aimbot", Config.Aimbot, "Enabled") Toggle("FOV Circle", Config.Aimbot, "ShowFOV") Section("MOVEMENT") Toggle("Speed Hack", Config.Movement, "SpeedEnabled") Toggle("Jump Hack", Config.Movement, "JumpEnabled") Toggle("Noclip", Config.Movement, "NoclipEnabled") print("[Rivals] Loaded — ESP fixed, aimbot nuclear, Hold E in match")