local WindUI = loadstring(game:HttpGet("https://github.com/Footagesus/WindUI/releases/latest/download/main.lua"))()
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local LocalPlayer = Players.LocalPlayer
-- Services
local EquipRemote = ReplicatedStorage.Remotes.ItemRemotes.Equip
local UpgradeRemote = ReplicatedStorage.Remotes.UpgradeRemotes.Upgrade
local ClickRemote = ReplicatedStorage.Remotes.ItemRemotes.Click
local BuyRemote = ReplicatedStorage.Remotes.BlackMarketRemotes.Buy
-- Data
local EquippedItem = LocalPlayer:WaitForChild("DataFolder"):WaitForChild("EquippedItem")
local StocksFolder = ReplicatedStorage:WaitForChild("Server"):WaitForChild("BlackMarket"):WaitForChild("Stocks")
-- Globals
getgenv().autotap = false
getgenv().autoupgrade = false
getgenv().autoequip = false
getgenv().autoblackmarket = false
getgenv().unequipOnBuy = false
getgenv().merchantBuyerPaused = false
-- Auto Tap
function dotap()
task.spawn(function()
while getgenv().autotap do
ClickRemote:FireServer()
task.wait()
end
end)
end
-- Auto Upgrade
function autoupgrade()
task.spawn(function()
while getgenv().autoupgrade do
if EquippedItem.Value ~= "" then
UpgradeRemote:FireServer()
end
task.wait(0.6)
end
end)
end
-- Auto Equip
function autoequip()
task.spawn(function()
while getgenv().autoequip do
if getgenv().merchantBuyerPaused then
task.wait(1)
continue
end
local inventoryFolder = LocalPlayer:FindFirstChild("InventoryFolder")
local inventory = inventoryFolder and inventoryFolder:FindFirstChild("ItemInventoryFolder")
local dataFolder = LocalPlayer:FindFirstChild("DataFolder")
local equippedItem = dataFolder and dataFolder:FindFirstChild("EquippedItem")
if not inventory or not equippedItem then
task.wait(5)
continue
end
local ItemInfo = require(ReplicatedStorage.Controllers.InformationController.Informations["Information.Item"])
task.wait(1)
local bestItemObject = nil
local bestClicks = 0
for _, itemValue in pairs(inventory:GetChildren()) do
if itemValue:IsA("NumberValue") and itemValue.Value > 0 then
local itemData = ItemInfo[itemValue.Name]
if itemData and type(itemData) == "table" and itemData.EarnTable and not itemData.Consumable then
local clicks = tonumber(itemData.EarnTable[2]) or 0
if clicks > bestClicks then
bestClicks = clicks
bestItemObject = itemValue
end
end
end
end
if bestItemObject and bestItemObject.Name ~= equippedItem.Value then
EquipRemote:FireServer(bestItemObject)
task.wait(2)
end
task.wait(5)
end
end)
end
-- Black Market Buyer
function blackmarketbuyer()
task.spawn(function()
local merchantContainer = workspace.Containers.BlackMarketContainer
local floorPosition = CFrame.new(-25.2620239, -4.92173386, 38.6270752)
local function buyAllStock()
if not getgenv().autoblackmarket then return end
local character = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait()
local humanoidRootPart = character:WaitForChild("HumanoidRootPart")
local humanoid = character:FindFirstChild("Humanoid")
local originalCFrame = humanoidRootPart.CFrame
if not merchantContainer:FindFirstChildWhichIsA("Model") then return end
-- Handle item unequip
local savedEquippedItem = nil
if getgenv().unequipOnBuy then
local equippedItem = LocalPlayer.DataFolder and LocalPlayer.DataFolder:FindFirstChild("EquippedItem")
if equippedItem and equippedItem.Value ~= "" then
savedEquippedItem = equippedItem.Value
getgenv().merchantBuyerPaused = true
EquipRemote:FireServer(nil)
task.wait(0.5)
end
end
-- Teleport in front of merchant
humanoidRootPart.CFrame = floorPosition * CFrame.new(0, 0, -4)
if humanoid then
humanoid.DisplayDistanceType = Enum.HumanoidDisplayDistanceType.None
end
task.wait(0.3)
-- Buy stock
for _, stock in pairs(StocksFolder:GetChildren()) do
local leftForPlayer = stock:GetAttribute("Left_" .. LocalPlayer.UserId) or 0
for i = 1, leftForPlayer do
BuyRemote:FireServer(stock.Name)
task.wait(0.1)
end
end
task.wait(1)
-- Return and restore
humanoidRootPart.CFrame = originalCFrame
if humanoid then
humanoid.DisplayDistanceType = Enum.HumanoidDisplayDistanceType.Viewer
end
-- Re-equip item
if getgenv().unequipOnBuy and savedEquippedItem then
task.wait(0.5)
local inventory = LocalPlayer.InventoryFolder and LocalPlayer.InventoryFolder:FindFirstChild("ItemInventoryFolder")
if inventory then
local itemToEquip = inventory:FindFirstChild(savedEquippedItem)
if itemToEquip then
EquipRemote:FireServer(itemToEquip)
end
end
task.wait(0.5)
getgenv().merchantBuyerPaused = false
end
end
merchantContainer.ChildAdded:Connect(function(child)
if child:IsA("Model") and getgenv().autoblackmarket then
task.wait(0.5)
buyAllStock()
end
end)
if merchantContainer:FindFirstChildWhichIsA("Model") and getgenv().autoblackmarket then
buyAllStock()
end
end)
end
-- UI
local Window = WindUI:CreateWindow({
Title = "User Hub",
Icon = "door-open",
Author = "by User-Friendly",
Folder = "UserHub",
Transparent = true,
Theme = "Midnight",
NewEelements = true,
Resizable = true,
SideBarWidth = 210,
BackgroundImageTransparency = 0.42,
HideSearchBar = true,
ScrollBarEnabled = true,
OpenButton = {
Enabled = true,
Title = "Open UI",
Icon = "panel-left-open",
Position = UDim2.new(0, 120, 0, 120),
Draggable = true,
OnlyMobile = false,
Scale = 1
},
})
-- Config Manager
local ConfigManager = Window.ConfigManager
local myConfig = ConfigManager:CreateConfig("UserHubConfig")
Window.Topbar:Button({
Name = "Unload",
Icon = "solar:logout-3-bold",
IconSize = 22,
Callback = function()
getgenv().autotap = false
getgenv().autoequip = false
getgenv().autoupgrade = false
getgenv().autoblackmarket = false
getgenv().unequipOnBuy = false
Window:Destroy()
end,
})
local Tab1 = Window:Tab({Title = "Main", Icon = "bird"})
local Tab2 = Window:Tab({Title = "Black Market", Icon = "shopping-cart"})
local Tab3 = Window:Tab({Title = "Config", Icon = "settings"})
local AutoTapToggle = Tab1:Toggle({
Title = "Auto Tap",
Type = "Checkbox",
Flag = "AutoTap",
Value = false,
Callback = function(state)
getgenv().autotap = state
if state then dotap() end
end,
})
local AutoUpgradeToggle = Tab1:Toggle({
Title = "Auto Upgrade",
Type = "Checkbox",
Flag = "AutoUpgrade",
Value = false,
Callback = function(state)
getgenv().autoupgrade = state
if state then autoupgrade() end
end,
})
local AutoEquipToggle = Tab1:Toggle({
Title = "Auto Equip",
Type = "Checkbox",
Flag = "AutoEquip",
Value = false,
Callback = function(state)
getgenv().autoequip = state
if state then autoequip() end
end,
})
local AutoBuyToggle = Tab2:Toggle({
Title = "Auto Buy Black Market",
Type = "Checkbox",
Flag = "AutoBuyBlackMarket",
Value = false,
Callback = function(state)
getgenv().autoblackmarket = state
if state then blackmarketbuyer() end
end,
})
local UnequipToggle = Tab2:Toggle({
Title = "Unequip Item On Buy",
Type = "Checkbox",
Flag = "UnequipOnBuy",
Value = false,
Callback = function(state)
getgenv().unequipOnBuy = state
end,
})
-- Register all toggles
myConfig:Register("AutoTap", AutoTapToggle)
myConfig:Register("AutoUpgrade", AutoUpgradeToggle)
myConfig:Register("AutoEquip", AutoEquipToggle)
myConfig:Register("AutoBuyBlackMarket", AutoBuyToggle)
myConfig:Register("UnequipOnBuy", UnequipToggle)
-- Config Tab Buttons
Tab3:Button({
Title = "Save Config",
Callback = function()
myConfig:Save()
print("Config saved!")
end
})
Tab3:Button({
Title = "Delete Config",
Callback = function()
myConfig:Delete()
print("Config deleted!")
end
})
-- Auto-load config on startup
myConfig:Load()
Comments
ts script is so good.