-- [[ Rscripts Risk Notice ]] -- This script is not verified by rscripts.net. Deal with caution. -- -- Stay safe: -- • Never log in on unofficial Roblox sites or lookalike domains. -- • Real Roblox links use roblox.com (check the .com ending). -- • Treat fake Roblox login / "claim reward" pages as phishing. -- [[ End Rscripts Risk Notice ]] --[[ 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)