Password:1234 , insane stuff..
--[[
Tubers Hub - 99 Nights in the Forest (OP + AUTO-DETECT + RAW_LOG FUEL)
Delta executor safe. No forward refs. Each tab scoped in do..end.
Tabs: Detect, Bring, Campfire, Auto, Player, OP, Fun, Sound,
Teleport, Visuals, Marks, FX
]]
local Players = game:GetService("Players")
local UIS = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Lighting = game:GetService("Lighting")
local TeleportService = game:GetService("TeleportService")
local HttpService = game:GetService("HttpService")
local lp = Players.LocalPlayer
local Cleanup = {}
local function onClose(fn) table.insert(Cleanup, fn) end
local function toSet(t) local s={} for _,w in ipairs(t) do s[w]=true end return s end
-- ============================================================
-- BASIC HELPERS
-- ============================================================
local function getHRP()
local c = lp.Character
return c and c:FindFirstChild("HumanoidRootPart") or nil
end
local function getHum()
local c = lp.Character
return c and c:FindFirstChildOfClass("Humanoid") or nil
end
local function normName(s) return s:lower():gsub("[%s_%-%.]","") end
-- ============================================================
-- ITEM DATABASE
-- ============================================================
local CATS = {
axes = toSet({"oldaxe","goodaxe","strongaxe","iceaxe","chainsaw","adminaxe","stoneaxe","corruptedaxe","axe","hatchet","pickaxe","steelpickaxe"}),
sacks = toSet({"oldsack","goodsack","infernalsack","giantsack","adminsack","sack","backpack","satchel","coffer","trunk","strongbox"}),
tools = toSet({"oldrod","goodrod","fishingrod","oldtamingflute","goodtamingflute","tamingflute","oldflashlight","strongflashlight","flashlight","compass","shovel","spade","hoe","saw","wrench","pliers","screwdriver","crowbar","trap","beartrap","bunnytrap","lantern","lamp","candle","bucket","wateringcan","hammer","ironhammer","map","sundial"}),
melee = toSet({"spear","poisonspear","steelspear","katana","morningstar","lasersword","icesword","infernalsword","obsidironhammer","trident","scythe","cultistkingmace","poisonclaw","dagger","knife","machete","sword","ironsword","blade","club","mace","staff","battleaxe","scimitar","rapier"}),
ranged = toSet({"revolver","rifle","tacticalshotgun","shotgun","crossbow","infernalcrossbow","snowballcannon","snowball","blowpipe","bouncingblade","frozenshuriken","lasercannon","raygun","flamethrower","wildfire","witchpotion","pistol","gun","ammo","bullet","shell","cartridge","magazine","clip","arrow","arrows","bolt","dart","grenade","slug","buckshot","dynamite","impactgrenade"}),
food = toSet({"carrot","corn","pumpkin","berry","berries","apple","morsel","steak","fish","mackerel","salmon","clownfish","eel","tuna","cod","trout","meat","rib","jerky","bacon","ham","pork","beef","venison","mushroom","cabbage","banana","orange","coconut","melon","mango","peach","pear","bread","cake","pie","cookie","egg","cheese","honey","ration","meal","snack","candycorn","turkeyleg"}),
cooked = toSet({"cookedsteak","cookedmorsel","cookedfish","cookedeel","cookedturkeyleg","berryjuice","stew","soup","chili","pumpkinstew","roastturkey","stuffedpeppers","spicyswordfish","mre","filledbowl","cashierroll"}),
healing = toSet({"bandage","medkit","medicine","pill","syrup","antibiotic","potion","herb","aloe","tonic","antidote","firstaid","healthpotion","regen"}),
materials = toSet({"wood","log","logs","rawlog","raw_log","timber","plank","board","stick","twig","branch","coal","charcoal","scrap","metal","sheetmetal","bolt","nut","screw","gear","cog","spring","propeller","wire","cable","pipe","iron","ironore","ironingot","steel","steelingot","copper","tin","gold","goldshard","silver","ingot","nugget","sand","glass","bottle","jar","glue","rope","cloth","leather","wool","fur","pelt","hide","bone","bones","skull","antler","horn","tooth","fang","claw"}),
fuel = toSet({"raw_log","rawlog","log","logs","timber","plank","board","stick","twig","branch","firewood","firelog","kindling","tinder","coal","charcoal","oil","barrel","drum","fuel","kerosene","gasoline","diesel","petrol","gas","jerrycan","canister","tank","cylinder","torch","match","lighter","biofuel","oilbarrel","fuelcanister","superlog"}),
chests = toSet({"chest","crate","commonchest","goodchest","ironchest","legendarychest","goldchest","rubychest","diamondchest","alienchest","frogchest","obsidironchest","vampirechest","coldchest","icechest","hotchest","infernalchest","mazechest","rottenchest","eventchest","secretchest","loot","lootbox","cache","coffer","strongbox","safe","treasure"}),
special = toSet({"diamond","gem","gemstone","crystal","ruby","emerald","sapphire","topaz","opal","amethyst","quartz","obsidian","jewel","shard","geode","prism","stardust","cultistgem","forestgem","forestgemfragment","meteor","meteorshard","coin","cash","money","bullion","relic","artifact","idol","totem","medallion","cultistmedallion","mossycoin","keycard","blueprint","redkey","bluekey","yellowkey","greykey","sacrificetotem","ufojunk","alienarmour","dripleaf","moonflowerbulb","stareweedpetal","cavevineflower","mandrake","halloweencandle"}),
plants = toSet({"sapling","seed","seeds","sprout","flower","flowers","flowerseeds","fireflyseeds","berryseeds","bush","fern","leaf","leaves","foliage","grass","moss","vine","roots"}),
armor = toSet({"armor","armour","helmet","helm","shield","chestplate","breastplate","gauntlet","greaves","pauldron","vest","cloak","cape","boots","gloves","mask","hat","leatherbody"}),
cultist = toSet({"cultist","cultists","cult","ritual","sacrifice","altar","idol","totem","relic","skull","gem","gems","crystal","cultistgem","cultistmedallion","cultistkingmace"}),
}
local CAT_ORDER = {"axes","sacks","tools","melee","ranged","food","cooked","healing","materials","fuel","chests","special","plants","armor","cultist"}
local EXCLUDED = toSet({"part","model","meshpart","union","unionoperation","wedge","wedgepart","cornerwedgepart","trusspart","seat","vehicleseat","decal","texture","folder","effect","hitbox","trigger","zone","region","collider","invisible","terrain","baseplate","spawn","spawnlocation","camera","sky","handle","rootjoint","torso","head","limb","humanoidrootpart","base","floor","wall","ceiling","door","window","stairs","railing","fence"})
local SCENERY = toSet({"tree","oak","pine","birch","spruce","willow","maple","palm","bush","bushes","rock","rocks","boulder","boulders","cliff","cliffs","hill","hills","mountain","mountains","bark","trunk","stump","grass","fern","leaf","leaves","foliage","water","river","lake","pond","stream","cloud","sun","moon"})
-- ============================================================
-- TOKENIZER
-- ============================================================
local tok_cache, tok_count = {}, 0
local function tokenize(n)
local c = tok_cache[n]; if c then return c end
local s = n:gsub("(%l)(%u)","%1 %2")
:gsub("(%a)(%d)","%1 %2"):gsub("(%d)(%a)","%1 %2")
:gsub("[^%w]+"," "):lower()
local t = {}
for w in s:gmatch("%S+") do t[#t+1] = w end
if tok_count > 4096 then tok_cache = {}; tok_count = 0 end
tok_cache[n] = t; tok_count = tok_count + 1
return t
end
local function pluralMatch(tok, set)
if set[tok] then return true end
if tok:sub(-1) == "s" and set[tok:sub(1,-2)] then return true end
if tok:sub(-2) == "es" and set[tok:sub(1,-3)] then return true end
return false
end
local function matchesSet(name, set)
for _, tok in ipairs(tokenize(name)) do
if pluralMatch(tok, set) then return true end
end
return false
end
local function matchesAnyCategory(name)
for _, cat in ipairs(CAT_ORDER) do
if matchesSet(name, CATS[cat]) then return true, cat end
end
return false, nil
end
local function matchesCat(name, cat)
if cat == "all" then return matchesAnyCategory(name) end
return matchesSet(name, CATS[cat] or {})
end
local function isScenery(name)
local n = normName(name)
for k in pairs(SCENERY) do
if n:find(k, 1, true) then return true end
end
return false
end
local function isStrongAxe(name)
local n = normName(name)
return n:find("strongaxe", 1, true) ~= nil
or (n:find("axe", 1, true) and n:find("strong", 1, true))
end
local function isKunai(name) return normName(name):find("kunai", 1, true) ~= nil end
local function isFuel(name)
-- Direct hit for the two spellings you asked about
local raw = name:lower()
if raw:find("raw_log", 1, true) or raw:find("rawlog", 1, true) then
return true
end
return matchesSet(name, CATS.fuel) and not isScenery(name)
end
local function isCoal(name) return normName(name):find("coal", 1, true) ~= nil end
-- ============================================================
-- STATE
-- ============================================================
local alive, unlocked = true, false
local moved = setmetatable({}, {__mode="k"})
local npcCache = setmetatable({}, {__mode="k"})
local busy = false
local S = { capIndex=5, campOffset=3, autoDelay=3, perf=false }
local CAPS = {25,50,150,300,600,1500}
local MAXSIZE = 120
local SKIP = 4
local toCampfire = false
local campCache
local foundItems = {}
local frozenNPCs = setmetatable({}, {__mode="k"})
-- ============================================================
-- LIVING DETECTION
-- ============================================================
local function isLiving(inst)
local c = npcCache[inst]; if c ~= nil then return c end
local r = false
if Players:GetPlayerFromCharacter(inst) then r = true end
local m = inst:IsA("Model") and inst or inst:FindFirstAncestorOfClass("Model")
if m and Players:GetPlayerFromCharacter(m) then r = true end
local d = 0
while not r and m and m ~= workspace and d < 6 do
if m:FindFirstChildOfClass("Humanoid") or m:FindFirstChildOfClass("AnimationController") then
r = true; break
end
m = m:FindFirstAncestorOfClass("Model"); d = d + 1
end
if not r and inst:IsA("Model") then
if inst:FindFirstChildWhichIsA("Motor6D", true)
or inst:FindFirstChildWhichIsA("Animator", true) then r = true end
end
npcCache[inst] = r
return r
end
-- ============================================================
-- MOVEMENT HELPERS
-- ============================================================
local function unanchorItem(item)
if not item or not item.Parent then return end
if item:IsA("BasePart") then
pcall(function() item.Anchored = false end)
elseif item:IsA("Model") then
for _, p in ipairs(item:GetDescendants()) do
if p:IsA("BasePart") then pcall(function() p.Anchored = false end) end
end
end
end
local function takeOwnership(item)
if not item or not item.Parent then return end
if item:IsA("BasePart") then
pcall(function() item:SetNetworkOwner(lp) end)
elseif item:IsA("Model") then
for _, p in ipairs(item:GetDescendants()) do
if p:IsA("BasePart") and not p.Anchored then
pcall(function() p:SetNetworkOwner(lp) end)
end
end
end
end
pcall(function()
if sethiddenproperty then
sethiddenproperty(lp, "SimulationRadius", math.huge)
sethiddenproperty(lp, "MaxSimulationRadius", math.huge)
end
end)
-- ============================================================
-- CAMPFIRE
-- ============================================================
local CAMP_KEYS = {"campfire","bonfire","firepit","hearth","fire pit","camp fire"}
local function findCampfire(force)
if campCache and campCache.Parent and not force then return campCache end
campCache = nil
for _, d in ipairs(workspace:GetDescendants()) do
local n = d.Name:lower()
for _, k in ipairs(CAMP_KEYS) do
if n:find(k, 1, true) then
local found
if d:IsA("BasePart") then found = d
elseif d:IsA("Model") then
found = d.PrimaryPart or d:FindFirstChildWhichIsA("BasePart", true)
end
if found then campCache = found; return found end
end
end
end
end
local function currentCap()
local c = CAPS[S.capIndex]
return S.perf and math.min(c, 50) or c
end
-- ============================================================
-- BRING (self-contained)
-- ============================================================
local function bring(matcher, cap, label)
local char = lp.Character
if not char then return 0 end
local hrp = char:FindFirstChild("HumanoidRootPart")
if not hrp then return 0 end
local ppos = hrp.Position
local baseCF = hrp.CFrame
if toCampfire then
local cf = campCache
if not (cf and cf.Parent) then
cf = nil
local keys = {"campfire","bonfire","firepit","hearth"}
for _, d in ipairs(workspace:GetDescendants()) do
local n = d.Name:lower()
for _, k in ipairs(keys) do
if n:find(k, 1, true) then
if d:IsA("BasePart") then cf = d
elseif d:IsA("Model") then
cf = d.PrimaryPart or d:FindFirstChildWhichIsA("BasePart", true)
end
if cf then campCache = cf break end
end
end
if cf then break end
end
end
if cf then baseCF = cf.CFrame * CFrame.new(0, S.campOffset, 0) end
end
local brought = 0
local unlimited = (cap == nil) or (cap == math.huge) or (cap <= 0)
local catCounts = {}
local all = workspace:GetDescendants()
local i = 0
for _, d in ipairs(all) do
i = i + 1
if i % 500 == 0 then task.wait() end
if not unlimited and brought >= cap then break end
if not d.Parent then goto continue end
local isModel = d:IsA("Model")
local isPart = d:IsA("BasePart")
if not (isModel or isPart) then goto continue end
if moved[d] then goto continue end
if isPart then
if d.Anchored then goto continue end
else
local anyFree = false
for _, p in ipairs(d:GetDescendants()) do
if p:IsA("BasePart") and not p.Anchored then anyFree = true break end
end
if not anyFree then goto continue end
end
if isScenery(d.Name) then goto continue end
if EXCLUDED[d.Name:lower()] then goto continue end
if isLiving(d) then goto continue end
local matched = matcher(d.Name)
if not matched then
local lbl = ""
for _, ch in ipairs(d:GetChildren()) do
if ch:IsA("ProximityPrompt") then
lbl = lbl .. " " .. ch.ObjectText .. " " .. ch.ActionText
elseif ch:IsA("StringValue") then
lbl = lbl .. " " .. ch.Value
end
end
if #lbl > 0 and matcher(lbl) then matched = true end
end
if not matched then goto continue end
local size = 0
if isPart then
size = d.Size.Magnitude
else
local ok, ext = pcall(function() return d:GetExtentsSize() end)
if ok and ext then size = ext.Magnitude end
end
if size > MAXSIZE then goto continue end
local pos
if isPart then
pos = d.Position
else
local ok, pv = pcall(function() return d:GetPivot() end)
pos = (ok and pv and pv.Position) or (d.PrimaryPart and d.PrimaryPart.Position) or Vector3.zero
end
if (pos - ppos).Magnitude < SKIP then goto continue end
takeOwnership(d)
local target = baseCF * CFrame.new(math.random(-6,6), 2, math.random(-6,6))
local okMove = pcall(function()
if isModel then d:PivotTo(target)
else d.CFrame = target end
end)
if okMove then
moved[d] = true
brought = brought + 1
local _, cat = matchesAnyCategory(d.Name)
if cat then catCounts[cat] = (catCounts[cat] or 0) + 1 end
end
::continue::
end
for d in pairs(moved) do
if d and d.Parent then unanchorItem(d) end
end
return brought, catCounts
end
-- ============================================================
-- AUTO-DETECT (used by Detect tab)
-- ============================================================
local function runAutoDetect()
local results = {}
local count = 0
local all = workspace:GetDescendants()
local i = 0
for _, d in ipairs(all) do
i = i + 1
if i % 500 == 0 then task.wait() end
if not d.Parent then goto continue end
if not (d:IsA("Model") or d:IsA("BasePart")) then goto continue end
if EXCLUDED[d.Name:lower()] then goto continue end
if isScenery(d.Name) then goto continue end
if isLiving(d) then goto continue end
local isPart = d:IsA("BasePart")
if isPart then
if d.Anchored then goto continue end
else
local anyFree = false
for _, p in ipairs(d:GetDescendants()) do
if p:IsA("BasePart") and not p.Anchored then anyFree = true break end
end
if not anyFree then goto continue end
end
local matched, cat = matchesAnyCategory(d.Name)
if not matched then
local lbl = ""
for _, ch in ipairs(d:GetChildren()) do
if ch:IsA("ProximityPrompt") then
lbl = lbl .. " " .. ch.ObjectText .. " " .. ch.ActionText
elseif ch:IsA("StringValue") then
lbl = lbl .. " " .. ch.Value
end
end
if #lbl > 0 then matched, cat = matchesAnyCategory(lbl) end
end
if matched then
count = count + 1
local pos
if isPart then pos = d.Position
else
local ok, pv = pcall(function() return d:GetPivot() end)
pos = (ok and pv and pv.Position) or Vector3.zero
end
results[#results+1] = {inst = d, name = d.Name, cat = cat, pos = pos}
end
::continue::
end
foundItems = results
return count
end
-- ============================================================
-- SOUNDS
-- ============================================================
local activeSounds = {}
local function getSoundParent()
return lp:FindFirstChildOfClass("PlayerGui") or workspace.CurrentCamera or workspace
end
local function playSoundById(id, vol, looped)
local num = tostring(id):gsub("%D","")
if #num == 0 then return nil end
local s = Instance.new("Sound")
s.SoundId = "rbxassetid://"..num
s.Volume = vol or 1
s.Looped = looped or false
s.Parent = getSoundParent()
pcall(function() s:Play() end)
activeSounds[#activeSounds+1] = s
if not looped then
task.delay(30, function() pcall(function() s:Destroy() end) end)
end
return s
end
local function stopAllSounds()
for _, s in ipairs(activeSounds) do
pcall(function() s:Stop() s:Destroy() end)
end
table.clear(activeSounds)
end
-- ============================================================
-- GUI SETUP (Delta-safe)
-- ============================================================
local THEME = {
BG = Color3.fromRGB(15,15,20), PANEL = Color3.fromRGB(22,22,30),
BTN = Color3.fromRGB(32,32,42), ACCENT = Color3.fromRGB(220,40,40),
TEXT = Color3.fromRGB(240,240,245), DIM = Color3.fromRGB(150,150,160),
OK = Color3.fromRGB(60,200,120), GOLD = Color3.fromRGB(255,200,50),
}
local isMobile = UIS.TouchEnabled and not UIS.KeyboardEnabled
local playerGui = lp:WaitForChild("PlayerGui", 15)
local parentGui = playerGui
if gethui then
local ok, hui = pcall(gethui)
if ok and hui then parentGui = hui end
end
if not parentGui then parentGui = playerGui end
local gui = Instance.new("ScreenGui")
gui.Name = "TubersHub_"..tostring(math.random(100000,999999))
gui.ResetOnSpawn = false
gui.DisplayOrder = 999
gui.IgnoreGuiInset = true
gui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
gui.Parent = parentGui
if syn and syn.protect_gui then
pcall(syn.protect_gui, gui)
elseif protect_gui then
pcall(protect_gui, gui)
end
local function round(inst, r)
local c = Instance.new("UICorner")
c.CornerRadius = UDim.new(0, r or 6); c.Parent = inst
end
local root = Instance.new("Frame")
root.Size = UDim2.new(0, 340, 0, 520)
root.Position = UDim2.new(0.5, -170, 0.5, -260)
root.BackgroundColor3 = THEME.BG
root.BorderSizePixel = 0
root.Active = true
root.Draggable = true
root.Visible = false
root.Parent = gui
round(root, 10)
local title = Instance.new("TextLabel")
title.Size = UDim2.new(1, -44, 0, 34)
title.Position = UDim2.new(0, 12, 0, 0)
title.BackgroundTransparency = 1
title.Text = "Tubers Hub - OP"
title.TextColor3 = THEME.GOLD
title.Font = Enum.Font.GothamBold
title.TextSize = 14
title.TextXAlignment = Enum.TextXAlignment.Left
title.Parent = root
local close = Instance.new("TextButton")
close.Size = UDim2.new(0, 26, 0, 26)
close.Position = UDim2.new(1, -34, 0, 4)
close.BackgroundColor3 = THEME.ACCENT
close.Text = "x"
close.TextColor3 = Color3.new(1,1,1)
close.Font = Enum.Font.GothamBold
close.TextSize = 16
close.Parent = root
round(close, 6)
local status = Instance.new("TextLabel")
status.Size = UDim2.new(1, -24, 0, 18)
status.Position = UDim2.new(0, 12, 1, -22)
status.BackgroundTransparency = 1
status.Text = "Ready."
status.TextColor3 = THEME.DIM
status.Font = Enum.Font.Gotham
status.TextSize = 11
status.TextXAlignment = Enum.TextXAlignment.Left
status.Parent = root
local function setStatus(t)
status.Text = t
if _G.__TH_notify then pcall(_G.__TH_notify, t) end
end
-- ============================================================
-- NOTIFICATION TOAST
-- ============================================================
local notifGui = Instance.new("ScreenGui")
notifGui.Name = "TH_Notif_"..tostring(math.random(100000,999999))
notifGui.ResetOnSpawn = false
notifGui.DisplayOrder = 1000
notifGui.Parent = parentGui
local notifHolder = Instance.new("Frame")
notifHolder.Size = UDim2.new(0, 260, 0, 200)
notifHolder.Position = UDim2.new(0.5, -130, 0, 10)
notifHolder.BackgroundTransparency = 1
notifHolder.Parent = notifGui
local notifLay = Instance.new("UIListLayout")
notifLay.Padding = UDim.new(0, 4)
notifLay.SortOrder = Enum.SortOrder.LayoutOrder
notifLay.HorizontalAlignment = Enum.HorizontalAlignment.Center
notifLay.Parent = notifHolder
_G.__TH_notify = function(msg)
local n = Instance.new("Frame")
n.Size = UDim2.new(1, 0, 0, 26)
n.BackgroundColor3 = Color3.fromRGB(20,20,28)
n.BackgroundTransparency = 0.15
n.BorderSizePixel = 0
n.Parent = notifHolder
round(n, 5)
local t = Instance.new("TextLabel")
t.Size = UDim2.new(1, -10, 1, 0)
t.Position = UDim2.new(0, 5, 0, 0)
t.BackgroundTransparency = 1
t.Text = msg
t.TextColor3 = THEME.TEXT
t.Font = Enum.Font.GothamMedium
t.TextSize = 11
t.TextTruncate = Enum.TextTruncate.AtEnd
t.TextXAlignment = Enum.TextXAlignment.Left
t.Parent = n
task.delay(2.5, function() pcall(function() n:Destroy() end) end)
end
onClose(function() pcall(function() notifGui:Destroy() end) end)
-- ============================================================
-- TAB BAR + HELPERS
-- ============================================================
local tabBar = Instance.new("ScrollingFrame")
tabBar.Size = UDim2.new(1, -20, 0, 30)
tabBar.Position = UDim2.new(0, 10, 0, 36)
tabBar.BackgroundTransparency = 1
tabBar.BorderSizePixel = 0
tabBar.ScrollBarThickness = 3
tabBar.ScrollBarImageColor3 = THEME.ACCENT
tabBar.ScrollingDirection = Enum.ScrollingDirection.X
tabBar.CanvasSize = UDim2.new(0,0,0,0)
tabBar.AutomaticCanvasSize = Enum.AutomaticSize.X
tabBar.Parent = root
local tabLay = Instance.new("UIListLayout")
tabLay.FillDirection = Enum.FillDirection.Horizontal
tabLay.Padding = UDim.new(0, 3)
tabLay.Parent = tabBar
local pages, tabBtns = {}, {}
local cur
local TAB_W = isMobile and 62 or 52
local function showPage(n)
for k, p in pairs(pages) do p.Visible = (k == n) end
for k, b in pairs(tabBtns) do
b.BackgroundColor3 = (k == n) and THEME.ACCENT or THEME.BTN
end
end
local function createTab(name)
local b = Instance.new("TextButton")
b.Size = UDim2.new(0, TAB_W, 1, 0)
b.BackgroundColor3 = THEME.BTN
b.BorderSizePixel = 0
b.Text = name
b.TextColor3 = THEME.TEXT
b.Font = Enum.Font.GothamMedium
b.TextSize = isMobile and 10 or 9
b.Parent = tabBar
round(b, 5)
tabBtns[name] = b
b.MouseButton1Click:Connect(function() showPage(name) end)
local list = Instance.new("ScrollingFrame")
list.Size = UDim2.new(1, -20, 1, -100)
list.Position = UDim2.new(0, 10, 0, 72)
list.BackgroundColor3 = THEME.PANEL
list.BorderSizePixel = 0
list.ScrollBarThickness = 8
list.CanvasSize = UDim2.new(0,0,0,0)
list.AutomaticCanvasSize = Enum.AutomaticSize.Y
list.Visible = false
list.Parent = root
round(list, 8)
local lay = Instance.new("UIListLayout")
lay.Padding = UDim.new(0, 5)
lay.SortOrder = Enum.SortOrder.LayoutOrder
lay.Parent = list
local pad = Instance.new("UIPadding")
pad.PaddingTop = UDim.new(0, 8)
pad.PaddingBottom = UDim.new(0, 8)
pad.PaddingLeft = UDim.new(0, 8)
pad.PaddingRight = UDim.new(0, 8)
pad.Parent = list
pages[name] = list
return list
end
local function mkHeader(t)
local l = Instance.new("TextLabel")
l.Size = UDim2.new(1, 0, 0, 20)
l.BackgroundTransparency = 1
l.Text = "--- "..t.." ---"
l.TextColor3 = THEME.ACCENT
l.Font = Enum.Font.GothamBold
l.TextSize = 11
l.Parent = cur
end
local function mkButton(t, onClick)
local b = Instance.new("TextButton")
b.Size = UDim2.new(1, 0, 0, isMobile and 34 or 28)
b.BackgroundColor3 = THEME.BTN
b.BorderSizePixel = 0
b.Text = t
b.TextColor3 = THEME.TEXT
b.Font = Enum.Font.GothamMedium
b.TextSize = isMobile and 12 or 11
b.Parent = cur
round(b, 6)
b.MouseButton1Click:Connect(function()
local ok, err = pcall(onClick, b)
if not ok then setStatus("Error: "..tostring(err)) end
end)
return b
end
local function mkTextbox(ph, onEnter)
local t = Instance.new("TextBox")
t.Size = UDim2.new(1, 0, 0, isMobile and 34 or 28)
t.BackgroundColor3 = THEME.BTN
t.BorderSizePixel = 0
t.TextColor3 = THEME.TEXT
t.PlaceholderText = ph
t.PlaceholderColor3 = THEME.DIM
t.Text = ""
t.Font = Enum.Font.Code
t.TextSize = isMobile and 12 or 11
t.ClearTextOnFocus = false
t.Parent = cur
round(t, 6)
t.FocusLost:Connect(function(enter)
if enter then
local ok, err = pcall(onEnter, t.Text)
if not ok then setStatus("Error: "..tostring(err)) end
end
end)
return t
end
local function runBring(label, matcher, unlimited)
if busy then setStatus("Busy...") return end
busy = true
task.spawn(function()
local cap = unlimited and math.huge or currentCap()
local ok, brought, catCounts = pcall(bring, matcher, cap, label)
busy = false
if not ok then
setStatus("Error: "..tostring(brought))
else
local parts = {}
if catCounts then
for cat, n in pairs(catCounts) do parts[#parts+1] = cat.."="..n end
end
local extra = #parts > 0 and (" ["..table.concat(parts, ", ").."]") or ""
setStatus(label..": "..brought..extra)
end
end)
end
-- ============================================================
-- TAB: DETECT
-- ============================================================
do
cur = createTab("Detect")
mkHeader("AUTO-DETECT")
mkButton("SCAN NOW", function()
setStatus("Scanning...")
task.spawn(function()
local n = runAutoDetect()
setStatus("Found "..n.." items")
end)
end)
local countLabel = Instance.new("TextLabel")
countLabel.Size = UDim2.new(1, 0, 0, 180)
countLabel.BackgroundTransparency = 1
countLabel.TextColor3 = THEME.TEXT
countLabel.Font = Enum.Font.Code
countLabel.TextSize = 11
countLabel.TextXAlignment = Enum.TextXAlignment.Left
countLabel.TextYAlignment = Enum.TextYAlignment.Top
countLabel.TextWrapped = true
countLabel.Text = "Press SCAN NOW."
countLabel.Parent = cur
mkButton("Show counts", function()
if #foundItems == 0 then setStatus("Scan first") return end
local counts = {}
for _, item in ipairs(foundItems) do
counts[item.cat] = (counts[item.cat] or 0) + 1
end
local lines = {"=== COUNTS ==="}
for _, cat in ipairs(CAT_ORDER) do
if counts[cat] then lines[#lines+1] = cat..": "..counts[cat] end
end
lines[#lines+1] = "TOTAL: "..#foundItems
countLabel.Text = table.concat(lines, "\n")
end)
mkHeader("SPECIAL")
mkButton("Bring Strong Axe", function() runBring("Strong Axe", isStrongAxe, true) end)
mkButton("Bring ALL axes", function() runBring("axes", function(n) return matchesCat(n,"axes") end, true) end)
mkButton("Bring ALL sacks", function() runBring("sacks", function(n) return matchesCat(n,"sacks") end, true) end)
mkButton("Bring ALL chests", function() runBring("chests", function(n) return matchesCat(n,"chests") end, true) end)
mkButton("Bring ALL special", function() runBring("special", function(n) return matchesCat(n,"special") end, true) end)
end
-- ============================================================
-- TAB: BRING
-- ============================================================
do
cur = createTab("Bring")
mkHeader("PRIORITY")
mkButton("Strong Axe", function() runBring("Strong Axe", isStrongAxe, true) end)
mkButton("ALL fuel (raw_log included)", function() runBring("fuel", isFuel, true) end)
mkButton("ALL coal", function() runBring("coal", isCoal, true) end)
mkButton("ALL food", function() runBring("food", function(n) return matchesCat(n,"food") end, true) end)
mkHeader("ALL CATEGORIES")
for _, cat in ipairs(CAT_ORDER) do
mkButton("Bring "..cat, function()
runBring(cat, function(n) return matchesCat(n, cat) end, true)
end)
end
mkButton("Bring EVERYTHING", function()
runBring("all", function(n) return matchesAnyCategory(n) end, true)
end)
mkHeader("KEYWORDS")
mkTextbox("coal, oil, barrel, raw_log", function(text)
local kws = {}
for raw in text:lower():gmatch("[^,]+") do
local k = raw:match("^%s*(.-)%s*$")
if #k > 0 then kws[#kws+1] = k end
end
if #kws == 0 then return end
runBring("kw", function(n)
local ln = n:lower()
for _, k in ipairs(kws) do
if ln:find(k, 1, true) then return true end
end
return false
end, true)
end)
end
-- ============================================================
-- TAB: CAMPFIRE
-- ============================================================
do
cur = createTab("Campfire")
mkHeader("DESTINATION")
mkButton("Bring to: ME", function(b)
toCampfire = not toCampfire
b.Text = "Bring to: "..(toCampfire and "CAMPFIRE" or "ME")
b.BackgroundColor3 = toCampfire and THEME.OK or THEME.BTN
end)
mkButton("Find campfire", function()
local cf = findCampfire(true)
if cf then
setStatus(string.format("Campfire at %.0f,%.0f,%.0f", cf.Position.X, cf.Position.Y, cf.Position.Z))
else
setStatus("No campfire")
end
end)
mkHeader("QUICK FEED")
mkButton("Fuel -> campfire (raw_log too)", function()
if not findCampfire() then setStatus("No campfire") return end
local old = toCampfire; toCampfire = true
runBring("fuel->fire", isFuel, true)
task.delay(1, function() toCampfire = old end)
end)
mkButton("Food -> campfire", function()
if not findCampfire() then setStatus("No campfire") return end
local old = toCampfire; toCampfire = true
runBring("food->fire", function(n) return matchesCat(n,"food") end, true)
task.delay(1, function() toCampfire = old end)
end)
end
-- ============================================================
-- TAB: AUTO
-- ============================================================
do
cur = createTab("Auto")
local autoDetectOn = false
local autoDetectGen = 0
local autoDetectConns = {}
local detected = {}
local detectInterval = 3
local function fullScan()
local newCount = 0
local all = workspace:GetDescendants()
for _, d in ipairs(all) do
if not d.Parent then goto cont end
if not (d:IsA("Model") or d:IsA("BasePart")) then goto cont end
if EXCLUDED[d.Name:lower()] then goto cont end
if isScenery(d.Name) then goto cont end
if isLiving(d) then goto cont end
if detected[d] then goto cont end
local matched, cat = matchesAnyCategory(d.Name)
if not matched then goto cont end
detected[d] = {cat = cat, name = d.Name, firstSeen = tick()}
newCount = newCount + 1
::cont::
end
return newCount
end
local function startAutoDetect()
local n = fullScan()
local conn1 = workspace.DescendantAdded:Connect(function(d)
if not autoDetectOn or not d.Parent then return end
if not (d:IsA("Model") or d:IsA("BasePart")) then return end
if EXCLUDED[d.Name:lower()] then return end
if isScenery(d.Name) then return end
if isLiving(d) then return end
if detected[d] then return end
local matched, cat = matchesAnyCategory(d.Name)
if not matched then return end
detected[d] = {cat = cat, name = d.Name, firstSeen = tick()}
end)
table.insert(autoDetectConns, conn1)
local myGen = autoDetectGen
task.spawn(function()
while autoDetectOn and myGen == autoDetectGen and alive do
task.wait(detectInterval)
if not autoDetectOn or myGen ~= autoDetectGen then break end
fullScan()
end
end)
return n
end
local function stopAutoDetect()
autoDetectOn = false
autoDetectGen = autoDetectGen + 1
for _, c in ipairs(autoDetectConns) do
pcall(function() c:Disconnect() end)
end
table.clear(autoDetectConns)
end
onClose(stopAutoDetect)
local autoBringList = {}
local function getDetectedByCat(cat)
local out = {}
for inst, info in pairs(detected) do
if inst.Parent and info.cat == cat then
out[#out+1] = inst
end
end
return out
end
local function bringList(instList)
local hrp = getHRP()
if not hrp then return 0 end
local baseCF = hrp.CFrame
local brought = 0
for _, d in ipairs(instList) do
if not d or not d.Parent then goto cont end
if moved[d] then goto cont end
takeOwnership(d)
local target = baseCF * CFrame.new(math.random(-6,6), 2, math.random(-6,6))
local ok = pcall(function()
if d:IsA("Model") then d:PivotTo(target) else d.CFrame = target end
end)
if ok then
moved[d] = true
brought = brought + 1
end
::cont::
end
return brought
end
local function startAutoBringCat(cat)
if autoBringList[cat] and autoBringList[cat].enabled then return end
autoBringList[cat] = {enabled = true, gen = 0, total = 0}
local entry = autoBringList[cat]
entry.gen = entry.gen + 1
local myGen = entry.gen
task.spawn(function()
while entry.enabled and entry.gen == myGen and alive do
local list = getDetectedByCat(cat)
if #list > 0 then
local n = bringList(list)
if n > 0 then
entry.total = entry.total + n
setStatus("AUTO "..cat..": +"..n.." (total "..entry.total..")")
end
end
task.wait(2)
end
end)
end
local function stopAutoBringCat(cat)
if autoBringList[cat] then
autoBringList[cat].enabled = false
autoBringList[cat].gen = autoBringList[cat].gen + 1
end
end
onClose(function()
for cat in pairs(autoBringList) do
autoBringList[cat].enabled = false
end
end)
local infoLabel = Instance.new("TextLabel")
infoLabel.Size = UDim2.new(1, 0, 0, 180)
infoLabel.BackgroundTransparency = 1
infoLabel.TextColor3 = THEME.TEXT
infoLabel.Font = Enum.Font.Code
infoLabel.TextSize = 11
infoLabel.TextXAlignment = Enum.TextXAlignment.Left
infoLabel.TextYAlignment = Enum.TextYAlignment.Top
infoLabel.TextWrapped = true
infoLabel.Text = "Auto-detect is off."
infoLabel.Parent = cur
local function refreshInfo()
if not autoDetectOn then
infoLabel.Text = "Auto-detect is off."
return
end
local counts = {}
local total = 0
for _, info in pairs(detected) do
counts[info.cat] = (counts[info.cat] or 0) + 1
total = total + 1
end
local lines = {"=== LIVE DETECTED ("..total..") ==="}
for _, cat in ipairs(CAT_ORDER) do
local n = counts[cat] or 0
if n > 0 then
local tag = ""
if autoBringList[cat] and autoBringList[cat].enabled then
tag = " *AUTO*"
end
lines[#lines+1] = cat..": "..n..tag
end
end
infoLabel.Text = table.concat(lines, "\n")
end
mkHeader("AUTO-DETECT")
mkButton("AUTO-DETECT: OFF", function(b)
autoDetectOn = not autoDetectOn
b.Text = "AUTO-DETECT: "..(autoDetectOn and "ON" or "OFF")
b.BackgroundColor3 = autoDetectOn and THEME.OK or THEME.BTN
if autoDetectOn then
detected = {}
table.clear(detected)
local n = startAutoDetect()
setStatus("Auto-detect ON - "..n.." items tracked")
task.spawn(function()
while autoDetectOn and alive do
refreshInfo()
task.wait(1)
end
refreshInfo()
end)
else
stopAutoDetect()
setStatus("Auto-detect OFF")
refreshInfo()
end
end)
mkButton("Rescan now", function()
if not autoDetectOn then setStatus("Turn auto-detect ON first") return end
local n = fullScan()
setStatus("Rescanned: "..n.." new")
refreshInfo()
end)
mkButton("Clear detected", function()
detected = {}
table.clear(detected)
setStatus("Cleared detected list")
refreshInfo()
end)
mkButton("Scan interval: "..detectInterval.."s", function(b)
local ivs = {1, 3, 5, 10, 30}
local idx = 1
for i, v in ipairs(ivs) do if v == detectInterval then idx = i break end end
detectInterval = ivs[(idx % #ivs) + 1]
b.Text = "Scan interval: "..detectInterval.."s"
end)
mkHeader("AUTO-BRING FOOD")
mkButton("Auto-bring FOOD: OFF", function(b)
local on = autoBringList.food and autoBringList.food.enabled
if on then
stopAutoBringCat("food")
b.Text = "Auto-bring FOOD: OFF"
b.BackgroundColor3 = THEME.BTN
else
if not autoDetectOn then setStatus("Turn auto-detect ON first") return end
startAutoBringCat("food")
b.Text = "Auto-bring FOOD: ON"
b.BackgroundColor3 = THEME.OK
end
end)
mkHeader("AUTO-BRING ARMOR")
mkButton("Auto-bring ARMOR: OFF", function(b)
local on = autoBringList.armor and autoBringList.armor.enabled
if on then
stopAutoBringCat("armor")
b.Text = "Auto-bring ARMOR: OFF"
b.BackgroundColor3 = THEME.BTN
else
if not autoDetectOn then setStatus("Turn auto-detect ON first") return end
startAutoBringCat("armor")
b.Text = "Auto-bring ARMOR: ON"
b.BackgroundColor3 = THEME.OK
end
end)
mkHeader("AUTO-BRING EVERYTHING")
mkButton("Auto-bring ALL ITEMS: OFF", function(b)
local on = autoBringList.all and autoBringList.all.enabled
if on then
stopAutoBringCat("all")
b.Text = "Auto-bring ALL ITEMS: OFF"
b.BackgroundColor3 = THEME.BTN
else
if not autoDetectOn then setStatus("Turn auto-detect ON first") return end
autoBringList.all = {enabled = true, gen = 0, total = 0}
local entry = autoBringList.all
entry.gen = entry.gen + 1
local myGen = entry.gen
task.spawn(function()
while entry.enabled and entry.gen == myGen and alive do
local list = {}
for inst in pairs(detected) do
if inst.Parent and not moved[inst] then
list[#list+1] = inst
end
end
if #list > 0 then
local n = bringList(list)
if n > 0 then
entry.total = entry.total + n
setStatus("AUTO ALL: +"..n.." (total "..entry.total..")")
end
end
task.wait(2)
end
end)
b.Text = "Auto-bring ALL ITEMS: ON"
b.BackgroundColor3 = THEME.OK
end
end)
mkHeader("AUTO-BRING EXTRA CATEGORIES")
for _, cat in ipairs({"fuel","chests","special","melee","ranged","healing","materials","sacks","axes","tools"}) do
mkButton("Auto "..cat..": OFF", function(b)
local on = autoBringList[cat] and autoBringList[cat].enabled
if on then
stopAutoBringCat(cat)
b.Text = "Auto "..cat..": OFF"
b.BackgroundColor3 = THEME.BTN
else
if not autoDetectOn then setStatus("Turn auto-detect ON first") return end
startAutoBringCat(cat)
b.Text = "Auto "..cat..": ON"
b.BackgroundColor3 = THEME.OK
end
end)
end
mkHeader("AUTO SURVIVAL")
local autoHealOn = false
local autoHealGen = 0
mkButton("Auto-heal: OFF", function(b)
autoHealOn = not autoHealOn
b.Text = "Auto-heal: "..(autoHealOn and "ON" or "OFF")
b.BackgroundColor3 = autoHealOn and THEME.OK or THEME.BTN
autoHealGen = autoHealGen + 1
if not autoHealOn then return end
local myGen = autoHealGen
task.spawn(function()
while autoHealOn and myGen == autoHealGen and alive do
local h = getHum()
if h and h.Health < h.MaxHealth then
pcall(function() h.Health = h.MaxHealth end)
end
task.wait(1)
end
end)
end)
local autoEatOn = false
local autoEatGen = 0
local function tryEat()
local char = lp.Character
if not char then return false end
local bp = lp:FindFirstChildOfClass("Backpack")
if not bp then return false end
local h = char:FindFirstChildOfClass("Humanoid")
if not h or h.Health >= h.MaxHealth then return false end
for _, item in ipairs(bp:GetChildren()) do
if item:IsA("Tool") then
local n = item.Name:lower()
if n:find("apple") or n:find("cake") or n:find("bread")
or n:find("morsel") or n:find("steak") or n:find("fish")
or n:find("berry") or n:find("meat") or n:find("food")
or n:find("soup") or n:find("stew") or n:find("cooked") then
pcall(function()
item.Parent = char
item:Activate()
task.wait(0.2)
item.Parent = bp
end)
return true
end
end
end
return false
end
mkButton("Auto-eat: OFF", function(b)
autoEatOn = not autoEatOn
b.Text = "Auto-eat: "..(autoEatOn and "ON" or "OFF")
b.BackgroundColor3 = autoEatOn and THEME.OK or THEME.BTN
autoEatGen = autoEatGen + 1
if not autoEatOn then return end
local myGen = autoEatGen
task.spawn(function()
while autoEatOn and myGen == autoEatGen and alive do
local h = getHum()
if h and h.Health < h.MaxHealth * 0.7 then
tryEat()
end
task.wait(3)
end
end)
end)
local autoUnanchorOn = false
local autoUnanchorGen = 0
mkButton("Auto-unanchor: OFF", function(b)
autoUnanchorOn = not autoUnanchorOn
b.Text = "Auto-unanchor: "..(autoUnanchorOn and "ON" or "OFF")
b.BackgroundColor3 = autoUnanchorOn and THEME.OK or THEME.BTN
autoUnanchorGen = autoUnanchorGen + 1
if not autoUnanchorOn then return end
local myGen = autoUnanchorGen
task.spawn(function()
while autoUnanchorOn and myGen == autoUnanchorGen and alive do
local hrp = getHRP()
if hrp then
local pos = hrp.Position
for _, d in ipairs(workspace:GetDescendants()) do
if d:IsA("BasePart") and d.Anchored
and (d.Position - pos).Magnitude < 50 then
pcall(function()
d.Anchored = false
d:SetNetworkOwner(lp)
end)
end
end
end
task.wait(2)
end
end)
end)
mkHeader("STOP ALL LOOPS")
mkButton("STOP EVERYTHING", function()
stopAutoDetect()
for cat in pairs(autoBringList) do
autoBringList[cat].enabled = false
autoBringList[cat].gen = autoBringList[cat].gen + 1
end
autoHealOn = false; autoHealGen = autoHealGen + 1
autoEatOn = false; autoEatGen = autoEatGen + 1
autoUnanchorOn = false; autoUnanchorGen = autoUnanchorGen + 1
setStatus("All loops stopped")
end)
mkHeader("NOTES")
local note = Instance.new("TextLabel")
note.Size = UDim2.new(1, 0, 0, 60)
note.BackgroundTransparency = 1
note.Text = "Turn AUTO-DETECT ON first. Auto-bring FUEL now includes raw_log and rawlog."
note.TextColor3 = THEME.DIM
note.Font = Enum.Font.Gotham
note.TextSize = 10
note.TextWrapped = true
note.TextXAlignment = Enum.TextXAlignment.Left
note.TextYAlignment = Enum.TextYAlignment.Top
note.Parent = cur
end
-- ============================================================
-- TAB: PLAYER
-- ============================================================
do
cur = createTab("Player")
local plr = {fly=false, noclip=false, infJump=false, speed=16, jump=50, flySpeed=60}
local flyInputs = {fwd=false,back=false,left=false,right=false,up=false,down=false}
local flyConn, flyBV, flyBG
local flyPad = Instance.new("Frame")
flyPad.Size = UDim2.new(0, 136, 0, 130)
flyPad.Position = UDim2.new(0.5, -68, 1, -150)
flyPad.BackgroundColor3 = THEME.PANEL
flyPad.BackgroundTransparency = 0.15
flyPad.BorderSizePixel = 0
flyPad.Visible = false
flyPad.Active = true
flyPad.Draggable = true
flyPad.Parent = gui
round(flyPad, 10)
local flyGrid = Instance.new("UIGridLayout")
flyGrid.CellSize = UDim2.new(0, 60, 0, 32)
flyGrid.CellPadding = UDim2.new(0, 4, 0, 4)
flyGrid.Parent = flyPad
local flyPad2 = Instance.new("UIPadding")
flyPad2.PaddingTop = UDim.new(0, 20)
flyPad2.PaddingLeft = UDim.new(0, 4)
flyPad2.PaddingRight = UDim.new(0, 4)
flyPad2.Parent = flyPad
local function mkFlyBtn(text, key, order)
local b = Instance.new("TextButton")
b.LayoutOrder = order
b.BackgroundColor3 = THEME.BTN
b.BorderSizePixel = 0
b.Text = text
b.TextColor3 = THEME.TEXT
b.Font = Enum.Font.GothamBold
b.TextSize = 12
b.Parent = flyPad
round(b, 6)
b.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1
or input.UserInputType == Enum.UserInputType.Touch then
flyInputs[key] = true; b.BackgroundColor3 = THEME.ACCENT
end
end)
b.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1
or input.UserInputType == Enum.UserInputType.Touch then
flyInputs[key] = false; b.BackgroundColor3 = THEME.BTN
end
end)
end
mkFlyBtn("FWD","fwd",1) mkFlyBtn("UP","up",2) mkFlyBtn("LEFT","left",3)
mkFlyBtn("RIGHT","right",4) mkFlyBtn("BACK","back",5) mkFlyBtn("DOWN","down",6)
local function stopFly()
plr.fly = false
if flyConn then flyConn:Disconnect() flyConn = nil end
if flyBV then pcall(function() flyBV:Destroy() end) flyBV = nil end
if flyBG then pcall(function() flyBG:Destroy() end) flyBG = nil end
local h = getHum() if h then h.PlatformStand = false end
flyPad.Visible = false
for k in pairs(flyInputs) do flyInputs[k] = false end
end
local function startFly()
local hrp, hum = getHRP(), getHum()
if not hrp or not hum then return end
stopFly()
plr.fly = true; hum.PlatformStand = true
flyBV = Instance.new("BodyVelocity")
flyBV.MaxForce = Vector3.new(1e9,1e9,1e9)
flyBV.Velocity = Vector3.zero
flyBV.Parent = hrp
flyBG = Instance.new("BodyGyro")
flyBG.MaxTorque = Vector3.new(1e9,1e9,1e9)
flyBG.P = 9000
flyBG.CFrame = hrp.CFrame
flyBG.Parent = hrp
if isMobile then flyPad.Visible = true end
flyConn = RunService.RenderStepped:Connect(function()
local cam = workspace.CurrentCamera
if not (flyBV and flyBV.Parent and cam) then return end
local dir = Vector3.zero
if isMobile then
if flyInputs.fwd then dir = dir + cam.CFrame.LookVector end
if flyInputs.back then dir = dir - cam.CFrame.LookVector end
if flyInputs.right then dir = dir + cam.CFrame.RightVector end
if flyInputs.left then dir = dir - cam.CFrame.RightVector end
if flyInputs.up then dir = dir + Vector3.yAxis end
if flyInputs.down then dir = dir - Vector3.yAxis end
else
if UIS:IsKeyDown(Enum.KeyCode.W) then dir = dir + cam.CFrame.LookVector end
if UIS:IsKeyDown(Enum.KeyCode.S) then dir = dir - cam.CFrame.LookVector end
if UIS:IsKeyDown(Enum.KeyCode.D) then dir = dir + cam.CFrame.RightVector end
if UIS:IsKeyDown(Enum.KeyCode.A) then dir = dir - cam.CFrame.RightVector end
if UIS:IsKeyDown(Enum.KeyCode.Space) then dir = dir + Vector3.yAxis end
if UIS:IsKeyDown(Enum.KeyCode.LeftControl) then dir = dir - Vector3.yAxis end
end
flyBV.Velocity = dir.Magnitude > 0 and dir.Unit * plr.flySpeed or Vector3.zero
flyBG.CFrame = cam.CFrame
end)
end
local flyBtn
local function toggleFly()
if plr.fly then stopFly() else startFly() end
if flyBtn then
flyBtn.Text = "Fly: "..(plr.fly and "ON" or "OFF")
flyBtn.BackgroundColor3 = plr.fly and THEME.OK or THEME.BTN
end
end
flyBtn = mkButton("Fly: OFF", toggleFly)
mkButton("Fly speed: 60", function(b)
local sp = {30,60,120,250,500,1000}
local idx = 1
for i, v in ipairs(sp) do if v == plr.flySpeed then idx = i break end end
plr.flySpeed = sp[(idx % #sp) + 1]
b.Text = "Fly speed: "..plr.flySpeed
end)
mkButton("Noclip: OFF", function(b)
plr.noclip = not plr.noclip
b.Text = "Noclip: "..(plr.noclip and "ON" or "OFF")
b.BackgroundColor3 = plr.noclip and THEME.OK or THEME.BTN
end)
mkButton("Infinite jump: OFF", function(b)
plr.infJump = not plr.infJump
b.Text = "Infinite jump: "..(plr.infJump and "ON" or "OFF")
b.BackgroundColor3 = plr.infJump and THEME.OK or THEME.BTN
end)
mkButton("Walk speed: 16", function(b)
local sp = {16,32,50,80,120,200,500}
local i = 1
for j,v in ipairs(sp) do if v == plr.speed then i = j break end end
i = (i % #sp) + 1
plr.speed = sp[i]
b.Text = "Walk speed: "..plr.speed
local h = getHum() if h then h.WalkSpeed = plr.speed end
end)
mkButton("Jump power: 50", function(b)
local jp = {50,80,120,200,500,1000}
local i = 1
for j,v in ipairs(jp) do if v == plr.jump then i = j break end end
i = (i % #jp) + 1
plr.jump = jp[i]
b.Text = "Jump power: "..plr.jump
local h = getHum() if h then h.UseJumpPower = true h.JumpPower = plr.jump end
end)
mkHeader("HEALTH")
mkButton("Heal self", function()
local h = getHum()
if h then h.Health = h.MaxHealth setStatus("Healed") end
end)
mkButton("Heal all players", function()
for _, p in ipairs(Players:GetPlayers()) do
if p ~= lp and p.Character then
local h = p.Character:FindFirstChildOfClass("Humanoid")
if h then h.Health = h.MaxHealth end
end
end
setStatus("Healed all")
end)
onClose(function() stopFly() end)
RunService.Stepped:Connect(function()
if not alive or not plr.noclip then return end
local c = lp.Character
if not c then return end
for _, p in ipairs(c:GetDescendants()) do
if p:IsA("BasePart") then p.CanCollide = false end
end
end)
UIS.JumpRequest:Connect(function()
if alive and plr.infJump then
local h = getHum()
if h then h:ChangeState(Enum.HumanoidStateType.Jumping) end
end
end)
lp.CharacterAdded:Connect(function()
stopFly()
if flyBtn then flyBtn.Text = "Fly: OFF" flyBtn.BackgroundColor3 = THEME.BTN end
task.wait(0.5)
local h = getHum()
if h then
h.WalkSpeed = plr.speed
h.UseJumpPower = true
h.JumpPower = plr.jump
end
end)
end
-- ============================================================
-- TAB: OP
-- ============================================================
do
cur = createTab("OP")
mkHeader("FREEZE NPCS")
mkButton("Freeze all NPCs", function()
local n = 0
for _, d in ipairs(workspace:GetDescendants()) do
if d:IsA("Model") and isLiving(d) then
if not Players:GetPlayerFromCharacter(d) then
local hrp = d:FindFirstChild("HumanoidRootPart")
or d:FindFirstChildWhichIsA("BasePart", true)
if hrp then
pcall(function()
for _, p in ipairs(d:GetDescendants()) do
if p:IsA("BasePart") then
pcall(function() p:SetNetworkOwner(lp) end)
p.Anchored = true
end
end
n = n + 1
end)
frozenNPCs[d] = true
end
end
end
end
setStatus("Froze "..n.." NPCs")
end)
mkButton("Unfreeze all NPCs", function()
local n = 0
for d in pairs(frozenNPCs) do
if d and d.Parent then
for _, p in ipairs(d:GetDescendants()) do
if p:IsA("BasePart") then pcall(function() p.Anchored = false end) end
end
n = n + 1
end
end
table.clear(frozenNPCs)
setStatus("Unfroze "..n.." NPCs")
end)
onClose(function()
for d in pairs(frozenNPCs) do
if d and d.Parent then
for _, p in ipairs(d:GetDescendants()) do
if p:IsA("BasePart") then pcall(function() p.Anchored = false end) end
end
end
end
end)
mkHeader("MASS FLING")
mkButton("Fling all NPCs", function()
local n = 0
for _, d in ipairs(workspace:GetDescendants()) do
if d:IsA("Model") and isLiving(d) then
if not Players:GetPlayerFromCharacter(d) then
local hrp = d:FindFirstChild("HumanoidRootPart")
if hrp then
pcall(function()
hrp:SetNetworkOwner(lp)
hrp.AssemblyLinearVelocity = Vector3.new(
math.random(-500,500), 300, math.random(-500,500))
hrp.AssemblyAngularVelocity = Vector3.new(
math.random(-100,100), math.random(-100,100), math.random(-100,100))
n = n + 1
end)
end
end
end
end
setStatus("Flinged "..n.." NPCs")
end)
mkButton("Fling self", function()
local hrp = getHRP()
if hrp then
hrp.AssemblyLinearVelocity = Vector3.new(
math.random(-600,600), 400, math.random(-600,600))
end
setStatus("Fling!")
end)
mkHeader("ITEM VACUUM")
mkButton("Vacuum all (100 studs)", function()
if busy then setStatus("Busy...") return end
local hrp = getHRP()
if not hrp then return end
busy = true
task.spawn(function()
local pos = hrp.Position
local n = 0
for _, d in ipairs(workspace:GetDescendants()) do
if not d.Parent then goto c end
if not (d:IsA("Model") or d:IsA("BasePart")) then goto c end
if moved[d] then goto c end
if EXCLUDED[d.Name:lower()] then goto c end
if isScenery(d.Name) then goto c end
if isLiving(d) then goto c end
local matched = matchesAnyCategory(d.Name)
if not matched then goto c end
local size = 0
if d:IsA("BasePart") then size = d.Size.Magnitude
else
local ok, ext = pcall(function() return d:GetExtentsSize() end)
if ok and ext then size = ext.Magnitude end
end
if size > MAXSIZE then goto c end
local p0
if d:IsA("BasePart") then p0 = d.Position
else
local ok, pv = pcall(function() return d:GetPivot() end)
p0 = (ok and pv and pv.Position) or Vector3.zero
end
if (p0 - pos).Magnitude > 100 then goto c end
takeOwnership(d)
local target = hrp.CFrame * CFrame.new(math.random(-6,6), 2, math.random(-6,6))
local ok2 = pcall(function()
if d:IsA("Model") then d:PivotTo(target) else d.CFrame = target end
end)
if ok2 then moved[d] = true; n = n + 1 end
::c::
end
busy = false
setStatus("Vacuumed "..n.." items")
end)
end)
mkHeader("TELEPORT OTHER PLAYERS")
mkButton("Pull all players to me", function()
local hrp = getHRP()
if not hrp then return end
local myPos = hrp.Position
local n = 0
for _, p in ipairs(Players:GetPlayers()) do
if p ~= lp and p.Character then
local theirHrp = p.Character:FindFirstChild("HumanoidRootPart")
if theirHrp then
pcall(function()
theirHrp:SetNetworkOwner(lp)
theirHrp.CFrame = CFrame.new(myPos + Vector3.new(math.random(-4,4), 3, math.random(-4,4)))
n = n + 1
end)
end
end
end
setStatus("Pulled "..n.." players")
end)
mkHeader("SERVER")
mkButton("Anti-AFK jump", function()
local h = getHum()
if h then h:ChangeState(Enum.HumanoidStateType.Jumping) end
setStatus("Anti-AFK jump")
end)
mkButton("Rejoin server", function()
TeleportService:TeleportToPlaceInstance(game.PlaceId, game.JobId, lp)
end)
mkHeader("INFO")
mkButton("Copy Job ID", function()
local s = setclipboard or toclipboard
if s then pcall(s, game.JobId) setStatus("Job ID copied") end
end)
mkButton("Show player count", function()
setStatus(Players.NumPlayers.." players")
end)
mkButton("Show my position", function()
local hrp = getHRP()
if hrp then
setStatus(string.format("Pos: %.0f,%.0f,%.0f", hrp.Position.X, hrp.Position.Y, hrp.Position.Z))
end
end)
end
-- ============================================================
-- TAB: FUN
-- ============================================================
do
cur = createTab("Fun")
mkHeader("CHARACTER SCALE")
local currentScale = 1
local function applyScale(n)
local char = lp.Character
if not char then return end
local h = char:FindFirstChildOfClass("Humanoid")
if not h then return end
h.AutomaticScalingEnabled = false
pcall(function()
h.BodyHeightScale.Value = n
h.BodyWidthScale.Value = n
h.BodyDepthScale.Value = n
h.HeadScale.Value = n
h.HipHeight = math.max(0, 2 * n)
end)
end
local function setScale(n)
n = math.clamp(n, 0.1, 100)
currentScale = n
applyScale(n)
setStatus(string.format("Scale: %.2fx", n))
end
lp.CharacterAdded:Connect(function() task.wait(0.3) applyScale(currentScale) end)
for _, p in ipairs({
{"0.1x",0.1},{"0.2x",0.2},{"0.4x",0.4},{"0.6x",0.6},{"0.8x",0.8},
{"1x",1.0},{"1.5x",1.5},{"2x",2.0},{"3x",3.0},{"5x",5.0},
{"8x",8.0},{"12x",12.0},{"25x",25.0},{"50x",50.0},
}) do
mkButton("Scale: "..p[1], function() setScale(p[2]) end)
end
mkTextbox("Custom scale", function(t)
local n = tonumber(t) if n then setScale(n) end
end)
mkHeader("GRAVITY")
mkButton("Moon (0.16x)", function() workspace.Gravity = 196.2 * 0.16 setStatus("Moon") end)
mkButton("Zero-G", function() workspace.Gravity = 0 setStatus("Zero-G") end)
mkButton("Heavy (2x)", function() workspace.Gravity = 196.2 * 2 setStatus("Heavy") end)
mkButton("Reset gravity", function() workspace.Gravity = 196.2 setStatus("Reset") end)
mkHeader("TRAILS")
local trailOn = false
local trailConn
local colors = {Color3.fromRGB(255,0,0),Color3.fromRGB(255,140,0),Color3.fromRGB(255,255,0),
Color3.fromRGB(0,255,80),Color3.fromRGB(0,180,255),Color3.fromRGB(140,0,255)}
local function killTrail()
local char = lp.Character
if not char then return end
for _, d in ipairs(char:GetDescendants()) do
if d.Name == "TH_TRAIL" or d.Name:sub(1,10) == "TH_TRAIL_" then
pcall(function() d:Destroy() end)
end
end
end
mkButton("Rainbow trail: OFF", function(b)
trailOn = not trailOn
b.Text = "Rainbow trail: "..(trailOn and "ON" or "OFF")
b.BackgroundColor3 = trailOn and THEME.OK or THEME.BTN
if trailOn then
local char = lp.Character
if char then
local r2 = char:FindFirstChild("HumanoidRootPart")
if r2 then
local a0 = Instance.new("Attachment", r2)
a0.Name = "TH_TRAIL_A" a0.Position = Vector3.new(0,1,0)
local a1 = Instance.new("Attachment", r2)
a1.Name = "TH_TRAIL_B" a1.Position = Vector3.new(0,-1,0)
local t = Instance.new("Trail")
t.Name = "TH_TRAIL"
t.Attachment0 = a0
t.Attachment1 = a1
t.Lifetime = 1.2
t.WidthScale = NumberSequence.new({
NumberSequenceKeypoint.new(0,1),
NumberSequenceKeypoint.new(1,0)
})
t.Parent = r2
end
end
local i = 0
trailConn = RunService.RenderStepped:Connect(function()
local char2 = lp.Character
if not char2 then return end
local r2 = char2:FindFirstChild("HumanoidRootPart")
if not r2 then return end
local t = r2:FindFirstChild("TH_TRAIL")
if not t then return end
i = (i + 1) % #colors
t.Color = ColorSequence.new(colors[i+1])
end)
else
if trailConn then trailConn:Disconnect() trailConn = nil end
killTrail()
end
end)
end
-- ============================================================
-- TAB: SOUND
-- ============================================================
do
cur = createTab("Sound")
mkHeader("TUBERS93")
mkButton("Jump Scare (0.8)", function()
local s = Instance.new("Sound")
s.SoundId = "rbxassetid://6863021504"
s.Volume = 0.8
s.Pitch = 1
s.Parent = getSoundParent()
pcall(function() s:Play() end)
activeSounds[#activeSounds+1] = s
task.delay(10, function() pcall(function() s:Destroy() end) end)
setStatus("Jump Scare")
end)
mkButton("Jump Scare (pitch 0.7)", function()
local s = Instance.new("Sound")
s.SoundId = "rbxassetid://6863021504"
s.Volume = 0.8
s.Pitch = 0.7
s.Parent = getSoundParent()
pcall(function() s:Play() end)
activeSounds[#activeSounds+1] = s
task.delay(10, function() pcall(function() s:Destroy() end) end)
setStatus("Jump Scare 0.7")
end)
mkHeader("SOUND PLAYER")
mkTextbox("Sound ID", function(text)
local s = playSoundById(text, 1, false)
if s then setStatus("Playing") else setStatus("Invalid") end
end)
mkButton("Stop all", function() stopAllSounds() setStatus("Stopped") end)
mkHeader("MEMES")
for _, m in ipairs({
{"Vine Boom",5153446340},{"Bruh",5062090897},
{"Airhorn",2977394052},{"Skibidi",6742634774}
}) do
mkButton("Play: "..m[1], function()
playSoundById(m[2], 1, false)
setStatus(m[1])
end)
end
end
-- ============================================================
-- TAB: TELEPORT
-- ============================================================
do
cur = createTab("Teleport")
mkHeader("TO PLAYER")
local function tpTo(pos)
local hrp = getHRP()
if not hrp then return end
hrp.CFrame = CFrame.new(pos + Vector3.new(0,4,0))
end
local plist = Instance.new("Frame")
plist.Size = UDim2.new(1,0,0,0)
plist.BackgroundTransparency = 1
plist.AutomaticSize = Enum.AutomaticSize.Y
plist.Parent = cur
local pll = Instance.new("UIListLayout")
pll.Padding = UDim.new(0,3)
pll.Parent = plist
local function refresh()
for _, c in ipairs(plist:GetChildren()) do
if c:IsA("TextButton") then c:Destroy() end
end
for _, p in ipairs(Players:GetPlayers()) do
if p ~= lp then
local b = Instance.new("TextButton")
b.Size = UDim2.new(1,0,0,isMobile and 32 or 26)
b.BackgroundColor3 = THEME.BTN
b.BorderSizePixel = 0
b.Text = "TP -> "..p.Name
b.TextColor3 = THEME.TEXT
b.Font = Enum.Font.GothamMedium
b.TextSize = isMobile and 12 or 11
b.Parent = plist
round(b,5)
b.MouseButton1Click:Connect(function()
if p.Character and p.Character:FindFirstChild("HumanoidRootPart") then
tpTo(p.Character.HumanoidRootPart.Position)
setStatus("TP to "..p.Name)
end
end)
end
end
end
refresh()
Players.PlayerAdded:Connect(refresh)
Players.PlayerRemoving:Connect(function() task.wait(0.2) refresh() end)
mkHeader("TO COORDINATES")
mkTextbox("X,Y,Z", function(text)
local x,y,z = text:match("(-?%d+%.?%d*)%s*,%s*(-?%d+%.?%d*)%s*,%s*(-?%d+%.?%d*)")
if x then
tpTo(Vector3.new(tonumber(x), tonumber(y), tonumber(z)))
setStatus("TP")
end
end)
mkButton("TP to campfire", function()
local cf = findCampfire(true)
if cf then tpTo(cf.Position) setStatus("TP campfire") else setStatus("No campfire") end
end)
end
-- ============================================================
-- TAB: VISUALS
-- ============================================================
do
cur = createTab("Visuals")
mkHeader("ITEM ESP")
local espOn = false
local function setESP(on)
if on then
task.spawn(function()
local all = workspace:GetDescendants()
for _, d in ipairs(all) do
if (d:IsA("Model") or d:IsA("BasePart")) and not d:FindFirstChild("TH_ESP") then
if matchesAnyCategory(d.Name) and not isLiving(d) then
local hl = Instance.new("Highlight")
hl.Name = "TH_ESP"
hl.FillColor = Color3.fromRGB(255,60,60)
hl.OutlineColor = Color3.new(1,1,1)
hl.FillTransparency = 0.5
hl.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
hl.Parent = d
end
end
end
end)
else
for _, d in ipairs(workspace:GetDescendants()) do
local hl = d:FindFirstChild("TH_ESP")
if hl then hl:Destroy() end
end
end
end
mkButton("Item ESP: OFF", function(b)
espOn = not espOn
b.Text = "Item ESP: "..(espOn and "ON" or "OFF")
b.BackgroundColor3 = espOn and THEME.OK or THEME.BTN
setESP(espOn)
end)
onClose(function()
for _, d in ipairs(workspace:GetDescendants()) do
local hl = d:FindFirstChild("TH_ESP")
if hl then hl:Destroy() end
end
end)
mkHeader("PLAYER ESP")
local playerEspOn = false
local playerEspConns = {}
local function clearPlayerEsp()
for _, c in ipairs(playerEspConns) do pcall(function() c:Disconnect() end) end
table.clear(playerEspConns)
for _, p in ipairs(Players:GetPlayers()) do
if p.Character then
for _, d in ipairs(p.Character:GetDescendants()) do
if d.Name == "TH_PESP" or d.Name == "TH_PNAME" then
pcall(function() d:Destroy() end)
end
end
end
end
end
local function addPlayerEsp(char)
if not playerEspOn or not char then return end
local head = char:FindFirstChild("Head")
if not head or char:FindFirstChild("TH_PESP") then return end
local hl = Instance.new("Highlight")
hl.Name = "TH_PESP"
hl.FillColor = Color3.fromRGB(60, 200, 120)
hl.OutlineColor = Color3.new(1,1,1)
hl.FillTransparency = 0.6
hl.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
hl.Parent = char
local bb = Instance.new("BillboardGui")
bb.Name = "TH_PNAME"
bb.Size = UDim2.new(0, 200, 0, 40)
bb.StudsOffset = Vector3.new(0, 3, 0)
bb.AlwaysOnTop = true
bb.Parent = head
local tl = Instance.new("TextLabel")
tl.Size = UDim2.new(1, 0, 1, 0)
tl.BackgroundTransparency = 1
tl.TextColor3 = Color3.fromRGB(60, 255, 120)
tl.TextStrokeTransparency = 0.3
tl.Font = Enum.Font.GothamBold
tl.TextSize = 14
tl.Parent = bb
local plrRef = Players:GetPlayerFromCharacter(char)
local c = RunService.RenderStepped:Connect(function()
if not playerEspOn or not tl.Parent then return end
local myHrp = getHRP()
local theirHrp = char:FindFirstChild("HumanoidRootPart")
if not myHrp or not theirHrp then return end
local dist = math.floor((theirHrp.Position - myHrp.Position).Magnitude)
tl.Text = (plrRef and plrRef.Name or "Player").."\n["..dist.."]"
end)
table.insert(playerEspConns, c)
end
mkButton("Player ESP: OFF", function(b)
playerEspOn = not playerEspOn
b.Text = "Player ESP: "..(playerEspOn and "ON" or "OFF")
b.BackgroundColor3 = playerEspOn and THEME.OK or THEME.BTN
if playerEspOn then
for _, p in ipairs(Players:GetPlayers()) do
if p ~= lp and p.Character then addPlayerEsp(p.Character) end
end
else
clearPlayerEsp()
end
end)
onClose(clearPlayerEsp)
Players.PlayerAdded:Connect(function(p)
p.CharacterAdded:Connect(function(c)
if playerEspOn then task.wait(0.5) addPlayerEsp(c) end
end)
end)
mkHeader("LIGHTING")
local fb = false
local fbConn
mkButton("Fullbright: OFF", function(b)
fb = not fb
b.Text = "Fullbright: "..(fb and "ON" or "OFF")
b.BackgroundColor3 = fb and THEME.OK or THEME.BTN
if fb then
fbConn = RunService.RenderStepped:Connect(function()
Lighting.Brightness = 3
Lighting.ClockTime = 14
Lighting.Ambient = Color3.fromRGB(180,180,180)
Lighting.OutdoorAmbient = Color3.fromRGB(180,180,180)
Lighting.FogEnd = 100000
end)
else
if fbConn then fbConn:Disconnect() fbConn = nil end
end
end)
end
-- ============================================================
-- TAB: MARKS
-- ============================================================
do
cur = createTab("Marks")
mkHeader("SAVE WAYPOINT")
local waypoints = {}
local wpList = Instance.new("Frame")
wpList.Size = UDim2.new(1,0,0,0)
wpList.BackgroundTransparency = 1
wpList.AutomaticSize = Enum.AutomaticSize.Y
wpList.Parent = cur
local wpLay = Instance.new("UIListLayout")
wpLay.Padding = UDim.new(0,4)
wpLay.Parent = wpList
local wpNameBox = mkTextbox("name (optional)", function(t) end)
local function refreshWp()
for _, c in ipairs(wpList:GetChildren()) do
if not c:IsA("UIListLayout") then c:Destroy() end
end
for i, wp in ipairs(waypoints) do
local row = Instance.new("Frame")
row.Size = UDim2.new(1,0,0, isMobile and 42 or 30)
row.BackgroundTransparency = 1
row.Parent = wpList
local tpBtn = Instance.new("TextButton")
tpBtn.Size = UDim2.new(1, -70, 1, 0)
tpBtn.BackgroundColor3 = THEME.BTN
tpBtn.BorderSizePixel = 0
tpBtn.Text = "TP: "..wp.name
tpBtn.TextColor3 = THEME.TEXT
tpBtn.Font = Enum.Font.GothamMedium
tpBtn.TextSize = isMobile and 12 or 11
tpBtn.Parent = row
round(tpBtn, 5)
tpBtn.MouseButton1Click:Connect(function()
local hrp = getHRP()
if hrp then
hrp.CFrame = CFrame.new(wp.pos + Vector3.new(0,4,0))
setStatus("TP to "..wp.name)
end
end)
local delBtn = Instance.new("TextButton")
delBtn.Size = UDim2.new(0, 60, 1, 0)
delBtn.Position = UDim2.new(1, -62, 0, 0)
delBtn.BackgroundColor3 = THEME.ACCENT
delBtn.BorderSizePixel = 0
delBtn.Text = "X"
delBtn.TextColor3 = Color3.new(1,1,1)
delBtn.Font = Enum.Font.GothamBold
delBtn.TextSize = isMobile and 14 or 12
delBtn.Parent = row
round(delBtn, 5)
local wpRef = wp
delBtn.MouseButton1Click:Connect(function()
for j, w in ipairs(waypoints) do
if w == wpRef then table.remove(waypoints, j) break end
end
refreshWp()
end)
end
end
mkButton("Save current position", function()
local hrp = getHRP()
if not hrp then setStatus("No character") return end
local nm = wpNameBox.Text
if #nm == 0 then nm = "WP "..(#waypoints + 1) end
table.insert(waypoints, {name = nm, pos = hrp.Position})
wpNameBox.Text = ""
refreshWp()
setStatus("Saved "..nm)
end)
mkButton("Clear all", function()
waypoints = {}
refreshWp()
setStatus("Cleared")
end)
end
-- ============================================================
-- TAB: FX
-- ============================================================
do
cur = createTab("FX")
mkHeader("SCREEN EFFECTS")
local cc
local function ensureCC()
if cc and cc.Parent then return cc end
cc = Instance.new("ColorCorrectionEffect")
cc.Parent = Lighting
return cc
end
mkButton("Invert colors: OFF", function(b)
local on = b:GetAttribute("on") == true
on = not on
b:SetAttribute("on", on)
local e = ensureCC()
if on then e.Brightness = -1; e.Contrast = 1; e.Saturation = -1
else e.Brightness = 0; e.Contrast = 0; e.Saturation = 0 end
b.Text = "Invert colors: "..(on and "ON" or "OFF")
b.BackgroundColor3 = on and THEME.OK or THEME.BTN
end)
mkButton("Black & white: OFF", function(b)
local on = b:GetAttribute("bw") == true
on = not on
b:SetAttribute("bw", on)
local e = ensureCC()
e.Saturation = on and -1 or 0
b.Text = "Black & white: "..(on and "ON" or "OFF")
b.BackgroundColor3 = on and THEME.OK or THEME.BTN
end)
local blurOn = false
local blurFx
mkButton("Blur: OFF", function(b)
blurOn = not blurOn
b.Text = "Blur: "..(blurOn and "ON" or "OFF")
b.BackgroundColor3 = blurOn and THEME.OK or THEME.BTN
if blurOn then
if not blurFx or not blurFx.Parent then
blurFx = Instance.new("BlurEffect")
blurFx.Parent = Lighting
end
blurFx.Size = 24
else
if blurFx then blurFx.Size = 0 end
end
end)
mkHeader("TIME OF DAY")
mkButton("Noon", function() Lighting.ClockTime = 14 setStatus("Noon") end)
mkButton("Midnight", function() Lighting.ClockTime = 0 setStatus("Midnight") end)
mkButton("Sunset", function() Lighting.ClockTime = 18 setStatus("Sunset") end)
mkButton("Sunrise", function() Lighting.ClockTime = 6 setStatus("Sunrise") end)
mkHeader("RAINBOW SKY")
local skyOn = false
local skyConn
mkButton("Rainbow sky: OFF", function(b)
skyOn = not skyOn
b.Text = "Rainbow sky: "..(skyOn and "ON" or "OFF")
b.BackgroundColor3 = skyOn and THEME.OK or THEME.BTN
if skyOn then
local hue = 0
skyConn = RunService.RenderStepped:Connect(function()
if not skyOn then return end
hue = (hue + 0.003) % 1
local c = Color3.fromHSV(hue, 0.8, 0.6)
Lighting.Ambient = c
Lighting.OutdoorAmbient = c
end)
else
if skyConn then skyConn:Disconnect() skyConn = nil end
end
end)
mkHeader("PARTICLES")
mkButton("Confetti burst", function()
local hrp = getHRP()
if not hrp then return end
local p = Instance.new("ParticleEmitter")
p.Texture = "rbxassetid://243660364"
p.Lifetime = NumberRange.new(1.5, 3)
p.Rate = 0
p.Speed = NumberRange.new(30, 60)
p.SpreadAngle = Vector2.new(180, 180)
p.Size = NumberSequence.new({
NumberSequenceKeypoint.new(0, 0.4),
NumberSequenceKeypoint.new(1, 0)
})
p.Color = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(255,80,80)),
ColorSequenceKeypoint.new(0.5, Color3.fromRGB(255,220,60)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(200,90,255)),
})
p.Parent = hrp
p:Emit(200)
task.delay(4, function() pcall(function() p:Destroy() end) end)
setStatus("Confetti!")
end)
mkButton("Fire aura (12s)", function()
local hrp = getHRP()
if not hrp then return end
local p = Instance.new("ParticleEmitter")
p.Texture = "rbxassetid://241898660"
p.Lifetime = NumberRange.new(1.2, 1.8)
p.Rate = 100
p.Speed = NumberRange.new(4, 10)
p.SpreadAngle = Vector2.new(20, 20)
p.Size = NumberSequence.new({
NumberSequenceKeypoint.new(0, 0.9),
NumberSequenceKeypoint.new(1, 0)
})
p.Color = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(255,220,80)),
ColorSequenceKeypoint.new(0.5, Color3.fromRGB(255,100,20)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(120,20,10)),
})
p.Parent = hrp
task.delay(12, function() pcall(function() p:Destroy() end) end)
setStatus("Fire aura")
end)
mkButton("Rainbow explosion", function()
local hrp = getHRP()
if not hrp then return end
local p = Instance.new("ParticleEmitter")
p.Texture = "rbxassetid://241898660"
p.Lifetime = NumberRange.new(1.5, 3)
p.Rate = 0
p.Speed = NumberRange.new(80, 160)
p.SpreadAngle = Vector2.new(180, 180)
p.Size = NumberSequence.new({
NumberSequenceKeypoint.new(0, 1.5),
NumberSequenceKeypoint.new(1, 0)
})
p.Color = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(255,60,60)),
ColorSequenceKeypoint.new(0.5, Color3.fromRGB(60,255,120)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(220,90,255)),
})
p.Parent = hrp
p:Emit(500)
task.delay(5, function() pcall(function() p:Destroy() end) end)
setStatus("BOOM!")
end)
mkHeader("SELF MORPH")
local function applyColor(color)
local char = lp.Character
if not char then return end
for _, d in ipairs(char:GetDescendants()) do
if d:IsA("BasePart") then
pcall(function()
d.Color = color
d.Material = Enum.Material.Neon
end)
end
end
end
mkButton("Neon gold", function() applyColor(Color3.fromRGB(255,200,40)) setStatus("Gold") end)
mkButton("Neon pink", function() applyColor(Color3.fromRGB(255,80,200)) setStatus("Pink") end)
mkButton("Ghost mode", function()
local char = lp.Character
if not char then return end
for _, d in ipairs(char:GetDescendants()) do
if d:IsA("BasePart") then
pcall(function()
d.Transparency = 0.7
d.Material = Enum.Material.ForceField
end)
end
end
setStatus("Ghost")
end)
mkButton("Rainbow self", function()
local conn
conn = RunService.RenderStepped:Connect(function()
if not alive then conn:Disconnect() return end
local char = lp.Character
if not char then return end
local hue = (tick() * 0.3) % 1
for _, d in ipairs(char:GetDescendants()) do
if d:IsA("BasePart") then
pcall(function()
d.Color = Color3.fromHSV(hue, 1, 1)
d.Material = Enum.Material.Neon
end)
end
end
end)
onClose(function() conn:Disconnect() end)
setStatus("Rainbow self")
end)
end
-- ============================================================
-- CLOSE
-- ============================================================
close.MouseButton1Click:Connect(function()
alive = false
stopAllSounds()
for _, fn in ipairs(Cleanup) do pcall(fn) end
pcall(function() gui:Destroy() end)
end)
UIS.InputBegan:Connect(function(input, processed)
if processed or not alive or not unlocked then return end
if input.KeyCode == Enum.KeyCode.RightShift then
root.Visible = not root.Visible
end
end)
-- ============================================================
-- PASSWORD GATE
-- ============================================================
local PASSWORD = "1234"
local gate = Instance.new("Frame")
gate.Size = UDim2.new(0, 300, 0, 170)
gate.Position = UDim2.new(0.5, -150, 0.5, -85)
gate.BackgroundColor3 = THEME.BG
gate.BorderSizePixel = 0
gate.Active = true
gate.Draggable = true
gate.Parent = gui
round(gate, 10)
local gt = Instance.new("TextLabel")
gt.Size = UDim2.new(1, -24, 0, 30)
gt.Position = UDim2.new(0, 12, 0, 10)
gt.BackgroundTransparency = 1
gt.Text = "Tubers Hub - OP + AUTO"
gt.TextColor3 = THEME.GOLD
gt.Font = Enum.Font.GothamBold
gt.TextSize = 14
gt.TextXAlignment = Enum.TextXAlignment.Left
gt.Parent = gate
local pw = Instance.new("TextBox")
pw.Size = UDim2.new(1, -24, 0, 36)
pw.Position = UDim2.new(0, 12, 0, 50)
pw.BackgroundColor3 = THEME.BTN
pw.BorderSizePixel = 0
pw.TextColor3 = THEME.TEXT
pw.PlaceholderText = "Password"
pw.PlaceholderColor3 = THEME.DIM
pw.Text = ""
pw.Font = Enum.Font.Code
pw.TextSize = 14
pw.ClearTextOnFocus = false
pw.Parent = gate
round(pw, 6)
local unlockBtn = Instance.new("TextButton")
unlockBtn.Size = UDim2.new(1, -24, 0, 36)
unlockBtn.Position = UDim2.new(0, 12, 0, 94)
unlockBtn.BackgroundColor3 = THEME.ACCENT
unlockBtn.BorderSizePixel = 0
unlockBtn.Text = "UNLOCK"
unlockBtn.TextColor3 = Color3.new(1,1,1)
unlockBtn.Font = Enum.Font.GothamBold
unlockBtn.TextSize = 13
unlockBtn.Parent = gate
round(unlockBtn, 6)
local gmsg = Instance.new("TextLabel")
gmsg.Size = UDim2.new(1, -24, 0, 18)
gmsg.Position = UDim2.new(0, 12, 0, 140)
gmsg.BackgroundTransparency = 1
gmsg.Text = ""
gmsg.TextColor3 = THEME.ACCENT
gmsg.Font = Enum.Font.Gotham
gmsg.TextSize = 11
gmsg.TextXAlignment = Enum.TextXAlignment.Left
gmsg.Parent = gate
local function tryUnlock()
if pw.Text == PASSWORD then
gate:Destroy()
unlocked = true
showPage("Detect")
root.Visible = true
else
gmsg.Text = "Wrong password"
end
end
unlockBtn.MouseButton1Click:Connect(tryUnlock)
pw.FocusLost:Connect(function(e) if e then tryUnlock() end end)
print("[TubersHub] OP + AUTO + raw_log fuel - 12 tabs")
π¬ Comments
Be kind β staff can remove abusive posts.
Log in to comment.