[OP] AUTO FARM, ANTI-GR* & MORE
Key Required

[OP] AUTO FARM, ANTI-GR* & MORE

[X2] +1 Cut Grass AdventureVearyTryVearyTry 870 views 11.4K executesUpdated Aug 22, 2026
5.0/ 5(1 votes)
10100% Positive
Lua Script•882 lines (26636 chars)
-- If my script helped you, please tag me :3

local Players = game:GetService("Players")
local Workspace = game:GetService("Workspace")
local CollectionService = game:GetService("CollectionService")
local RunService = game:GetService("RunService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local UserInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")
local VirtualUser = game:GetService("VirtualUser")
local ProximityPromptService = game:GetService("ProximityPromptService")
local CoreGui = game:GetService("CoreGui")

local lp = Players.LocalPlayer
local Camera = Workspace.CurrentCamera
local Mouse = lp:GetMouse()

local Svc = nil
local function resolveServices()
    local ok = pcall(function()
        local idx = ReplicatedStorage:WaitForChild("Packages", 4):WaitForChild("_Index", 4)
        for _, child in ipairs(idx:GetChildren()) do
            if child.Name:match("knit") and child:FindFirstChild("knit") and child.knit:FindFirstChild("Services") then
                Svc = child.knit.Services
                return
            end
        end
    end)
    if not Svc then
        pcall(function()
            if ReplicatedStorage:FindFirstChild("Services") then
                Svc = ReplicatedStorage.Services
            end
        end)
    end
end
resolveServices()

local function findRemote(svcNames, folderType, remoteNames)
    if type(svcNames) == "string" then svcNames = {svcNames} end
    if type(remoteNames) == "string" then remoteNames = {remoteNames} end
    
    if Svc then
        for _, sName in ipairs(svcNames) do
            local s = Svc:FindFirstChild(sName)
            if s then
                local f = s:FindFirstChild(folderType)
                if f then
                    for _, rName in ipairs(remoteNames) do
                        local r = f:FindFirstChild(rName)
                        if r then return r end
                    end
                end
            end
        end
    end

    for _, d in ipairs(ReplicatedStorage:GetDescendants()) do
        for _, rName in ipairs(remoteNames) do
            if d.Name == rName then
                if folderType == "RE" and d:IsA("RemoteEvent") then return d end
                if folderType == "RF" and d:IsA("RemoteFunction") then return d end
            end
        end
    end
    return nil
end

local R = {
    StrengthClick = findRemote("StrengthService", "RE", {"ClickRequested", "Click"}),
    SellLoot = findRemote("DataService", "RF", {"SellAllBackpackLoot", "SellLoot", "Sell"}),
    Rebirth = findRemote({"RebirtService", "RebirthService"}, "RE", {"RebirthButtonClicked", "Rebirth"}),
    GetRebirth = findRemote({"RebirtService", "RebirthService"}, "RF", {"GetState", "GetRebirthState"}),
    UpgSpeed = findRemote("UpgradesService", "RE", {"SpeedButtonClicked", "SpeedUpgrade"}),
    UpgCarry = findRemote("UpgradesService", "RE", {"CarryButtonClicked", "CarryUpgrade"}),
    UpgAtkSpeed = findRemote("UpgradesService", "RE", {"AttackSpeedButtonClicked", "AttackSpeedUpgrade"}),
    UpgAtkRange = findRemote("UpgradesService", "RE", {"AttackRangeButtonClicked", "AttackRangeUpgrade"}),
    NotEnoughMoney = findRemote("UpgradesService", "RE", {"NotEnoughMoney"}),
    GetBackpack = findRemote("DataService", "RF", {"GetBackpackSlotsSummary", "GetBackpack"}),
}

local GrassRarityOrder = {
    "Grass_Common",
    "Grass_Uncommon",
    "Grass_Rare",
    "Grass_Epic",
    "Grass_Legendary",
    "Grass_Mythic",
    "Grass_Ethernal",
    "Grass_Secret",
    "Grass_Celestial",
    "Grass_Divine",
    "Grass_Absolute"
}

