--Wait until game loads repeat wait() until game:IsLoaded() --Stops script if on a different game if game.PlaceId ~= 8737602449 and game.PlaceId ~= 8943844393 then return end if getgenv().loaded then return else getgenv().loaded = true end --Anti-AFK local Players = game:GetService("Players") local connections = getconnections or get_signal_cons if connections then for i,v in pairs(connections(Players.LocalPlayer.Idled)) do if v["Disable"] then v["Disable"](v) elseif v["Disconnect"] then v["Disconnect"](v) end end else Players.LocalPlayer.Idled:Connect(function() local VirtualUser = game:GetService("VirtualUser") VirtualUser:CaptureController() VirtualUser:ClickButton2(Vector2.new()) end) end --Variables local unclaimed = {} local counter = 0 local donation, boothText, spamming, hopTimer, vcEnabled local signPass = false local errCount = 0 local booths = { ["1"] = "72, 3, 36", ["2"] = "83, 3, 161", ["3"] = "11, 3, 36", ["4"] = "100, 3, 59", ["5"] = "72, 3, 166", ["6"] = "2, 3, 42", ["7"] = "-9, 3, 52", ["8"] = "10, 3, 166", ["9"] = "-17, 3, 60", ["10"] = "35, 3, 173", ["11"] = "24, 3, 170", ["12"] = "48, 3, 29", ["13"] = "24, 3, 33", ["14"] = "101, 3, 142", ["15"] = "-18, 3, 142", ["16"] = "60, 3, 33", ["17"] = "35, 3, 29", ["18"] = "0, 3, 160", ["19"] = "48, 3, 173", ["20"] = "61, 3, 170", ["21"] = "91, 3, 151", ["22"] = "-24, 3, 72", ["23"] = "-28, 3, 88", ["24"] = "92, 3, 51", ["25"] = "-28, 3, 112", ["26"] = "-24, 3, 129", ["27"] = "83, 3, 42", ["28"] = "-8, 3, 151" } local queueonteleport = (syn and syn.queue_on_teleport) or queue_on_teleport or (fluxus and fluxus.queue_on_teleport) local httprequest = (syn and syn.request) or http and http.request or http_request or (fluxus and fluxus.request) or request local httpservice = game:GetService('HttpService') queueonteleport("loadstring(game:HttpGet('https://raw.githubusercontent.com/tzechco/roblox-scripts/main/PLS%20DONATE/autofarm.lua'))()") local library = loadstring(game:HttpGet("https://raw.githubusercontent.com/tzechco/roblox-scripts/main/UI/ui-engine-v2.lua"))() local function claimGifts() pcall(function() Players.LocalPlayer:WaitForChild("PlayerGui") local guipath = Players.LocalPlayer.PlayerGui:WaitForChild("ScreenGui") firesignal(guipath.GiftAlert.Buttons.Close["Activated"]) local count = require(game.ReplicatedStorage.Remotes).Event("UnclaimedDonationCount"):InvokeServer() while count == nil do task.wait(5) count = require(game.ReplicatedStorage.Remotes).Event("UnclaimedDonationCount"):InvokeServer() end if count then local ud = {} for i = 1, count do table.insert(ud, i) end if #ud > 0 then firesignal(guipath.Gift.Buttons.Inbox["Activated"]) Players.LocalPlayer.ClaimDonation:InvokeServer(ud) task.wait(.5) firesignal(guipath.GiftInbox.Buttons.Close["Activated"]) task.wait(.5) firesignal(guipath.Gift.Buttons.Close["Activated"]) end end end) end task.spawn(claimGifts) getgenv().settings = {} --Load Settings if isfile("plsdonatesettings.txt") then local sl, er = pcall(function() getgenv().settings = httpservice:JSONDecode(readfile('plsdonatesettings.txt')) end) if er ~= nil then task.spawn(function() errMsg = Instance.new("Hint") errMsg.Parent = game.workspace errMsg.Text = tostring("Settings reset due to error: ".. er) task.wait(15) errMsg:Destroy() end) delfile("plsdonatesettings.txt") end end local sNames = {"textUpdateToggle", "textUpdateDelay", "serverHopToggle", "serverHopDelay", "hexBox", "goalBox", "webhookToggle", "webhookBox", "danceChoice", "thanksMessage", "signToggle", "customBoothText", "signUpdateToggle", "signText", "signHexBox", "autoThanks", "autoBeg", "begMessage", "begDelay", "fpsLimit", "render", "thanksDelay", "vcServer"} local sValues = {true, 30, true, 30, "#32CD32", 5, false, "", "Disabled", {"Thank you", "Thanks!", "ty :)", "tysm!"}, false, "GOAL: $C / $G", false, "your text here", "#ffffff", true, false, {"Please donate", "I'm so close to my goal!", "donate to me", "please"}, 300, 60, false, 3, false} if #getgenv().settings ~= sNames then for i, v in ipairs(sNames) do if getgenv().settings[v] == nil then getgenv().settings[v] = sValues[i] end end writefile('plsdonatesettings.txt', httpservice:JSONEncode(getgenv().settings)) end --Save Settings local settingsLock = true local function saveSettings() if settingsLock == false then print('Settings saved.') writefile('plsdonatesettings.txt', httpservice:JSONEncode(getgenv().settings)) end end local function serverHop() local gameId = "8737602449" if vcEnabled and getgenv().settings.vcServer then gameId = "8943844393" end local servers = {} local req = httprequest({Url = "https://games.roblox.com/v1/games/".. gameId.."/servers/Public?sortOrder=Desc&limit=100"}) local body = httpservice:JSONDecode(req.Body) if body and body.data then for i, v in next, body.data do if type(v) == "table" and tonumber(v.playing) and tonumber(v.maxPlayers) and v.playing < v.maxPlayers and v.playing > 19 then table.insert(servers, 1, v.id) end end end if #servers > 0 then game:GetService("TeleportService"):TeleportToPlaceInstance(gameId, servers[math.random(1, #servers)], Players.LocalPlayer) end game:GetService("TeleportService").TeleportInitFailed:Connect(function() game:GetService("TeleportService"):TeleportToPlaceInstance(gameId, servers[math.random(1, #servers)], Players.LocalPlayer) end) end local function waitServerHop() task.wait(getgenv().settings.serverHopDelay * 60) serverHop() end local function hopSet() if hopTimer then task.cancel(hopTimer) end if getgenv().settings.serverHopToggle then hopTimer = task.spawn(waitServerHop) end end --Function to fix slider local sliderInProgress = false; local function slider(value, whichSlider) if sliderInProgress then return end sliderInProgress = true task.wait(5) if getgenv().settings[whichSlider] == value then saveSettings() sliderInProgress = false; if whichSlider == "serverHopDelay" then hopSet() end else sliderInProgress = false; return slider(getgenv().settings[whichSlider], whichSlider) end end --Booth update function local function update() local text local current = Players.LocalPlayer.leaderstats.Raised.Value local goal = current + tonumber(getgenv().settings.goalBox) if goal == 420 or goal == 425 then goal = goal + 10 end if current == 420 or current == 425 then current = current + 10 end if goal > 999 then if tonumber(getgenv().settings.goalBox) < 10 then goal = string.format("%.2fk", (current + 10) / 10 ^ 3) else goal = string.format("%.2fk", (goal) / 10 ^ 3) end end if current > 999 then current = string.format("%.2fk", current / 10 ^ 3) end if getgenv().settings.textUpdateToggle and getgenv().settings.customBoothText then text = string.gsub(getgenv().settings.customBoothText, "$C", current) text = string.gsub (text, "$G", goal) boothText = tostring(''.. text.. '') --Updates the booth text local myBooth = Players.LocalPlayer.PlayerGui.MapUIContainer.MapUI.BoothUI:FindFirstChild(tostring("BoothUI".. unclaimed[1])) if myBooth.Sign.TextLabel.Text ~= boothText then if string.find(myBooth.Sign.TextLabel.Text, "# #") or string.find(myBooth.Sign.TextLabel.Text, "##") then require(game.ReplicatedStorage.Remotes).Event("SetBoothText"):FireServer("your text here", "booth") task.wait(3) end require(game.ReplicatedStorage.Remotes).Event("SetBoothText"):FireServer(boothText, "booth") task.wait(3) end end if getgenv().settings.signToggle and getgenv().settings.signUpdateToggle and getgenv().settings.signText and signPass then local currentSign = game.Players.LocalPlayer.Character.DonateSign.TextSign.SurfaceGui.TextLabel.Text text = string.gsub(getgenv().settings.signText, "$C", current) text = string.gsub (text, "$G", goal) signText = tostring(''.. text.. '') if currentSign ~= signText then if string.find(currentSign, "# #") or string.find(currentSign, "##") then require(game.ReplicatedStorage.Remotes).Event("SetBoothText"):FireServer("your text here", "sign") task.wait(3) end require(game.ReplicatedStorage.Remotes).Event("SetBoothText"):FireServer(signText, "sign") end end end local function begging() while getgenv().settings.autoBeg do game.ReplicatedStorage.DefaultChatSystemChatEvents.SayMessageRequest:FireServer(getgenv().settings.begMessage[math.random(#getgenv().settings.begMessage)],"All") task.wait(getgenv().settings.begDelay) end end local function webhook(msg) httprequest({ Url = getgenv().settings.webhookBox, Body = httpservice:JSONEncode({["content"] = msg}), Method = "POST", Headers = {["content-type"] = "application/json"} }) end --GUI local Window = library:AddWindow("Loading...", { main_color = Color3.fromRGB(0, 128, 0), min_size = Vector2.new(373, 433), toggle_key = Enum.KeyCode.RightShift, }) local boothTab = Window:AddTab("Booth") local signTab = Window:AddTab("Sign") local chatTab = Window:AddTab("Chat") local webhookTab = Window:AddTab("Webhook") local serverHopTab = Window:AddTab("Server") local otherTab = Window:AddTab("Other") --Booth Settings local textUpdateToggle = boothTab:AddSwitch("Text Update", function(bool) if settingsLock then return end getgenv().settings.textUpdateToggle = bool saveSettings() if bool then update() end end) textUpdateToggle:Set(getgenv().settings.textUpdateToggle) local textUpdateDelay = boothTab:AddSlider("Text Update Delay (S)", function(x) if settingsLock then return end getgenv().settings.textUpdateDelay = x coroutine.wrap(slider)(getgenv().settings.textUpdateDelay, "textUpdateDelay") end, { ["min"] = 0, ["max"] = 120 }) textUpdateDelay:Set((getgenv().settings.textUpdateDelay / 120) * 100) boothTab:AddLabel("Text Color:") local hexBox = boothTab:AddTextBox("Hex Codes Only", function(text) if settingsLock then return end local success = pcall(function() return Color3.fromHex(text) end) if success and string.find(text, "#") then getgenv().settings.hexBox = text saveSettings() update() end end, { ["clear"] = false }) hexBox.Text = getgenv().settings.hexBox boothTab:AddLabel("Goal Increase:") local goalBox = boothTab:AddTextBox("Numbers Only", function(text) if tonumber(text) then getgenv().settings.goalBox = tonumber(text) saveSettings() update() end end, { ["clear"] = false }) goalBox.Text = getgenv().settings.goalBox boothTab:AddLabel("Custom Booth Text:") local customBoothText = boothTab:AddConsole({ ["y"] = 50, ["source"] = "", }) customBoothText:Set(getgenv().settings.customBoothText) boothTab:AddButton("Save", function() if #customBoothText:Get() > 221 then return customBoothText:Set("221 Character Limit") end if settingsLock then return end if customBoothText:Get() then getgenv().settings.customBoothText = customBoothText:Get() saveSettings() update() end end) local helpLabel = boothTab:AddLabel("$C = Current, $G = Goal, 221 Character Limit") helpLabel.TextSize = 9 helpLabel.TextXAlignment = Enum.TextXAlignment.Center --Sign Settings pcall(function() if game:GetService("MarketplaceService"):UserOwnsGamePassAsync(Players.LocalPlayer.UserId, 28460459) then signPass = true end end) if signPass then local signToggle = signTab:AddSwitch("Equip Sign", function(bool) getgenv().settings.signToggle = bool saveSettings() if bool then Players.LocalPlayer.Character:FindFirstChildOfClass("Humanoid"):EquipTool(Players.LocalPlayer.Backpack:FindFirstChild("DonateSign")) else Players.LocalPlayer.Character:FindFirstChildOfClass("Humanoid"):UnequipTools(Players.LocalPlayer.Backpack:FindFirstChild("DonateSign")) end end) signToggle:Set(getgenv().settings.signToggle) local signUpdateToggle = signTab:AddSwitch("Text Update", function(bool) if settingsLock then return end getgenv().settings.signUpdateToggle = bool saveSettings() if bool then update() end end) signUpdateToggle:Set(getgenv().settings.signUpdateToggle) signTab:AddLabel("Text Color:") local signHexBox = signTab:AddTextBox("Hex Codes Only", function(text) if settingsLock then return end local success = pcall(function() return Color3.fromHex(text) end) if success and string.find(text, "#") then getgenv().settings.signHexBox = text saveSettings() if getgenv().settings.signUpdateToggle and getgenv().settings.signText then update() end end end, { ["clear"] = false }) signHexBox.Text = getgenv().settings.signHexBox signTab:AddLabel("Sign Text:") local signText = signTab:AddConsole({ ["y"] = 50, ["source"] = "", }) signText:Set(getgenv().settings.signText) signTab:AddButton("Save", function() if #signText:Get() > 221 then return signText:Set("221 Character Limit") end if settingsLock then return end if signText:Get() then getgenv().settings.signText = signText:Get() saveSettings() update() end end) local signHelpLabel = signTab:AddLabel("$C = Current, $G = Goal, 221 Character Limit") signHelpLabel.TextSize = 9 signHelpLabel.TextXAlignment = Enum.TextXAlignment.Center else signTab:AddLabel('Requires Sign Gamepass') end --Chat Settings local autoThanks = chatTab:AddSwitch("Auto Thank You", function(bool) getgenv().settings.autoThanks = bool saveSettings() end) autoThanks:Set(getgenv().settings.autoThanks) local autoBeg = chatTab:AddSwitch("Auto Beg", function(bool) if settingsLock then return end getgenv().settings.autoBeg = bool saveSettings() if bool then spamming = task.spawn(begging) else task.cancel(spamming) end end) autoBeg:Set(getgenv().settings.autoBeg) local thanksDelay = chatTab:AddSlider("Thanks Delay (S)", function(x) if settingsLock then return end getgenv().settings.thanksDelay = x coroutine.wrap(slider)(getgenv().settings.thanksDelay, "thanksDelay") end, { ["min"] = 1, ["max"] = 120 }) thanksDelay:Set((getgenv().settings.thanksDelay / 120) * 100) local begDelay = chatTab:AddSlider("Begging Delay (S)", function(x) if settingsLock then return end getgenv().settings.begDelay = x coroutine.wrap(slider)(getgenv().settings.begDelay, "begDelay") end, { ["min"] = 1, ["max"] = 300 }) begDelay:Set((getgenv().settings.begDelay / 300) * 100) local tym = chatTab:AddFolder("Thank You Messages:") local thanksMessage = tym:AddConsole({ ["y"] = 170, ["source"] = "", }) local full = '' for i, v in ipairs(getgenv().settings.thanksMessage) do full = full .. v .. "\n" end thanksMessage:Set(full) tym:AddButton("Save", function() local split = {} for newline in string.gmatch(thanksMessage:Get(), "[^\n]+") do table.insert(split, newline) end getgenv().settings.thanksMessage = split saveSettings() end) local bm = chatTab:AddFolder("Begging Messages:") local begMessage = bm:AddConsole({ ["y"] = 170, ["source"] = "", }) local bfull = '' for i, v in ipairs(getgenv().settings.begMessage) do bfull = bfull .. v .. "\n" end begMessage:Set(bfull) bm:AddButton("Save", function() local bsplit = {} for newline in string.gmatch(begMessage:Get(), "[^\n]+") do table.insert(bsplit, newline) end getgenv().settings.begMessage = bsplit saveSettings() end) --Webhook Settings local webhookToggle = webhookTab:AddSwitch("Discord Webhook Notifications", function(bool) getgenv().settings.webhookToggle = bool saveSettings() end) webhookToggle:Set(getgenv().settings.webhookToggle) local webhookBox = webhookTab:AddTextBox("Webhook URL", function(text) if string.find(text, "https://discord.com/api/webhooks/") then getgenv().settings.webhookBox = text; saveSettings() end end, { ["clear"] = false }) webhookBox.Text = getgenv().settings.webhookBox webhookTab:AddLabel('Press Enter to Save') webhookTab:AddButton("Test", function() if getgenv().settings.webhookBox then webhook("Sent from PLS DONATE!!") end end) --Server Hop Settings pcall(function() if game:GetService("VoiceChatService"):IsVoiceEnabledForUserIdAsync(Players.LocalPlayer.UserId) then vcEnabled = true end end) local serverHopToggle = serverHopTab:AddSwitch("Auto Server Hop", function(bool) if settingsLock then return end getgenv().settings.serverHopToggle = bool hopSet() saveSettings() end) serverHopToggle:Set(getgenv().settings.serverHopToggle) local serverHopDelay = serverHopTab:AddSlider("Server Hop Delay (M)", function(x) if settingsLock then return end getgenv().settings.serverHopDelay = x coroutine.wrap(slider)(getgenv().settings.serverHopDelay, "serverHopDelay") end, { ["min"] = 1, ["max"] = 120 }) serverHopDelay:Set((getgenv().settings.serverHopDelay / 120) * 100) serverHopTab:AddLabel("Timer resets after donation") if vcEnabled then local vcToggle = serverHopTab:AddSwitch("Voice Chat Servers", function(bool) if settingsLock then return end getgenv().settings.vcServer = bool saveSettings() end) vcToggle:Set(getgenv().settings.vcServer) end serverHopTab:AddButton("Server Hop", function() serverHop() end) --Other tab otherTab:AddLabel('Dance:') local danceDropdown = otherTab:AddDropdown("[ ".. getgenv().settings.danceChoice.. " ]", function(object) if settingsLock then return end getgenv().settings.danceChoice = object saveSettings() if object == "Disabled" then Players:Chat("/e wave") elseif object == "1" then Players:Chat("/e dance") else Players:Chat("/e dance".. object) end end) danceDropdown:Add("Disabled") danceDropdown:Add("1") danceDropdown:Add("2") danceDropdown:Add("3") local render = otherTab:AddSwitch("Disable Rendering", function(bool) getgenv().settings.render = bool saveSettings() if bool then game:GetService("RunService"):Set3dRenderingEnabled(false) else game:GetService("RunService"):Set3dRenderingEnabled(true) end end) render:Set(getgenv().settings.render) if setfpscap and type(setfpscap) == "function" then local fpsLimit = otherTab:AddSlider("FPS Limit", function(x) if settingsLock then return end getgenv().settings.fpsLimit = x setfpscap(x) coroutine.wrap(slider)(getgenv().settings.fpsLimit, "fpsLimit") end, { ["min"] = 1, ["max"] = 60 }) fpsLimit:Set((getgenv().settings.fpsLimit / 60) * 100) setfpscap(getgenv().settings.fpsLimit) end boothTab:Show() library:FormatWindows() settingsLock = false --Finds unclaimed booths local function findUnclaimed() for i, v in pairs(Players.LocalPlayer.PlayerGui.MapUIContainer.MapUI.BoothUI:GetChildren()) do if (v.Details.Owner.Text == "unclaimed") then table.insert(unclaimed, tonumber(string.match(tostring(v), "%d+"))) end end end if not pcall(findUnclaimed) then serverHop() end local claimCount = #unclaimed --Claim booth function local function boothclaim() require(game.ReplicatedStorage.Remotes).Event("ClaimBooth"):InvokeServer(unclaimed[1]) if not string.find(Players.LocalPlayer.PlayerGui.MapUIContainer.MapUI.BoothUI:FindFirstChild(tostring("BoothUI".. unclaimed[1])).Details.Owner.Text, Players.LocalPlayer.DisplayName) then task.wait(1) if not string.find(Players.LocalPlayer.PlayerGui.MapUIContainer.MapUI.BoothUI:FindFirstChild(tostring("BoothUI".. unclaimed[1])).Details.Owner.Text, Players.LocalPlayer.DisplayName) then error() end end end --Checks if booth claim fails while not pcall(boothclaim) do if errCount >= claimCount then serverHop() end table.remove(unclaimed, 1) errCount = errCount + 1 end hopSet() --Walks to booth local Controls = require(Players.LocalPlayer.PlayerScripts:WaitForChild("PlayerModule")):GetControls() Controls:Disable() Players.LocalPlayer.Character.Humanoid:MoveTo(Vector3.new(booths[tostring(unclaimed[1])]:match("(.+), (.+), (.+)"))) local atBooth = false local function noclip() for i,v in pairs(Players.LocalPlayer.Character:GetDescendants()) do if v:IsA("BasePart") then v.CanCollide = false end end end local noclipper = game:GetService("RunService").Stepped:Connect(noclip) Players.LocalPlayer.Character.Humanoid.MoveToFinished:Connect(function(reached) atBooth = true end) while not atBooth do task.wait(.1) if Players.LocalPlayer.Character.Humanoid:GetState() == Enum.HumanoidStateType.Seated then Players.LocalPlayer.Character.Humanoid.Jump = true end end Controls:Enable() noclipper:Disconnect() Players.LocalPlayer.Character:SetPrimaryPartCFrame(CFrame.new(Players.LocalPlayer.Character.HumanoidRootPart.Position, Vector3.new(40, 14, 101))) require(game.ReplicatedStorage.Remotes).Event("RefreshItems"):InvokeServer() if getgenv().settings.danceChoice == "1" then task.wait(.25) Players:Chat("/e dance") else task.wait(.25) Players:Chat("/e dance".. getgenv().settings.danceChoice) end if getgenv().settings.autoBeg then spamming = task.spawn(begging) end local RaisedC = Players.LocalPlayer.leaderstats.Raised.value Players.LocalPlayer.leaderstats.Raised.Changed:Connect(function() hopSet() if getgenv().settings.webhookToggle and getgenv().settings.webhookBox then local LogService = Game:GetService("LogService") local logs = LogService:GetLogHistory() --Tries to grabs donation message from logs if string.find(logs[#logs].message, Players.LocalPlayer.DisplayName) then webhook(tostring(logs[#logs].message.. " (Total: ".. Players.LocalPlayer.leaderstats.Raised.value.. ")")) else webhook(tostring("💰 Somebody tipped ".. Players.LocalPlayer.leaderstats.Raised.value - RaisedC.. " Robux to ".. Players.LocalPlayer.DisplayName.. " (Total: " .. Players.LocalPlayer.leaderstats.Raised.value.. ")")) end end RaisedC = Players.LocalPlayer.leaderstats.Raised.value if getgenv().settings.autoThanks then task.spawn(function() task.wait(getgenv().settings.thanksDelay) game.ReplicatedStorage.DefaultChatSystemChatEvents.SayMessageRequest:FireServer(getgenv().settings.thanksMessage[math.random(#getgenv().settings.thanksMessage)],"All") end) end task.wait(getgenv().settings.textUpdateDelay) update() end) update() if game:GetService("CoreGui").imgui.Windows.Window.Title.Text == "Loading..." then game:GetService("CoreGui").imgui.Windows.Window.Title.Text = "PLS DONATE - tzechco" end while task.wait(getgenv().settings.serverHopDelay * 60) do if not hopTimer then hopSet() end end