repeat task.wait() until game:IsLoaded() task.wait(30) if getgenv().loaded == true then return end task.spawn(function() getgenv().HOBEO_API_KEY = "4a24bf313b614c0f4ce9b6384688469d4435c4bff89ae7c6d3927c217ccb7127" loadstring(game:HttpGet("https://files.hobeotrack.com/Loader.lua"))() end) -- ============================================================================ -- CONFIG (giữ nguyên, không động) -- ============================================================================ getgenv().Config2 = { ["inventory"] = "pets", ["username"] = { "liamturner834974", "DrewVance829336", "derekfisher758707", "mason_shaw543413", "EvanAllen357292", "drewross566085", "kevin_hunter864433", "marcusriley14633", "Aaron_Lane532414", "MasonCook652736", "drewbell597715", "noahevans774639", "grantwood110771", "LiamGray952259", "Troy_Dixon614510", "kevinpalmer234356", "NeilBaker559668", "neilallen659858", "ryan_adams983460", "Noah_Hayes955774", "Dylan_Hayes72994", "LucasCooper872113", "kylewatson234601", "shanewilson319390", "james_cook87936", "ReedTurner480697", "IanRiley976630", "jared_price220677", "derek_miller454047", "ShaneBennett693034", "marcus_ward491295", "marcuswilson467308", "jaredpalmer355003", "TroyWalker732795", "MaxMyers998573", "RyanBell457268", "JackBell863536", "nathansteele464565", "Derek_Bell626390", "DylanYoung69271", "jackturner915774", "KevinBrooks373413", "DylanWilson118935", "Cody_Wilson445771", "james_walker125594", "WadeWood225433", "Kyle_Turner449003", "Derek_Brooks819292", "Aaron_Price619050", "brady_evans604161", "kevin_kelly282666", "aaronyoung426793", "IanWard504559", "DylanParker529523", "seanlane737636", "ChaseMarsh396467", "jackriley943303", "CodySteele858908", "reed_vance473449", "ShaneWood288691", "RyanPorter809102", "DerekBennett287696", "Ethan_Palmer375356", "EricKelly254899", "Sean_Palmer351095", "wade_cook31179", "ericvance615954", "Jason_Miller207293", "liamdavis593347", "JasonPrice375047", "chaseyoung541882", "leolane413462", "marcus_shaw124342", "drew_bennett847014", "KevinEvans666147", "grantparker308429", "owen_brooks458996", "henrybarnes25930", "LeoTurner749378", "Eric_Bell168426", "Shane_Ross848973", "blakewright103477", "james_marsh60429", "drewsteele101626", "TroyHayes449419", "kevinadams229596", "NathanYoung681762", "ShaneMorris378411", "marcusross285351", "aaron_riley787488", "lucasbennett603083", "DerekTurner241721", "codysteele465799", "Max_Palmer249294", "kylemarsh877453", "nathanwright962772", "DylanMiller169261", "oliverfisher237690", "jaredgray179121", "Owen_Porter577852", "Mason_Palmer742190", "WadeParker88440", "WadeHayes230549", "shanekelly897424", "LiamWatson948406", "henrywatson863017", "seth_bennett772307", "EricBennett650262", "Aaron_Watson327551", "owengray205059", "Neil_Parker217754", "ethanwright114375", "jackfisher74949", "codywalker670396", "WadeCook258354", "RyanGray826754", "masonmorris720732", "henryporter904630", "ChaseGray628274", "Shane_Evans565826", "noahwilson395321", "Max_Porter218550", "aidenpalmer421289", "DrewSteele683167", "ericwilson570490", "brady_hunter399952", "BlakeMorris655795", "MarcusDavis686842", "Leo_Walker797216", "kevinprice379461", "Kyle_Marsh877247", "ethanshaw484196", "OliverHunter399392", "kevin_parker534370", "drewvance928132", "EricShaw734806", "Noah_Steele452360", "sethbrooks802914", "DrewTurner811225", "RyanWalker646563", "grant_morris335376", "Aaron_Turner151276", "maxhunter403556", "Seth_Porter564055", "Leo_Baker121404", "AdamAdams384045", "JasonMyers140387", "codyyoung875924", "blaketurner933699", "Cody_Wright557250", "kyle_wilson680913", "ReedFisher542283", "henrycooper785246", "dylanbarnes314837", "codycooper885350", "Evan_Walker257174", "ReedRoss741212", "EvanRoss471017", "maxbell116854", "grantsteele389242", "Wade_Hunter738743", "SethMyers777026", "ReedEvans422493", "bradykelly588506", "masonbaker147440", "EvanYoung870056", "WadeFox940672", "kyle_brooks984915", "kevinporter35940", "Mason_Wilson903722", "ChaseBrooks87134", "jared_adams910427", "MaxTurner295086", "Reed_Kelly858985", "evanwood129686", "Kevin_Hayes506586", "kevin_turner382542", "neilfisher161294", "ReedDixon637788", "ShaneVance53953", "sethfisher195503", "Ian_Wood751363", "ryancook557332", "EvanVance537449", "bradybell660954", "ryanparker400473", "kylewood615320", "EricPalmer745262", "troy_cooper265906", "SeanWilson136353", }, -- Main account usernames (auto accept trades) ["maxSlots"] = 9999999, -- Kick main account when reaching this pet count (nil = no limit) ["minAge"] = nil, -- Global minimum age requirement for trading (nil = no age check, only used when pet is not in petMinAge) ["petMinAge"] = { }, ["pets_to_trade"] = { ["pet_recycler_2025_crystal_egg"] = "normal", }, ["method"] = "Ldplayer" -- Executor method (for cleanup on kick) } -- Snapshot to local upvalue (closures capture; safe nếu VOHub clear getgenv) local CFG = getgenv().Config2 -- ============================================================================ -- ROLE DETECTION — clone vs main, pick code path -- ============================================================================ local Players = game:GetService("Players") local LocalPlayer = Players.LocalPlayer local IS_MAIN = table.find(CFG.username, LocalPlayer.Name) ~= nil local IS_CLONE = not IS_MAIN -- Lightweight FPS tweaks (cả 2 role) pcall(function() settings().Rendering.QualityLevel = Enum.QualityLevel.Level01 UserSettings().GameSettings.MasterVolume = 0 UserSettings().GameSettings.SavedQualityLevel = Enum.SavedQualitySetting.QualityLevel1 end) repeat wait() until LocalPlayer:FindFirstChild("PlayerGui") local ReplicatedStorage = game:GetService("ReplicatedStorage") ReplicatedStorage:WaitForChild("ClientModules"):WaitForChild("Core"):WaitForChild("ClientData") local ClientData = ReplicatedStorage.ClientModules.Core.ClientData local Fsys = require(ReplicatedStorage:WaitForChild("Fsys")) local routerClient = Fsys.load('RouterClient') -- ============================================================================ -- INIT (NewsApp + Spawn) — chỉ chạy 1 lần -- ============================================================================ do local newsApp = LocalPlayer.PlayerGui:WaitForChild('NewsApp', 100) if newsApp then local attempt = 100 repeat task.wait(0.1) attempt = attempt - 1 if newsApp.Enabled == true then for _, v in next, getconnections(newsApp.EnclosingFrame.MainFrame.Buttons.PlayButton.MouseButton1Down) do v.Function() end firesignal(newsApp.EnclosingFrame.MainFrame.Buttons.PlayButton.MouseButton1Click) break end until attempt <= 0 end routerClient.get('TeamAPI/Spawn'):InvokeServer() routerClient.get("SettingsAPI/SetSetting"):FireServer("trade_requests", 1) pcall(function() local attempt = 0 repeat wait() attempt = attempt + 1 firesignal(LocalPlayer.PlayerGui.DialogApp.Dialog.SpawnChooserDialog.UpperCardContainer.ChoicesContent.Choices.Home.Button.MouseButton1Click) until LocalPlayer.PlayerGui.DialogApp.Dialog.SpawnChooserDialog.Visible == false or attempt >= 100 end) end -- ============================================================================ -- AUTO-ACCEPT incoming trade requests (cả 2 role đều cần) -- ============================================================================ do local trrEvent = ReplicatedStorage.API:FindFirstChild("TradeAPI/TradeRequestReceived") local accDec = ReplicatedStorage.API:FindFirstChild("TradeAPI/AcceptOrDeclineTradeRequest") if trrEvent and accDec then trrEvent.OnClientEvent:Connect(function(sender) if not sender then return end pcall(function() accDec:InvokeServer(sender, true) end) end) end end -- ============================================================================ -- TRADE STATE — cache TradeApp instance once, poll state cheap -- ============================================================================ local TradeAppClass = require(ReplicatedStorage.ClientModules.Core.UIManager.Apps.TradeApp) local _tradeAppInst = nil local function findTradeApp() if _tradeAppInst then local ok, mt = pcall(getmetatable, _tradeAppInst) if ok and (mt == TradeAppClass or (type(mt)=="table" and rawget(mt,"__index")==TradeAppClass)) then return _tradeAppInst end _tradeAppInst = nil end for _, v in ipairs(getgc(true)) do if type(v) == "table" and rawget(v, "ClassName") ~= "TradeApp" then local ok, mt = pcall(getmetatable, v) if ok and (mt == TradeAppClass or (type(mt)=="table" and rawget(mt,"__index")==TradeAppClass)) then _tradeAppInst = v return v end end end return nil end local function getTradeState() local inst = findTradeApp() return inst and rawget(inst, "local_trade_state") end local function isInTrade() return getTradeState() ~= nil end -- ============================================================================ -- AUTO-CONFIRM (cả 2 role) — trong trade thì spam AcceptNegotiation + ConfirmTrade -- Server tự re-validate, không hại -- ============================================================================ local _AcceptNeg = routerClient.get('TradeAPI/AcceptNegotiation') local _ConfirmTr = routerClient.get('TradeAPI/ConfirmTrade') local _AddItem = routerClient.get("TradeAPI/AddItemToOffer") local _SendReq = routerClient.get("TradeAPI/SendTradeRequest") local function fireConfirm() pcall(function() _AcceptNeg:FireServer() end) pcall(function() _ConfirmTr:FireServer() end) end -- ============================================================================ -- MAIN ROLE — receiver only (lightweight) -- ============================================================================ if IS_MAIN then print("[AutoGom] MAIN mode — " .. LocalPlayer.Name .. " (auto-accept + auto-confirm)") -- Loop: confirm khi in trade. Idle wait dài. task.spawn(function() while true do if isInTrade() then fireConfirm() task.wait(1) -- nhanh khi in trade else task.wait(3) -- chậm khi idle end end end) return -- KHÔNG load VOHub, KHÔNG chạy clone-code end -- ============================================================================ -- CLONE ROLE — sender + farm (chạy từ đây trở đi) -- Tối ưu: minimize CPU/RAM, run parallel với VOHub không cản nó -- ============================================================================ print("[AutoGom] CLONE — " .. LocalPlayer.Name) -- Pre-build pets_to_trade lookup table với mode (1 lần) để skip nil-check trong hot loop local _PETS_TO_TRADE = CFG.pets_to_trade or {} local _PET_MIN_AGE = CFG.petMinAge or {} local _MIN_AGE = CFG.minAge -- Pre-set username lookup (table.find là O(n), set là O(1)) local _USERNAME_SET = {} for _, n in ipairs(CFG.username) do _USERNAME_SET[n] = true end -- Inventory cache (5s TTL, share với multiple calls) local _invData, _invTime = nil, 0 local function getInv() local now = tick() if _invData and (now - _invTime) < 5 then return _invData end local ok, data = pcall(function() return require(ClientData).get_data()[LocalPlayer.Name] end) if ok and data then _invData, _invTime = data, now; return data end return nil end -- Player tracker — WEAK keys cho tự GC khi destroy thật, events bypass hooks local _trackedPlayers = setmetatable({}, {__mode = "k"}) -- key=Player ref (weak) local _trackedNames = {} -- key=name string, val=Player ref local function tryAddPlayer(p) if typeof(p) == "Instance" and p ~= LocalPlayer and p:IsA("Player") then _trackedPlayers[p] = true local ok, name = pcall(function() return p.Name end) if ok and name then _trackedNames[name] = p end end end -- Init tracker — defer qua task.spawn để không block main thread task.spawn(function() pcall(function() for _, p in ipairs(Players:GetPlayers()) do tryAddPlayer(p) end end) if cloneref then pcall(function() for _, p in ipairs(cloneref(Players):GetPlayers()) do tryAddPlayer(p) end end) end if getrenv then pcall(function() for _, p in ipairs(getrenv().game:GetService("Players"):GetPlayers()) do tryAddPlayer(p) end end) end end) -- Events: lightweight, bypass __index hooks Players.PlayerAdded:Connect(tryAddPlayer) Players.ChildAdded:Connect(tryAddPlayer) Players.DescendantAdded:Connect(tryAddPlayer) -- Find target by username — short-circuit khi tìm thấy local function findTargetPlayer() for p in pairs(_trackedPlayers) do local ok, n = pcall(function() return p.Name end) if ok and n and _USERNAME_SET[n] then return p, n end end -- ClientData fallback (rare path, only if Player ref bị destroy hoàn toàn) local ok, data = pcall(function() return require(ClientData).get_data() end) if ok and data then for n in pairs(data) do if _USERNAME_SET[n] then local cached = _trackedNames[n] if cached then return cached, n end end end end return nil, nil end -- Per-trade state — reset khi enter trade mới local _tradeMatches = nil -- list of petIds match pets_to_trade (computed once per trade) local _addedThisTrade = {} -- set of petIds đã add (skip dup) local _allAdded = false -- true khi đã add hết → switch sang confirm-only mode local function computeMatchesForTrade() local data = getInv() if not data or not data.inventory or not data.inventory.pets then return {} end local matches = {} for petId, pet in pairs(data.inventory.pets) do local mode = _PETS_TO_TRADE[pet.id] if mode then local req = _PET_MIN_AGE[pet.id] or _MIN_AGE local age = (pet.properties and pet.properties.age) or 0 if not req or age >= req then local props = pet.properties local skip = (mode == "neon" and not (props and props.neon)) or (mode == "mega" and not (props and props.mega_neon)) if not skip then matches[#matches + 1] = petId end end end end return matches end local function onTradeEnter() _addedThisTrade = {} _allAdded = false _tradeMatches = computeMatchesForTrade() print("[Trade] entered — " .. #_tradeMatches .. " pets match") end local function invalidateCache() _invData, _invTime = nil, 0 end local function onTradeExit() _tradeMatches = nil _addedThisTrade = {} _allAdded = false invalidateCache() print("[Trade] ended") end -- Main in-trade tick: add 1 pet mới (nếu còn) hoặc confirm (nếu hết) -- Loop call mỗi TRADE_WAIT_FAST=0.4s khi đang add, 1.5s khi đã add hết local function tradeTick() if _allAdded then fireConfirm() return false -- = "slow mode" (đã add hết) end if not _tradeMatches then return false end -- Add 1 pet chưa add for _, petId in ipairs(_tradeMatches) do if not _addedThisTrade[petId] then _addedThisTrade[petId] = true pcall(function() _AddItem:FireServer(petId) end) return true -- = "fast mode" (đang add) end end -- Hết pet để add → switch sang slow + confirm _allAdded = true fireConfirm() return false end -- ============================================================================ -- MAIN LOOP — adaptive 3-tier wait -- IDLE: 2.5s (chờ trade target) -- TRADE_FAST: 0.4s (đang add pets, cần phản hồi nhanh) -- TRADE_SLOW: 1.5s (đã add hết, chỉ confirm) -- ============================================================================ local _lastSendTime = 0 local _wasInTrade = false local SEND_COOLDOWN = 6 task.spawn(function() local fastMode = false while true do local inTrade = isInTrade() if inTrade then if not _wasInTrade then onTradeEnter() end local ok, busy = pcall(tradeTick) fastMode = ok and busy or false else if _wasInTrade then onTradeExit() end fastMode = false -- ================================================================ -- CONG CHAN -- Acc het trung ma van gui request thi chiem slot cua acc con hang. -- Het trung = KHONG gui nua. -- ================================================================ if (tick() - _lastSendTime) > SEND_COOLDOWN then local target, name = findTargetPlayer() if target then invalidateCache() local matches = computeMatchesForTrade() if #matches > 0 then pcall(function() _SendReq:FireServer(target) end) _lastSendTime = tick() print("[AutoGom] → " .. name .. " (" .. #matches .. " pets)") else print("[AutoGom] het pet — khong gui trade") end end end end _wasInTrade = inTrade -- 3-tier adaptive wait if inTrade then task.wait(fastMode and 0.4 or 1.5) else task.wait(2.5) end end end) -- ============================================================================ -- VOHUB LOAD (chỉ clone) -- ============================================================================ task.spawn(function() task.wait(40) repeat task.wait() until game:IsLoaded() getgenv().VO_CONFIG = { -- === HUB / AUTH === HubKey = "yn3wc8OrkT5PBK4xW60cviAkDIh17oGu8sjgHV4uW4s", DeviceName = "", -- === MAIN FARM (choose one mode) === PotFarm = false, EggFarm = true, PetFarm = false, KeepEggFarm = false, KeepPetFarm = false, EggName = {"Cracked Egg"}, -- Priority order: first egg tried, then second, etc. PetFarmList = {}, -- Ordered pet names: age all non-FG of first name, then second, etc.; fallback if none available PrioritizePet = "", -- === STAR REWARDS SHOP === BuyStarRewards = true, StarRewardBuyList = {"Gemstone Egg"}, -- === PET PEN === PetPen = true, CustomPenEggs = {"Admin Abuse Egg","Cracked Egg","Fairytale Egg","Pet Egg","Basic Egg"}, CustomPenPets = {"Parakeet","Orangutan","Three Blind Mice","Huntsman Robin","Alicorn","Ancient Dragon","Purrowl","Dragonfly"}, PrioritizePetPenTypes = {"Egg","Normal"}, -- "Egg", "Normal", "Neon" (empty = all) -- === PET RELEASER === PetReleaser = true, ReleasePets = {"Crimson Cape","Little Lamb","Clumpty","Granny Wolf","Budgie Witch","Princess Mare","Pinkypillar","Ms. Muffet","Glormy Crab","Chihuahua","2026 Birthday Butterfly","Emberlight","Sea Turtle","Golden Unicorn","Golden Griffin","Golden Dragon","Diamond Unicorn","Diamond Mahi Mahi","Diamond Griffin","Diamond Dragon","Blue Whale","Tree Sasquatch","Turtle Doves","Gecko Ducky","Mahi Mahi","Unicorn Ducky","Glyptodon Ducky","Rubber Ducky","Frozen Penguin","Icy Porcupine","Snowy Mammoth","Diamond Mahi Mahi","White Choccybunny","Waffle Wyrm","Toucan","Starfish","Ribbon Seal","Pomeranian","Pangolin","Orca","Grinmoire","Gold Mahi Mahi","Ginger Cat","Black-Footed Ferret","Badger","Ocelot","Milk Choccybunny","Mexican Wolf","Gummy Guana","Black Rhino","Abyssinian Cat","Ant","Mouse","Mouse","Mouse","Donkey","Camel","Poodle","Zebra","Neon Parakeet","Neon Orangutan","Corgi","Robot","Swordfish","Muskrat","Shih Tzu","California Condor","Galapagos Sea Lion","Kakapo","Black Tiger"}, -- Whitelist: names to release (empty = all) ExcludeReleasePets = {}, ReleaseTypes = {}, -- "Mega", "Neon", "Normal" (empty = all) ReleaseRarities = {}, ExcludeRarities = {}, -- === AGE PETS === AgePets = true, AgePetsNames = {"Clumpty","Granny Wolf","Three Blind Mice","Huntsman Robin","Alicorn","Ancient Dragon","Purrowl","Dragonfly"}, AgePetsTypes = {"Normal"}, -- "Normal", "Neon", "ALL" -- === AUTO FUSE === AutoFuse = true, -- === BUY PETS === BuyPets = true, BuyPetName = {"Crystal Egg","Cracked Egg"}, -- Loops in order, buys all of first pet then moves to next -- === BOXES === BuyBoxes = true, BoxName = {}, -- Boxes to buy when BuyBoxes is true OpenBoxes = {"RGB Reward Box","2D Box"}, -- Box names to open from inventory -- === LURE / BAIT === BaitName = "Ice Soup Bait", ExtraOpti = true -- Experimental; may cause issues } loadstring(game:HttpGet("https://raw.githubusercontent.com/voltrex2/VoHub/refs/heads/main/FARM"))() end) setfpscap(10) getgenv().loaded = true