local Cfg = {
    autoLoot = false,
    lootMagnetRadius = 500,
    strength = false,
    strengthDelay = 0.05,

    hideGrass = false,
    grassNoCollide = false,
    instantPrompts = false,

    sell = true,
    sellThreshold = 100,

    speedEnabled = true,
    speedValue = 50,
    speedMode = "Both",
    clickTP = false,

    upgAll = false,
    upgSpeed = false,
    upgCarry = false,
    upgAtkSpeed = false,
    upgAtkRange = false,
    autoRebirth = false,

    antiAfk = true,
}

local alive = true
local nextClick, nextUpgrade, nextRebirth, nextLoot = 0, 0, 0, 0
local upgradeBackoff = 0
local isSellingInProgress = false
local lastFarmCFrame = nil
local antiAfkCon = nil

local function setAntiAfk(enabled)
    if getconnections then
        for _, c in ipairs(getconnections(lp.Idled)) do
            pcall(function() c:Disable() end)
            pcall(function() c:Disconnect() end)
        end
    end
    if antiAfkCon then
        antiAfkCon:Disconnect()
        antiAfkCon = nil
    end
    if enabled then
        antiAfkCon = lp.Idled:Connect(function()
            VirtualUser:CaptureController()
            VirtualUser:ClickButton2(Vector2.zero)
        end)
    end
end

if Cfg.antiAfk then
    setAntiAfk(true)
end

local function char()
    local c = lp.Character
    if c and c:FindFirstChild("HumanoidRootPart") and c:FindFirstChildOfClass("Humanoid") then
        return c
    end
    return nil
end

local function hrp()
    local c = char()
    return c and c:FindFirstChild("HumanoidRootPart")
end

local function humanoid()
    local c = char()
    return c and c:FindFirstChildOfClass("Humanoid")
end

local function getBackpackInfo()
    local count = 0
    local cap = 0

    local attrCount = lp:GetAttribute("BackpackCount") or lp:GetAttribute("BackpackRaw") or lp:GetAttribute("LootCount") or lp:GetAttribute("Backpack")
    local attrCap = lp:GetAttribute("BackpackCapacity") or lp:GetAttribute("CapacityRaw") or lp:GetAttribute("BackpackMax") or lp:GetAttribute("MaxBackpack")
    if attrCount then count = tonumber(attrCount) or count end
    if attrCap then cap = tonumber(attrCap) or cap end

    if (cap == 0 or count == 0) and R.GetBackpack then
        local ok, s = pcall(R.GetBackpack.InvokeServer, R.GetBackpack)
        if ok and type(s) == "table" then
            count = tonumber(s.Count) or tonumber(s.count) or count
            cap = tonumber(s.Capacity) or tonumber(s.capacity) or tonumber(s.Max) or cap
        end
    end

    local isFull = (cap > 0 and count >= cap)
    local pct = (cap > 0) and math.floor((count / cap) * 100) or 0

    return {count = count, cap = cap, pct = pct, full = isFull}
end

local function teleportToBase()
    local baseBtn = lp:FindFirstChild("PlayerGui") and lp.PlayerGui:FindFirstChild("TopGUI") and lp.PlayerGui.TopGUI:FindFirstChild("Top") and lp.PlayerGui.TopGUI.Top:FindFirstChild("BaseButton")
    
    if baseBtn then
        if firesignal then
            pcall(firesignal, baseBtn.Activated)
            pcall(firesignal, baseBtn.MouseButton1Click)
        end
        if getconnections then
            for _, name in ipairs({"Activated", "MouseButton1Click", "MouseButton1Down"}) do
                for _, conn in ipairs(getconnections(baseBtn[name])) do
                    pcall(conn.Fire, conn)
                end
            end
        end
    end

    task.wait(0.1)
    local w1 = Workspace:FindFirstChild("Worlds") and Workspace.Worlds:FindFirstChild("World_1")
    if w1 and hrp() then
        local spawnPart = w1:FindFirstChild("Spawn_Point_1") or w1:FindFirstChild("Spawn") or w1:FindFirstChild("Safe_Zone_0")
        if spawnPart then
            local pos = spawnPart:IsA("BasePart") and spawnPart.Position or spawnPart:GetPivot().Position
            hrp().CFrame = CFrame.new(pos + Vector3.new(0, 3, 0))
        end
    end
end

