-- [[ 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 ]] --[[ UNIVERSAL AIMBOT | WALL CHECK | ESP | CHAT COMMANDS Префикс: ; или . | ;help — команды ]] if getgenv().UAimbot then pcall(function() getgenv().UAimbot.Unload() end) end local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UIS = game:GetService("UserInputService") local WS = game:GetService("Workspace") local LP = Players.LocalPlayer local Camera = WS.CurrentCamera local CFG = { Enabled = true, HoldKey = Enum.KeyCode.Q, ToggleMode = false, ToggleState = false, FOV = 120, Smooth = 1.2, WallCheck = true, TeamCheck = true, Prediction = 0.14, Part = "Head", MaxDistance = 1500, Circle = true, ESP = false, ESPKey = nil, } local Conns, Unloaded, Held, Target = {}, false, false, nil local ESPCache, CamOffset, OrigType, WasAiming = {}, Vector3.zero, nil, false local function log(m) print("[UA] " .. m) end local Circle if Drawing then Circle = Drawing.new("Circle") Circle.Thickness = 2 Circle.Filled = false Circle.Color = Color3.fromRGB(255, 60, 60) Circle.Visible = false end -- каскадный поиск хитбокса local PART_ORDER = { "Head", "UpperTorso", "Torso", "HumanoidRootPart", "LowerTorso" } local function getPart(char) local p = char:FindFirstChild(CFG.Part) if p and p:IsA("BasePart") then return p end for _, name in ipairs(PART_ORDER) do local x = char:FindFirstChild(name) if x and x:IsA("BasePart") then return x end end for _, d in ipairs(char:GetDescendants()) do if d:IsA("BasePart") and not d:FindFirstAncestorOfClass("Accessory") then return d end end end local function myOrigin() local c = LP.Character local h = c and (c:FindFirstChild("Head") or c:FindFirstChild("HumanoidRootPart")) return h and h.Position or Camera.CFrame.Position end local function isVisible(char, part) local origin = myOrigin() local dir = part.Position - origin if dir.Magnitude < 0.1 then return true end local rp = RaycastParams.new() rp.FilterType = Enum.RaycastFilterType.Exclude rp.FilterDescendantsInstances = { LP.Character, char } rp.IgnoreWater = true local res = WS:Raycast(origin + dir.Unit * 1.5, dir, rp) if not res then return true end return res.Instance.Transparency >= 1 end local function validPlayer(p, char, hum) if p == LP or not char or not hum then return false end if hum.Health <= 0 then return false end if CFG.TeamCheck and p.Team and LP.Team and p.Team == LP.Team then return false end return true end local function getTarget() local camPos = Camera.CFrame.Position local vp = Camera.ViewportSize local center = Vector2.new(vp.X / 2, vp.Y / 2) local best, bestPix = nil, CFG.FOV for _, p in ipairs(Players:GetPlayers()) do local char = p.Character local hum = char and char:FindFirstChildOfClass("Humanoid") if validPlayer(p, char, hum) then local part = getPart(char) if part then local dist = (part.Position - camPos).Magnitude local sp, onScreen = Camera:WorldToViewportPoint(part.Position) if dist <= CFG.MaxDistance and onScreen and sp.Z > 0 then local pix = (Vector2.new(sp.X, sp.Y) - center).Magnitude if pix <= bestPix then if (not CFG.WallCheck) or isVisible(char, part) then best, bestPix = { part = part, char = char }, pix end end end end end end return best end -- ===== AIM ===== local function aimStart() local head = LP.Character and LP.Character:FindFirstChild("Head") CamOffset = head and (Camera.CFrame.Position - head.Position) or Vector3.zero OrigType = Camera.CameraType Camera.CameraType = Enum.CameraType.Scriptable end local function aimStop() Camera.CameraType = OrigType or Enum.CameraType.Custom CamOffset = Vector3.zero end local function render(dt) if Unloaded then return end if Circle then local vp = Camera.ViewportSize Circle.Position = Vector2.new(vp.X / 2, vp.Y / 2) Circle.Radius = CFG.FOV Circle.Visible = CFG.Enabled and CFG.Circle end local aiming = CFG.Enabled and (CFG.ToggleMode and CFG.ToggleState or (not CFG.ToggleMode and Held)) if aiming ~= WasAiming then WasAiming = aiming if aiming then aimStart() else aimStop() end end if not aiming then Target = nil if Circle then Circle.Color = Color3.fromRGB(255, 60, 60) end return end Target = getTarget() if not Target then if Circle then Circle.Color = Color3.fromRGB(255, 60, 60) end return end if Circle then Circle.Color = Color3.fromRGB(60, 255, 90) end local part = Target.part local head = LP.Character and (LP.Character:FindFirstChild("Head") or LP.Character:FindFirstChild("HumanoidRootPart")) local camPos = (head and head.Position or Camera.CFrame.Position) + CamOffset local dest = part.Position + part.AssemblyLinearVelocity * CFG.Prediction if (dest - camPos).Magnitude < 0.05 then return end local goal = CFrame.new(camPos, dest) local alpha = math.clamp(1 - math.exp(-dt * 40 * math.max(CFG.Smooth, 0.05)), 0, 1) Camera.CFrame = Camera.CFrame:Lerp(goal, alpha) end -- ===== ESP ===== local function clearESP() for _, o in pairs(ESPCache) do for _, d in pairs(o) do pcall(function() d:Remove() end) end end ESPCache = {} end local function espFor(p) local t = ESPCache[p] if not t then t = { box = Drawing.new("Square"), name = Drawing.new("Text"), dist = Drawing.new("Text") } t.box.Thickness = 1 t.box.Filled = false t.name.Size = 14 t.name.Center = true t.name.Outline = true t.dist.Size = 12 t.dist.Center = true t.dist.Outline = true ESPCache[p] = t end return t end local function renderESP() if Unloaded or not Drawing then return end if not CFG.ESP then if next(ESPCache) then clearESP() end return end local camPos = Camera.CFrame.Position for _, p in ipairs(Players:GetPlayers()) do local char = p.Character local hum = char and char:FindFirstChildOfClass("Humanoid") local head = char and char:FindFirstChild("Head") local root = char and (char:FindFirstChild("HumanoidRootPart") or char:FindFirstChild("Torso") or char:FindFirstChild("UpperTorso")) local t = ESPCache[p] if p == LP or not char or not hum or hum.Health <= 0 or not head or not root then if t then t.box.Visible = false; t.name.Visible = false; t.dist.Visible = false end else t = espFor(p) local headSP, hv = Camera:WorldToViewportPoint(head.Position + Vector3.new(0, 0.7, 0)) local rootSP, rv = Camera:WorldToViewportPoint(root.Position - Vector3.new(0, 2.6, 0)) if hv and rv and headSP.Z > 0 then local h = math.abs(headSP.Y - rootSP.Y) local w = h * 0.55 local col = (p.Team and LP.Team and p.Team == LP.Team) and Color3.fromRGB(80, 200, 255) or Color3.fromRGB(255, 70, 70) t.box.Color = col t.box.Size = Vector2.new(w, h) t.box.Position = Vector2.new(headSP.X - w / 2, headSP.Y) t.box.Visible = true t.name.Color = col t.name.Text = string.format("%s [%d]", p.DisplayName, math.floor(hum.Health)) t.name.Position = Vector2.new(headSP.X, headSP.Y - 16) t.name.Visible = true t.dist.Color = Color3.fromRGB(235, 235, 235) t.dist.Text = string.format("%d m", math.floor((root.Position - camPos).Magnitude)) t.dist.Position = Vector2.new(headSP.X, headSP.Y + h + 2) t.dist.Visible = true else t.box.Visible = false; t.name.Visible = false; t.dist.Visible = false end end end for p, t in pairs(ESPCache) do if not p.Parent then t.box:Remove(); t.name:Remove(); t.dist:Remove() ESPCache[p] = nil end end end -- ===== Служебное ===== local function unload() Unloaded = true pcall(function() RunService:UnbindFromRenderStep("UAimbot") end) pcall(function() RunService:UnbindFromRenderStep("UAimbotESP") end) for _, c in ipairs(Conns) do pcall(function() c:Disconnect() end) end clearESP() if Circle then Circle:Remove() end aimStop() getgenv().UAimbot = nil log("Выгружен.") end local function parse(msg) local args = {} for w in msg:gmatch("%S+") do table.insert(args, w) end return (args[1] or ""):lower():gsub("^[;.]", ""), args end local function onChat(msg) local cmd, args = parse(msg) local n = tonumber(args[2]) if cmd == "help" then log(";aim | ;esp | ;espkey | ;speed <0.05-10> | ;fov | ;wall | ;team | ;pred <сек> | ;part head|torso|humanoidrootpart | ;maxdist <студы> | ;key | ;mode hold|toggle | ;circle | ;dbg | ;unload") elseif cmd == "aim" then CFG.Enabled = not CFG.Enabled; log("Aimbot: " .. tostring(CFG.Enabled)) elseif cmd == "esp" then CFG.ESP = not CFG.ESP; log("ESP: " .. tostring(CFG.ESP)) elseif cmd == "espkey" and args[2] then local k = Enum.KeyCode[args[2]:upper()] if k then CFG.ESPKey = k; log("ESP клавиша: " .. k.Name) end elseif cmd == "speed" or cmd == "smooth" then if n then CFG.Smooth = math.clamp(n, 0.05, 10); log("Скорость: " .. CFG.Smooth) end elseif cmd == "fov" and n then CFG.FOV = math.clamp(n, 10, 1000); log("FOV: " .. CFG.FOV) elseif cmd == "wall" then CFG.WallCheck = not CFG.WallCheck; log("WallCheck: " .. tostring(CFG.WallCheck)) elseif cmd == "team" then CFG.TeamCheck = not CFG.TeamCheck; log("TeamCheck: " .. tostring(CFG.TeamCheck)) elseif cmd == "pred" and n then CFG.Prediction = math.clamp(n, 0, 1); log("Prediction: " .. CFG.Prediction) elseif cmd == "part" and args[2] then CFG.Part = args[2]; log("Part: " .. CFG.Part) elseif cmd == "maxdist" and n then CFG.MaxDistance = n; log("MaxDist: " .. n) elseif cmd == "key" and args[2] then local k = Enum.KeyCode[args[2]:upper()] if k then CFG.HoldKey = k; log("Клавиша: " .. k.Name) end elseif cmd == "mode" and args[2] then CFG.ToggleMode = args[2]:lower() == "toggle"; log("Режим: " .. (CFG.ToggleMode and "toggle" or "hold")) elseif cmd == "circle" then CFG.Circle = not CFG.Circle; log("Круг: " .. tostring(CFG.Circle)) elseif cmd == "dbg" then local inFov, blocked = 0, 0 for _, p in ipairs(Players:GetPlayers()) do local c = p.Character local h = c and c:FindFirstChildOfClass("Humanoid") if validPlayer(p, c, h) then local pt = getPart(c) if pt then local sp, on = Camera:WorldToViewportPoint(pt.Position) if on and sp.Z > 0 then inFov = inFov + 1 if not isVisible(c, pt) then blocked = blocked + 1 end end end end end log(("Валидных на экране: %d | за стеной: %d | CameraType: %s"):format(inFov, blocked, tostring(Camera.CameraType))) elseif cmd == "unload" then unload() end end table.insert(Conns, UIS.InputBegan:Connect(function(input, gp) if gp or Unloaded then return end if input.KeyCode == CFG.HoldKey then Held = true if CFG.ToggleMode then CFG.ToggleState = not CFG.ToggleState end elseif CFG.ESPKey and input.KeyCode == CFG.ESPKey then CFG.ESP = not CFG.ESP log("ESP: " .. tostring(CFG.ESP)) end end)) table.insert(Conns, UIS.InputEnded:Connect(function(input) if input.KeyCode == CFG.HoldKey then Held = false end end)) table.insert(Conns, LP.Chatted:Connect(onChat)) table.insert(Conns, WS:GetPropertyChangedSignal("CurrentCamera"):Connect(function() if WS.CurrentCamera then Camera = WS.CurrentCamera end end)) RunService:BindToRenderStep("UAimbot", Enum.RenderPriority.Camera.Value + 1, render) RunService:BindToRenderStep("UAimbotESP", Enum.RenderPriority.Camera.Value + 2, renderESP) getgenv().UAimbot = { Unload = unload, CFG = CFG } log("Загружен. Q — лок. ;dbg — диагностика.")