Rivals Script by thegxx
RIVALS Keyless
Rivals Script by thegxx
👤 alexriderr 👁 26 views ❤️ 0 likes ⏱ Apr 25, 2026
This Rivals script is created by thegxx and is designed to be undetectable. It works on both mobile and PC.
✨ Features
Skin Changer Silent Aim ESP
📋 Script Code
local repo = "https://raw.githubusercontent.com/deividcomsono/Obsidian/main/"
local Library = loadstring(game:HttpGet(repo .. "Library.lua"))()
local ThemeManager = loadstring(game:HttpGet(repo .. "addons/ThemeManager.lua"))()
local SaveManager = loadstring(game:HttpGet(repo .. "addons/SaveManager.lua"))()

local Options = Library.Options
local Toggles = Library.Toggles

Library.ForceCheckbox = false
Library.ShowToggleFrameInKeybinds = true

local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local LocalPlayer = Players.LocalPlayer
local Workspace = game:GetService("Workspace")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local UserInputService = game:GetService("UserInputService")
local Camera = Workspace.CurrentCamera

-- Connection storage for proper cleanup
local connections = {}

local Window = Library:CreateWindow({
	Title = "Rivals - thegxx",
	Footer = "version: 2.0 - finished",
	Icon = 123123,
	NotifySide = "Right",
	ShowCustomCursor = true,
})

local Tabs = {
	Aimbot = Window:AddTab("Aimbot & Precision", "user"),
	Visuals = Window:AddTab("Visuals & ESP", "eye"),
	Movement = Window:AddTab("Movement & Mobility", "running"),
	Protection = Window:AddTab("Protection & Survival", "shield"),
	Extras = Window:AddTab("UI & Extras", "gear"),
	["UI Settings"] = Window:AddTab("UI Settings", "settings"),
}

-- Utility functions
local function getCharacter()
	return LocalPlayer.Character
end

local function getHumanoid()
	local character = getCharacter()
	return character and character:FindFirstChild("Humanoid")
end

local function getRoot()
	local character = getCharacter()
	return character and character:FindFirstChild("HumanoidRootPart")
end

-- Aimbot settings
local aimDeadCheck = true
local aimWallCheck = true
local aimPriority = "Distance"
local aimFOV = 500
local aimMaxDistance = 0 -- 0 = no limit

local function isValidTarget(player)
	if player == LocalPlayer or not player.Character or not player.Character:FindFirstChild("Humanoid") or not player.Character:FindFirstChild("Head") then 
		return false 
	end
	
	if aimDeadCheck and player.Character.Humanoid.Health  0 then
		local myRoot = getRoot()
		if myRoot then
			local distance = (myRoot.Position - player.Character.Head.Position).Magnitude
			if distance > aimMaxDistance then
				return false
			end
		end
	end
	
	if aimWallCheck then
		local ray = Ray.new(Camera.CFrame.Position, (player.Character.Head.Position - Camera.CFrame.Position).Unit * 500)
		local part = Workspace:FindPartOnRayWithIgnoreList(ray, {getCharacter()})
		if part and part:IsDescendantOf(player.Character) then 
			return true 
		else 
			return false 
		end
	end
	return true
end

local function getClosestPlayer(fov)
	local closest, closestValue = nil, math.huge
	local center = Vector2.new(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y / 2)
	
	for _, player in ipairs(Players:GetPlayers()) do
		if not isValidTarget(player) then continue end
		local head = player.Character.Head
		local pos, onScreen = Camera:WorldToViewportPoint(head.Position)
		if not onScreen then continue end
		local dist = (center - Vector2.new(pos.X, pos.Y)).Magnitude
		if dist > (fov or math.huge) then continue end
		local value = aimPriority == "Distance" and dist or player.Character.Humanoid.Health
		if value = 3 and math.random(100) <= silentAimHitchance then
			local closest = getClosestPlayer(aimFOV)
			if closest and closest.Character and closest.Character:FindFirstChild("Head") then
				args[3] = closest.Character.Head.Position
			end
		end
		return oldRaycast(table.unpack(args))
	end
end)

-- Improved TriggerBot
local triggerBotEnabled = false
local triggerBotDelay = 0
local triggerBotLastShot = 0

AimbotMainGroupBox:AddToggle("TriggerBotToggle", {
	Text = "TriggerBot",
	Tooltip = "Auto-shoot when aiming at enemy",
	Default = false,
	Callback = function(Value)
		triggerBotEnabled = Value
	end,
})

