--[[ Dev Hub — Complete Edition Aimbot | ESP | Hitbox | Recursive Gun Giver | Admin Panel | Stats ]] local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local Workspace = game:GetService("Workspace") local ReplicatedStorage = game:GetService("ReplicatedStorage") local TweenService = game:GetService("TweenService") local CoreGui = game:GetService("CoreGui") local LocalPlayer = Players.LocalPlayer local Camera = Workspace:FindFirstChild("CustomCamera") if not Camera or not Camera:IsA("Camera") then Camera = Workspace.CurrentCamera end --// SETTINGS local Settings = { AimEnabled = true, AimKey = Enum.UserInputType.MouseButton2, FOV = 150, Smoothness = 1.0, YOffset = 1.5, VisCheck = false, TeamCheck = false, AutoSwitch = true, OverrideCam = false, ESPEnabled = true, ESPBoxes = true, ESPTracers = true, ESPInfo = true, ESPDrawFOV = true, ESPMaxDist = 5000, HitboxEnabled = false, HitboxSize = 10, HitboxTransparency = 0.6, Notifications = true, } --// STATE local CurrentTarget = nil local HoldingAim = false local ESPTable = {} local ScriptActive = true local ListeningForKey = false local UI = {} --// REMOTES (discovered from game) local Remotes = { CheckAdmin = ReplicatedStorage:FindFirstChild("CheckAdminPermission"), GetPerms = ReplicatedStorage:FindFirstChild("GetPlayerPermissions"), PermEdit = ReplicatedStorage:FindFirstChild("PermEditorEvent"), ExploitBan = ReplicatedStorage:FindFirstChild("ExploitBan"), Teleport = ReplicatedStorage:FindFirstChild("TeleportPlayer"), AimPos = ReplicatedStorage:FindFirstChild("UpdateAimPositionEvent"), AdminSkin = ReplicatedStorage:FindFirstChild("AdminSkinManager"), AdminEvent = ReplicatedStorage:FindFirstChild("AdminEvent"), NPCRemote = ReplicatedStorage:FindFirstChild("NPCRemoteEvent"), LoadMap = ReplicatedStorage:FindFirstChild("LoadCurrentMap"), Spectate = ReplicatedStorage:FindFirstChild("SpectateEvent"), Badge = ReplicatedStorage:FindFirstChild("BadgeNotification"), } --// DRAWING local FOVDraw = Drawing.new("Circle") FOVDraw.Thickness = 1 FOVDraw.NumSides = 64 FOVDraw.Filled = false FOVDraw.ZIndex = 1 FOVDraw.Transparency = 1 FOVDraw.Color = Color3.fromRGB(255, 255, 255) local TargetDraw = Drawing.new("Circle") TargetDraw.Thickness = 2.5 TargetDraw.NumSides = 32 TargetDraw.Filled = false TargetDraw.ZIndex = 5 TargetDraw.Color = Color3.fromRGB(255, 50, 50) --// FUNCTIONS local function Notify(text) if not Settings.Notifications then return end local gui = Instance.new("ScreenGui") gui.Name = "DevNotify" gui.ResetOnSpawn = false local ok = pcall(function() gui.Parent = CoreGui end) if not ok then gui.Parent = LocalPlayer:WaitForChild("PlayerGui") end local frame = Instance.new("TextLabel", gui) frame.Size = UDim2.new(0, 360, 0, 34) frame.Position = UDim2.new(0.5, -180, 0, -50) frame.BackgroundColor3 = Color3.fromRGB(20, 20, 20) frame.BorderSizePixel = 0 frame.Text = text frame.TextColor3 = Color3.new(1, 1, 1) frame.Font = Enum.Font.SourceSansSemibold frame.TextSize = 15 Instance.new("UICorner", frame).CornerRadius = UDim.new(0, 6) TweenService:Create(frame, TweenInfo.new(0.3), {Position = UDim2.new(0.5, -180, 0, 20)}):Play() task.delay(2.5, function() TweenService:Create(frame, TweenInfo.new(0.3), {Position = UDim2.new(0.5, -180, 0, -50)}):Play() task.wait(0.35) gui:Destroy() end) end local function IsAlive(char) if not char then return false end local hum = char:FindFirstChildOfClass("Humanoid") return hum and hum.Health > 0 end local function GetAimPart(char) return char:FindFirstChild("HumanoidRootPart") or char.PrimaryPart end local function GetAimPosition(part) return part.Position + Vector3.new(0, Settings.YOffset, 0) end local function GetHealth(char) local hum = char:FindFirstChildOfClass("Humanoid") if hum then return math.floor(hum.Health), math.floor(hum.MaxHealth) end return 0, 100 end local function IsVisible(character, worldPos) if not Settings.VisCheck then return true end local origin = Camera.CFrame.Position local direction = worldPos - origin local rayParams = RaycastParams.new() rayParams.FilterDescendantsInstances = {LocalPlayer.Character, Camera} rayParams.FilterType = Enum.RaycastFilterType.Blacklist local result = Workspace:Raycast(origin, direction, rayParams) if result and result.Instance then return result.Instance:IsDescendantOf(character) end return true end local function IsTargetValid(player) if player == LocalPlayer then return false end if Settings.TeamCheck and player.Team == LocalPlayer.Team then return false end return true end --// ESP SYSTEM local function GetESP(player) if not ESPTable[player] then local box = Drawing.new("Square") box.Thickness = 1 box.Filled = false box.Visible = false local tracer = Drawing.new("Line") tracer.Thickness = 1 tracer.Visible = false local info = Drawing.new("Text") info.Size = 13 info.Center = true info.Outline = true info.Font = 2 info.Visible = false ESPTable[player] = {Box = box, Tracer = tracer, Info = info} end return ESPTable[player] end local function RemoveESP(player) local data = ESPTable[player] if data then data.Box:Remove() data.Tracer:Remove() data.Info:Remove() ESPTable[player] = nil end end --// CLOSEST TARGET local function GetClosestPlayer() local screenCenter = Camera.ViewportSize / 2 local closest = nil local closestDist = math.huge for _, player in ipairs(Players:GetPlayers()) do if not IsTargetValid(player) then continue end local char = player.Character local part = char and GetAimPart(char) if not part or not IsAlive(char) then continue end local aimPos = GetAimPosition(part) local pos, onScreen = Camera:WorldToViewportPoint(aimPos) if not onScreen then continue end local screenDist = (Vector2.new(pos.X, pos.Y) - screenCenter).Magnitude if screenDist > Settings.FOV then continue end if not IsVisible(char, aimPos) then continue end local dist3D = (part.Position - Camera.CFrame.Position).Magnitude if dist3D < closestDist then closestDist = dist3D closest = { Player = player, Part = part, Position = pos, Distance = dist3D, Notified = false, } end end return closest end --// UI BUILDER local function BuildUI() local screen = Instance.new("ScreenGui") screen.Name = "DevHubUI" screen.ResetOnSpawn = false screen.ZIndexBehavior = Enum.ZIndexBehavior.Sibling local ok = pcall(function() screen.Parent = CoreGui end) if not ok then screen.Parent = LocalPlayer:WaitForChild("PlayerGui") end local main = Instance.new("Frame", screen) main.Name = "Main" main.Size = UDim2.new(0, 540, 0, 400) main.Position = UDim2.new(0.5, -270, 0.5, -200) main.BackgroundColor3 = Color3.fromRGB(25, 25, 25) main.BorderSizePixel = 0 main.Active = true main.Draggable = true Instance.new("UICorner", main).CornerRadius = UDim.new(0, 6) local title = Instance.new("TextLabel", main) title.Size = UDim2.new(1, 0, 0, 34) title.BackgroundColor3 = Color3.fromRGB(18, 18, 18) title.BorderSizePixel = 0 title.Text = " Dev Hub | Developer Testing" title.TextColor3 = Color3.new(1, 1, 1) title.Font = Enum.Font.SourceSansBold title.TextSize = 18 title.TextXAlignment = Enum.TextXAlignment.Left Instance.new("UICorner", title).CornerRadius = UDim.new(0, 6) local sidebar = Instance.new("Frame", main) sidebar.Position = UDim2.new(0, 6, 0, 42) sidebar.Size = UDim2.new(0, 100, 1, -50) sidebar.BackgroundColor3 = Color3.fromRGB(35, 35, 35) Instance.new("UICorner", sidebar).CornerRadius = UDim.new(0, 6) local content = Instance.new("Frame", main) content.Position = UDim2.new(0, 112, 0, 42) content.Size = UDim2.new(1, -120, 1, -50) content.BackgroundColor3 = Color3.fromRGB(32, 32, 32) Instance.new("UICorner", content).CornerRadius = UDim.new(0, 6) local tabButtons = {} local tabFrames = {} local function SwitchTab(name) for k, btn in pairs(tabButtons) do btn.BackgroundColor3 = (k == name) and Color3.fromRGB(60, 130, 220) or Color3.fromRGB(50, 50, 50) end for k, frame in pairs(tabFrames) do frame.Visible = (k == name) end end local function AddTab(name, order) local btn = Instance.new("TextButton", sidebar) btn.Size = UDim2.new(1, -10, 0, 30) btn.Position = UDim2.new(0, 5, 0, 5 + (order - 1) * 35) btn.BackgroundColor3 = Color3.fromRGB(50, 50, 50) btn.BorderSizePixel = 0 btn.Text = name btn.TextColor3 = Color3.new(1, 1, 1) btn.Font = Enum.Font.SourceSansSemibold btn.TextSize = 15 Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 4) btn.MouseButton1Click:Connect(function() SwitchTab(name) end) tabButtons[name] = btn local frame = Instance.new("ScrollingFrame", content) frame.Name = name frame.Size = UDim2.new(1, -8, 1, -8) frame.Position = UDim2.new(0, 4, 0, 4) frame.BackgroundTransparency = 1 frame.BorderSizePixel = 0 frame.ScrollBarThickness = 3 frame.AutomaticCanvasSize = Enum.AutomaticSize.Y local layout = Instance.new("UIListLayout", frame) layout.Padding = UDim.new(0, 5) tabFrames[name] = frame frame.Visible = false return frame end local pageAim = AddTab("Aim", 1) local pageESP = AddTab("ESP", 2) local pageHit = AddTab("Hitbox", 3) local pageGun = AddTab("Guns", 4) local pageAdmin = AddTab("Admin", 5) local pageStats = AddTab("Stats", 6) local pageMisc = AddTab("Misc", 7) SwitchTab("Aim") -- Helpers local function AddToggle(parent, text, setting, callback) local f = Instance.new("Frame", parent) f.Size = UDim2.new(1, 0, 0, 28) f.BackgroundTransparency = 1 local lbl = Instance.new("TextLabel", f) lbl.Size = UDim2.new(1, -60, 1, 0) lbl.BackgroundTransparency = 1 lbl.Text = text lbl.TextColor3 = Color3.fromRGB(230, 230, 230) lbl.Font = Enum.Font.SourceSans lbl.TextSize = 16 lbl.TextXAlignment = Enum.TextXAlignment.Left local btn = Instance.new("TextButton", f) btn.Size = UDim2.new(0, 52, 0, 22) btn.Position = UDim2.new(1, -56, 0.5, -11) btn.BackgroundColor3 = Settings[setting] and Color3.fromRGB(45, 200, 75) or Color3.fromRGB(200, 55, 55) btn.BorderSizePixel = 0 btn.Text = Settings[setting] and "ON" or "OFF" btn.TextColor3 = Color3.new(1, 1, 1) btn.Font = Enum.Font.SourceSansBold btn.TextSize = 13 Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 4) btn.MouseButton1Click:Connect(function() Settings[setting] = not Settings[setting] btn.Text = Settings[setting] and "ON" or "OFF" btn.BackgroundColor3 = Settings[setting] and Color3.fromRGB(45, 200, 75) or Color3.fromRGB(200, 55, 55) if callback then callback(Settings[setting]) end end) end local function AddSlider(parent, text, setting, min, max, inc) local f = Instance.new("Frame", parent) f.Size = UDim2.new(1, 0, 0, 42) f.BackgroundTransparency = 1 local lbl = Instance.new("TextLabel", f) lbl.Size = UDim2.new(1, 0, 0, 18) lbl.BackgroundTransparency = 1 lbl.Text = text .. ": " .. Settings[setting] lbl.TextColor3 = Color3.fromRGB(230, 230, 230) lbl.Font = Enum.Font.SourceSans lbl.TextSize = 15 lbl.TextXAlignment = Enum.TextXAlignment.Left local track = Instance.new("Frame", f) track.Size = UDim2.new(1, -12, 0, 8) track.Position = UDim2.new(0, 6, 0, 26) track.BackgroundColor3 = Color3.fromRGB(55, 55, 55) track.BorderSizePixel = 0 Instance.new("UICorner", track).CornerRadius = UDim.new(1, 0) track.Active = true local fill = Instance.new("Frame", track) local pct = (Settings[setting] - min) / (max - min) fill.Size = UDim2.new(pct, 0, 1, 0) fill.BackgroundColor3 = Color3.fromRGB(60, 130, 220) fill.BorderSizePixel = 0 Instance.new("UICorner", fill).CornerRadius = UDim.new(1, 0) local function Update(input) local rel = math.clamp((input.Position.X - track.AbsolutePosition.X) / track.AbsoluteSize.X, 0, 1) local val = min + (max - min) * rel if inc then val = math.floor(val / inc + 0.5) * inc end val = math.clamp(val, min, max) val = tonumber(string.format("%.3f", val)) Settings[setting] = val lbl.Text = text .. ": " .. val local npct = (val - min) / (max - min) fill.Size = UDim2.new(npct, 0, 1, 0) end track.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then Update(input) end end) track.InputChanged:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement and UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton1) then Update(input) end end) end local function AddButton(parent, text, callback) local btn = Instance.new("TextButton", parent) btn.Size = UDim2.new(1, 0, 0, 28) btn.BackgroundColor3 = Color3.fromRGB(60, 130, 220) btn.BorderSizePixel = 0 btn.Text = text btn.TextColor3 = Color3.new(1, 1, 1) btn.Font = Enum.Font.SourceSansSemibold btn.TextSize = 16 Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 4) btn.MouseButton1Click:Connect(callback) return btn end local function AddLabel(parent, text) local lbl = Instance.new("TextLabel", parent) lbl.Size = UDim2.new(1, 0, 0, 16) lbl.BackgroundTransparency = 1 lbl.Text = text lbl.TextColor3 = Color3.fromRGB(180, 180, 180) lbl.Font = Enum.Font.SourceSansItalic lbl.TextSize = 14 lbl.TextWrapped = true lbl.TextXAlignment = Enum.TextXAlignment.Left end -- AIM TAB AddToggle(pageAim, "Enable Aim Lock", "AimEnabled", function(v) Notify("Aim: " .. tostring(v)) end) AddSlider(pageAim, "FOV Radius", "FOV", 10, 800, 1) AddSlider(pageAim, "Smoothness (1=Hard)", "Smoothness", 0.01, 1, 0.01) AddSlider(pageAim, "Y-Offset", "YOffset", 0, 5, 0.1) AddToggle(pageAim, "Visibility Check", "VisCheck") AddToggle(pageAim, "Team Check", "TeamCheck") AddToggle(pageAim, "Auto Switch", "AutoSwitch") AddToggle(pageAim, "Override Camera", "OverrideCam") local kf = Instance.new("Frame", pageAim) kf.Size = UDim2.new(1, 0, 0, 28) kf.BackgroundTransparency = 1 local kl = Instance.new("TextLabel", kf) kl.Size = UDim2.new(1, -130, 1, 0) kl.BackgroundTransparency = 1 kl.Text = "Aim Key: RightMouse" kl.TextColor3 = Color3.fromRGB(230, 230, 230) kl.Font = Enum.Font.SourceSans kl.TextSize = 16 kl.TextXAlignment = Enum.TextXAlignment.Left local kb = Instance.new("TextButton", kf) kb.Size = UDim2.new(0, 120, 0, 24) kb.Position = UDim2.new(1, -125, 0.5, -12) kb.BackgroundColor3 = Color3.fromRGB(70, 70, 70) kb.BorderSizePixel = 0 kb.Text = "Change" kb.TextColor3 = Color3.new(1, 1, 1) kb.Font = Enum.Font.SourceSansBold kb.TextSize = 14 Instance.new("UICorner", kb).CornerRadius = UDim.new(0, 4) kb.MouseButton1Click:Connect(function() ListeningForKey = true kb.Text = "Press key..." kb.BackgroundColor3 = Color3.fromRGB(200, 150, 0) end) UI.KeyBtn = kb UI.KeyLbl = kl -- ESP TAB AddToggle(pageESP, "Master ESP", "ESPEnabled") AddToggle(pageESP, "Boxes", "ESPBoxes") AddToggle(pageESP, "Tracers", "ESPTracers") AddToggle(pageESP, "Player Info", "ESPInfo") AddToggle(pageESP, "FOV Circle", "ESPDrawFOV") AddSlider(pageESP, "Max Distance", "ESPMaxDist", 50, 5000, 10) -- HITBOX TAB AddToggle(pageHit, "Hitbox Expander", "HitboxEnabled", function(v) Notify("Hitbox: " .. tostring(v)) end) AddSlider(pageHit, "Hitbox Size", "HitboxSize", 1, 30, 0.5) AddSlider(pageHit, "Hitbox Visibility", "HitboxTransparency", 0, 1, 0.1) -- GUN TAB — recursively scans GunModels for Tools AddLabel(pageGun, "Recursively scanning GunModels...") local function RecursiveFindTools(folder, path, results) results = results or {} for _, obj in ipairs(folder:GetChildren()) do if obj:IsA("Tool") then table.insert(results, {Path = path .. obj.Name, Tool = obj}) elseif obj:IsA("Folder") or obj:IsA("Model") then RecursiveFindTools(obj, path .. obj.Name .. ".", results) end end return results end local function RefreshGunButtons() for _, c in ipairs(pageGun:GetChildren()) do if c:IsA("TextButton") and c.Text ~= "Refresh Gun List" then c:Destroy() end end local folder = ReplicatedStorage:FindFirstChild("GunModels") if not folder then AddLabel(pageGun, "No GunModels folder!") return end local guns = RecursiveFindTools(folder, "GunModels.") if #guns == 0 then AddLabel(pageGun, "No Tools found inside GunModels.") return end for _, entry in ipairs(guns) do AddButton(pageGun, entry.Path, function() local bp = LocalPlayer:FindFirstChildOfClass("Backpack") if not bp then Notify("No backpack found!") return end local clone = entry.Tool:Clone() clone.Parent = bp local char = LocalPlayer.Character local hum = char and char:FindFirstChildOfClass("Humanoid") if hum and char and not char:FindFirstChildOfClass("Tool") then pcall(function() hum:EquipTool(clone) end) end Notify("Gave: " .. entry.Path) end) end end AddButton(pageGun, "Refresh Gun List", function() RefreshGunButtons() Notify("Gun list refreshed. Found tools in nested folders.") end) RefreshGunButtons() -- ADMIN PANEL AddLabel(pageAdmin, "Fire discovered remotes. Use with caution.") AddLabel(pageAdmin, "Remotes scan:") for name, remote in pairs(Remotes) do if remote then AddButton(pageAdmin, "Fire: " .. name, function() local ok, err = pcall(function() if remote:IsA("RemoteEvent") then remote:FireServer() elseif remote:IsA("RemoteFunction") then remote:InvokeServer() elseif remote:IsA("BindableEvent") then remote:Fire() end end) if ok then Notify("Fired: " .. name) else Notify("Failed: " .. name .. " | " .. tostring(err)) end end) else AddLabel(pageAdmin, "Missing: " .. name) end end AddButton(pageAdmin, "Give Admin (Try PermEdit)", function() if Remotes.PermEdit then Remotes.PermEdit:FireServer(LocalPlayer.Name, "Admin") Notify("Sent PermEdit for Admin") else Notify("PermEditorEvent not found") end end) AddButton(pageAdmin, "Teleport to Target (test)", function() if Remotes.Teleport then Remotes.Teleport:FireServer(workspace.CurrentCamera.CFrame.Position + Vector3.new(0,5,0)) Notify("Fired TeleportPlayer") end end) -- STATS TAB (leaderstats editor) AddLabel(pageStats, "Edit your leaderstats directly.") local function AddStatEdit(name, statName) local f = Instance.new("Frame", pageStats) f.Size = UDim2.new(1, 0, 0, 28) f.BackgroundTransparency = 1 local lbl = Instance.new("TextLabel", f) lbl.Size = UDim2.new(0.4, 0, 1, 0) lbl.BackgroundTransparency = 1 lbl.Text = name .. ":" lbl.TextColor3 = Color3.fromRGB(230, 230, 230) lbl.Font = Enum.Font.SourceSans lbl.TextSize = 16 lbl.TextXAlignment = Enum.TextXAlignment.Left local box = Instance.new("TextBox", f) box.Size = UDim2.new(0.3, 0, 1, -4) box.Position = UDim2.new(0.42, 0, 0, 2) box.BackgroundColor3 = Color3.fromRGB(50, 50, 50) box.TextColor3 = Color3.new(1, 1, 1) box.Text = "0" box.Font = Enum.Font.SourceSans box.TextSize = 16 Instance.new("UICorner", box).CornerRadius = UDim.new(0, 4) local btn = Instance.new("TextButton", f) btn.Size = UDim2.new(0.24, 0, 1, -4) btn.Position = UDim2.new(0.75, 0, 0, 2) btn.BackgroundColor3 = Color3.fromRGB(60, 130, 220) btn.Text = "Set" btn.TextColor3 = Color3.new(1, 1, 1) btn.Font = Enum.Font.SourceSansBold btn.TextSize = 14 Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 4) btn.MouseButton1Click:Connect(function() local ls = LocalPlayer:FindFirstChild("leaderstats") if not ls then Notify("No leaderstats!") return end local stat = ls:FindFirstChild(statName) if stat and stat:IsA("IntValue") or stat:IsA("NumberValue") then stat.Value = tonumber(box.Text) or 0 Notify(name .. " set to " .. stat.Value) else Notify("Stat not found: " .. statName) end end) end AddStatEdit("Kills", "Kills") AddStatEdit("Deaths", "Deaths") AddStatEdit("HZM", "HZM") AddStatEdit("XP", "XP") AddStatEdit("Level", "Level") AddStatEdit("RequiredXP", "RequiredXP") AddStatEdit("Headshots", "Headshots") -- MISC TAB AddToggle(pageMisc, "Notifications", "Notifications") AddButton(pageMisc, "Unload Script", function() ScriptActive = false for _, p in ipairs(Players:GetPlayers()) do RemoveESP(p) end FOVDraw:Remove() TargetDraw:Remove() screen:Destroy() Notify("Unloaded.") end) end --// INPUT UserInputService.InputBegan:Connect(function(input, gameProcessed) if gameProcessed then return end if ListeningForKey then local key = input.UserInputType == Enum.UserInputType.Keyboard and input.KeyCode or input.UserInputType Settings.AimKey = key local name = tostring(key):gsub("Enum%.UserInputType%.", ""):gsub("Enum%.KeyCode%.", "") UI.KeyLbl.Text = "Aim Key: " .. name UI.KeyBtn.Text = "Change" UI.KeyBtn.BackgroundColor3 = Color3.fromRGB(70, 70, 70) ListeningForKey = false Notify("Key set: " .. name) return end local match = false if Settings.AimKey.EnumType == Enum.KeyCode then match = input.KeyCode == Settings.AimKey elseif Settings.AimKey.EnumType == Enum.UserInputType then match = input.UserInputType == Settings.AimKey end if match then HoldingAim = true end end) UserInputService.InputEnded:Connect(function(input, gameProcessed) local match = false if Settings.AimKey.EnumType == Enum.KeyCode then match = input.KeyCode == Settings.AimKey elseif Settings.AimKey.EnumType == Enum.UserInputType then match = input.UserInputType == Settings.AimKey end if match then HoldingAim = false CurrentTarget = nil end end) --// RENDER LOOP RunService.RenderStepped:Connect(function() if not ScriptActive then return end if not Camera or not Camera.Parent then Camera = Workspace:FindFirstChild("CustomCamera") if not Camera or not Camera:IsA("Camera") then Camera = Workspace.CurrentCamera end end if not Camera then return end -- FOV Circle if Settings.ESPDrawFOV then FOVDraw.Position = Camera.ViewportSize / 2 FOVDraw.Radius = Settings.FOV FOVDraw.Visible = true else FOVDraw.Visible = false end -- AIMBOT if Settings.AimEnabled and HoldingAim then local valid = false if CurrentTarget then local char = CurrentTarget.Player.Character local part = char and GetAimPart(char) if part and IsAlive(char) and IsTargetValid(CurrentTarget.Player) then local aimPos = GetAimPosition(part) local pos, onScreen = Camera:WorldToViewportPoint(aimPos) if onScreen then local sd = (Vector2.new(pos.X, pos.Y) - Camera.ViewportSize / 2).Magnitude if sd <= Settings.FOV and IsVisible(char, aimPos) then valid = true CurrentTarget.Part = part CurrentTarget.Position = pos CurrentTarget.Distance = (part.Position - Camera.CFrame.Position).Magnitude end end end end if not valid then CurrentTarget = Settings.AutoSwitch and GetClosestPlayer() or nil end if CurrentTarget then local part = CurrentTarget.Part local aimPos = GetAimPosition(part) if Settings.OverrideCam then Camera.CameraType = Enum.CameraType.Scriptable end local targetCF = CFrame.new(Camera.CFrame.Position, aimPos) if Settings.Smoothness >= 0.99 then Camera.CFrame = targetCF else Camera.CFrame = Camera.CFrame:Lerp(targetCF, Settings.Smoothness) end local pos, onScreen = Camera:WorldToViewportPoint(aimPos) if onScreen then TargetDraw.Position = Vector2.new(pos.X, pos.Y) TargetDraw.Radius = math.clamp(500 / pos.Z, 5, 30) TargetDraw.Visible = true else TargetDraw.Visible = false end if not CurrentTarget.Notified then CurrentTarget.Notified = true Notify("Locked: " .. CurrentTarget.Player.Name .. " | " .. math.floor(CurrentTarget.Distance) .. "s") end else TargetDraw.Visible = false end else CurrentTarget = nil TargetDraw.Visible = false end -- ESP for _, player in ipairs(Players:GetPlayers()) do if player == LocalPlayer then continue end local data = GetESP(player) data.Box.Visible = false data.Tracer.Visible = false data.Info.Visible = false if not Settings.ESPEnabled then continue end local char = player.Character local part = char and GetAimPart(char) if not part or not IsAlive(char) or not IsTargetValid(player) then continue end local dist = (part.Position - Camera.CFrame.Position).Magnitude if dist > Settings.ESPMaxDist then continue end local pos, onScreen = Camera:WorldToViewportPoint(part.Position) if not onScreen then continue end local screenPos = Vector2.new(pos.X, pos.Y) local hp, maxHp = GetHealth(char) local locked = CurrentTarget and CurrentTarget.Player == player if Settings.ESPTracers then data.Tracer.From = Vector2.new(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y) data.Tracer.To = screenPos data.Tracer.Color = locked and Color3.fromRGB(255, 0, 0) or Color3.fromRGB(255, 255, 255) data.Tracer.Transparency = locked and 1 or 0.6 data.Tracer.Visible = true end if Settings.ESPBoxes then local scale = math.clamp(800 / pos.Z, 20, 90) data.Box.Size = Vector2.new(scale / 2, scale) data.Box.Position = screenPos - data.Box.Size / 2 data.Box.Color = locked and Color3.fromRGB(255, 0, 0) or Color3.fromRGB(0, 255, 100) data.Box.Visible = true end if Settings.ESPInfo then data.Info.Position = screenPos - Vector2.new(0, 40) data.Info.Text = player.Name .. "\nHP:" .. hp .. "/" .. maxHp .. " | " .. math.floor(dist) .. "s" data.Info.Color = locked and Color3.fromRGB(255, 200, 50) or Color3.fromRGB(255, 255, 255) data.Info.Visible = true end end -- HITBOX EXPANDER if Settings.HitboxEnabled then for _, player in ipairs(Players:GetPlayers()) do if player == LocalPlayer then continue end local char = player.Character if not char then continue end local hrp = char:FindFirstChild("HumanoidRootPart") if not hrp then continue end local expander = char:FindFirstChild("DevHitbox") if not expander then expander = Instance.new("Part") expander.Name = "DevHitbox" expander.Shape = Enum.PartType.Ball expander.Material = Enum.Material.ForceField expander.Color = Color3.fromRGB(255, 0, 0) expander.CanCollide = false expander.Anchored = false expander.Parent = char local weld = Instance.new("Weld", expander) weld.Part0 = hrp weld.Part1 = expander end expander.Size = Vector3.new(Settings.HitboxSize, Settings.HitboxSize, Settings.HitboxSize) expander.Transparency = 1 - Settings.HitboxTransparency end else for _, player in ipairs(Players:GetPlayers()) do if player == LocalPlayer then continue end local char = player.Character if char then local old = char:FindFirstChild("DevHitbox") if old then old:Destroy() end end end end end) --// CLEANUP Players.PlayerRemoving:Connect(function(player) RemoveESP(player) if CurrentTarget and CurrentTarget.Player == player then CurrentTarget = nil end end) --// INIT BuildUI() Notify("Dev Hub Loaded | Recursive Guns | Admin Panel Ready")