local function getBaseSellStand()
    local w1 = Workspace:FindFirstChild("Worlds") and Workspace.Worlds:FindFirstChild("World_1")
    if w1 then
        local sellModel = w1:FindFirstChild("Sell")
        if sellModel then
            local tp = sellModel:FindFirstChild("TriggerPlace")
            local claim = tp and tp:FindFirstChild("ClaimPart")
            if claim and claim:IsA("BasePart") then
                return claim
            end
        end
    end
    return nil
end

local function doSellAtBase()
    if isSellingInProgress then return end
    isSellingInProgress = true

    local root = hrp()
    if not root then
        isSellingInProgress = false
        return
    end

    lastFarmCFrame = root.CFrame

    teleportToBase()
    task.wait(0.35)

    root = hrp()
    local sellPart = getBaseSellStand()
    if root and sellPart then
        root.CFrame = CFrame.new(sellPart.Position + Vector3.new(0, 2.5, 0))
        task.wait(0.15)
        pcall(firetouchinterest, root, sellPart, 0)
        pcall(firetouchinterest, root, sellPart, 1)
    end

    if R.SellLoot then
        pcall(R.SellLoot.InvokeServer, R.SellLoot)
        task.wait(0.25)
        pcall(R.SellLoot.InvokeServer, R.SellLoot)
        task.wait(0.2)
    end

    if lastFarmCFrame and hrp() then
        hrp().CFrame = lastFarmCFrame
    end

    isSellingInProgress = false
end

local function makePromptInstant(prompt)
    if Cfg.instantPrompts and prompt and prompt:IsA("ProximityPrompt") then
        pcall(function()
            prompt.HoldDuration = 0
            prompt.RequiresLineOfSight = false
        end)
    end
end

for _, d in ipairs(Workspace:GetDescendants()) do
    if d:IsA("ProximityPrompt") then
        makePromptInstant(d)
    end
end

Workspace.DescendantAdded:Connect(function(d)
    if d:IsA("ProximityPrompt") then
        makePromptInstant(d)
    end
end)

ProximityPromptService.PromptButtonHoldBegan:Connect(function(prompt)
    if Cfg.instantPrompts then
        prompt.HoldDuration = 0
        pcall(fireproximityprompt, prompt)
    end
end)

local function applyGrassOptimization(inst)
    if not inst then return end
    pcall(function()
        if inst:IsA("BasePart") then
            if Cfg.grassNoCollide then
                inst.CanCollide = false
            end
            if Cfg.hideGrass then
                inst.Transparency = 1
                inst.CastShadow = false
            else
                inst.Transparency = 0
            end
        elseif inst:IsA("Decal") or inst:IsA("Texture") then
            inst.Transparency = Cfg.hideGrass and 1 or 0
        elseif inst:IsA("ParticleEmitter") or inst:IsA("Beam") or inst:IsA("Trail") then
            inst.Enabled = not Cfg.hideGrass
        end
    end)
end

local function refreshAllGrassVisuals()
    for _, tag in ipairs(GrassRarityOrder) do
        local ok, list = pcall(CollectionService.GetTagged, CollectionService, tag)
        if ok and list then
            for _, m in ipairs(list) do
                for _, p in ipairs(m:GetDescendants()) do
                    applyGrassOptimization(p)
                end
                if m:IsA("BasePart") then applyGrassOptimization(m) end
            end
        end
    end
end

for _, tag in ipairs(GrassRarityOrder) do
    pcall(function()
        CollectionService:GetInstanceAddedSignal(tag):Connect(function(m)
            task.wait(0.05)
            for _, p in ipairs(m:GetDescendants()) do
                applyGrassOptimization(p)
            end
            if m:IsA("BasePart") then applyGrassOptimization(m) end
        end)
    end)
end

RunService.Stepped:Connect(function()
    if not alive then return end
    if Cfg.grassNoCollide then
        local c = char()
        if c then
            for _, part in ipairs(c:GetChildren()) do
                if part:IsA("BasePart") and part.CanCollide then
                    part.CanCollide = false
                end
            end
        end
    end
end)

local RarityWeights = {
    Absolute = 10000,
    Divine = 8000,
    Celestial = 5000,
    Secret = 3000,
    Ethernal = 2000,
    Mythic = 1200,
    Legendary = 800,
    Epic = 500,
    Rare = 300,
    Uncommon = 150,
    Common = 50
}