AimbotMainGroupBox:AddSlider("TriggerBotDelay", {
	Text = "TriggerBot Delay",
	Default = 0,
	Min = 0,
	Max = 500,
	Rounding = 0,
	Suffix = "ms",
	Callback = function(Value)
		triggerBotDelay = Value / 1000
	end,
})

connections["TriggerBot"] = RunService.Heartbeat:Connect(function()
	if not triggerBotEnabled then return end
	if tick() - triggerBotLastShot  0 then
			local player = Players:GetPlayerFromCharacter(target.Parent)
			if player and player ~= LocalPlayer then
				triggerBotLastShot = tick()
				local tool = LocalPlayer.Character and LocalPlayer.Character:FindFirstChildOfClass("Tool")
				if tool then
					tool:Activate()
				end
			end
		end
	end
end)

-- FOV Circle update
connections["FOVCircle"] = RunService.RenderStepped:Connect(function()
	if fovCircleEnabled then
		fovCircle.Position = Vector2.new(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y / 2)
		fovCircle.Radius = fovCircleSize
		fovCircle.Visible = true
		if fovCircleRainbow then
			fovCircle.Color = Color3.fromHSV(tick() % 5 / 5, 1, 1)
		end
	else
		fovCircle.Visible = false
	end
end)

-- Visuals Tab
local VisualsLeftGroupBox = Tabs.Visuals:AddLeftGroupbox("Player ESP Options")
local VisualsSkeletonGroupBox = Tabs.Visuals:AddRightGroupbox("Skeleton ESP Options")
local VisualsOtherGroupBox = Tabs.Visuals:AddLeftGroupbox("Other Visuals")

-- ESP Variables
local playerESPEnabled = false
local boxESPEnabled = false
local chamsESPEnabled = false
local playerESPName = true
local playerESPDistance = true
local playerESPHealth = true
local playerESPWeapon = true
local rainbowModeEnabled = false
local deadESPEnabled = true

-- Store ESP states for toggle functionality
local espStates = {
	Box = false,
	Chams = false,
	Name = true,
	Distance = true,
	Health = true,
	Weapon = true,
	Skeleton = false,
	Tracers = false
}

-- ESP Storage
local espBoxes = {}
local espChams = {}
local espTexts = {}
local skeletonLines = {}

-- Intelligent ESP Management System
local function cleanupPlayerESP(player)
	if espBoxes[player] then 
		pcall(function() espBoxes[player]:Remove() end) 
		espBoxes[player] = nil 
	end
	if espChams[player] then 
		pcall(function() espChams[player]:Destroy() end) 
		espChams[player] = nil 
	end
	if espTexts[player] then 
		pcall(function() espTexts[player]:Remove() end) 
		espTexts[player] = nil 
	end
	if skeletonLines[player] then
		if skeletonLines[player].lines then
			for _, line in pairs(skeletonLines[player].lines) do
				pcall(function() line:Remove() end)
			end
		end
		if skeletonLines[player].tracer then
			pcall(function() skeletonLines[player].tracer:Remove() end)
		end
		skeletonLines[player] = nil
	end
end

-- ESP creation function
local function createPlayerESP(player)
	if player == LocalPlayer then return end
	if not player.Character then return end
	
	-- Clean up existing ESP first
	cleanupPlayerESP(player)
	
	-- Box ESP
	local box = Drawing.new("Square")
	box.Visible = false
	box.Color = Color3.new(1, 1, 1)
	box.Thickness = 2
	box.Filled = false
	box.Transparency = 1
	espBoxes[player] = box
	
	-- Chams ESP
	local cham = Instance.new("Highlight")
	cham.Name = "ESP_Cham_" .. player.Name
	cham.Parent = game.CoreGui
	cham.Adornee = player.Character
	cham.FillTransparency = 0.5
	cham.OutlineTransparency = 0
	cham.FillColor = Color3.new(1, 1, 1)
	cham.OutlineColor = Color3.new(1, 1, 1)
	cham.Enabled = false
	espChams[player] = cham
	
	-- Text ESP
	local text = Drawing.new("Text")
	text.Visible = false
	text.Color = Color3.new(1, 1, 1)
	text.Size = 16
	text.Center = true
	text.Outline = true
	text.Transparency = 1
	text.Font = 2
	espTexts[player] = text
end

