
Keyless

--[[
BE A FISH BAIT! 💀🐟 — Auto Farm v3.1 (Sleek Edition + Rewards)
Auto Workout | 2x Frenzy Auto-Click | Auto Fish | Auto Sell | Plot Collect | Auto Rewards
Lean, clean, black GUI
]]
-- ═══════════════════════════════════════════
-- CLEANUP PREVIOUS INSTANCE
-- ═══════════════════════════════════════════
if _G.StopFarm then pcall(_G.StopFarm) end
if game:GetService("CoreGui"):FindFirstChild("FishBaitFarmGUI") then
game:GetService("CoreGui"):FindFirstChild("FishBaitFarmGUI"):Destroy()
end
-- ═══════════════════════════════════════════
-- SERVICES
-- ═══════════════════════════════════════════
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local RunService = game:GetService("RunService")
local CoreGui = game:GetService("CoreGui")
local TweenService = game:GetService("TweenService")
local UserInputService = game:GetService("UserInputService")
local VirtualInputManager = game:GetService("VirtualInputManager")
local Workspace = game:GetService("Workspace")
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoidRootPart = character:WaitForChild("HumanoidRootPart")
-- ═══════════════════════════════════════════
-- REMOTE REFERENCES
-- ═══════════════════════════════════════════
local globalFunctions = ReplicatedStorage:FindFirstChild("shared/network@globalFunctions")
local globalEvents = ReplicatedStorage:FindFirstChild("shared/network@globalEvents")
local remotes = {
trainingTick = globalFunctions and globalFunctions:FindFirstChild("trainingTick"),
trainingBonus = globalFunctions and globalFunctions:FindFirstChild("trainingSkillcheckBonus"),
sellFish = globalFunctions and globalFunctions:FindFirstChild("sellFishItems"),
collectPlot = globalFunctions and globalFunctions:FindFirstChild("collectPlotMoney"),
claimDailyReward = globalFunctions and globalFunctions:FindFirstChild("claimDailyReward"),
claimPlaytimeReward = globalFunctions and globalFunctions:FindFirstChild("claimPlaytimeReward"),
claimOfflineEarnings = globalFunctions and globalFunctions:FindFirstChild("claimOfflineEarnings"),
claimIndexReward = globalFunctions and globalFunctions:FindFirstChild("claimIndexReward"),
spinPlaytimeWheel = globalFunctions and globalFunctions:FindFirstChild("spinPlaytimeWheel"),
fishLanded = globalEvents and globalEvents:FindFirstChild("fishLanded"),
hookLanded = globalEvents and globalEvents:FindFirstChild("hookLanded"),
}
-- ═══════════════════════════════════════════
-- STATE
-- ═══════════════════════════════════════════
local STATE = {
running = true,
workout = true,
fish = true,
sell = true,
plotMoney = true,
rewards = true,
antiAfk = true,
}
local STATS = {
workoutReps = 0,
fishCaught = 0,
sellCount = 0,
plotCollects = 0,
rewardsClaimed = 0,
lastFishTime = 0,
startTime = tick(),
}
local CONFIG = {
workoutInterval = 0.05,
sellInterval = 15,
plotInterval = 10,
rewardsInterval = 30,
fishCastDelay = 1.0,
fishReelDelay = 0.3,
fishLoopDelay = 1.5,
}
-- ═══════════════════════════════════════════
-- COLOR PALETTE (LEAN & BLACK)
-- ═══════════════════════════════════════════
local COLORS = {
bg = Color3.fromRGB(10, 8, 15),
bgCard = Color3.fromRGB(16, 14, 24),
bgHover = Color3.fromRGB(24, 20, 36),
accent = Color3.fromRGB(168, 85, 247), -- Neon purple
accentDim = Color3.fromRGB(126, 34, 206),
textPrimary = Color3.fromRGB(243, 244, 246),
textSecondary = Color3.fromRGB(156, 163, 175),
textMuted = Color3.fromRGB(107, 114, 128),
border = Color3.fromRGB(36, 28, 48),
toggleOn = Color3.fromRGB(168, 85, 247),
toggleOff = Color3.fromRGB(31, 25, 41),
toggleKnob = Color3.fromRGB(255, 255, 255),
red = Color3.fromRGB(239, 68, 68),
}
-- ═══════════════════════════════════════════
-- GUI CREATION
-- ═══════════════════════════════════════════
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "FishBaitFarmGUI"
screenGui.ResetOnSpawn = false
screenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
screenGui.Parent = CoreGui
-- Main frame
local mainFrame = Instance.new("Frame")
mainFrame.Name = "MainFrame"
mainFrame.Size = UDim2.new(0, 240, 0, 0)
mainFrame.Position = UDim2.new(0, 30, 0.5, -200)
mainFrame.BackgroundColor3 = COLORS.bg
mainFrame.BorderSizePixel = 0
mainFrame.ClipsDescendants = true
mainFrame.Parent = screenGui
local mainCorner = Instance.new("UICorner")
mainCorner.CornerRadius = UDim.new(0, 6)
mainCorner.Parent = mainFrame
local mainStroke = Instance.new("UIStroke")
mainStroke.Color = COLORS.border
mainStroke.Thickness = 1.2
mainStroke.Parent = mainFrame
-- ═══════════════════════════════════════════
-- TITLE BAR (draggable)
-- ═══════════════════════════════════════════
local titleBar = Instance.new("Frame")
titleBar.Name = "TitleBar"
titleBar.Size = UDim2.new(1, 0, 0, 36)
titleBar.BackgroundColor3 = COLORS.bg
titleBar.BorderSizePixel = 0
titleBar.Parent = mainFrame
local titleLabel = Instance.new("TextLabel")
titleLabel.Size = UDim2.new(1, -60, 1, 0)
titleLabel.Position = UDim2.new(0, 14, 0, 0)
titleLabel.BackgroundTransparency = 1
titleLabel.Text = "ENI HUB <font color=\"#A855F7\">//</font> FISH BAIT"
titleLabel.RichText = true
titleLabel.TextSize = 11
titleLabel.Font = Enum.Font.GothamBold
titleLabel.TextColor3 = COLORS.textPrimary
titleLabel.TextXAlignment = Enum.TextXAlignment.Left
titleLabel.Parent = titleBar
local minimizeBtn = Instance.new("TextButton")
minimizeBtn.Name = "MinimizeBtn"
minimizeBtn.Size = UDim2.new(0, 24, 0, 24)
minimizeBtn.Position = UDim2.new(1, -34, 0.5, -12)
minimizeBtn.BackgroundTransparency = 1
minimizeBtn.Text = "—"
minimizeBtn.TextSize = 11
minimizeBtn.Font = Enum.Font.GothamMedium
minimizeBtn.TextColor3 = COLORS.textSecondary
minimizeBtn.Parent = titleBar
local isMinimized = false
local expandedSize = 0
-- Drag functionality
local dragging, dragInput, dragStart, startPos
titleBar.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
input.Changed:Connect(function()
if input.UserInputState == Enum.UserInputState.End then dragging = false end
end)
end
end)
titleBar.InputChanged:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then
dragInput = input
end
end)
UserInputService.InputChanged:Connect(function(input)
if input == dragInput and dragging 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)
local titleSep = Instance.new("Frame")
titleSep.Size = UDim2.new(1, 0, 0, 1)
titleSep.Position = UDim2.new(0, 0, 1, -1)
titleSep.BackgroundColor3 = COLORS.border
titleSep.BorderSizePixel = 0
titleSep.Parent = titleBar
-- ═══════════════════════════════════════════
-- TAB BAR
-- ═══════════════════════════════════════════
local tabBar = Instance.new("Frame")
tabBar.Name = "TabBar"
tabBar.Size = UDim2.new(1, 0, 0, 26)
tabBar.Position = UDim2.new(0, 0, 0, 36)
tabBar.BackgroundColor3 = COLORS.bg
tabBar.BorderSizePixel = 0
tabBar.Parent = mainFrame
local tabLayout = Instance.new("UIListLayout")
tabLayout.FillDirection = Enum.FillDirection.Horizontal
tabLayout.SortOrder = Enum.SortOrder.LayoutOrder
tabLayout.Parent = tabBar
local mainTabBtn = Instance.new("TextButton")
mainTabBtn.Size = UDim2.new(0.5, 0, 1, 0)
mainTabBtn.BackgroundTransparency = 1
mainTabBtn.Text = "AUTOMATION"
mainTabBtn.TextSize = 9
mainTabBtn.Font = Enum.Font.GothamBold
mainTabBtn.TextColor3 = COLORS.textPrimary
mainTabBtn.Parent = tabBar
local settingsTabBtn = Instance.new("TextButton")
settingsTabBtn.Size = UDim2.new(0.5, 0, 1, 0)
settingsTabBtn.BackgroundTransparency = 1
settingsTabBtn.Text = "SETTINGS"
settingsTabBtn.TextSize = 9
settingsTabBtn.Font = Enum.Font.GothamBold
settingsTabBtn.TextColor3 = COLORS.textSecondary
settingsTabBtn.Parent = tabBar
local tabIndicator = Instance.new("Frame")
tabIndicator.Size = UDim2.new(0.5, -28, 0, 1.5)
tabIndicator.Position = UDim2.new(0, 14, 1, -1.5)
tabIndicator.BackgroundColor3 = COLORS.accent
tabIndicator.BorderSizePixel = 0
tabIndicator.Parent = tabBar
local tabSep = Instance.new("Frame")
tabSep.Size = UDim2.new(1, 0, 0, 1)
tabSep.Position = UDim2.new(0, 0, 1, -1)
tabSep.BackgroundColor3 = COLORS.border
tabSep.BorderSizePixel = 0
tabSep.Parent = tabBar
-- ═══════════════════════════════════════════
-- CONTENT CONTAINERS
-- ═══════════════════════════════════════════
local content = Instance.new("ScrollingFrame")
content.Name = "Content"
content.Size = UDim2.new(1, 0, 1, -62)
content.Position = UDim2.new(0, 0, 0, 62)
content.BackgroundTransparency = 1
content.BorderSizePixel = 0
content.ScrollBarThickness = 0
content.CanvasSize = UDim2.new(0, 0, 0, 0)
content.AutomaticCanvasSize = Enum.AutomaticSize.Y
content.Parent = mainFrame
local contentLayout = Instance.new("UIListLayout")
contentLayout.SortOrder = Enum.SortOrder.LayoutOrder
contentLayout.Padding = UDim.new(0, 0)
contentLayout.Parent = content
local settingsContent = Instance.new("ScrollingFrame")
settingsContent.Name = "SettingsContent"
settingsContent.Size = UDim2.new(1, 0, 1, -62)
settingsContent.Position = UDim2.new(0, 0, 0, 62)
settingsContent.BackgroundTransparency = 1
settingsContent.BorderSizePixel = 0
settingsContent.ScrollBarThickness = 0
settingsContent.CanvasSize = UDim2.new(0, 0, 0, 0)
settingsContent.AutomaticCanvasSize = Enum.AutomaticSize.Y
settingsContent.Visible = false
settingsContent.Parent = mainFrame
local settingsLayout = Instance.new("UIListLayout")
settingsLayout.SortOrder = Enum.SortOrder.LayoutOrder
settingsLayout.Padding = UDim.new(0, 0)
settingsLayout.Parent = settingsContent
-- Tab Switches
mainTabBtn.MouseButton1Click:Connect(function()
content.Visible = true
settingsContent.Visible = false
TweenService:Create(tabIndicator, TweenInfo.new(0.12, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Position = UDim2.new(0, 14, 1, -1.5)}):Play()
mainTabBtn.TextColor3 = COLORS.textPrimary
settingsTabBtn.TextColor3 = COLORS.textSecondary
end)
settingsTabBtn.MouseButton1Click:Connect(function()
content.Visible = false
settingsContent.Visible = true
TweenService:Create(tabIndicator, TweenInfo.new(0.12, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Position = UDim2.new(0.5, 14, 1, -1.5)}):Play()
mainTabBtn.TextColor3 = COLORS.textSecondary
settingsTabBtn.TextColor3 = COLORS.textPrimary
end)
-- ═══════════════════════════════════════════
-- UI BUILDER HELPERS
-- ═══════════════════════════════════════════
local layoutOrder = 0
local statLabels = {}
local toggleButtons = {}
local function nextOrder()
layoutOrder = layoutOrder + 1
return layoutOrder
end
local function createSectionHeader(parent, text)
local header = Instance.new("Frame")
header.Size = UDim2.new(1, 0, 0, 24)
header.BackgroundTransparency = 1
header.LayoutOrder = nextOrder()
header.Parent = parent
local line = Instance.new("Frame")
line.Size = UDim2.new(0, 2, 0, 10)
line.Position = UDim2.new(0, 14, 0.5, -5)
line.BackgroundColor3 = COLORS.accent
line.BorderSizePixel = 0
line.Parent = header
local label = Instance.new("TextLabel")
label.Size = UDim2.new(1, -32, 1, 0)
label.Position = UDim2.new(0, 22, 0, 0)
label.BackgroundTransparency = 1
label.Text = string.upper(text)
label.TextSize = 9
label.Font = Enum.Font.GothamBold
label.TextColor3 = COLORS.textSecondary
label.TextXAlignment = Enum.TextXAlignment.Left
label.Parent = header
return header
end
local function createToggleRow(parent, label, stateKey)
local row = Instance.new("Frame")
row.Size = UDim2.new(1, 0, 0, 30)
row.BackgroundTransparency = 1
row.LayoutOrder = nextOrder()
row.Parent = parent
local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(1, -70, 1, 0)
textLabel.Position = UDim2.new(0, 22, 0, 0)
textLabel.BackgroundTransparency = 1
textLabel.Text = label
textLabel.TextSize = 10
textLabel.Font = Enum.Font.GothamMedium
textLabel.TextColor3 = COLORS.textPrimary
textLabel.TextXAlignment = Enum.TextXAlignment.Left
textLabel.Parent = row
local toggleTrack = Instance.new("Frame")
toggleTrack.Size = UDim2.new(0, 28, 0, 14)
toggleTrack.Position = UDim2.new(1, -44, 0.5, -7)
toggleTrack.BackgroundColor3 = STATE[stateKey] and COLORS.toggleOn or COLORS.toggleOff
toggleTrack.BorderSizePixel = 0
toggleTrack.Parent = row
Instance.new("UICorner", toggleTrack).CornerRadius = UDim.new(1, 0)
local trackStroke = Instance.new("UIStroke")
trackStroke.Color = COLORS.border
trackStroke.Thickness = 1
trackStroke.Parent = toggleTrack
local knob = Instance.new("Frame")
knob.Size = UDim2.new(0, 10, 0, 10)
knob.Position = STATE[stateKey] and UDim2.new(1, -12, 0.5, -5) or UDim2.new(0, 2, 0.5, -5)
knob.BackgroundColor3 = COLORS.toggleKnob
knob.BorderSizePixel = 0
knob.Parent = toggleTrack
Instance.new("UICorner", knob).CornerRadius = UDim.new(1, 0)
local btn = Instance.new("TextButton")
btn.Size = UDim2.new(1, 0, 1, 0)
btn.BackgroundTransparency = 1
btn.Text = ""
btn.Parent = row
btn.MouseButton1Click:Connect(function()
STATE[stateKey] = not STATE[stateKey]
local on = STATE[stateKey]
TweenService:Create(toggleTrack, TweenInfo.new(0.12, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {BackgroundColor3 = on and COLORS.toggleOn or COLORS.toggleOff}):Play()
TweenService:Create(knob, TweenInfo.new(0.12, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Position = on and UDim2.new(1, -12, 0.5, -5) or UDim2.new(0, 2, 0.5, -5)}):Play()
end)
toggleButtons[stateKey] = {track = toggleTrack, knob = knob}
return row
end
local function createStatRow(parent, label, statKey)
local row = Instance.new("Frame")
row.Size = UDim2.new(1, 0, 0, 20)
row.BackgroundTransparency = 1
row.LayoutOrder = nextOrder()
row.Parent = parent
local nameLabel = Instance.new("TextLabel")
nameLabel.Size = UDim2.new(0.6, 0, 1, 0)
nameLabel.Position = UDim2.new(0, 22, 0, 0)
nameLabel.BackgroundTransparency = 1
nameLabel.Text = label
nameLabel.TextSize = 10
nameLabel.Font = Enum.Font.Gotham
nameLabel.TextColor3 = COLORS.textSecondary
nameLabel.TextXAlignment = Enum.TextXAlignment.Left
nameLabel.Parent = row
local valueLabel = Instance.new("TextLabel")
valueLabel.Name = "Value"
valueLabel.Size = UDim2.new(0.4, -22, 1, 0)
valueLabel.Position = UDim2.new(0.6, 0, 0, 0)
valueLabel.BackgroundTransparency = 1
valueLabel.Text = "0"
valueLabel.TextSize = 10
valueLabel.Font = Enum.Font.GothamBold
valueLabel.TextColor3 = COLORS.textPrimary
valueLabel.TextXAlignment = Enum.TextXAlignment.Right
valueLabel.Parent = row
statLabels[statKey] = valueLabel
return row
end
local function createInputRow(parent, label, configKey)
local row = Instance.new("Frame")
row.Size = UDim2.new(1, 0, 0, 30)
row.BackgroundTransparency = 1
row.LayoutOrder = nextOrder()
row.Parent = parent
local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(1, -90, 1, 0)
textLabel.Position = UDim2.new(0, 22, 0, 0)
textLabel.BackgroundTransparency = 1
textLabel.Text = label
textLabel.TextSize = 10
textLabel.Font = Enum.Font.GothamMedium
textLabel.TextColor3 = COLORS.textSecondary
textLabel.TextXAlignment = Enum.TextXAlignment.Left
textLabel.Parent = row
local textBoxFrame = Instance.new("Frame")
textBoxFrame.Size = UDim2.new(0, 50, 0, 18)
textBoxFrame.Position = UDim2.new(1, -72, 0.5, -9)
textBoxFrame.BackgroundColor3 = COLORS.bgCard
textBoxFrame.BorderSizePixel = 0
textBoxFrame.Parent = row
Instance.new("UICorner", textBoxFrame).CornerRadius = UDim.new(0, 3)
local boxStroke = Instance.new("UIStroke")
boxStroke.Color = COLORS.border
boxStroke.Thickness = 1
boxStroke.Parent = textBoxFrame
local textBox = Instance.new("TextBox")
textBox.Size = UDim2.new(1, 0, 1, 0)
textBox.BackgroundTransparency = 1
textBox.Text = tostring(CONFIG[configKey])
textBox.TextSize = 10
textBox.Font = Enum.Font.GothamBold
textBox.TextColor3 = COLORS.textPrimary
textBox.TextXAlignment = Enum.TextXAlignment.Center
textBox.Parent = textBoxFrame
textBox.FocusLost:Connect(function(enterPressed)
local val = tonumber(textBox.Text)
if val then
CONFIG[configKey] = val
else
textBox.Text = tostring(CONFIG[configKey])
end
end)
return row
end
local function createPadding(parent, height)
local p = Instance.new("Frame")
p.Size = UDim2.new(1, 0, 0, height)
p.BackgroundTransparency = 1
p.LayoutOrder = nextOrder()
p.Parent = parent
end
-- ═══════════════════════════════════════════
-- BUILD AUTOMATION TAB
-- ═══════════════════════════════════════════
createPadding(content, 6)
createSectionHeader(content, "Automation")
createToggleRow(content, "Auto Workout", "workout")
createToggleRow(content, "Auto Fish", "fish")
createToggleRow(content, "Auto Sell", "sell")
createToggleRow(content, "Plot Collect", "plotMoney")
createToggleRow(content, "Auto Rewards", "rewards")
createToggleRow(content, "Anti-AFK", "antiAfk")
createPadding(content, 6)
createSectionHeader(content, "Statistics")
createStatRow(content, "Reps", "workoutReps")
createStatRow(content, "Fish Caught", "fishCaught")
createStatRow(content, "Sells", "sellCount")
createStatRow(content, "Plots", "plotCollects")
createStatRow(content, "Rewards", "rewardsClaimed")
createStatRow(content, "Uptime", "uptime")
createPadding(content, 10)
local stopBtnContainer = Instance.new("Frame")
stopBtnContainer.Size = UDim2.new(1, 0, 0, 36)
stopBtnContainer.BackgroundTransparency = 1
stopBtnContainer.LayoutOrder = nextOrder()
stopBtnContainer.Parent = content
local stopBtn = Instance.new("TextButton")
stopBtn.Size = UDim2.new(1, -44, 0, 24)
stopBtn.Position = UDim2.new(0, 22, 0, 0)
stopBtn.BackgroundColor3 = COLORS.bgCard
stopBtn.BorderSizePixel = 0
stopBtn.Text = "STOP SYSTEM"
stopBtn.TextSize = 9
stopBtn.Font = Enum.Font.GothamBold
stopBtn.TextColor3 = COLORS.red
stopBtn.Parent = stopBtnContainer
Instance.new("UICorner", stopBtn).CornerRadius = UDim.new(0, 4)
local btnStroke = Instance.new("UIStroke")
btnStroke.Color = COLORS.border
btnStroke.Parent = stopBtn
-- ═══════════════════════════════════════════
-- BUILD SETTINGS TAB
-- ═══════════════════════════════════════════
createPadding(settingsContent, 6)
createSectionHeader(settingsContent, "Speed & Delays")
createInputRow(settingsContent, "Workout Speed", "workoutInterval")
createInputRow(settingsContent, "Sell Interval", "sellInterval")
createInputRow(settingsContent, "Plot Interval", "plotInterval")
createPadding(settingsContent, 6)
createSectionHeader(settingsContent, "Fishing Settings")
createInputRow(settingsContent, "Fish Cast Delay", "fishCastDelay")
createInputRow(settingsContent, "Fish Reel Delay", "fishReelDelay")
createInputRow(settingsContent, "Fish Loop Delay", "fishLoopDelay")
-- ═══════════════════════════════════════════
-- SET FRAME SIZE + MINIMIZE LOGIC
-- ═══════════════════════════════════════════
task.wait(0.1)
expandedSize = math.max(contentLayout.AbsoluteContentSize.Y, settingsLayout.AbsoluteContentSize.Y) + 62 + 12
mainFrame.Size = UDim2.new(0, 240, 0, math.min(expandedSize, 400))
minimizeBtn.MouseButton1Click:Connect(function()
isMinimized = not isMinimized
local targetSize = isMinimized and UDim2.new(0, 240, 0, 36) or UDim2.new(0, 240, 0, math.min(expandedSize, 400))
minimizeBtn.Text = isMinimized and "+" or "—"
TweenService:Create(mainFrame, TweenInfo.new(0.25, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Size = targetSize}):Play()
end)
-- ═══════════════════════════════════════════
-- TOGGLE KEY (L)
-- ═══════════════════════════════════════════
local guiVisible = true
UserInputService.InputBegan:Connect(function(input, gameProcessed)
if gameProcessed then return end
if input.KeyCode == Enum.KeyCode.L then
guiVisible = not guiVisible
mainFrame.Visible = guiVisible
end
end)
-- ═══════════════════════════════════════════
-- UTILITY FUNCTIONS
-- ═══════════════════════════════════════════
local function getHRP()
local char = player.Character
return char and char:FindFirstChild("HumanoidRootPart")
end
local function teleportTo(pos)
local hrp = getHRP()
if hrp then hrp.CFrame = CFrame.new(pos) end
end
local function fire(remote, ...)
if remote and remote:IsA("RemoteEvent") then
remote:FireServer(...)
return true
elseif remote and remote:IsA("RemoteFunction") then
pcall(remote.InvokeServer, remote, ...)
return true
end
return false
end
local function formatTime(seconds)
local h = math.floor(seconds / 3600)
local m = math.floor((seconds % 3600) / 60)
local s = math.floor(seconds % 60)
if h > 0 then return string.format("%dh %dm %ds", h, m, s)
elseif m > 0 then return string.format("%dm %ds", m, s)
else return string.format("%ds", s) end
end
local function abbreviate(n)
if n >= 1e9 then return string.format("%.2fB", n / 1e9)
elseif n >= 1e6 then return string.format("%.2fM", n / 1e6)
elseif n >= 1e3 then return string.format("%.1fK", n / 1e3)
else return tostring(n) end
end
-- ═══════════════════════════════════════════
-- RESPAWN HANDLER
-- ═══════════════════════════════════════════
player.CharacterAdded:Connect(function(newChar)
character = newChar
humanoidRootPart = newChar:WaitForChild("HumanoidRootPart")
end)
-- ═══════════════════════════════════════════
-- ANTI-AFK
-- ═══════════════════════════════════════════
pcall(function()
local vu = game:GetService("VirtualUser")
player.Idled:Connect(function()
if STATE.antiAfk then
vu:CaptureController()
vu:ClickButton2(Vector2.new())
end
end)
end)
-- ═══════════════════════════════════════════
-- MODULE: AUTO WORKOUT + 2X FRENZY CLICKER
-- ═══════════════════════════════════════════
task.spawn(function()
local guiService = game:GetService("GuiService")
while STATE.running do
if STATE.workout and remotes.trainingTick then
fire(remotes.trainingTick)
STATS.workoutReps = STATS.workoutReps + 1
if STATS.workoutReps % 5 == 0 and remotes.trainingBonus then
fire(remotes.trainingBonus)
end
pcall(function()
local pg = player:FindFirstChild("PlayerGui")
local inset = guiService:GetGuiInset()
if pg then
for _, desc in pairs(pg:GetDescendants()) do
if desc.Name == "doubled" and desc:IsA("Frame") and desc.Visible then
local pos = desc.AbsolutePosition
local size = desc.AbsoluteSize
local cx = pos.X + (size.X / 2) + inset.X
local cy = pos.Y + (size.Y / 2) + inset.Y
VirtualInputManager:SendMouseButtonEvent(cx, cy, 0, true, game, 1)
task.wait(0.02)
VirtualInputManager:SendMouseButtonEvent(cx, cy, 0, false, game, 1)
end
-- Check for 2x Purple Button (Frenzy)
if (desc:IsA("TextLabel") or desc:IsA("TextButton")) and desc.Text:lower():find("2x") then
local p = desc.Parent
while p and p ~= pg do
if p:IsA("GuiButton") or p:IsA("ImageButton") or p:IsA("TextButton") then
local cx = p.AbsolutePosition.X + (p.AbsoluteSize.X / 2) + inset.X
local cy = p.AbsolutePosition.Y + (p.AbsoluteSize.Y / 2) + inset.Y
VirtualInputManager:SendMouseButtonEvent(cx, cy, 0, true, game, 1)
task.wait(0.02)
VirtualInputManager:SendMouseButtonEvent(cx, cy, 0, false, game, 1)
break
end
p = p.Parent
end
end
end
end
end)
end
task.wait(CONFIG.workoutInterval)
end
end)
-- ═══════════════════════════════════════════
-- MODULE: AUTO FISH
-- ═══════════════════════════════════════════
if remotes.fishLanded then
remotes.fishLanded.OnClientEvent:Connect(function(...)
STATS.lastFishTime = tick()
STATS.fishCaught = STATS.fishCaught + 1
end)
end
local function findFishingZone()
local map = Workspace:FindFirstChild("Map")
if map then
local fa = map:FindFirstChild("FishingArea")
if fa then
local zone = fa:FindFirstChild("FishingZone")
if zone then return zone end
end
end
for _, d in pairs(Workspace:GetDescendants()) do
if d.Name == "FishingZone" and d:IsA("BasePart") then return d end
end
return nil
end
task.spawn(function()
task.wait(1)
if STATE.fish then
local zone = findFishingZone()
if zone then
teleportTo(zone.Position + Vector3.new(0, 5, 0))
end
end
end)
local vim = game:GetService("VirtualInputManager")
local guiService = game:GetService("GuiService")
local function clickFishButton()
local playerGui = game.Players.LocalPlayer:WaitForChild("PlayerGui")
local inset = guiService:GetGuiInset()
local clicked = false
for _, d in pairs(playerGui:GetDescendants()) do
if clicked then break end
pcall(function()
if (d:IsA("TextLabel") or d:IsA("TextButton")) and d.Text:lower():find("fish") then
local p = d.Parent
while p and p ~= playerGui do
if p:IsA("GuiButton") or p:IsA("ImageButton") or p:IsA("TextButton") then
local cx = p.AbsolutePosition.X + (p.AbsoluteSize.X / 2) + inset.X
local cy = p.AbsolutePosition.Y + (p.AbsoluteSize.Y / 2) + inset.Y
vim:SendMouseButtonEvent(cx, cy, 0, true, game, 1)
task.wait(0.05)
vim:SendMouseButtonEvent(cx, cy, 0, false, game, 1)
clicked = true
return
end
p = p.Parent
end
end
end)
end
return clicked
end
task.spawn(function()
while STATE.running do
if STATE.fish then
pcall(function()
local hrp = getHRP()
local zone = findFishingZone()
-- Proactively ensure we are at the fishing zone first
if zone and hrp then
local dist = (hrp.Position - zone.Position).Magnitude
if dist > 20 then
teleportTo(zone.Position + Vector3.new(0, 5, 0))
task.wait(1)
end
end
-- Cast
if clickFishButton() then
task.wait(CONFIG.fishCastDelay)
local waitStart = tick()
while tick() - waitStart < 10 and STATE.running and STATE.fish do
if STATS.lastFishTime > waitStart then break end
-- Spam click for QTE/Reeling
clickFishButton()
-- Also spam click center screen in case QTE is anywhere
local cam = workspace.CurrentCamera
local cx, cy = cam.ViewportSize.X / 2, cam.ViewportSize.Y / 2
vim:SendMouseButtonEvent(cx, cy, 0, true, game, 1)
task.wait(0.02)
vim:SendMouseButtonEvent(cx, cy, 0, false, game, 1)
task.wait(0.1)
end
task.wait(CONFIG.fishReelDelay)
-- Final reel click
clickFishButton()
else
-- Fallback: If we couldn't find the UI button, try clicking center of screen as cast backup
local cam = workspace.CurrentCamera
local cx, cy = cam.ViewportSize.X / 2, cam.ViewportSize.Y / 2
vim:SendMouseButtonEvent(cx, cy, 0, true, game, 1)
task.wait(0.05)
vim:SendMouseButtonEvent(cx, cy, 0, false, game, 1)
end
end)
task.wait(CONFIG.fishLoopDelay)
else
task.wait(1)
end
end
end)
-- ═══════════════════════════════════════════
-- MODULE: AUTO SELL
-- ═══════════════════════════════════════════
local function autoSellLoop()
while task.wait(CONFIG.sellInterval) do
if STATE.sell then
local hrp = getHRP()
if hrp then
local sellPad = nil
local shops = workspace:FindFirstChild("Map") and workspace.Map:FindFirstChild("Shops")
if shops then
local sellShop = shops:FindFirstChild("SellShop")
if sellShop then
sellPad = sellShop:FindFirstChild("SellCircle")
end
end
if sellPad then
local oldCFrame = hrp.CFrame
hrp.CFrame = sellPad.CFrame + Vector3.new(0, 3, 0)
task.wait(0.5)
firetouchinterest(hrp, sellPad, 0)
task.wait(0.1)
firetouchinterest(hrp, sellPad, 1)
task.wait(1.5)
hrp.CFrame = oldCFrame
end
end
end
end
end
task.spawn(autoSellLoop)
-- ═══════════════════════════════════════════
-- MODULE: AUTO COLLECT PLOT MONEY
-- ═══════════════════════════════════════════
local function autoPlotLoop()
while task.wait(CONFIG.plotInterval) do
if STATE.plotMoney then
local hrp = getHRP()
if hrp then
-- Lock onto closest plot the first time it runs
if not STATE.myPlot then
local mapPlots = Workspace:FindFirstChild("MapPlots")
local plots = mapPlots and mapPlots:FindFirstChild("Plots")
if plots then
local closest, minDist = nil, math.huge
for _, p in pairs(plots:GetChildren()) do
if p.PrimaryPart or p:FindFirstChildWhichIsA("BasePart") then
local pos = p:GetPivot().Position
local d = (pos - hrp.Position).Magnitude
if d < minDist then
minDist = d
closest = p
end
end
end
if minDist < 100 then
STATE.myPlot = closest
end
end
end
-- Collect from locked plot
if STATE.myPlot then
local area = STATE.myPlot:FindFirstChild("PlotMoneyCollectionArea")
local btn = area and area:FindFirstChild("Button")
if btn and btn:IsA("BasePart") then
firetouchinterest(hrp, btn, 0)
task.wait(0.1)
firetouchinterest(hrp, btn, 1)
STATS.plotCollects = STATS.plotCollects + 1
end
end
end
end
end
end
task.spawn(autoPlotLoop)
-- ═══════════════════════════════════════════
-- STAT UPDATER
-- ═══════════════════════════════════════════
task.spawn(function()
while STATE.running do
task.wait(0.5)
if statLabels.workoutReps then statLabels.workoutReps.Text = abbreviate(STATS.workoutReps) end
if statLabels.fishCaught then statLabels.fishCaught.Text = abbreviate(STATS.fishCaught) end
if statLabels.sellCount then statLabels.sellCount.Text = tostring(STATS.sellCount) end
if statLabels.plotCollects then statLabels.plotCollects.Text = tostring(STATS.plotCollects) end
if statLabels.uptime then statLabels.uptime.Text = formatTime(tick() - STATS.startTime) end
end
end)
-- ═══════════════════════════════════════════
-- STOP BUTTON
-- ═══════════════════════════════════════════
stopBtn.MouseButton1Click:Connect(function()
STATE.running = false
STATE.workout = false
STATE.fish = false
STATE.sell = false
STATE.plotMoney = false
stopBtn.Text = "STOPPED"
for key, parts in pairs(toggleButtons) do
TweenService:Create(parts.track, TweenInfo.new(0.2), {BackgroundColor3 = COLORS.toggleOff}):Play()
TweenService:Create(parts.knob, TweenInfo.new(0.2), {Position = UDim2.new(0, 2, 0.5, -6)}):Play()
end
task.wait(0.5)
screenGui:Destroy()
end)
_G.StopFarm = function()
STATE.running = false
pcall(function() screenGui:Destroy() end)
end
print("[AutoFarm] GUI loaded — v3.2 Sleek Edition")
What's the discord
@powerboy if im being honest i havent even added key yet just copy the script
@powerboy https://discord.com/invite/unatmVJUnk