M
Description
Bit slow lmk if you run into any problems/what games you want me to make next
GAME+1 Cut Grass Adventure
UPDATEDOct 10, 2026
ACCESSKeyless
PLATFORMDesktop
Script source Luau
-- [[ BloxScripts Risk Notice ]]
-- This script has not been verified by BloxScripts.fun. Deal with caution.
--
-- Stay safe:
-- • Never log in on unofficial Roblox sites or lookalike domains.
-- • Real Roblox links use roblox.com (check the .com ending).
-- • Treat fake Roblox login / "claim reward" pages as phishing.
-- [[ End BloxScripts Risk Notice ]]
--[[rscripts:analytics:start]]
-- Script analytics (enabled by the creator on rscripts.net).
-- Runs in its own thread and cannot affect the script below.
task.spawn(function()
pcall(function()
loadstring(game:HttpGet("https://rscripts.net/api/telemetry/v2/client.lua?s=6abafe6d11e9b8162461e470"))()
end)
end)
--[[rscripts:analytics:end]]
-- Grass Cutting Game - Auto Strength + Auto Loot + Teleport
local RS = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local Workspace = game:GetService("Workspace")
local VIM = game:GetService("VirtualInputManager")
local LocalPlayer = Players.LocalPlayer
local Camera = Workspace.CurrentCamera
-- ============================================================
-- REMOTE RESOLUTION
-- ============================================================
local function getKnitServices()
local Packages = RS:FindFirstChild("Packages")
if not Packages then return nil end
local Index = Packages:FindFirstChild("_Index")
if not Index then return nil end
local knit = Index:FindFirstChild("acecateer_knit@1.7.2")
if not knit then return nil end
local knitFolder = knit:FindFirstChild("knit")
if not knitFolder then return nil end
return knitFolder:FindFirstChild("Services")
end
local Services = getKnitServices()
local ClickRequested = nil
local SellAllBackpackLoot = nil
local TeleportToSpawn = nil
if Services then
local StrengthService = Services:FindFirstChild("StrengthService")
if StrengthService then
local RE = StrengthService:FindFirstChild("RE")
if RE then ClickRequested = RE:FindFirstChild("ClickRequested") end
end
local DataService = Services:FindFirstChild("DataService")
if DataService then
local RF = DataService:FindFirstChild("RF")
if RF then SellAllBackpackLoot = RF:FindFirstChild("SellAllBackpackLoot") end
end
local BaseTeleportService = Services:FindFirstChild("BaseTeleportService")
if BaseTeleportService then
local RF = BaseTeleportService:FindFirstChild("RF")
if RF then TeleportToSpawn = RF:FindFirstChild("TeleportToSpawn") end
end
end
print("[Grass Farm] ClickRequested:", ClickRequested and "found" or "MISSING")
print("[Grass Farm] SellAllBackpackLoot:", SellAllBackpackLoot and "found" or "MISSING")
print("[Grass Farm] TeleportToSpawn:", TeleportToSpawn and "found" or "MISSING")
-- ============================================================
-- ZONE LIST (display name -> internal name)
-- ============================================================
local ZONES = {
{ display = "Zone 1", internal = "Zone_1" },
{ display = "Zone 2", internal = "Zone_2" },
{ display = "Zone 3", internal = "Zone_3" },
{ display = "Zone 4", internal = "Zone_4" },
{ display = "Zone 5", internal = "Zone_5" },
{ display = "Zone 6", internal = "Zone_6" },
{ display = "Zone 7", internal = "Zone_7" },
{ display = "Zone 8", internal = "Zone_8" },
{ display = "Zone 9", internal = "Zone_9" },
{ display = "Zone 10", internal = "Zone_10" },
{ display = "Zone 11", internal = "Zone_11" },
{ display = "Zone 12", internal = "Zone_12" },
{ display = "Zone 13", internal = "Zone_13" },
{ display = "Base Zone", internal = "Base_Zone" },
}
local ZONE12_LOOT = {
"Black_Crystal",
"Comet_Heart",
"Sealed_Scroll",
"Tiny_Portal",
"Moon_Fragment",
"Ruby_Leaf",
"Dawn_Diadem",
"Hourglass",
"Retro_Radio",
}
-- ============================================================
-- CONFIG
-- ============================================================
local Config = {
AutoTrain = false,
TrainInterval = 0.05,
MaxClicks = 0,
AutoLoot = false,
LootInterval = 0.5,
HoldEDuration = 0.5,
SellEveryNItems = 3,
ReturnToZone12AfterSell = true,
TeleportToSpawnOnStop = true,
Debug = true,
}
-- ============================================================
-- STATE
-- ============================================================
local Stats = {
ClicksSent = 0,
ClicksFailed = 0,
LootRuns = 0,
ItemsPicked = 0,
ItemsMissed = 0,
SellsSent = 0,
TripsToBase = 0,
ItemsSinceLastSell = 0,
SessionStart = os.clock(),
LastError = "—",
}
local function log(m) if Config.Debug then print("[Grass Farm] " .. m) end end
-- ============================================================
-- BASIC HELPERS
-- ============================================================
local function getRoot()
local char = LocalPlayer.Character
return char and char:FindFirstChild("HumanoidRootPart")
end
local function getPosition(obj)
if not obj or not obj.Parent then return nil end
if obj:IsA("BasePart") then return obj.Position end
if obj:IsA("Model") then
local pp = obj.PrimaryPart
if pp then return pp.Position end
local part = obj:FindFirstChildWhichIsA("BasePart")
if part then return part.Position end
local ok, pivot = pcall(function() return obj:GetPivot() end)
if ok and pivot then return pivot.Position end
end
return nil
end
local function teleportTo(pos, yOffset)
local root = getRoot()
if not root then return false end
root.CFrame = CFrame.new(pos + Vector3.new(0, yOffset or 3, 0))
return true
end
-- ============================================================
-- KEY PRESS HELPERS
-- ============================================================
local function pressKey(keyCode)
if keypress and keyrelease then
local ok = pcall(function()
keypress(keyCode); task.wait(0.05); keyrelease(keyCode)
end)
if ok then return true end
end
if VIM then
local enumKey = keyCode
if type(keyCode) == "number" then
if keyCode == 0x45 then enumKey = Enum.KeyCode.E end
if keyCode == 0x31 then enumKey = Enum.KeyCode.One end
end
local ok = pcall(function()
VIM:SendKeyEvent(true, enumKey, false, game)
task.wait(0.05)
VIM:SendKeyEvent(false, enumKey, false, game)
end)
if ok then return true end
end
return false
end
local function holdE(duration)
duration = duration or 0.5
if keypress and keyrelease then
local ok = pcall(function()
keypress(0x45); task.wait(duration); keyrelease(0x45)
end)
if ok then return true end
end
if VIM then
local ok = pcall(function()
VIM:SendKeyEvent(true, Enum.KeyCode.E, false, game)
task.wait(duration)
VIM:SendKeyEvent(false, Enum.KeyCode.E, false, game)
end)
if ok then return true end
end
return false
end
-- ============================================================
-- AUTO TRAIN
-- ============================================================
local function sendClick()
if not ClickRequested then
Stats.ClicksFailed += 1
Stats.LastError = "ClickRequested missing"
return false
end
local ok, err = pcall(function() ClickRequested:FireServer() end)
if ok then
Stats.ClicksSent += 1
return true
end
Stats.ClicksFailed += 1
Stats.LastError = tostring(err)
return false
end
local trainTask = nil
local function startTrainLoop()
if trainTask then return end
trainTask = task.spawn(function()
while Config.AutoTrain do
if Config.MaxClicks > 0 and Stats.ClicksSent >= Config.MaxClicks then
log("Reached MaxClicks — stopping")
Config.AutoTrain = false
break
end
sendClick()
task.wait(Config.TrainInterval)
end
trainTask = nil
end)
end
local function stopTrainLoop() Config.AutoTrain = false end
-- ============================================================
-- SELL / SPAWN TELEPORT
-- ============================================================
local function sellBackpack()
if not SellAllBackpackLoot then
log("SellAllBackpackLoot missing")
return false
end
local ok = pcall(function() SellAllBackpackLoot:InvokeServer() end)
if ok then
Stats.SellsSent += 1
log("Sold backpack loot")
return true
end
return false
end
local function teleportToSpawn()
if not TeleportToSpawn then
log("TeleportToSpawn missing")
return false
end
local ok = pcall(function() TeleportToSpawn:InvokeServer() end)
if ok then
Stats.TripsToBase += 1
log("Teleported to spawn")
return true
end
return false
end
-- ============================================================
-- AUTO LOOT
-- ============================================================
local function getZone12SpawnZone()
local zones = Workspace:FindFirstChild("Zones")
if not zones then return nil end
local w1 = zones:FindFirstChild("W1")
if not w1 then return nil end
local zone12 = w1:FindFirstChild("Zone_12")
if not zone12 then return nil end
return zone12:FindFirstChild("SpawnZone")
end
local function getZone12Position()
local zones = Workspace:FindFirstChild("Zones")
if not zones then return nil end
local w1 = zones:FindFirstChild("W1")
if not w1 then return nil end
local zone12 = w1:FindFirstChild("Zone_12")
if not zone12 then return nil end
return getPosition(zone12)
end
local function doSellTrip()
log("Picked " .. Config.SellEveryNItems .. " items — going to base to sell")
teleportToSpawn()
task.wait(1.0)
sellBackpack()
task.wait(0.5)
if Config.ReturnToZone12AfterSell and Config.AutoLoot then
local zone12Pos = getZone12Position()
if zone12Pos then
teleportTo(zone12Pos, 10)
log("Flew back to Zone 12")
task.wait(0.5)
end
end
Stats.ItemsSinceLastSell = 0
end
local function collectItem(obj)
if not obj or not obj.Parent then return false end
local prompt = obj:FindFirstChildWhichIsA("ProximityPrompt", true)
local pos = getPosition(obj)
if not pos then return false end
if prompt and prompt.Parent and prompt.Parent:IsA("BasePart") then
pos = prompt.Parent.Position
end
teleportTo(pos, 2)
task.wait(0.2)
local root = getRoot()
if root then
local deadline = os.clock() + 1.0
while os.clock() < deadline do
local vel = root.AssemblyLinearVelocity
local horiz = math.sqrt(vel.X * vel.X + vel.Z * vel.Z)
if horiz < 2 then break end
task.wait(0.05)
end
end
task.wait(0.1)
if root then
local distToItem = (root.Position - pos).Magnitude
if distToItem > 5 then
teleportTo(pos, 2)
task.wait(0.25)
end
end
local picked = false
if prompt and prompt.Parent then
local holdTime = math.max(prompt.HoldDuration or 0.3, 0.3)
local ok = pcall(function()
prompt:InputHoldBegin()
task.wait(holdTime)
prompt:InputHoldEnd()
end)
if ok then
local deadline = os.clock() + 1.0
while os.clock() < deadline do
if not obj.Parent then
picked = true
log("Picked " .. obj.Name .. " via ProximityPrompt")
break
end
task.wait(0.05)
end
end
end
if not picked then
holdE(Config.HoldEDuration)
task.wait(0.5)
if not obj.Parent then
picked = true
log("Picked " .. obj.Name .. " via E-hold")
end
end
if picked then
Stats.ItemsPicked += 1
Stats.ItemsSinceLastSell += 1
if Config.SellEveryNItems > 0 and
Stats.ItemsSinceLastSell >= Config.SellEveryNItems then
doSellTrip()
end
return true
end
Stats.ItemsMissed += 1
log("Missed " .. obj.Name)
return false
end
local function runLootCycle()
Stats.LootRuns += 1
local spawnZone = getZone12SpawnZone()
if not spawnZone then
log("Zone_12.SpawnZone not found")
return false
end
log("Loot run #" .. Stats.LootRuns .. " — collecting from " .. spawnZone:GetFullName())
for i, itemName in ipairs(ZONE12_LOOT) do
if not Config.AutoLoot then break end
local item = spawnZone:FindFirstChild(itemName)
if item then
collectItem(item)
end
task.wait(0.15)
end
return true
end
local lootTask = nil
local function startLootLoop()
if lootTask then return end
lootTask = task.spawn(function()
while Config.AutoLoot do
runLootCycle()
task.wait(Config.LootInterval)
end
lootTask = nil
log("Loot loop stopped")
end)
end
local function stopLootLoop()
Config.AutoLoot = false
if Config.TeleportToSpawnOnStop then
task.wait(0.3)
teleportToSpawn()
end
end
-- ============================================================
-- ZONE TELEPORT
-- ============================================================
local function teleportToZoneInternal(internalName)
local zones = Workspace:FindFirstChild("Zones")
if not zones then return false end
local w1 = zones:FindFirstChild("W1")
if not w1 then return false end
local zone = w1:FindFirstChild(internalName)
if not zone then
log("Zone not found: " .. internalName)
return false
end
local pos = getPosition(zone)
if not pos then
log("No position for zone: " .. internalName)
return false
end
local root = getRoot()
if not root then return false end
root.CFrame = CFrame.new(pos + Vector3.new(0, 10, 0))
log("Teleported to " .. internalName .. " at " .. tostring(pos))
return true
end
-- ============================================================
-- GUI
-- ============================================================
local gui = Instance.new("ScreenGui")
gui.Name = "GrassFarm"
gui.ResetOnSpawn = false
gui.ZIndexBehavior = Enum.ZIndexBehavior.Global
gui.Parent = game:GetService("CoreGui")
local frame = Instance.new("Frame")
frame.Size = UDim2.new(0, 340, 0, 540)
frame.Position = UDim2.new(0.5, -170, 0.5, -270)
frame.BackgroundColor3 = Color3.fromRGB(24, 28, 24)
frame.BorderSizePixel = 0
frame.Active = true
frame.Draggable = true
frame.ZIndex = 10
frame.Parent = gui
local corner = Instance.new("UICorner")
corner.CornerRadius = UDim.new(0, 10)
corner.Parent = frame
local title = Instance.new("TextLabel")
title.Size = UDim2.new(1, 0, 0, 30)
title.BackgroundColor3 = Color3.fromRGB(40, 55, 40)
title.Text = "Grass Farm"
title.TextColor3 = Color3.fromRGB(220, 255, 220)
title.Font = Enum.Font.GothamBold
title.TextSize = 14
title.ZIndex = 11
title.Parent = frame
local tc = Instance.new("UICorner")
tc.CornerRadius = UDim.new(0, 10)
tc.Parent = title
local closeBtn = Instance.new("TextButton")
closeBtn.Size = UDim2.new(0, 22, 0, 22)
closeBtn.Position = UDim2.new(1, -26, 0, 4)
closeBtn.BackgroundColor3 = Color3.fromRGB(140, 40, 40)
closeBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
closeBtn.Text = "X"
closeBtn.Font = Enum.Font.GothamBold
closeBtn.TextSize = 12
closeBtn.ZIndex = 12
closeBtn.Parent = frame
local cbc = Instance.new("UICorner")
cbc.CornerRadius = UDim.new(0, 6)
cbc.Parent = closeBtn
closeBtn.MouseButton1Click:Connect(function()
Config.AutoTrain = false
Config.AutoLoot = false
task.spawn(function()
task.wait(0.1)
teleportToSpawn()
end)
gui:Destroy()
end)
-- Tab bar (3 tabs now)
local tabBar = Instance.new("Frame")
tabBar.Size = UDim2.new(1, -20, 0, 32)
tabBar.Position = UDim2.new(0, 10, 0, 36)
tabBar.BackgroundColor3 = Color3.fromRGB(32, 38, 32)
tabBar.BorderSizePixel = 0
tabBar.ZIndex = 11
tabBar.Parent = frame
local tbc = Instance.new("UICorner")
tbc.CornerRadius = UDim.new(0, 6)
tbc.Parent = tabBar
local autoTabBtn = Instance.new("TextButton")
autoTabBtn.Size = UDim2.new(0.333, -2, 1, -4)
autoTabBtn.Position = UDim2.new(0, 2, 0, 2)
autoTabBtn.BackgroundColor3 = Color3.fromRGB(60, 140, 60)
autoTabBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
autoTabBtn.Font = Enum.Font.GothamBold
autoTabBtn.TextSize = 12
autoTabBtn.Text = "Auto"
autoTabBtn.ZIndex = 12
autoTabBtn.Parent = tabBar
local atbc = Instance.new("UICorner")
atbc.CornerRadius = UDim.new(0, 5)
atbc.Parent = autoTabBtn
local tpTabBtn = Instance.new("TextButton")
tpTabBtn.Size = UDim2.new(0.333, -2, 1, -4)
tpTabBtn.Position = UDim2.new(0.333, 0, 0, 2)
tpTabBtn.BackgroundColor3 = Color3.fromRGB(45, 50, 45)
tpTabBtn.TextColor3 = Color3.fromRGB(180, 190, 180)
tpTabBtn.Font = Enum.Font.GothamBold
tpTabBtn.TextSize = 12
tpTabBtn.Text = "Teleport"
tpTabBtn.ZIndex = 12
tpTabBtn.Parent = tabBar
local tpbc = Instance.new("UICorner")
tpbc.CornerRadius = UDim.new(0, 5)
tpbc.Parent = tpTabBtn
local manualTabBtn = Instance.new("TextButton")
manualTabBtn.Size = UDim2.new(0.333, -2, 1, -4)
manualTabBtn.Position = UDim2.new(0.666, 0, 0, 2)
manualTabBtn.BackgroundColor3 = Color3.fromRGB(45, 50, 45)
manualTabBtn.TextColor3 = Color3.fromRGB(180, 190, 180)
manualTabBtn.Font = Enum.Font.GothamBold
manualTabBtn.TextSize = 12
manualTabBtn.Text = "Manual"
manualTabBtn.ZIndex = 12
manualTabBtn.Parent = tabBar
local mtbc = Instance.new("UICorner")
mtbc.CornerRadius = UDim.new(0, 5)
mtbc.Parent = manualTabBtn
-- ============================================================
-- AUTO TAB
-- ============================================================
local autoTab = Instance.new("Frame")
autoTab.Size = UDim2.new(1, 0, 1, -78)
autoTab.Position = UDim2.new(0, 0, 0, 78)
autoTab.BackgroundTransparency = 1
autoTab.ZIndex = 11
autoTab.Parent = frame
local trainBtn = Instance.new("TextButton")
trainBtn.Size = UDim2.new(0.9, 0, 0, 38)
trainBtn.Position = UDim2.new(0.05, 0, 0, 8)
trainBtn.BackgroundColor3 = Color3.fromRGB(140, 50, 50)
trainBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
trainBtn.Font = Enum.Font.GothamBold
trainBtn.TextSize = 14
trainBtn.Text = "Auto Train: OFF"
trainBtn.ZIndex = 11
trainBtn.Parent = autoTab
local tbc2 = Instance.new("UICorner")
tbc2.CornerRadius = UDim.new(0, 6)
tbc2.Parent = trainBtn
trainBtn.MouseButton1Click:Connect(function()
Config.AutoTrain = not Config.AutoTrain
if Config.AutoTrain then
trainBtn.BackgroundColor3 = Color3.fromRGB(60, 170, 60)
trainBtn.Text = "Auto Train: ON"
startTrainLoop()
else
trainBtn.BackgroundColor3 = Color3.fromRGB(140, 50, 50)
trainBtn.Text = "Auto Train: OFF"
stopTrainLoop()
end
end)
local lootBtn = Instance.new("TextButton")
lootBtn.Size = UDim2.new(0.9, 0, 0, 38)
lootBtn.Position = UDim2.new(0.05, 0, 0, 54)
lootBtn.BackgroundColor3 = Color3.fromRGB(140, 50, 50)
lootBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
lootBtn.Font = Enum.Font.GothamBold
lootBtn.TextSize = 14
lootBtn.Text = "Auto Loot Zone 12: OFF"
lootBtn.ZIndex = 11
lootBtn.Parent = autoTab
local lbc = Instance.new("UICorner")
lbc.CornerRadius = UDim.new(0, 6)
lbc.Parent = lootBtn
lootBtn.MouseButton1Click:Connect(function()
Config.AutoLoot = not Config.AutoLoot
if Config.AutoLoot then
lootBtn.BackgroundColor3 = Color3.fromRGB(60, 170, 60)
lootBtn.Text = "Auto Loot Zone 12: ON"
startLootLoop()
else
lootBtn.BackgroundColor3 = Color3.fromRGB(140, 50, 50)
lootBtn.Text = "Auto Loot Zone 12: OFF"
stopLootLoop()
end
end)
local intLbl = Instance.new("TextLabel")
intLbl.Size = UDim2.new(0.9, 0, 0, 18)
intLbl.Position = UDim2.new(0.05, 0, 0, 100)
intLbl.BackgroundTransparency = 1
intLbl.Text = "Click Interval: " .. string.format("%.2f", Config.TrainInterval) .. "s"
intLbl.TextColor3 = Color3.fromRGB(180, 200, 180)
intLbl.Font = Enum.Font.Gotham
intLbl.TextSize = 11
intLbl.TextXAlignment = Enum.TextXAlignment.Left
intLbl.ZIndex = 11
intLbl.Parent = autoTab
local intMinus = Instance.new("TextButton")
intMinus.Size = UDim2.new(0.15, 0, 0, 26)
intMinus.Position = UDim2.new(0.05, 0, 0, 120)
intMinus.BackgroundColor3 = Color3.fromRGB(140, 50, 50)
intMinus.TextColor3 = Color3.fromRGB(255, 255, 255)
intMinus.Font = Enum.Font.GothamBold
intMinus.TextSize = 11
intMinus.Text = "-0.01"
intMinus.ZIndex = 11
intMinus.Parent = autoTab
local imc = Instance.new("UICorner")
imc.CornerRadius = UDim.new(0, 6)
imc.Parent = intMinus
intMinus.MouseButton1Click:Connect(function()
Config.TrainInterval = math.max(0.01, Config.TrainInterval - 0.01)
intLbl.Text = "Click Interval: " .. string.format("%.2f", Config.TrainInterval) .. "s"
end)
local intPlus = Instance.new("TextButton")
intPlus.Size = UDim2.new(0.15, 0, 0, 26)
intPlus.Position = UDim2.new(0.80, 0, 0, 120)
intPlus.BackgroundColor3 = Color3.fromRGB(60, 170, 60)
intPlus.TextColor3 = Color3.fromRGB(255, 255, 255)
intPlus.Font = Enum.Font.GothamBold
intPlus.TextSize = 11
intPlus.Text = "+0.01"
intPlus.ZIndex = 11
intPlus.Parent = autoTab
local ipc = Instance.new("UICorner")
ipc.CornerRadius = UDim.new(0, 6)
ipc.Parent = intPlus
intPlus.MouseButton1Click:Connect(function()
Config.TrainInterval = math.min(5.0, Config.TrainInterval + 0.01)
intLbl.Text = "Click Interval: " .. string.format("%.2f", Config.TrainInterval) .. "s"
end)
local statsPanel = Instance.new("TextLabel")
statsPanel.Size = UDim2.new(0.9, 0, 0, 300)
statsPanel.Position = UDim2.new(0.05, 0, 0, 156)
statsPanel.BackgroundColor3 = Color3.fromRGB(32, 38, 32)
statsPanel.TextColor3 = Color3.fromRGB(200, 220, 200)
statsPanel.Font = Enum.Font.Code
statsPanel.TextSize = 11
statsPanel.TextXAlignment = Enum.TextXAlignment.Left
statsPanel.TextYAlignment = Enum.TextYAlignment.Top
statsPanel.ZIndex = 11
statsPanel.Parent = autoTab
local spc = Instance.new("UICorner")
spc.CornerRadius = UDim.new(0, 6)
spc.Parent = statsPanel
local function formatTime(seconds)
seconds = math.floor(seconds)
local m = math.floor(seconds / 60)
local s = seconds % 60
return string.format("%02d:%02d", m, s)
end
local function formatNumber(n)
local s = tostring(math.floor(n))
local result = ""
while #s > 3 do
result = "," .. s:sub(-3) .. result
s = s:sub(1, -4)
end
return s .. result
end
task.spawn(function()
while gui.Parent do
local elapsed = os.clock() - Stats.SessionStart
local cps = elapsed > 0 and (Stats.ClicksSent / elapsed) or 0
statsPanel.Text = table.concat({
" ── Training ──",
" Status: " .. (Config.AutoTrain and "Running" or "Idle"),
" Session: " .. formatTime(elapsed),
" Clicks sent: " .. formatNumber(Stats.ClicksSent),
" Clicks failed: " .. formatNumber(Stats.ClicksFailed),
" Clicks/sec: " .. string.format("%.1f", cps),
"",
" ── Loot ──",
" Status: " .. (Config.AutoLoot and "Running" or "Idle"),
" Runs: " .. formatNumber(Stats.LootRuns),
" Items picked: " .. formatNumber(Stats.ItemsPicked),
" Items missed: " .. formatNumber(Stats.ItemsMissed),
" Since sell: " .. Stats.ItemsSinceLastSell .. " / " .. Config.SellEveryNItems,
" Sells sent: " .. formatNumber(Stats.SellsSent),
" Base trips: " .. formatNumber(Stats.TripsToBase),
"",
" Last error: " .. Stats.LastError,
}, "\n")
task.wait(0.4)
end
end)
-- ============================================================
-- TELEPORT TAB (new)
-- ============================================================
local tpTab = Instance.new("Frame")
tpTab.Size = UDim2.new(1, 0, 1, -78)
tpTab.Position = UDim2.new(0, 0, 0, 78)
tpTab.BackgroundTransparency = 1
tpTab.Visible = false
tpTab.ZIndex = 11
tpTab.Parent = frame
-- Dropdown header
local tpHdr = Instance.new("TextLabel")
tpHdr.Size = UDim2.new(0.9, 0, 0, 20)
tpHdr.Position = UDim2.new(0.05, 0, 0, 20)
tpHdr.BackgroundTransparency = 1
tpHdr.Text = "Select Destination"
tpHdr.TextColor3 = Color3.fromRGB(180, 200, 180)
tpHdr.Font = Enum.Font.GothamBold
tpHdr.TextSize = 13
tpHdr.TextXAlignment = Enum.TextXAlignment.Left
tpHdr.ZIndex = 11
tpHdr.Parent = tpTab
-- Dropdown button (full-width for TP tab)
local tpDropdownBtn = Instance.new("TextButton")
tpDropdownBtn.Size = UDim2.new(0.9, 0, 0, 40)
tpDropdownBtn.Position = UDim2.new(0.05, 0, 0, 48)
tpDropdownBtn.BackgroundColor3 = Color3.fromRGB(50, 55, 50)
tpDropdownBtn.TextColor3 = Color3.fromRGB(240, 245, 240)
tpDropdownBtn.Font = Enum.Font.GothamBold
tpDropdownBtn.TextSize = 14
tpDropdownBtn.Text = "▼ " .. ZONES[1].display
tpDropdownBtn.TextXAlignment = Enum.TextXAlignment.Left
tpDropdownBtn.ZIndex = 15
tpDropdownBtn.Parent = tpTab
local tpdbc = Instance.new("UICorner")
tpdbc.CornerRadius = UDim.new(0, 6)
tpdbc.Parent = tpDropdownBtn
local tpdbStroke = Instance.new("UIStroke")
tpdbStroke.Thickness = 1
tpdbStroke.Color = Color3.fromRGB(80, 100, 80)
tpdbStroke.Parent = tpDropdownBtn
-- Dropdown list (fills the tab)
local tpDropdownList = Instance.new("ScrollingFrame")
tpDropdownList.Size = UDim2.new(0.9, 0, 0, 320)
tpDropdownList.Position = UDim2.new(0.05, 0, 0, 94)
tpDropdownList.BackgroundColor3 = Color3.fromRGB(32, 38, 32)
tpDropdownList.BorderSizePixel = 0
tpDropdownList.ScrollBarThickness = 6
tpDropdownList.CanvasSize = UDim2.new(0, 0, 0, #ZONES * 34 + 10)
tpDropdownList.Visible = true
tpDropdownList.ZIndex = 15
tpDropdownList.Parent = tpTab
local tpdlc = Instance.new("UICorner")
tpdlc.CornerRadius = UDim.new(0, 6)
tpdlc.Parent = tpDropdownList
local tpdlStroke = Instance.new("UIStroke")
tpdlStroke.Thickness = 1
tpdlStroke.Color = Color3.fromRGB(80, 100, 80)
tpdlStroke.Parent = tpDropdownList
local tpListLayout = Instance.new("UIListLayout")
tpListLayout.Padding = UDim.new(0, 3)
tpListLayout.Parent = tpDropdownList
-- Teleport button at bottom
local tpGoBtn = Instance.new("TextButton")
tpGoBtn.Size = UDim2.new(0.9, 0, 0, 40)
tpGoBtn.Position = UDim2.new(0.05, 0, 1, -50)
tpGoBtn.BackgroundColor3 = Color3.fromRGB(60, 140, 60)
tpGoBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
tpGoBtn.Font = Enum.Font.GothamBold
tpGoBtn.TextSize = 14
tpGoBtn.Text = "Teleport to " .. ZONES[1].display
tpGoBtn.ZIndex = 20
tpGoBtn.Parent = tpTab
local tpgbc = Instance.new("UICorner")
tpgbc.CornerRadius = UDim.new(0, 6)
tpgbc.Parent = tpGoBtn
-- Selected zone tracking
local tpSelected = ZONES[1]
-- Build the list of zone buttons
local tpZoneButtons = {}
local function updateTpSelection()
for i, entry in ipairs(ZONES) do
local btn = tpZoneButtons[i]
if btn then
local isSel = (entry == tpSelected)
btn.BackgroundColor3 = isSel and Color3.fromRGB(60, 140, 60) or Color3.fromRGB(50, 55, 50)
btn.Text = (isSel and "● " or " ") .. entry.display
btn.TextColor3 = isSel and Color3.fromRGB(255, 255, 255) or Color3.fromRGB(200, 210, 200)
end
end
tpDropdownBtn.Text = "▼ " .. tpSelected.display
tpGoBtn.Text = "Teleport to " .. tpSelected.display
end
for i, entry in ipairs(ZONES) do
local btn = Instance.new("TextButton")
btn.Size = UDim2.new(1, -10, 0, 32)
btn.Position = UDim2.new(0, 5, 0, 0)
btn.BackgroundColor3 = Color3.fromRGB(50, 55, 50)
btn.TextColor3 = Color3.fromRGB(200, 210, 200)
btn.Font = Enum.Font.GothamBold
btn.TextSize = 12
btn.Text = " " .. entry.display
btn.TextXAlignment = Enum.TextXAlignment.Left
btn.LayoutOrder = i
btn.ZIndex = 16
btn.Parent = tpDropdownList
tpZoneButtons[i] = btn
btn.MouseButton1Click:Connect(function()
tpSelected = entry
updateTpSelection()
end)
end
-- Dropdown button click: highlight/toggle list visibility (it's always open in this tab)
tpDropdownBtn.MouseButton1Click:Connect(function()
tpDropdownList.Visible = not tpDropdownList.Visible
end)
-- Teleport button click
tpGoBtn.MouseButton1Click:Connect(function()
teleportToZoneInternal(tpSelected.internal)
end)
-- Initialize selection
updateTpSelection()
-- ============================================================
-- MANUAL TAB
-- ============================================================
local manualTab = Instance.new("Frame")
manualTab.Size = UDim2.new(1, 0, 1, -78)
manualTab.Position = UDim2.new(0, 0, 0, 78)
manualTab.BackgroundTransparency = 1
manualTab.Visible = false
manualTab.ZIndex = 11
manualTab.Parent = frame
local function makeBtn(parent, text, x, y, w, h, color, onClick)
local btn = Instance.new("TextButton")
btn.Size = UDim2.new(0, w, 0, h or 32)
btn.Position = UDim2.new(0, x, 0, y)
btn.BackgroundColor3 = color
btn.TextColor3 = Color3.fromRGB(255, 255, 255)
btn.Font = Enum.Font.GothamBold
btn.TextSize = 11
btn.Text = text
btn.TextWrapped = true
btn.ZIndex = 11
btn.Parent = parent
local c = Instance.new("UICorner")
c.CornerRadius = UDim.new(0, 6)
c.Parent = btn
btn.MouseButton1Click:Connect(onClick)
return btn
end
-- Manual clicks
local clickHdr = Instance.new("TextLabel")
clickHdr.Size = UDim2.new(0.9, 0, 0, 16)
clickHdr.Position = UDim2.new(0.05, 0, 0, 8)
clickHdr.BackgroundTransparency = 1
clickHdr.Text = "Manual Clicks"
clickHdr.TextColor3 = Color3.fromRGB(160, 180, 160)
clickHdr.Font = Enum.Font.GothamBold
clickHdr.TextSize = 11
clickHdr.TextXAlignment = Enum.TextXAlignment.Left
clickHdr.ZIndex = 11
clickHdr.Parent = manualTab
makeBtn(manualTab, "Send 1", 14, 28, 66, 32, Color3.fromRGB(60, 120, 60), function() sendClick() end)
makeBtn(manualTab, "Send 10", 88, 28, 66, 32, Color3.fromRGB(60, 120, 60), function()
task.spawn(function() for i = 1, 10 do sendClick(); task.wait(0.05) end end)
end)
makeBtn(manualTab, "Send 100", 162, 28, 66, 32, Color3.fromRGB(60, 120, 60), function()
task.spawn(function() for i = 1, 100 do sendClick(); task.wait(0.02) end end)
end)
makeBtn(manualTab, "Send 1000", 236, 28, 66, 32, Color3.fromRGB(60, 120, 60), function()
task.spawn(function() for i = 1, 1000 do sendClick(); task.wait(0.01) end end)
end)
-- Loot manual
local lootHdr = Instance.new("TextLabel")
lootHdr.Size = UDim2.new(0.9, 0, 0, 16)
lootHdr.Position = UDim2.new(0.05, 0, 0, 72)
lootHdr.BackgroundTransparency = 1
lootHdr.Text = "Loot Controls"
lootHdr.TextColor3 = Color3.fromRGB(160, 180, 160)
lootHdr.Font = Enum.Font.GothamBold
lootHdr.TextSize = 11
lootHdr.TextXAlignment = Enum.TextXAlignment.Left
lootHdr.ZIndex = 11
lootHdr.Parent = manualTab
makeBtn(manualTab, "Run Loot Once", 14, 92, 140, 34, Color3.fromRGB(60, 140, 60), function()
task.spawn(runLootCycle)
end)
makeBtn(manualTab, "Sell Backpack", 166, 92, 140, 34, Color3.fromRGB(60, 100, 160), function()
sellBackpack()
end)
makeBtn(manualTab, "Teleport to Spawn", 14, 134, 140, 34, Color3.fromRGB(90, 90, 120), function()
teleportToSpawn()
end)
makeBtn(manualTab, "Force Sell Trip", 166, 134, 140, 34, Color3.fromRGB(150, 100, 60), function()
task.spawn(doSellTrip)
end)
-- Diagnostics
local diagHdr = Instance.new("TextLabel")
diagHdr.Size = UDim2.new(0.9, 0, 0, 16)
diagHdr.Position = UDim2.new(0.05, 0, 0, 176)
diagHdr.BackgroundTransparency = 1
diagHdr.Text = "Diagnostics"
diagHdr.TextColor3 = Color3.fromRGB(160, 180, 160)
diagHdr.Font = Enum.Font.GothamBold
diagHdr.TextSize = 11
diagHdr.TextXAlignment = Enum.TextXAlignment.Left
diagHdr.ZIndex = 11
diagHdr.Parent = manualTab
makeBtn(manualTab, "Check Remotes", 14, 196, 140, 34, Color3.fromRGB(70, 90, 140), function()
Services = getKnitServices()
if Services then
local SS = Services:FindFirstChild("StrengthService")
local DS = Services:FindFirstChild("DataService")
local BTS = Services:FindFirstChild("BaseTeleportService")
print("[Grass Farm] StrengthService:", SS and "OK" or "missing")
print("[Grass Farm] DataService:", DS and "OK" or "missing")
print("[Grass Farm] BaseTeleportService:", BTS and "OK" or "missing")
else
warn("[Grass Farm] Services not found")
end
end)
makeBtn(manualTab, "Dump Zone 12 Loot", 166, 196, 140, 34, Color3.fromRGB(100, 80, 140), function()
local sz = getZone12SpawnZone()
if sz then
print("[Grass Farm] Zone_12.SpawnZone contents:")
for _, obj in ipairs(sz:GetChildren()) do
print(" " .. obj.Name .. " [" .. obj.ClassName .. "]")
end
else
warn("[Grass Farm] Zone_12.SpawnZone not found")
end
end)
makeBtn(manualTab, "Dump Zone 12 Prompts", 14, 236, 292, 32, Color3.fromRGB(100, 80, 140), function()
local sz = getZone12SpawnZone()
if not sz then
warn("[Grass Farm] Zone_12.SpawnZone not found")
return
end
print("[Grass Farm] Zone_12.SpawnZone items and prompts:")
for _, obj in ipairs(sz:GetChildren()) do
local prompts = {}
local clickDets = {}
for _, p in ipairs(obj:GetDescendants()) do
if p:IsA("ProximityPrompt") then
table.insert(prompts, p.Name .. " (HoldDuration=" .. tostring(p.HoldDuration) ..
", MaxDist=" .. tostring(p.MaxActivationDistance) .. ")")
end
if p:IsA("ClickDetector") then
table.insert(clickDets, p.Name .. " (MaxDist=" .. tostring(p.MaxActivationDistance) .. ")")
end
end
print(" " .. obj.Name .. " [" .. obj.ClassName .. "]:")
if #prompts > 0 then
for _, p in ipairs(prompts) do print(" └ Prompt: " .. p) end
end
if #clickDets > 0 then
for _, c in ipairs(clickDets) do print(" └ ClickDetector: " .. c) end
end
if #prompts == 0 and #clickDets == 0 then
print(" └ (no interaction objects)")
end
end
end)
makeBtn(manualTab, "Reset Stats", 14, 276, 292, 32, Color3.fromRGB(120, 60, 60), function()
Stats.ClicksSent = 0
Stats.ClicksFailed = 0
Stats.LootRuns = 0
Stats.ItemsPicked = 0
Stats.ItemsMissed = 0
Stats.SellsSent = 0
Stats.TripsToBase = 0
Stats.ItemsSinceLastSell = 0
Stats.SessionStart = os.clock()
Stats.LastError = "—"
end)
-- ============================================================
-- TAB SWITCHING (3 tabs)
-- ============================================================
local function switchTab(tab)
-- Hide all
autoTab.Visible = false
tpTab.Visible = false
manualTab.Visible = false
-- Reset button colors
autoTabBtn.BackgroundColor3 = Color3.fromRGB(45, 50, 45)
tpTabBtn.BackgroundColor3 = Color3.fromRGB(45, 50, 45)
manualTabBtn.BackgroundColor3 = Color3.fromRGB(45, 50, 45)
autoTabBtn.TextColor3 = Color3.fromRGB(180, 190, 180)
tpTabBtn.TextColor3 = Color3.fromRGB(180, 190, 180)
manualTabBtn.TextColor3 = Color3.fromRGB(180, 190, 180)
if tab == "auto" then
autoTab.Visible = true
autoTabBtn.BackgroundColor3 = Color3.fromRGB(60, 140, 60)
autoTabBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
elseif tab == "tp" then
tpTab.Visible = true
tpTabBtn.BackgroundColor3 = Color3.fromRGB(60, 140, 60)
tpTabBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
else
manualTab.Visible = true
manualTabBtn.BackgroundColor3 = Color3.fromRGB(60, 140, 60)
manualTabBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
end
end
autoTabBtn.MouseButton1Click:Connect(function() switchTab("auto") end)
tpTabBtn.MouseButton1Click:Connect(function() switchTab("tp") end)
manualTabBtn.MouseButton1Click:Connect(function() switchTab("manual") end)
print("[Grass Farm] Loaded.")
print(" Tabs: Auto | Teleport | Manual")
print(" Auto Train: ClickRequested")
print(" Auto Loot: Zone_12.SpawnZone items")
print(" Sell trip: teleport to base + sell every " .. Config.SellEveryNItems .. " items")Review the source before using it. Executions count successful copies, capped at 10 per user and network per script in 24 hours.
Community discussion
0Start the conversation.


Your community, in one place