local function getPrioritizedLootPrompts()
    local prompts = {}
    local root = hrp()
    local rPos = root and root.Position or Vector3.zero

    local searchContainers = {Workspace:FindFirstChild("Zones"), Workspace}

    for _, container in ipairs(searchContainers) do
        if container then
            for _, d in ipairs(container:GetDescendants()) do
                if d:IsA("ProximityPrompt") and d:GetAttribute("LootPickupPrompt") == true then
                    local attachment = d.Parent
                    local basePart = attachment and attachment.Parent
                    local lootModel = basePart and basePart.Parent

                    local pos = nil
                    if attachment and attachment:IsA("Attachment") then
                        pos = attachment.WorldPosition
                    elseif basePart and basePart:IsA("BasePart") then
                        pos = basePart.Position
                    elseif lootModel and lootModel:IsA("Model") then
                        pos = lootModel:GetPivot().Position
                    end

                    if pos then
                        local dist = (pos - rPos).Magnitude
                        if dist <= Cfg.lootMagnetRadius then
                            local weight = 50

                            if lootModel then
                                local price = tonumber(lootModel:GetAttribute("LootSellPrice")) or 0
                                local rarity = tostring(lootModel:GetAttribute("LootRarity") or "")
                                local rarityWeight = RarityWeights[rarity] or 50
                                weight = rarityWeight + (price / 1000)
                            end

                            table.insert(prompts, {
                                prompt = d,
                                pos = pos,
                                dist = dist,
                                weight = weight
                            })
                        end
                    end
                end
            end
            if container.Name == "Zones" and #prompts > 0 then break end
        end
    end

    table.sort(prompts, function(a, b)
        if a.weight ~= b.weight then
            return a.weight > b.weight
        end
        return a.dist < b.dist
    end)

    return prompts
end

local function doLootCollection()
    local root = hrp()
    if not root or not Cfg.autoLoot then return false end
    local prompts = getPrioritizedLootPrompts()
    if #prompts == 0 then return false end

    local target = prompts[1]
    if target and target.pos then
        root.CFrame = CFrame.new(target.pos + Vector3.new(0, 2.5, 0))
        task.wait(0.08)
        pcall(fireproximityprompt, target.prompt)
        return true
    end

    return false
end

local function doUpgrades()
    if tick() < upgradeBackoff then return end
    local fires = {}
    if Cfg.upgAll or Cfg.upgSpeed then if R.UpgSpeed then table.insert(fires, R.UpgSpeed) end end
    if Cfg.upgAll or Cfg.upgCarry then if R.UpgCarry then table.insert(fires, R.UpgCarry) end end
    if Cfg.upgAll or Cfg.upgAtkSpeed then if R.UpgAtkSpeed then table.insert(fires, R.UpgAtkSpeed) end end
    if Cfg.upgAll or Cfg.upgAtkRange then if R.UpgAtkRange then table.insert(fires, R.UpgAtkRange) end end

    for _, rf in ipairs(fires) do
        pcall(rf.FireServer, rf)
    end
end

local function doRebirth()
    if not Cfg.autoRebirth or not R.Rebirth then return end
    if R.GetRebirth then
        local ok, st = pcall(R.GetRebirth.InvokeServer, R.GetRebirth)
        if ok and type(st) == "table" and st.CanRebirth == true then
            pcall(R.Rebirth.FireServer, R.Rebirth)
        end
    else
        pcall(R.Rebirth.FireServer, R.Rebirth)
    end
end

if R.NotEnoughMoney then
    pcall(function()
        R.NotEnoughMoney.Connect(R.NotEnoughMoney, function()
            upgradeBackoff = tick() + 6
        end)
    end)
end

RunService.Heartbeat:Connect(function(dt)
    if not alive then return end
    local c = char()
    local h = c and c:FindFirstChildOfClass("Humanoid")
    local root = c and c:FindFirstChild("HumanoidRootPart")
    
    if h and root and Cfg.speedEnabled then
        if (Cfg.speedMode == "WalkSpeed" or Cfg.speedMode == "Both") and h.WalkSpeed ~= Cfg.speedValue then
            h.WalkSpeed = Cfg.speedValue
        end
        if (Cfg.speedMode == "CFrame" or Cfg.speedMode == "Both") and h.MoveDirection.Magnitude > 0 then
            local extra = math.max(0, Cfg.speedValue - 16)
            root.CFrame = root.CFrame + (h.MoveDirection * (extra * dt))
        end
    end
end)

