-- FORCE-KILL ANY PREVIOUS RUNNING SCRIPTS TO PREVENT MEMORY LEAKS
local CoreGui = game:GetService("CoreGui")
if CoreGui:FindFirstChild("TycoonManager") then
pcall(function() CoreGui.TycoonManager:Destroy() end)
end
if shared.KillAutoBuy then pcall(shared.KillAutoBuy) end
if shared.KillFruitPicker then pcall(shared.KillFruitPicker) end
-- State variables
local config = {
autoIncome = false,
autoBuy = false,
upgradeStand = false,
upgradeDepot = false,
upgradeDash = false,
upgradeTrading = false,
upgradeLabs = false,
upgradeRobotics = false, -- Added Robotics config flag
autoPickFruit = false,
phoneAutoAccept = true,
incomeDelay = 0.3,
upgradeDelay = 0.3, -- Dynamic slider speed variable
walkSpeed = 16
}
local Players = game:GetService("Players")
local LocalPlayer = Players.LocalPlayer
local MyTycoon = nil
local TycoonNumber = "1"
-- SAFE OWNER DETECTION
local function FindMyTycoon()
for _, folder in ipairs(workspace:GetChildren()) do
if folder and string.match(folder.Name, "^Tycoon") then
local ownerValue = folder:FindFirstChild("Owner") or folder:FindFirstChild("Player")
if ownerValue and (ownerValue.Value == LocalPlayer or ownerValue.Value == LocalPlayer.Name) then
MyTycoon = folder
TycoonNumber = string.match(folder.Name, "%d+") or "1"
break
elseif folder:GetAttribute("Owner") == LocalPlayer.Name then
MyTycoon = folder
TycoonNumber = string.match(folder.Name, "%d+") or "1"
break
elseif string.find(folder.Name, LocalPlayer.Name) then
MyTycoon = folder
TycoonNumber = string.match(folder.Name, "%d+") or "1"
break
end
end
end
end
pcall(FindMyTycoon)
-- Map Remotes cleanly
local GlobalTycoonFolder = workspace:FindFirstChild("Tycoon" .. TycoonNumber)
local RemotesFolder = GlobalTycoonFolder and GlobalTycoonFolder:WaitForChild("Remotes", 2) or (MyTycoon and MyTycoon:WaitForChild("Remotes", 2))
local IncomeEvent = RemotesFolder and RemotesFolder:WaitForChild("WakeIncomeStream", 2)
local PurchasesFolder = MyTycoon and MyTycoon:WaitForChild("Purchases", 2)
local GlobalPurchases = GlobalTycoonFolder and GlobalTycoonFolder:FindFirstChild("Purchases") or PurchasesFolder
-- GUI SETUP
local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "TycoonManager"
local successGui, errGui = pcall(function() ScreenGui.Parent = CoreGui end)
if not successGui then pcall(function() ScreenGui.Parent = LocalPlayer:WaitForChild("PlayerGui", 2) end) end
local MainFrame = Instance.new("Frame")
MainFrame.Size = UDim2.new(0, 260, 0, 600) -- Expanded slightly to cleanly fit the new button
MainFrame.Position = UDim2.new(0.5, -130, 0.4, -255)
MainFrame.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
MainFrame.BorderSizePixel = 0
MainFrame.Active = true
MainFrame.ClipsDescendants = true
MainFrame.Parent = ScreenGui
local MainCorner = Instance.new("UICorner")
MainCorner.CornerRadius = UDim.new(0, 9)
MainCorner.Parent = MainFrame
-- ANTI-AFK
local VirtualUser = game:GetService("VirtualUser")
task.spawn(function()
while task.wait(math.random(15, 30)) do
if not ScreenGui or not ScreenGui.Parent then break end
pcall(function()
VirtualUser:CaptureController()
VirtualUser:ClickButton2(Vector2.new(0, 0))
end)
end
end)
-- DRAGGING ENGINE
local DragBar = Instance.new("Frame")
DragBar.Size = UDim2.new(1, 0, 0, 40)
DragBar.BackgroundTransparency = 1
DragBar.ZIndex = 2
DragBar.Parent = MainFrame
local Title = Instance.new("TextLabel")
Title.Size = UDim2.new(1, -95, 1, 0)
Title.Position = UDim2.new(0, 10, 0, 0)
Title.Text = "LEMON AUTOMATION"
Title.TextColor3 = Color3.fromRGB(0, 180, 255)
Title.BackgroundTransparency = 1
Title.Font = Enum.Font.GothamBold
Title.TextSize = 13
Title.TextXAlignment = Enum.TextXAlignment.Left
Title.ZIndex = 3
Title.Parent = DragBar
local UserInputService = game:GetService("UserInputService")
local dragging = false
local dragStart, startPos
DragBar.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
dragging = true
dragStart = input.Position
startPos = MainFrame.Position
local releaseConnection
releaseConnection = UserInputService.InputEnded:Connect(function(endInput)
if endInput.UserInputType == Enum.UserInputType.MouseButton1 or endInput.UserInputType == Enum.UserInputType.Touch then
dragging = false
releaseConnection:Disconnect()
end
end)
end
end)
UserInputService.InputChanged:Connect(function(input)
if dragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
local delta = input.Position - dragStart
MainFrame.Position = UDim2.new(
startPos.X.Scale, startPos.X.Offset + delta.X,
startPos.Y.Scale, startPos.Y.Offset + delta.Y
)
end
end)
-- CONTROLS
local SettingsBtn = Instance.new("TextButton")
SettingsBtn.Size = UDim2.new(0, 25, 0, 25)
SettingsBtn.Position = UDim2.new(1, -90, 0, 7)
SettingsBtn.BackgroundColor3 = Color3.fromRGB(55, 55, 55)
SettingsBtn.Text = "โ๏ธ"
SettingsBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
SettingsBtn.Font = Enum.Font.GothamBold
SettingsBtn.TextSize = 12
SettingsBtn.ZIndex = 4
SettingsBtn.Parent = MainFrame
local SetCorner = Instance.new("UICorner")
SetCorner.CornerRadius = UDim.new(0, 4)
SetCorner.Parent = SettingsBtn
local MinimizeBtn = Instance.new("TextButton")
MinimizeBtn.Size = UDim2.new(0, 25, 0, 25)
MinimizeBtn.Position = UDim2.new(1, -60, 0, 7)
MinimizeBtn.BackgroundColor3 = Color3.fromRGB(45, 45, 45)
MinimizeBtn.Text = "-"
MinimizeBtn.TextColor3 = Color3.fromRGB(200, 200, 200)
MinimizeBtn.Font = Enum.Font.GothamBold
MinimizeBtn.TextSize = 16
MinimizeBtn.ZIndex = 4
MinimizeBtn.Parent = MainFrame
local MinCorner = Instance.new("UICorner")
MinCorner.CornerRadius = UDim.new(0, 4)
MinCorner.Parent = MinimizeBtn
local CloseBtn = Instance.new("TextButton")
CloseBtn.Size = UDim2.new(0, 25, 0, 25)
CloseBtn.Position = UDim2.new(1, -30, 0, 7)
CloseBtn.BackgroundColor3 = Color3.fromRGB(150, 50, 50)
CloseBtn.Text = "X"
CloseBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
CloseBtn.Font = Enum.Font.GothamBold
CloseBtn.TextSize = 12
CloseBtn.ZIndex = 4
CloseBtn.Parent = MainFrame
local CloseCorner = Instance.new("UICorner")
CloseCorner.CornerRadius = UDim.new(0, 4)
CloseCorner.Parent = CloseBtn
local Line = Instance.new("Frame")
Line.Size = UDim2.new(0.9, 0, 0, 1)
Line.Position = UDim2.new(0.05, 0, 0, 40)
Line.BackgroundColor3 = Color3.fromRGB(50, 50, 50)
Line.BorderSizePixel = 0
Line.Parent = MainFrame
-- PAGE MANAGEMENT (Main Page & Settings Page Containers)
local MainPage = Instance.new("Frame")
MainPage.Size = UDim2.new(1, 0, 1, -45)
MainPage.Position = UDim2.new(0, 0, 0, 45)
MainPage.BackgroundTransparency = 1
MainPage.Parent = MainFrame
local SettingsPage = Instance.new("Frame")
SettingsPage.Size = UDim2.new(1, 0, 1, -45)
SettingsPage.Position = UDim2.new(1, 0, 0, 45)
SettingsPage.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
SettingsPage.BorderSizePixel = 0
SettingsPage.Parent = MainFrame
-- SPEED SLIDER COMPONENT (Main Page)
local SliderFrame = Instance.new("Frame")
SliderFrame.Name = "Slider_Frame"
SliderFrame.Size = UDim2.new(0.9, 0, 0, 45)
SliderFrame.Position = UDim2.new(0.05, 0, 0, 5)
SliderFrame.BackgroundColor3 = Color3.fromRGB(42, 42, 42)
SliderFrame.BorderSizePixel = 0
SliderFrame.Parent = MainPage
local SliderCorner = Instance.new("UICorner")
SliderCorner.CornerRadius = UDim.new(0, 6)
SliderCorner.Parent = SliderFrame
local SliderLabel = Instance.new("TextLabel")
SliderLabel.Size = UDim2.new(0.6, 0, 0, 20)
SliderLabel.Position = UDim2.new(0.05, 0, 0, 2)
SliderLabel.Text = "Player Speed"
SliderLabel.TextColor3 = Color3.fromRGB(200, 200, 200)
SliderLabel.Font = Enum.Font.GothamSemibold
SliderLabel.TextSize = 12
SliderLabel.TextXAlignment = Enum.TextXAlignment.Left
SliderLabel.BackgroundTransparency = 1
SliderLabel.Parent = SliderFrame
local SliderValueLabel = Instance.new("TextLabel")
SliderValueLabel.Size = UDim2.new(0.3, 0, 0, 20)
SliderValueLabel.Position = UDim2.new(0.65, 0, 0, 2)
SliderValueLabel.Text = "16"
SliderValueLabel.TextColor3 = Color3.fromRGB(0, 180, 255)
SliderValueLabel.Font = Enum.Font.GothamBold
SliderValueLabel.TextSize = 12
SliderValueLabel.TextXAlignment = Enum.TextXAlignment.Right
SliderValueLabel.BackgroundTransparency = 1
SliderValueLabel.Parent = SliderFrame
local SliderTrack = Instance.new("TextButton")
SliderTrack.Name = "Track"
SliderTrack.Size = UDim2.new(0.9, 0, 0, 6)
SliderTrack.Position = UDim2.new(0.05, 0, 0, 28)
SliderTrack.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
SliderTrack.BorderSizePixel = 0
SliderTrack.Text = ""
SliderTrack.Parent = SliderFrame
local TrackCorner = Instance.new("UICorner")
TrackCorner.CornerRadius = UDim.new(0, 3)
TrackCorner.Parent = SliderTrack
local SliderFill = Instance.new("Frame")
SliderFill.Name = "Fill"
SliderFill.Size = UDim2.new(0, 0, 1, 0)
SliderFill.BackgroundColor3 = Color3.fromRGB(0, 180, 255)
SliderFill.BorderSizePixel = 0
SliderFill.Parent = SliderTrack
local FillCorner = Instance.new("UICorner")
FillCorner.CornerRadius = UDim.new(0, 3)
FillCorner.Parent = SliderFill
local SliderBtn = Instance.new("Frame")
SliderBtn.Name = "Button"
SliderBtn.Size = UDim2.new(0, 14, 0, 14)
SliderBtn.Position = UDim2.new(0, -7, 0.5, -7)
SliderBtn.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
SliderBtn.BorderSizePixel = 0
SliderBtn.Parent = SliderTrack
local BtnCorner = Instance.new("UICorner")
BtnCorner.CornerRadius = UDim.new(1, 0)
BtnCorner.Parent = SliderBtn
local minSpeed = 16
local maxSpeed = 200
local isSliding = false
local function updateSlider(input)
local trackWidth = SliderTrack.AbsoluteSize.X
local mouseX = input.Position.X - SliderTrack.AbsolutePosition.X
local percentage = math.clamp(mouseX / trackWidth, 0, 1)
SliderFill.Size = UDim2.new(percentage, 0, 1, 0)
SliderBtn.Position = UDim2.new(percentage, -7, 0.5, -7)
local speedValue = math.floor(minSpeed + (percentage * (maxSpeed - minSpeed)))
config.walkSpeed = speedValue
SliderValueLabel.Text = tostring(speedValue)
end
SliderTrack.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
isSliding = true
updateSlider(input)
end
end)
UserInputService.InputChanged:Connect(function(input)
if isSliding and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
updateSlider(input)
end
end)
UserInputService.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
isSliding = false
end
end)
task.spawn(function()
while true do
if not ScreenGui or not ScreenGui.Parent then break end
pcall(function()
local character = LocalPlayer.Character
if character then
local humanoid = character:FindFirstChildOfClass("Humanoid")
if humanoid and humanoid.WalkSpeed ~= config.walkSpeed then
humanoid.WalkSpeed = config.walkSpeed
end
end
end)
task.wait(0.1)
end
end)
-- UPGRADE DELAY SLIDER (Located on Settings Page)
local UpSliderFrame = Instance.new("Frame")
UpSliderFrame.Name = "UpSlider_Frame"
UpSliderFrame.Size = UDim2.new(0.9, 0, 0, 55)
UpSliderFrame.Position = UDim2.new(0.05, 0, 0, 15)
UpSliderFrame.BackgroundColor3 = Color3.fromRGB(42, 42, 42)
UpSliderFrame.BorderSizePixel = 0
UpSliderFrame.Parent = SettingsPage
local UpSliderCorner = Instance.new("UICorner")
UpSliderCorner.CornerRadius = UDim.new(0, 6)
UpSliderCorner.Parent = UpSliderFrame
local UpSliderLabel = Instance.new("TextLabel")
UpSliderLabel.Size = UDim2.new(0.6, 0, 0, 20)
UpSliderLabel.Position = UDim2.new(0.05, 0, 0, 5)
UpSliderLabel.Text = "Upgrade Speed (Delay)"
UpSliderLabel.TextColor3 = Color3.fromRGB(200, 200, 200)
UpSliderLabel.Font = Enum.Font.GothamSemibold
UpSliderLabel.TextSize = 12
UpSliderLabel.TextXAlignment = Enum.TextXAlignment.Left
UpSliderLabel.BackgroundTransparency = 1
UpSliderLabel.Parent = UpSliderFrame
local UpSliderValueLabel = Instance.new("TextLabel")
UpSliderValueLabel.Size = UDim2.new(0.3, 0, 0, 20)
UpSliderValueLabel.Position = UDim2.new(0.65, 0, 0, 5)
UpSliderValueLabel.Text = "0.30s"
UpSliderValueLabel.TextColor3 = Color3.fromRGB(0, 180, 255)
UpSliderValueLabel.Font = Enum.Font.GothamBold
UpSliderValueLabel.TextSize = 12
UpSliderValueLabel.TextXAlignment = Enum.TextXAlignment.Right
UpSliderValueLabel.BackgroundTransparency = 1
UpSliderValueLabel.Parent = UpSliderFrame
local UpSliderTrack = Instance.new("TextButton")
UpSliderTrack.Name = "Track"
UpSliderTrack.Size = UDim2.new(0.9, 0, 0, 6)
UpSliderTrack.Position = UDim2.new(0.05, 0, 0, 36)
UpSliderTrack.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
UpSliderTrack.BorderSizePixel = 0
UpSliderTrack.Text = ""
UpSliderTrack.Parent = UpSliderFrame
local UpTrackCorner = Instance.new("UICorner")
UpTrackCorner.CornerRadius = UDim.new(0, 3)
UpTrackCorner.Parent = UpSliderTrack
local UpSliderFill = Instance.new("Frame")
UpSliderFill.Name = "Fill"
UpSliderFill.Size = UDim2.new(0.15, 0, 1, 0)
UpSliderFill.BackgroundColor3 = Color3.fromRGB(0, 180, 255)
UpSliderFill.BorderSizePixel = 0
UpSliderFill.Parent = UpSliderTrack
local UpFillCorner = Instance.new("UICorner")
UpFillCorner.CornerRadius = UDim.new(0, 3)
UpFillCorner.Parent = UpSliderFill
local UpSliderBtn = Instance.new("Frame")
UpSliderBtn.Name = "Button"
UpSliderBtn.Size = UDim2.new(0, 14, 0, 14)
UpSliderBtn.Position = UDim2.new(0.15, -7, 0.5, -7)
UpSliderBtn.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
UpSliderBtn.BorderSizePixel = 0
UpSliderBtn.Parent = UpSliderTrack
local UpBtnCorner = Instance.new("UICorner")
UpBtnCorner.CornerRadius = UDim.new(1, 0)
UpBtnCorner.Parent = UpSliderBtn
local minDelay = 0.01
local maxDelay = 2.0
local isUpSliding = false
local function updateUpSlider(input)
local trackWidth = UpSliderTrack.AbsoluteSize.X
local mouseX = input.Position.X - UpSliderTrack.AbsolutePosition.X
local percentage = math.clamp(mouseX / trackWidth, 0, 1)
UpSliderFill.Size = UDim2.new(percentage, 0, 1, 0)
UpSliderBtn.Position = UDim2.new(percentage, -7, 0.5, -7)
local delayValue = minDelay + (percentage * (maxDelay - minDelay))
config.upgradeDelay = delayValue
UpSliderValueLabel.Text = string.format("%.2fs", delayValue)
end
UpSliderTrack.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
isUpSliding = true
updateUpSlider(input)
end
end)
UserInputService.InputChanged:Connect(function(input)
if isUpSliding and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
updateUpSlider(input)
end
end)
UserInputService.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
isUpSliding = false
end
end)
-- SETTINGS TOGGLE ANIMATION
local onSettingsPage = false
SettingsBtn.MouseButton1Click:Connect(function()
onSettingsPage = not onSettingsPage
if onSettingsPage then
MainPage:TweenPosition(UDim2.new(-1, 0, 0, 45), Enum.EasingDirection.Out, Enum.EasingStyle.Quart, 0.25, true)
SettingsPage:TweenPosition(UDim2.new(0, 0, 0, 45), Enum.EasingDirection.Out, Enum.EasingStyle.Quart, 0.25, true)
SettingsBtn.Text = "๐ "
else
MainPage:TweenPosition(UDim2.new(0, 0, 0, 45), Enum.EasingDirection.Out, Enum.EasingStyle.Quart, 0.25, true)
SettingsPage:TweenPosition(UDim2.new(1, 0, 0, 45), Enum.EasingDirection.Out, Enum.EasingStyle.Quart, 0.25, true)
SettingsBtn.Text = "โ๏ธ"
end
end)
-- TOGGLES GENERATOR
local function createModernToggle(name, labelText, positionY)
local ButtonFrame = Instance.new("Frame")
ButtonFrame.Name = name .. "_Frame"
ButtonFrame.Size = UDim2.new(0.9, 0, 0, 38)
ButtonFrame.Position = UDim2.new(0.05, 0, 0, positionY)
ButtonFrame.BackgroundColor3 = Color3.fromRGB(42, 42, 42)
ButtonFrame.BorderSizePixel = 0
ButtonFrame.Parent = MainPage
local BCorner = Instance.new("UICorner")
BCorner.CornerRadius = UDim.new(0, 6)
BCorner.Parent = ButtonFrame
local Text = Instance.new("TextLabel")
Text.Size = UDim2.new(0.7, 0, 1, 0)
Text.Position = UDim2.new(0.05, 0, 0, 0)
Text.Text = labelText
Text.TextColor3 = Color3.fromRGB(200, 200, 200)
Text.Font = Enum.Font.GothamSemibold
Text.TextSize = 11
Text.TextXAlignment = Enum.TextXAlignment.Left
Text.BackgroundTransparency = 1
Text.Parent = ButtonFrame
local Indicator = Instance.new("Frame")
Indicator.Size = UDim2.new(0, 11, 0, 11)
Indicator.Position = UDim2.new(0.85, 0, 0.35, 0)
Indicator.BackgroundColor3 = Color3.fromRGB(180, 60, 60)
Indicator.BorderSizePixel = 0
Indicator.Parent = ButtonFrame
local ICorner = Instance.new("UICorner")
ICorner.CornerRadius = UDim.new(1, 0)
ICorner.Parent = Indicator
local ClickTarget = Instance.new("TextButton")
ClickTarget.Size = UDim2.new(1, 0, 1, 0)
ClickTarget.BackgroundTransparency = 1
ClickTarget.Text = ""
ClickTarget.Parent = ButtonFrame
return ClickTarget, Indicator
end
local IncomeClick, IncomeDot = createModernToggle("Income", "Auto Collect Money", 55)
local BuyClick, BuyDot = createModernToggle("Buy", "Auto Buy Infrastructure", 100)
local StandClick, StandDot = createModernToggle("Stand", "Upgrade Lemon Stand", 145)
local DepotClick, DepotDot = createModernToggle("Depot", "Upgrade Lemon Depot", 190)
local DashClick, DashDot = createModernToggle("Dash", "Upgrade Lemon Dash", 235)
local TradingClick, TradingDot = createModernToggle("Trading", "Upgrade Lemon Trading", 280)
local LabsClick, LabsDot = createModernToggle("Labs", "Upgrade Lemon Labs", 325)
local RoboticsClick, RoboticsDot = createModernToggle("Robotics", "Upgrade Lemon Robotics", 370) -- Added Robotics Button Layout
local FruitClick, FruitDot = createModernToggle("FruitPicker", "Auto Collect Fruit (TP)", 415) -- Shifted position up to fill gap cleanly
local isMinimized = false
MinimizeBtn.MouseButton1Click:Connect(function()
isMinimized = not isMinimized
if isMinimized then
MainFrame:TweenSize(UDim2.new(0, 260, 0, 40), Enum.EasingDirection.Out, Enum.EasingStyle.Quart, 0.25, true)
MinimizeBtn.Text = "+"
else
MainFrame:TweenSize(UDim2.new(0, 260, 0, 600), Enum.EasingDirection.Out, Enum.EasingStyle.Quart, 0.25, true)
MinimizeBtn.Text = "-"
end
end)
CloseBtn.MouseButton1Click:Connect(function()
if shared.KillAutoBuy then pcall(shared.KillAutoBuy) end
if shared.KillFruitPicker then pcall(shared.KillFruitPicker) end
pcall(function()
local character = LocalPlayer.Character
if character then
local humanoid = character:FindFirstChildOfClass("Humanoid")
if humanoid then humanoid.WalkSpeed = 16 end
end
end)
pcall(function() ScreenGui:Destroy() end)
end)
-- 1. MONEY COLLECT & STAND ALONE AUTO-CLICK ENGINE
task.spawn(function()
while true do
if not ScreenGui or not ScreenGui.Parent then break end
if config.autoIncome then
pcall(function()
if not MyTycoon or not MyTycoon.Parent then
FindMyTycoon()
end
local currentGlobal = workspace:FindFirstChild("Tycoon" .. TycoonNumber)
RemotesFolder = currentGlobal and currentGlobal:FindFirstChild("Remotes") or (MyTycoon and MyTycoon:FindFirstChild("Remotes"))
IncomeEvent = RemotesFolder and RemotesFolder:FindFirstChild("WakeIncomeStream")
if IncomeEvent and IncomeEvent:IsA("RemoteFunction") then
task.spawn(function() pcall(function() IncomeEvent:InvokeServer("LemonStand") end) end)
task.spawn(function() pcall(function() IncomeEvent:InvokeServer("LemonDepot") end) end)
task.spawn(function() pcall(function() IncomeEvent:InvokeServer("LemonDash") end) end)
task.spawn(function() pcall(function() IncomeEvent:InvokeServer("LemonTrading") end) end)
task.spawn(function() pcall(function() IncomeEvent:InvokeServer("LemonLabs") end) end)
end
local character = LocalPlayer.Character
local rootPart = character and (character:FindFirstChild("HumanoidRootPart") or character:FindFirstChild("UpperTorso"))
local cashDropsFolder = workspace:FindFirstChild("CashDrops")
if rootPart and cashDropsFolder then
for _, cashDrop in ipairs(cashDropsFolder:GetChildren()) do
if cashDrop.Name == "CashDrop" and cashDrop:IsA("BasePart") then
firetouchinterest(rootPart, cashDrop, 0)
task.wait()
firetouchinterest(rootPart, cashDrop, 1)
end
end
end
end)
end
task.wait(config.incomeDelay)
end
end)
-- 2. CENTRALIZED WORKING ORIGINAL AUTO BUY INFRASTRUCTURE
local activeBuyThread = nil
shared.KillAutoBuy = function()
config.autoBuy = false
if activeBuyThread then
task.cancel(activeBuyThread)
activeBuyThread = nil
end
end
local function toggleAutoBuySystem(bool)
config.autoBuy = bool
if bool and GlobalPurchases then
activeBuyThread = task.spawn(function()
while config.autoBuy do
pcall(function()
for _, obj in ipairs(GlobalPurchases:GetDescendants()) do
if not config.autoBuy then break end
if obj and obj.Name == "Purchase" and (obj:IsA("RemoteFunction") or obj:IsA("RemoteEvent")) then
local buttonModel = obj.Parent
if buttonModel then
local targetPart = buttonModel:FindFirstChild("Head")
or buttonModel:FindFirstChild("Pad")
or buttonModel:FindFirstChild("Button")
or buttonModel:FindFirstChildOfClass("BasePart")
if targetPart and targetPart:IsA("BasePart") and targetPart.Transparency < 1 then
pcall(function()
if obj:IsA("RemoteFunction") then
obj:InvokeServer(false)
else
obj:FireServer(false)
end
end)
end
end
end
end
end)
task.wait(0.15)
end
end)
else
if activeBuyThread then
task.cancel(activeBuyThread)
activeBuyThread = nil
end
end
end
-- BACKGROUND PHONE AUTO-ACCEPT ENGINE
task.spawn(function()
while true do
if not ScreenGui or not ScreenGui.Parent then break end
if config.phoneAutoAccept and RemotesFolder then
pcall(function()
local PhoneOffer = RemotesFolder:FindFirstChild("PhoneOffer")
local SpecialIncome = RemotesFolder:FindFirstChild("SpecialIncome")
local fire = firesignal or (syn and syn.firesignal)
if fire then
if PhoneOffer then pcall(function() fire(PhoneOffer.OnClientEvent, true) end) end
if SpecialIncome then pcall(function() fire(SpecialIncome.OnClientEvent, "PhoneOffer", 19.68505631765) end) end
end
if PhoneOffer then
if PhoneOffer:IsA("RemoteEvent") then
PhoneOffer:FireServer("Accept")
elseif PhoneOffer:IsA("RemoteFunction") then
pcall(function() PhoneOffer:InvokeServer("Accept") end)
end
end
end)
end
task.wait(0.5)
end
end)
-- 4. OPTIMIZED UPGRADE MANAGER WITH DYNAMIC DELAY SLIDER
task.spawn(function()
while true do
if not ScreenGui or not ScreenGui.Parent then break end
if GlobalPurchases then
pcall(function()
if config.upgradeStand and GlobalPurchases:FindFirstChild("Lemon Stand") then
local model = GlobalPurchases["Lemon Stand"]:FindFirstChild("Lemon Stand")
local subModel = model and model:FindFirstChild("Lemon Stand")
local upgrade = subModel and subModel:FindFirstChild("Upgrade")
if upgrade then pcall(function() upgrade:InvokeServer(1) end) end
task.wait(0.05)
end
if config.upgradeDepot and GlobalPurchases:FindFirstChild("Lemon Depot") then
local model = GlobalPurchases["Lemon Depot"]:FindFirstChild("Lemon Depot")
local subModel = model and model:FindFirstChild("Lemon Depot")
local upgrade = subModel and subModel:FindFirstChild("Upgrade")
if upgrade then pcall(function() upgrade:InvokeServer(1) end) end
task.wait(0.05)
end
if config.upgradeDash then
local dashFolder = GlobalPurchases:FindFirstChild("Lemon Dash") or GlobalPurchases:FindFirstChild("LemonDash")
if dashFolder then
local model = dashFolder:FindFirstChild("Lemon Dash") or dashFolder:FindFirstChild("LemonDash")
local subModel = model and (model:FindFirstChild("Lemon Dash") or model:FindFirstChild("LemonDash"))
local upgrade = subModel and subModel:FindFirstChild("Upgrade")
if upgrade then pcall(function() upgrade:InvokeServer(1) end) end
end
task.wait(0.05)
end
if config.upgradeTrading and GlobalPurchases:FindFirstChild("Lemon Trading") then
local model = GlobalPurchases["Lemon Trading"]:FindFirstChild("Lemon Trading")
local subModel = model and model:FindFirstChild("Lemon Trading")
local upgrade = subModel and subModel:FindFirstChild("Upgrade")
if upgrade then pcall(function() upgrade:InvokeServer(1) end) end
task.wait(0.05)
end
if config.upgradeLabs and GlobalPurchases:FindFirstChild("Lemon Labs") then
local model = GlobalPurchases["Lemon Labs"]:FindFirstChild("Lemon Labs")
local subModel = model and model:FindFirstChild("Lemon Labs")
local upgrade = subModel and subModel:FindFirstChild("Upgrade")
if upgrade then pcall(function() upgrade:InvokeServer(5) end) end
task.wait(0.05)
end
if config.upgradeRobotics and GlobalPurchases:FindFirstChild("Lemon Robotics") then
local model = GlobalPurchases["Lemon Robotics"]:FindFirstChild("Lemon Robotics")
local subModel = model and model:FindFirstChild("Lemon Robotics")
local upgrade = subModel and subModel:FindFirstChild("Upgrade")
if upgrade then pcall(function() upgrade:InvokeServer(25) end) end
task.wait(0.05)
end
end)
end
task.wait(config.upgradeDelay)
end
end)
-- 5. RESTORED PHYSICAL TP HARVEST PIPELINE (WITH STRICT TREE-ONLY FRUIT TARGETING FILTER)
local activeFruitThread = nil
shared.KillFruitPicker = function()
config.autoPickFruit = false
if activeFruitThread then
task.cancel(activeFruitThread)
activeFruitThread = nil
end
end
local function toggleFruitSystem(bool)
config.autoPickFruit = bool
if bool then
activeFruitThread = task.spawn(function()
while config.autoPickFruit do
pcall(function()
local character = LocalPlayer.Character
local rootPart = character and (character:FindFirstChild("HumanoidRootPart") or character:FindFirstChild("UpperTorso"))
if not rootPart then return end
for _, fruitObj in ipairs(workspace:GetDescendants()) do
if not config.autoPickFruit then break end
local objName = string.lower(fruitObj.Name)
local parentName = fruitObj.Parent and string.lower(fruitObj.Parent.Name) or ""
local grandName = (fruitObj.Parent and fruitObj.Parent.Parent) and string.lower(fruitObj.Parent.Parent.Name) or ""
local fullPath = string.lower(fruitObj:GetFullName())
local isValidHarvestable = (
string.find(objName, "fruit") or string.find(parentName, "fruit") or string.find(grandName, "fruit") or
string.find(objName, "lemon") or string.find(parentName, "lemon") or string.find(grandName, "lemon") or
string.find(objName, "drop") or string.find(parentName, "drop") or
string.find(objName, "tree") or string.find(parentName, "tree")
)
if isValidHarvestable then
-- STRICT PROTECTION FILTER: Ensure it belongs under a Constant/Trees folder path and isn't a shop prop
if not string.find(fullPath, "constant") or not string.find(fullPath, "trees") then
continue
end
-- Skip UI elements/buttons/shop items
if string.find(fullPath, "purchases") or string.find(fullPath, "buttons") or string.find(fullPath, "multiplier") or string.find(fullPath, "billboard") then
continue
end
local targetPos = nil
local triggerInstance = nil
if fruitObj:IsA("ClickDetector") or fruitObj:IsA("ProximityPrompt") then
triggerInstance = fruitObj
if fruitObj.Parent:IsA("BasePart") then
targetPos = fruitObj.Parent.CFrame
end
elseif fruitObj:IsA("BasePart") then
local cd = fruitObj:FindFirstChildOfClass("ClickDetector")
local pp = fruitObj:FindFirstChildOfClass("ProximityPrompt")
if cd or pp then
triggerInstance = cd or pp
targetPos = fruitObj.CFrame
end
end
if targetPos and triggerInstance then
local savedCFrame = rootPart.CFrame
-- Physical TP loop sequence
rootPart.CFrame = targetPos
task.wait(0.08)
if triggerInstance:IsA("ClickDetector") then
fireclickdetector(triggerInstance)
else
fireproximityprompt(triggerInstance)
end
-- FIX: Added verification pause if prompt/object still exists to prevent skipping
if fruitObj.Parent and triggerInstance.Parent then
task.wait(0.06)
end
task.wait(0.08)
rootPart.CFrame = savedCFrame
task.wait(0.1)
end
end
end
end)
task.wait(0.5)
end
end)
else
if activeFruitThread then
task.cancel(activeFruitThread)
activeFruitThread = nil
end
end
end
-- CONFIGURATION HANDLERS
local function handleToggle(configKey, dotElement)
if configKey == "autoBuy" then
local targetState = not config.autoBuy
dotElement.BackgroundColor3 = targetState and Color3.fromRGB(0, 200, 100) or Color3.fromRGB(180, 60, 60)
toggleAutoBuySystem(targetState)
elseif configKey == "autoPickFruit" then
local targetState = not config.autoPickFruit
dotElement.BackgroundColor3 = targetState and Color3.fromRGB(0, 200, 100) or Color3.fromRGB(180, 60, 60)
toggleFruitSystem(targetState)
else
config[configKey] = not config[configKey]
dotElement.BackgroundColor3 = config[configKey] and Color3.fromRGB(0, 200, 100) or Color3.fromRGB(180, 60, 60)
end
end
IncomeClick.MouseButton1Click:Connect(function() handleToggle("autoIncome", IncomeDot) end)
BuyClick.MouseButton1Click:Connect(function() handleToggle("autoBuy", BuyDot) end)
StandClick.MouseButton1Click:Connect(function() handleToggle("upgradeStand", StandDot) end)
DepotClick.MouseButton1Click:Connect(function() handleToggle("upgradeDepot", DepotDot) end)
DashClick.MouseButton1Click:Connect(function() handleToggle("upgradeDash", DashDot) end)
TradingClick.MouseButton1Click:Connect(function() handleToggle("upgradeTrading", TradingDot) end)
LabsClick.MouseButton1Click:Connect(function() handleToggle("upgradeLabs", LabsDot) end)
RoboticsClick.MouseButton1Click:Connect(function() handleToggle("upgradeRobotics", RoboticsDot) end) -- Robotics connection
FruitClick.MouseButton1Click:Connect(function() handleToggle("autoPickFruit", FruitDot) end)