Run it
Copy the script and paste it into your executor.
Players = :()
ReplicatedStorage = :()
UserInputService = :()
CoreGui = :()
StarterGui = :()
TweenService = :()
LocalPlayer = Players.LocalPlayer
PlantRemote = ReplicatedStorage.RemoteEvents:()
PurchaseShopItemRemote = ReplicatedStorage.RemoteEvents:()
GetShopDataRemote = ReplicatedStorage.RemoteEvents:()
ClaimQuestRemote = ReplicatedStorage.RemoteEvents:()
RequestQuestsRemote = ReplicatedStorage.RemoteEvents:()
UpdateQuestsRemote = ReplicatedStorage.RemoteEvents:()
SellItemsRemote = ReplicatedStorage.RemoteEvents:()
ItemInventory =
(()
ItemInventory = (ReplicatedStorage:():())
)
SeedShopData =
(()
SeedShopData = (ReplicatedStorage:():():())
)
GearShopData =
(()
GearShopData = (ReplicatedStorage:():():())
)
Settings = {
Enabled = ,
AutoHarvestTeleport = ,
IgnoreFavorited = ,
AutoPlantAtCharacter = ,
AutoEquipPlantSeeds = ,
SavedPlantPosition = ,
SelectedSeed = ,
TeleportToShopOnBuy = ,
CheckSeedStockBeforeBuy = ,
AutoBuyLoop = ,
AutoBuyDelay = ,
SeedShopNpcPosition = .(, , ),
SelectedGear = ,
TeleportToGearShopOnBuy = ,
CheckGearStockBeforeBuy = ,
AutoBuyGearLoop = ,
AutoBuyGearDelay = ,
GearShopNpcPosition = .(, , ),
AutoSellLoop = ,
AutoSellDelay = ,
AutoSellOnlyWhenInventoryFull = ,
InventoryFullSellCooldown = ,
SellMode = ,
TeleportToSellNpcOnSell = ,
SellNpcPosition = .(, , ),
AutoClaimQuests = ,
AutoClaimQuestDelay = ,
Range = ,
HarvestBatchSize = ,
Delay = ,
}
lastPlantTime =
lastHarvestTeleportTime =
lastAutoBuyTime =
lastAutoBuyGearTime =
lastAutoSellTime =
lastInventoryFullSellTime =
lastAutoClaimQuestTime =
warnedMissingSavedPosition =
warnedMissingQuestRemotes =
warnedMissingSellRemotes =
harvestCooldownByPrompt = {}
harvestFailCountByPrompt = {}
harvestBlacklistUntilByPrompt = {}
HARVEST_PROMPT_SCAN_INTERVAL =
harvestPromptScanCache = {}
harvestPromptScanCacheAt =
latestQuestData =
INVENTORY_FULL_TEXT =
UpdateQuestsRemote UpdateQuestsRemote:()
UpdateQuestsRemote.OnClientEvent:((data)
(data) ==
latestQuestData = data
)
(text, duration)
(()
StarterGui:(, {
Title = ,
Text = text,
Duration = duration
})
)
()
ui = { Tabs = {} }
oldGui = CoreGui:()
oldGui oldGui:()
sg = .()
sg.Name =
sg.ResetOnSpawn =
(() sg.Parent = CoreGui )
sg.Parent sg.Parent = LocalPlayer:()
(guiObject)
dragging, dragInput, dragStart, startPos
guiObject.InputBegan:((input)
input.UserInputType == .UserInputType.MouseButton1 input.UserInputType == .UserInputType.Touch
dragging =
dragStart = input.Position
startPos = guiObject.Position
)
guiObject.InputChanged:((input)
input.UserInputType == .UserInputType.MouseMovement input.UserInputType == .UserInputType.Touch
dragInput = input
)
UserInputService.InputChanged:((input)
input == dragInput dragging
delta = input.Position - dragStart
guiObject.Position = .(
startPos.X.Scale, startPos.X.Offset + delta.X,
startPos.Y.Scale, startPos.Y.Offset + delta.Y
)
)
UserInputService.InputEnded:((input)
input.UserInputType == .UserInputType.MouseButton1 input.UserInputType == .UserInputType.Touch
dragging =
)
main = .(, sg)
main.AnchorPoint = .(, )
main.Size = .(, , , )
main.Position = .(, , , )
main.BackgroundColor3 = .(, , )
main.BackgroundTransparency =
main.BorderSizePixel =
main.Active =
main.ClipsDescendants =
.(, main).CornerRadius = .(, )
(main)
bgImage = .(, main)
bgImage.Name =
bgImage.Size = .(, , , )
bgImage.Position = .(, , , )
bgImage.BackgroundTransparency =
bgImage.BackgroundColor3 = .(, , )
bgImage.Image =
bgImage.ScaleType = .ScaleType.Crop
bgImage.ZIndex =
.(, bgImage).CornerRadius = .(, )
topBar = .(, main)
topBar.Size = .(, , , )
topBar.BackgroundColor3 = .(, , )
topBar.BackgroundTransparency =
topBar.BorderSizePixel =
topBar.ZIndex =
.(, topBar).CornerRadius = .(, )
cover = .(, main)
cover.Size = .(, , , )
cover.Position = .(, , , )
cover.BackgroundColor3 = .(, , )
cover.BackgroundTransparency =
cover.BorderSizePixel =
cover.ZIndex =
tabContainer = .(, topBar)
tabContainer.Size = .(, -, , )
tabContainer.BackgroundTransparency =
tabContainer.ZIndex =
tabLayout = .(, tabContainer)
tabLayout.FillDirection = .FillDirection.Horizontal
tabLayout.SortOrder = .SortOrder.LayoutOrder
tabLayout.Padding = .(, )
tabLayout.VerticalAlignment = .VerticalAlignment.Center
topPad = .(, tabContainer)
topPad.PaddingLeft = .(, )
contentContainer = .(, main)
contentContainer.Size = .(, , , -)
contentContainer.Position = .(, , , )
contentContainer.BackgroundTransparency =
contentContainer.ClipsDescendants =
contentContainer.ZIndex =
colorText = .(, , )
colorPanelBg = .(, , )
colorActive = .(, , )
colorInactive = .(, , )
toggleUIBtn = .(, sg)
toggleUIBtn.AnchorPoint = .(, )
toggleUIBtn.Size = .(, , , )
toggleUIBtn.Position = .(, , , )
toggleUIBtn.BackgroundTransparency =
toggleUIBtn.Image =
toggleUIBtn.ScaleType = .ScaleType.Fit
toggleUIBtn.Visible =
(toggleUIBtn)
minimizeBtn = .(, topBar)
minimizeBtn.Size = .(, , , )
minimizeBtn.Position = .(, -, , -)
minimizeBtn.BackgroundColor3 = .(, , )
minimizeBtn.Text =
minimizeBtn.Font = .Font.GothamBold
minimizeBtn.TextColor3 = .(, , )
minimizeBtn.TextSize =
minimizeBtn.ZIndex =
.(, minimizeBtn).CornerRadius = .(, )
isUIOpen =
()
isUIOpen = isUIOpen
isUIOpen
TweenService:(toggleUIBtn, TweenInfo.(, .EasingStyle.Back, .EasingDirection.In), {Size = .(, , , )}):()
.(, () toggleUIBtn.Visible = )
main.Visible =
main.Size = .(, , , )
TweenService:(main, TweenInfo.(, .EasingStyle.Back, .EasingDirection.Out), {Size = .(, , , )}):()
TweenService:(main, TweenInfo.(, .EasingStyle.Back, .EasingDirection.In), {Size = .(, , , )}):()
.(, ()
isUIOpen
main.Visible =
toggleUIBtn.Visible =
toggleUIBtn.Size = .(, , , )
TweenService:(toggleUIBtn, TweenInfo.(, .EasingStyle.Back, .EasingDirection.Out), {Size = .(, , , )}):()
)
minimizeBtn.MouseButton1Click:(ToggleUI)
toggleUIBtn.MouseButton1Click:(ToggleUI)
UserInputService.InputBegan:((input, gameProcessed)
gameProcessed input.KeyCode == .KeyCode.RightShift ()
)
activePage =
ui:(name)
tabBtn = .(, tabContainer)
tabBtn.Size = .(, , , )
tabBtn.BackgroundColor3 = colorActive
tabBtn.Text = name
tabBtn.Font = .Font.GothamBold
tabBtn.TextColor3 = .(, , )
tabBtn.TextSize =
tabBtn.ZIndex =
.(, tabBtn).CornerRadius = .(, )
page = .(, contentContainer)
page.Size = .(, , , )
page.Position = .(, , , )
page.BackgroundTransparency =
page.Visible =
page.ScrollBarThickness =
page.ScrollBarImageColor3 = colorActive
page.AutomaticCanvasSize = .AutomaticSize.Y
page.CanvasSize = .(, , , )
page.ZIndex =
list = .(, page)
list.SortOrder = .SortOrder.LayoutOrder
list.Padding = .(, )
pad = .(, page)
pad.PaddingTop = .(, )
pad.PaddingLeft = .(, )
pad.PaddingRight = .(, )
pad.PaddingBottom = .(, )
tabBtn.MouseButton1Click:(()
activePage == page
_, t (ui.Tabs)
t.Button.BackgroundColor3 = .(, , )
t.Button.TextColor3 = colorText
tabBtn.BackgroundColor3 = colorActive
tabBtn.TextColor3 = .(, , )
activePage
oldPage = activePage
TweenService:(oldPage, TweenInfo.(, .EasingStyle.Quart, .EasingDirection.Out), {Position = .(-, , , )}):()
.(, () activePage ~= oldPage oldPage.Visible = )
page.Visible =
page.Position = .(, , , )
TweenService:(page, TweenInfo.(, .EasingStyle.Quart, .EasingDirection.Out), {Position = .(, , , )}):()
activePage = page
)
.(ui.Tabs, {Button = tabBtn, Page = page})
#ui.Tabs ==
page.Visible =
page.Position = .(, , , )
activePage = page
tabBtn.BackgroundColor3 = colorActive
tabBtn.TextColor3 = .(, , )
tabBtn.BackgroundColor3 = .(, , )
tabBtn.TextColor3 = colorText
tabObj = {}
tabObj:(text)
lbl = .(, page)
lbl.Size = .(, , , )
lbl.BackgroundTransparency =
lbl.Text = text
lbl.TextColor3 = .(, , )
lbl.Font = .Font.GothamBold
lbl.TextSize =
lbl.TextXAlignment = .TextXAlignment.Left
lbl.ZIndex =
lbl
tabObj:(text, default, callback)
container = .(, page)
container.Size = .(, , , )
container.BackgroundColor3 = colorPanelBg
container.BackgroundTransparency =
container.ZIndex =
.(, container).CornerRadius = .(, )
lbl = .(, container)
lbl.Size = .(, -, , )
lbl.Position = .(, , , )
lbl.BackgroundTransparency =
lbl.Text = text
lbl.TextColor3 = colorText
lbl.Font = .Font.GothamBold
lbl.TextSize =
lbl.TextXAlignment = .TextXAlignment.Left
lbl.ZIndex =
btn = .(, container)
btn.Size = .(, , , )
btn.Position = .(, -, , -)
btn.BackgroundColor3 = default colorActive colorInactive
btn.Text =
btn.ZIndex =
.(, btn).CornerRadius = .(, )
circle = .(, btn)
circle.Size = .(, , , )
circle.Position = default .(, -, , ) .(, , , )
circle.BackgroundColor3 = .(, , )
circle.ZIndex =
.(, circle).CornerRadius = .(, )
state = default
btn.MouseButton1Click:(()
state = state
TweenService:(btn, TweenInfo.(), {BackgroundColor3 = state colorActive colorInactive}):()
TweenService:(circle, TweenInfo.(, .EasingStyle.Quart, .EasingDirection.Out), {Position = state .(, -, , ) .(, , , )}):()
(state)
)
(state)
tabObj:(text, callback)
btn = .(, page)
btn.Size = .(, , , )
btn.BackgroundColor3 = colorActive
btn.Text = text
btn.TextColor3 = .(, , )
btn.Font = .Font.GothamBold
btn.TextSize =
btn.ZIndex =
.(, btn).CornerRadius = .(, )
btn.MouseButton1Click:(callback)
tabObj:(text, min, max, default, callback)
container = .(, page)
container.Size = .(, , , )
container.BackgroundColor3 = colorPanelBg
container.BackgroundTransparency =
container.ZIndex =
.(, container).CornerRadius = .(, )
lbl = .(, container)
lbl.Size = .(, -, , )
lbl.Position = .(, , , )
lbl.BackgroundTransparency =
lbl.Text = text .. .. (default)
lbl.TextColor3 = colorText
lbl.Font = .Font.GothamBold
lbl.TextSize =
lbl.TextXAlignment = .TextXAlignment.Left
lbl.ZIndex =
bar = .(, container)
bar.Size = .(, -, , )
bar.Position = .(, , , )
bar.BackgroundColor3 = colorInactive
bar.Text =
bar.AutoButtonColor =
bar.ZIndex =
.(, bar).CornerRadius = .(, )
fill = .(, bar)
fill.Size = .(.((default - min) / (max - min), , ), , , )
fill.BackgroundColor3 = colorActive
fill.ZIndex =
.(, fill).CornerRadius = .(, )
dragging =
(input)
pos = .((input.Position.X - bar.AbsolutePosition.X) / bar.AbsoluteSize.X, , )
fill.Size = .(pos, , , )
val = min + pos * (max - min)
val = .(val * ) /
lbl.Text = text .. .. (val)
(val)
bar.InputBegan:((input)
input.UserInputType == .UserInputType.MouseButton1
dragging = ; (input)
)
UserInputService.InputEnded:((input)
input.UserInputType == .UserInputType.MouseButton1 dragging =
)
UserInputService.InputChanged:((input)
dragging input.UserInputType == .UserInputType.MouseMovement (input)
)
(default)
tabObj:(text, options, multi, callback)
container = .(, page)
container.Size = .(, , , )
container.BackgroundColor3 = colorPanelBg
container.BackgroundTransparency =
container.ClipsDescendants =
container.ZIndex =
.(, container).CornerRadius = .(, )
btn = .(, container)
btn.Size = .(, , , )
btn.BackgroundTransparency =
btn.Text = .. text ..
btn.TextColor3 = colorText
btn.Font = .Font.GothamBold
btn.TextSize =
btn.TextXAlignment = .TextXAlignment.Left
btn.ZIndex =
list = .(, container)
list.SortOrder = .SortOrder.LayoutOrder
open =
selected = multi {}
optionBtns = {}
btn.MouseButton1Click:(()
open = open
newHeight = open ( + (#options * ))
TweenService:(container, TweenInfo.(, .EasingStyle.Quart, .EasingDirection.Out), {Size = .(, , , newHeight)}):()
)
_, opt (options)
optBtn = .(, container)
optBtn.Size = .(, , , )
optBtn.BackgroundColor3 = colorPanelBg
optBtn.BackgroundTransparency =
optBtn.Text = .. opt
optBtn.TextColor3 = colorText
optBtn.Font = .Font.Gotham
optBtn.TextSize =
optBtn.TextXAlignment = .TextXAlignment.Left
optBtn.BorderSizePixel =
optBtn.ZIndex =
optBtn.MouseButton1Click:(()
multi
selected[opt]
selected[opt] =
optBtn.TextColor3 = colorText
optBtn.Font = .Font.Gotham
selected[opt] =
optBtn.TextColor3 = colorActive
optBtn.Font = .Font.GothamBold
(selected)
selected = opt
_, b (optionBtns)
b.TextColor3 = colorText
b.Font = .Font.Gotham
optBtn.TextColor3 = colorActive
optBtn.Font = .Font.GothamBold
btn.Text = .. text .. .. options[]
open =
TweenService:(container, TweenInfo.(, .EasingStyle.Quart, .EasingDirection.Out), {Size = .(, , , )}):()
(selected)
)
.(optionBtns, optBtn)
multi #options >
selected = options[]
optionBtns[].TextColor3 = colorActive
optionBtns[].Font = .Font.GothamBold
btn.Text = .. text .. .. options[]
(selected)
multi
(selected)
tabObj
ui, sg
seedOptions = {}
seedPriceByName = {}
SeedShopData SeedShopData.ShopData
seedEntries = {}
_, shopEntry (SeedShopData.ShopData)
(shopEntry) == (shopEntry.Name) ==
shopEntry.DisplayInShop ~=
.(seedEntries, { Name = shopEntry.Name, Price = (shopEntry.Price) .huge })
seedPriceByName[shopEntry.Name] = (shopEntry.Price)
.(seedEntries, (a, b)
a.Price == b.Price a.Name < b.Name
a.Price < b.Price
)
_, entry (seedEntries) .(seedOptions, entry.Name)
#seedOptions == seedOptions = {}
Settings.SelectedSeed = seedOptions[]
selectedAutoPlantSeedsMap = {}
autoPlantEquipCycleIndex =
selectedBuySeedsMap = {}
buySeedCycleIndex =
(selection, valueMap)
(selection) ==
labels = {}
label, isSelected (selection)
isSelected .(labels, label)
.(labels)
firstLabel = labels[]
firstLabel
valueMap valueMap[firstLabel] firstLabel
firstLabel
valueMap valueMap[selection] selection
selection
gearOptions = {}
gearPriceByName = {}
GearShopData GearShopData.ShopData
gearEntries = {}
_, shopEntry (GearShopData.ShopData)
(shopEntry) == (shopEntry.Name) ==
shopEntry.DisplayInShop ~=
.(gearEntries, { Name = shopEntry.Name, Price = (shopEntry.Price) .huge })
gearPriceByName[shopEntry.Name] = (shopEntry.Price)
.(gearEntries, (a, b)
a.Price == b.Price a.Name < b.Name
a.Price < b.Price
)
_, entry (gearEntries) .(gearOptions, entry.Name)
#gearOptions == gearOptions = {}
Settings.SelectedGear = gearOptions[]
selectedBuyGearsMap = {}
buyGearCycleIndex =
UI = ()
MainTab = UI:()
ShopTab = UI:()
MainTab:()
MainTab:(, , (value) Settings.Enabled = value )
MainTab:(, , (value) Settings.IgnoreFavorited = value )
MainTab:(, , (value) Settings.AutoHarvestTeleport = value )
MainTab:(, , , Settings.Delay, (value) Settings.Delay = value )
MainTab:(, , (value)
Settings.AutoClaimQuests = value
value RequestQuestsRemote RequestQuestsRemote:() (() RequestQuestsRemote:() )
)
MainTab:()
MainTab:(, , (value)
value Settings.SavedPlantPosition
Settings.AutoPlantAtCharacter =
(, )
Settings.AutoPlantAtCharacter = value
warnedMissingSavedPosition =
)
MainTab:(, , (value) Settings.AutoEquipPlantSeeds = value )
MainTab:(, seedOptions, , (value)
selectedAutoPlantSeedsMap = {}
(value) ==
seedName, isSelected (value)
isSelected selectedAutoPlantSeedsMap[(seedName)] =
autoPlantEquipCycleIndex =
)
SavedPositionLabel = MainTab:()
MainTab:(, ()
char = LocalPlayer.Character
char SavedPositionLabel.Text = ;
root = char:() char.PrimaryPart
root SavedPositionLabel.Text = ;
Settings.SavedPlantPosition = root.Position
warnedMissingSavedPosition =
SavedPositionLabel.Text = .(, root.Position.X, root.Position.Y, root.Position.Z)
)
ShopTab:()
ShopTab:(, seedOptions, , (value)
selectedBuySeedsMap = {}
(value) ==
key, isSelected (value)
(key) == selectedBuySeedsMap[(isSelected)] =
isSelected selectedBuySeedsMap[(key)] =
(value) == value ~=
selectedBuySeedsMap[value] =
selected = (value, )
selected Settings.SelectedSeed = (selected)
buySeedCycleIndex =
)
ShopTab:(, ()
playerGui = LocalPlayer:()
playerGui playerGui:() playerGui.SeedShop.Enabled =
)
ShopTab:(, , (value) Settings.TeleportToShopOnBuy = value )
ShopTab:(, Settings.CheckSeedStockBeforeBuy, (value) Settings.CheckSeedStockBeforeBuy = value )
ShopTab:(, , (value) Settings.AutoBuyLoop = value )
ShopTab:(, , , Settings.AutoBuyDelay, (value) Settings.AutoBuyDelay = value )
ShopTab:()
ShopTab:(, gearOptions, , (value)
selectedBuyGearsMap = {}
(value) ==
key, isSelected (value)
(key) == selectedBuyGearsMap[(isSelected)] =
isSelected selectedBuyGearsMap[(key)] =
(value) == value ~=
selectedBuyGearsMap[value] =
selected = (value, )
selected Settings.SelectedGear = (selected)
buyGearCycleIndex =
)
ShopTab:(, ()
playerGui = LocalPlayer:()
playerGui playerGui:() playerGui.GearShop.Enabled =
)
ShopTab:(, , (value) Settings.TeleportToGearShopOnBuy = value )
ShopTab:(, Settings.CheckGearStockBeforeBuy, (value) Settings.CheckGearStockBeforeBuy = value )
ShopTab:(, , (value) Settings.AutoBuyGearLoop = value )
ShopTab:(, , , Settings.AutoBuyGearDelay, (value) Settings.AutoBuyGearDelay = value )
ShopTab:()
ShopTab:(, {, , }, , (value)
selected = (value, )
selected ==
Settings.SellMode = ; Settings.AutoSellOnlyWhenInventoryFull =
selected ==
Settings.SellMode = ; Settings.AutoSellOnlyWhenInventoryFull =
selected ==
Settings.SellMode = ; Settings.AutoSellOnlyWhenInventoryFull =
)
ShopTab:(, , (value) Settings.TeleportToSellNpcOnSell = value )
ShopTab:(, , (value) Settings.AutoSellLoop = value )
ShopTab:(, , , Settings.AutoSellDelay, (value) Settings.AutoSellDelay = value )
ShopTab:(, () () )
ShopTab:(, () () )
ShopTab:(, () (Settings.SellMode, ) )
()
char = LocalPlayer.Character
char
char:() char.PrimaryPart
(rootPos, targetPos, horizontalDist, maxYDiff)
dx = rootPos.X - targetPos.X
dz = rootPos.Z - targetPos.Z
horizontal = .(dx * dx + dz * dz)
yDiff = .(rootPos.Y - targetPos.Y)
horizontal <= horizontalDist yDiff <= maxYDiff
(root, targetPos, timeoutSec, horizontalDist, maxYDiff, stableFramesRequired)
timeout = timeoutSec
nearHorizontal = horizontalDist
nearY = maxYDiff
stableFrames = stableFramesRequired
started = ()
stableCount =
() - started < timeout
root.CFrame = .(targetPos + .(, , ))
.()
currentRoot = ()
currentRoot
root = currentRoot
(root.Position, targetPos, nearHorizontal, nearY)
stableCount = stableCount +
stableCount >= stableFrames
_ = ,
root.CFrame = .(targetPos + .(, , ))
.()
stableCount =
(root.Position, targetPos, nearHorizontal, nearY)
(mode, silent)
SellItemsRemote
silent (, )
sellMode = mode
sellMode == sellMode =
sellMode ~= sellMode ~=
sellMode = Settings.SellMode ==
originalPos =
didTeleport =
root = ()
Settings.TeleportToSellNpcOnSell
root
silent (, )
npcPos = Settings.SellNpcPosition
npcPos
originalPos = root.Position
reached = (root, npcPos, , , , )
reached
silent (, )
didTeleport =
.()
ok, result = (()
SellItemsRemote:() SellItemsRemote:(sellMode)
SellItemsRemote:(sellMode)
)
didTeleport originalPos
backRoot = ()
backRoot backRoot.CFrame = .(originalPos)
ok
silent (, )
response = (result )
responseLower = .(response)
sold = result == .(responseLower, , , ) ~= .(responseLower, , , ) ~=
sold
silent
response ~= response ~= (response, )
(, )
(text)
(text) ~=
normalized = .(text, , )
normalized = .(normalized, , )
normalized == INVENTORY_FULL_TEXT
.(normalized, , #INVENTORY_FULL_TEXT) ~= INVENTORY_FULL_TEXT
suffix = .(normalized, #INVENTORY_FULL_TEXT + )
suffix = .(suffix, , )
suffix ==
.(suffix, )
.(suffix, )
()
playerGui = LocalPlayer:()
playerGui
notification = playerGui:()
notification
frame = notification:()
frame
frameChildren = frame:()
slot = frameChildren[]
slot
content = slot:()
shadow = content content:()
shadow shadow:() (shadow.Text)
_, node (frame:())
node:() (node.Text)
(seedName)
GetShopDataRemote ,
ok, data = (() GetShopDataRemote:() )
ok (data) ~= (data.Items) ~= ,
itemName, itemData (data.Items)
(itemName):() == (seedName):()
(itemData) == (itemData.Amount) ,
,
,
()
stats = LocalPlayer:()
(container, name)
container
valueObj = container:(name)
valueObj (valueObj:() valueObj:()) (valueObj.Value)
amount = (stats, )
amount ~= amount
amount = (LocalPlayer, )
amount ~= amount
stats
numericValues = {}
_, child (stats:())
child:() child:() .(numericValues, child)
#numericValues ==
val = (numericValues[].Value)
val ~= val
(price)
numericPrice = (price)
numericPrice numericPrice <=
shillings = ()
shillings ==
shillings >= numericPrice
(silent, forcedSeedName)
seedName = forcedSeedName Settings.SelectedSeed
PurchaseShopItemRemote
silent (, )
seedName
silent (, )
Settings.CheckSeedStockBeforeBuy
stockAmount, stockErr = (seedName)
stockAmount ==
silent (stockErr , )
stockAmount <=
silent (seedName .. , )
seedPrice = seedPriceByName[seedName]
(seedPrice)
silent ( .. seedName .. , )
originalPos =
didTeleport =
root = ()
Settings.TeleportToShopOnBuy
root
silent (, )
npcPos = Settings.SeedShopNpcPosition
npcPos
originalPos = root.Position
reached = (root, npcPos, , , , )
reached
silent (, )
didTeleport =
.()
ok, result, reason = (() PurchaseShopItemRemote:(, seedName) )
ok
silent (, )
reasonText = .((reason ))
outOfStock = .(reasonText, , , ) ~= .(reasonText, , , ) ~=
result
didTeleport originalPos
backRoot = ()
backRoot backRoot.CFrame = .(originalPos)
silent ( .. seedName, )
outOfStock didTeleport originalPos
backRoot = ()
backRoot backRoot.CFrame = .(originalPos)
silent ( .. (reason ), )
()
selectedSeedList = {}
_, seedName (seedOptions)
selectedBuySeedsMap[seedName] .(selectedSeedList, seedName)
#selectedSeedList == Settings.SelectedSeed .(selectedSeedList, Settings.SelectedSeed)
selectedSeedList
(silent)
selectedSeedList = ()
#selectedSeedList ==
silent (, )
buySeedCycleIndex < buySeedCycleIndex > #selectedSeedList buySeedCycleIndex =
startIndex = buySeedCycleIndex
offset = , #selectedSeedList -
idx = ((startIndex - + offset) % #selectedSeedList) +
seedName = selectedSeedList[idx]
(silent, seedName)
buySeedCycleIndex = (idx % #selectedSeedList) +
buySeedCycleIndex = (startIndex % #selectedSeedList) +
(gearName)
GetShopDataRemote ,
ok, data = (() GetShopDataRemote:() )
ok (data) ~= (data.Items) ~= ,
itemName, itemData (data.Items)
(itemName):() == (gearName):()
(itemData) == (itemData.Amount) ,
,
,
(silent, forcedGearName)
gearName = forcedGearName Settings.SelectedGear
PurchaseShopItemRemote
silent (, )
gearName
silent (, )
Settings.CheckGearStockBeforeBuy
stockAmount, stockErr = (gearName)
stockAmount ==
silent (stockErr , )
stockAmount <=
silent (gearName .. , )
gearPrice = gearPriceByName[gearName]
(gearPrice)
silent ( .. gearName .. , )
originalPos =
didTeleport =
root = ()
Settings.TeleportToGearShopOnBuy
root
npcPos = Settings.GearShopNpcPosition
npcPos
originalPos = root.Position
reached = (root, npcPos, , , , )
reached
didTeleport =
.()
ok, result, reason = (() PurchaseShopItemRemote:(, gearName) )
ok
result
didTeleport originalPos
backRoot = ()
backRoot backRoot.CFrame = .(originalPos)
silent ( .. gearName, )
reasonText = .((reason ))
outOfStock = .(reasonText, , , ) ~= .(reasonText, , , ) ~=
outOfStock didTeleport originalPos
backRoot = ()
backRoot backRoot.CFrame = .(originalPos)
silent ( .. (reason ), )
()
selectedGearList = {}
_, gearName (gearOptions)
selectedBuyGearsMap[gearName] .(selectedGearList, gearName)
#selectedGearList == Settings.SelectedGear .(selectedGearList, Settings.SelectedGear)
selectedGearList
(silent)
selectedGearList = ()
#selectedGearList ==
buyGearCycleIndex < buyGearCycleIndex > #selectedGearList buyGearCycleIndex =
startIndex = buyGearCycleIndex
offset = , #selectedGearList -
idx = ((startIndex - + offset) % #selectedGearList) +
gearName = selectedGearList[idx]
(silent, gearName)
buyGearCycleIndex = (idx % #selectedGearList) +
buyGearCycleIndex = (startIndex % #selectedGearList) +
(prompt)
prompt prompt.Parent
prompt.Parent:() prompt.Parent.WorldPosition
prompt.Parent:() prompt.Parent.Position
(promptObj)
promptObj promptObj.Parent
node = promptObj.Parent
node:() node = node.Parent
node node:() node = node.Parent
node node ~= node:() node = node.Parent
node node:() node
(model)
node = model
node node ~=
node:() node:() ~= node
node = node.Parent
(promptObj)
node = promptObj
node node ~=
node.Name == node.Name ==
parentNode = node.Parent
parentNode parentNode ~=
parentNode.Name ==
parentNode = parentNode.Parent
node = node.Parent
()
clientPlants = :()
clientPlants
harvestPromptScanCache = {}
harvestPromptScanCacheAt = ()
entries = {}
_, d (clientPlants:())
d:() d.Parent d.Enabled ( (d))
model = (d)
ownerUserId =
isFavorited =
model
ownerModel = (model)
ownerModel
ownerAttr = ownerModel:()
ownerUserId = (ownerAttr) ownerAttr
isFavorited = ownerModel:() ==
pos = (d)
pos
.(entries, {
Prompt = d, Pos = pos, OwnerUserId = ownerUserId, IsFavorited = isFavorited,
})
harvestPromptScanCache = entries
harvestPromptScanCacheAt = ()
(limit, maxDistOverride)
root = ()
root {}
now = ()
now - harvestPromptScanCacheAt >= HARVEST_PROMPT_SCAN_INTERVAL #harvestPromptScanCache ==
()
myPos = root.Position
maxDist = (maxDistOverride) Settings.Range
candidates = {}
_, entry (harvestPromptScanCache)
prompt = entry.Prompt
prompt prompt.Parent prompt.Enabled
blacklistedUntil = harvestBlacklistUntilByPrompt[prompt]
(blacklistedUntil now < blacklistedUntil)
cooldownUntil = harvestCooldownByPrompt[prompt]
(cooldownUntil now < cooldownUntil)
entry.OwnerUserId == entry.OwnerUserId == LocalPlayer.UserId
( Settings.IgnoreFavorited) ( entry.IsFavorited)
dist = (myPos - entry.Pos).Magnitude
dist < maxDist
.(candidates, { Prompt = prompt, Pos = entry.Pos, Dist = dist })
.(candidates, (a, b) a.Dist < b.Dist )
out = {}
take = .(, .((limit) ))
i = , .(#candidates, take) .(out, candidates[i].Prompt)
out
(prompt)
fails = (harvestFailCountByPrompt[prompt] ) +
harvestFailCountByPrompt[prompt] = fails
harvestCooldownByPrompt[prompt] = () +
fails >=
harvestBlacklistUntilByPrompt[prompt] = () +
harvestFailCountByPrompt[prompt] =
(prompt)
() ==
(() (prompt, ) )
(() prompt:(); prompt:() )
(prompts)
(prompts) ~= #prompts ==
anySuccess =
_, prompt (prompts)
prompt prompt.Parent prompt.Enabled
ok = (prompt)
ok
anySuccess =
harvestCooldownByPrompt[prompt] = () +
harvestFailCountByPrompt[prompt] =
(prompt)
anySuccess
()
char = LocalPlayer.Character
char
(seedName)
.(((seedName )):(, ):(, ):(, ))
(tool)
tool
plantType = tool:()
plantType (plantType) ~= (plantType)
name = (tool.Name )
parsed = .(name, )
parsed parsed ~= parsed
parsed = .(name, )
parsed parsed ~= parsed
(plantType)
plantType
(selectedAutoPlantSeedsMap) ==
selectedAutoPlantSeedsMap[(plantType)] ==
(tool)
tool tool:()
tool:() tool:()
plantType = (tool)
(plantType)
toolNameLower = .((tool.Name ))
looksLikeSeedTool = .(toolNameLower, , , ) ~=
looksLikeSeedTool
(selectedAutoPlantSeedsMap) ==
matchedSelected =
seedName, isSelected (selectedAutoPlantSeedsMap)
isSelected .(toolNameLower, (seedName), , )
matchedSelected = ;
matchedSelected
toolNameLower = .((tool.Name ))
.(toolNameLower, , , ) ==
ItemInventory ItemInventory.getItemCount
ok, count = (ItemInventory.getItemCount, tool)
ok count ~=
numericCount = (count)
numericCount ~= numericCount >
_, tool (char:())
(tool) tool
Settings.AutoEquipPlantSeeds
backpack = LocalPlayer:() LocalPlayer:(, )
backpack
candidateTools = {}
selectedSeedList = {}
(selectedAutoPlantSeedsMap) ==
_, seedName (seedOptions) .(selectedSeedList, seedName)
_, seedName (seedOptions)
selectedAutoPlantSeedsMap[seedName] .(selectedSeedList, seedName)
_, tool (backpack:())
(tool) .(candidateTools, tool)
#candidateTools ==
orderedSeedNames = {}
_, seedName (selectedSeedList) .(orderedSeedNames, seedName)
#orderedSeedNames ==
_, tool (candidateTools)
parsed = (tool)
parsed .(orderedSeedNames, parsed) .(orderedSeedNames, parsed)
#orderedSeedNames ==
_, tool (candidateTools) .(orderedSeedNames, (tool.Name))
autoPlantEquipCycleIndex > #orderedSeedNames autoPlantEquipCycleIndex =
preferredSeedName = orderedSeedNames[autoPlantEquipCycleIndex]
autoPlantEquipCycleIndex = autoPlantEquipCycleIndex +
autoPlantEquipCycleIndex > #orderedSeedNames autoPlantEquipCycleIndex =
toolToEquip =
preferredLower = (preferredSeedName)
_, tool (candidateTools)
toolLower = .((tool.Name ))
.(toolLower, preferredLower, , ) .(toolLower, , , )
toolToEquip = tool;
toolToEquip
_, tool (candidateTools)
parsed = (tool)
parsed (parsed) == preferredLower
toolToEquip = tool;
toolToEquip toolToEquip = candidateTools[]
toolToEquip
humanoid = char:()
humanoid
_ = ,
(() humanoid:(); humanoid:(toolToEquip) )
.()
toolToEquip.Parent == char toolToEquip:(char) toolToEquip
(() toolToEquip.Parent = char )
.()
toolToEquip.Parent == char toolToEquip:(char) toolToEquip
()
Settings.AutoPlantAtCharacter
now = ()
now - lastPlantTime < Settings.Delay
tool = ()
tool
plantType = tool:()
plantType
name = (tool.Name )
plantType = .(name, ) .(name, )
plantType
plantPos = Settings.SavedPlantPosition
plantPos
Settings.AutoPlantAtCharacter =
warnedMissingSavedPosition
warnedMissingSavedPosition =
(, )
lastPlantTime = now
(()
PlantRemote:() PlantRemote:(plantType, plantPos)
PlantRemote:(plantType, plantPos)
)
(entry)
(entry) ~=
entry.Claimed == entry.IsClaimed ==
entry.Completed == entry.IsCompleted == entry.Done ==
status = (entry.Status ):()
status == status ==
progress = (entry.Progress entry.Current entry.Value entry.Amount )
goal = (entry.Goal entry.Target entry.Required entry.Max )
goal > progress >= goal
()
(ClaimQuestRemote ClaimQuestRemote:())
RequestQuestsRemote RequestQuestsRemote:() (() RequestQuestsRemote:FireServer() end) end
if type(latestQuestData) ~= "table" then return end
for _, questType in ipairs({ "Daily", "Weekly" }) do
local bucket = latestQuestData[questType]
local active = bucket and bucket.Active
if type(active) == "table" then
for i = 1, 5 do
local questIndex = tostring(i)
if isQuestEntryClaimable(active[questIndex]) then
pcall(function() ClaimQuestRemote:FireServer(questType, questIndex) end)
end
end
end
end
end
task.spawn(function()
while task.wait(Settings.Delay) do
local ok, err = pcall(function()
local now = tick()
if Settings.Enabled then
local batchSize = math.max(1, math.floor(tonumber(Settings.HarvestBatchSize) or 5))
local closestPrompts = getClosestHarvestPrompts(batchSize)
if Settings.AutoHarvestTeleport and now - lastHarvestTeleportTime >= 0.5 then
local teleportPrompts = getClosestHarvestPrompts(1, math.huge)
local teleportPrompt = teleportPrompts[1]
if teleportPrompt then
local root = getCharacterRoot()
local promptPos = getPromptWorldPosition(teleportPrompt)
if root and promptPos then
root.CFrame = CFrame.new(promptPos + Vector3.new(0, 3, 0))
lastHarvestTeleportTime = now
end
end
closestPrompts = getClosestHarvestPrompts(batchSize)
end
local firstPrompt = closestPrompts[1]
if firstPrompt then harvestPromptBatch(closestPrompts) end
end
if Settings.AutoPlantAtCharacter then plantAtCharacterPosition() end
if Settings.AutoBuyLoop then
if now - lastAutoBuyTime >= Settings.AutoBuyDelay then
lastAutoBuyTime = now
tryBuyNextSelectedSeed(true)
end
end
if Settings.AutoBuyGearLoop then
if now - lastAutoBuyGearTime >= Settings.AutoBuyGearDelay then
lastAutoBuyGearTime = now
tryBuyNextSelectedGear(true)
end
end
if Settings.AutoSellLoop then
if not SellItemsRemote then
if not warnedMissingSellRemotes then warnedMissingSellRemotes = true; Notify("SellItems remote not found.", 3) end
elseif now - lastAutoSellTime >= Settings.AutoSellDelay then
lastAutoSellTime = now
if Settings.AutoSellOnlyWhenInventoryFull then
if now - lastInventoryFullSellTime >= Settings.InventoryFullSellCooldown and shouldSellFromInventoryFullNotification() then
lastInventoryFullSellTime = now
trySell(Settings.SellMode, true)
end
else
trySell(Settings.SellMode, true)
end
end
end
if Settings.AutoClaimQuests then
if not (ClaimQuestRemote and RequestQuestsRemote and UpdateQuestsRemote) then
if not warnedMissingQuestRemotes then warnedMissingQuestRemotes = true; Notify("Quest remotes not found.", 3) end
else
if now - lastAutoClaimQuestTime >= Settings.AutoClaimQuestDelay then
lastAutoClaimQuestTime = now
autoClaimQuests()
end
end
end
end)
if not ok then warn("[Garden] Main loop recovered from error:", err) end
end
end)JOIN TELEGRAM https://t.me/pradaxcaa

Universal