UserInputService.InputBegan:Connect(function(input, processed)
    if processed or not Cfg.clickTP then return end
    if input.UserInputType == Enum.UserInputType.MouseButton1 and UserInputService:IsKeyDown(Enum.KeyCode.LeftControl) then
        local hit = Mouse.Hit
        if hit and hrp() then
            hrp().CFrame = CFrame.new(hit.Position + Vector3.new(0, 3, 0))
        end
    end
end)

task.spawn(function()
    task.wait(0.3)
    refreshAllGrassVisuals()

    while alive do
        local t = tick()
        local c = char()
        local root = hrp()

        if c and root and not isSellingInProgress then
            local bp = getBackpackInfo()
            if Cfg.sell and (bp.full or (bp.cap > 0 and (bp.count >= bp.cap or bp.pct >= Cfg.sellThreshold))) then
                doSellAtBase()
            else
                if Cfg.autoLoot and t > nextLoot then
                    if doLootCollection() then
                        nextLoot = t + 0.12
                    end
                end

                if Cfg.strength and t > nextClick and R.StrengthClick then
                    pcall(R.StrengthClick.FireServer, R.StrengthClick)
                    nextClick = t + Cfg.strengthDelay
                end
            end

            if (Cfg.upgAll or Cfg.upgSpeed or Cfg.upgCarry or Cfg.upgAtkSpeed or Cfg.upgAtkRange) and t > nextUpgrade then
                doUpgrades()
                nextUpgrade = t + 2.5
            end
            if Cfg.autoRebirth and t > nextRebirth then
                doRebirth()
                nextRebirth = t + 3.5
            end
        end

        task.wait(0.12)
    end
end)

local WindUI = nil
local ok, _ = pcall(function()
    WindUI = loadstring(game:HttpGet("https://tree-hub.vercel.app/api/UI/WindUI"))()
end)
if not ok or not WindUI then
    pcall(function()
        WindUI = loadstring(game:HttpGet("https://raw.githubusercontent.com/Footagesus/WindUI/main/dist/main.lua"))()
    end)
end
if not WindUI then
    WindUI = loadstring(game:HttpGet("https://github.com/Footagesus/WindUI/releases/latest/download/main.lua"))()
end

for _, p in ipairs({CoreGui, lp:FindFirstChild("PlayerGui")}) do
    if p then
        for _, g in ipairs(p:GetChildren()) do
            if g:IsA("ScreenGui") and (g.Name:match("WindUI") or g.Name:match("GrassHub")) then
                g:Destroy()
            end
        end
    end
end

local Win = WindUI:CreateWindow({
    Title = "+1 Cut Grass Adventure",
    Icon = "sparkles",
    Author = "by @VearyTry",
    Size = UDim2.fromOffset(560, 430),
    Theme = "Dark",
    ToggleKey = Enum.KeyCode.RightControl,
})

local TabMain = Win:Tab({Title = "Main", Icon = "swords"})
local TabSell = Win:Tab({Title = "Auto Sell", Icon = "coins"})
local TabTeleport = Win:Tab({Title = "Teleports", Icon = "map-pin"})
local TabMove = Win:Tab({Title = "Movement", Icon = "zap"})
local TabShop = Win:Tab({Title = "Upgrades", Icon = "shopping-cart"})
local TabMisc = Win:Tab({Title = "Misc", Icon = "sliders-horizontal"})

TabMain:Section({Title = "Loot Pickup"})

TabMain:Toggle({
    Title = "Auto Loot",
    Desc = "Teleports to the best loot in range and picks it up",
    Value = false,
    Callback = function(v) Cfg.autoLoot = v end
})

TabMain:Slider({
    Title = "Scan Radius",
    Desc = "Search radius for dropped loot",
    Step = 10,
    Value = {
        Min = 50,
        Max = 2000,
        Default = 500,
    },
    Min = 50,
    Max = 2000,
    Default = 500,
    Callback = function(v)
        local num = type(v) == "table" and (v.Value or v.Default) or tonumber(v) or 500
        Cfg.lootMagnetRadius = num
    end
})

