--==================================================================
-- 🍋 LEMON HUB — modern auto-farm for "Sell Lemons"
-- Tabbed UI. RightCtrl hides, — minimizes, ✕ closes.
-- _G.LemonFarm.Destroy() removes it. Re-run after teleport/rejoin.
--==================================================================
if _G.LemonFarm and _G.LemonFarm.Destroy then pcall(_G.LemonFarm.Destroy) end
local Players=game:GetService("Players")
local CollectionService=game:GetService("CollectionService")
local UserInputService=game:GetService("UserInputService")
local TweenService=game:GetService("TweenService")
local RS=game:GetService("ReplicatedStorage")
local VirtualUser=game:GetService("VirtualUser")
local lp=Players.LocalPlayer
local POWERS={"UpgradeStack","BuyNext","Manage","WalkSpeed","ClickFruitValue"}
local function getMyTycoon()
for _,f in ipairs(workspace:GetChildren()) do
if f:IsA("Folder") and f.Name:match("^Tycoon%d+$") then
local o=f:FindFirstChild("Owner")
if o and o:IsA("ObjectValue") and o.Value==lp then return f end
end
end
end
local function rem(myT,name) if myT and myT:FindFirstChild("Remotes") then return myT.Remotes:FindFirstChild(name) end end
local S={upgrade=false,buy=false,drops=false,click=false,rebirth=false,ascend=false,evolve=false,
powers=false,wake=false,offers=false,offline=false,mini=false,antiafk=false,
cUp=0,cBuy=0,cDrop=0,cMini=0}
local ACCENT=Color3.fromRGB(120,220,90)
local ACCENT2=Color3.fromRGB(255,214,60)
local BG=Color3.fromRGB(18,19,24)
local BG2=Color3.fromRGB(26,28,35)
local BG3=Color3.fromRGB(34,37,46)
local TXT=Color3.fromRGB(236,238,243)
local SUB=Color3.fromRGB(150,155,168)
local function corner(p,r) local c=Instance.new("UICorner") c.CornerRadius=UDim.new(0,r) c.Parent=p return c end
local function pad(p,t,b,l,r) local u=Instance.new("UIPadding") u.PaddingTop=UDim.new(0,t) u.PaddingBottom=UDim.new(0,b) u.PaddingLeft=UDim.new(0,l) u.PaddingRight=UDim.new(0,r) u.Parent=p return u end
local function gradient(p,c1,c2,rot) local g=Instance.new("UIGradient") g.Color=ColorSequence.new(c1,c2) g.Rotation=rot or 0 g.Parent=p return g end
local parent=(gethui and gethui()) or game:GetService("CoreGui")
local gui=Instance.new("ScreenGui"); gui.Name="LemonHub"; gui.ResetOnSpawn=false
gui.ZIndexBehavior=Enum.ZIndexBehavior.Sibling; gui.IgnoreGuiInset=true; gui.Parent=parent
local main=Instance.new("Frame"); main.Size=UDim2.fromOffset(500,330); main.Position=UDim2.fromScale(0.5,0.5)
main.AnchorPoint=Vector2.new(0.5,0.5); main.BackgroundColor3=BG; main.BorderSizePixel=0; main.ClipsDescendants=true; main.Parent=gui
corner(main,16)
local mst=Instance.new("UIStroke",main); mst.Color=Color3.fromRGB(60,64,76); mst.Thickness=1; mst.Transparency=0.2
local shadow=Instance.new("ImageLabel"); shadow.BackgroundTransparency=1; shadow.Image="rbxassetid://5554236805"
shadow.ImageColor3=Color3.new(0,0,0); shadow.ImageTransparency=0.45; shadow.ScaleType=Enum.ScaleType.Slice
shadow.SliceCenter=Rect.new(23,23,277,277); shadow.Size=UDim2.new(1,40,1,40); shadow.Position=UDim2.fromOffset(-20,-16)
shadow.ZIndex=0; shadow.Parent=main
local header=Instance.new("Frame"); header.Size=UDim2.new(1,0,0,56); header.BackgroundColor3=BG2; header.BorderSizePixel=0; header.Parent=main
corner(header,16)
local hfix=Instance.new("Frame"); hfix.Size=UDim2.new(1,0,0,16); hfix.Position=UDim2.new(0,0,1,-16); hfix.BackgroundColor3=BG2; hfix.BorderSizePixel=0; hfix.Parent=header
local logo=Instance.new("TextLabel"); logo.Size=UDim2.fromOffset(40,40); logo.Position=UDim2.fromOffset(14,8); logo.BackgroundTransparency=1
logo.Font=Enum.Font.GothamBold; logo.Text="🍋"; logo.TextSize=28; logo.Parent=header
local titleC=Instance.new("TextLabel"); titleC.Size=UDim2.fromOffset(200,22); titleC.Position=UDim2.fromOffset(58,11); titleC.BackgroundTransparency=1
titleC.Font=Enum.Font.GothamBold; titleC.TextSize=19; titleC.TextColor3=TXT; titleC.Text="Lemon Hub"; titleC.TextXAlignment=Enum.TextXAlignment.Left; titleC.Parent=header
gradient(titleC,ACCENT2,ACCENT,0)
local cashL=Instance.new("TextLabel"); cashL.Size=UDim2.fromOffset(280,16); cashL.Position=UDim2.fromOffset(58,32); cashL.BackgroundTransparency=1
cashL.Font=Enum.Font.GothamMedium; cashL.TextSize=12; cashL.TextColor3=SUB; cashL.Text="—"; cashL.TextXAlignment=Enum.TextXAlignment.Left; cashL.Parent=header
local function hbtn(txt,x) local b=Instance.new("TextButton"); b.Size=UDim2.fromOffset(28,28); b.Position=UDim2.new(1,x,0,14)
b.BackgroundColor3=BG3; b.Text=txt; b.TextColor3=TXT; b.Font=Enum.Font.GothamBold; b.TextSize=15; b.AutoButtonColor=true; b.Parent=header; corner(b,8); return b end
local closeB=hbtn("✕",-40); local minB=hbtn("—",-74)
local body=Instance.new("Frame"); body.Size=UDim2.new(1,0,1,-56); body.Position=UDim2.fromOffset(0,56); body.BackgroundTransparency=1; body.Parent=main
local side=Instance.new("Frame"); side.Size=UDim2.new(0,140,1,0); side.BackgroundColor3=BG2; side.BorderSizePixel=0; side.Parent=body
pad(side,12,12,10,10)
local sl=Instance.new("UIListLayout",side); sl.Padding=UDim.new(0,6); sl.SortOrder=Enum.SortOrder.LayoutOrder
local content=Instance.new("Frame"); content.Size=UDim2.new(1,-140,1,0); content.Position=UDim2.fromOffset(140,0); content.BackgroundTransparency=1; content.Parent=body
local tabs={}; local pages={}; local activeTab=nil
local function selectTab(name)
activeTab=name
for n,m in pairs(tabs) do
local on=(n==name)
TweenService:Create(m.btn,TweenInfo.new(0.18),{BackgroundColor3=on and BG3 or BG2}):Play()
m.accent.Visible=on
m.lbl.TextColor3=on and TXT or SUB
end
for n,p in pairs(pages) do p.Visible=(n==name) end
end
local tabOrder=0
local function makeTab(name,icon)
tabOrder+=1
local b=Instance.new("TextButton"); b.Size=UDim2.new(1,0,0,40); b.BackgroundColor3=BG2; b.AutoButtonColor=false
b.Text=""; b.LayoutOrder=tabOrder; b.Parent=side; corner(b,10)
local acc=Instance.new("Frame"); acc.Size=UDim2.fromOffset(3,20); acc.Position=UDim2.fromOffset(0,10)
acc.BackgroundColor3=ACCENT; acc.BorderSizePixel=0; acc.Visible=false; acc.Parent=b; corner(acc,2)
local lbl=Instance.new("TextLabel"); lbl.Size=UDim2.new(1,-16,1,0); lbl.Position=UDim2.fromOffset(14,0)
lbl.BackgroundTransparency=1; lbl.Font=Enum.Font.GothamMedium; lbl.TextSize=13.5; lbl.TextColor3=SUB
lbl.Text=icon.." "..name; lbl.TextXAlignment=Enum.TextXAlignment.Left; lbl.Parent=b
tabs[name]={btn=b,accent=acc,lbl=lbl}
b.MouseEnter:Connect(function() if activeTab~=name then b.BackgroundColor3=BG3 end end)
b.MouseLeave:Connect(function() if activeTab~=name then b.BackgroundColor3=BG2 end end)
b.MouseButton1Click:Connect(function() selectTab(name) end)
local page=Instance.new("ScrollingFrame"); page.Size=UDim2.new(1,0,1,0); page.BackgroundTransparency=1; page.BorderSizePixel=0
page.ScrollBarThickness=3; page.ScrollBarImageColor3=ACCENT; page.CanvasSize=UDim2.new(); page.AutomaticCanvasSize=Enum.AutomaticSize.Y
page.Visible=false; page.Parent=content; pad(page,14,14,16,14)
local pl=Instance.new("UIListLayout",page); pl.Padding=UDim.new(0,9); pl.SortOrder=Enum.SortOrder.LayoutOrder
pages[name]=page
return page
end
local rowOrder=0
local function makeToggle(page,label,desc,key)
rowOrder+=1
local row=Instance.new("Frame"); row.Size=UDim2.new(1,0,0,46); row.BackgroundColor3=BG2; row.BorderSizePixel=0; row.LayoutOrder=rowOrder; row.Parent=page
corner(row,10)
local st=Instance.new("UIStroke",row); st.Color=Color3.fromRGB(46,49,60); st.Thickness=1; st.Transparency=0.4
local t=Instance.new("TextLabel"); t.Size=UDim2.new(1,-70,0,18); t.Position=UDim2.fromOffset(12,6); t.BackgroundTransparency=1
t.Font=Enum.Font.GothamMedium; t.TextSize=13.5; t.TextColor3=TXT; t.Text=label; t.TextXAlignment=Enum.TextXAlignment.Left; t.Parent=row
local d=Instance.new("TextLabel"); d.Size=UDim2.new(1,-70,0,13); d.Position=UDim2.fromOffset(12,25); d.BackgroundTransparency=1
d.Font=Enum.Font.Gotham; d.TextSize=10.5; d.TextColor3=SUB; d.Text=desc; d.TextXAlignment=Enum.TextXAlignment.Left; d.Parent=row
local sw=Instance.new("Frame"); sw.Size=UDim2.fromOffset(44,24); sw.Position=UDim2.new(1,-56,0.5,-12); sw.BackgroundColor3=BG3; sw.BorderSizePixel=0; sw.Parent=row
corner(sw,12)
local knob=Instance.new("Frame"); knob.Size=UDim2.fromOffset(18,18); knob.Position=UDim2.fromOffset(3,3); knob.BackgroundColor3=Color3.fromRGB(245,246,250); knob.BorderSizePixel=0; knob.Parent=sw
corner(knob,9)
local btn=Instance.new("TextButton"); btn.Size=UDim2.fromScale(1,1); btn.BackgroundTransparency=1; btn.Text=""; btn.Parent=row
local function render()
local on=S[key]
TweenService:Create(sw,TweenInfo.new(0.18),{BackgroundColor3=on and ACCENT or BG3}):Play()
TweenService:Create(knob,TweenInfo.new(0.18,Enum.EasingStyle.Back),{Position=on and UDim2.fromOffset(23,3) or UDim2.fromOffset(3,3)}):Play()
TweenService:Create(st,TweenInfo.new(0.18),{Color=on and ACCENT or Color3.fromRGB(46,49,60)}):Play()
end
btn.MouseButton1Click:Connect(function() S[key]=not S[key]; render() end)
render()
end
local function sectionInfo(page,text)
rowOrder+=1
local l=Instance.new("TextLabel"); l.Size=UDim2.new(1,0,0,0); l.AutomaticSize=Enum.AutomaticSize.Y; l.BackgroundTransparency=1
l.Font=Enum.Font.Gotham; l.TextSize=11.5; l.TextColor3=SUB; l.TextWrapped=true; l.RichText=true
l.TextXAlignment=Enum.TextXAlignment.Left; l.Text=text; l.LayoutOrder=rowOrder; l.Parent=page
end
local pFarm=makeTab("Farm","🌱")
makeToggle(pFarm,"Auto Upgrade","Bulk-upgrades all income sources","upgrade")
makeToggle(pFarm,"Auto Buy","Buys unlocked tycoon buttons","buy")
makeToggle(pFarm,"Auto Collect Drops","Instantly grabs cash drops","drops")
makeToggle(pFarm,"Auto Click Fruit","Auto-clicks the lemon trees","click")
local pPrest=makeTab("Prestige","🔼")
makeToggle(pPrest,"Auto Rebirth","Rebirths for investors when able","rebirth")
makeToggle(pPrest,"Auto Ascend","Ascends when progress is full","ascend")
makeToggle(pPrest,"Auto Evolve","Evolves when able","evolve")
makeToggle(pPrest,"Auto Power Upgrade","Levels UpgradeStack / BuyNext / etc","powers")
sectionInfo(pPrest,"⚠ Ascend & Evolve reset your tycoon for permanent multipliers.")
local pBonus=makeTab("Bonus","💎")
makeToggle(pBonus,"Auto Wake Income","Keeps every earner producing","wake")
makeToggle(pBonus,"Auto Phone Offers","Auto-accepts deal calls","offers")
makeToggle(pBonus,"Auto Offline Cash","Claims free 2x offline (no Robux)","offline")
makeToggle(pBonus,"Auto Minigame","Auto-wins LemonDash (5m cooldown)","mini")
local pMisc=makeTab("Misc","⚙️")
makeToggle(pMisc,"Anti-AFK","Never get idle-kicked","antiafk")
local stats=Instance.new("TextLabel"); stats.Size=UDim2.new(1,0,0,0); stats.AutomaticSize=Enum.AutomaticSize.Y; stats.BackgroundTransparency=1
stats.Font=Enum.Font.Code; stats.TextSize=12; stats.TextColor3=ACCENT; stats.TextXAlignment=Enum.TextXAlignment.Left; stats.RichText=true; stats.LayoutOrder=99; stats.Text=""; stats.Parent=pMisc
sectionInfo(pMisc,"RightCtrl hides the menu • drag the header to move")
selectTab("Farm")
do local drag,sp,si
header.InputBegan:Connect(function(i) if i.UserInputType==Enum.UserInputType.MouseButton1 or i.UserInputType==Enum.UserInputType.Touch then
drag=true; sp=main.Position; si=i.Position
i.Changed:Connect(function() if i.UserInputState==Enum.UserInputState.End then drag=false end end) end end)
UserInputService.InputChanged:Connect(function(i) if drag and (i.UserInputType==Enum.UserInputType.MouseMovement or i.UserInputType==Enum.UserInputType.Touch) then
local dd=i.Position-si; main.Position=UDim2.new(sp.X.Scale,sp.X.Offset+dd.X,sp.Y.Scale,sp.Y.Offset+dd.Y) end end)
end
local mini=false
minB.MouseButton1Click:Connect(function() mini=not mini
TweenService:Create(main,TweenInfo.new(0.2,Enum.EasingStyle.Quad),{Size=mini and UDim2.fromOffset(500,56) or UDim2.fromOffset(500,330)}):Play()
body.Visible=not mini end)
UserInputService.InputBegan:Connect(function(i,gpe) if gpe then return end
if i.KeyCode==Enum.KeyCode.RightControl then main.Visible=not main.Visible end end)
local alive=true
local function loop(iv,fn) task.spawn(function() while alive do pcall(fn) task.wait(iv) end end) end
loop(0.25,function() if not S.upgrade then return end local myT=getMyTycoon() if not myT then return end
for _,e in ipairs(CollectionService:GetTagged("Tycoon.Earner")) do if not S.upgrade then break end
if e:IsDescendantOf(myT) then local r=e:FindFirstChild("Upgrade")
if r and r:IsA("RemoteFunction") then local n=1
while alive and S.upgrade and n<=1e6 do if pcall(function() return r:InvokeServer(n) end) then S.cUp+=n; n*=2 else break end end end end end end)
loop(0.35,function() if not S.buy then return end local myT=getMyTycoon() if not myT then return end
for _,p in ipairs(CollectionService:GetTagged("Tycoon.Purchase")) do if not S.buy then break end
if p:IsDescendantOf(myT) and p:GetAttribute("Enabled") and p:GetAttribute("Shown") and not p:GetAttribute("Purchased") then
local r=p:FindFirstChild("Purchase") if r and r:IsA("RemoteFunction") then pcall(function() r:InvokeServer(false) end)
if p:GetAttribute("Purchased") then S.cBuy+=1 end end end end end)
task.spawn(function() local nv=RS.Core.RemoteSignal:FindFirstChild("CashDropService.New") local rd=RS.Core.RemoteRequest:FindFirstChild("CashDropService.Redeem")
if nv and rd then nv.OnClientEvent:Connect(function(id) if S.drops and id~=nil then task.spawn(function() if pcall(function() return rd:InvokeServer(id) end) then S.cDrop+=1 end end) end end) end end)
loop(0.2,function() if not (S.click and fireclickdetector) then return end local myT=getMyTycoon() if not myT then return end
for _,d in ipairs(myT:GetDescendants()) do if not S.click then break end if d:IsA("ClickDetector") then pcall(fireclickdetector,d) end end end)
loop(10,function() if not S.rebirth then return end local r=rem(getMyTycoon(),"Rebirth") if r then pcall(function() r:InvokeServer() end) end end)
loop(8,function() if not S.ascend then return end local r=rem(getMyTycoon(),"Ascend") if r then pcall(function() r:InvokeServer() end) end end)
loop(8,function() if not S.evolve then return end local r=rem(getMyTycoon(),"Evolve") if r then pcall(function() r:InvokeServer() end) end end)
loop(0.5,function() if not S.powers then return end local r=rem(getMyTycoon(),"UpgradePowerLevel") if not r then return end
for _,n in ipairs(POWERS) do if not S.powers then break end pcall(function() r:InvokeServer(n) end) end end)
loop(8,function() if not S.wake then return end local myT=getMyTycoon() local r=rem(myT,"WakeIncomeStream") if not r then return end
for _,e in ipairs(CollectionService:GetTagged("Tycoon.Earner")) do if e:IsDescendantOf(myT) then pcall(function() r:InvokeServer(e.Name) end) end end end)
task.spawn(function() while alive do local myT=getMyTycoon() local ev=myT and rem(myT,"PhoneOffer")
if ev and ev:IsA("RemoteEvent") and not ev:GetAttribute("_LH") then ev:SetAttribute("_LH",true)
ev.OnClientEvent:Connect(function(v) if S.offers and type(v)=="number" then pcall(function() ev:FireServer("Accept") end) end end) end task.wait(2) end end)
loop(20,function() if not S.offline then return end local r=rem(getMyTycoon(),"DoubleOfflineCash") if r then pcall(function() r:InvokeServer() end) end end)
loop(5,function() if not S.mini then return end local sr=RS.Core.RemoteRequest:FindFirstChild("MinigameRaceService.Start") local er=RS.Core.RemoteRequest:FindFirstChild("MinigameRaceService.End")
if not (sr and er) then return end local ok,res=pcall(function() return sr:InvokeServer() end)
if ok and res then task.wait(0.25) pcall(function() er:InvokeServer(1) end) S.cMini+=1 end end)
lp.Idled:Connect(function() if S.antiafk then pcall(function() VirtualUser:CaptureController() VirtualUser:ClickButton2(Vector2.new()) end) end end)
loop(0.4,function()
local myT=getMyTycoon()
local cash=lp:FindFirstChild("leaderstats") and lp.leaderstats:FindFirstChild("Cash") and lp.leaderstats.Cash.Value or "?"
cashL.Text="💰 "..tostring(cash).." • "..(myT and myT.Name or "?")
stats.Text=string.format("Upgrades %d\nBuys %d\nDrops %d\nRaces %d",S.cUp,S.cBuy,S.cDrop,S.cMini)
end)
closeB.MouseButton1Click:Connect(function() if _G.LemonFarm then _G.LemonFarm.Destroy() end end)
_G.LemonFarm={Destroy=function() alive=false for k in pairs(S) do if type(S[k])=="boolean" then S[k]=false end end if gui then gui:Destroy() end end}
print("[🍋 Lemon Hub] Loaded — modern UI. RightCtrl hides, ✕ closes.")