Skip to content

Instantly share code, notes, and snippets.

@DuyNgao2306
Created July 24, 2026 15:09
Show Gist options
  • Select an option

  • Save DuyNgao2306/ed1a36067d0fb584eb3db21f564e13ab to your computer and use it in GitHub Desktop.

Select an option

Save DuyNgao2306/ed1a36067d0fb584eb3db21f564e13ab to your computer and use it in GitHub Desktop.
-- [[ SMART MACRO - DYNAMIC CLICK & RUN TIMER VERSION ]] --
local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local VirtualInputManager = game:GetService("VirtualInputManager")
local LocalPlayer = Players.LocalPlayer
local PlayerGui = LocalPlayer:WaitForChild("PlayerGui")
math.randomseed(os.time())
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 (MỞ RỘNG ĐỂ CHỨA ĐỒNG HỒ)
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, 250) -- Kéo dài frame thêm 1 chút
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 (PRO)"
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
-- NHÃN HIỂN THỊ TRẠNG THÁI
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
-- NHÃN HIỂN THỊ ĐỒNG HỒ THỜI GIAN CHẠY (MỚI)
local TimerLabel = Instance.new("TextLabel")
TimerLabel.Size = UDim2.new(1, -24, 0, 20)
TimerLabel.Position = UDim2.new(0, 12, 0, 88)
TimerLabel.BackgroundTransparency = 1
TimerLabel.Text = "⏱️ Thời gian chạy: 00:00:00"
TimerLabel.TextColor3 = Color3.fromRGB(85, 239, 196)
TimerLabel.TextSize = 12
TimerLabel.Font = Enum.Font.GothamBold
TimerLabel.TextXAlignment = Enum.TextXAlignment.Left
TimerLabel.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
-- Di chuyển các nút xuống một chút để nhường chỗ cho Đồng hồ
local SelectBtn = createButton("SelectBtn", "Bắt đầu chọn", UDim2.new(0, 12, 0, 118), UDim2.new(1, -24, 0, 34), Color3.fromRGB(108, 92, 231))
local StartBtn = createButton("StartBtn", "Chạy Macro", UDim2.new(0, 12, 0, 160), UDim2.new(0, 175, 0, 34), Color3.fromRGB(0, 184, 148))
local ClearBtn = createButton("ClearBtn", "Xóa", UDim2.new(0, 195, 0, 160), 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 (Sửa lỗi hụt click)
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
-- LƯU LẠI TỌA ĐỘ THAY VÌ LƯU CỨNG OBJECT
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()
local delayTime = (#recordedClicks > 0) and math.max(now - lastClickTime, 0.05) or 0.1
lastClickTime = now
-- LƯU CHÍNH XÁC TỌA ĐỘ X, Y (Khắc phục lỗi mất nút)
table.insert(recordedClicks, {
x = input.Position.X,
y = input.Position.Y,
delay = delayTime
})
CountLabel.Text = "Đã lưu: " .. #recordedClicks .. " / " .. MAX_CLICKS
StatusLabel.Text = "Ghi tọa độ: X:" .. math.floor(input.Position.X) .. " Y:" .. math.floor(input.Position.Y) .. " (Trễ " .. string.format("%.2f", delayTime) .. "s)"
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)
-- LUỒNG 1: ĐỒNG HỒ ĐẾM THỜI GIAN ĐẸP MẮT
local startTime = os.time()
task.spawn(function()
while isRunning do
local elapsed = os.time() - startTime
local hours = math.floor(elapsed / 3600)
local minutes = math.floor((elapsed % 3600) / 60)
local seconds = elapsed % 60
TimerLabel.Text = string.format("⏱️ Thời gian chạy: %02d:%02d:%02d", hours, minutes, seconds)
task.wait(1)
end
end)
-- LUỒNG 2: VÒNG LẶP CLICK & TỰ ĐỘNG TÌM NÚT MỚI
task.spawn(function()
while isRunning do
for _, data in ipairs(recordedClicks) do
if not isRunning then break end
-- Jitter Chống Ban
local randomJitter = math.random(-15, 30) / 1000
local safeWait = math.max(data.delay + randomJitter, 0.05)
task.wait(safeWait)
if not isRunning then break end
-- CÁCH 1: Tìm lại nút UI ngay tại Tọa Độ đó (Fix lỗi hụt click)
local guiObjects = PlayerGui:GetGuiObjectsAtPosition(data.x, data.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
-- Nếu tìm thấy UI, kích hoạt nó
if targetButton and targetButton.Parent then
pcall(function()
if getconnections then
for _, conn in ipairs(getconnections(targetButton.Activated)) do
conn:Fire()
end
end
end)
end
-- CÁCH 2: Giả lập click chuột thực tế (Giúp click vào 3D trong game)
pcall(function()
VirtualInputManager:SendMouseButtonEvent(data.x, data.y, 0, true, game, 1)
task.wait(0.01)
VirtualInputManager:SendMouseButtonEvent(data.x, data.y, 0, false, game, 1)
end)
-- CÁCH 3: Tự động Activate Tool nếu đang cầm
local character = LocalPlayer.Character
if character then
local tool = character:FindFirstChildOfClass("Tool")
if tool then
tool:Activate()
end
end
end
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
TimerLabel.Text = "⏱️ Thời gian chạy: 00:00:00"
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