Run it
Copy the script and paste it into your executor.
Players = :()
RunService = :()
UserInputService = :()
TweenService = :()
HttpService = :()
VirtualInputManager = :()
Player = Players.LocalPlayer
IsMobileDevice = UserInputService.TouchEnabled
State = {
IsRecording = ,
IsPlaying = ,
IsLooped = ,
StartTime = .(),
SequenceDuration = ,
MacroCache = {},
PanelOpen = ,
CurrentSlot =
}
PlaybackThreads = {}
VisualNodes = {}
StoragePrefix =
Player.PlayerGui:()
Player.PlayerGui.Sorcerer_TD_Macro:()
UI = .()
UI.Name =
UI.ResetOnSpawn =
UI.Parent = Player:()
VisualFolder = .()
VisualFolder.Name =
VisualFolder.Parent = UI
LogoButton = .()
LogoButton.Name =
LogoButton.Size = .(, , , )
LogoButton.Position = .(, , , )
LogoButton.BackgroundColor3 = .(, , )
LogoButton.Image =
LogoButton.ScaleType = .ScaleType.Crop
LogoButton.BorderSizePixel =
LogoButton.ZIndex =
LogoButton.Active =
LogoButton.Draggable =
LogoButton.Parent = UI
LogoCorner = .()
LogoCorner.CornerRadius = .(, )
LogoCorner.Parent = LogoButton
LogoStroke = .()
LogoStroke.Thickness =
LogoStroke.Color = .(, , )
LogoStroke.Parent = LogoButton
MainFrame = .()
MainFrame.Name =
MainFrame.Size = .(, , , )
MainFrame.Position = .(, -, , -)
MainFrame.BackgroundColor3 = .(, , )
MainFrame.BorderSizePixel =
MainFrame.Active =
MainFrame.Draggable =
MainFrame.Parent = UI
MainCorner = .()
MainCorner.CornerRadius = .(, )
MainCorner.Parent = MainFrame
MainStroke = .()
MainStroke.Thickness =
MainStroke.Color = .(, , )
MainStroke.ApplyStrokeMode = .ApplyStrokeMode.Border
MainStroke.Parent = MainFrame
Header = .()
Header.Name =
Header.Size = .(, , , )
Header.BackgroundColor3 = .(, , )
Header.BorderSizePixel =
Header.Parent = MainFrame
HeaderCorner = .()
HeaderCorner.CornerRadius = .(, )
HeaderCorner.Parent = Header
HeaderFix = .()
HeaderFix.Size = .(, , , )
HeaderFix.Position = .(, , , -)
HeaderFix.BackgroundColor3 = .(, , )
HeaderFix.BorderSizePixel =
HeaderFix.Parent = Header
Title = .()
Title.Size = .(, , , )
Title.Position = .(, , , )
Title.BackgroundTransparency =
Title.Text =
Title.TextColor3 = .(, , )
Title.Font = .Font.GothamBold
Title.TextSize =
Title.TextXAlignment = .TextXAlignment.Left
Title.TextTruncate = .TextTruncate.AtEnd
Title.Parent = Header
StatusBadge = .()
StatusBadge.Size = .(, , , )
StatusBadge.Position = .(, -, , -)
StatusBadge.BackgroundColor3 = .(, , )
StatusBadge.Text = IsMobileDevice
StatusBadge.TextColor3 = .(, , )
StatusBadge.Font = .Font.GothamBold
StatusBadge.TextSize =
StatusBadge.TextTruncate = .TextTruncate.AtEnd
StatusBadge.Parent = Header
BadgeCorner = .()
BadgeCorner.CornerRadius = .(, )
BadgeCorner.Parent = StatusBadge
BadgeStroke = .()
BadgeStroke.Thickness =
BadgeStroke.Color = .(, , )
BadgeStroke.Parent = StatusBadge
ConsoleBox = .()
ConsoleBox.Size = .(, -, , )
ConsoleBox.Position = .(, , , )
ConsoleBox.BackgroundColor3 = .(, , )
ConsoleBox.Parent = MainFrame
ConsoleCorner = .()
ConsoleCorner.CornerRadius = .(, )
ConsoleCorner.Parent = ConsoleBox
LogLabel = .()
LogLabel.Size = .(, -, , )
LogLabel.Position = .(, , , )
LogLabel.BackgroundTransparency =
LogLabel.Text =
LogLabel.TextColor3 = .(, , )
LogLabel.Font = .Font.Gotham
LogLabel.TextSize =
LogLabel.TextXAlignment = .TextXAlignment.Left
LogLabel.TextYAlignment = .TextYAlignment.Center
LogLabel.TextWrapped =
LogLabel.Parent = ConsoleBox
TelemetryLabel = .()
TelemetryLabel.Size = .(, -, , )
TelemetryLabel.Position = .(, , , -)
TelemetryLabel.BackgroundTransparency =
TelemetryLabel.Text =
TelemetryLabel.TextColor3 = .(, , )
TelemetryLabel.Font = .Font.GothamMedium
TelemetryLabel.TextSize =
TelemetryLabel.TextXAlignment = .TextXAlignment.Left
TelemetryLabel.TextTruncate = .TextTruncate.AtEnd
TelemetryLabel.Parent = ConsoleBox
(text, bg, stroke)
StatusBadge.Text = text
StatusBadge.BackgroundColor3 = bg
BadgeStroke.Color = stroke
(btn, baseColor, hoverColor)
originalSize = btn.Size
btn.MouseEnter:(()
TweenService:(btn, TweenInfo.(), {BackgroundColor3 = hoverColor}):()
)
btn.MouseLeave:(()
TweenService:(btn, TweenInfo.(), {BackgroundColor3 = baseColor}):()
)
btn.MouseButton1Down:(()
TweenService:(btn, TweenInfo.(), {Size = .(originalSize.X.Scale, originalSize.X.Offset - , originalSize.Y.Scale, originalSize.Y.Offset - )}):()
)
btn.MouseButton1Up:(()
TweenService:(btn, TweenInfo.(), {Size = originalSize}):()
)
(name, text, position, size, baseColor, hoverColor)
btn = .()
btn.Name = name
btn.Text = text
btn.Position = position
btn.Size = size
btn.BackgroundColor3 = baseColor
btn.Font = .Font.GothamBold
btn.TextSize =
btn.TextColor3 = .(, , )
btn.BorderSizePixel =
btn.TextTruncate = .TextTruncate.AtEnd
btn.Parent = MainFrame
corner = .()
corner.CornerRadius = .(, )
corner.Parent = btn
stroke = .()
stroke.Thickness =
stroke.Color = baseColor:(.(, , ), )
stroke.Parent = btn
(btn, baseColor, hoverColor)
btn
RecordBtn = (, , .(, , , ), .(, , , ), .(, , ), .(, , ))
PlayBtn = (, , .(, , , ), .(, , , ), .(, , ), .(, , ))
WipeBtn = (, , .(, , , ), .(, , , ), .(, , ), .(, , ))
LoopBtn = (, , .(, , , ), .(, -, , ), .(, , ), .(, , ))
Slot1Btn = (, , .(, , , ), .(, , , ), .(, , ), .(, , ))
Slot2Btn = (, , .(, , , ), .(, , , ), .(, , ), .(, , ))
Slot3Btn = (, , .(, , , ), .(, , , ), .(, , ), .(, , ))
TrackPanel = .()
TrackPanel.Size = .(, -, , )
TrackPanel.Position = .(, , , )
TrackPanel.BackgroundColor3 = .(, , )
TrackPanel.BorderSizePixel =
TrackPanel.Parent = MainFrame
TrackCorner = .()
TrackCorner.CornerRadius = .(, )
TrackCorner.Parent = TrackPanel
TrackLabel = .()
TrackLabel.Size = .(, -, , )
TrackLabel.Position = .(, , , )
TrackLabel.BackgroundTransparency =
TrackLabel.Text = IsMobileDevice
TrackLabel.TextColor3 = .(, , )
TrackLabel.Font = .Font.GothamBold
TrackLabel.TextSize =
TrackLabel.TextXAlignment = .TextXAlignment.Center
TrackLabel.TextTruncate = .TextTruncate.AtEnd
TrackLabel.Parent = TrackPanel
refreshTelemetry;
(slot)
StoragePrefix .. (slot) ..
()
fileName = (State.CurrentSlot)
flatData = {}
_, item (State.MacroCache)
.(flatData, {
Delay = item.Delay,
RawCoords = (.(item.Coords.X)) .. .. (.(item.Coords.Y))
})
payload = {
Duration = State.SequenceDuration,
Data = flatData
}
success, encoded = (()
HttpService:(payload)
)
success encoded
(()
writefile
(fileName, encoded)
)
()
fileName = (State.CurrentSlot)
fileExists =
(()
isfile fileExists = (fileName)
)
fileExists
State.MacroCache = {}
State.SequenceDuration =
content =
(()
readfile content = (fileName)
)
content
success, decoded = (()
HttpService:(content)
)
success decoded (decoded) ==
State.SequenceDuration = decoded.Duration
State.MacroCache = {}
trackingData = decoded.Data {}
_, item (trackingData)
item.RawCoords
split = .(item.RawCoords, )
posX = (split[])
posY = (split[])
.(State.MacroCache, {
Delay = item.Delay,
Coords = .(posX, posY)
})
State.MacroCache = {}
State.SequenceDuration =
()
Slot1Btn.BackgroundColor3 = (State.CurrentSlot == ) .(, , ) .(, , )
Slot2Btn.BackgroundColor3 = (State.CurrentSlot == ) .(, , ) .(, , )
Slot3Btn.BackgroundColor3 = (State.CurrentSlot == ) .(, , ) .(, , )
Slot1Btn.Text = (State.CurrentSlot == )
Slot2Btn.Text = (State.CurrentSlot == )
Slot3Btn.Text = (State.CurrentSlot == )
(targetIndex)
State.IsRecording State.IsPlaying
State.CurrentSlot = targetIndex
()
()
LogLabel.Text = .. targetIndex
LogLabel.TextColor3 = .(, , )
()
Slot1Btn.MouseButton1Click:(() () )
Slot2Btn.MouseButton1Click:(() () )
Slot3Btn.MouseButton1Click:(() () )
isTweening =
LogoButton.MouseButton1Click:(()
isTweening
State.PanelOpen = State.PanelOpen
isTweening =
State.PanelOpen
MainFrame.Visible =
MainFrame:(
.(, , , ),
.(, -, , -),
.EasingDirection.Out,
.EasingStyle.Quart,
,
,
() isTweening =
)
TweenService:(LogoButton, TweenInfo.(), {BackgroundColor3 = .(, , )}):()
LogoStroke.Color = .(, , )
MainFrame:(
.(, , , ),
.(, -, , ),
.EasingDirection.In,
.EasingStyle.Quart,
,
,
()
State.PanelOpen MainFrame.Visible =
isTweening =
)
TweenService:(LogoButton, TweenInfo.(), {BackgroundColor3 = .(, , )}):()
LogoStroke.Color = .(, , )
)
()
VisualFolder:()
VisualNodes = {}
(index)
State.IsPlaying
State.MacroCache[index]
.(State.MacroCache, index)
#State.MacroCache >
State.IsRecording
State.SequenceDuration = .() - State.StartTime
highestDelay =
_, taskItem (State.MacroCache)
taskItem.Delay > highestDelay highestDelay = taskItem.Delay
State.SequenceDuration = highestDelay
State.SequenceDuration =
()
()
()
()
State.IsPlaying
index, taskItem (State.MacroCache)
Node = .()
Node.Name = .. index
Node.Size = .(, , , )
Node.Position = .(, taskItem.Coords.X - , , taskItem.Coords.Y - )
Node.BackgroundColor3 = .(, , )
Node.Text = (index)
Node.Font = .Font.GothamBold
Node.TextSize =
Node.TextColor3 = .(, , )
Node.ZIndex =
Node.Parent = VisualFolder
Corner = .()
Corner.CornerRadius = .(, )
Corner.Parent = Node
Stroke = .()
Stroke.Thickness =
Stroke.Color = .(, , )
Stroke.Parent = Node
Node.Size = .(, , , )
Node.Position = .(, taskItem.Coords.X, , taskItem.Coords.Y)
TweenService:(Node, TweenInfo.(, .EasingStyle.Back), {
Size = .(, , , ),
Position = .(, taskItem.Coords.X - , , taskItem.Coords.Y - )
}):()
Node.MouseEnter:(()
TweenService:(Node, TweenInfo.(), {BackgroundColor3 = .(, , )}):()
Node.Text =
)
Node.MouseLeave:(()
TweenService:(Node, TweenInfo.(), {BackgroundColor3 = .(, , )}):()
Node.Text = (index)
)
Node.MouseButton1Click:(()
(index)
)
.(VisualNodes, Node)
()
State.IsRecording
liveTimeline = .() - State.StartTime
TelemetryLabel.Text = .. #State.MacroCache .. .. .(, liveTimeline) ..
#State.MacroCache >
TelemetryLabel.Text = .. #State.MacroCache .. .. .(, State.SequenceDuration) ..
TelemetryLabel.Text =
()
LoopBtn.MouseButton1Click:(()
State.IsLooped = State.IsLooped
State.IsLooped
LoopBtn.Text =
LoopBtn.BackgroundColor3 = .(, , )
LogLabel.Text =
LoopBtn.Text =
LoopBtn.BackgroundColor3 = .(, , )
LogLabel.Text =
LogLabel.TextColor3 = .(, , )
)
()
IsMobileDevice
(, .(, , ), .(, , ))
TrackLabel.Text =
(, .(, , ), .(, , ))
TrackLabel.Text =
()
State.IsRecording =
RecordBtn.Text =
RecordBtn.BackgroundColor3 = .(, , )
#State.MacroCache >
State.SequenceDuration = .() - State.StartTime
()
State.SequenceDuration =
LogLabel.Text =
LogLabel.TextColor3 = .(, , )
()
()
UserInputService.InputBegan:((input, gameProcessed)
State.IsRecording State.IsPlaying
isClick = (input.UserInputType == .UserInputType.MouseButton1)
isTouch = (input.UserInputType == .UserInputType.Touch)
(isClick isTouch)
inputLocation = UserInputService:()
isTouch inputLocation = .(input.Position.X, input.Position.Y)
uiHits = Player.PlayerGui:(inputLocation.X, inputLocation.Y)
_, guiObj (uiHits)
guiObj:(UI)
stamp = .() - State.StartTime
.(State.MacroCache, {
Delay = stamp,
Coords = inputLocation
})
LogLabel.Text = .. #State.MacroCache .. .. .(inputLocation.X) .. .. .(inputLocation.Y) ..
LogLabel.TextColor3 = .(, , )
()
)
RunService.RenderStepped:(()
State.IsRecording
liveTimeline = .() - State.StartTime
TelemetryLabel.Text = .. #State.MacroCache .. .. .(, liveTimeline) ..
)
RecordBtn.MouseButton1Click:(()
State.IsPlaying
State.IsRecording
State.MacroCache = {}
()
State.StartTime = .()
State.IsRecording =
RecordBtn.Text =
RecordBtn.BackgroundColor3 = .(, , )
(, .(, , ), .(, , ))
LogLabel.Text =
LogLabel.TextColor3 = .(, , )
()
)
()
State.IsPlaying =
_, thread (PlaybackThreads)
(() .(thread) )
PlaybackThreads = {}
PlayBtn.Text =
PlayBtn.BackgroundColor3 = .(, , )
()
()
PlayBtn.MouseButton1Click:(()
State.IsRecording
()
.()
#State.MacroCache ==
LogLabel.Text =
LogLabel.TextColor3 = .(, , )
State.IsPlaying
()
LogLabel.Text =
LogLabel.TextColor3 = .(, , )
State.IsPlaying =
()
PlayBtn.Text =
PlayBtn.BackgroundColor3 = .(, , )
(, .(, , ), .(, , ))
LogLabel.Text =
LogLabel.TextColor3 = .(, , )
()
State.IsPlaying
loopStartTime = .()
totalLength = State.SequenceDuration
i, taskItem (State.MacroCache)
State.IsPlaying
nextDelay = taskItem.Delay - (.() - loopStartTime)
nextDelay > .(nextDelay)
State.IsPlaying
(()
VirtualInputManager:(taskItem.Coords.X, taskItem.Coords.Y, , , , )
.()
VirtualInputManager:(taskItem.Coords.X, taskItem.Coords.Y, , , , )
)
TelemetryLabel.Text = .. i .. .. #State.MacroCache
remainingLoopTime = totalLength - (.() - loopStartTime)
remainingLoopTime > State.IsPlaying .(remainingLoopTime)
State.IsLooped
State.IsPlaying LogLabel.Text =
IsMobileDevice ( State.IsLooped) State.IsPlaying
LogLabel.Text =
LogLabel.TextColor3 = .(, , )
(()
CurrentViewport = .CurrentCamera.ViewportSize
JumpButtonX = CurrentViewport.X *
JumpButtonY = CurrentViewport.Y *
VirtualInputManager:(JumpButtonX, JumpButtonY, , , , )
.()
VirtualInputManager:(JumpButtonX, JumpButtonY, , , , )
)
.()
()
LogLabel.Text =
LogLabel.TextColor3 = .(, , )
mainThread = .(executeMacroLoop)
.(PlaybackThreads, mainThread)
)
WipeBtn.MouseButton1Click:(()
State.IsRecording State.IsPlaying
State.MacroCache = {}
State.SequenceDuration =
State.StartTime = .()
()
()
LogLabel.Text =
LogLabel.TextColor3 = .(, , )
()
()
)
()
()
()This is a macro Script with save slots that i developed its also keyless