--[[
GUI with 2 tabs:
1) Package giver: select type + variant and fire GivePackageToPlayer
2) Autofarm: spam DiamondOmega and every 0.5s call SellAllItems
Note on naming convention:
- Normal -> " Package"
- Gold -> "Gold Package"
- Diamond -> "Diamond Package" -- without space
]]
----------------------------------------------------------------
-- Services and remotes
----------------------------------------------------------------
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local REMOTE_GIVE = ReplicatedStorage:WaitForChild("GivePackageToPlayer")
local REMOTE_SELL = ReplicatedStorage:WaitForChild("SellAllItems")
----------------------------------------------------------------
-- Helpers: package detection
----------------------------------------------------------------
local function endsWithPackage(name)
return name:sub(-8) == " Package"
end
-- recursively collect all names
local function collectAllNamesRecursive(parent, set)
for _,child in ipairs(parent:GetChildren()) do
if endsWithPackage(child.Name) then
set[child.Name] = true
end
collectAllNamesRecursive(child, set)
end
end
local function collectAllNames()
local set = {}
collectAllNamesRecursive(ReplicatedStorage, set)
return set
end
local function buildCatalog()
local names = collectAllNames()
local catalog = {}
local bases = {}
for fullName,_ in pairs(names) do
if not fullName:match("^Gold%s") and not fullName:match("^Diamond") then
local base = fullName:match("^(.*) Package$")
if base and base ~= "" then bases[base] = true end
end
end
for fullName,_ in pairs(names) do
local base
if fullName:match("^Gold%s") then
base = fullName:match("^Gold%s(.+) Package$")
elseif fullName:match("^Diamond") then
base = fullName:match("^Diamond(.+) Package$")
end
if base and base ~= "" then bases[base] = true end
end
for base,_ in pairs(bases) do
local normalName = base .. " Package"
local goldName = "Gold " .. base .. " Package"
local diamondName = "Diamond" .. base .. " Package"
catalog[base] = {
Normal = names[normalName] or false,
Gold = names[goldName] or false,
Diamond = names[diamondName] or false,
}
end
local sorted = {}
for base,_ in pairs(catalog) do table.insert(sorted, base) end
table.sort(sorted, function(a,b) return a:lower() < b:lower() end)
return catalog, sorted
end
local function composeName(base, variant)
if variant == "Gold" then
return ("Gold %s Package"):format(base)
elseif variant == "Diamond" then
return ("Diamond%s Package"):format(base)
else
return ("%s Package"):format(base)
end
end
----------------------------------------------------------------
-- GUI shell
----------------------------------------------------------------
local player = Players.LocalPlayer
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "PackageToolsGui"
screenGui.ResetOnSpawn = false
screenGui.IgnoreGuiInset = true
screenGui.Parent = player:WaitForChild("PlayerGui")
local frame = Instance.new("Frame")
frame.Size = UDim2.new(0, 520, 0, 360)
frame.Position = UDim2.new(0, 24, 0, 120)
frame.BackgroundColor3 = Color3.fromRGB(26, 27, 31)
frame.BorderSizePixel = 0
frame.Parent = screenGui
Instance.new("UICorner", frame).CornerRadius = UDim.new(0, 12)
local pad = Instance.new("UIPadding", frame)
pad.PaddingTop = UDim.new(0, 12)
pad.PaddingBottom = UDim.new(0, 12)
pad.PaddingLeft = UDim.new(0, 12)
pad.PaddingRight = UDim.new(0, 12)
-- drag
do
local dragging = false
local dragStart, startPos
frame.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
dragging = true
dragStart = input.Position
startPos = frame.Position
input.Changed:Connect(function()
if input.UserInputState == Enum.UserInputState.End then dragging = false end
end)
end
end)
frame.InputChanged:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseMovement and dragging then
local delta = input.Position - dragStart
frame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
end
end)
end
-- header
local title = Instance.new("TextLabel")
title.BackgroundTransparency = 1
title.Size = UDim2.new(1, -180, 0, 28)
title.Position = UDim2.new(0, 8, 0, 6)
title.Font = Enum.Font.GothamBold
title.TextSize = 22
title.TextXAlignment = Enum.TextXAlignment.Left
title.TextColor3 = Color3.fromRGB(235,235,235)
title.Text = "Give Package -"
title.Parent = frame
-- tabbar top right
local tabBar = Instance.new("Frame")
tabBar.Size = UDim2.new(0, 180, 0, 28)
tabBar.Position = UDim2.new(1, -188, 0, 6)
tabBar.BackgroundTransparency = 1
tabBar.Parent = frame
local function makeTab(text, x)
local b = Instance.new("TextButton")
b.Size = UDim2.new(0, 86, 1, 0)
b.Position = UDim2.new(0, x, 0, 0)
b.Text = text
b.Font = Enum.Font.GothamBold
b.TextSize = 14
b.BackgroundColor3 = Color3.fromRGB(50, 52, 58)
b.TextColor3 = Color3.fromRGB(235,235,235)
b.BorderSizePixel = 0
b.Parent = tabBar
Instance.new("UICorner", b).CornerRadius = UDim.new(0, 8)
return b
end
local tabGiver = makeTab("Package", 0)
local tabFarm = makeTab("Autofarm", 92)
local function setTabSelected(btn, selected)
btn.BackgroundColor3 = selected and Color3.fromRGB(70, 110, 200) or Color3.fromRGB(50, 52, 58)
end
----------------------------------------------------------------
-- PAGE 1: Package giver
----------------------------------------------------------------
local giverPage = Instance.new("Frame")
giverPage.Size = UDim2.new(1, -16, 1, -52)
giverPage.Position = UDim2.new(0, 8, 0, 40)
giverPage.BackgroundTransparency = 1
giverPage.Parent = frame
local lblLeft = Instance.new("TextLabel")
lblLeft.BackgroundTransparency = 1
lblLeft.Text = "Select type:"
lblLeft.Font = Enum.Font.Gotham
lblLeft.TextSize = 14
lblLeft.TextColor3 = Color3.fromRGB(200,200,200)
lblLeft.Size = UDim2.new(0, 200, 0, 22)
lblLeft.Position = UDim2.new(0, 0, 0, 0)
lblLeft.Parent = giverPage
local list = Instance.new("ScrollingFrame")
list.Size = UDim2.new(0, 220, 1, -90) -- space below for sell button
list.Position = UDim2.new(0, 0, 0, 28)
list.ScrollBarThickness = 6
list.CanvasSize = UDim2.new(0,0,0,0)
list.BackgroundColor3 = Color3.fromRGB(38, 40, 46)
list.BorderSizePixel = 0
list.Parent = giverPage
Instance.new("UICorner", list).CornerRadius = UDim.new(0, 10)
local ll = Instance.new("UIListLayout", list)
ll.Padding = UDim.new(0, 6)
ll.SortOrder = Enum.SortOrder.LayoutOrder
ll:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function()
list.CanvasSize = UDim2.new(0, 0, 0, ll.AbsoluteContentSize.Y + 12)
end)
local lblRight = lblLeft:Clone()
lblRight.Text = "Variant:"
lblRight.Position = UDim2.new(0, 240, 0, 0)
lblRight.Parent = giverPage
local function makeToggle(parent, text, y)
local b = Instance.new("TextButton")
b.Size = UDim2.new(0, 200, 0, 40)
b.Position = UDim2.new(0, 240, 0, y)
b.Text = text
b.Font = Enum.Font.GothamBold
b.TextSize = 16
b.BackgroundColor3 = Color3.fromRGB(65, 67, 75)
b.TextColor3 = Color3.fromRGB(235,235,235)
b.AutoButtonColor = true
b.BorderSizePixel = 0
b.Parent = parent
Instance.new("UICorner", b).CornerRadius = UDim.new(0, 12)
return b
end
local normalBtn = makeToggle(giverPage, "Normal", 28)
local goldBtn = makeToggle(giverPage, "Gold", 78)
local diamondBtn = makeToggle(giverPage, "Diamond",128)
local sellBtn = Instance.new("TextButton")
sellBtn.Size = UDim2.new(0, 220, 0, 44)
sellBtn.Position = UDim2.new(0, 0, 1, -44)
sellBtn.Text = "Sell Inventory"
sellBtn.Font = Enum.Font.GothamBold
sellBtn.TextSize = 18
sellBtn.BackgroundColor3 = Color3.fromRGB(180, 125, 40)
sellBtn.TextColor3 = Color3.fromRGB(255,255,255)
sellBtn.BorderSizePixel = 0
sellBtn.Parent = giverPage
Instance.new("UICorner", sellBtn).CornerRadius = UDim.new(0, 16)
local giveBtn = sellBtn:Clone()
giveBtn.Size = UDim2.new(0, 220, 0, 44)
giveBtn.Text = "Give Package"
giveBtn.BackgroundColor3 = Color3.fromRGB(35, 140, 90)
giveBtn.Position = UDim2.new(0, 240, 1, -44)
giveBtn.Parent = giverPage
local status = Instance.new("TextLabel")
status.BackgroundTransparency = 1
status.Size = UDim2.new(1, 0, 0, 20)
status.Position = UDim2.new(0, 0, 1, -20)
status.Font = Enum.Font.Gotham
status.TextSize = 14
status.TextXAlignment = Enum.TextXAlignment.Left
status.TextColor3 = Color3.fromRGB(210,210,210)
status.Text = ""
status.Parent = giverPage
-- data + interaction
local catalog, sortedBases = buildCatalog()
local selectedBase = nil
local selectedVariant = "Normal"
local function setVariantButtonsEnabled(info)
local function setBtn(btn, enabled, selected)
btn.Active = enabled
btn.AutoButtonColor = enabled
btn.TextTransparency = enabled and 0 or 0.5
btn.BackgroundColor3 = selected and Color3.fromRGB(60,110,210)
or (enabled and Color3.fromRGB(65,67,75) or Color3.fromRGB(50,52,58))
end
setBtn(normalBtn, info.Normal, selectedVariant == "Normal")
setBtn(goldBtn, info.Gold, selectedVariant == "Gold")
setBtn(diamondBtn, info.Diamond, selectedVariant == "Diamond")
end
local function refreshList()
-- remove all buttons
for _,c in ipairs(list:GetChildren()) do
if c:IsA("TextButton") then c:Destroy() end
end
for _,base in ipairs(sortedBases) do
local b = Instance.new("TextButton")
b.Size = UDim2.new(1, -12, 0, 36)
b.Text = base
b.Font = Enum.Font.Gotham
b.TextSize = 16
b.BackgroundColor3 = Color3.fromRGB(55,57,64)
b.TextColor3 = Color3.fromRGB(235,235,235)
b.BorderSizePixel = 0
b.Parent = list
Instance.new("UICorner", b).CornerRadius = UDim.new(0, 12)
b.MouseButton1Click:Connect(function()
selectedBase = base
title.Text = "Give Package - " .. base
local info = catalog[base]
if info.Normal then selectedVariant = "Normal"
elseif info.Gold then selectedVariant = "Gold"
elseif info.Diamond then selectedVariant = "Diamond" end
setVariantButtonsEnabled(info)
end)
end
end
normalBtn.MouseButton1Click:Connect(function()
if not selectedBase then return end
if not catalog[selectedBase].Normal then return end
selectedVariant = "Normal"; setVariantButtonsEnabled(catalog[selectedBase])
end)
goldBtn.MouseButton1Click:Connect(function()
if not selectedBase then return end
if not catalog[selectedBase].Gold then return end
selectedVariant = "Gold"; setVariantButtonsEnabled(catalog[selectedBase])
end)
diamondBtn.MouseButton1Click:Connect(function()
if not selectedBase then return end
if not catalog[selectedBase].Diamond then return end
selectedVariant = "Diamond"; setVariantButtonsEnabled(catalog[selectedBase])
end)
giveBtn.MouseButton1Click:Connect(function()
if not selectedBase then status.Text = "Select a type first."; return end
local name = composeName(selectedBase, selectedVariant)
REMOTE_GIVE:FireServer(name)
status.Text = "Sent: " .. name
end)
sellBtn.MouseButton1Click:Connect(function()
REMOTE_SELL:FireServer()
status.Text = "Inventory sold."
end)
refreshList()
if #sortedBases > 0 then
selectedBase = sortedBases[1]
title.Text = "Give Package - " .. selectedBase
setVariantButtonsEnabled(catalog[selectedBase])
end
----------------------------------------------------------------
-- PAGE 2: Autofarm
----------------------------------------------------------------
local farmPage = Instance.new("Frame")
farmPage.Size = giverPage.Size
farmPage.Position = giverPage.Position
farmPage.BackgroundTransparency = 1
farmPage.Visible = false
farmPage.Parent = frame
local farmTitle = Instance.new("TextLabel")
farmTitle.BackgroundTransparency = 1
farmTitle.Text = "Autofarm: DiamondOmega + Sell"
farmTitle.Font = Enum.Font.GothamBold
farmTitle.TextSize = 18
farmTitle.TextColor3 = Color3.fromRGB(230,230,230)
farmTitle.TextXAlignment = Enum.TextXAlignment.Left
farmTitle.Size = UDim2.new(1, 0, 0, 24)
farmTitle.Parent = farmPage
local startBtn = Instance.new("TextButton")
startBtn.Size = UDim2.new(0, 220, 0, 44)
startBtn.Position = UDim2.new(0, 0, 0, 40)
startBtn.Text = "Start"
startBtn.Font = Enum.Font.GothamBold
startBtn.TextSize = 18
startBtn.BackgroundColor3 = Color3.fromRGB(35, 140, 90)
startBtn.TextColor3 = Color3.fromRGB(255,255,255)
startBtn.BorderSizePixel = 0
startBtn.Parent = farmPage
Instance.new("UICorner", startBtn).CornerRadius = UDim.new(0, 16)
local stopBtn = startBtn:Clone()
stopBtn.Text = "Stop"
stopBtn.BackgroundColor3 = Color3.fromRGB(170, 65, 65)
stopBtn.Position = UDim2.new(0, 240, 0, 40)
stopBtn.Parent = farmPage
local farmStatus = Instance.new("TextLabel")
farmStatus.BackgroundTransparency = 1
farmStatus.Size = UDim2.new(1, 0, 0, 22)
farmStatus.Position = UDim2.new(0, 0, 0, 96)
farmStatus.Font = Enum.Font.Gotham
farmStatus.TextSize = 14
farmStatus.TextXAlignment = Enum.TextXAlignment.Left
farmStatus.TextColor3 = Color3.fromRGB(210,210,210)
farmStatus.Text = "Ready."
farmStatus.Parent = farmPage
-- loops
local running = false
local giverThread, sellThread
local function startFarm()
if running then return end
running = true
farmStatus.Text = "Running..."
-- 0.01 give DiamondOmega Package
giverThread = task.spawn(function()
local name = "DiamondOmega Package"
while running do
REMOTE_GIVE:FireServer(name)
task.wait(0.01)
end
end)
-- 0.5 sell
sellThread = task.spawn(function()
while running do
REMOTE_SELL:FireServer()
task.wait(0.5)
end
end)
end
local function stopFarm()
running = false
farmStatus.Text = "Stopped."
end
startBtn.MouseButton1Click:Connect(startFarm)
stopBtn.MouseButton1Click:Connect(stopFarm)
----------------------------------------------------------------
-- Tab switching
----------------------------------------------------------------
local function showPage(which)
if which == "giver" then
giverPage.Visible = true
farmPage.Visible = false
setTabSelected(tabGiver, true)
setTabSelected(tabFarm, false)
elseif which == "farm" then
giverPage.Visible = false
farmPage.Visible = true
setTabSelected(tabGiver, false)
setTabSelected(tabFarm, true)
end
end
tabGiver.MouseButton1Click:Connect(function() showPage("giver") end)
tabFarm.MouseButton1Click:Connect(function() showPage("farm") end)
-- initial state
showPage("giver")