M
Description
new update are comming soon stay toon
GAMERIVALS [❄️FREEZE RAY❄️]
UPDATEDOct 10, 2026
ACCESSKeyless
PLATFORMDesktop
Script source Luau
-- [[ BloxScripts Risk Notice ]]
-- This script has not been verified by BloxScripts.fun. 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 BloxScripts Risk Notice ]]
--[[
EXPERIMENTAL
Client-side only. Aimbot works by steering the real camera, which is what
RIVALS reads for shots. Nothing here fakes remotes or replicates server state.
UI: Matcha | Bigger | Brighter | RightShift toggle
]]
local UILibrary = {}
local Players = game:GetService("Players")
local TweenService = game:GetService("TweenService")
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local CoreGui = game:GetService("CoreGui")
-- Matcha Theme - Bright & Visible
local Theme = {
Background = Color3.fromRGB(35, 35, 40),
Panel = Color3.fromRGB(50, 50, 55),
PanelDeep = Color3.fromRGB(35, 35, 40),
Stroke = Color3.fromRGB(90, 90, 100),
Accent = Color3.fromRGB(255, 60, 60),
Text = Color3.fromRGB(255, 255, 255),
TextDim = Color3.fromRGB(200, 200, 200)
}
-- Keybind System
local keybinds = {}
local mainScreenGui = nil
-- Simple Utility Functions
local function RoundCorners(frame, radius)
local corner = Instance.new("UICorner")
corner.CornerRadius = UDim.new(0, radius or 6)
corner.Parent = frame
return corner
end
local function AddStroke(frame, color, thickness)
local stroke = Instance.new("UIStroke")
stroke.Color = color or Theme.Stroke
stroke.Thickness = thickness or 1
stroke.Parent = frame
return stroke
end
-- Simple Components
local Components = {}
function Components:CreateButton(parent, text, callback)
local button = Instance.new("TextButton")
button.Size = UDim2.new(1, 0, 0, 24)
button.BackgroundColor3 = Theme.Accent
button.Text = text or "Button"
button.TextColor3 = Theme.Text
button.TextSize = 12
button.Font = Enum.Font.Gotham
button.BorderSizePixel = 0
button.Parent = parent
RoundCorners(button, 6)
if callback then
button.MouseButton1Click:Connect(callback)
end
return button
end
function Components:CreateToggle(parent, text, default, callback)
local frame = Instance.new("Frame")
frame.Size = UDim2.new(1, 0, 0, 24)
frame.BackgroundColor3 = Theme.Panel
frame.BorderSizePixel = 0
frame.Parent = parent
RoundCorners(frame, 6)
AddStroke(frame, Theme.Stroke)
local label = Instance.new("TextLabel")
label.Size = UDim2.new(1, -44, 1, 0)
label.Position = UDim2.new(0, 8, 0, 0)
label.BackgroundTransparency = 1
label.Text = text or "Toggle"
label.TextColor3 = Theme.Text
label.TextSize = 12
label.TextXAlignment = Enum.TextXAlignment.Left
label.Font = Enum.Font.Gotham
label.Parent = frame
local toggle = Instance.new("TextButton")
toggle.Size = UDim2.new(0, 34, 0, 18)
toggle.Position = UDim2.new(1, -38, 0.5, -9)
toggle.BackgroundColor3 = default and Theme.Accent or Theme.PanelDeep
toggle.Text = ""
toggle.BorderSizePixel = 0
toggle.Parent = frame
RoundCorners(toggle, 9)
local indicator = Instance.new("Frame")
indicator.Size = UDim2.new(0, 12, 0, 12)
indicator.Position = default and UDim2.new(1, -15, 0.5, -6) or UDim2.new(0, 3, 0.5, -6)
indicator.BackgroundColor3 = Theme.Text
indicator.BorderSizePixel = 0
indicator.Parent = toggle
RoundCorners(indicator, 6)
local isToggled = default or false
toggle.MouseButton1Click:Connect(function()
isToggled = not isToggled
toggle.BackgroundColor3 = isToggled and Theme.Accent or Theme.PanelDeep
indicator.Position = isToggled and UDim2.new(1, -15, 0.5, -6) or UDim2.new(0, 3, 0.5, -6)
if callback then
callback(isToggled)
end
end)
return frame
end
function Components:CreateSlider(parent, text, min, max, default, callback)
local frame = Instance.new("Frame")
frame.Size = UDim2.new(1, 0, 0, 36)
frame.BackgroundColor3 = Theme.Panel
frame.BorderSizePixel = 0
frame.Parent = parent
RoundCorners(frame, 6)
AddStroke(frame, Theme.Stroke)
local label = Instance.new("TextLabel")
label.Size = UDim2.new(0.6, 0, 0, 16)
label.Position = UDim2.new(0, 8, 0, 4)
label.BackgroundTransparency = 1
label.Text = text or "Slider"
label.TextColor3 = Theme.Text
label.TextSize = 12
label.TextXAlignment = Enum.TextXAlignment.Left
label.Font = Enum.Font.Gotham
label.Parent = frame
local valueLabel = Instance.new("TextLabel")
valueLabel.Size = UDim2.new(0.4, -8, 0, 16)
valueLabel.Position = UDim2.new(0.6, 0, 0, 4)
valueLabel.BackgroundTransparency = 1
valueLabel.Text = tostring(default or min)
valueLabel.TextColor3 = Theme.TextDim
valueLabel.TextSize = 11
valueLabel.TextXAlignment = Enum.TextXAlignment.Right
valueLabel.Font = Enum.Font.Gotham
valueLabel.Parent = frame
local sliderBar = Instance.new("Frame")
sliderBar.Size = UDim2.new(1, -16, 0, 6)
sliderBar.Position = UDim2.new(0, 8, 1, -12)
sliderBar.BackgroundColor3 = Theme.PanelDeep
sliderBar.BorderSizePixel = 0
sliderBar.Parent = frame
RoundCorners(sliderBar, 3)
local fill = Instance.new("Frame")
fill.Size = UDim2.new((default - min) / (max - min), 0, 1, 0)
fill.BackgroundColor3 = Theme.Accent
fill.BorderSizePixel = 0
fill.Parent = sliderBar
RoundCorners(fill, 3)
local knob = Instance.new("TextButton")
knob.Size = UDim2.new(0, 10, 0, 10)
knob.Position = UDim2.new((default - min) / (max - min), -5, 0.5, -5)
knob.BackgroundColor3 = Theme.Text
knob.Text = ""
knob.BorderSizePixel = 0
knob.Parent = sliderBar
RoundCorners(knob, 5)
local currentValue = default or min
local dragging = false
local function updateSlider(x)
local relativeX = math.clamp((x - sliderBar.AbsolutePosition.X) / sliderBar.AbsoluteSize.X, 0, 1)
currentValue = min + (max - min) * relativeX
currentValue = math.floor(currentValue * 100) / 100
knob.Position = UDim2.new(relativeX, -5, 0.5, -5)
fill.Size = UDim2.new(relativeX, 0, 1, 0)
valueLabel.Text = tostring(currentValue)
if callback then
callback(currentValue)
end
end
knob.MouseButton1Down:Connect(function()
dragging = true
end)
UserInputService.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
dragging = false
end
end)
UserInputService.InputChanged:Connect(function(input)
if dragging and input.UserInputType == Enum.UserInputType.MouseMovement then
updateSlider(input.Position.X)
end
end)
sliderBar.InputBegan:Connect(function()
updateSlider(UserInputService:GetMouseLocation().X)
end)
return frame
end
function Components:CreateDropdown(parent, text, options, callback)
local frame = Instance.new("Frame")
frame.Size = UDim2.new(1, 0, 0, 24)
frame.BackgroundColor3 = Theme.Panel
frame.BorderSizePixel = 0
frame.Parent = parent
RoundCorners(frame, 6)
AddStroke(frame, Theme.Stroke)
local button = Instance.new("TextButton")
button.Size = UDim2.new(1, -24, 1, 0)
button.Position = UDim2.new(0, 8, 0, 0)
button.BackgroundTransparency = 1
button.Text = text or "Select"
button.TextColor3 = Theme.Text
button.TextSize = 12
button.TextXAlignment = Enum.TextXAlignment.Left
button.Font = Enum.Font.Gotham
button.Parent = frame
local arrow = Instance.new("TextLabel")
arrow.Size = UDim2.new(0, 16, 1, 0)
arrow.Position = UDim2.new(1, -20, 0, 0)
arrow.BackgroundTransparency = 1
arrow.Text = "v"
arrow.TextColor3 = Theme.TextDim
arrow.TextSize = 10
arrow.Font = Enum.Font.Gotham
arrow.Parent = frame
local list = Instance.new("Frame")
list.Size = UDim2.new(1, 0, 0, 0)
list.Position = UDim2.new(0, 0, 1, 2)
list.BackgroundColor3 = Theme.Panel
list.BorderSizePixel = 0
list.Visible = false
list.ZIndex = 10
list.Parent = frame
RoundCorners(list, 6)
AddStroke(list, Theme.Stroke)
local listLayout = Instance.new("UIListLayout")
listLayout.SortOrder = Enum.SortOrder.LayoutOrder
listLayout.Parent = list
for i, option in ipairs(options) do
local optionButton = Instance.new("TextButton")
optionButton.Size = UDim2.new(1, 0, 0, 22)
optionButton.BackgroundColor3 = Theme.Panel
optionButton.Text = option
optionButton.TextColor3 = Theme.Text
optionButton.TextSize = 11
optionButton.TextXAlignment = Enum.TextXAlignment.Left
optionButton.Font = Enum.Font.Gotham
optionButton.BorderSizePixel = 0
optionButton.Parent = list
local optionPadding = Instance.new("UIPadding")
optionPadding.PaddingLeft = UDim.new(0, 8)
optionPadding.Parent = optionButton
optionButton.MouseButton1Click:Connect(function()
button.Text = option
list.Visible = false
list.Size = UDim2.new(1, 0, 0, 0)
if callback then
callback(option, i)
end
end)
end
local isOpen = false
button.MouseButton1Click:Connect(function()
isOpen = not isOpen
list.Visible = isOpen
if isOpen then
list.Size = UDim2.new(1, 0, 0, #options * 22)
else
list.Size = UDim2.new(1, 0, 0, 0)
end
end)
return frame
end
function Components:CreateTextBox(parent, placeholder, callback)
local frame = Instance.new("Frame")
frame.Size = UDim2.new(1, 0, 0, 24)
frame.BackgroundColor3 = Theme.Panel
frame.BorderSizePixel = 0
frame.Parent = parent
RoundCorners(frame, 6)
AddStroke(frame, Theme.Stroke)
local textBox = Instance.new("TextBox")
textBox.Size = UDim2.new(1, -16, 1, 0)
textBox.Position = UDim2.new(0, 8, 0, 0)
textBox.BackgroundTransparency = 1
textBox.Text = ""
textBox.PlaceholderText = placeholder or "Enter text"
textBox.TextColor3 = Theme.Text
textBox.PlaceholderColor3 = Theme.TextDim
textBox.TextSize = 12
textBox.TextXAlignment = Enum.TextXAlignment.Left
textBox.Font = Enum.Font.Gotham
textBox.ClearTextOnFocus = false
textBox.Parent = frame
if callback then
textBox.FocusLost:Connect(function()
callback(textBox.Text)
end)
end
return frame
end
function Components:CreateKeybind(parent, text, default, callback)
local frame = Instance.new("Frame")
frame.Size = UDim2.new(1, 0, 0, 24)
frame.BackgroundColor3 = Theme.Panel
frame.BorderSizePixel = 0
frame.Parent = parent
RoundCorners(frame, 6)
AddStroke(frame, Theme.Stroke)
local label = Instance.new("TextLabel")
label.Size = UDim2.new(1, -60, 1, 0)
label.Position = UDim2.new(0, 8, 0, 0)
label.BackgroundTransparency = 1
label.Text = text or "Keybind"
label.TextColor3 = Theme.Text
label.TextSize = 12
label.TextXAlignment = Enum.TextXAlignment.Left
label.Font = Enum.Font.Gotham
label.Parent = frame
local keyButton = Instance.new("TextButton")
keyButton.Size = UDim2.new(0, 50, 0, 16)
keyButton.Position = UDim2.new(1, -54, 0.5, -8)
keyButton.BackgroundColor3 = Theme.PanelDeep
keyButton.Text = default or "None"
keyButton.TextColor3 = Theme.Text
keyButton.TextSize = 10
keyButton.Font = Enum.Font.GothamBold
keyButton.BorderSizePixel = 0
keyButton.Parent = frame
RoundCorners(keyButton, 4)
AddStroke(keyButton, Theme.Stroke)
local currentKey = default
local binding = false
keyButton.MouseButton1Click:Connect(function()
if binding then return end
binding = true
keyButton.Text = "..."
local connection
connection = UserInputService.InputBegan:Connect(function(input)
local keyName = input.KeyCode.Name
if keyName ~= "Unknown" then
currentKey = keyName
keyButton.Text = keyName
binding = false
connection:Disconnect()
if callback then
callback(keyName)
end
if text then
keybinds[keyName] = {callback = callback, description = text}
end
end
end)
end)
return frame
end
function Components:CreateLabel(parent, text, color)
local label = Instance.new("TextLabel")
label.Size = UDim2.new(1, 0, 0, 20)
label.BackgroundTransparency = 1
label.Text = text or "Label"
label.TextColor3 = color or Theme.Text
label.TextSize = 12
label.TextXAlignment = Enum.TextXAlignment.Left
label.Font = Enum.Font.Gotham
label.Parent = parent
return label
end
-- Snow System (Simple)
local function CreateSnowflake(parent)
local snowflake = Instance.new("Frame")
snowflake.Size = UDim2.new(0, 4, 0, 4)
snowflake.Position = UDim2.new(math.random() * 1, 0, 0, -10)
snowflake.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
snowflake.BackgroundTransparency = 0.5
snowflake.BorderSizePixel = 0
snowflake.Parent = parent
RoundCorners(snowflake, 2)
spawn(function()
local startPos = snowflake.Position
local endPos = UDim2.new(startPos.X.Scale, startPos.X.Offset, 1.1, 0)
for i = 1, 100 do
local alpha = i / 100
snowflake.Position = startPos:lerp(endPos, alpha)
wait(0.1)
end
snowflake:Destroy()
end)
end
local function StartSnow(parent)
spawn(function()
while parent.Parent do
CreateSnowflake(parent)
wait(math.random() * 2)
end
end)
end
-- Utility Functions
local function ShowKeybindList()
local gui = Instance.new("ScreenGui")
gui.Name = "KeybindList"
gui.ResetOnSpawn = false
local success = pcall(function()
gui.Parent = CoreGui
end)
if not success then
gui.Parent = Players.LocalPlayer:WaitForChild("PlayerGui")
end
local frame = Instance.new("Frame")
frame.Size = UDim2.new(0, 300, 0, 400)
frame.Position = UDim2.new(0.5, -150, 0.5, -200)
frame.BackgroundColor3 = Theme.Background
frame.BorderSizePixel = 0
frame.Active = true
frame.Draggable = true
frame.Parent = gui
RoundCorners(frame, 6)
AddStroke(frame, Theme.Stroke)
local titleBar = Instance.new("Frame")
titleBar.Size = UDim2.new(1, 0, 0, 32)
titleBar.BackgroundColor3 = Theme.Panel
titleBar.BorderSizePixel = 0
titleBar.Parent = frame
RoundCorners(titleBar, 6)
local title = Instance.new("TextLabel")
title.Size = UDim2.new(1, -32, 1, 0)
title.Position = UDim2.new(0, 12, 0, 0)
title.BackgroundTransparency = 1
title.Text = "Keybinds"
title.TextColor3 = Theme.Text
title.TextSize = 13
title.TextXAlignment = Enum.TextXAlignment.Left
title.Font = Enum.Font.GothamBold
title.Parent = titleBar
local closeBtn = Instance.new("TextButton")
closeBtn.Size = UDim2.new(0, 24, 0, 24)
closeBtn.Position = UDim2.new(1, -28, 0, 4)
closeBtn.BackgroundColor3 = Theme.PanelDeep
closeBtn.Text = "X"
closeBtn.TextColor3 = Theme.Text
closeBtn.TextSize = 10
closeBtn.Font = Enum.Font.GothamBold
closeBtn.BorderSizePixel = 0
closeBtn.Parent = titleBar
RoundCorners(closeBtn, 4)
closeBtn.MouseButton1Click:Connect(function()
gui:Destroy()
end)
local content = Instance.new("ScrollingFrame")
content.Size = UDim2.new(1, -12, 1, -44)
content.Position = UDim2.new(0, 6, 0, 38)
content.BackgroundColor3 = Theme.PanelDeep
content.BorderSizePixel = 0
content.ScrollBarThickness = 4
content.ScrollBarImageColor3 = Theme.Accent
content.CanvasSize = UDim2.new(0, 0, 0, 0)
content.AutomaticCanvasSize = Enum.AutomaticSize.Y
content.Parent = frame
RoundCorners(content, 6)
local listLayout = Instance.new("UIListLayout")
listLayout.Padding = UDim.new(0, 2)
listLayout.Parent = content
local padding = Instance.new("UIPadding")
padding.PaddingTop = UDim.new(0, 6)
padding.PaddingLeft = UDim.new(0, 6)
padding.PaddingRight = UDim.new(0, 6)
padding.PaddingBottom = UDim.new(0, 6)
padding.Parent = content
for key, data in pairs(keybinds) do
local item = Instance.new("Frame")
item.Size = UDim2.new(1, 0, 0, 24)
item.BackgroundColor3 = Theme.Panel
item.BorderSizePixel = 0
item.Parent = content
RoundCorners(item, 4)
local keyLabel = Instance.new("TextLabel")
keyLabel.Size = UDim2.new(0, 40, 1, 0)
keyLabel.Position = UDim2.new(0, 6, 0, 0)
keyLabel.BackgroundColor3 = Theme.Accent
keyLabel.Text = key
keyLabel.TextColor3 = Theme.Text
keyLabel.TextSize = 10
keyLabel.Font = Enum.Font.GothamBold
keyLabel.BorderSizePixel = 0
keyLabel.Parent = item
RoundCorners(keyLabel, 3)
local desc = Instance.new("TextLabel")
desc.Size = UDim2.new(1, -52, 1, 0)
desc.Position = UDim2.new(0, 50, 0, 0)
desc.BackgroundTransparency = 1
desc.Text = data.description
desc.TextColor3 = Theme.TextDim
desc.TextSize = 11
desc.TextXAlignment = Enum.TextXAlignment.Left
desc.Font = Enum.Font.Gotham
desc.Parent = item
end
end
local function CreateDexExplorer()
local gui = Instance.new("ScreenGui")
gui.Name = "DexExplorer"
gui.ResetOnSpawn = false
local success = pcall(function()
gui.Parent = CoreGui
end)
if not success then
gui.Parent = Players.LocalPlayer:WaitForChild("PlayerGui")
end
local frame = Instance.new("Frame")
frame.Size = UDim2.new(0, 350, 0, 450)
frame.Position = UDim2.new(0.5, -175, 0.5, -225)
frame.BackgroundColor3 = Theme.Background
frame.BorderSizePixel = 0
frame.Active = true
frame.Draggable = true
frame.Parent = gui
RoundCorners(frame, 6)
AddStroke(frame, Theme.Stroke)
local titleBar = Instance.new("Frame")
titleBar.Size = UDim2.new(1, 0, 0, 32)
titleBar.BackgroundColor3 = Theme.Panel
titleBar.BorderSizePixel = 0
titleBar.Parent = frame
RoundCorners(titleBar, 6)
local title = Instance.new("TextLabel")
title.Size = UDim2.new(1, -32, 1, 0)
title.Position = UDim2.new(0, 12, 0, 0)
title.BackgroundTransparency = 1
title.Text = "Explorer"
title.TextColor3 = Theme.Text
title.TextSize = 13
title.TextXAlignment = Enum.TextXAlignment.Left
title.Font = Enum.Font.GothamBold
title.Parent = titleBar
local closeBtn = Instance.new("TextButton")
closeBtn.Size = UDim2.new(0, 24, 0, 24)
closeBtn.Position = UDim2.new(1, -28, 0, 4)
closeBtn.BackgroundColor3 = Theme.PanelDeep
closeBtn.Text = "X"
closeBtn.TextColor3 = Theme.Text
closeBtn.TextSize = 10
closeBtn.Font = Enum.Font.GothamBold
closeBtn.BorderSizePixel = 0
closeBtn.Parent = titleBar
RoundCorners(closeBtn, 4)
closeBtn.MouseButton1Click:Connect(function()
gui:Destroy()
end)
local content = Instance.new("ScrollingFrame")
content.Size = UDim2.new(1, -12, 1, -44)
content.Position = UDim2.new(0, 6, 0, 38)
content.BackgroundColor3 = Theme.PanelDeep
content.BorderSizePixel = 0
content.ScrollBarThickness = 4
content.ScrollBarImageColor3 = Theme.Accent
content.CanvasSize = UDim2.new(0, 0, 0, 0)
content.AutomaticCanvasSize = Enum.AutomaticSize.Y
content.Parent = frame
RoundCorners(content, 6)
local layout = Instance.new("UIListLayout")
layout.Padding = UDim.new(0, 1)
layout.Parent = content
local services = {"Workspace", "Players", "Lighting", "ReplicatedStorage", "StarterGui"}
for _, service in ipairs(services) do
local item = Instance.new("TextButton")
item.Size = UDim2.new(1, 0, 0, 22)
item.BackgroundColor3 = Theme.Panel
item.Text = service
item.TextColor3 = Theme.Text
item.TextSize = 11
item.TextXAlignment = Enum.TextXAlignment.Left
item.Font = Enum.Font.Gotham
item.BorderSizePixel = 0
item.Parent = content
local itemPadding = Instance.new("UIPadding")
itemPadding.PaddingLeft = UDim.new(0, 8)
itemPadding.Parent = item
end
end
local function SelfDestruct()
if mainScreenGui then
mainScreenGui:Destroy()
end
end
-- Main Library
function UILibrary:CreateWindow(title, options)
options = options or {}
local window = {}
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "UILibraryGUI"
screenGui.ResetOnSpawn = false
screenGui.IgnoreGuiInset = true
screenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
local pg = game:GetService("Players").LocalPlayer:WaitForChild("PlayerGui")
pcall(function() screenGui.Parent = pg end)
print("[RIVALS] UI loaded. Press RightShift to toggle.")
mainScreenGui = screenGui
-- Snow Background (disabled)
local snowBg = Instance.new("Frame")
snowBg.Size = UDim2.new(1, 0, 1, 0)
snowBg.BackgroundTransparency = 1
snowBg.Visible = false
snowBg.Parent = screenGui
-- StartSnow(snowBg)
-- Utility Bar
local utilBar = Instance.new("Frame")
utilBar.Size = UDim2.new(0, 260, 0, 20)
utilBar.Position = UDim2.new(0.5, -130, 0, 10)
utilBar.BackgroundColor3 = Theme.Panel
utilBar.BorderSizePixel = 0
utilBar.Parent = screenGui
utilBar.Visible = true
RoundCorners(utilBar, 6)
AddStroke(utilBar, Theme.Stroke)
local utilLayout = Instance.new("UIListLayout")
utilLayout.FillDirection = Enum.FillDirection.Horizontal
utilLayout.HorizontalAlignment = Enum.HorizontalAlignment.Center
utilLayout.VerticalAlignment = Enum.VerticalAlignment.Center
utilLayout.Padding = UDim.new(0, 8)
utilLayout.Parent = utilBar
local utilButtons = {
{"CONFIG", function() print("Config") end},
{"KILL", SelfDestruct}
}
RoundCorners(utilBar, 6)
AddStroke(utilBar, Theme.Stroke)
local utilLayout = Instance.new("UIListLayout")
utilLayout.FillDirection = Enum.FillDirection.Horizontal
utilLayout.HorizontalAlignment = Enum.HorizontalAlignment.Center
utilLayout.VerticalAlignment = Enum.VerticalAlignment.Center
utilLayout.Padding = UDim.new(0, 8)
utilLayout.Parent = utilBar
local utilButtons = {
{"CONFIG", function() print("Config") end},
{"KILL", SelfDestruct}
}
for _, btnData in ipairs(utilButtons) do
local btn = Instance.new("TextButton")
btn.Size = UDim2.new(0, 44, 0, 14)
btn.BackgroundColor3 = Theme.PanelDeep
btn.Text = btnData[1]
btn.TextColor3 = Theme.TextDim
btn.TextSize = 8
btn.Font = Enum.Font.GothamBold
btn.BorderSizePixel = 0
btn.Parent = utilBar
RoundCorners(btn, 3)
btn.MouseButton1Click:Connect(btnData[2])
end
-- Main Window
local mainFrame = Instance.new("Frame")
mainFrame.Size = UDim2.new(0, options.Size and options.Size.X or 520, 0, options.Size and options.Size.Y or 560)
mainFrame.Position = UDim2.new(0.5, -260, 0.5, -280)
mainFrame.BackgroundColor3 = Theme.Background
mainFrame.BorderSizePixel = 0
mainFrame.Active = true
mainFrame.Draggable = true
mainFrame.ZIndex = 2
mainFrame.Parent = screenGui
mainFrame.Visible = true
RoundCorners(mainFrame, 6)
AddStroke(mainFrame, Theme.Stroke)
-- Title Bar
local titleBar = Instance.new("Frame")
titleBar.Size = UDim2.new(1, 0, 0, 32)
titleBar.BackgroundColor3 = Theme.Panel
titleBar.BorderSizePixel = 0
titleBar.Parent = mainFrame
RoundCorners(titleBar, 6)
local titleText = Instance.new("TextLabel")
titleText.Size = UDim2.new(1, -80, 1, 0)
titleText.Position = UDim2.new(0, 12, 0, 0)
titleText.BackgroundTransparency = 1
titleText.Text = title or "Matcha - mirko"
titleText.TextColor3 = Theme.Text
titleText.TextSize = 13
titleText.TextXAlignment = Enum.TextXAlignment.Left
titleText.Font = Enum.Font.GothamBold
titleText.Parent = titleBar
local closeButton = Instance.new("TextButton")
closeButton.Size = UDim2.new(0, 24, 0, 24)
closeButton.Position = UDim2.new(1, -28, 0, 4)
closeButton.BackgroundColor3 = Theme.PanelDeep
closeButton.Text = "X"
closeButton.TextColor3 = Theme.Text
closeButton.TextSize = 10
closeButton.Font = Enum.Font.GothamBold
closeButton.BorderSizePixel = 0
closeButton.Parent = titleBar
RoundCorners(closeButton, 4)
closeButton.MouseButton1Click:Connect(function()
screenGui:Destroy()
end)
-- Content Area
local content = Instance.new("Frame")
content.Size = UDim2.new(1, -12, 1, -44)
content.Position = UDim2.new(0, 6, 0, 38)
content.BackgroundTransparency = 1
content.Parent = mainFrame
-- Sidebar
local sidebar = Instance.new("Frame")
sidebar.Size = UDim2.new(0, 110, 1, 0)
sidebar.BackgroundColor3 = Theme.Panel
sidebar.BorderSizePixel = 0
sidebar.Parent = content
RoundCorners(sidebar, 6)
AddStroke(sidebar, Theme.Stroke)
-- Tab Content
local tabContent = Instance.new("Frame")
tabContent.Size = UDim2.new(1, -118, 1, 0)
tabContent.Position = UDim2.new(0, 118, 0, 0)
tabContent.BackgroundColor3 = Theme.PanelDeep
tabContent.BorderSizePixel = 0
tabContent.Parent = content
RoundCorners(tabContent, 6)
AddStroke(tabContent, Theme.Stroke)
local tabLayout = Instance.new("UIListLayout")
tabLayout.Padding = UDim.new(0, 2)
tabLayout.Parent = sidebar
local sidebarPadding = Instance.new("UIPadding")
sidebarPadding.PaddingTop = UDim.new(0, 8)
sidebarPadding.PaddingLeft = UDim.new(0, 8)
sidebarPadding.PaddingRight = UDim.new(0, 8)
sidebarPadding.PaddingBottom = UDim.new(0, 8)
sidebarPadding.Parent = sidebar
window.tabs = {}
window.activeTab = nil
-- Register toggle keybind
keybinds["RightShift"] = {
callback = function()
mainFrame.Visible = not mainFrame.Visible
end,
description = "Toggle UI"
}
function window:CreateTab(name)
local tab = {}
local tabButton = Instance.new("TextButton")
tabButton.Size = UDim2.new(1, 0, 0, 20)
tabButton.BackgroundColor3 = Theme.PanelDeep
tabButton.Text = name
tabButton.TextColor3 = Theme.TextDim
tabButton.TextSize = 11
tabButton.Font = Enum.Font.Gotham
tabButton.BorderSizePixel = 0
tabButton.Parent = sidebar
RoundCorners(tabButton, 4)
local tabFrame = Instance.new("ScrollingFrame")
tabFrame.Size = UDim2.new(1, 0, 1, 0)
tabFrame.BackgroundTransparency = 1
tabFrame.BorderSizePixel = 0
tabFrame.ScrollBarThickness = 4
tabFrame.ScrollBarImageColor3 = Theme.Accent
tabFrame.CanvasSize = UDim2.new(0, 0, 0, 0)
tabFrame.AutomaticCanvasSize = Enum.AutomaticSize.Y
tabFrame.Visible = false
tabFrame.Parent = tabContent
local tabLayout = Instance.new("UIListLayout")
tabLayout.Padding = UDim.new(0, 8)
tabLayout.Parent = tabFrame
local tabPadding = Instance.new("UIPadding")
tabPadding.PaddingTop = UDim.new(0, 12)
tabPadding.PaddingLeft = UDim.new(0, 12)
tabPadding.PaddingRight = UDim.new(0, 12)
tabPadding.PaddingBottom = UDim.new(0, 12)
tabPadding.Parent = tabFrame
tabButton.MouseButton1Click:Connect(function()
for _, otherTab in pairs(window.tabs) do
otherTab.frame.Visible = false
otherTab.button.BackgroundColor3 = Theme.PanelDeep
otherTab.button.TextColor3 = Theme.TextDim
end
tabFrame.Visible = true
tabButton.BackgroundColor3 = Theme.Accent
tabButton.TextColor3 = Theme.Text
window.activeTab = tab
end)
tab.button = tabButton
tab.frame = tabFrame
if #window.tabs == 0 then
tabFrame.Visible = true
tabButton.BackgroundColor3 = Theme.Accent
tabButton.TextColor3 = Theme.Text
window.activeTab = tab
end
table.insert(window.tabs, tab)
function tab:AddButton(options)
return Components:CreateButton(self.frame, options.Text, options.Callback)
end
function tab:AddToggle(options)
return Components:CreateToggle(self.frame, options.Text, options.Default, options.Callback)
end
function tab:AddSlider(options)
return Components:CreateSlider(self.frame, options.Text, options.Min, options.Max, options.Default, options.Callback)
end
function tab:AddDropdown(options)
return Components:CreateDropdown(self.frame, options.Text, options.List, options.Callback)
end
function tab:AddTextBox(options)
return Components:CreateTextBox(self.frame, options.PlaceholderText, options.Callback)
end
function tab:AddKeybind(options)
return Components:CreateKeybind(self.frame, options.Text, options.Default, options.Callback)
end
function tab:AddLabel(text, color)
return Components:CreateLabel(self.frame, text, color)
end
function tab:CreateSection(name)
local section = {}
local sectionFrame = Instance.new("Frame")
sectionFrame.Size = UDim2.new(1, 0, 0, 0)
sectionFrame.BackgroundColor3 = Theme.Panel
sectionFrame.BorderSizePixel = 0
sectionFrame.AutomaticSize = Enum.AutomaticSize.Y
sectionFrame.Parent = self.frame
RoundCorners(sectionFrame, 6)
AddStroke(sectionFrame, Theme.Stroke)
local sectionTitle = Instance.new("TextLabel")
sectionTitle.Size = UDim2.new(1, -16, 0, 24)
sectionTitle.Position = UDim2.new(0, 8, 0, 4)
sectionTitle.BackgroundTransparency = 1
sectionTitle.Text = name
sectionTitle.TextColor3 = Theme.Accent
sectionTitle.TextSize = 12
sectionTitle.TextXAlignment = Enum.TextXAlignment.Left
sectionTitle.Font = Enum.Font.GothamBold
sectionTitle.Parent = sectionFrame
local sectionContent = Instance.new("Frame")
sectionContent.Size = UDim2.new(1, -16, 0, 0)
sectionContent.Position = UDim2.new(0, 8, 0, 28)
sectionContent.BackgroundTransparency = 1
sectionContent.AutomaticSize = Enum.AutomaticSize.Y
sectionContent.Parent = sectionFrame
local sectionLayout = Instance.new("UIListLayout")
sectionLayout.Padding = UDim.new(0, 6)
sectionLayout.Parent = sectionContent
local sectionPadding = Instance.new("UIPadding")
sectionPadding.PaddingBottom = UDim.new(0, 8)
sectionPadding.Parent = sectionContent
section.content = sectionContent
function section:AddButton(options)
return Components:CreateButton(self.content, options.Text, options.Callback)
end
function section:AddToggle(options)
return Components:CreateToggle(self.content, options.Text, options.Default, options.Callback)
end
function section:AddSlider(options)
return Components:CreateSlider(self.content, options.Text, options.Min, options.Max, options.Default, options.Callback)
end
function section:AddDropdown(options)
return Components:CreateDropdown(self.content, options.Text, options.List, options.Callback)
end
function section:AddTextBox(options)
return Components:CreateTextBox(self.content, options.PlaceholderText, options.Callback)
end
function section:AddKeybind(options)
return Components:CreateKeybind(self.content, options.Text, options.Default, options.Callback)
end
function section:AddLabel(text, color)
return Components:CreateLabel(self.content, text, color)
end
return section
end
return tab
end
-- Handle keybinds
UserInputService.InputBegan:Connect(function(input, processed)
if processed then return end
local key = input.KeyCode.Name
if keybinds[key] then
keybinds[key].callback()
end
end)
return window
end
-- Expose utilities
UILibrary.ShowKeybindList = ShowKeybindList
UILibrary.CreateDexExplorer = CreateDexExplorer
UILibrary.SelfDestruct = SelfDestruct
local Window = UILibrary:CreateWindow("EXPERMENTIAL", {Size = {X = 800, Y = 700}})
--[[ RIVALS ENGINE ]]
--[[
RIVALS External Pro v2.1 (Matcha UI)
Client-side only. Aimbot works by steering the real camera, which is what
RIVALS reads for shots. Nothing here fakes remotes or replicates server state.
v2.1 (Matcha): UI switched from WindUI to Matcha UI library
]]
local RUN_KEY = "__RIVALS_XT_PRO_V2"
local lockedPlayer = nil
local lockAcquiredAt = 0
local lockNotify = false
local aimTarget = nil
local aimAcqAt = 0
-- ============================== KEY SYSTEM ==============================
local KEY_CFG = {
ENABLED = false,
VALID_KEYS = { "RIVALS-PRO" },
VALIDATOR = nil,
NOTE = "Your key was sent with your purchase (Discord DM)",
URL = "https://discord.gg/your-server",
SAVE = true,
}
local function checkKey(entered)
if KEY_CFG.VALIDATOR then
return KEY_CFG.VALIDATOR(entered)
end
for _, k in ipairs(KEY_CFG.VALID_KEYS) do
if tostring(k) == tostring(entered) then return true end
end
return false
end
-- ============================ / KEY SYSTEM =============================
local function dropOld()
local g = getgenv()
local old = rawget(g, RUN_KEY)
if old and type(old.halt) == "function" then
pcall(old.halt)
end
end
dropOld()
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local HttpService = game:GetService("HttpService")
local TeleportService = game:GetService("TeleportService")
local CoreGui = game:GetService("CoreGui")
local StarterGui = game:GetService("StarterGui")
-- ============================== CONFIG ==============================
local CFG_DIR = "RivalsExternalPro/"
local CFG_PATH = CFG_DIR .. "config.json"
local DEFAULT_S = {
Aimbot = false, Hitbox = "Head",
FOV = 90, MaxDist = 300, WallCheck = true,
Priority = "Crosshair", Sticky = true,
Smooth = 50, Humanize = 40, MaxTurn = 14,
PredictModel = "Hitscan", Lead = 100,
HeadshotOnly = true, RecoilControl = true, RecoilComp = 60, DropComp = 50,
LockEnabled = false, LockKey = "E", LockPriority = "Distance", AutoAcq = true,
ESP = false, Box = true, HealthBar = true, Name = true, Tracer = false,
Distance = false, Skeleton = true, Weapon = false, FOVCircle = false,
Highlight = true, ChamStyle = "Fill",
ESPRange = 2000, TextSize = 13, TeamCheck = true, ESPColor = "Team",
BulletTracers = false, FaceCamera = true, TracerType = "Lightning",
TracerThick = 0.2, TracerLen = 10, Measure = "Studs",
Effect = "None", Rate = 150, Wind = 0, PSize = 3,
Transp = 25, Scale = 100, CfgAutoSave = true, CfgAutoLoad = true,
}
local S = {}
for k, v in pairs(DEFAULT_S) do S[k] = v end
local function encodeConfig()
return HttpService:JSONEncode(S)
end
local function saveConfig()
local ok, err = pcall(function()
writefile(CFG_PATH, encodeConfig())
end)
if not ok then
warn("[RIVALS-External-Pro] config save failed: " .. tostring(err))
return false
end
return true
end
local function applyConfigTable(t)
for k, v in pairs(t) do
if S[k] ~= nil and type(v) == type(S[k]) then
S[k] = v
end
end
end
local function loadConfig()
if not isfile(CFG_PATH) then return false end
local ok, data = pcall(readfile, CFG_PATH)
if not ok then return false end
local ok2, t = pcall(function() return HttpService:JSONDecode(data) end)
if not ok2 or type(t) ~= "table" then return false end
if t.CfgAutoLoad ~= nil then S.CfgAutoLoad = t.CfgAutoLoad end
if t.CfgAutoSave ~= nil then S.CfgAutoSave = t.CfgAutoSave end
if S.CfgAutoLoad then
applyConfigTable(t)
end
return true
end
local function resetConfig()
for k, v in pairs(DEFAULT_S) do S[k] = v end
end
-- ============================ / CONFIG ==============================
loadConfig()
-- ============================== AIMBOT TAB ==============================
local TabAim = Window:CreateTab("Aimbot")
local SecAimGeneral = TabAim:CreateSection("General")
SecAimGeneral:AddToggle({
Text = "Aimbot",
Default = S.Aimbot,
Callback = function(v)
S.Aimbot = v
end,
})
SecAimGeneral:AddDropdown({
Text = "Aim Key",
List = { "Always", "Left Click", "Right Click", "Q", "E", "LeftShift" },
Callback = function(v)
S.AimKey = v
end,
})
SecAimGeneral:AddDropdown({
Text = "Hitbox",
List = {
"Head", "HeadSmall", "HitboxHead", "HitboxHeadSmall",
"Body", "BodySmall", "HitboxBody", "HitboxBodySmall", "PhysicalHead",
},
Callback = function(v)
S.Hitbox = v
end,
})
SecAimGeneral:AddToggle({
Text = "Visible Only",
Default = S.WallCheck,
Callback = function(v)
S.WallCheck = v
end,
})
SecAimGeneral:AddToggle({
Text = "Headshot Only",
Default = S.HeadshotOnly,
Callback = function(v)
S.HeadshotOnly = v
end,
})
local SecAimTarget = TabAim:CreateSection("Targeting")
SecAimTarget:AddSlider({
Text = "FOV",
Min = 1, Max = 360, Default = S.FOV,
Callback = function(v)
S.FOV = v
end,
})
SecAimTarget:AddSlider({
Text = "Max Distance",
Min = 10, Max = 3000, Default = S.MaxDist,
Callback = function(v)
S.MaxDist = v
end,
})
SecAimTarget:AddDropdown({
Text = "Target Priority",
List = { "Crosshair", "Nearest", "Lowest HP" },
Callback = function(v)
S.Priority = v
end,
})
SecAimTarget:AddToggle({
Text = "Sticky Target",
Default = S.Sticky,
Callback = function(v)
S.Sticky = v
end,
})
local SecAimSmooth = TabAim:CreateSection("Smoothing")
SecAimSmooth:AddSlider({
Text = "Smoothness",
Min = 0, Max = 100, Default = S.Smooth,
Callback = function(v)
S.Smooth = v
end,
})
SecAimSmooth:AddSlider({
Text = "Humanize",
Min = 0, Max = 100, Default = S.Humanize,
Callback = function(v)
S.Humanize = v
end,
})
SecAimSmooth:AddSlider({
Text = "Max Snap",
Min = 5, Max = 60, Default = S.MaxTurn,
Callback = function(v)
S.MaxTurn = v
end,
})
local SecAimRecoil = TabAim:CreateSection("Anti-Recoil")
SecAimRecoil:AddToggle({
Text = "Recoil Control",
Default = S.RecoilControl,
Callback = function(v)
S.RecoilControl = v
end,
})
SecAimRecoil:AddSlider({
Text = "Recoil Comp",
Min = 0, Max = 100, Default = S.RecoilComp,
Callback = function(v)
S.RecoilComp = v
end,
})
local SecAimPredict = TabAim:CreateSection("Prediction")
SecAimPredict:AddDropdown({
Text = "Weapon Type",
List = { "Hitscan", "Slow Projectile", "Fast Projectile" },
Callback = function(v)
S.PredictModel = v
end,
})
SecAimPredict:AddSlider({
Text = "Lead Amount",
Min = 0, Max = 100, Default = S.Lead,
Callback = function(v)
S.Lead = v
end,
})
SecAimPredict:AddSlider({
Text = "Drop Comp",
Min = 0, Max = 100, Default = S.DropComp,
Callback = function(v)
S.DropComp = v
end,
})
-- ============================== LOCK TAB ==============================
local TabLock = Window:CreateTab("Lock")
local SecLockMain = TabLock:CreateSection("Target Lock")
SecLockMain:AddToggle({
Text = "Target Lock",
Default = S.LockEnabled,
Callback = function(v)
S.LockEnabled = v
if not v then lockedPlayer = nil end
end,
})
SecLockMain:AddDropdown({
Text = "Lock Key",
List = { "E", "Q", "V", "F", "X", "LeftControl", "LeftShift" },
Callback = function(v)
S.LockKey = v
end,
})
SecLockMain:AddDropdown({
Text = "Lock Priority",
List = { "Distance", "Health" },
Callback = function(v)
S.LockPriority = v
end,
})
SecLockMain:AddToggle({
Text = "Auto Re-Acquire",
Default = S.AutoAcq,
Callback = function(v)
S.AutoAcq = v
end,
})
-- ============================== VISUALS TAB ==============================
local TabVis = Window:CreateTab("Visuals")
local SecVisSettings = TabVis:CreateSection("Settings")
SecVisSettings:AddSlider({
Text = "Distance",
Min = 200, Max = 3000, Default = S.ESPRange,
Callback = function(v)
S.ESPRange = v
end,
})
SecVisSettings:AddDropdown({
Text = "Preferred Measurement",
List = { "Studs", "Meters" },
Callback = function(v)
S.Measure = v
end,
})
SecVisSettings:AddToggle({
Text = "ESP",
Default = S.ESP,
Callback = function(v)
S.ESP = v
end,
})
SecVisSettings:AddToggle({
Text = "Team Check",
Default = S.TeamCheck,
Callback = function(v)
S.TeamCheck = v
end,
})
local SecVisTracers = TabVis:CreateSection("Bullet Tracers")
SecVisTracers:AddToggle({
Text = "Bullet Tracers",
Default = S.BulletTracers,
Callback = function(v)
S.BulletTracers = v
end,
})
SecVisTracers:AddToggle({
Text = "Face Camera",
Default = S.FaceCamera,
Callback = function(v)
S.FaceCamera = v
end,
})
SecVisTracers:AddDropdown({
Text = "Type",
List = { "Lightning", "Beam", "Line" },
Callback = function(v)
S.TracerType = v
end,
})
SecVisTracers:AddSlider({
Text = "Thickness",
Min = 0.1, Max = 1, Default = S.TracerThick,
Callback = function(v)
S.TracerThick = v
end,
})
local SecVisHealth = TabVis:CreateSection("Health Bars")
SecVisHealth:AddToggle({
Text = "Health Bars",
Default = S.HealthBar,
Callback = function(v)
S.HealthBar = v
end,
})
local SecVisInfo = TabVis:CreateSection("Player Info")
SecVisInfo:AddToggle({
Text = "Display Name",
Default = S.Name,
Callback = function(v)
S.Name = v
end,
})
SecVisInfo:AddToggle({
Text = "Active Weapon",
Default = S.Weapon,
Callback = function(v)
S.Weapon = v
end,
})
SecVisInfo:AddToggle({
Text = "Distance",
Default = S.Distance,
Callback = function(v)
S.Distance = v
end,
})
local SecVisViewTracer = TabVis:CreateSection("View Tracer")
SecVisViewTracer:AddToggle({
Text = "View Tracer",
Default = S.Tracer,
Callback = function(v)
S.Tracer = v
end,
})
SecVisViewTracer:AddSlider({
Text = "Tracer Length",
Min = 1, Max = 50, Default = S.TracerLen,
Callback = function(v)
S.TracerLen = v
end,
})
SecVisChams = TabVis:CreateSection("Chams")
SecVisChams:AddToggle({
Text = "Visible Chams",
Default = S.Highlight,
Callback = function(v)
S.Highlight = v
end,
})
SecVisChams:AddDropdown({
Text = "Cham Style",
List = { "Fill", "Outline", "Fill + Outline" },
Callback = function(v)
S.ChamStyle = v
end,
})
local SecVisOther = TabVis:CreateSection("Other")
SecVisOther:AddToggle({
Text = "Box",
Default = S.Box,
Callback = function(v)
S.Box = v
end,
})
SecVisOther:AddToggle({
Text = "Skeleton",
Default = S.Skeleton,
Callback = function(v)
S.Skeleton = v
end,
})
SecVisOther:AddToggle({
Text = "FOV Circle",
Default = S.FOVCircle,
Callback = function(v)
S.FOVCircle = v
end,
})
SecVisOther:AddSlider({
Text = "Text Size",
Min = 10, Max = 24, Default = S.TextSize,
Callback = function(v)
S.TextSize = v
end,
})
SecVisOther:AddDropdown({
Text = "ESP Color",
List = { "Team", "Red", "Orange", "Yellow", "Green", "Cyan", "Blue", "Purple", "Pink", "White", "Rainbow" },
Callback = function(v)
S.ESPColor = v
end,
})
-- ============================== WEATHER TAB ==============================
local TabWx = Window:CreateTab("Weather")
local SecWxMain = TabWx:CreateSection("Weather")
SecWxMain:AddDropdown({
Text = "Effect",
List = { "None", "Rain", "Snow", "Storm" },
Callback = function(v)
S.Effect = v
end,
})
SecWxMain:AddSlider({
Text = "Rate",
Min = 10, Max = 500, Default = S.Rate,
Callback = function(v)
S.Rate = v
end,
})
SecWxMain:AddSlider({
Text = "Wind",
Min = -80, Max = 80, Default = S.Wind,
Callback = function(v)
S.Wind = v
end,
})
SecWxMain:AddSlider({
Text = "Particle Size",
Min = 1, Max = 8, Default = S.PSize,
Callback = function(v)
S.PSize = v
end,
})
-- ============================== SERVERS TAB ==============================
local TabSrv = Window:CreateTab("Servers")
local SecSrvFinder = TabSrv:CreateSection("Server Finder")
SecSrvFinder:AddButton({
Text = "Refresh Server List",
Callback = function()
local ok, res = pcall(fetchServers)
if not ok then return end
serverList = res
buildServerDropdown()
end,
})
SecSrvFinder:AddButton({
Text = "Join Selected",
Callback = function()
if not serverSelected then refreshServers(true) end
hopTo(serverSelected)
end,
})
SecSrvFinder:AddButton({
Text = "Hop - Lowest Ping",
Callback = function()
hopStrategy(function(s, b) return (s.ping or 9999) < (b.ping or 9999) end)
end,
})
SecSrvFinder:AddButton({
Text = "Hop - Fewest Players",
Callback = function()
hopStrategy(function(s, b) return (s.playing or 0) < (b.playing or 0) end)
end,
})
SecSrvFinder:AddButton({
Text = "Random Hop",
Callback = function()
randomHop()
end,
})
SecSrvFinder:AddButton({
Text = "Rejoin Same Server",
Callback = function()
hopTo(game.JobId, true)
end,
})
SecSrvFinder:AddButton({
Text = "Copy Job ID",
Callback = function()
if setclipboard then
pcall(setclipboard, game.JobId)
end
end,
})
local serverList = {}
local serverLabels = {}
local serverSelected = nil
local function hopTo(jobId, force)
if not jobId or jobId == "" then return end
if jobId == game.JobId and not force then return end
local ok = pcall(function()
TeleportService:TeleportToPlaceInstance(game.PlaceId, jobId, Players.LocalPlayer)
end)
if not ok then
local ok2, err2 = pcall(function()
TeleportService:TeleportToPlaceInstance(game.PlaceId, jobId)
end)
if not ok2 then return end
end
end
local function fetchServers()
local raw = game:HttpGet("https://games.roblox.com/v1/games/" .. game.PlaceId .. "/servers/Public?limit=100")
local data = HttpService:JSONDecode(raw)
local out = {}
for _, s in ipairs(data.data or {}) do
if s.id and (s.playing or 0) < (s.maxPlayers or 0) then
out[#out + 1] = s
end
end
return out
end
local function buildServerDropdown()
local labels = {}
serverLabels = {}
for _, s in ipairs(serverList) do
if s.id ~= game.JobId then
local label = string.format("%d/%d · %dms", s.playing or 0, s.maxPlayers or 0, s.ping or 0)
labels[#labels + 1] = label
serverLabels[label] = s.id
end
end
if #labels == 0 then labels = { "No open servers found" } end
serverSelected = serverLabels[labels[1]]
end
local function refreshServers(silent)
local ok, res = pcall(fetchServers)
if not ok then return end
serverList = res
buildServerDropdown()
end
local function hopStrategy(pick)
if #serverList == 0 then refreshServers(true) end
local chosen = nil
for _, s in ipairs(serverList) do
if s.id ~= game.JobId and (not chosen or pick(s, chosen)) then chosen = s end
end
if chosen then hopTo(chosen.id)
end
end
local function randomHop()
if #serverList == 0 then refreshServers(true) end
local pool = {}
for _, s in ipairs(serverList) do
if s.id ~= game.JobId then pool[#pool + 1] = s end
end
if #pool > 0 then hopTo(pool[math.random(1, #pool)].id)
end
end
-- ============================== SETTINGS TAB ==============================
local TabSet = Window:CreateTab("Settings")
local SecSetInterface = TabSet:CreateSection("Interface")
SecSetInterface:AddSlider({
Text = "Window Transparency",
Min = 0, Max = 70, Default = S.Transp,
Callback = function(v)
S.Transp = v
end,
})
SecSetInterface:AddSlider({
Text = "UI Scale",
Min = 50, Max = 150, Default = S.Scale,
Callback = function(v)
S.Scale = v
end,
})
local SecSetCombos = TabSet:CreateSection("Combos")
SecSetCombos:AddButton({
Text = "Aimbot + Silent Aim",
Callback = function()
S.Aimbot = not S.Aimbot
S.HeadshotOnly = S.Aimbot
S.RecoilControl = S.Aimbot
S.Sticky = S.Aimbot
end,
})
SecSetCombos:AddButton({
Text = "ESP Full",
Callback = function()
S.ESP = not S.ESP
S.Box = S.ESP
S.Name = S.ESP
S.HealthBar = S.ESP
S.Skeleton = S.ESP
S.Distance = S.ESP
S.Weapon = S.ESP
S.Tracer = S.ESP
S.Highlight = S.ESP
S.FOVCircle = S.ESP
end,
})
SecSetCombos:AddButton({
Text = "Weather",
Callback = function()
S.Effect = S.Effect == "None" and "Rain" or "None"
end,
})
SecSetCombos:AddButton({
Text = "Config Save/Load",
Callback = function()
S.CfgAutoSave = not S.CfgAutoSave
S.CfgAutoLoad = S.CfgAutoSave
saveConfig()
end,
})
local SecSetConfig = TabSet:CreateSection("Config")
SecSetConfig:AddToggle({
Text = "Auto Save",
Default = S.CfgAutoSave,
Callback = function(v)
S.CfgAutoSave = v
if v then saveConfig() end
end,
})
SecSetConfig:AddToggle({
Text = "Auto Load",
Default = S.CfgAutoLoad,
Callback = function(v)
S.CfgAutoLoad = v
end,
})
SecSetConfig:AddButton({
Text = "Save Config Now",
Callback = function()
saveConfig()
end,
})
SecSetConfig:AddButton({
Text = "Load Config Now",
Callback = function()
loadConfig()
end,
})
SecSetConfig:AddButton({
Text = "Reset to Defaults",
Callback = function()
resetConfig()
if S.CfgAutoSave then saveConfig() end
end,
})
SecSetConfig:AddButton({
Text = "Delete Saved Config",
Callback = function()
pcall(function() delfile(CFG_PATH) end)
end,
})
SecSetConfig:AddButton({
Text = "Disable All Features",
Callback = function()
S.Aimbot, S.ESP, S.FOVCircle, S.Highlight = false, false, false, false
if S.Effect ~= "None" then S.Effect = "None" end
end,
})
-- ============================== ENGINE ==============================
local drawObjs = {}
local fovCircle = nil
local conns = {}
local function onConnect(signal, fn)
local c = signal:Connect(fn)
conns[#conns + 1] = c
return c
end
local function playerTeam(p)
local ok, v = pcall(function() return p:GetAttribute("TeamID") end)
return ok and v or nil
end
local function isEnemy(p)
if p == Players.LocalPlayer then return false end
local char = p.Character
if not char then return false end
local hum = char:FindFirstChildOfClass("Humanoid")
if not hum or hum.Health <= 0 then return false end
if not char:FindFirstChild("HumanoidRootPart") then return false end
if S.TeamCheck then
local me = playerTeam(Players.LocalPlayer)
local them = playerTeam(p)
if me and them and me == them then return false end
end
return true
end
local function hasLineOfSight(from, to)
local params = RaycastParams.new()
params.FilterType = Enum.RaycastFilterType.Exclude
local me = Players.LocalPlayer
local filter = {}
if me.Character then filter[#filter + 1] = me.Character end
if workspace.CurrentCamera then filter[#filter + 1] = workspace.CurrentCamera end
params.FilterDescendantsInstances = filter
local result = workspace:Raycast(from, to - from, params)
if not result then return true end
local playerHit = result.Instance and result.Instance:FindFirstAncestorOfClass("Model")
local hitChar = playerHit and Players:GetPlayerFromCharacter(playerHit)
return hitChar ~= nil
end
local SKELETON = {
{ "Head", "UpperTorso" },
{ "UpperTorso", "LowerTorso" },
{ "UpperTorso", "LeftUpperArm" }, { "LeftUpperArm", "LeftLowerArm" }, { "LeftLowerArm", "LeftHand" },
{ "UpperTorso", "RightUpperArm" }, { "RightUpperArm", "RightLowerArm" }, { "RightLowerArm", "RightHand" },
{ "LowerTorso", "LeftUpperLeg" }, { "LeftUpperLeg", "LeftLowerLeg" }, { "LeftLowerLeg", "LeftFoot" },
{ "LowerTorso", "RightUpperLeg" }, { "RightUpperLeg", "RightLowerLeg" }, { "RightLowerLeg", "RightFoot" },
}
local function initESP(p)
local d = {}
d.box = Drawing.new("Square"); d.box.Thickness = 1.4; d.box.Filled = false; d.box.Visible = false
d.line = Drawing.new("Line"); d.line.Thickness = 1.2; d.line.Visible = false
d.name = Drawing.new("Text"); d.name.Center = true; d.name.Outline = true; d.name.Visible = false
d.hbg = Drawing.new("Square"); d.hbg.Filled = true; d.hbg.Color = Color3.fromRGB(20, 20, 20); d.hbg.Visible = false
d.hp = Drawing.new("Square"); d.hp.Filled = true; d.hp.Visible = false
d.dist = Drawing.new("Text"); d.dist.Center = true; d.dist.Outline = true; d.dist.Visible = false
d.tag = Drawing.new("Text"); d.tag.Center = true; d.tag.Outline = true; d.tag.Visible = false
d.skel = {}
for i = 1, #SKELETON do
local ln = Drawing.new("Line")
ln.Thickness = 1.1
ln.Visible = false
d.skel[i] = ln
end
d.wep = Drawing.new("Text"); d.wep.Center = true; d.wep.Outline = true; d.wep.Visible = false
drawObjs[p] = d
return d
end
local function clearESP()
for _, d in pairs(drawObjs) do
for _, obj in pairs(d) do
if type(obj) == "table" then
for _, o in ipairs(obj) do pcall(function() o:Remove() end) end
else
pcall(function() obj:Remove() end)
end
end
end
drawObjs = {}
end
local function weaponName(char)
local tool = char:FindFirstChildOfClass("Tool")
if tool then return tool.Name end
return nil
end
local function fovRadiusPx(cam, fovDeg)
local vp = cam.ViewportSize
local halfDeg = math.rad(fovDeg / 2)
local camHalf = math.rad(cam.FieldOfView / 2)
return (math.tan(halfDeg) / math.tan(camHalf)) * (vp.Y / 2)
end
local function updateFOVCircle(cam)
if not fovCircle then
fovCircle = Drawing.new("Circle")
fovCircle.Color = Color3.fromRGB(255, 255, 255)
fovCircle.Thickness = 1.2
fovCircle.Filled = false
fovCircle.Transparency = 0.55
fovCircle.Visible = false
end
if not S.FOVCircle then
if fovCircle.Visible then fovCircle.Visible = false end
return
end
local vp = cam.ViewportSize
fovCircle.Radius = fovRadiusPx(cam, S.FOV)
fovCircle.Position = Vector2.new(vp.X / 2, vp.Y / 2)
fovCircle.Visible = true
end
local function espColor(tick)
local c = S.ESPColor
if c == "Team" then return Color3.fromRGB(255, 70, 70) end
if c == "Rainbow" then return Color3.fromHSV((tick / 60) % 1, 1, 1) end
local map = {
Red = Color3.fromRGB(255, 70, 70), Orange = Color3.fromRGB(255, 160, 60),
Yellow = Color3.fromRGB(255, 220, 70), Green = Color3.fromRGB(80, 255, 130),
Cyan = Color3.fromRGB(80, 230, 255), Blue = Color3.fromRGB(90, 130, 255),
Purple = Color3.fromRGB(190, 90, 255), Pink = Color3.fromRGB(255, 90, 200),
White = Color3.fromRGB(230, 230, 230),
}
return map[c] or Color3.fromRGB(255, 70, 70)
end
local function viewportPos(cam, world)
local vp = cam:WorldToViewportPoint(world)
if vp.Z < 1 then return nil end
return Vector2.new(vp.X, vp.Y)
end
local espColorCache = nil
local highlightTick = 0
local function resetHighlight()
for _, p in ipairs(Players:GetPlayers()) do
local c = p.Character
if not c then continue end
for _, part in ipairs(c:GetChildren()) do
if part:IsA("BasePart") and not part.Name:find("Hitbox") then
pcall(function()
part.HighlightColor = Color3.fromRGB(255, 255, 255)
part.HighlightTransparency = 1
pcall(function() part.HighlightOutlineTransparency = 1 end)
end)
end
end
end
end
local function espFrame(tick)
local cam = workspace.CurrentCamera
if not cam then return end
local vp = cam.ViewportSize
for _, d in pairs(drawObjs) do
d.box.Visible = false; d.line.Visible = false; d.name.Visible = false
d.hbg.Visible = false; d.hp.Visible = false; d.dist.Visible = false
d.wep.Visible = false; d.tag.Visible = false
for _, o in ipairs(d.skel) do o.Visible = false end
end
if S.Highlight then
highlightTick += 1
elseif highlightTick > 0 or espColorCache then
highlightTick = 0
espColorCache = nil
resetHighlight()
end
local col = espColor(tick)
espColorCache = col
for _, p in ipairs(Players:GetPlayers()) do
if not isEnemy(p) then continue end
local char = p.Character
local hrp = char:FindFirstChild("HumanoidRootPart")
local hum = char:FindFirstChildOfClass("Humanoid")
if not hrp or not hum then continue end
local dist = (cam.CFrame.Position - hrp.Position).Magnitude
if dist > S.ESPRange then continue end
if S.Highlight and highlightTick % 6 == 1 then
local hcol = S.ESPColor == "Team" and Color3.fromRGB(255, 70, 70) or col
local fillT, outlineT = 0.35, 1
if S.ChamStyle == "Outline" then fillT, outlineT = 1, 0.25
elseif S.ChamStyle == "Fill + Outline" then outlineT = 0.35 end
for _, part in ipairs(char:GetChildren()) do
if part:IsA("BasePart") and not part.Name:find("Hitbox") then
pcall(function()
part.HighlightColor = hcol
part.HighlightTransparency = fillT
part.HighlightOutlineTransparency = outlineT
end)
end
end
end
local head = char:FindFirstChild("Head") or char:FindFirstChild("HitboxHead")
local topWorld = (head and head.Position + Vector3.new(0, 1.2, 0)) or (hrp.Position + Vector3.new(0, 3, 0))
local botWorld = hrp.Position - Vector3.new(0, 2.6, 0)
local topScreen = viewportPos(cam, topWorld)
local botScreen = viewportPos(cam, botWorld)
if not topScreen or not botScreen then continue end
local topX, topY = topScreen.X, topScreen.Y
local botX, botY = botScreen.X, botScreen.Y
local boxH = (topScreen - botScreen).Magnitude
local boxW = boxH * 0.62
local left = topX - boxW / 2
local d = drawObjs[p] or initESP(p)
if S.Box then
d.box.Color = col
d.box.Position = Vector2.new(left, topY)
d.box.Size = Vector2.new(boxW, boxH)
d.box.Visible = true
end
if S.Tracer then
local hsp = viewportPos(cam, hrp.Position)
if hsp then
d.line.Color = col
d.line.From = Vector2.new(vp.X / 2, vp.Y)
local to = hsp
local f = (S.TracerLen or 10) / 100
if f < 0.99 then
to = d.line.From:Lerp(hsp, f)
end
d.line.To = to
d.line.Visible = true
end
end
if S.Name then
d.name.Color = Color3.fromRGB(255, 255, 255)
d.name.Text = p.DisplayName
d.name.Size = S.TextSize
d.name.Position = Vector2.new(topX, topY - S.TextSize - 4)
d.name.Visible = true
end
if p == lockedPlayer and S.LockEnabled then
d.tag.Color = Color3.fromRGB(255, 215, 90)
d.tag.Text = "LOCKED"
d.tag.Size = S.TextSize - 1
d.tag.Position = Vector2.new(topX, topY - S.TextSize * 2 - 8)
d.tag.Visible = true
end
if p == aimTarget and S.Aimbot and S.Sticky then
d.tag.Color = Color3.fromRGB(120, 255, 180)
d.tag.Text = "TARGET"
d.tag.Size = S.TextSize - 1
d.tag.Position = Vector2.new(topX, topY + S.TextSize + 8)
d.tag.Visible = true
end
if S.Weapon then
local wn = weaponName(char)
if wn then
d.wep.Color = col
d.wep.Text = wn
d.wep.Size = S.TextSize - 2
d.wep.Position = Vector2.new(topX, botY + 2)
d.wep.Visible = true
end
end
if S.HealthBar then
local heal = math.clamp(hum.Health / hum.MaxHealth, 0, 1)
d.hbg.Position = Vector2.new(left - 7, topY + 1)
d.hbg.Size = Vector2.new(3, math.max(boxH - 2, 1))
d.hbg.Visible = true
d.hp.Color = Color3.fromRGB(80, 235, 120):Lerp(Color3.fromRGB(235, 60, 60), 1 - heal)
d.hp.Position = Vector2.new(left - 7, botY - 1 - (boxH - 2) * heal)
d.hp.Size = Vector2.new(3, math.max((boxH - 2) * heal, 1))
d.hp.Visible = true
end
if S.Distance then
d.dist.Color = col
local len = S.Measure == "Meters" and dist * 0.28 or dist
d.dist.Text = string.format("%.0f %s", len, S.Measure == "Meters" and "m" or "studs")
d.dist.Size = S.TextSize - 2
d.dist.Position = Vector2.new(topX, botY + (S.Weapon and S.TextSize + 6 or 2))
d.dist.Visible = true
end
if S.Skeleton then
for i = 1, #SKELETON do
local a = char:FindFirstChild(SKELETON[i][1])
local b = char:FindFirstChild(SKELETON[i][2])
if a and b then
local pa = viewportPos(cam, a.Position)
local pb = viewportPos(cam, b.Position)
if pa and pb then
local ln = d.skel[i]
ln.Color = col
ln.From = pa
ln.To = pb
ln.Visible = true
end
end
end
end
end
end
-- ============================== WEATHER ENGINE ==============================
local weatherPool = {}
local weatherObjs = {}
local weatherCount = 0
local weatherEffect = "None"
local function clearWeather()
for _, obj in ipairs(weatherObjs) do
pcall(function() obj:Remove() end)
end
weatherObjs = {}
weatherPool = {}
weatherCount = 0
weatherEffect = "None"
end
local function buildWeather(vp)
clearWeather()
local n = math.floor(S.Rate)
local effect = S.Effect
local wind = S.Wind
local size = S.PSize
local vpW = vp.X
local vpH = vp.Y
weatherEffect = effect
for i = 1, n do
local obj
if effect == "Rain" or effect == "Storm" then
local line = Drawing.new("Line")
line.Color = Color3.fromRGB(150, 190, 255)
line.Thickness = effect == "Storm" and math.max(size + 3, 3) or math.max(size - 1, 1)
line.Transparency = effect == "Storm" and 0.35 or 0.45
line.Visible = false
obj = line
else
local dot = Drawing.new("Circle")
dot.Color = Color3.fromRGB(255, 255, 255)
dot.Thickness = 1
dot.Transparency = 0.25
dot.Filled = true
dot.Visible = false
obj = dot
end
weatherObjs[i] = obj
weatherPool[i] = {
x = math.random() * vpW,
y = math.random() * vpH,
velx = wind * 1.2 + (math.random() - 0.5) * 40,
vely = (effect == "Snow") and (40 + math.random() * 45) or (220 + math.random() * 160),
drift = (math.random() - 0.5) * 2,
phase = math.random() * math.pi * 2,
rad = (size + math.random() * 2) / (effect == "Snow" and 2 or 1),
}
end
weatherCount = n
end
local function updateWeather(dt, vp)
if S.Effect == "None" then
if weatherCount > 0 then clearWeather() end
return
end
if weatherEffect ~= S.Effect or weatherCount ~= math.floor(S.Rate) then
buildWeather(vp)
end
local wind = S.Wind
local sp = S.PSize / 3
local vpW, vpH = vp.X, vp.Y
for i = 1, weatherCount do
local p = weatherPool[i]
local obj = weatherObjs[i]
p.phase = p.phase + dt * 3
p.x = p.x + (p.velx + math.sin(p.phase) * p.drift * 30) * dt
p.y = p.y + p.vely * dt
if p.x < -60 or p.x > vpW + 60 or p.y > vpH + 80 then
p.x = math.random() * (vpW + 120) - 60
p.y = -math.random() * 80
end
obj.Visible = true
if S.Effect == "Snow" then
obj.Position = Vector2.new(p.x, p.y)
obj.Radius = p.rad * sp
else
obj.From = Vector2.new(p.x - wind * 4, p.y)
obj.To = Vector2.new(p.x + sp * 40 - wind * 4, p.y + sp * 40)
end
end
end
-- ============================== AIM ENGINE ==============================
local function playerHealth(p)
local c = p and p.Character
local h = c and c:FindFirstChildOfClass("Humanoid")
return h and h.Health or math.huge
end
local function hitboxPart(char)
if not char then return nil end
local map = {
Head = "Head", HeadSmall = "HitboxHeadSmall", HitboxHead = "HitboxHead", HitboxHeadSmall = "HitboxHeadSmall",
Body = "HumanoidRootPart", BodySmall = "HitboxBodySmall", HitboxBody = "HitboxBody", HitboxBodySmall = "HitboxBodySmall",
PhysicalHead = "PhysicalHitboxHead",
}
local name = map[S.Hitbox] or "Head"
local part = char:FindFirstChild(name)
if part then return part end
local fallback = {
Head = "HitboxHead", Body = "HitboxBody", HitboxHead = "Head", HitboxHeadSmall = "Head",
BodySmall = "HumanoidRootPart", HitboxBody = "HumanoidRootPart", HitboxBodySmall = "HitboxBodySmall",
PhysicalHead = "Head", HeadSmall = "Head",
}
part = char:FindFirstChild(fallback[name] or "HumanoidRootPart")
return part or char:FindFirstChild("HumanoidRootPart")
end
local function aimActive()
return true
end
local function lockHeld()
if not S.LockEnabled then return false end
local key = Enum.KeyCode[S.LockKey]
if not key then return false end
return UserInputService:IsKeyDown(key)
end
local function validLocked()
if not lockedPlayer then return nil end
if not isEnemy(lockedPlayer) then
if S.AutoAcq then lockedPlayer = nil end
return nil
end
local char = lockedPlayer.Character
if char and char:FindFirstChild("HumanoidRootPart") and hitboxPart(char) then
return lockedPlayer
end
if S.AutoAcq then lockedPlayer = nil end
return nil
end
local function bulletSpeedFor(model)
if model == "Slow Projectile" then return 250 end
if model == "Fast Projectile" then return 550 end
return 0
end
local velCache = {}
local velCacheT = {}
local function smoothedVelocity(p, part)
local raw = part.Velocity
if not raw then return Vector3.new(0, 0, 0) end
local now = os.clock()
local last = velCacheT[p]
if not last then
velCacheT[p] = now
velCache[p] = raw
return raw
end
local dt = now - last
velCacheT[p] = now
if dt > 0.6 then
velCache[p] = raw
return raw
end
local k = math.clamp(1 - (1 - 0.3) ^ (dt * 60), 0, 1)
if (raw - velCache[p]).Magnitude > 90 then k = 1 end
local v = velCache[p]:Lerp(raw, k)
velCache[p] = v
return v
end
local function preferredAimPart(char)
if not char then return nil end
if S.HeadshotOnly then
for _, n in ipairs({ "PhysicalHitboxHead", "HitboxHead", "Head" }) do
local p = char:FindFirstChild(n)
if p then return p end
end
end
return hitboxPart(char)
end
local function computeLead(target, aimPart, camPos)
local model = S.PredictModel
local bspd = bulletSpeedFor(model)
local leadPct = S.Lead / 100
if bspd <= 0 or leadPct <= 0 then return Vector3.new(0, 0, 0) end
local tp = aimPart.Position
local dist = (camPos - tp).Magnitude
if dist <= 0 then return Vector3.new(0, 0, 0) end
local tof = dist / bspd
local vel = smoothedVelocity(target, aimPart)
for _ = 1, 2 do
tof = (camPos - (tp + vel * tof)).Magnitude / bspd
end
local lead = vel * tof * leadPct
local dropPct = S.DropComp / 100
if dropPct > 0 and tof > 0 then
local g = workspace.Gravity or 196.2
lead = lead + Vector3.new(0, 0.5 * g * tof * tof * dropPct, 0)
end
return lead
end
local function crosshairDistance(cam, center, part)
local sp = cam:WorldToViewportPoint(part.Position)
if sp.Z < 1 then return math.huge end
return (Vector2.new(sp.X, sp.Y) - center).Magnitude
end
local function partVisible(camPos, partPos)
return S.WallCheck == false or hasLineOfSight(camPos, partPos)
end
local function headPart(char)
if not char then return nil end
for _, n in ipairs({ "PhysicalHitboxHead", "HitboxHead", "Head" }) do
local p = char:FindFirstChild(n)
if p then return p end
end
return nil
end
local function candidateOK(cam, camPos, p)
local c = p.Character
local hrp = c and c:FindFirstChild("HumanoidRootPart")
local hp = headPart(c)
local pt = hp or hitboxPart(c)
if not hrp or not pt then return nil end
if (camPos - hrp.Position).Magnitude > S.MaxDist then return nil end
if not partVisible(camPos, pt.Position) and not partVisible(camPos, hrp.Position) then
return nil
end
return pt, hrp
end
local function scoreTarget(p, pt, hrp, cam, center, camPos)
local mode = S.Priority
local dist = (camPos - hrp.Position).Magnitude
local hasHead = headPart(p.Character) ~= nil
if mode == "Nearest" then
return dist + (hasHead and -50 or 0)
end
if mode == "Lowest HP" then
return playerHealth(p) + (hasHead and -50000 or 0)
end
local headDist = hasHead and crosshairDistance(cam, center, headPart(p.Character)) or dist
return headDist + (hasHead and -50 or 0)
end
local function pickBest(cam, center, radius, camPos)
local best, bestPt, bestHrp, bestScore = nil, nil, nil, math.huge
for _, p in ipairs(Players:GetPlayers()) do
if not isEnemy(p) then continue end
local pt, hrp = candidateOK(cam, camPos, p)
if not pt or not hrp then continue end
local off = crosshairDistance(cam, center, pt)
if off > radius then continue end
local score = scoreTarget(p, pt, hrp, cam, center, camPos)
if score < bestScore then
best, bestPt, bestHrp, bestScore = p, pt, hrp, score
end
end
return best, bestPt, bestHrp
end
local function scanEnemies(cam, camPos, preferHealth)
local bestP, bestPart, bestScore = nil, nil, math.huge
for _, p in ipairs(Players:GetPlayers()) do
if not isEnemy(p) then continue end
local pt, hrp = candidateOK(cam, camPos, p)
if not pt or not hrp then continue end
local score = preferHealth and playerHealth(p) or (camPos - hrp.Position).Magnitude
if score < bestScore then
bestP, bestPart, bestScore = p, pt, score
end
end
return bestP, bestPart
end
local function autoLockHead(cam, center, radius, camPos)
local bestP, bestPart, bestDist = nil, nil, math.huge
for _, p in ipairs(Players:GetPlayers()) do
if not isEnemy(p) then continue end
local hp = headPart(p.Character)
local hrp = p.Character and p.Character:FindFirstChild("HumanoidRootPart")
if not hp or not hrp then continue end
local dist = (camPos - hrp.Position).Magnitude
if dist > S.MaxDist then continue end
if S.WallCheck and not hasLineOfSight(camPos, hp.Position) then continue end
local sp = cam:WorldToViewportPoint(hp.Position)
if sp.Z < 1 then continue end
local off = (Vector2.new(sp.X, sp.Y) - center).Magnitude
if off > radius then continue end
if dist < bestDist then
bestP, bestPart, bestDist = p, hp, dist
end
end
return bestP, bestPart
end
local function pickingTarget(cam, center, radius, camPos)
local preferHealth = S.LockPriority == "Health"
if lockHeld() then
local locked = validLocked()
if locked then
local char = locked.Character
local part = hitboxPart(char)
local hrp2 = char and char:FindFirstChild("HumanoidRootPart")
if part and hrp2 and (camPos - hrp2.Position).Magnitude <= S.MaxDist
and (partVisible(camPos, part.Position) or (hrp2 and partVisible(camPos, hrp2.Position))) then
return locked, part, hrp2
end
if S.AutoAcq then
local bestP, bestPart = scanEnemies(cam, camPos, preferHealth)
if bestP and bestP ~= lockedPlayer then
lockedPlayer = bestP
lockAcquiredAt = os.clock()
lockNotify = true
end
if bestP then
local fresh = bestP ~= lockedPlayer
lockedPlayer = bestP
lockAcquiredAt = os.clock()
lockNotify = fresh
return bestP, bestPart, bestP.Character:FindFirstChild("HumanoidRootPart")
end
end
return nil
end
local bestP, bestPart = scanEnemies(cam, camPos, preferHealth)
if bestP then
local fresh = bestP ~= lockedPlayer
lockedPlayer = bestP
lockAcquiredAt = os.clock()
lockNotify = fresh
return bestP, bestPart, bestP.Character:FindFirstChild("HumanoidRootPart")
end
return nil
end
if S.Aimbot and not lockHeld() then
local hP, hPart = autoLockHead(cam, center, radius, camPos)
if hP and hPart then
if not lockedPlayer or lockedPlayer ~= hP then
lockedPlayer = hP
lockAcquiredAt = os.clock()
end
return hP, hPart, hP.Character and hP.Character:FindFirstChild("HumanoidRootPart")
end
end
if S.Sticky and aimTarget then
local p = aimTarget
if isEnemy(p) then
local pt, hrp = candidateOK(cam, camPos, p)
if pt and hrp then
local off = crosshairDistance(cam, center, pt)
if off <= radius * 1.5 then
return p, pt, hrp
end
end
end
aimTarget = nil
end
local best, bestPt, bestHrp = pickBest(cam, center, radius, camPos)
if best then
if best ~= aimTarget then
aimTarget = best
aimAcqAt = os.clock()
end
return best, bestPt, bestHrp
end
aimTarget = nil
return nil
end
-- ============================== BULLET TRACERS ==============================
local tracerPool = {}
local function clearTracers()
for _, t in ipairs(tracerPool) do
for _, ln in ipairs(t.lines) do pcall(function() ln:Remove() end) end
end
tracerPool = {}
end
local function tracerRaycast(cam)
local me = Players.LocalPlayer
local params = RaycastParams.new()
params.FilterType = Enum.RaycastFilterType.Exclude
local filter = {}
if me.Character then filter[#filter + 1] = me.Character end
if cam then filter[#filter + 1] = cam end
params.FilterDescendantsInstances = filter
local dir = cam.CFrame.LookVector * 400
local hit = workspace:Raycast(cam.CFrame.Position, dir, params)
return hit and hit.Position or cam.CFrame.Position + dir
end
local function spawnTracer(cam, vp)
local from = cam.CFrame.Position + cam.CFrame.RightVector * -0.18
local to = tracerRaycast(cam)
local style = S.TracerType
local thickPx = math.clamp((S.TracerThick or 0.2) * 14, 1, 14)
local col = Color3.fromRGB(120, 220, 255)
local lines = {}
if style == "Lightning" then
local segs = 4
local mid = {}
mid[1] = from
for i = 2, segs do mid[i] = from:Lerp(to, (i - 1) / segs) + Vector3.new(
(math.random() - 0.5) * 0.6, (math.random() - 0.5) * 0.6, (math.random() - 0.5) * 0.6) end
mid[segs + 1] = to
for i = 1, segs do
local ln = Drawing.new("Line")
ln.Color = col
ln.Thickness = thickPx
ln.Transparency = 0.2
ln.Visible = false
lines[i] = { ln = ln, a = mid[i], b = mid[i + 1], baseT = 0.2 }
end
elseif style == "Beam" then
local core = Drawing.new("Line"); core.Color = Color3.fromRGB(230, 245, 255)
core.Thickness = math.max(thickPx * 0.6, 1); core.Transparency = 0
local glow = Drawing.new("Line"); glow.Color = col; glow.Thickness = thickPx * 2; glow.Transparency = 0.6
lines[1] = { ln = glow, a = from, b = to, baseT = 0.6 }
lines[2] = { ln = core, a = from, b = to, baseT = 0 }
else
local ln = Drawing.new("Line")
ln.Color = col
ln.Thickness = thickPx
ln.Visible = false
lines[1] = { ln = ln, a = from, b = to, baseT = 0 }
end
tracerPool[#tracerPool + 1] = { lines = lines, born = os.clock() }
if #tracerPool > 30 then
local old = table.remove(tracerPool, 1)
for _, o in ipairs(old.lines) do pcall(function() o.ln:Remove() end) end
end
end
local function updateTracers(dt, cam, vp)
if not S.BulletTracers then
if #tracerPool > 0 then clearTracers() end
return
end
local now = os.clock()
for i = #tracerPool, 1, -1 do
local t = tracerPool[i]
local age = now - t.born
if age > 0.16 then
for _, o in ipairs(t.lines) do pcall(function() o.ln:Remove() end) end
table.remove(tracerPool, i)
else
local fade = 1 - age / 0.16
for _, o in ipairs(t.lines) do
local pa, pb
if S.FaceCamera then
pa = Vector2.new(vp.X / 2, vp.Y)
local pbw = cam:WorldToViewportPoint(o.b)
pb = Vector2.new(pbw.X, pbw.Y)
else
local aw = cam:WorldToViewportPoint(o.a)
local bw = cam:WorldToViewportPoint(o.b)
if aw.Z >= 1 and bw.Z >= 1 then
pa, pb = Vector2.new(aw.X, aw.Y), Vector2.new(bw.X, bw.Y)
end
end
if pa and pb then
o.ln.From = pa
o.ln.To = pb
o.ln.Visible = true
else
o.ln.Visible = false
end
o.ln.Transparency = o.baseT + (1 - o.baseT) * (1 - fade) * 0.7
end
end
end
end
-- ============================== MAIN LOOP ==============================
local tick = 0
local lastCfgJson = encodeConfig()
local cfgTimer = 0
onConnect(RunService.Heartbeat, function(dt)
if not S.CfgAutoSave then return end
cfgTimer += dt
if cfgTimer >= 5 then
cfgTimer = 0
local j = encodeConfig()
if j ~= lastCfgJson then
lastCfgJson = j
saveConfig()
end
end
end)
onConnect(RunService.RenderStepped, function(dt)
tick += 1
local cam = workspace.CurrentCamera
if not cam then return end
local vp = cam.ViewportSize
updateWeather(dt, vp)
updateFOVCircle(cam)
updateTracers(dt, cam, vp)
if S.ESP or S.Highlight then
espFrame(tick)
else
clearESP()
end
if S.Aimbot and UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton2) then
S.HeadshotOnly = true
local center = Vector2.new(vp.X / 2, vp.Y / 2)
local radius = fovRadiusPx(cam, S.FOV)
local target, part, hrp2 = pickingTarget(cam, center, radius, cam.CFrame.Position)
if target and part then
local aimPart = headPart(target.Character) or part
local aimPos = aimPart.Position
if target.Character and hrp2 then
aimPos += computeLead(target, aimPart, cam.CFrame.Position)
end
local camPos = cam.CFrame.Position
local goal = CFrame.lookAt(camPos, aimPos)
local curLook = cam.CFrame.LookVector
local ang = math.acos(math.clamp(curLook:Dot(goal.LookVector), -1, 1))
local realSpd = S.Smooth / 100
if S.Humanize > 0 then
realSpd = realSpd * (0.75 + math.random() * 0.5)
end
local firing = UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton2)
if firing and S.RecoilControl then
realSpd = math.max(realSpd, S.RecoilComp / 100)
end
local alpha = 1 - (1 - realSpd) ^ (dt * 60)
local since = os.clock() - math.max(aimAcqAt, lockAcquiredAt)
local ramp = math.clamp(1 - (0.35 - since) / 0.35, 0, 1)
if S.Humanize > 0 then alpha *= ramp end
local maxTurn = math.rad(S.MaxTurn) * dt
if ang > 0.0001 then
local maxAlpha = math.min(1, maxTurn / ang)
if alpha > maxAlpha then alpha = maxAlpha end
end
cam.CFrame = cam.CFrame:Lerp(goal, alpha)
workspace.CurrentCamera.CFrame = cam.CFrame
end
end
if S.BulletTracers and UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton2) then
spawnTracer(cam, vp)
end
end)
-- ============================== CLEANUP ==============================
local function halt()
if S.CfgAutoSave and encodeConfig() ~= lastCfgJson then saveConfig() end
for _, c in ipairs(conns) do pcall(function() c:Disconnect() end) end
conns = {}
clearESP()
clearWeather()
clearTracers()
if fovCircle then
pcall(function() fovCircle:Remove() end)
fovCircle = nil
end
for _, p in ipairs(Players:GetPlayers()) do
local c = p.Character
if c then
for _, part in ipairs(c:GetChildren()) do
if part:IsA("BasePart") then
pcall(function() part.HighlightColor = Color3.fromRGB(255, 255, 255) end)
pcall(function() part.HighlightTransparency = 1 end)
end
end
end
end
end
getgenv()[RUN_KEY] = { halt = halt }
if STATE then
STATE.onCleanup(halt)
end
pcall(function()
game:BindToClose(function()
pcall(saveConfig)
clearESP()
clearWeather()
end)
end)Review the source before using it. Executions count successful copies, capped at 10 per user and network per script in 24 hours.
Community discussion
0Start the conversation.


Your community, in one place