-- [[ Rscripts Risk Notice ]] -- This script is not verified by rscripts.net. 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 Rscripts 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")