-- ESP Toggle System
local function toggleESPState()
	playerESPEnabled = not playerESPEnabled
	
	if playerESPEnabled then
		-- Restore previous states
		boxESPEnabled = espStates.Box
		chamsESPEnabled = espStates.Chams
		playerESPName = espStates.Name
		playerESPDistance = espStates.Distance
		playerESPHealth = espStates.Health
		playerESPWeapon = espStates.Weapon
		skeletonESPEnabled = espStates.Skeleton
		skeletonESPTracers = espStates.Tracers
		
		-- Create ESP for all players
		for _, player in ipairs(Players:GetPlayers()) do
			if player ~= LocalPlayer and player.Character then
				createPlayerESP(player)
			end
		end
		Library:Notify("ESP Enabled!", 2)
	else
		-- Store current states
		espStates.Box = boxESPEnabled
		espStates.Chams = chamsESPEnabled
		espStates.Name = playerESPName
		espStates.Distance = playerESPDistance
		espStates.Health = playerESPHealth
		espStates.Weapon = playerESPWeapon
		espStates.Skeleton = skeletonESPEnabled
		espStates.Tracers = skeletonESPTracers
		
		-- Disable all ESP
		boxESPEnabled = false
		chamsESPEnabled = false
		skeletonESPEnabled = false
		skeletonESPTracers = false
		
		-- Clean up all ESP
		for player in pairs(espBoxes) do
			cleanupPlayerESP(player)
		end
		Library:Notify("ESP Disabled!", 2)
	end
	
	-- Update toggles
	Toggles.BoxESPToggle:SetValue(boxESPEnabled)
	Toggles.ChamsESPToggle:SetValue(chamsESPEnabled)
	Toggles.SkeletonESPToggle:SetValue(skeletonESPEnabled)
	Toggles.SkeletonESPTracers:SetValue(skeletonESPTracers)
end

-- ESP Keybind
VisualsLeftGroupBox:AddLabel("ESP Master Keybind"):AddKeyPicker("ESPKeybind", {
	Default = "P",
	Mode = "Toggle",
	Text = "ESP Master Key",
	NoUI = false,
	Callback = function(Value)
		toggleESPState()
	end,
})

VisualsLeftGroupBox:AddToggle("PlayerESPToggle", {
	Text = "Enable Player ESP",
	Default = false,
	Callback = function(Value)
		playerESPEnabled = Value
		if not Value then
			toggleESPState()
		end
	end,
})

VisualsLeftGroupBox:AddToggle("BoxESPToggle", {
	Text = "Box ESP",
	Default = false,
	Callback = function(Value)
		boxESPEnabled = Value
		espStates.Box = Value
	end,
})

VisualsLeftGroupBox:AddToggle("ChamsESPToggle", {
	Text = "Chams ESP",
	Default = false,
	Callback = function(Value)
		chamsESPEnabled = Value
		espStates.Chams = Value
	end,
})

VisualsLeftGroupBox:AddToggle("PlayerESPName", {
	Text = "Name",
	Default = true,
	Callback = function(Value)
		playerESPName = Value
		espStates.Name = Value
	end,
})

VisualsLeftGroupBox:AddToggle("PlayerESPDistance", {
	Text = "Distance",
	Default = true,
	Callback = function(Value)
		playerESPDistance = Value
		espStates.Distance = Value
	end,
})

VisualsLeftGroupBox:AddToggle("PlayerESPHealth", {
	Text = "Health",
	Default = true,
	Callback = function(Value)
		playerESPHealth = Value
		espStates.Health = Value
	end,
})

VisualsLeftGroupBox:AddToggle("PlayerESPWeapon", {
	Text = "Equipped Weapon",
	Default = true,
	Callback = function(Value)
		playerESPWeapon = Value
		espStates.Weapon = Value
	end,
})

-- Player management system
local function setupPlayerESP(player)
	if player == LocalPlayer then return end
	
	player.CharacterAdded:Connect(function(char)
		task.wait(0.1)
		if playerESPEnabled then 
			createPlayerESP(player)
		end
	end)
	
	player.CharacterRemoving:Connect(function()
		cleanupPlayerESP(player)
	end)
	
	if player.Character then
		task.wait(0.1)
		createPlayerESP(player)
	end
end

-- Setup for existing players
for _, player in ipairs(Players:GetPlayers()) do
	setupPlayerESP(player)
end

-- Setup for new players
Players.PlayerAdded:Connect(function(player)
	setupPlayerESP(player)
end)

Players.PlayerRemoving:Connect(function(player)
	cleanupPlayerESP(player)
end)

