Created
July 24, 2026 15:00
-
-
Save DuyNgao2306/2a0e16fe25dd7b971518315c95a10a17 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| -- [[ SMART MACRO - ANTI-BAN & TIME TRACKING VERSION ]] -- | |
| local Players = game:GetService("Players") | |
| local UserInputService = game:GetService("UserInputService") | |
| local LocalPlayer = Players.LocalPlayer | |
| local PlayerGui = LocalPlayer:WaitForChild("PlayerGui") | |
| -- Khởi tạo seed ngẫu nhiên cho thuật toán chống ban | |
| math.randomseed(os.time()) | |
| -- Dọn dẹp UI cũ nếu tồn tại | |
| if PlayerGui:FindFirstChild("MacroSystemGui") then | |
| PlayerGui.MacroSystemGui:Destroy() | |
| end | |
| local recordedClicks = {} | |
| local MAX_CLICKS = 200 | |
| local isSelecting = false | |
| local isRunning = false | |
| local lastClickTime = 0 | |
| local connections = {} | |
| -- 1. TẠO GIAO DIỆN UI | |
| local ScreenGui = Instance.new("ScreenGui") | |
| ScreenGui.Name = "MacroSystemGui" | |
| ScreenGui.ResetOnSpawn = false | |
| ScreenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling | |
| ScreenGui.DisplayOrder = 999 | |
| ScreenGui.Parent = PlayerGui | |
| local MainFrame = Instance.new("Frame") | |
| MainFrame.Name = "MainFrame" | |
| MainFrame.Size = UDim2.new(0, 300, 0, 220) | |
| MainFrame.Position = UDim2.new(0.5, -150, 0.3, 0) | |
| MainFrame.BackgroundColor3 = Color3.fromRGB(25, 27, 38) | |
| MainFrame.BorderSizePixel = 0 | |
| MainFrame.Active = true | |
| MainFrame.Parent = ScreenGui | |
| local UICorner = Instance.new("UICorner") | |
| UICorner.CornerRadius = UDim.new(0, 10) | |
| UICorner.Parent = MainFrame | |
| local UIStroke = Instance.new("UIStroke") | |
| UIStroke.Color = Color3.fromRGB(60, 65, 85) | |
| UIStroke.Thickness = 1.5 | |
| UIStroke.Parent = MainFrame | |
| local Header = Instance.new("Frame") | |
| Header.Size = UDim2.new(1, 0, 0, 38) | |
| Header.BackgroundColor3 = Color3.fromRGB(35, 38, 52) | |
| Header.BorderSizePixel = 0 | |
| Header.Parent = MainFrame | |
| local HeaderCorner = Instance.new("UICorner") | |
| HeaderCorner.CornerRadius = UDim.new(0, 10) | |
| HeaderCorner.Parent = Header | |
| local Title = Instance.new("TextLabel") | |
| Title.Size = UDim2.new(1, -50, 1, 0) | |
| Title.Position = UDim2.new(0, 12, 0, 0) | |
| Title.BackgroundTransparency = 1 | |
| Title.Text = "🛡️ SMART MACRO (SAFE)" | |
| Title.TextColor3 = Color3.fromRGB(255, 255, 255) | |
| Title.TextSize = 13 | |
| Title.Font = Enum.Font.GothamBold | |
| Title.TextXAlignment = Enum.TextXAlignment.Left | |
| Title.Parent = Header | |
| local CloseBtn = Instance.new("TextButton") | |
| CloseBtn.Size = UDim2.new(0, 30, 0, 30) | |
| CloseBtn.Position = UDim2.new(1, -5, 0.5, 0) | |
| CloseBtn.AnchorPoint = Vector2.new(1, 0.5) | |
| CloseBtn.BackgroundTransparency = 1 | |
| CloseBtn.Text = "✕" | |
| CloseBtn.TextColor3 = Color3.fromRGB(255, 71, 87) | |
| CloseBtn.TextSize = 18 | |
| CloseBtn.Font = Enum.Font.GothamBold | |
| CloseBtn.ZIndex = 10 | |
| CloseBtn.Parent = Header | |
| local StatusLabel = Instance.new("TextLabel") | |
| StatusLabel.Size = UDim2.new(1, -24, 0, 20) | |
| StatusLabel.Position = UDim2.new(0, 12, 0, 48) | |
| StatusLabel.BackgroundTransparency = 1 | |
| StatusLabel.Text = "Trạng thái: Đang nghỉ" | |
| StatusLabel.TextColor3 = Color3.fromRGB(180, 185, 200) | |
| StatusLabel.TextSize = 12 | |
| StatusLabel.Font = Enum.Font.GothamMedium | |
| StatusLabel.TextXAlignment = Enum.TextXAlignment.Left | |
| StatusLabel.Parent = MainFrame | |
| local CountLabel = Instance.new("TextLabel") | |
| CountLabel.Size = UDim2.new(1, -24, 0, 20) | |
| CountLabel.Position = UDim2.new(0, 12, 0, 68) | |
| CountLabel.BackgroundTransparency = 1 | |
| CountLabel.Text = "Đã lưu: 0 / " .. MAX_CLICKS | |
| CountLabel.TextColor3 = Color3.fromRGB(130, 135, 150) | |
| CountLabel.TextSize = 11 | |
| CountLabel.Font = Enum.Font.Gotham | |
| CountLabel.TextXAlignment = Enum.TextXAlignment.Left | |
| CountLabel.Parent = MainFrame | |
| local function createButton(name, text, pos, size, color) | |
| local btn = Instance.new("TextButton") | |
| btn.Name = name | |
| btn.Size = size | |
| btn.Position = pos | |
| btn.BackgroundColor3 = color | |
| btn.Text = text | |
| btn.TextColor3 = Color3.fromRGB(255, 255, 255) | |
| btn.Font = Enum.Font.GothamBold | |
| btn.TextSize = 13 | |
| btn.ZIndex = 10 | |
| btn.Parent = MainFrame | |
| local corner = Instance.new("UICorner") | |
| corner.CornerRadius = UDim.new(0, 8) | |
| corner.Parent = btn | |
| return btn | |
| end | |
| local SelectBtn = createButton("SelectBtn", "Bắt đầu chọn", UDim2.new(0, 12, 0, 98), UDim2.new(1, -24, 0, 34), Color3.fromRGB(108, 92, 231)) | |
| local StartBtn = createButton("StartBtn", "Chạy Macro", UDim2.new(0, 12, 0, 140), UDim2.new(0, 175, 0, 34), Color3.fromRGB(0, 184, 148)) | |
| local ClearBtn = createButton("ClearBtn", "Xóa", UDim2.new(0, 195, 0, 140), UDim2.new(0, 93, 0, 34), Color3.fromRGB(225, 112, 85)) | |
| local function bindClick(button, callback) | |
| table.insert(connections, button.Activated:Connect(callback)) | |
| end | |
| -- 2. KÉO THẢ UI | |
| local dragging, dragStart, startPos | |
| table.insert(connections, Header.InputBegan:Connect(function(input) | |
| if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then | |
| dragging = true | |
| dragStart = input.Position | |
| startPos = MainFrame.Position | |
| end | |
| end)) | |
| table.insert(connections, UserInputService.InputChanged:Connect(function(input) | |
| if dragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then | |
| local delta = input.Position - dragStart | |
| MainFrame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) | |
| end | |
| end)) | |
| table.insert(connections, UserInputService.InputEnded:Connect(function(input) | |
| if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then | |
| dragging = false | |
| end | |
| end)) | |
| local function isClickingOnMacroUI(clickPos) | |
| local framePos = MainFrame.AbsolutePosition | |
| local frameSize = MainFrame.AbsoluteSize | |
| return clickPos.X >= framePos.X and clickPos.X <= (framePos.X + frameSize.X) and | |
| clickPos.Y >= framePos.Y and clickPos.Y <= (framePos.Y + frameSize.Y) | |
| end | |
| -- 3. LOGIC GHI NHẬN & CHỐNG BAN | |
| local function stopRunning() | |
| isRunning = false | |
| StartBtn.Text = "Chạy Macro" | |
| StartBtn.BackgroundColor3 = Color3.fromRGB(0, 184, 148) | |
| StatusLabel.Text = "Trạng thái: Đã dừng" | |
| StatusLabel.TextColor3 = Color3.fromRGB(180, 185, 200) | |
| end | |
| local function stopSelecting() | |
| isSelecting = false | |
| SelectBtn.Text = "Bắt đầu chọn" | |
| SelectBtn.BackgroundColor3 = Color3.fromRGB(108, 92, 231) | |
| StatusLabel.Text = "Trạng thái: Hoàn tất chọn" | |
| StatusLabel.TextColor3 = Color3.fromRGB(180, 185, 200) | |
| end | |
| -- GHI NHẬN VỊ TRÍ, ĐỐI TƯỢNG VÀ THỜI GIAN | |
| table.insert(connections, UserInputService.InputBegan:Connect(function(input) | |
| if not isSelecting then return end | |
| if isClickingOnMacroUI(input.Position) then return end | |
| if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then | |
| if #recordedClicks >= MAX_CLICKS then | |
| StatusLabel.Text = "Lỗi: Đạt giới hạn " .. MAX_CLICKS .. " điểm!" | |
| StatusLabel.TextColor3 = Color3.fromRGB(255, 118, 117) | |
| return | |
| end | |
| local now = os.clock() | |
| -- Ghi nhận khoảng thời gian nghỉ giữa các lần click | |
| local delayTime = (#recordedClicks > 0) and math.max(now - lastClickTime, 0.05) or 0.1 | |
| lastClickTime = now | |
| -- Tìm nút UI tại điểm vừa click | |
| local posVector = Vector2.new(input.Position.X, input.Position.Y) | |
| local guiObjects = PlayerGui:GetGuiObjectsAtPosition(posVector.X, posVector.Y) | |
| local targetButton = nil | |
| for _, gui in ipairs(guiObjects) do | |
| if not gui:IsDescendantOf(ScreenGui) and (gui:IsA("TextButton") or gui:IsA("ImageButton")) then | |
| targetButton = gui | |
| break | |
| end | |
| end | |
| table.insert(recordedClicks, { | |
| button = targetButton, | |
| delay = delayTime | |
| }) | |
| CountLabel.Text = "Đã lưu: " .. #recordedClicks .. " / " .. MAX_CLICKS | |
| -- HIỂN THỊ THỜI GIAN TRÊN BẢNG (Giống Auto Click) | |
| local formattedTime = string.format("%.2f", delayTime) | |
| if targetButton then | |
| StatusLabel.Text = "Ghi UI: " .. targetButton.Name .. " (Trễ " .. formattedTime .. "s)" | |
| else | |
| StatusLabel.Text = "Ghi: Click Tool (Trễ " .. formattedTime .. "s)" | |
| end | |
| StatusLabel.TextColor3 = Color3.fromRGB(253, 203, 110) | |
| end | |
| end)) | |
| -- SỰ KIỆN CÁC NÚT BẤM | |
| bindClick(SelectBtn, function() | |
| if isRunning then stopRunning() end | |
| isSelecting = not isSelecting | |
| if isSelecting then | |
| SelectBtn.Text = "Dừng chọn" | |
| SelectBtn.BackgroundColor3 = Color3.fromRGB(225, 112, 85) | |
| StatusLabel.Text = "Trạng thái: Đang thu thập khoảng cách click..." | |
| StatusLabel.TextColor3 = Color3.fromRGB(253, 203, 110) | |
| lastClickTime = os.clock() | |
| else | |
| stopSelecting() | |
| end | |
| end) | |
| bindClick(StartBtn, function() | |
| if isSelecting then stopSelecting() end | |
| if isRunning then stopRunning(); return end | |
| if #recordedClicks == 0 then | |
| StatusLabel.Text = "Lỗi: Chưa lưu điểm click nào!" | |
| StatusLabel.TextColor3 = Color3.fromRGB(255, 118, 117) | |
| return | |
| end | |
| isRunning = true | |
| StartBtn.Text = "Dừng Macro" | |
| StartBtn.BackgroundColor3 = Color3.fromRGB(214, 48, 49) | |
| StatusLabel.Text = "Trạng thái: Đang chạy & Tránh Ban..." | |
| StatusLabel.TextColor3 = Color3.fromRGB(85, 239, 196) | |
| -- VÒNG LẶP PHÁT LẠI VỚI CƠ CHẾ CHỐNG BAN (HUMANIZE) | |
| task.spawn(function() | |
| while isRunning do | |
| for _, data in ipairs(recordedClicks) do | |
| if not isRunning then break end | |
| -- BỘ LỌC CHỐNG BAN: Tạo độ trễ ngẫu nhiên (Jitter) từ -15ms đến +30ms | |
| -- Giúp thời gian click không bao giờ bằng nhau y hệt (Đánh lừa Anti-Cheat) | |
| local randomJitter = math.random(-15, 30) / 1000 | |
| local safeWait = math.max(data.delay + randomJitter, 0.05) -- Đảm bảo không quá nhanh | |
| task.wait(safeWait) | |
| if not isRunning then break end | |
| -- 1. Kích hoạt nút UI nếu có | |
| if data.button and data.button.Parent then | |
| pcall(function() | |
| if getconnections then | |
| for _, conn in ipairs(getconnections(data.button.Activated)) do | |
| conn:Fire() | |
| end | |
| end | |
| end) | |
| end | |
| -- 2. Tự động Activate Tool | |
| local character = LocalPlayer.Character | |
| if character then | |
| local tool = character:FindFirstChildOfClass("Tool") | |
| if tool then | |
| tool:Activate() | |
| end | |
| end | |
| end | |
| -- Nghỉ một chút trước khi lặp lại vòng lặp mới để tránh văng game | |
| task.wait(math.random(5, 15) / 100) | |
| end | |
| end) | |
| end) | |
| bindClick(ClearBtn, function() | |
| if isRunning then stopRunning() end | |
| if isSelecting then stopSelecting() end | |
| table.clear(recordedClicks) | |
| CountLabel.Text = "Đã lưu: 0 / " .. MAX_CLICKS | |
| StatusLabel.Text = "Trạng thái: Đã xóa toàn bộ" | |
| StatusLabel.TextColor3 = Color3.fromRGB(180, 185, 200) | |
| end) | |
| bindClick(CloseBtn, function() | |
| isRunning = false | |
| isSelecting = false | |
| for _, conn in ipairs(connections) do | |
| if conn.Connected then conn:Disconnect() end | |
| end | |
| table.clear(connections) | |
| ScreenGui:Destroy() | |
| end) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment