Created
July 26, 2026 00:08
-
-
Save DuyNgao2306/d33d4a52510fa956f45a01f855153fc9 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
| -- [[ VISUAL AUTO CLICKER - ULTIMATE PERFECTED EDITION 10/10 ]] -- | |
| local Players = game:GetService("Players") | |
| local UserInputService = game:GetService("UserInputService") | |
| local VirtualInputManager = game:GetService("VirtualInputManager") | |
| local LocalPlayer = Players.LocalPlayer | |
| local PlayerGui = LocalPlayer:WaitForChild("PlayerGui") | |
| -- Xóa UI cũ nếu có để tránh trùng lặp | |
| if PlayerGui:FindFirstChild("MacroSystemGui") then | |
| PlayerGui.MacroSystemGui:Destroy() | |
| end | |
| local pointsData = {} | |
| local MAX_CLICKS = 100 | |
| local currentMode = "None" | |
| local isRunning = false | |
| local connections = {} | |
| local currentlyEditingPoint = nil | |
| -- Biến quản lý kéo thả chung toàn cục (Chống Memory Leak) | |
| local activeDraggingData = nil | |
| local dragStartPoint, startPosPoint | |
| -- ========================================== | |
| -- 1. TẠO GIAO DIỆN CHÍNH (UI) | |
| -- ========================================== | |
| local ScreenGui = Instance.new("ScreenGui") | |
| ScreenGui.Name = "MacroSystemGui" | |
| ScreenGui.ResetOnSpawn = false | |
| ScreenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling | |
| ScreenGui.DisplayOrder = 999 | |
| ScreenGui.IgnoreGuiInset = true | |
| ScreenGui.Parent = PlayerGui | |
| local PointsFolder = Instance.new("Folder") | |
| PointsFolder.Name = "PointsFolder" | |
| PointsFolder.Parent = ScreenGui | |
| local MainFrame = Instance.new("Frame") | |
| MainFrame.Name = "MainFrame" | |
| MainFrame.Size = UDim2.new(0, 300, 0, 300) | |
| 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 | |
| Instance.new("UICorner", Header).CornerRadius = UDim.new(0, 10) | |
| 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 = "✨ PERFECTED AUTO CLICKER"; Title.TextColor3 = Color3.fromRGB(255, 255, 255); Title.TextSize = 14; 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.Parent = Header | |
| local StatusLabel = Instance.new("TextLabel") | |
| StatusLabel.Size = UDim2.new(1, -24, 0, 20); StatusLabel.Position = UDim2.new(0, 12, 0, 45); StatusLabel.BackgroundTransparency = 1 | |
| StatusLabel.Text = "Trạng thái: Đang nghỉ"; StatusLabel.TextColor3 = Color3.fromRGB(180, 185, 200); StatusLabel.TextSize = 13; StatusLabel.Font = Enum.Font.GothamMedium; StatusLabel.TextXAlignment = Enum.TextXAlignment.Left; StatusLabel.Parent = MainFrame | |
| local BtnContainer = Instance.new("Frame") | |
| BtnContainer.Size = UDim2.new(1, -24, 1, -80); BtnContainer.Position = UDim2.new(0, 12, 0, 75); BtnContainer.BackgroundTransparency = 1; BtnContainer.Parent = MainFrame | |
| local GridLayout = Instance.new("UIGridLayout") | |
| GridLayout.CellSize = UDim2.new(0.5, -5, 0, 35); GridLayout.CellPadding = UDim2.new(0, 10, 0, 10); GridLayout.SortOrder = Enum.SortOrder.LayoutOrder; GridLayout.Parent = BtnContainer | |
| local function createButton(name, text, color, order) | |
| local btn = Instance.new("TextButton"); btn.Name = name; btn.BackgroundColor3 = color; btn.Text = text; btn.TextColor3 = Color3.new(1,1,1); btn.Font = Enum.Font.GothamBold; btn.TextSize = 12; btn.LayoutOrder = order; btn.Parent = BtnContainer | |
| Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 6) | |
| return btn | |
| end | |
| local BtnAdd = createButton("BtnAdd", "➕ Thêm Điểm", Color3.fromRGB(108, 92, 231), 1) | |
| local BtnMove = createButton("BtnMove", "🖐️ Di Chuyển", Color3.fromRGB(225, 112, 85), 2) | |
| local BtnTime = createButton("BtnTime", "⏱️ Chỉnh Time", Color3.fromRGB(9, 132, 227), 3) | |
| local BtnClear = createButton("BtnClear", "🗑️ Xóa Tất Cả", Color3.fromRGB(178, 190, 195), 4) | |
| local BtnStart = createButton("BtnStart", "▶️ CHẠY MACRO", Color3.fromRGB(0, 184, 148), 5) | |
| BtnStart.Size = UDim2.new(1, 0, 0, 45) | |
| GridLayout.FillDirectionMaxCells = 2 | |
| -- ========================================== | |
| -- 2. BẢNG POPUP CHỈNH TIME | |
| -- ========================================== | |
| local TimePopup = Instance.new("Frame") | |
| TimePopup.Size = UDim2.new(0, 200, 0, 120); TimePopup.Position = UDim2.new(0.5, 0, 0.5, 0); TimePopup.AnchorPoint = Vector2.new(0.5, 0.5); TimePopup.BackgroundColor3 = Color3.fromRGB(45, 52, 54); TimePopup.Visible = false; TimePopup.ZIndex = 50; TimePopup.Parent = ScreenGui | |
| Instance.new("UICorner", TimePopup).CornerRadius = UDim.new(0, 10) | |
| local PopupLabel = Instance.new("TextLabel"); PopupLabel.Size = UDim2.new(1, 0, 0, 30); PopupLabel.Position = UDim2.new(0,0,0,10); PopupLabel.BackgroundTransparency = 1; PopupLabel.Text = "Nhập thời gian trễ (giây):" ; PopupLabel.TextColor3 = Color3.new(1,1,1); PopupLabel.Font = Enum.Font.GothamBold; PopupLabel.Parent = TimePopup | |
| local TimeInput = Instance.new("TextBox"); TimeInput.Size = UDim2.new(0.8, 0, 0, 30); TimeInput.Position = UDim2.new(0.1, 0, 0, 40); TimeInput.BackgroundColor3 = Color3.fromRGB(20,20,20); TimeInput.TextColor3 = Color3.new(1,1,1); TimeInput.Text = "0.1"; TimeInput.Font = Enum.Font.GothamMedium; TimeInput.Parent = TimePopup | |
| local PopupSave = Instance.new("TextButton"); PopupSave.Size = UDim2.new(0.8, 0, 0, 30); PopupSave.Position = UDim2.new(0.1, 0, 0, 80); PopupSave.BackgroundColor3 = Color3.fromRGB(0, 184, 148); PopupSave.Text = "LƯU"; PopupSave.TextColor3 = Color3.new(1,1,1); PopupSave.Font = Enum.Font.GothamBold; PopupSave.Parent = TimePopup; Instance.new("UICorner", PopupSave) | |
| -- ========================================== | |
| -- 3. HỆ THỐNG QUẢN LÝ TƯƠNG TÁC (TỐI ƯU HÓA) | |
| -- ========================================== | |
| local draggingUI, dragStartUI, startPosUI | |
| -- Kéo thả MainFrame | |
| table.insert(connections, Header.InputBegan:Connect(function(input) | |
| if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then | |
| draggingUI = true; dragStartUI = input.Position; startPosUI = MainFrame.Position | |
| end | |
| end)) | |
| -- Xử lý chuyển động chuột chung (Giảm tải CPU) | |
| table.insert(connections, UserInputService.InputChanged:Connect(function(input) | |
| if draggingUI and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then | |
| local delta = input.Position - dragStartUI | |
| MainFrame.Position = UDim2.new(startPosUI.X.Scale, startPosUI.X.Offset + delta.X, startPosUI.Y.Scale, startPosUI.Y.Offset + delta.Y) | |
| end | |
| if activeDraggingData and currentMode == "Move" and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then | |
| local delta = input.Position - dragStartPoint | |
| activeDraggingData.frame.Position = UDim2.new(0, startPosPoint.X.Offset + delta.X, 0, startPosPoint.Y.Offset + delta.Y) | |
| end | |
| end)) | |
| -- Kết thúc kéo thả | |
| table.insert(connections, UserInputService.InputEnded:Connect(function(input) | |
| if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then | |
| draggingUI = false | |
| if activeDraggingData then | |
| activeDraggingData.isDragging = false | |
| activeDraggingData = nil | |
| end | |
| end | |
| end)) | |
| local function isClickingOnMacroUI(clickPos) | |
| local frames = {MainFrame, TimePopup} | |
| for _, frame in ipairs(frames) do | |
| if frame.Visible then | |
| local pos, size = frame.AbsolutePosition, frame.AbsoluteSize | |
| if clickPos.X >= pos.X and clickPos.X <= (pos.X + size.X) and clickPos.Y >= pos.Y and clickPos.Y <= (pos.Y + size.Y) then return true end | |
| end | |
| end | |
| return false | |
| end | |
| local function setMode(mode) | |
| if isRunning then return end | |
| currentMode = (currentMode == mode) and "None" or mode | |
| BtnAdd.BackgroundColor3 = (currentMode == "Add") and Color3.fromRGB(162, 155, 254) or Color3.fromRGB(108, 92, 231) | |
| BtnMove.BackgroundColor3 = (currentMode == "Move") and Color3.fromRGB(250, 177, 160) or Color3.fromRGB(225, 112, 85) | |
| BtnTime.BackgroundColor3 = (currentMode == "Time") and Color3.fromRGB(116, 185, 255) or Color3.fromRGB(9, 132, 227) | |
| TimePopup.Visible = false | |
| currentlyEditingPoint = nil -- Reset trạng thái để tránh lỗi | |
| if currentMode == "None" then StatusLabel.Text = "Trạng thái: Đang nghỉ" | |
| elseif currentMode == "Add" then StatusLabel.Text = "Trạng thái: Bấm màn hình để đặt điểm" | |
| elseif currentMode == "Move" then StatusLabel.Text = "Trạng thái: Kéo thả điểm để di chuyển" | |
| elseif currentMode == "Time" then StatusLabel.Text = "Trạng thái: Bấm vào điểm để sửa Time" end | |
| end | |
| -- ========================================== | |
| -- 4. TẠO VÀ QUẢN LÝ WAYPOINT | |
| -- ========================================== | |
| local function createWaypoint(x, y) | |
| if #pointsData >= MAX_CLICKS then return end | |
| local id = #pointsData + 1 | |
| local Dot = Instance.new("Frame") | |
| Dot.Size = UDim2.new(0, 34, 0, 34) | |
| Dot.Position = UDim2.new(0, x, 0, y) | |
| Dot.AnchorPoint = Vector2.new(0.5, 0.5) | |
| Dot.BackgroundColor3 = Color3.fromRGB(255, 159, 67) | |
| Dot.BorderSizePixel = 0 | |
| Dot.ZIndex = 50 | |
| Dot.Parent = PointsFolder | |
| Instance.new("UICorner", Dot).CornerRadius = UDim.new(1, 0) | |
| local UIStrokeDot = Instance.new("UIStroke"); UIStrokeDot.Color = Color3.new(1,1,1); UIStrokeDot.Thickness = 2; UIStrokeDot.Parent = Dot | |
| local NumLabel = Instance.new("TextLabel"); NumLabel.Size = UDim2.new(1, 0, 1, 0); NumLabel.BackgroundTransparency = 1; NumLabel.Text = tostring(id); NumLabel.TextColor3 = Color3.new(1,1,1); NumLabel.Font = Enum.Font.GothamBold; NumLabel.TextSize = 16; NumLabel.Parent = Dot | |
| local TimeLabel = Instance.new("TextLabel"); TimeLabel.Size = UDim2.new(0, 50, 0, 20); TimeLabel.Position = UDim2.new(0.5, -25, 1, 2); TimeLabel.BackgroundTransparency = 1; TimeLabel.Text = "0.1s"; TimeLabel.TextColor3 = Color3.fromRGB(85, 239, 196); TimeLabel.Font = Enum.Font.GothamBold; TimeLabel.TextSize = 12; TimeLabel.TextStrokeTransparency = 0; TimeLabel.Parent = Dot | |
| local data = { id = id, frame = Dot, delay = 0.1, timeLabel = TimeLabel, isDragging = false } | |
| table.insert(pointsData, data) | |
| table.insert(connections, Dot.InputBegan:Connect(function(input) | |
| if isRunning then return end | |
| if currentMode == "Move" and (input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch) then | |
| activeDraggingData = data | |
| data.isDragging = true | |
| dragStartPoint = input.Position | |
| startPosPoint = Dot.Position | |
| elseif currentMode == "Time" and (input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch) then | |
| currentlyEditingPoint = data | |
| TimeInput.Text = tostring(data.delay) | |
| TimePopup.Visible = true | |
| end | |
| end)) | |
| end | |
| -- ========================================== | |
| -- 5. CÁC NÚT ĐIỀU KHIỂN & CHẠY MACRO | |
| -- ========================================== | |
| -- Lưu thời gian | |
| table.insert(connections, PopupSave.Activated:Connect(function() | |
| if currentlyEditingPoint then | |
| local newTime = tonumber(TimeInput.Text) | |
| if newTime and newTime >= 0.01 then | |
| currentlyEditingPoint.delay = newTime | |
| currentlyEditingPoint.timeLabel.Text = tostring(newTime) .. "s" | |
| end | |
| end | |
| TimePopup.Visible = false | |
| currentlyEditingPoint = nil -- Reset data sau khi lưu | |
| end)) | |
| -- Thêm điểm | |
| table.insert(connections, UserInputService.InputBegan:Connect(function(input) | |
| if currentMode == "Add" and (input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch) then | |
| if not isClickingOnMacroUI(input.Position) then createWaypoint(input.Position.X, input.Position.Y) end | |
| end | |
| end)) | |
| table.insert(connections, BtnAdd.Activated:Connect(function() setMode("Add") end)) | |
| table.insert(connections, BtnMove.Activated:Connect(function() setMode("Move") end)) | |
| table.insert(connections, BtnTime.Activated:Connect(function() setMode("Time") end)) | |
| -- Nút xóa tất cả (Bản vá Edge-Case an toàn) | |
| table.insert(connections, BtnClear.Activated:Connect(function() | |
| if isRunning then return end | |
| -- Xóa UI các điểm | |
| for _, data in ipairs(pointsData) do data.frame:Destroy() end | |
| table.clear(pointsData) | |
| -- Xóa trắng các trạng thái đang dang dở để chống lỗi rò rỉ bộ nhớ | |
| activeDraggingData = nil | |
| currentlyEditingPoint = nil | |
| TimePopup.Visible = false | |
| setMode("None") | |
| end)) | |
| -- KHỞI ĐỘNG CHUỖI MACRO VỚI HEAVY CLICK (Hỗ trợ executor mạnh) | |
| table.insert(connections, BtnStart.Activated:Connect(function() | |
| if #pointsData == 0 then return end | |
| if isRunning then | |
| isRunning = false | |
| BtnStart.Text = "▶️ CHẠY MACRO"; BtnStart.BackgroundColor3 = Color3.fromRGB(0, 184, 148); setMode("None") | |
| return | |
| end | |
| isRunning = true; currentMode = "Run"; TimePopup.Visible = false; currentlyEditingPoint = nil | |
| BtnStart.Text = "⏹️ DỪNG MACRO"; BtnStart.BackgroundColor3 = Color3.fromRGB(214, 48, 49) | |
| StatusLabel.Text = "Trạng thái: Đang chạy tự động..." | |
| task.spawn(function() | |
| while isRunning do | |
| for _, data in ipairs(pointsData) do | |
| if not isRunning then break end | |
| data.frame.BackgroundColor3 = Color3.fromRGB(255, 71, 87) | |
| local clickX = data.frame.AbsolutePosition.X + (data.frame.AbsoluteSize.X / 2) | |
| local clickY = data.frame.AbsolutePosition.Y + (data.frame.AbsoluteSize.Y / 2) | |
| -- 1. CLICK VẬT LÝ HẠNG NẶNG (Mô phỏng click thật) | |
| pcall(function() | |
| VirtualInputManager:SendMouseButtonEvent(clickX, clickY, 0, true, game, 1) | |
| VirtualInputManager:SendTouchEvent(data.id, 0, clickX, clickY) | |
| task.wait(0.08) | |
| VirtualInputManager:SendMouseButtonEvent(clickX, clickY, 0, false, game, 1) | |
| VirtualInputManager:SendTouchEvent(data.id, 2, clickX, clickY) | |
| end) | |
| -- 2. ÉP CLICK XUYÊN THỦNG UI (Bắt sự kiện nút của game) | |
| pcall(function() | |
| local guiObjects = PlayerGui:GetGuiObjectsAtPosition(clickX, clickY) | |
| for _, gui in ipairs(guiObjects) do | |
| if gui:IsA("GuiButton") then -- Bao hàm cả TextButton và ImageButton | |
| if getconnections then | |
| for _, conn in ipairs(getconnections(gui.MouseButton1Down)) do conn:Fire() end | |
| for _, conn in ipairs(getconnections(gui.Activated)) do conn:Fire() end | |
| for _, conn in ipairs(getconnections(gui.TouchTap)) do conn:Fire() end | |
| for _, conn in ipairs(getconnections(gui.MouseButton1Click)) do conn:Fire() end | |
| for _, conn in ipairs(getconnections(gui.MouseButton1Up)) do conn:Fire() end | |
| end | |
| break | |
| end | |
| end | |
| end) | |
| task.wait(data.delay) | |
| data.frame.BackgroundColor3 = Color3.fromRGB(255, 159, 67) | |
| end | |
| task.wait(0.01) | |
| end | |
| end) | |
| end)) | |
| -- Hủy UI sạch sẽ | |
| table.insert(connections, CloseBtn.Activated:Connect(function() | |
| isRunning = 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