-- ESP update with intelligent cleanup
connections["PlayerESP"] = RunService.Heartbeat:Connect(function()
	if not playerESPEnabled then return end
	
	local hue = tick() % 5 / 5
	local rainbowColor = Color3.fromHSV(hue, 1, 1)
	
	for _, player in ipairs(Players:GetPlayers()) do
		if player == LocalPlayer then continue end
		
		-- Auto cleanup for dead/disconnected players
		if not player.Character or not player.Character.Parent then
			cleanupPlayerESP(player)
			continue
		end
		
		local humanoid = player.Character:FindFirstChild("Humanoid")
		local root = player.Character:FindFirstChild("HumanoidRootPart")
		
		if not humanoid or not root then 
			cleanupPlayerESP(player)
			continue 
		end
		
		-- Auto cleanup for dead players if deadESP is enabled
		if deadESPEnabled and humanoid.Health <= 0 then
			cleanupPlayerESP(player)
			continue
		end
		
		-- Create ESP if it doesn't exist
		if not espBoxes[player] then
			createPlayerESP(player)
		end
		
		local rootPos, onScreen = Camera:WorldToViewportPoint(root.Position)
		if onScreen then
			-- Text ESP
			if espTexts[player] then
				local textStr = ""
				if playerESPName then textStr = textStr .. player.Name .. "\n" end
				if playerESPDistance then 
					local myRoot = getRoot()
					if myRoot then
						textStr = textStr .. math.floor((myRoot.Position - root.Position).Magnitude) .. " studs\n" 
					end
				end
				if playerESPHealth then textStr = textStr .. math.floor(humanoid.Health) .. "/" .. humanoid.MaxHealth .. "\n" end
				if playerESPWeapon then
					local tool = player.Character:FindFirstChildOfClass("Tool") or player.Backpack:FindFirstChildOfClass("Tool")
					if tool then textStr = textStr .. tool.Name end
				end
				
				espTexts[player].Text = textStr
				espTexts[player].Position = Vector2.new(rootPos.X, rootPos.Y - 50)
				espTexts[player].Visible = true
				if rainbowModeEnabled then 
					espTexts[player].Color = rainbowColor 
				end
			end
			
			-- Box ESP
			if boxESPEnabled and espBoxes[player] then
				local minX, minY = math.huge, math.huge
				local maxX, maxY = -math.huge, -math.huge
				
				for _, part in ipairs(player.Character:GetDescendants()) do
					if part:IsA("BasePart") then
						local corners = {
							part.CFrame * CFrame.new(part.Size.X/2, part.Size.Y/2, part.Size.Z/2).Position,
							part.CFrame * CFrame.new(part.Size.X/2, part.Size.Y/2, -part.Size.Z/2).Position,
							part.CFrame * CFrame.new(part.Size.X/2, -part.Size.Y/2, part.Size.Z/2).Position,
							part.CFrame * CFrame.new(part.Size.X/2, -part.Size.Y/2, -part.Size.Z/2).Position,
							part.CFrame * CFrame.new(-part.Size.X/2, part.Size.Y/2, part.Size.Z/2).Position,
							part.CFrame * CFrame.new(-part.Size.X/2, part.Size.Y/2, -part.Size.Z/2).Position,
							part.CFrame * CFrame.new(-part.Size.X/2, -part.Size.Y/2, part.Size.Z/2).Position,
							part.CFrame * CFrame.new(-part.Size.X/2, -part.Size.Y/2, -part.Size.Z/2).Position
						}
						for _, corner in ipairs(corners) do
							local pos = Camera:WorldToViewportPoint(corner)
							minX = math.min(minX, pos.X)
							maxX = math.max(maxX, pos.X)
							minY = math.min(minY, pos.Y)
							maxY = math.max(maxY, pos.Y)
						end
					end
				end
				
				espBoxes[player].Size = Vector2.new(maxX - minX, maxY - minY)
				espBoxes[player].Position = Vector2.new(minX, minY)
				espBoxes[player].Visible = true
				if rainbowModeEnabled then 
					espBoxes[player].Color = rainbowColor 
				end
			end
		else
			if espTexts[player] then espTexts[player].Visible = false end
			if espBoxes[player] then espBoxes[player].Visible = false end
		end
		
		-- Chams ESP
		if chamsESPEnabled and espChams[player] then
			if espChams[player].Adornee ~= player.Character then
				espChams[player].Adornee = player.Character
			end
			espChams[player].Enabled = true
			if rainbowModeEnabled then 
				espChams[player].FillColor = rainbowColor 
				espChams[player].OutlineColor = rainbowColor
			end
		elseif espChams[player] then
			espChams[player].Enabled = false
		end
	end
end)

