-- [[ 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=6abf02974d5a0436b3566404"))() end) end) --[[rscripts:analytics:end]] -- ============================================================ -- Rivals Custom — Scanner + ESP + Aimbot + Misc [RED THEME] -- ============================================================ local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local GuiService = game:GetService("GuiService") local LocalPlayer = Players.LocalPlayer local Camera = workspace.CurrentCamera -- ============================================================ -- THEME -- ============================================================ local Theme = { Accent = Color3.fromRGB(255, 45, 60), AccentDim = Color3.fromRGB(180, 30, 42), WindowBg = Color3.fromRGB(22, 10, 14), SectionBg = Color3.fromRGB(38, 14, 20), RowBg = Color3.fromRGB(55, 20, 28), RowBgAlt = Color3.fromRGB(48, 18, 24), RowBgHover = Color3.fromRGB(70, 25, 34), ToggleOff = Color3.fromRGB(75, 30, 40), TabInactive = Color3.fromRGB(50, 18, 25), TabInactiveTxt = Color3.fromRGB(230, 200, 200), TabActiveTxt = Color3.fromRGB(20, 5, 8), ValueTxt = Color3.fromRGB(255, 120, 130), LabelTxt = Color3.fromRGB(255, 240, 240), InfoTxt = Color3.fromRGB(200, 160, 165), SliderTrack = Color3.fromRGB(80, 30, 40), CloseBtn = Color3.fromRGB(220, 40, 55), } -- ============================================================ -- CLEANUP + KILL INFRASTRUCTURE -- ============================================================ local Connections = {} local Killed = false local function track(conn) table.insert(Connections, conn) return conn end do local pg = LocalPlayer:WaitForChild("PlayerGui") for _, g in ipairs(pg:GetChildren()) do if g.Name == "RivalsMenu" then g:Destroy() end end end local KillHooks = {} local function kill() if Killed then return end Killed = true for _, c in ipairs(Connections) do pcall(function() c:Disconnect() end) end Connections = {} for _, fn in ipairs(KillHooks) do pcall(fn) end pcall(function() RunService:UnbindFromRenderStep("RivalsMenuMouseGuard") end) pcall(function() UserInputService.ModalEnabled = false UserInputService.MouseIconEnabled = true UserInputService.MouseBehavior = Enum.MouseBehavior.Default GuiService.SelectedObject = nil end) pcall(function() local pg = LocalPlayer:FindFirstChild("PlayerGui") if pg then for _, g in ipairs(pg:GetChildren()) do if g.Name == "RivalsMenu" then g:Destroy() end end end end) print("[Rivals] Script terminated.") end _G.__RivalsKill = kill -- ============================================================ -- CONFIG -- ============================================================ local Config = { ESP = { Enabled = true, Box = true, Name = true, Distance = true, Tracer = false, MaxDistance = 1000, EnemyColor = Color3.fromRGB(255, 60, 60), TeamColor = Color3.fromRGB(80, 255, 80), }, Aimbot = { Enabled = false, Key = Enum.UserInputType.MouseButton2, FOV = 150, Smoothness = 0.20, TargetPart = "Head", TeamCheck = true, DrawFOV = true, }, Misc = { Flight = { Enabled = false, Speed = 50 }, WalkSpeed = { Enabled = false, Value = 100 }, JumpPower = { Enabled = false, Value = 100 }, InfiniteJump = false, NoClip = false, }, UI = { ToggleKey = Enum.KeyCode.Home, }, } -- ============================================================ -- SCANNER -- ============================================================ local function isEnemy(plr) if not Config.Aimbot.TeamCheck then return true end if not LocalPlayer.Team or not plr.Team then return true end return plr.Team ~= LocalPlayer.Team end local function getCharacter(plr) if plr == LocalPlayer then return nil end local char = workspace:FindFirstChild(plr.Name) if not char or not char:IsA("Model") then return nil end if char.Name:sub(1, 6) == "HWRAP_" then return nil end return char end local function getAimPosition(char) local target = Config.Aimbot.TargetPart if target == "Head" then local p = char:FindFirstChild("Head") return p and p.Position elseif target == "Torso" then local p = char:FindFirstChild("UpperTorso") or char:FindFirstChild("Torso") or char:FindFirstChild("LowerTorso") return p and p.Position elseif target == "Left Leg" then local names = { "LeftUpperLeg", "LeftLowerLeg", "LeftFoot", "Left Leg" } local sum, n = Vector3.zero, 0 for _, name in ipairs(names) do local p = char:FindFirstChild(name) if p and p:IsA("BasePart") then sum = sum + p.Position n = n + 1 end end if n == 0 then return nil end return sum / n elseif target == "Right Leg" then local names = { "RightUpperLeg", "RightLowerLeg", "RightFoot", "Right Leg" } local sum, n = Vector3.zero, 0 for _, name in ipairs(names) do local p = char:FindFirstChild(name) if p and p:IsA("BasePart") then sum = sum + p.Position n = n + 1 end end if n == 0 then return nil end return sum / n end end local function scanTargets() local list = {} for _, plr in ipairs(Players:GetPlayers()) do if plr ~= LocalPlayer then local char = getCharacter(plr) if char then local hum = char:FindFirstChildOfClass("Humanoid") local head = char:FindFirstChild("Head") local root = char:FindFirstChild("HumanoidRootPart") if hum and hum.Health > 0 and head and root then table.insert(list, { Player = plr, Character = char, Humanoid = hum, Head = head, Root = root, AimPosition = getAimPosition(char), IsEnemy = isEnemy(plr), }) end end end end return list end -- ============================================================ -- SCREEN HELPERS -- ============================================================ local function worldToScreen(worldPos) local sp, onScreen = Camera:WorldToViewportPoint(worldPos) return Vector2.new(sp.X, sp.Y), onScreen, sp.Z end local function viewportCenter() local vp = Camera.ViewportSize return Vector2.new(vp.X * 0.5, vp.Y * 0.5) end -- ============================================================ -- DRAWING / ESP SETUP -- ============================================================ local hasDrawing = pcall(function() return Drawing.new("Square") end) if not hasDrawing then warn("[Rivals] Drawing API not available — ESP disabled.") end local espDrawings = {} _G.__RivalsDrawings = espDrawings local function createESP(plr) if not hasDrawing then return nil end local d = {} d.box = Drawing.new("Square") d.box.Thickness = 1.5 d.box.Filled = false d.box.Transparency = 1 d.box.Color = Color3.new(1, 1, 1) d.box.Visible = false d.name = Drawing.new("Text") d.name.Size = 15 d.name.Center = true d.name.Outline = true d.name.OutlineColor = Color3.new(0, 0, 0) d.name.Font = 2 d.name.Visible = false d.dist = Drawing.new("Text") d.dist.Size = 13 d.dist.Center = true d.dist.Outline = true d.dist.OutlineColor = Color3.new(0, 0, 0) d.dist.Font = 2 d.dist.Visible = false d.tracer = Drawing.new("Line") d.tracer.Thickness = 1 d.tracer.Color = Color3.new(1, 1, 1) d.tracer.Visible = false espDrawings[plr] = d return d end local function hideAll(d) for _, v in pairs(d) do v.Visible = false end end -- ============================================================ -- ESP RENDER LOOP -- ============================================================ track(RunService.RenderStepped:Connect(function() if Killed then return end if not hasDrawing then return end if not Config.ESP.Enabled then for _, d in pairs(espDrawings) do hideAll(d) end return end local seen = {} local camPos = Camera.CFrame.Position for _, t in ipairs(scanTargets()) do seen[t.Player] = true local d = espDrawings[t.Player] or createESP(t.Player) if d then local distance = (camPos - t.Root.Position).Magnitude if distance > Config.ESP.MaxDistance then hideAll(d) else local topWorld = t.Head.Position + Vector3.new(0, 0.6, 0) local bottomWorld = t.Root.Position - Vector3.new(0, 3.0, 0) local topScreen, topOn = worldToScreen(topWorld) local botScreen, botOn = worldToScreen(bottomWorld) local centerScreen, centerOn = worldToScreen(t.Root.Position) if not (topOn and botOn and centerOn) then hideAll(d) else local height = math.abs(botScreen.Y - topScreen.Y) local width = height * 0.55 local x = centerScreen.X - width * 0.5 local y = topScreen.Y local col = t.IsEnemy and Config.ESP.EnemyColor or Config.ESP.TeamColor d.box.Visible = Config.ESP.Box if Config.ESP.Box then d.box.Size = Vector2.new(width, height) d.box.Position = Vector2.new(x, y) d.box.Color = col end d.name.Visible = Config.ESP.Name if Config.ESP.Name then d.name.Text = t.Player.Name d.name.Position = Vector2.new(centerScreen.X, y - 18) d.name.Color = col end d.dist.Visible = Config.ESP.Distance if Config.ESP.Distance then d.dist.Text = string.format("[%d]", math.floor(distance)) d.dist.Position = Vector2.new(centerScreen.X, y + height + 3) d.dist.Color = col end d.tracer.Visible = Config.ESP.Tracer if Config.ESP.Tracer then local vp = Camera.ViewportSize d.tracer.From = Vector2.new(vp.X * 0.5, vp.Y) d.tracer.To = Vector2.new(centerScreen.X, y + height) d.tracer.Color = col end end end end end for plr, d in pairs(espDrawings) do if not seen[plr] then hideAll(d) end end end)) -- ============================================================ -- FOV CIRCLE -- ============================================================ local fovCircle if hasDrawing then fovCircle = Drawing.new("Circle") fovCircle.Thickness = 1.5 fovCircle.NumSides = 64 fovCircle.Color = Theme.Accent fovCircle.Filled = false fovCircle.Transparency = 0.6 fovCircle.Visible = false _G.__RivalsFovCircle = fovCircle end track(RunService.RenderStepped:Connect(function() if Killed then return end if not hasDrawing or not fovCircle then return end fovCircle.Visible = Config.Aimbot.Enabled and Config.Aimbot.DrawFOV if fovCircle.Visible then fovCircle.Position = viewportCenter() fovCircle.Radius = Config.Aimbot.FOV end end)) -- ============================================================ -- AIMBOT -- ============================================================ local function findBestTarget() local targets = scanTargets() local center = viewportCenter() local best, bestDist = nil, math.huge for _, t in ipairs(targets) do if t.AimPosition and t.IsEnemy then local sp, onScreen = worldToScreen(t.AimPosition) if onScreen then local d = (sp - center).Magnitude if d <= Config.Aimbot.FOV and d < bestDist then bestDist = d best = t end end end end return best end local guiBlocking = false track(RunService.RenderStepped:Connect(function() if Killed then return end if not Config.Aimbot.Enabled then return end if guiBlocking then return end if not UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton2) then return end local target = findBestTarget() if not target then return end local camPos = Camera.CFrame.Position local targetPos = target.AimPosition local goalCF = CFrame.new(camPos, targetPos) Camera.CFrame = Camera.CFrame:Lerp(goalCF, Config.Aimbot.Smoothness) end)) -- ============================================================ -- MISC — FLIGHT -- ============================================================ local FlightState = { BV = nil } local function ensureFlightInstances() local char = LocalPlayer.Character if not char then return end local hrp = char:FindFirstChild("HumanoidRootPart") local hum = char:FindFirstChildOfClass("Humanoid") if not hrp or not hum then return end hum.PlatformStand = true if not FlightState.BV or FlightState.BV.Parent ~= hrp then if FlightState.BV then FlightState.BV:Destroy() end FlightState.BV = Instance.new("BodyVelocity") FlightState.BV.MaxForce = Vector3.new(1e5, 1e5, 1e5) FlightState.BV.Velocity = Vector3.zero FlightState.BV.Parent = hrp end end local function releaseFlightInstances() if FlightState.BV then FlightState.BV:Destroy() FlightState.BV = nil end local char = LocalPlayer.Character if char then local hum = char:FindFirstChildOfClass("Humanoid") if hum then hum.PlatformStand = false end end end table.insert(KillHooks, releaseFlightInstances) track(RunService.RenderStepped:Connect(function() if Killed then return end if not Config.Misc.Flight.Enabled then return end ensureFlightInstances() if not FlightState.BV then return end local cam = workspace.CurrentCamera local move = Vector3.zero local speed = Config.Misc.Flight.Speed if UserInputService:IsKeyDown(Enum.KeyCode.W) then move = move + cam.CFrame.LookVector end if UserInputService:IsKeyDown(Enum.KeyCode.S) then move = move - cam.CFrame.LookVector end if UserInputService:IsKeyDown(Enum.KeyCode.A) then move = move - cam.CFrame.RightVector end if UserInputService:IsKeyDown(Enum.KeyCode.D) then move = move + cam.CFrame.RightVector end if UserInputService:IsKeyDown(Enum.KeyCode.Space) then move = move + Vector3.new(0, 1, 0) end if UserInputService:IsKeyDown(Enum.KeyCode.LeftControl) then move = move - Vector3.new(0, 1, 0) end if move.Magnitude > 0 then move = move.Unit * speed end FlightState.BV.Velocity = move end)) -- ============================================================ -- MISC — WALKSPEED / JUMPPOWER / NOCLIP -- ============================================================ track(RunService.Stepped:Connect(function() if Killed then return end local char = LocalPlayer.Character if not char then return end local hum = char:FindFirstChildOfClass("Humanoid") if not hum then return end if Config.Misc.WalkSpeed.Enabled then hum.WalkSpeed = Config.Misc.WalkSpeed.Value end if Config.Misc.JumpPower.Enabled then hum.UseJumpPower = true hum.JumpPower = Config.Misc.JumpPower.Value end if Config.Misc.NoClip then for _, part in ipairs(char:GetDescendants()) do if part:IsA("BasePart") and part.CanCollide then part.CanCollide = false end end end end)) -- ============================================================ -- MISC — INFINITE JUMP -- ============================================================ track(UserInputService.JumpRequest:Connect(function() if Killed then return end if not Config.Misc.InfiniteJump then return end local char = LocalPlayer.Character local hum = char and char:FindFirstChildOfClass("Humanoid") if hum then hum:ChangeState(Enum.HumanoidStateType.Jumping) end end)) -- ============================================================ -- GUI -- ============================================================ local ScreenGui = Instance.new("ScreenGui") ScreenGui.Name = "RivalsMenu" ScreenGui.ResetOnSpawn = false ScreenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling ScreenGui.DisplayOrder = 999 ScreenGui.IgnoreGuiInset = true ScreenGui.Parent = LocalPlayer:WaitForChild("PlayerGui") local function createFrame(parent, props, className) local inst = Instance.new(className or "Frame") for k, v in pairs(props) do inst[k] = v end inst.Parent = parent return inst end local Window = createFrame(ScreenGui, { Name = "Window", Size = UDim2.new(0, 380, 0, 520), Position = UDim2.new(0, 40, 0.5, -260), BackgroundColor3 = Theme.WindowBg, BorderSizePixel = 0, Active = true, Draggable = true, ZIndex = 1 }) createFrame(Window, { CornerRadius = UDim.new(0, 12) }, "UICorner") createFrame(Window, { Color = Theme.Accent, Thickness = 2 }, "UIStroke") createFrame(Window, { Size = UDim2.new(1, -50, 0, 30), Position = UDim2.new(0, 14, 0, 6), BackgroundTransparency = 1, Text = "Rivals", TextColor3 = Theme.Accent, Font = Enum.Font.GothamBold, TextSize = 16, TextXAlignment = Enum.TextXAlignment.Left, ZIndex = 5 }, "TextLabel") local CloseBtn = createFrame(Window, { Size = UDim2.new(0, 26, 0, 26), Position = UDim2.new(1, -34, 0, 8), BackgroundColor3 = Theme.CloseBtn, BorderSizePixel = 0, Text = "X", TextColor3 = Color3.fromRGB(255, 255, 255), Font = Enum.Font.GothamBold, TextSize = 14, AutoButtonColor = true, ZIndex = 50 }, "TextButton") createFrame(CloseBtn, { CornerRadius = UDim.new(0, 6) }, "UICorner") CloseBtn.MouseButton1Down:Connect(function() kill() end) CloseBtn.MouseButton1Click:Connect(function() if not Killed then kill() end end) local TabBar = createFrame(Window, { Size = UDim2.new(1, -20, 0, 30), Position = UDim2.new(0, 10, 0, 40), BackgroundColor3 = Theme.SectionBg, BorderSizePixel = 0, ZIndex = 2 }) createFrame(TabBar, { CornerRadius = UDim.new(0, 6) }, "UICorner") createFrame(TabBar, { Padding = UDim.new(0, 2), SortOrder = Enum.SortOrder.LayoutOrder, FillDirection = Enum.FillDirection.Horizontal, HorizontalAlignment = Enum.HorizontalAlignment.Center, VerticalAlignment = Enum.VerticalAlignment.Center }, "UIListLayout") local Content = createFrame(Window, { Size = UDim2.new(1, -20, 1, -130), Position = UDim2.new(0, 10, 0, 76), BackgroundTransparency = 1, ZIndex = 2 }) local tabs = {} local function createTab(name) local btn = createFrame(TabBar, { Size = UDim2.new(1/3, -4, 1, -6), BackgroundColor3 = Theme.TabInactive, BorderSizePixel = 0, Text = name, TextColor3 = Theme.TabInactiveTxt, Font = Enum.Font.GothamBold, TextSize = 12, AutoButtonColor = false }, "TextButton") createFrame(btn, { CornerRadius = UDim.new(0, 5) }, "UICorner") local scroll = createFrame(Content, { Size = UDim2.new(1, 0, 1, 0), BackgroundTransparency = 1, CanvasSize = UDim2.new(0, 0, 0, 0), AutomaticCanvasSize = Enum.AutomaticSize.Y, ScrollBarThickness = 4, Visible = false }, "ScrollingFrame") createFrame(scroll, { Padding = UDim.new(0, 8), SortOrder = Enum.SortOrder.LayoutOrder }, "UIListLayout") local function activate() for _, t in pairs(tabs) do t.Scroll.Visible = false t.Button.BackgroundColor3 = Theme.TabInactive t.Button.TextColor3 = Theme.TabInactiveTxt end scroll.Visible = true btn.BackgroundColor3 = Theme.Accent btn.TextColor3 = Theme.TabActiveTxt end btn.MouseButton1Click:Connect(activate) local tab = { Button = btn, Scroll = scroll, Activate = activate } tabs[name] = tab return tab end -- ============================================================ -- COMPONENTS -- ============================================================ local function createSection(parent, title) local frame = createFrame(parent, { Size = UDim2.new(1, 0, 0, 0), AutomaticSize = Enum.AutomaticSize.Y, BackgroundColor3 = Theme.SectionBg, BorderSizePixel = 0 }) createFrame(frame, { CornerRadius = UDim.new(0, 6) }, "UICorner") createFrame(frame, { PaddingTop = UDim.new(0, 6), PaddingBottom = UDim.new(0, 6), PaddingLeft = UDim.new(0, 6), PaddingRight = UDim.new(0, 6) }, "UIPadding") createFrame(frame, { Padding = UDim.new(0, 6), SortOrder = Enum.SortOrder.LayoutOrder }, "UIListLayout") createFrame(frame, { Size = UDim2.new(1, 0, 0, 22), BackgroundTransparency = 1, Text = title, TextColor3 = Theme.Accent, Font = Enum.Font.GothamBold, TextSize = 13, TextXAlignment = Enum.TextXAlignment.Left, LayoutOrder = 0 }, "TextLabel") return frame end local function createToggle(parent, props) local frame = createFrame(parent, { Size = UDim2.new(1, 0, 0, 32), BackgroundColor3 = Theme.RowBg, BorderSizePixel = 0 }) createFrame(frame, { CornerRadius = UDim.new(0, 6) }, "UICorner") createFrame(frame, { Size = UDim2.new(0.6, 0, 1, 0), Position = UDim2.new(0, 10, 0, 0), BackgroundTransparency = 1, Text = props.Name, TextColor3 = Theme.LabelTxt, Font = Enum.Font.Gotham, TextSize = 12, TextXAlignment = Enum.TextXAlignment.Left }, "TextLabel") local bg = createFrame(frame, { Size = UDim2.new(0, 40, 0, 20), Position = UDim2.new(1, -50, 0.5, -10), BackgroundColor3 = Theme.ToggleOff, BorderSizePixel = 0 }) createFrame(bg, { CornerRadius = UDim.new(0, 10) }, "UICorner") local handle = createFrame(bg, { Size = UDim2.new(0, 16, 0, 16), Position = UDim2.new(0, 2, 0.5, -8), BackgroundColor3 = Color3.fromRGB(255, 255, 255), BorderSizePixel = 0 }) createFrame(handle, { CornerRadius = UDim.new(1, 0) }, "UICorner") local enabled = props.Default or false local function update(state) enabled = state handle.Position = UDim2.new(0, state and 22 or 2, 0.5, -8) bg.BackgroundColor3 = state and Theme.Accent or Theme.ToggleOff if props.OnChange then props.OnChange(state) end end bg.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then update(not enabled) end end) update(enabled) return frame end local function createSlider(parent, props) local frame = createFrame(parent, { Size = UDim2.new(1, 0, 0, 38), BackgroundColor3 = Theme.RowBg, BorderSizePixel = 0 }) createFrame(frame, { CornerRadius = UDim.new(0, 6) }, "UICorner") createFrame(frame, { Size = UDim2.new(0.4, -10, 1, 0), Position = UDim2.new(0, 10, 0, 0), BackgroundTransparency = 1, Text = props.Name, TextColor3 = Theme.LabelTxt, Font = Enum.Font.Gotham, TextSize = 12, TextXAlignment = Enum.TextXAlignment.Left }, "TextLabel") local valueLabel = createFrame(frame, { Size = UDim2.new(0.18, -10, 1, 0), Position = UDim2.new(0.82, 0, 0, 0), BackgroundTransparency = 1, Text = string.format("%.2f", props.Default), TextColor3 = Theme.ValueTxt, Font = Enum.Font.GothamBold, TextSize = 12, TextXAlignment = Enum.TextXAlignment.Right }, "TextLabel") local bg = createFrame(frame, { Size = UDim2.new(0.35, -10, 0, 6), Position = UDim2.new(0.45, 0, 0.5, -3), BackgroundColor3 = Theme.SliderTrack, BorderSizePixel = 0 }) createFrame(bg, { CornerRadius = UDim.new(0, 3) }, "UICorner") local ratio0 = (props.Default - props.Min) / (props.Max - props.Min) local fill = createFrame(bg, { Size = UDim2.new(ratio0, 0, 1, 0), BackgroundColor3 = Theme.Accent, BorderSizePixel = 0 }) createFrame(fill, { CornerRadius = UDim.new(0, 3) }, "UICorner") local handle = createFrame(bg, { Size = UDim2.new(0, 12, 0, 12), Position = UDim2.new(ratio0, -6, 0.5, -6), BackgroundColor3 = Color3.fromRGB(255, 255, 255), BorderSizePixel = 0 }) createFrame(handle, { CornerRadius = UDim.new(1, 0) }, "UICorner") local dragging, dragStartX, dragStartValue = false, 0, props.Default local currentValue = props.Default handle.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStartX = input.Position.X dragStartValue = currentValue end end) handle.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = false end end) track(UserInputService.InputChanged:Connect(function(input) if not dragging then return end if input.UserInputType ~= Enum.UserInputType.MouseMovement and input.UserInputType ~= Enum.UserInputType.Touch then return end local range = bg.AbsoluteSize.X if range <= 0 then return end local delta = input.Position.X - dragStartX local newValue = dragStartValue + (delta / range) * (props.Max - props.Min) newValue = math.clamp(newValue, props.Min, props.Max) currentValue = newValue local ratio = (newValue - props.Min) / (props.Max - props.Min) fill.Size = UDim2.new(ratio, 0, 1, 0) handle.Position = UDim2.new(ratio, -6, 0.5, -6) valueLabel.Text = string.format("%.2f", newValue) if props.OnChange then props.OnChange(newValue) end end)) return frame end local openDropdown = nil local function createDropdown(parent, props) local frame = createFrame(parent, { Size = UDim2.new(1, 0, 0, 32), BackgroundColor3 = Theme.RowBg, BorderSizePixel = 0, ClipsDescendants = false, ZIndex = 2 }) createFrame(frame, { CornerRadius = UDim.new(0, 6) }, "UICorner") createFrame(frame, { Size = UDim2.new(0.5, 0, 1, 0), Position = UDim2.new(0, 10, 0, 0), BackgroundTransparency = 1, Text = props.Name, TextColor3 = Theme.LabelTxt, Font = Enum.Font.Gotham, TextSize = 12, TextXAlignment = Enum.TextXAlignment.Left, ZIndex = 3 }, "TextLabel") local valueBtn = createFrame(frame, { Size = UDim2.new(0.4, -10, 0, 22), Position = UDim2.new(0.6, 0, 0.5, -11), BackgroundColor3 = Theme.AccentDim, BorderSizePixel = 0, Text = props.Default .. " ▼", TextColor3 = Theme.ValueTxt, Font = Enum.Font.GothamBold, TextSize = 12, AutoButtonColor = true, ZIndex = 4 }, "TextButton") createFrame(valueBtn, { CornerRadius = UDim.new(0, 5) }, "UICorner") local listHolder = createFrame(frame, { Size = UDim2.new(0.4, -10, 0, #props.Options * 24), Position = UDim2.new(0.6, 0, 1, 4), BackgroundColor3 = Theme.RowBgAlt, BorderSizePixel = 0, Visible = false, ZIndex = 20 }) createFrame(listHolder, { CornerRadius = UDim.new(0, 6) }, "UICorner") createFrame(listHolder, { Padding = UDim.new(0, 2), SortOrder = Enum.SortOrder.LayoutOrder }, "UIListLayout") for i, opt in ipairs(props.Options) do local optBtn = createFrame(listHolder, { Size = UDim2.new(1, -4, 0, 22), BackgroundColor3 = Theme.RowBgHover, BorderSizePixel = 0, Text = opt, TextColor3 = Theme.LabelTxt, Font = Enum.Font.Gotham, TextSize = 12, AutoButtonColor = true, LayoutOrder = i, ZIndex = 21 }, "TextButton") createFrame(optBtn, { CornerRadius = UDim.new(0, 4) }, "UICorner") optBtn.MouseButton1Click:Connect(function() valueBtn.Text = opt .. " ▼" listHolder.Visible = false openDropdown = nil if props.OnChange then props.OnChange(opt) end end) end valueBtn.MouseButton1Click:Connect(function() if openDropdown and openDropdown ~= listHolder then openDropdown.Visible = false end listHolder.Visible = not listHolder.Visible openDropdown = listHolder.Visible and listHolder or nil end) return frame end -- Keybind component — click, then press any key to rebind local function createKeybind(parent, props) local frame = createFrame(parent, { Size = UDim2.new(1, 0, 0, 32), BackgroundColor3 = Theme.RowBg, BorderSizePixel = 0 }) createFrame(frame, { CornerRadius = UDim.new(0, 6) }, "UICorner") createFrame(frame, { Size = UDim2.new(0.5, 0, 1, 0), Position = UDim2.new(0, 10, 0, 0), BackgroundTransparency = 1, Text = props.Name, TextColor3 = Theme.LabelTxt, Font = Enum.Font.Gotham, TextSize = 12, TextXAlignment = Enum.TextXAlignment.Left }, "TextLabel") local bindBtn = createFrame(frame, { Size = UDim2.new(0.4, -10, 0, 22), Position = UDim2.new(0.6, 0, 0.5, -11), BackgroundColor3 = Theme.AccentDim, BorderSizePixel = 0, Text = props.Default.Name, TextColor3 = Theme.ValueTxt, Font = Enum.Font.GothamBold, TextSize = 12, AutoButtonColor = true }, "TextButton") createFrame(bindBtn, { CornerRadius = UDim.new(0, 5) }, "UICorner") local listening = false bindBtn.MouseButton1Click:Connect(function() listening = true bindBtn.Text = "press a key..." bindBtn.BackgroundColor3 = Theme.Accent end) track(UserInputService.InputBegan:Connect(function(input, gp) if not listening then return end if input.UserInputType ~= Enum.UserInputType.Keyboard then return end local key = input.KeyCode listening = false bindBtn.BackgroundColor3 = Theme.AccentDim if key == Enum.KeyCode.Escape then bindBtn.Text = props.Default.Name return end props.Default = key bindBtn.Text = key.Name if props.OnChange then props.OnChange(key) end end)) return frame end -- ============================================================ -- BUILD TABS -- ============================================================ local VisualTab = createTab("Visual") local CombatTab = createTab("Combat") local MiscTab = createTab("Misc") -- Visual local espSec = createSection(VisualTab.Scroll, "ESP") createToggle(espSec, { Name = "Enable ESP", Default = true, OnChange = function(v) Config.ESP.Enabled = v end }) createToggle(espSec, { Name = "Box", Default = true, OnChange = function(v) Config.ESP.Box = v end }) createToggle(espSec, { Name = "Name", Default = true, OnChange = function(v) Config.ESP.Name = v end }) createToggle(espSec, { Name = "Distance", Default = true, OnChange = function(v) Config.ESP.Distance = v end }) createToggle(espSec, { Name = "Tracer", Default = false, OnChange = function(v) Config.ESP.Tracer = v end }) createSlider(espSec, { Name = "Max Dist", Min = 100, Max = 3000, Default = 1000, OnChange = function(v) Config.ESP.MaxDistance = v end }) -- Combat local aimSec = createSection(CombatTab.Scroll, "Aimbot") createToggle(aimSec, { Name = "Enable Aimbot", Default = false, OnChange = function(v) Config.Aimbot.Enabled = v end }) createSlider(aimSec, { Name = "FOV", Min = 10, Max = 500, Default = 150, OnChange = function(v) Config.Aimbot.FOV = v end }) createSlider(aimSec, { Name = "Smoothness", Min = 0.01, Max = 1, Default = 0.20, OnChange = function(v) Config.Aimbot.Smoothness = v end }) createDropdown(aimSec, { Name = "Target Part", Options = { "Head", "Torso", "Left Leg", "Right Leg" }, Default = "Head", OnChange = function(v) Config.Aimbot.TargetPart = v end }) createToggle(aimSec, { Name = "Team Check", Default = true, OnChange = function(v) Config.Aimbot.TeamCheck = v end }) createToggle(aimSec, { Name = "Show FOV Circle", Default = true, OnChange = function(v) Config.Aimbot.DrawFOV = v end }) local infoSec = createSection(CombatTab.Scroll, "Info") createFrame(infoSec, { Size = UDim2.new(1, 0, 0, 34), BackgroundTransparency = 1, Text = "Aimbot: hold RIGHT-CLICK.\nX closes script.", TextColor3 = Theme.InfoTxt, Font = Enum.Font.Gotham, TextSize = 12, TextWrapped = true, TextXAlignment = Enum.TextXAlignment.Left }, "TextLabel") -- Misc — Keybind section at the TOP local kbSec = createSection(MiscTab.Scroll, "Keybinds") createKeybind(kbSec, { Name = "Menu Toggle", Default = Config.UI.ToggleKey, OnChange = function(key) Config.UI.ToggleKey = key end, }) -- Misc — Movement local moveSec = createSection(MiscTab.Scroll, "Movement") createToggle(moveSec, { Name = "Enable Flight", Default = false, OnChange = function(v) Config.Misc.Flight.Enabled = v if not v then releaseFlightInstances() end end }) createSlider(moveSec, { Name = "Flight Speed", Min = 10, Max = 500, Default = 50, OnChange = function(v) Config.Misc.Flight.Speed = v end }) createToggle(moveSec, { Name = "Custom WalkSpeed", Default = false, OnChange = function(v) Config.Misc.WalkSpeed.Enabled = v end }) createSlider(moveSec, { Name = "WalkSpeed", Min = 16, Max = 500, Default = 100, OnChange = function(v) Config.Misc.WalkSpeed.Value = v end }) createToggle(moveSec, { Name = "Custom JumpPower", Default = false, OnChange = function(v) Config.Misc.JumpPower.Enabled = v end }) createSlider(moveSec, { Name = "JumpPower", Min = 50, Max = 500, Default = 100, OnChange = function(v) Config.Misc.JumpPower.Value = v end }) createToggle(moveSec, { Name = "Infinite Jump", Default = false, OnChange = function(v) Config.Misc.InfiniteJump = v end }) createToggle(moveSec, { Name = "NoClip", Default = false, OnChange = function(v) Config.Misc.NoClip = v end }) tabs.Visual.Activate() -- ============================================================ -- OPEN / CLOSE + MOUSE FREE -- ============================================================ local menuOpen = true track(RunService:BindToRenderStep("RivalsMenuMouseGuard", Enum.RenderPriority.Camera.Value + 1, function() if Killed or not menuOpen then return end UserInputService.ModalEnabled = true UserInputService.MouseIconEnabled = true if UserInputService.MouseBehavior ~= Enum.MouseBehavior.Default then UserInputService.MouseBehavior = Enum.MouseBehavior.Default end if GuiService.SelectedObject ~= nil then GuiService.SelectedObject = nil end end)) track(UserInputService:GetPropertyChangedSignal("MouseBehavior"):Connect(function() if Killed or not menuOpen then return end if UserInputService.MouseBehavior ~= Enum.MouseBehavior.Default then UserInputService.MouseBehavior = Enum.MouseBehavior.Default end end)) local function setMenuOpen(open) if Killed then return end menuOpen = open guiBlocking = open ScreenGui.Enabled = open if open then task.spawn(function() for _ = 1, 15 do if Killed then return end UserInputService.ModalEnabled = true UserInputService.MouseIconEnabled = true UserInputService.MouseBehavior = Enum.MouseBehavior.Default GuiService.SelectedObject = nil RunService.RenderStepped:Wait() end end) else UserInputService.ModalEnabled = false UserInputService.MouseIconEnabled = false UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter GuiService.SelectedObject = nil end end -- Home key handler — reads Config.UI.ToggleKey each press, so -- rebinding the keybind updates this immediately with no re-hook. track(UserInputService.InputBegan:Connect(function(input) if Killed then return end if input.KeyCode ~= Config.UI.ToggleKey then return end if UserInputService:GetFocusedTextBox() then return end setMenuOpen(not menuOpen) end)) setMenuOpen(true)