Basic but good script for rivals 2.0

Velibit · June 02, 2025
local Rayfield = loadstring(game:HttpGet('https://[Log in to view URL]'))()

local Window = Rayfield:CreateWindow({
   Name = "Velebit's menu",
   LoadingTitle = "Credits to Rayfield for GUI",
   LoadingSubtitle = "by Velebit",
   Theme = "Default",
   ToggleUIKeybind = "K",
   ConfigurationSaving = {
      Enabled = true,
      FileName = "Big Hub"
   },
   KeySystem = true,
   KeySettings = {
      Title = "Enter a key",
      Subtitle = "Key System",
      Note = "The key is subscribes",
      FileName = "very_unique_place_to_store_script",
      SaveKey = true,
      GrabKeyFromSite = true,
      Key = { "https://[Log in to view URL]" }
   }
})

Rayfield:Notify({
   Title = "Script Loaded!",
   Content = "ESP + Aimbot Loaded",
   Duration = 5,
})

local MainTab = Window:CreateTab("Main", nil)

--------------------------
-- Variables / Services --
--------------------------
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local LocalPlayer = Players.LocalPlayer
local Camera = workspace.CurrentCamera

local aimPart = "Head"
local aimRadius = 200
local smoothing = 4

local aimbotToggled = false
local espToggled = false
local espObjects = {}

---------------------------------------
-- ESP: Skeleton + Name (Toggleable) --
---------------------------------------
local function createESP(player)
	if player == LocalPlayer or espObjects[player] then return end

	local drawings = {
		Name = Drawing.new("Text"),
		Lines = {}
	}

	drawings.Name.Size = 14
	drawings.Name.Center = true
	drawings.Name.Outline = true
	drawings.Name.Color = Color3.fromRGB(0, 255, 0)
	drawings.Name.Visible = false

	for i = 1, 5 do
		local line = Drawing.new("Line")
		line.Thickness = 2
		line.Color = Color3.fromRGB(255, 255, 255)
		line.Visible = false
		table.insert(drawings.Lines, line)
	end

	espObjects[player] = drawings
end

local function removeESP(player)
	local drawings = espObjects[player]
	if drawings then
		drawings.Name:Remove()
		for _, line in pairs(drawings.Lines) do
			line:Remove()
		end
		espObjects[player] = nil
	end
end

RunService.RenderStepped:Connect(function()
	for _, player in pairs(Players:GetPlayers()) do
		if player ~= LocalPlayer and player.Character and player.Character:FindFirstChild("Head") then
			if espToggled then
				createESP(player)
				local drawings = espObjects[player]
				local character = player.Character

				-- Update Name
				local head = character:FindFirstChild("Head")
				if head then
					local pos, onScreen = Camera:WorldToViewportPoint(head.Position + Vector3.new(0, 1.5, 0))
					drawings.Name.Text = player.Name
					drawings.Name.Position = Vector2.new(pos.X, pos.Y)
					drawings.Name.Visible = onScreen
				else
					drawings.Name.Visible = false
				end

				-- Skeleton
				local parts = {
					character:FindFirstChild("Head"),
					character:FindFirstChild("Torso") or character:FindFirstChild("UpperTorso"),
					character:FindFirstChild("Left Arm") or character:FindFirstChild("LeftUpperArm"),
					character:FindFirstChild("Right Arm") or character:FindFirstChild("RightUpperArm"),
					character:FindFirstChild("Left Leg") or character:FindFirstChild("LeftUpperLeg"),
					character:FindFirstChild("Right Leg") or character:FindFirstChild("RightUpperLeg")
				}
				local lines = {
					{1, 2}, {2, 3}, {2, 4}, {2, 5}, {2, 6}
				}
				for i, conn in ipairs(lines) do
					local a, b = parts[conn[1]], parts[conn[2]]
					if a and b then
						local a2D, aOn = Camera:WorldToViewportPoint(a.Position)
						local b2D, bOn = Camera:WorldToViewportPoint(b.Position)
						if aOn and bOn then
							local line = drawings.Lines[i]
							line.From = Vector2.new(a2D.X, a2D.Y)
							line.To = Vector2.new(b2D.X, b2D.Y)
							line.Visible = true
						else
							drawings.Lines[i].Visible = false
						end
					else
						drawings.Lines[i].Visible = false
					end
				end
			else
				removeESP(player)
			end
		end
	end
end)

Players.PlayerRemoving:Connect(removeESP)

---------------------------------------
-- Aimbot Function (Mousemoverel)    --
---------------------------------------
local function getClosestPlayer()
	local mousePos = UserInputService:GetMouseLocation()
	local closest, shortest = nil, aimRadius

	for _, player in ipairs(Players:GetPlayers()) do
		if player ~= LocalPlayer and player.Character and player.Character:FindFirstChild(aimPart) then
			local part = player.Character[aimPart]
			local pos, visible = Camera:WorldToViewportPoint(part.Position)
			if visible then
				local dist = (Vector2.new(pos.X, pos.Y) - Vector2.new(mousePos.X, mousePos.Y)).Magnitude
				if dist < shortest then
					closest, shortest = part, dist
				end
			end
		end
	end

	return closest
end

RunService.RenderStepped:Connect(function()
	if aimbotToggled then
		local target = getClosestPlayer()
		if target then
			local mousePos = UserInputService:GetMouseLocation()
			local targetScreenPos = Camera:WorldToViewportPoint(target.Position)
			local delta = Vector2.new(targetScreenPos.X, targetScreenPos.Y) - Vector2.new(mousePos.X, mousePos.Y)
			mousemoverel(delta.X / smoothing, delta.Y / smoothing)
		end
	end
end)

-- Keybind toggle for aimbot (E)
UserInputService.InputBegan:Connect(function(input, processed)
	if not processed and input.KeyCode == Enum.KeyCode.E then
		aimbotToggled = not aimbotToggled
		Rayfield:Notify({
			Title = "Aimbot Keybind",
			Content = aimbotToggled and "Aimbot Enabled" or "Aimbot Disabled",
			Duration = 3,
		})
	end
end)

--------------------------
-- Rayfield UI Toggles --
--------------------------
MainTab:CreateToggle({
	Name = "ESP (Name + Skeleton)",
	CurrentValue = false,
	Flag = "ESPToggle",
	Callback = function(Value)
		espToggled = Value
	end
})

MainTab:CreateToggle({
	Name = "Aimbot (E to toggle)",
	CurrentValue = false,
	Flag = "AimbotToggle",
	Callback = function(Value)
		aimbotToggled = Value
	end
})
Output

Comments

Please sign up or log in to contribute to the discussion.