TabMain:Section({Title = "Strength Training"})

TabMain:Toggle({
    Title = "Auto Strength",
    Desc = "Clicks strength training automatically",
    Value = false,
    Callback = function(v) Cfg.strength = v end
})

TabMain:Slider({
    Title = "Click Delay",
    Desc = "Delay between clicks (seconds)",
    Step = 0.01,
    Value = {
        Min = 0.01,
        Max = 0.5,
        Default = Cfg.strengthDelay,
    },
    Min = 0.01,
    Max = 0.5,
    Default = Cfg.strengthDelay,
    Callback = function(v)
        local num = type(v) == "table" and (v.Value or v.Default) or tonumber(v) or 0.05
        Cfg.strengthDelay = num
    end
})

TabSell:Section({Title = "Auto Sell"})

TabSell:Toggle({
    Title = "Auto Sell",
    Desc = "Teleports to base, sells loot, and returns to your position",
    Value = Cfg.sell,
    Callback = function(v) Cfg.sell = v end
})

TabSell:Slider({
    Title = "Backpack Threshold (%)",
    Desc = "Sell when backpack reaches this percentage",
    Step = 1,
    Value = {
        Min = 20,
        Max = 100,
        Default = Cfg.sellThreshold,
    },
    Min = 20,
    Max = 100,
    Default = Cfg.sellThreshold,
    Callback = function(v)
        local num = type(v) == "table" and (v.Value or v.Default) or tonumber(v) or 100
        Cfg.sellThreshold = num
    end
})

TabSell:Button({
    Title = "Sell Now",
    Desc = "Sells backpack loot immediately",
    Callback = function()
        task.spawn(doSellAtBase)
        WindUI:Notify({Title = "Auto Sell", Content = "Sold backpack loot", Duration = 2})
    end
})

TabTeleport:Section({Title = "Teleports"})

TabTeleport:Button({
    Title = "Teleport to Base",
    Desc = "Teleports your character back to base",
    Callback = function()
        teleportToBase()
        WindUI:Notify({Title = "Teleport", Content = "Teleported to base", Duration = 2})
    end
})

TabTeleport:Toggle({
    Title = "Click TP",
    Desc = "Hold Ctrl and left click anywhere to teleport",
    Value = Cfg.clickTP,
    Callback = function(v) Cfg.clickTP = v end
})

TabMove:Section({Title = "Speed"})

TabMove:Toggle({
    Title = "Speed Boost",
    Desc = "Enables custom walk speed",
    Value = Cfg.speedEnabled,
    Callback = function(v)
        Cfg.speedEnabled = v
        local h = humanoid()
        if h then
            h.WalkSpeed = v and Cfg.speedValue or 16
        end
    end
})

TabMove:Slider({
    Title = "WalkSpeed",
    Desc = "Movement speed value",
    Step = 1,
    Value = {
        Min = 16,
        Max = 250,
        Default = Cfg.speedValue,
    },
    Min = 16,
    Max = 250,
    Default = Cfg.speedValue,
    Callback = function(v)
        local num = type(v) == "table" and (v.Value or v.Default) or tonumber(v) or 50
        Cfg.speedValue = num
        if Cfg.speedEnabled then
            local h = humanoid()
            if h then h.WalkSpeed = num end
        end
    end
})

TabMove:Dropdown({
    Title = "Speed Method",
    Desc = "Movement method",
    Values = {"Both", "WalkSpeed", "CFrame"},
    Value = "Both",
    Callback = function(v)
        if type(v) == "table" then v = v.Value or v[1] end
        if v == "Both" then Cfg.speedMode = "Both"
        elseif v == "WalkSpeed" then Cfg.speedMode = "WalkSpeed"
        elseif v == "CFrame" then Cfg.speedMode = "CFrame"
        end
    end
})

TabShop:Section({Title = "Auto Upgrades"})

TabShop:Toggle({
    Title = "Upgrade All",
    Desc = "Buys all available upgrades continuously",
    Value = false,
    Callback = function(v) Cfg.upgAll = v end
})

