-- [[ 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/client.lua?s=6a800237c996162ba822528d"))() end) end) --[[rscripts:analytics:end]] local Players = game:GetService("Players") local UserInputService = game:GetService("UserInputService") local Workspace = game:GetService("Workspace") local ReplicatedStorage = game:GetService("ReplicatedStorage") local LocalPlayer = Players.LocalPlayer local PlayerScripts = LocalPlayer:WaitForChild("PlayerScripts") local LeafSim = require(PlayerScripts:WaitForChild("LeafSim")) local SoundController = require(ReplicatedStorage:WaitForChild("SoundController")) local PlayerUpgradeConfig = require(ReplicatedStorage:WaitForChild("PlayerUpgradeConfig")) local itemAttributes = { OwnsRake = true, OwnsLeafBlower = true, OwnsLeafVacuum = true, OwnsMolotov = true, PermRake = true, PermLeafBlower = true, PermLeafVacuum = true, PermMolotov = true, } for attr, val in pairs(itemAttributes) do LocalPlayer:SetAttribute(attr, val) end local upgradeAttributes = { Upg_Hand_Hold = 1, Upg_Hand_Dexterity = 5, Upg_Hand_Grasp = 5, Upg_Rake_Radius = 5, Upg_Rake_Range = 4, Upg_Rake_Stickiness = 4, Upg_LeafBlower_Width = 5, Upg_LeafBlower_Power = 4, Upg_LeafBlower_Spread = 4, LobbyWalkSpeed = 21, LobbyBagBonus = 125, LobbyCashMult = 1.5, LobbyGemsMult = 1.5, LobbyRakeDiscount = 1, LobbyBlowerDiscount = 1, } for attr, val in pairs(upgradeAttributes) do LocalPlayer:SetAttribute(attr, val) end local oldLevelOf = PlayerUpgradeConfig.levelOf PlayerUpgradeConfig.levelOf = function() return 5 end local oldUpgEffect = LeafSim.upgEffect LeafSim.upgEffect = function(tool, upgrade) if tool == "Hand" then if upgrade == "Dexterity" then return 0 elseif upgrade == "Hold" then return 1 elseif upgrade == "Grasp" then return 6 end elseif tool == "Rake" then if upgrade == "Range" then return 20 elseif upgrade == "Radius" then return 6 elseif upgrade == "Stickiness" then return 160 end elseif tool == "LeafBlower" then if upgrade == "Width" then return 6 elseif upgrade == "Power" then return 2.5 elseif upgrade == "Spread" then return 0.2 end end return oldUpgEffect(tool, upgrade) end if STATE and STATE.onCleanup then STATE.onCleanup(function() PlayerUpgradeConfig.levelOf = oldLevelOf LeafSim.upgEffect = oldUpgEffect end) end local cooldownAttributes = { HandCooldown = false, RakeCooldown = false, MolotovCooldown = false, } for attr, val in pairs(cooldownAttributes) do LocalPlayer:SetAttribute(attr, val) end if STATE and STATE.namecallHook then STATE.namecallHook("GetAttribute", function(self, method, attrName) if self == LocalPlayer then if itemAttributes[attrName] ~= nil then return true end if upgradeAttributes[attrName] ~= nil then return upgradeAttributes[attrName] end if cooldownAttributes[attrName] ~= nil then return false end end end) end local function connectSignal(sig, fn) if STATE and STATE.connect then STATE.connect(sig, fn) else sig:Connect(fn) end end for attr, _ in pairs(cooldownAttributes) do connectSignal(LocalPlayer:GetAttributeChangedSignal(attr), function() if LocalPlayer:GetAttribute(attr) == true then LocalPlayer:SetAttribute(attr, false) end end) end for attr, val in pairs(itemAttributes) do connectSignal(LocalPlayer:GetAttributeChangedSignal(attr), function() if LocalPlayer:GetAttribute(attr) ~= val then LocalPlayer:SetAttribute(attr, val) end end) end for attr, val in pairs(upgradeAttributes) do connectSignal(LocalPlayer:GetAttributeChangedSignal(attr), function() if LocalPlayer:GetAttribute(attr) ~= val then LocalPlayer:SetAttribute(attr, val) end end) end local rayParams = RaycastParams.new() rayParams.FilterType = Enum.RaycastFilterType.Exclude rayParams.IgnoreWater = true local function computeRakeAimPos() local cam = Workspace.CurrentCamera local char = LocalPlayer.Character local hrp = char and char:FindFirstChild("HumanoidRootPart") if not cam or not hrp then return nil end rayParams.FilterDescendantsInstances = {char} local result = Workspace:Raycast(cam.CFrame.Position, cam.CFrame.LookVector * 50, rayParams) return if result then result.Position else hrp.Position + cam.CFrame.LookVector * 10 end local isHolding = false local function instantRake() local aim = computeRakeAimPos() if aim then pcall(function() SoundController.play("RakeSFX") end) LeafSim.rake(aim) end end connectSignal(UserInputService.InputBegan, function(input, gameProcessed) if gameProcessed then return end if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then isHolding = true if (LocalPlayer:GetAttribute("SelectedTool") or "Hand") == "Rake" then instantRake() task.spawn(function() while isHolding and (not STATE or STATE.alive()) do if (LocalPlayer:GetAttribute("SelectedTool") or "Hand") == "Rake" and not LocalPlayer:GetAttribute("JournalOpen") and not LocalPlayer:GetAttribute("ToolShopFocus") then instantRake() task.wait(0.08) else break end end end) end end end) connectSignal(UserInputService.InputEnded, function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then isHolding = false end end)