-- Skeleton ESP
local skeletonESPEnabled = false
local skeletonESPTracers = false

VisualsSkeletonGroupBox:AddToggle("SkeletonESPToggle", {
	Text = "Skeleton ESP",
	Tooltip = "Full player skeleton",
	Default = false,
	Callback = function(Value)
		skeletonESPEnabled = Value
		espStates.Skeleton = Value
	end,
})

VisualsSkeletonGroupBox:AddToggle("SkeletonESPTracers", {
	Text = "Tracers",
	Default = false,
	Callback = function(Value)
		skeletonESPTracers = Value
		espStates.Tracers = Value
	end,
})

local function getPos(part)
	return part and part.Position or nil
end

connections["SkeletonESP"] = RunService.Heartbeat:Connect(function()
	if not skeletonESPEnabled then return end
	
	local hue = tick() % 5 / 5
	local rainbowColor = Color3.fromHSV(hue, 1, 1)
	
	for _, player in ipairs(Players:GetPlayers()) do
		if player == LocalPlayer then continue end
		
		-- Auto cleanup for invalid players
		if not player.Character or not player.Character.Parent then
			if skeletonLines[player] then
				cleanupPlayerESP(player)
			end
			continue
		end
		
		local humanoid = player.Character:FindFirstChild("Humanoid")
		if not humanoid or (deadESPEnabled and humanoid.Health  0 then
			flyBodyVelocity.Velocity = moveDir.Unit * flySpeed
		else
			flyBodyVelocity.Velocity = Vector3.zero
		end
	end
end)

-- Infinite Jump
local infJumpEnabled = false
local infJumpConnection

MovementRightGroupBox:AddToggle("InfiniteJumpToggle", {
	Text = "Infinite Jump",
	Tooltip = "Unlimited jumps without cooldown",
	Default = false,
	Callback = function(Value)
		infJumpEnabled = Value
		if Value then
			infJumpConnection = UserInputService.JumpRequest:Connect(function()
				local humanoid = getHumanoid()
				if humanoid then
					humanoid:ChangeState(Enum.HumanoidStateType.Jumping)
				end
			end)
		else
			if infJumpConnection then 
				infJumpConnection:Disconnect() 
				infJumpConnection = nil 
			end
		end
	end,
})

-- No Clip
local noClipEnabled = false

MovementRightGroupBox:AddToggle("NoClipToggle", {
	Text = "No Clip",
	Tooltip = "Walk through walls/objects",
	Default = false,
	Callback = function(Value)
		noClipEnabled = Value
	end,
})

connections["NoClip"] = RunService.Stepped:Connect(function()
	if noClipEnabled then
		pcall(function()
			for _, part in ipairs(getCharacter():GetDescendants()) do
				if part:IsA("BasePart") then
					part.CanCollide = false
				end
			end
		end)
	end
end)

-- Bunny Hop
local bunnyHopEnabled = false

MovementRightGroupBox:AddToggle("BunnyHopToggle", {
	Text = "Bunny Hop",
	Tooltip = "Auto-jump for momentum gain",
	Default = false,
	Callback = function(Value)
		bunnyHopEnabled = Value
	end,
})

connections["BunnyHop"] = RunService.Heartbeat:Connect(function()
	if bunnyHopEnabled then
		pcall(function()
			local humanoid = getHumanoid()
			if humanoid and humanoid.MoveDirection.Magnitude > 0 and humanoid.FloorMaterial ~= Enum.Material.Air then
				humanoid:ChangeState(Enum.HumanoidStateType.Jumping)
			end
		end)
	end
end)

-- Protection Tab
local ProtectionLeftGroupBox = Tabs.Protection:AddLeftGroupbox("Protection Options")

local antiAimEnabled = false
local antiAimMode = "Spin"
local antiAimSpeed = 10

ProtectionLeftGroupBox:AddToggle("AntiAimToggle", {
	Text = "Anti-Aim",
	Tooltip = "Deflects enemy aims",
	Default = false,
	Callback = function(Value)
		antiAimEnabled = Value
	end,
})

ProtectionLeftGroupBox:AddDropdown("AntiAimMode", {
	Values = { "Spin", "Jitter", "Random" },
	Default = 1,
	Multi = false,
	Text = "Mode",
	Callback = function(Value)
		antiAimMode = Value
	end,
})

ProtectionLeftGroupBox:AddSlider("AntiAimSpeed", {
	Text = "Spin Speed",
	Default = 10,
	Min = 1,
	Max = 50,
	Rounding = 0,
	Callback = function(Value)
		antiAimSpeed = Value
	end,
})

-- Third Person Force - CORRIGIDO
local forceThirdPerson = false
local originalCameraType = nil
local originalMaxZoom = nil
local originalMinZoom = nil

ProtectionLeftGroupBox:AddToggle("ForceThirdPerson", {
	Text = "Force Third Person",
	Tooltip = "Forces third person view for better Anti-Aim",
	Default = false,
	Callback = function(Value)
		forceThirdPerson = Value
		
		if Value then
			-- Salvar configurações originais
			originalCameraType = LocalPlayer.CameraMode
			originalMaxZoom = LocalPlayer.CameraMaxZoomDistance
			originalMinZoom = LocalPlayer.CameraMinZoomDistance
			
			-- Forçar terceira pessoa
			LocalPlayer.CameraMode = Enum.CameraMode.Classic
			LocalPlayer.CameraMaxZoomDistance = 50
			LocalPlayer.CameraMinZoomDistance = 5
			
			-- Garantir que a câmera está em terceira pessoa
			task.spawn(function()
				wait(0.1)
				if LocalPlayer.CameraMode ~= Enum.CameraMode.Classic then
					LocalPlayer.CameraMode = Enum.CameraMode.Classic
				end
			end)
			
			Library:Notify("Third Person Enabled!", 2)
		else
			-- Restaurar configurações originais
			if originalCameraType then
				LocalPlayer.CameraMode = originalCameraType
			else
				LocalPlayer.CameraMode = Enum.CameraMode.Classic
			end
			
			if originalMaxZoom then
				LocalPlayer.CameraMaxZoomDistance = originalMaxZoom
			else
				LocalPlayer.CameraMaxZoomDistance = 128
			end
			
			if originalMinZoom then
				LocalPlayer.CameraMinZoomDistance = originalMinZoom
			else
				LocalPlayer.CameraMinZoomDistance = 0.5
			end
			
			Library:Notify("Third Person Disabled!", 2)
		end
	end,
})

-- Sistema de verificação contínua para terceira pessoa
connections["ThirdPersonCheck"] = RunService.Heartbeat:Connect(function()
	if forceThirdPerson then
		-- Verificar e forçar continuamente a terceira pessoa
		if LocalPlayer.CameraMode ~= Enum.CameraMode.Classic then
			LocalPlayer.CameraMode = Enum.CameraMode.Classic
		end
		
		-- Garantir distâncias de zoom adequadas
		if LocalPlayer.CameraMaxZoomDistance  10 then
			LocalPlayer.CameraMinZoomDistance = 5
		end
	end
	
	-- Anti-Aim
	if antiAimEnabled then
		pcall(function()
			local root = getRoot()
			if root then
				if antiAimMode == "Spin" then
					root.CFrame = root.CFrame * CFrame.Angles(0, math.rad(antiAimSpeed), 0)
				elseif antiAimMode == "Jitter" then
					root.CFrame = root.CFrame * CFrame.Angles(0, math.rad(math.random(-180, 180)), 0)
				elseif antiAimMode == "Random" then
					root.CFrame = root.CFrame * CFrame.Angles(
						math.rad(math.random(-5, 5)),
						math.rad(math.random(-180, 180)),
						math.rad(math.random(-5, 5))
					)
				end
			end
		end)
	end
end)

-- Extras Tab
local ExtrasLeftGroupBox = Tabs.Extras:AddLeftGroupbox("Extras Options")

local fpsBoostEnabled = false

ExtrasLeftGroupBox:AddToggle("FPSBoostToggle", {
	Text = "FPS Boost",
	Tooltip = "Optimizes performance",
	Default = false,
	Callback = function(Value)
		fpsBoostEnabled = Value
		if Value then
			pcall(function()
				local lighting = game:GetService("Lighting")
				lighting.GlobalShadows = false
				lighting.FogEnd = 9e9
				settings().Rendering.QualityLevel = Enum.QualityLevel.Level01
				
				for _, v in pairs(workspace:GetDescendants()) do
					if v:IsA("ParticleEmitter") or v:IsA("Trail") or v:IsA("Smoke") or v:IsA("Fire") then
						v.Enabled = false
					end
				end
			end)
			Library:Notify("FPS Boost Enabled!", 3)
		else
			pcall(function()
				local lighting = game:GetService("Lighting")
				lighting.GlobalShadows = true
				settings().Rendering.QualityLevel = Enum.QualityLevel.Automatic
			end)
		end
	end,
})

ExtrasLeftGroupBox:AddButton("Remove Textures (Extreme FPS)", function()
	for _, v in pairs(workspace:GetDescendants()) do
		pcall(function()
			if v:IsA("Decal") or v:IsA("Texture") then
				v:Destroy()
			elseif v:IsA("BasePart") then
				v.Material = Enum.Material.SmoothPlastic
				v.Reflectance = 0
			end
		end)
	end
	Library:Notify("Textures removed!", 3)
end)

ExtrasLeftGroupBox:AddDivider()

ExtrasLeftGroupBox:AddButton("Fullbright", function()
	local lighting = game:GetService("Lighting")
	lighting.Brightness = 2
	lighting.ClockTime = 14
	lighting.FogEnd = 100000
	lighting.GlobalShadows = false
	lighting.OutdoorAmbient = Color3.fromRGB(128, 128, 128)
	Library:Notify("Fullbright Enabled!", 3)
end)

ExtrasLeftGroupBox:AddButton("Remove Fog", function()
	local lighting = game:GetService("Lighting")
	lighting.FogEnd = 100000
	for _, v in pairs(lighting:GetChildren()) do
		if v:IsA("Atmosphere") then
			v:Destroy()
		end
	end
	Library:Notify("Fog Removed!", 3)
end)

-- UI Settings Tab
local MenuGroup = Tabs["UI Settings"]:AddLeftGroupbox("Menu")
local ConfigGroup = Tabs["UI Settings"]:AddRightGroupbox("Configuration")

MenuGroup:AddToggle("KeybindMenuOpen", {
	Default = false,
	Text = "Open Keybind Menu",
	Callback = function(value)
		Library.KeybindFrame.Visible = value
	end,
})

MenuGroup:AddToggle("ShowCustomCursor", {
	Text = "Custom Cursor",
	Default = true,
	Callback = function(Value)
		Library.ShowCustomCursor = Value
	end,
})

MenuGroup:AddDropdown("NotificationSide", {
	Values = { "Left", "Right" },
	Default = 2,
	Text = "Notification Side",
	Callback = function(Value)
		Library:SetNotifySide(Value)
	end,
})

MenuGroup:AddDivider()

MenuGroup:AddButton("Unload Script", function()
	Library:Unload()
end)

MenuGroup:AddLabel("Menu Keybind"):AddKeyPicker("MenuKeybind", { 
	Default = "RightShift", 
	NoUI = true, 
	Text = "Menu keybind" 
})

Library.ToggleKeybind = Options.MenuKeybind

-- Configuration Manager
ConfigGroup:AddLabel("Config Management")
ConfigGroup:AddDivider()

ConfigGroup:AddDropdown("ConfigList", {
	Values = {},
	Default = 1,
	Multi = false,
	Text = "Select Config",
})

ConfigGroup:AddInput("ConfigName", {
	Default = "",
	Numeric = false,
	Finished = false,
	Text = "Config Name",
	Tooltip = "Enter name for your config",
	Placeholder = "MyConfig",
})

ConfigGroup:AddButton("Save Config", function()
	local configName = Options.ConfigName.Value
	if configName == "" then
		Library:Notify("Please enter a config name!", 3)
		return
	end
	SaveManager:Save(configName)
	Library:Notify("Config '" .. configName .. "' saved!", 3)
	SaveManager:Refresh()
end)

ConfigGroup:AddButton("Load Config", function()
	local configName = Options.ConfigName.Value
	if configName == "" then
		Library:Notify("Please enter a config name!", 3)
		return
	end
	if SaveManager:Load(configName) then
		Library:Notify("Config '" .. configName .. "' loaded!", 3)
	else
		Library:Notify("Config not found!", 3)
	end
end)

ConfigGroup:AddButton("Delete Config", function()
	local configName = Options.ConfigName.Value
	if configName == "" then
		Library:Notify("Please enter a config name!", 3)
		return
	end
	if SaveManager:Delete(configName) then
		Library:Notify("Config '" .. configName .. "' deleted!", 3)
		SaveManager:Refresh()
	else
		Library:Notify("Config not found!", 3)
	end
end)

ConfigGroup:AddDivider()

ConfigGroup:AddButton("Refresh Config List", function()
	SaveManager:Refresh()
	Library:Notify("Config list refreshed!", 2)
end)

ConfigGroup:AddButton("Set as Autoload", function()
	local configName = Options.ConfigName.Value
	if configName == "" then
		Library:Notify("Please enter a config name!", 3)
		return
	end
	SaveManager:SetAutoload(configName)
	Library:Notify("Config '" .. configName .. "' set as autoload!", 3)
end)

-- Theme Manager Section
local ThemeGroup = Tabs["UI Settings"]:AddLeftGroupbox("Themes")

ThemeManager:SetLibrary(Library)
SaveManager:SetLibrary(Library)

SaveManager:IgnoreThemeSettings()
SaveManager:SetIgnoreIndexes({ 
	"MenuKeybind",
	"ConfigName",
	"ConfigList",
	"ThemeList"
})

ThemeManager:SetFolder("RivalsCheat")
SaveManager:SetFolder("RivalsCheat/configs")

ThemeManager:ApplyToTab(Tabs["UI Settings"])

-- Auto-save interval
task.spawn(function()
	while true do
		task.wait(300)
		if SaveManager.Autoload then
			SaveManager:Save(SaveManager.Autoload)
		end
	end
end)

-- Load autoload config on startup
SaveManager:LoadAutoloadConfig()

-- Proper cleanup on unload
Library:OnUnload(function()
	print("Unloading Rivals Cheat...")
	
	-- Disconnect all connections
	for name, conn in pairs(connections) do
		pcall(function()
			if name == "Aimbot" then
				RunService:UnbindFromRenderStep("Aimbot")
			elseif type(conn) == "table" and conn.Disconnect then
				conn:Disconnect()
			end
		end)
	end
	connections = {}
	
	-- Clean up all ESP
	for player in pairs(espBoxes) do
		cleanupPlayerESP(player)
	end
	
	-- Clean up FOV circle
	pcall(function() fovCircle:Remove() end)
	
	-- Reset physics
	if flyBodyVelocity then flyBodyVelocity:Destroy() end
	Workspace.Gravity = 196.2
	
	-- Reset camera settings
	if originalCameraType then
		LocalPlayer.CameraMode = originalCameraType
	else
		LocalPlayer.CameraMode = Enum.CameraMode.Classic
	end
	
	if originalMaxZoom then
		LocalPlayer.CameraMaxZoomDistance = originalMaxZoom
	else
		LocalPlayer.CameraMaxZoomDistance = 128
	end
	
	if originalMinZoom then
		LocalPlayer.CameraMinZoomDistance = originalMinZoom
	else
		LocalPlayer.CameraMinZoomDistance = 0.5
	end
	
	-- Reset humanoid
	pcall(function()
		local humanoid = getHumanoid()
		if humanoid then
			humanoid.WalkSpeed = 16
			humanoid.JumpPower = 50
		end
	end)
	
	-- Disconnect infinite jump
	if infJumpConnection then infJumpConnection:Disconnect() end
	
	-- Reset lighting
	pcall(function()
		local lighting = game:GetService("Lighting")
		lighting.GlobalShadows = true
		lighting.Brightness = 1
		settings().Rendering.QualityLevel = Enum.QualityLevel.Automatic
	end)
	
	Library:Notify("Script unloaded successfully!", 3)
end)

-- Startup notification
Library:Notify("Rivals Cheat v2.0 Loaded!\nAll features optimized and fixed.", 5)
▶ Script Video
🎮 Similar Scripts
💬 Comments (0)
Login to post a comment
No comments yet. Be the first!
Script Info
Game RIVALS
TypeKeyless
Authoralexriderr
Views26
Likes0
PublishedApr 25, 2026
🎮 Play Game on Roblox
🕐 Recent Scripts
KEYLESS Best Script for 99 Nights in the Forest
KEYLESS Best Script for 99 Nights in the Forest
99 Nights in the Forest • 👁 18
Keyless
Roblox ,Script 99 Nights in the Forest by the darkness
Roblox ,Script 99 Nights in the Forest by the darkness
99 Nights in the Forest • 👁 19
Keyless
Roblox Anti AFK script
Roblox Anti AFK script
Universal • 👁 4
Keyless
Rivals Aimbot ESP Script by Soluna
Rivals Aimbot ESP Script by Soluna
RIVALS • 👁 8
Keyless
Hubris Hub Bizarre Lineage Target all mobs
Hubris Hub Bizarre Lineage Target all mobs
Bizarre Lineage • 👁 48
Keyless