TabShop:Toggle({
    Title = "Upgrade Walk Speed",
    Value = false,
    Callback = function(v) Cfg.upgSpeed = v end
})

TabShop:Toggle({
    Title = "Upgrade Carry Capacity",
    Value = false,
    Callback = function(v) Cfg.upgCarry = v end
})

TabShop:Toggle({
    Title = "Upgrade Attack Speed",
    Value = false,
    Callback = function(v) Cfg.upgAtkSpeed = v end
})

TabShop:Toggle({
    Title = "Upgrade Attack Range",
    Value = false,
    Callback = function(v) Cfg.upgAtkRange = v end
})

TabShop:Section({Title = "Rebirth"})

TabShop:Toggle({
    Title = "Auto Rebirth",
    Desc = "Rebirths automatically when available",
    Value = false,
    Callback = function(v) Cfg.autoRebirth = v end
})

TabMisc:Section({Title = "World & Interaction"})

TabMisc:Toggle({
    Title = "Instant Prompts",
    Desc = "Removes proximity prompt hold duration",
    Value = Cfg.instantPrompts,
    Callback = function(v)
        Cfg.instantPrompts = v
        if v then
            for _, d in ipairs(Workspace:GetDescendants()) do
                if d:IsA("ProximityPrompt") then
                    makePromptInstant(d)
                end
            end
        end
    end
})

TabMisc:Toggle({
    Title = "Disable Grass Collision",
    Desc = "Walk through grass without colliding",
    Value = Cfg.grassNoCollide,
    Callback = function(v)
        Cfg.grassNoCollide = v
        refreshAllGrassVisuals()
    end
})

TabMisc:Toggle({
    Title = "Hide Grass",
    Desc = "Hides grass models for better visibility",
    Value = Cfg.hideGrass,
    Callback = function(v)
        Cfg.hideGrass = v
        refreshAllGrassVisuals()
        WindUI:Notify({Title = "Misc", Content = v and "Grass hidden" or "Grass visible", Duration = 2})
    end
})

TabMisc:Section({Title = "Utilities"})

TabMisc:Toggle({
    Title = "Anti-AFK",
    Desc = "Prevents 20-minute idle disconnect",
    Value = Cfg.antiAfk,
    Callback = function(v)
        Cfg.antiAfk = v
        setAntiAfk(v)
    end
})

TabMisc:Button({
    Title = "FPS Boost",
    Desc = "Disables shadows and smooths textures for better performance",
    Callback = function()
        pcall(function()
            for _, v in ipairs(Workspace:GetDescendants()) do
                if v:IsA("BasePart") then
                    v.Material = Enum.Material.SmoothPlastic
                    v.CastShadow = false
                elseif v:IsA("Decal") or v:IsA("Texture") then
                    v.Transparency = 1
                end
            end
            game:GetService("Lighting").GlobalShadows = false
        end)
        Cfg.hideGrass = true
        refreshAllGrassVisuals()
        WindUI:Notify({Title = "Misc", Content = "FPS boost applied", Duration = 2})
    end
})

TabMisc:Button({
    Title = "Rejoin Server",
    Desc = "Reconnects to the same server",
    Callback = function()
        pcall(function()
            game:GetService("TeleportService"):TeleportToPlaceInstance(game.PlaceId, game.JobId, lp)
        end)
    end
})

WindUI:Notify({
    Title = "+1 Cut Grass Adventure",
    Content = "Press Right Ctrl to toggle menu.",
    Duration = 4
})

Features & Information

Open-source script for +1 Cut Grass Adventure. UI Toggle Key: Right Control Features: Auto Loot: Scans nearby drops and picks up the highest rarity/value loot first. Auto Sell: Goes to base when your backpack reaches the threshold, sells, and puts you right back where you were farming. Auto Strength: Automatically trains strength with an adjustable click delay. Auto Upgrades & Rebirth: Buys stats (Speed, Carry, Attack Speed/Range) and triggers rebirths when available. Movement: Custom speed modifier (WalkSpeed or CFrame) and Click TP (Left Ctrl + Left Click). Disable grass collision. Hide grass visuals. Instant proximity prompts. Built-in Anti-AFK.
#free#open source#keyless#auto farm#op

Community Comments (0)

No comments yet for this script.

More Scripts for [X2] +1 Cut Grass Adventure