-- [[ 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 ]] --!strict -- ========================================================= -- DEV TOOL v3.0 — для собственного плейса -- LocalScript → StarterPlayer > StarterPlayerScripts -- Меню: RightShift | Aim: удерживать RMB -- Горизонтальное меню 720×360 · 4 вкладки · гибкий aim -- ========================================================= local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local TweenService = game:GetService("TweenService") local SoundService = game:GetService("SoundService") local Workspace = game:GetService("Workspace") local Lighting = game:GetService("Lighting") local LocalPlayer = Players.LocalPlayer local PlayerGui = LocalPlayer:WaitForChild("PlayerGui") local Camera = Workspace.CurrentCamera Workspace:GetPropertyChangedSignal("CurrentCamera"):Connect(function() Camera = Workspace.CurrentCamera end) ----------------------------------------------------------- -- ВЕРСИЯ ----------------------------------------------------------- local VERSION = "v3.0" ----------------------------------------------------------- -- НАСТРОЙКИ ----------------------------------------------------------- local DEFAULT_SETTINGS = { -- AIM aimEnabled = false, aimMode = "Camera", -- "Camera" (без evasion) | "Silent" (без движения камеры) aimKey = "RMB", -- RMB | LMB | E | Q | Shift aimToggleMode = false, aimTargetPriority = "FOV", -- FOV | Distance | Health aimPart = "Head", -- Head | UpperTorso | HumanoidRootPart | Nearest | Random aimFallbackPart = "HumanoidRootPart", aimSticky = false, aimFOV = 200, aimSmooth = 3, aimSmoothCurve = "Linear", -- Linear | EaseOut | EaseIn aimDeadzone = 2, aimDelay = 0, aimReleaseDelay = 0, aimPrediction = true, aimPredictionAmount = 500, aimWallCheck = false, aimTeamCheck = false, aimIgnoreKnocked = true, aimMaxDistance = 5000, aimMinDistance = 0, aimShowFOV = true, aimFOVColor = Color3.fromRGB(0, 200, 255), aimFOVThickness = 2, aimFOVFill = false, -- VISUALS espEnabled = true, espShowPlayers = true, espShowNPCs = false, espMaxDistance = 5000, boxEnabled = false, boxColor = Color3.fromRGB(0, 220, 120), skeletonEnabled = false, skeletonColor = Color3.fromRGB(255, 255, 255), tracersEnabled = false, tracersColor = Color3.fromRGB(0, 200, 255), chamsEnabled = false, chamsColor = Color3.fromRGB(160, 0, 255), headDotEnabled = false, headDotColor = Color3.fromRGB(255, 60, 80), ntEnabled = true, ntShowName = true, ntHealthBar = true, ntShowDistance = true, ntTextSize = 18, ntMaxDistance = 8000, -- MISC soundsEnabled = true, } local Settings = {} for k, v in pairs(DEFAULT_SETTINGS) do Settings[k] = v end ----------------------------------------------------------- -- ТЕМА ----------------------------------------------------------- local T = { bg = Color3.fromRGB(12, 12, 16), bgTop = Color3.fromRGB(20, 20, 26), bg2 = Color3.fromRGB(24, 24, 32), bg3 = Color3.fromRGB(32, 32, 42), stroke = Color3.fromRGB(45, 45, 60), strokeHi = Color3.fromRGB(90, 90, 130), accent = Color3.fromRGB(0, 200, 255), accent2 = Color3.fromRGB(160, 0, 255), text = Color3.fromRGB(235, 235, 245), textDim = Color3.fromRGB(120, 120, 145), ok = Color3.fromRGB(0, 220, 120), bad = Color3.fromRGB(255, 60, 80), track = Color3.fromRGB(40, 40, 55), card = Color3.fromRGB(30, 30, 42), closeBg = Color3.fromRGB(40, 15, 20), } ----------------------------------------------------------- -- ЗВУКИ ----------------------------------------------------------- local Sounds = {} local SoundFolder = Instance.new("Folder") SoundFolder.Name = "DevToolSounds" SoundFolder.Parent = SoundService local function newSound(name, id, volume, pitch) local s = Instance.new("Sound") s.Name = name s.SoundId = id s.Volume = volume s.PlaybackSpeed = pitch s.Parent = SoundFolder Sounds[name] = s end newSound("toggleOn", "rbxasset://sounds/switch.wav", 0.45, 1.35) newSound("toggleOff", "rbxasset://sounds/switch.wav", 0.40, 0.85) newSound("click", "rbxasset://sounds/clickfast.wav", 0.35, 1.0) newSound("tab", "rbxasset://sounds/electronicpingshort.wav", 0.28, 1.6) newSound("open", "rbxasset://sounds/electronicpingshort.wav", 0.40, 1.2) newSound("close", "rbxasset://sounds/electronicpingshort.wav", 0.32, 0.7) newSound("tick", "rbxasset://sounds/clickfast.wav", 0.15, 1.9) local function playSound(name, pitchOverride) if not Settings.soundsEnabled then return end local s = Sounds[name] if not s then return end if pitchOverride then s.PlaybackSpeed = pitchOverride end s.TimePosition = 0 s:Play() end ----------------------------------------------------------- -- ХЕЛПЕРЫ ----------------------------------------------------------- local function tw(obj, props, time, style, dir) local tween = TweenService:Create( obj, TweenInfo.new(time or 0.2, style or Enum.EasingStyle.Quad, dir or Enum.EasingDirection.Out), props ) tween:Play() return tween end local function ripple(btn) btn.ClipsDescendants = true btn.MouseButton1Down:Connect(function() local p = UserInputService:GetMouseLocation() local relX = p.X - btn.AbsolutePosition.X local relY = p.Y - btn.AbsolutePosition.Y local r = Instance.new("Frame") r.AnchorPoint = Vector2.new(0.5, 0.5) r.Position = UDim2.fromOffset(relX, relY) r.Size = UDim2.fromOffset(0, 0) r.BackgroundColor3 = T.accent r.BackgroundTransparency = 0.6 r.BorderSizePixel = 0 r.ZIndex = btn.ZIndex + 5 r.Parent = btn local size = math.max(btn.AbsoluteSize.X, btn.AbsoluteSize.Y) * 2 TweenService:Create(r, TweenInfo.new(0.5, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), { Size = UDim2.fromOffset(size, size), BackgroundTransparency = 1, }):Play() task.delay(0.55, function() if r then r:Destroy() end end) end) end ----------------------------------------------------------- -- SCREEN GUI ----------------------------------------------------------- local screenGui = Instance.new("ScreenGui") screenGui.Name = "DevTool" screenGui.ResetOnSpawn = false screenGui.IgnoreGuiInset = true screenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling screenGui.DisplayOrder = 100 screenGui.Parent = PlayerGui -- FOV circle local fovCircle = Instance.new("Frame") fovCircle.AnchorPoint = Vector2.new(0.5, 0.5) fovCircle.Position = UDim2.fromScale(0.5, 0.5) fovCircle.BackgroundTransparency = 1 fovCircle.Visible = false fovCircle.Parent = screenGui local fovCorner = Instance.new("UICorner"); fovCorner.CornerRadius = UDim.new(1, 0); fovCorner.Parent = fovCircle local fovStroke = Instance.new("UIStroke") fovStroke.Color = T.accent fovStroke.Thickness = 2 fovStroke.Transparency = 0.35 fovStroke.Parent = fovCircle -- Overlay для 2D-визуалов local overlay = Instance.new("Frame") overlay.Name = "Overlay" overlay.Size = UDim2.fromScale(1, 1) overlay.BackgroundTransparency = 1 overlay.Parent = screenGui -- Шестерёнка local openBtn = Instance.new("TextButton") openBtn.AnchorPoint = Vector2.new(0.5, 0) openBtn.Size = UDim2.fromOffset(40, 40) openBtn.Position = UDim2.new(0.5, 0, 0, 16) openBtn.BackgroundColor3 = T.bgTop openBtn.BorderSizePixel = 0 openBtn.Text = "⚙" openBtn.TextColor3 = T.text openBtn.TextSize = 22 openBtn.Font = Enum.Font.GothamBold openBtn.AutoButtonColor = false openBtn.Visible = false openBtn.Parent = screenGui local oS = Instance.new("UIStroke") oS.Color = T.stroke oS.Thickness = 1 oS.Parent = openBtn ----------------------------------------------------------- -- ОКНО (горизонтальное 720×360) ----------------------------------------------------------- local WIN_W, WIN_H = 720, 360 local main = Instance.new("CanvasGroup") main.Name = "Main" main.AnchorPoint = Vector2.new(0.5, 0.5) main.Position = UDim2.fromScale(0.5, 0.5) main.Size = UDim2.fromOffset(WIN_W, WIN_H) main.BackgroundColor3 = T.bg main.BorderSizePixel = 0 main.GroupTransparency = 1 main.Visible = false main.Parent = screenGui local mainStroke = Instance.new("UIStroke") mainStroke.Color = T.stroke mainStroke.Thickness = 1 mainStroke.Parent = main local uiScale = Instance.new("UIScale") uiScale.Scale = 1 uiScale.Parent = main -- TOP BAR local titleBar = Instance.new("Frame") titleBar.Name = "TitleBar" titleBar.Size = UDim2.new(1, 0, 0, 40) titleBar.BackgroundColor3 = T.bgTop titleBar.BorderSizePixel = 0 titleBar.Parent = main local titleGlow = Instance.new("Frame") titleGlow.Size = UDim2.fromOffset(3, 18) titleGlow.Position = UDim2.new(0, 12, 0.5, -9) titleGlow.BackgroundColor3 = T.accent titleGlow.BorderSizePixel = 0 titleGlow.Parent = titleBar local tgGrad = Instance.new("UIGradient") tgGrad.Color = ColorSequence.new(T.accent, T.accent2) tgGrad.Parent = titleGlow local titleText = Instance.new("TextLabel") titleText.Size = UDim2.new(1, -300, 1, 0) titleText.Position = UDim2.fromOffset(24, 0) titleText.BackgroundTransparency = 1 titleText.Text = "DEV TOOL " .. VERSION titleText.TextColor3 = T.text titleText.TextSize = 13 titleText.Font = Enum.Font.GothamBold titleText.TextXAlignment = Enum.TextXAlignment.Left titleText.Parent = titleBar local fpsLabel = Instance.new("TextLabel") fpsLabel.Size = UDim2.fromOffset(80, 1) fpsLabel.Position = UDim2.new(1, -140, 0.5, -8) fpsLabel.BackgroundTransparency = 1 fpsLabel.Text = "FPS: --" fpsLabel.TextColor3 = T.textDim fpsLabel.TextSize = 10 fpsLabel.Font = Enum.Font.GothamBold fpsLabel.TextXAlignment = Enum.TextXAlignment.Right fpsLabel.Parent = titleBar local frameCount = 0 local lastFpsUpdate = tick() task.spawn(function() while task.wait(1) do local now = tick() local fps = math.floor(frameCount / math.max(now - lastFpsUpdate, 0.001)) fpsLabel.Text = "FPS: " .. fps frameCount = 0 lastFpsUpdate = now end end) RunService.RenderStepped:Connect(function() frameCount += 1 end) local closeBtn = Instance.new("TextButton") closeBtn.Size = UDim2.fromOffset(26, 26) closeBtn.Position = UDim2.new(1, -32, 0.5, -13) closeBtn.BackgroundColor3 = T.closeBg closeBtn.BorderSizePixel = 0 closeBtn.Text = "✕" closeBtn.TextColor3 = T.bad closeBtn.TextSize = 12 closeBtn.Font = Enum.Font.GothamBold closeBtn.AutoButtonColor = false closeBtn.Parent = titleBar closeBtn.MouseEnter:Connect(function() tw(closeBtn, { BackgroundColor3 = T.bad, TextColor3 = Color3.new(1, 1, 1) }, 0.15) end) closeBtn.MouseLeave:Connect(function() tw(closeBtn, { BackgroundColor3 = T.closeBg, TextColor3 = T.bad }, 0.15) end) -- SIDEBAR local sidebar = Instance.new("Frame") sidebar.Size = UDim2.fromOffset(140, WIN_H - 40) sidebar.Position = UDim2.fromOffset(0, 40) sidebar.BackgroundColor3 = T.bgTop sidebar.BorderSizePixel = 0 sidebar.Parent = main local sideDivider = Instance.new("Frame") sideDivider.Size = UDim2.fromOffset(1, WIN_H - 40) sideDivider.Position = UDim2.new(1, 0, 0, 0) sideDivider.BackgroundColor3 = T.stroke sideDivider.BorderSizePixel = 0 sideDivider.Parent = sidebar local sideTitle = Instance.new("TextLabel") sideTitle.Size = UDim2.new(1, -20, 0, 26) sideTitle.Position = UDim2.fromOffset(14, 10) sideTitle.BackgroundTransparency = 1 sideTitle.Text = "NAVIGATION" sideTitle.TextColor3 = T.textDim sideTitle.TextSize = 9 sideTitle.Font = Enum.Font.GothamBold sideTitle.TextXAlignment = Enum.TextXAlignment.Left sideTitle.Parent = sidebar local tabNames = { "Aimbot", "Visuals", "Players", "Misc" } local tabIcons = { Aimbot = "◎", Visuals = "◉", Players = "☰", Misc = "⚙" } local tabButtons = {} local yOffset = 42 for _, name in ipairs(tabNames) do local b = Instance.new("TextButton") b.Size = UDim2.new(1, -16, 0, 34) b.Position = UDim2.fromOffset(8, yOffset) b.BackgroundColor3 = T.bg2 b.BackgroundTransparency = 1 b.BorderSizePixel = 0 b.Text = "" b.AutoButtonColor = false b.Parent = sidebar local icon = Instance.new("TextLabel") icon.Size = UDim2.fromOffset(24, 34) icon.Position = UDim2.fromOffset(6, 0) icon.BackgroundTransparency = 1 icon.Text = tabIcons[name] icon.TextColor3 = T.textDim icon.TextSize = 14 icon.Font = Enum.Font.GothamBold icon.Parent = b local lbl = Instance.new("TextLabel") lbl.Size = UDim2.new(1, -36, 1, 0) lbl.Position = UDim2.fromOffset(34, 0) lbl.BackgroundTransparency = 1 lbl.Text = name lbl.TextColor3 = T.textDim lbl.TextSize = 12 lbl.Font = Enum.Font.GothamBold lbl.TextXAlignment = Enum.TextXAlignment.Left lbl.Parent = b tabButtons[name] = { btn = b, lbl = lbl, icon = icon } yOffset = yOffset + 38 end local sideIndicator = Instance.new("Frame") sideIndicator.Size = UDim2.fromOffset(3, 34) sideIndicator.Position = UDim2.fromOffset(0, 42) sideIndicator.BackgroundColor3 = T.accent sideIndicator.BorderSizePixel = 0 sideIndicator.Parent = sidebar local siGrad = Instance.new("UIGradient") siGrad.Color = ColorSequence.new(T.accent, T.accent2) siGrad.Rotation = 90 siGrad.Parent = sideIndicator -- PAGES local pageHolder = Instance.new("Frame") pageHolder.Size = UDim2.new(1, -140, 1, -40) pageHolder.Position = UDim2.fromOffset(140, 40) pageHolder.BackgroundTransparency = 1 pageHolder.ClipsDescendants = true pageHolder.Parent = main local pages = {} for _, name in ipairs(tabNames) do local pg = Instance.new("CanvasGroup") pg.Name = name pg.Size = UDim2.fromScale(1, 1) pg.BackgroundTransparency = 1 pg.GroupTransparency = 1 pg.Visible = false pg.Parent = pageHolder local scroll = Instance.new("ScrollingFrame") scroll.Size = UDim2.fromScale(1, 1) scroll.BackgroundTransparency = 1 scroll.BorderSizePixel = 0 scroll.ScrollBarThickness = 2 scroll.ScrollBarImageColor3 = T.strokeHi scroll.ScrollBarImageTransparency = 0.4 scroll.CanvasSize = UDim2.fromOffset(0, 0) scroll.AutomaticCanvasSize = Enum.AutomaticSize.Y scroll.Parent = pg local ll = Instance.new("UIListLayout") ll.Padding = UDim.new(0, 5) ll.SortOrder = Enum.SortOrder.LayoutOrder ll.Parent = scroll local pd = Instance.new("UIPadding") pd.PaddingTop = UDim.new(0, 10) pd.PaddingBottom = UDim.new(0, 10) pd.PaddingLeft = UDim.new(0, 12) pd.PaddingRight = UDim.new(0, 8) pd.Parent = scroll pages[name] = { canvas = pg, scroll = scroll } end local currentTab = nil local function switchTab(name, instant) if currentTab == name and not instant then return end local idx = table.find(tabNames, name) if not idx then return end tw(sideIndicator, { Position = UDim2.fromOffset(0, 42 + (idx - 1) * 38) }, 0.22, Enum.EasingStyle.Quint, Enum.EasingDirection.Out) for n, data in pairs(tabButtons) do local isActive = (n == name) if isActive then tw(data.btn, { BackgroundTransparency = 0, BackgroundColor3 = T.bg3 }, 0.18) tw(data.lbl, { TextColor3 = T.text }, 0.18) tw(data.icon, { TextColor3 = T.accent }, 0.18) else tw(data.btn, { BackgroundTransparency = 1 }, 0.18) tw(data.lbl, { TextColor3 = T.textDim }, 0.18) tw(data.icon, { TextColor3 = T.textDim }, 0.18) end end for n, p in pairs(pages) do if n == name then p.canvas.Visible = true p.canvas.Position = UDim2.fromOffset(14, 0) tw(p.canvas, { GroupTransparency = 0 }, 0.22) tw(p.canvas, { Position = UDim2.fromOffset(0, 0) }, 0.25, Enum.EasingStyle.Quint) else if p.canvas.Visible then local done = false local fade = tw(p.canvas, { GroupTransparency = 1 }, 0.14) fade.Completed:Connect(function() if not done and currentTab ~= n then done = true p.canvas.Visible = false end end) end end end currentTab = name end for name, data in pairs(tabButtons) do data.btn.MouseButton1Click:Connect(function() playSound("tab") switchTab(name) end) data.btn.MouseEnter:Connect(function() if currentTab ~= name then tw(data.lbl, { TextColor3 = T.text }, 0.15) tw(data.icon, { TextColor3 = T.text }, 0.15) playSound("tick", 2.0) end end) data.btn.MouseLeave:Connect(function() if currentTab ~= name then tw(data.lbl, { TextColor3 = T.textDim }, 0.15) tw(data.icon, { TextColor3 = T.textDim }, 0.15) end end) end ----------------------------------------------------------- -- UI КОМПОНЕНТЫ ----------------------------------------------------------- local function section(parent, text) local l = Instance.new("TextLabel") l.Size = UDim2.new(1, 0, 0, 18) l.BackgroundTransparency = 1 l.Text = text l.TextColor3 = T.textDim l.TextSize = 10 l.Font = Enum.Font.GothamBold l.TextXAlignment = Enum.TextXAlignment.Left l.Parent = parent end local function toggleRow(parent, text, key, callback) local btn = Instance.new("TextButton") btn.Size = UDim2.new(1, 0, 0, 32) btn.BackgroundColor3 = T.bg2 btn.BorderSizePixel = 0 btn.Text = "" btn.AutoButtonColor = false btn.Parent = parent local s = Instance.new("UIStroke") s.Color = T.stroke s.Thickness = 1 s.Transparency = 0.3 s.Parent = btn local lbl = Instance.new("TextLabel") lbl.Size = UDim2.new(1, -60, 1, 0) lbl.Position = UDim2.fromOffset(12, 0) lbl.BackgroundTransparency = 1 lbl.Text = text lbl.TextColor3 = T.text lbl.TextSize = 12 lbl.Font = Enum.Font.Gotham lbl.TextXAlignment = Enum.TextXAlignment.Left lbl.Parent = btn local swBg = Instance.new("Frame") swBg.Size = UDim2.fromOffset(34, 16) swBg.Position = UDim2.new(1, -42, 0.5, -8) swBg.BackgroundColor3 = T.track swBg.BorderSizePixel = 0 swBg.Parent = btn local knob = Instance.new("Frame") knob.Size = UDim2.fromOffset(12, 12) knob.Position = UDim2.new(0, 2, 0.5, -6) knob.BackgroundColor3 = Color3.new(1, 1, 1) knob.BorderSizePixel = 0 knob.Parent = swBg local function apply(state, animate) local dur = animate and 0.2 or 0 if state then tw(swBg, { BackgroundColor3 = T.accent }, dur) tw(knob, { Position = UDim2.new(1, -14, 0.5, -6) }, dur, Enum.EasingStyle.Quint) else tw(swBg, { BackgroundColor3 = T.track }, dur) tw(knob, { Position = UDim2.new(0, 2, 0.5, -6) }, dur, Enum.EasingStyle.Quint) end end apply(Settings[key], false) btn.MouseButton1Click:Connect(function() Settings[key] = not Settings[key] apply(Settings[key], true) playSound(Settings[key] and "toggleOn" or "toggleOff") if callback then callback(Settings[key]) end end) btn.MouseEnter:Connect(function() tw(s, { Color = T.strokeHi, Transparency = 0 }, 0.15) playSound("tick", 1.9) end) btn.MouseLeave:Connect(function() tw(s, { Color = T.stroke, Transparency = 0.3 }, 0.15) end) ripple(btn) end local function sliderRow(parent, text, key, minV, maxV, suffix, callback) local holder = Instance.new("Frame") holder.Size = UDim2.new(1, 0, 0, 46) holder.BackgroundColor3 = T.bg2 holder.BorderSizePixel = 0 holder.Parent = parent local s = Instance.new("UIStroke") s.Color = T.stroke s.Thickness = 1 s.Transparency = 0.3 s.Parent = holder local lbl = Instance.new("TextLabel") lbl.Size = UDim2.new(1, -24, 0, 16) lbl.Position = UDim2.fromOffset(12, 6) lbl.BackgroundTransparency = 1 lbl.Text = text .. ": " .. tostring(Settings[key]) .. (suffix or "") lbl.TextColor3 = T.text lbl.TextSize = 12 lbl.Font = Enum.Font.Gotham lbl.TextXAlignment = Enum.TextXAlignment.Left lbl.Parent = holder local barBg = Instance.new("Frame") barBg.Size = UDim2.new(1, -24, 0, 4) barBg.Position = UDim2.new(0, 12, 1, -14) barBg.BackgroundColor3 = T.track barBg.BorderSizePixel = 0 barBg.Parent = holder local fill = Instance.new("Frame") fill.Size = UDim2.fromScale((Settings[key] - minV) / (maxV - minV), 1) fill.BackgroundColor3 = T.accent fill.BorderSizePixel = 0 fill.Parent = barBg local fGrad = Instance.new("UIGradient") fGrad.Color = ColorSequence.new(T.accent, T.accent2) fGrad.Parent = fill local knobDot = Instance.new("Frame") knobDot.AnchorPoint = Vector2.new(0.5, 0.5) knobDot.Size = UDim2.fromOffset(10, 10) knobDot.Position = UDim2.new(fill.Size.X.Scale, 0, 0.5, 0) knobDot.BackgroundColor3 = Color3.new(1, 1, 1) knobDot.BorderSizePixel = 0 knobDot.Parent = barBg local dragging = false local function updateFromX(x, instant) local rel = math.clamp((x - barBg.AbsolutePosition.X) / barBg.AbsoluteSize.X, 0, 1) local val = math.floor(minV + (maxV - minV) * rel + 0.5) Settings[key] = val if instant then fill.Size = UDim2.fromScale(rel, 1) knobDot.Position = UDim2.new(rel, 0, 0.5, 0) else tw(fill, { Size = UDim2.fromScale(rel, 1) }, 0.06) tw(knobDot, { Position = UDim2.new(rel, 0, 0.5, 0) }, 0.06) end lbl.Text = text .. ": " .. tostring(val) .. (suffix or "") if callback then callback(val) end end barBg.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true playSound("tick", 1.4) updateFromX(input.Position.X, true) end end) UserInputService.InputChanged:Connect(function(input) if dragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then updateFromX(input.Position.X, false) end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then if dragging then playSound("tick", 1.7) end dragging = false end end) end local function optionRow(parent, text, key, options, callback) local holder = Instance.new("Frame") holder.Size = UDim2.new(1, 0, 0, 32) holder.BackgroundColor3 = T.bg2 holder.BorderSizePixel = 0 holder.Parent = parent local s = Instance.new("UIStroke") s.Color = T.stroke s.Thickness = 1 s.Transparency = 0.3 s.Parent = holder local lbl = Instance.new("TextLabel") lbl.Size = UDim2.new(1, -110, 1, 0) lbl.Position = UDim2.fromOffset(12, 0) lbl.BackgroundTransparency = 1 lbl.Text = text lbl.TextColor3 = T.text lbl.TextSize = 12 lbl.Font = Enum.Font.Gotham lbl.TextXAlignment = Enum.TextXAlignment.Left lbl.Parent = holder local btn = Instance.new("TextButton") btn.Size = UDim2.fromOffset(90, 22) btn.Position = UDim2.new(1, -100, 0.5, -11) btn.BackgroundColor3 = T.card btn.BorderSizePixel = 0 btn.Text = tostring(Settings[key]) btn.TextColor3 = T.text btn.TextSize = 11 btn.Font = Enum.Font.GothamMedium btn.AutoButtonColor = false btn.Parent = holder local bs = Instance.new("UIStroke") bs.Color = T.stroke bs.Thickness = 1 bs.Transparency = 0.4 bs.Parent = btn btn.MouseButton1Click:Connect(function() playSound("click") local idx = table.find(options, Settings[key]) or 1 idx = idx % #options + 1 Settings[key] = options[idx] btn.Text = tostring(Settings[key]) if callback then callback(Settings[key]) end end) btn.MouseEnter:Connect(function() tw(bs, { Color = T.accent, Transparency = 0.2 }, 0.12) end) btn.MouseLeave:Connect(function() tw(bs, { Color = T.stroke, Transparency = 0.4 }, 0.12) end) ripple(btn) end local function colorRow(parent, text, key) local holder = Instance.new("Frame") holder.Size = UDim2.new(1, 0, 0, 34) holder.BackgroundColor3 = T.bg2 holder.BorderSizePixel = 0 holder.Parent = parent local s = Instance.new("UIStroke") s.Color = T.stroke s.Thickness = 1 s.Transparency = 0.3 s.Parent = holder local lbl = Instance.new("TextLabel") lbl.Size = UDim2.new(1, -160, 1, 0) lbl.Position = UDim2.fromOffset(12, 0) lbl.BackgroundTransparency = 1 lbl.Text = text lbl.TextColor3 = T.text lbl.TextSize = 12 lbl.Font = Enum.Font.Gotham lbl.TextXAlignment = Enum.TextXAlignment.Left lbl.Parent = holder local colors = { Color3.fromRGB(255, 60, 60), Color3.fromRGB(0, 220, 120), Color3.fromRGB(0, 200, 255), Color3.fromRGB(255, 210, 60), Color3.fromRGB(160, 0, 255), Color3.new(1, 1, 1), } local container = Instance.new("Frame") container.Size = UDim2.fromOffset(130, 34) container.Position = UDim2.new(1, -140, 0, 0) container.BackgroundTransparency = 1 container.Parent = holder local cl = Instance.new("UIListLayout") cl.FillDirection = Enum.FillDirection.Horizontal cl.HorizontalAlignment = Enum.HorizontalAlignment.Right cl.VerticalAlignment = Enum.VerticalAlignment.Center cl.Padding = UDim.new(0, 5) cl.Parent = container local dots = {} for _, col in ipairs(colors) do local b = Instance.new("TextButton") b.Size = UDim2.fromOffset(16, 16) b.BackgroundColor3 = col b.BorderSizePixel = 0 b.Text = "" b.AutoButtonColor = false b.Parent = container local bs = Instance.new("UIStroke") bs.Color = T.text bs.Thickness = 1.5 bs.Transparency = (Settings[key] == col) and 0 or 1 bs.Parent = b local bScale = Instance.new("UIScale") bScale.Scale = 1 bScale.Parent = b dots[b] = { color = col, stroke = bs, scale = bScale } b.MouseButton1Click:Connect(function() playSound("click", 1.4) Settings[key] = col for _, d in pairs(dots) do tw(d.stroke, { Transparency = (d.color == col) and 0 or 1 }, 0.18) tw(d.scale, { Scale = (d.color == col) and 1.15 or 1 }, 0.15, Enum.EasingStyle.Back) end end) b.MouseEnter:Connect(function() tw(bScale, { Scale = 1.2 }, 0.12, Enum.EasingStyle.Back) end) b.MouseLeave:Connect(function() tw(bScale, { Scale = (Settings[key] == col) and 1.15 or 1 }, 0.12) end) end end local function buttonRow(parent, text, callback) local btn = Instance.new("TextButton") btn.Size = UDim2.new(1, 0, 0, 30) btn.BackgroundColor3 = T.bg2 btn.BorderSizePixel = 0 btn.Text = text btn.TextColor3 = T.text btn.TextSize = 11 btn.Font = Enum.Font.GothamBold btn.AutoButtonColor = false btn.Parent = parent local s = Instance.new("UIStroke") s.Color = T.stroke s.Thickness = 1 s.Transparency = 0.4 s.Parent = btn btn.MouseButton1Click:Connect(function() playSound("click", 1.1) if callback then callback() end end) btn.MouseEnter:Connect(function() tw(s, { Color = T.accent, Transparency = 0.2 }, 0.12) end) btn.MouseLeave:Connect(function() tw(s, { Color = T.stroke, Transparency = 0.4 }, 0.12) end) ripple(btn) end ----------------------------------------------------------- -- НАПОЛНЕНИЕ: AIMBOT ----------------------------------------------------------- local aimS = pages["Aimbot"].scroll section(aimS, "GENERAL") toggleRow(aimS, "Enable Aim Assist", "aimEnabled") optionRow(aimS, "Mode", "aimMode", { "Camera", "Silent" }) optionRow(aimS, "Activation Key", "aimKey", { "RMB", "LMB", "E", "Q", "Shift" }) toggleRow(aimS, "Toggle Mode", "aimToggleMode") section(aimS, "TARGET") optionRow(aimS, "Priority", "aimTargetPriority", { "FOV", "Distance", "Health" }) optionRow(aimS, "Hitbox", "aimPart", { "Head", "UpperTorso", "HumanoidRootPart", "Nearest", "Random" }) optionRow(aimS, "Fallback", "aimFallbackPart", { "HumanoidRootPart", "UpperTorso", "Head" }) toggleRow(aimS, "Sticky Aim", "aimSticky") section(aimS, "BEHAVIOR") sliderRow(aimS, "FOV Radius", "aimFOV", 20, 1000, " px") sliderRow(aimS, "Smoothness (1 = instant)", "aimSmooth", 1, 100) optionRow(aimS, "Smooth Curve", "aimSmoothCurve", { "Linear", "EaseOut", "EaseIn" }) sliderRow(aimS, "Deadzone", "aimDeadzone", 0, 30, " px") sliderRow(aimS, "Aim Delay", "aimDelay", 0, 500, " ms") sliderRow(aimS, "Release Delay", "aimReleaseDelay", 0, 500, " ms") toggleRow(aimS, "Prediction", "aimPrediction") sliderRow(aimS, "Prediction Speed", "aimPredictionAmount", 100, 2000) section(aimS, "FILTERS") toggleRow(aimS, "Wall Check", "aimWallCheck") toggleRow(aimS, "Team Check", "aimTeamCheck") toggleRow(aimS, "Ignore Knocked", "aimIgnoreKnocked") sliderRow(aimS, "Max Distance", "aimMaxDistance", 100, 10000, " studs") sliderRow(aimS, "Min Distance", "aimMinDistance", 0, 500, " studs") section(aimS, "FOV VISUAL") toggleRow(aimS, "Show FOV", "aimShowFOV") toggleRow(aimS, "Fill FOV", "aimFOVFill") colorRow(aimS, "FOV Color", "aimFOVColor") sliderRow(aimS, "FOV Thickness", "aimFOVThickness", 1, 6, " px") ----------------------------------------------------------- -- НАПОЛНЕНИЕ: VISUALS ----------------------------------------------------------- local visS = pages["Visuals"].scroll section(visS, "ESP HIGHLIGHT") toggleRow(visS, "Enable ESP", "espEnabled") toggleRow(visS, "Show Players", "espShowPlayers") toggleRow(visS, "Show NPCs", "espShowNPCs") sliderRow(visS, "ESP Max Distance", "espMaxDistance", 100, 10000, " studs") section(visS, "BOX ESP") toggleRow(visS, "Enable Box ESP", "boxEnabled") colorRow(visS, "Box Color", "boxColor") section(visS, "SKELETON") toggleRow(visS, "Enable Skeleton", "skeletonEnabled") colorRow(visS, "Skeleton Color", "skeletonColor") section(visS, "TRACERS") toggleRow(visS, "Enable Tracers", "tracersEnabled") colorRow(visS, "Tracer Color", "tracersColor") section(visS, "CHAMS") toggleRow(visS, "Enable Chams", "chamsEnabled") colorRow(visS, "Chams Color", "chamsColor") section(visS, "HEAD DOT") toggleRow(visS, "Enable Head Dot", "headDotEnabled") colorRow(visS, "Head Dot Color", "headDotColor") section(visS, "NAMETAGS") toggleRow(visS, "Enable Nametags", "ntEnabled") toggleRow(visS, "Show Name", "ntShowName") toggleRow(visS, "Health Bar", "ntHealthBar") toggleRow(visS, "Show Distance", "ntShowDistance") sliderRow(visS, "Nametag Text Size", "ntTextSize", 10, 40, " px") sliderRow(visS, "Nametag Max Distance", "ntMaxDistance", 100, 10000, " studs") ----------------------------------------------------------- -- НАПОЛНЕНИЕ: PLAYERS ----------------------------------------------------------- local plrS = pages["Players"].scroll section(plrS, "PLAYER LIST") local playerListHolder = Instance.new("Frame") playerListHolder.Size = UDim2.new(1, 0, 0, 180) playerListHolder.BackgroundColor3 = T.bg2 playerListHolder.BorderSizePixel = 0 playerListHolder.Parent = plrS local plhStroke = Instance.new("UIStroke") plhStroke.Color = T.stroke plhStroke.Thickness = 1 plhStroke.Transparency = 0.4 plhStroke.Parent = playerListHolder local playerScroll = Instance.new("ScrollingFrame") playerScroll.Size = UDim2.new(1, -8, 1, -8) playerScroll.Position = UDim2.fromOffset(4, 4) playerScroll.BackgroundTransparency = 1 playerScroll.BorderSizePixel = 0 playerScroll.ScrollBarThickness = 2 playerScroll.ScrollBarImageColor3 = T.strokeHi playerScroll.CanvasSize = UDim2.fromOffset(0, 0) playerScroll.AutomaticCanvasSize = Enum.AutomaticSize.Y playerScroll.Parent = playerListHolder local playerList = Instance.new("UIListLayout") playerList.Padding = UDim.new(0, 4) playerList.SortOrder = Enum.SortOrder.LayoutOrder playerList.Parent = playerScroll section(plrS, "ACTIONS") local selectedPlayer = nil local selectedLabel = Instance.new("TextLabel") selectedLabel.Size = UDim2.new(1, 0, 0, 24) selectedLabel.BackgroundColor3 = T.bg2 selectedLabel.BorderSizePixel = 0 selectedLabel.Text = "Selected: —" selectedLabel.TextColor3 = T.textDim selectedLabel.TextSize = 11 selectedLabel.Font = Enum.Font.Gotham selectedLabel.Parent = plrS local slStroke = Instance.new("UIStroke") slStroke.Color = T.stroke slStroke.Thickness = 1 slStroke.Transparency = 0.4 slStroke.Parent = selectedLabel buttonRow(plrS, "Teleport To Player", function() if not selectedPlayer or not selectedPlayer.Character then return end local myChar = LocalPlayer.Character local myHRP = myChar and myChar:FindFirstChild("HumanoidRootPart") local targetHRP = selectedPlayer.Character:FindFirstChild("HumanoidRootPart") if myHRP and targetHRP then myHRP.CFrame = targetHRP.CFrame + Vector3.new(0, 3, 3) end end) buttonRow(plrS, "Bring Player To Me", function() if not selectedPlayer or not selectedPlayer.Character then return end local myChar = LocalPlayer.Character local myHRP = myChar and myChar:FindFirstChild("HumanoidRootPart") local targetHRP = selectedPlayer.Character:FindFirstChild("HumanoidRootPart") if myHRP and targetHRP then targetHRP.CFrame = myHRP.CFrame + Vector3.new(0, 3, 3) end end) buttonRow(plrS, "Freeze / Unfreeze", function() if not selectedPlayer or not selectedPlayer.Character then return end local hrp = selectedPlayer.Character:FindFirstChild("HumanoidRootPart") if hrp then hrp.Anchored = not hrp.Anchored end end) local function refreshPlayerList() for _, child in ipairs(playerScroll:GetChildren()) do if child:IsA("TextButton") then child:Destroy() end end for _, plr in ipairs(Players:GetPlayers()) do if plr ~= LocalPlayer then local row = Instance.new("TextButton") row.Size = UDim2.new(1, 0, 0, 26) row.BackgroundColor3 = T.bg3 row.BorderSizePixel = 0 row.Text = "" row.AutoButtonColor = false row.Parent = playerScroll local nameLbl = Instance.new("TextLabel") nameLbl.Size = UDim2.new(1, -70, 1, 0) nameLbl.Position = UDim2.fromOffset(8, 0) nameLbl.BackgroundTransparency = 1 nameLbl.Text = plr.Name nameLbl.TextColor3 = T.text nameLbl.TextSize = 11 nameLbl.Font = Enum.Font.Gotham nameLbl.TextXAlignment = Enum.TextXAlignment.Left nameLbl.Parent = row local hpLbl = Instance.new("TextLabel") hpLbl.Size = UDim2.fromOffset(56, 1) hpLbl.Position = UDim2.new(1, -60, 0, 0) hpLbl.BackgroundTransparency = 1 hpLbl.Text = "—" hpLbl.TextColor3 = T.ok hpLbl.TextSize = 10 hpLbl.Font = Enum.Font.GothamBold hpLbl.TextXAlignment = Enum.TextXAlignment.Right hpLbl.Parent = row task.spawn(function() while row.Parent do local hum = plr.Character and plr.Character:FindFirstChildOfClass("Humanoid") hpLbl.Text = hum and (math.floor(hum.Health) .. " HP") or "—" task.wait(0.5) end end) row.MouseButton1Click:Connect(function() playSound("click", 1.3) selectedPlayer = plr selectedLabel.Text = "Selected: " .. plr.Name selectedLabel.TextColor3 = T.accent end) end end end refreshPlayerList() Players.PlayerAdded:Connect(function() task.wait(0.5) refreshPlayerList() end) Players.PlayerRemoving:Connect(function() task.wait(0.3) refreshPlayerList() end) ----------------------------------------------------------- -- НАПОЛНЕНИЕ: MISC ----------------------------------------------------------- local miS = pages["Misc"].scroll section(miS, "UI") toggleRow(miS, "UI Sounds", "soundsEnabled") section(miS, "INFO") local infoLbl = Instance.new("TextLabel") infoLbl.Size = UDim2.new(1, 0, 0, 36) infoLbl.BackgroundColor3 = T.bg2 infoLbl.BorderSizePixel = 0 infoLbl.Text = "RightShift — меню · RMB — aim" infoLbl.TextColor3 = T.textDim infoLbl.TextSize = 11 infoLbl.Font = Enum.Font.Gotham infoLbl.TextWrapped = true infoLbl.Parent = miS local infoStroke = Instance.new("UIStroke") infoStroke.Color = T.stroke infoStroke.Thickness = 1 infoStroke.Transparency = 0.4 infoStroke.Parent = infoLbl ----------------------------------------------------------- -- ОБЩИЕ ФУНКЦИИ ----------------------------------------------------------- local function getAnchor(model) if not model then return nil end local head = model:FindFirstChild("Head") if head and head:IsA("BasePart") then return head end local hum = model:FindFirstChildOfClass("Humanoid") if hum and hum.RootPart then return hum.RootPart end local hrp = model:FindFirstChild("HumanoidRootPart") if hrp and hrp:IsA("BasePart") then return hrp end if model.PrimaryPart then return model.PrimaryPart end return model:FindFirstChildWhichIsA("BasePart", true) end local function getHealthColor(ratio) if ratio > 0.5 then return Color3.fromRGB(0, 220, 120):Lerp(Color3.fromRGB(255, 210, 60), (1 - ratio) * 2) else return Color3.fromRGB(255, 210, 60):Lerp(Color3.fromRGB(255, 60, 80), 1 - ratio * 2) end end local function isKnocked(hum) if not hum then return false end if hum.PlatformStand then return true end if hum:GetState() == Enum.HumanoidStateType.Dead then return true end return false end ----------------------------------------------------------- -- ТРЕКЕР: ESP / BOX / SKELETON / TRACER / CHAMS / HEAD DOT / NAMETAG ----------------------------------------------------------- local tracked = {} local function buildBox(model) local box = Instance.new("Frame") box.Name = "Dev_Box" box.BackgroundTransparency = 1 box.Visible = false box.ZIndex = 2 box.Parent = overlay local top = Instance.new("Frame") top.Name = "Top"; top.BorderSizePixel = 0 top.BackgroundColor3 = Settings.boxColor; top.Parent = box local bottom = Instance.new("Frame") bottom.Name = "Bottom"; bottom.BorderSizePixel = 0 bottom.BackgroundColor3 = Settings.boxColor; bottom.Parent = box local left = Instance.new("Frame") left.Name = "Left"; left.BorderSizePixel = 0 left.BackgroundColor3 = Settings.boxColor; left.Parent = box local right = Instance.new("Frame") right.Name = "Right"; right.BorderSizePixel = 0 right.BackgroundColor3 = Settings.boxColor; right.Parent = box return { frame = box, top = top, bottom = bottom, left = left, right = right } end local function buildTracer() local f = Instance.new("Frame") f.Name = "Dev_Tracer" f.BorderSizePixel = 0 f.BackgroundColor3 = Settings.tracersColor f.Visible = false f.ZIndex = 1 f.Parent = overlay return f end local function buildHeadDot() local f = Instance.new("Frame") f.Name = "Dev_HeadDot" f.Size = UDim2.fromOffset(8, 8) f.AnchorPoint = Vector2.new(0.5, 0.5) f.BorderSizePixel = 0 f.BackgroundColor3 = Settings.headDotColor f.Visible = false f.ZIndex = 3 f.Parent = overlay local c = Instance.new("UICorner"); c.CornerRadius = UDim.new(1, 0); c.Parent = f return f end local function buildSkeleton() local folder = Instance.new("Folder") folder.Name = "Dev_Skeleton" folder.Parent = overlay local lines = {} for i = 1, 15 do local l = Instance.new("Frame") l.BorderSizePixel = 0 l.BackgroundColor3 = Settings.skeletonColor l.Visible = false l.ZIndex = 2 l.Parent = overlay lines[i] = l end return lines end local function buildNametag(model) local anchor = getAnchor(model) if not anchor then return nil end local billboard = Instance.new("BillboardGui") billboard.Name = "Dev_Nametag" billboard.Adornee = anchor billboard.Size = UDim2.fromOffset(200, 50) billboard.StudsOffset = Vector3.new(0, 3, 0) billboard.AlwaysOnTop = true billboard.LightInfluence = 0 billboard.MaxDistance = 100000 billboard.Parent = model local root = Instance.new("Frame") root.Size = UDim2.fromScale(1, 1) root.BackgroundTransparency = 1 root.Parent = billboard local layout = Instance.new("UIListLayout") layout.FillDirection = Enum.FillDirection.Vertical layout.HorizontalAlignment = Enum.HorizontalAlignment.Center layout.VerticalAlignment = Enum.VerticalAlignment.Bottom layout.SortOrder = Enum.SortOrder.LayoutOrder layout.Padding = UDim.new(0, 2) layout.Parent = root local nameLabel = Instance.new("TextLabel") nameLabel.BackgroundTransparency = 1 nameLabel.AutomaticSize = Enum.AutomaticSize.XY nameLabel.Size = UDim2.fromOffset(0, Settings.ntTextSize + 4) nameLabel.Text = "Player" nameLabel.TextColor3 = Color3.new(1, 1, 1) nameLabel.TextSize = Settings.ntTextSize nameLabel.Font = Enum.Font.GothamBold nameLabel.TextStrokeTransparency = 0 nameLabel.TextStrokeColor3 = Color3.new(0, 0, 0) nameLabel.LayoutOrder = 1 nameLabel.Parent = root local barHolder = Instance.new("Frame") barHolder.Size = UDim2.fromOffset(100, 4) barHolder.BackgroundColor3 = Color3.fromRGB(20, 20, 20) barHolder.BorderSizePixel = 0 barHolder.LayoutOrder = 2 barHolder.Parent = root local barFill = Instance.new("Frame") barFill.Size = UDim2.fromScale(1, 1) barFill.BackgroundColor3 = Color3.fromRGB(0, 220, 120) barFill.BorderSizePixel = 0 barFill.Parent = barHolder local distLabel = Instance.new("TextLabel") distLabel.BackgroundTransparency = 1 distLabel.AutomaticSize = Enum.AutomaticSize.XY distLabel.Size = UDim2.fromOffset(0, Settings.ntTextSize - 4) distLabel.Text = "0m" distLabel.TextColor3 = Color3.fromRGB(180, 180, 200) distLabel.TextSize = math.max(Settings.ntTextSize - 4, 10) distLabel.Font = Enum.Font.Gotham distLabel.TextStrokeTransparency = 0 distLabel.TextStrokeColor3 = Color3.new(0, 0, 0) distLabel.LayoutOrder = 3 distLabel.Parent = root return { billboard = billboard, nameLabel = nameLabel, barHolder = barHolder, barFill = barFill, distLabel = distLabel } end local function addESP(model) if tracked[model] then return end if not getAnchor(model) then return end local highlight = Instance.new("Highlight") highlight.Name = "Dev_HL" highlight.Adornee = model highlight.FillColor = Color3.fromRGB(255, 60, 60) highlight.FillTransparency = 0.5 highlight.OutlineColor = Color3.new(1, 1, 1) highlight.OutlineTransparency = 0 highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop highlight.Parent = model local chams = Instance.new("Highlight") chams.Name = "Dev_Chams" chams.Adornee = model chams.FillColor = Settings.chamsColor chams.FillTransparency = 0.15 chams.OutlineColor = Settings.chamsColor chams.OutlineTransparency = 0.3 chams.DepthMode = Enum.HighlightDepthMode.Occluded chams.Enabled = Settings.chamsEnabled chams.Parent = model local tag = buildNametag(model) local box = buildBox(model) local tracer = buildTracer() local headDot = buildHeadDot() local skeleton = buildSkeleton() tracked[model] = { highlight = highlight, chams = chams, tag = tag, box = box, tracer = tracer, headDot = headDot, skeleton = skeleton, } end local function removeESP(model) local data = tracked[model] if not data then return end if data.highlight then data.highlight:Destroy() end if data.chams then data.chams:Destroy() end if data.tag and data.tag.billboard then data.tag.billboard:Destroy() end if data.box and data.box.frame then data.box.frame:Destroy() end if data.tracer then data.tracer:Destroy() end if data.headDot then data.headDot:Destroy() end if data.skeleton then for _, l in ipairs(data.skeleton) do l:Destroy() end end tracked[model] = nil end task.spawn(function() while task.wait(0.3) do local wanted = {} if Settings.espShowPlayers then for _, plr in ipairs(Players:GetPlayers()) do if plr ~= LocalPlayer and plr.Character and plr.Character.Parent then wanted[plr.Character] = true end end end if Settings.espShowNPCs then for _, obj in ipairs(Workspace:GetChildren()) do if obj:IsA("Model") and obj:FindFirstChildOfClass("Humanoid") then local isPlayer = false for _, plr in ipairs(Players:GetPlayers()) do if plr.Character == obj then isPlayer = true break end end if not isPlayer then wanted[obj] = true end end end end for model in pairs(wanted) do if not tracked[model] then local hum = model:FindFirstChildOfClass("Humanoid") if hum and hum.Health > 0 then addESP(model) end end end for model in pairs(tracked) do if not model.Parent or not wanted[model] then removeESP(model) end end end end) -- Рендер визуалов RunService.RenderStepped:Connect(function() local localChar = LocalPlayer.Character local localHRP = localChar and localChar:FindFirstChild("HumanoidRootPart") if not localHRP or not Camera then return end local viewport = Camera.ViewportSize for model, data in pairs(tracked) do local anchor = getAnchor(model) local hum = model:FindFirstChildOfClass("Humanoid") if not anchor or not hum or hum.Health <= 0 then if data.highlight then data.highlight.Enabled = false end if data.chams then data.chams.Enabled = false end if data.tag then data.tag.billboard.Enabled = false end if data.box then data.box.frame.Visible = false end if data.tracer then data.tracer.Visible = false end if data.headDot then data.headDot.Visible = false end if data.skeleton then for _, l in ipairs(data.skeleton) do l.Visible = false end end else local distance = (anchor.Position - localHRP.Position).Magnitude if data.highlight then data.highlight.Enabled = Settings.espEnabled and distance <= Settings.espMaxDistance end if data.chams then data.chams.Enabled = Settings.chamsEnabled data.chams.FillColor = Settings.chamsColor data.chams.OutlineColor = Settings.chamsColor end -- BOX ESP if data.box then if Settings.boxEnabled and distance <= Settings.espMaxDistance then local head = model:FindFirstChild("Head") or anchor local hrp = model:FindFirstChild("HumanoidRootPart") or anchor local headScreen, headOnS = Camera:WorldToViewportPoint(head.Position + Vector3.new(0, 0.5, 0)) local footPos = hrp.Position - Vector3.new(0, 3, 0) local footScreen, footOnS = Camera:WorldToViewportPoint(footPos) if headOnS and footOnS and headScreen.Z > 0 and footScreen.Z > 0 then local topX, topY = headScreen.X, headScreen.Y local botX, botY = footScreen.X, footScreen.Y local boxH = math.abs(botY - topY) local boxW = boxH * 0.55 local centerX = (topX + botX) / 2 local leftX = centerX - boxW / 2 local rightX = centerX + boxW / 2 local topYy = math.min(topY, botY) local botYy = math.max(topY, botY) data.box.frame.Visible = true data.box.frame.Position = UDim2.fromOffset(leftX, topYy) data.box.frame.Size = UDim2.fromOffset(boxW, botYy - topYy) data.box.top.Position = UDim2.fromOffset(0, 0) data.box.top.Size = UDim2.new(1, 0, 0, 1) data.box.bottom.Position = UDim2.new(0, 0, 1, -1) data.box.bottom.Size = UDim2.new(1, 0, 0, 1) data.box.left.Position = UDim2.fromOffset(0, 0) data.box.left.Size = UDim2.new(0, 1, 1, 0) data.box.right.Position = UDim2.new(1, -1, 0, 0) data.box.right.Size = UDim2.new(0, 1, 1, 0) data.box.top.BackgroundColor3 = Settings.boxColor data.box.bottom.BackgroundColor3 = Settings.boxColor data.box.left.BackgroundColor3 = Settings.boxColor data.box.right.BackgroundColor3 = Settings.boxColor else data.box.frame.Visible = false end else data.box.frame.Visible = false end end -- TRACERS if data.tracer then if Settings.tracersEnabled and distance <= Settings.espMaxDistance then local sp, onS = Camera:WorldToViewportPoint(anchor.Position) if onS and sp.Z > 0 then local fromX = viewport.X / 2 local fromY = viewport.Y local toX, toY = sp.X, sp.Y local dx = toX - fromX local dy = toY - fromY local len = math.sqrt(dx * dx + dy * dy) local angle = math.deg(math.atan2(dy, dx)) data.tracer.Visible = true data.tracer.Position = UDim2.fromOffset(fromX, fromY) data.tracer.Size = UDim2.fromOffset(len, 1) data.tracer.Rotation = angle data.tracer.BackgroundColor3 = Settings.tracersColor data.tracer.AnchorPoint = Vector2.new(0, 0.5) else data.tracer.Visible = false end else data.tracer.Visible = false end end -- HEAD DOT if data.headDot then if Settings.headDotEnabled and distance <= Settings.espMaxDistance then local head = model:FindFirstChild("Head") if head then local sp, onS = Camera:WorldToViewportPoint(head.Position) if onS and sp.Z > 0 then data.headDot.Visible = true data.headDot.Position = UDim2.fromOffset(sp.X, sp.Y) data.headDot.BackgroundColor3 = Settings.headDotColor else data.headDot.Visible = false end else data.headDot.Visible = false end else data.headDot.Visible = false end end -- SKELETON (упрощённый: голова + торс + ноги) if data.skeleton then if Settings.skeletonEnabled and distance <= Settings.espMaxDistance then local parts = { ["Head"] = model:FindFirstChild("Head"), ["UpperTorso"] = model:FindFirstChild("UpperTorso") or model:FindFirstChild("Torso"), ["LowerTorso"] = model:FindFirstChild("LowerTorso"), ["LeftHand"] = model:FindFirstChild("LeftHand") or model:FindFirstChild("Left Arm"), ["RightHand"] = model:FindFirstChild("RightHand") or model:FindFirstChild("Right Arm"), ["LeftFoot"] = model:FindFirstChild("LeftFoot") or model:FindFirstChild("Left Leg"), ["RightFoot"] = model:FindFirstChild("RightFoot") or model:FindFirstChild("Right Leg"), } local connections = { { "Head", "UpperTorso" }, { "UpperTorso", "LowerTorso" }, { "UpperTorso", "LeftHand" }, { "UpperTorso", "RightHand" }, { "LowerTorso", "LeftFoot" }, { "LowerTorso", "RightFoot" }, } for i, line in ipairs(data.skeleton) do line.Visible = false end local lineIdx = 0 for _, conn in ipairs(connections) do local a = parts[conn[1]] local b = parts[conn[2]] if a and b then local spA, onA = Camera:WorldToViewportPoint(a.Position) local spB, onB = Camera:WorldToViewportPoint(b.Position) if onA and onB and spA.Z > 0 and spB.Z > 0 then lineIdx += 1 local line = data.skeleton[lineIdx] if line then local dx = spB.X - spA.X local dy = spB.Y - spA.Y local len = math.sqrt(dx * dx + dy * dy) local angle = math.deg(math.atan2(dy, dx)) line.Visible = true line.Position = UDim2.fromOffset(spA.X, spA.Y) line.Size = UDim2.fromOffset(len, 1) line.Rotation = angle line.AnchorPoint = Vector2.new(0, 0.5) line.BackgroundColor3 = Settings.skeletonColor end end end end else for _, l in ipairs(data.skeleton) do l.Visible = false end end end -- NAMETAG if data.tag then local v = Settings.ntEnabled and distance <= Settings.ntMaxDistance data.tag.billboard.Enabled = v if v then local displayName = model.Name for _, plr in ipairs(Players:GetPlayers()) do if plr.Character == model then displayName = plr.DisplayName break end end data.tag.nameLabel.Visible = Settings.ntShowName if Settings.ntShowName then data.tag.nameLabel.Text = displayName data.tag.nameLabel.TextSize = Settings.ntTextSize end local hpRatio = math.clamp(hum.Health / math.max(hum.MaxHealth, 1), 0, 1) data.tag.barHolder.Visible = Settings.ntHealthBar if Settings.ntHealthBar then data.tag.barFill.Size = UDim2.fromScale(hpRatio, 1) data.tag.barFill.BackgroundColor3 = getHealthColor(hpRatio) end data.tag.distLabel.Visible = Settings.ntShowDistance if Settings.ntShowDistance then data.tag.distLabel.Text = math.floor(distance) .. "m" end end end end end end) ----------------------------------------------------------- -- AIM ----------------------------------------------------------- local aimState = { held = false, active = false, activatedAt = 0, releasedAt = 0, stickyTarget = nil, } local function getAimKey() local map = { RMB = Enum.UserInputType.MouseButton2, LMB = Enum.UserInputType.MouseButton1, E = Enum.KeyCode.E, Q = Enum.KeyCode.Q, Shift = Enum.KeyCode.LeftShift, } return map[Settings.aimKey] or Enum.UserInputType.MouseButton2 end UserInputService.InputBegan:Connect(function(input, gp) if gp then return end local key = getAimKey() local match = (input.UserInputType == key) if not match and typeof(key) == "EnumItem" then match = (input.KeyCode == key) end if match then if Settings.aimToggleMode then aimState.active = not aimState.active if aimState.active then aimState.activatedAt = tick() end else aimState.held = true aimState.active = true aimState.activatedAt = tick() end end end) UserInputService.InputEnded:Connect(function(input) local key = getAimKey() local match = (input.UserInputType == key) if not match and typeof(key) == "EnumItem" then match = (input.KeyCode == key) end if match then if not Settings.aimToggleMode then aimState.held = false aimState.active = false aimState.releasedAt = tick() end end end) local function isVisible(part) if not Camera then return false end local params = RaycastParams.new() params.FilterType = Enum.RaycastFilterType.Exclude local ignore = {} if LocalPlayer.Character then table.insert(ignore, LocalPlayer.Character) end if part.Parent then table.insert(ignore, part.Parent) end params.FilterDescendantsInstances = ignore local res = Workspace:Raycast(Camera.CFrame.Position, part.Position - Camera.CFrame.Position, params) return res == nil end local function pickHitbox(model, mousePos) local primary = Settings.aimPart local fallback = Settings.aimFallbackPart if primary == "Head" then return model:FindFirstChild("Head") or model:FindFirstChild(fallback) or getAnchor(model) elseif primary == "UpperTorso" then return model:FindFirstChild("UpperTorso") or model:FindFirstChild("Torso") or model:FindFirstChild(fallback) or getAnchor(model) elseif primary == "HumanoidRootPart" then return model:FindFirstChild("HumanoidRootPart") or model:FindFirstChild(fallback) or getAnchor(model) elseif primary == "Random" then local candidates = {} for _, n in ipairs({ "Head", "UpperTorso", "Torso", "HumanoidRootPart", "LowerTorso" }) do local p = model:FindFirstChild(n) if p and p:IsA("BasePart") then table.insert(candidates, p) end end if #candidates > 0 then return candidates[math.random(1, #candidates)] end return getAnchor(model) else local best, bestD = nil, math.huge for _, n in ipairs({ "Head", "UpperTorso", "Torso", "HumanoidRootPart", "LowerTorso" }) do local p = model:FindFirstChild(n) if p and p:IsA("BasePart") then local sp, onS = Camera:WorldToViewportPoint(p.Position) if onS then local d = (Vector2.new(sp.X, sp.Y) - mousePos).Magnitude if d < bestD then bestD = d; best = p end end end end return best or getAnchor(model) end end local function getBestTarget() if not Camera then return nil end local mousePos = UserInputService:GetMouseLocation() local myRoot = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart") local candidates = {} for _, plr in ipairs(Players:GetPlayers()) do if plr ~= LocalPlayer and plr.Character then local hum = plr.Character:FindFirstChildOfClass("Humanoid") local hrp = plr.Character:FindFirstChild("HumanoidRootPart") if hum and hum.Health > 0 and hrp then local teamSkip = Settings.aimTeamCheck and plr.Team and LocalPlayer.Team and plr.Team == LocalPlayer.Team local knockedSkip = Settings.aimIgnoreKnocked and isKnocked(hum) if not teamSkip and not knockedSkip then local dist3D = myRoot and (hrp.Position - myRoot.Position).Magnitude or (hrp.Position - Camera.CFrame.Position).Magnitude if dist3D <= Settings.aimMaxDistance and dist3D >= Settings.aimMinDistance then local part = pickHitbox(plr.Character, mousePos) if part then local sp, onS = Camera:WorldToViewportPoint(part.Position) if onS and sp.Z > 0 then local fd = (Vector2.new(sp.X, sp.Y) - mousePos).Magnitude if fd <= Settings.aimFOV then if (not Settings.aimWallCheck) or isVisible(part) then table.insert(candidates, { part = part, hum = hum, fovDist = fd, dist3D = dist3D, health = hum.Health, }) end end end end end end end end end if #candidates == 0 then aimState.stickyTarget = nil return nil end if Settings.aimSticky and aimState.stickyTarget then for _, c in ipairs(candidates) do if c.part == aimState.stickyTarget then return c end end aimState.stickyTarget = nil end local prio = Settings.aimTargetPriority table.sort(candidates, function(a, b) if prio == "Distance" then return a.dist3D < b.dist3D elseif prio == "Health" then return a.health < b.health else return a.fovDist < b.fovDist end end) local chosen = candidates[1] aimState.stickyTarget = chosen.part return chosen end local function smoothAlpha(dt, smooth, curve) local base = math.clamp((101 - math.clamp(smooth, 1, 100)) / 100 * (dt * 60), 0, 1) if curve == "EaseOut" then return 1 - (1 - base) ^ 2 elseif curve == "EaseIn" then return base ^ 2 else return base end end RunService.RenderStepped:Connect(function(dt) if not Camera then return end -- FOV визуал if Settings.aimShowFOV and Settings.aimEnabled then fovCircle.Visible = true local m = UserInputService:GetMouseLocation() fovCircle.Position = UDim2.fromOffset(m.X, m.Y) local d = Settings.aimFOV * 2 fovCircle.Size = UDim2.fromOffset(d, d) fovStroke.Color = Settings.aimFOVColor fovStroke.Thickness = Settings.aimFOVThickness if Settings.aimFOVFill then fovCircle.BackgroundTransparency = 0.85 fovCircle.BackgroundColor3 = Settings.aimFOVColor else fovCircle.BackgroundTransparency = 1 end else fovCircle.Visible = false end local now = tick() local active = aimState.active if active and Settings.aimDelay > 0 then if now - aimState.activatedAt < Settings.aimDelay / 1000 then active = false end end if not active and Settings.aimReleaseDelay > 0 then if now - aimState.releasedAt < Settings.aimReleaseDelay / 1000 then active = true end end if not Settings.aimEnabled or not active then return end local target = getBestTarget() if not target then return end if target.fovDist <= Settings.aimDeadzone then return end -- Silent: только удерживаем цель в состоянии, камеру не двигаем if Settings.aimMode == "Silent" then return end -- Camera: плавно наводим local part = target.part local aimPos = part.Position if Settings.aimPrediction then local vel = part.AssemblyLinearVelocity if vel and vel.Magnitude > 0.1 then local dist = (part.Position - Camera.CFrame.Position).Magnitude aimPos = part.Position + vel * (dist / Settings.aimPredictionAmount) end end local goal = CFrame.lookAt(Camera.CFrame.Position, aimPos) if Settings.aimSmooth <= 1 then Camera.CFrame = goal else local alpha = smoothAlpha(dt, Settings.aimSmooth, Settings.aimSmoothCurve) Camera.CFrame = Camera.CFrame:Lerp(goal, alpha) end end) ----------------------------------------------------------- -- ОТКРЫТИЕ / ЗАКРЫТИЕ МЕНЮ ----------------------------------------------------------- local menuOpen = false local busy = false local function openMenu() if menuOpen or busy then return end busy = true menuOpen = true playSound("open") main.Visible = true uiScale.Scale = 0.85 main.GroupTransparency = 1 tw(uiScale, { Scale = 1 }, 0.32, Enum.EasingStyle.Back, Enum.EasingDirection.Out) local t = tw(main, { GroupTransparency = 0 }, 0.25, Enum.EasingStyle.Quad, Enum.EasingDirection.Out) t.Completed:Connect(function() busy = false end) openBtn.Visible = false task.delay(0.35, function() busy = false end) end local function closeMenu() if (not menuOpen) or busy then return end busy = true menuOpen = false playSound("close") tw(uiScale, { Scale = 0.85 }, 0.22, Enum.EasingStyle.Quint, Enum.EasingDirection.In) local t = tw(main, { GroupTransparency = 1 }, 0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.In) t.Completed:Connect(function() if not menuOpen then main.Visible = false end busy = false end) openBtn.Visible = true task.delay(0.25, function() busy = false end) end UserInputService.InputBegan:Connect(function(input, gp) if gp then return end if input.KeyCode == Enum.KeyCode.RightShift then if menuOpen then closeMenu() else openMenu() end end end) closeBtn.MouseButton1Click:Connect(function() playSound("click", 0.9) closeMenu() end) openBtn.MouseButton1Click:Connect(function() playSound("click", 1.1) openMenu() end) do local dragging, dragStart, startPos = false, nil, nil titleBar.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startPos = main.Position end end) UserInputService.InputChanged:Connect(function(input) if dragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then local d = input.Position - dragStart main.Position = UDim2.new( startPos.X.Scale, startPos.X.Offset + d.X, startPos.Y.Scale, startPos.Y.Offset + d.Y ) end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = false end end) end ----------------------------------------------------------- -- ИНИЦИАЛИЗАЦИЯ ----------------------------------------------------------- for _, p in pairs(pages) do p.canvas.Visible = false end pages["Aimbot"].canvas.Visible = true pages["Aimbot"].canvas.GroupTransparency = 0 currentTab = "Aimbot" for n, data in pairs(tabButtons) do local isActive = (n == "Aimbot") data.btn.BackgroundTransparency = isActive and 0 or 1 data.btn.BackgroundColor3 = T.bg3 data.lbl.TextColor3 = isActive and T.text or T.textDim data.icon.TextColor3 = isActive and T.accent or T.textDim end sideIndicator.Position = UDim2.fromOffset(0, 42) task.wait(0.2) openMenu()