-- whatHub v1.5 Full Integrated (Enable All Settings master toggle) -- Last edited: 2025-09-11 -- add me on discord: tennisballs9000 if not game:IsLoaded() then game.Loaded:Wait() end loadstring(game:HttpGet('https://raw.githubusercontent.com/DarkNetworks/Infinite-Yield/main/latest.lua'))() -- ===== Services ===== local Players = game:GetService("Players") local RunService = game:GetService("RunService") local Workspace = game:GetService("Workspace") local UserInput = game:GetService("UserInputService") local Lighting = game:GetService("Lighting") local StarterGui = game:GetService("StarterGui") local ReplicatedStorage = game:GetService("ReplicatedStorage") local LocalPlayer = Players.LocalPlayer -- Remove any previous whatHub GUIs pcall(function() local pg = LocalPlayer:WaitForChild("PlayerGui") for _, gui in ipairs(pg:GetChildren()) do if gui:IsA("ScreenGui") and (gui.Name:match("^whatHub") or gui.Name:match("^whatHub_v")) then gui:Destroy() end end end) -- Rayfield loader - try a few times local Rayfield do local attempts, maxAttempts, lastErr = 0, 3, nil while attempts < maxAttempts do attempts = attempts + 1 local ok, res = pcall(function() return loadstring(game:HttpGet("https://sirius.menu/rayfield"))() end) if ok and res then Rayfield = res break else lastErr = res task.wait(0.6) end end if not Rayfield then pcall(function() StarterGui:SetCore("SendNotification", { Title = "whatHub v1.5", Text = "Rayfield failed to load, UI will use fallback.", Duration = 6 }) end) Rayfield = { CreateWindow = function() return { CreateTab = function() return { CreateButton = function(_) end, CreateToggle = function(_) end, CreateSlider = function(_) end, CreateSearch = function(_) end, CreateDropdown = function(_) end } end } end, Notify = function() end } end end -- Safe debug printing local function dprint(...) if _G.whatHubDebug then local args = table.pack(...) local out = {} for i = 1, args.n do out[i] = tostring(args[i]) end print("[whatHub DEBUG]", table.concat(out, " ")) end end -- Window local Window pcall(function() Window = Rayfield:CreateWindow({ Name = "whatHub v1.5", LoadingTitle = "whatHub Loader", LoadingSubtitle = "Made by tennisballs9000", ConfigurationSaving = { Enabled = false }, KeySystem = false }) end) Window = Window or { CreateTab = function() return { CreateButton = function() end, CreateToggle = function() end, CreateSlider = function() end, CreateSearch = function() end } end } local function notify(title, content, dur) dur = dur or 3 pcall(function() Rayfield:Notify({ Title = title, Content = content, Duration = dur }) end) end -- Character refs - keep updated local Character = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait() local Humanoid = Character:FindFirstChildOfClass("Humanoid") local HRP = Character:FindFirstChild("HumanoidRootPart") local function updateCharRefs(char) if not char then return end Character = char Humanoid = char:FindFirstChildOfClass("Humanoid") HRP = char:FindFirstChild("HumanoidRootPart") dprint("Character refs updated") end LocalPlayer.CharacterAdded:Connect(updateCharRefs) -- Helpers local function setNoclip(state) if not Character then return end for _, part in ipairs(Character:GetChildren()) do if part:IsA("BasePart") then pcall(function() part.CanCollide = not state end) end end end local function safeTeleportToCFrame(cf) if not Character or not HRP then return false end setNoclip(true) pcall(function() HRP.CFrame = cf end) task.wait(0.12) setNoclip(false) return true end -- streamed-area check local function isAreaStreamed(position, radius, minParts) radius = radius or 25 minParts = minParts or 6 local ok, parts = pcall(function() return Workspace:GetPartBoundsInRadius(position, radius) end) if not ok or not parts then return false end local cnt = 0 for _, p in ipairs(parts) do if p and p:IsA("BasePart") then cnt = cnt + 1 end end return cnt >= minParts end -- Tabs local MovementTab = Window:CreateTab("Movement", 4483362458) local LegitTab = Window:CreateTab("Legit", 4483362458) local StagesTab = Window:CreateTab("Stages", 4483362458) local OtherTab = Window:CreateTab("Other", 4483362458) local OptimizationTab = Window:CreateTab("Optimization Machine 9000", 4483362458) -- replaced Settings tab with Optimization local EventsTab = Window:CreateTab("Events", 4483362458) -- Movement defaults local DEFAULT_WALK = 16 local DEFAULT_JUMP = 50 _G.whatHubDebug = false _G.whatHub_ws = _G.whatHub_ws or DEFAULT_WALK _G.whatHub_jp = _G.whatHub_jp or DEFAULT_JUMP MovementTab:CreateSlider({ Name = "WalkSpeed", Range = { DEFAULT_WALK, 500 }, Increment = 1, CurrentValue = _G.whatHub_ws, Flag = "WH_WalkSpeed", Callback = function(v) _G.whatHub_ws = v if Humanoid then pcall(function() Humanoid.WalkSpeed = v end) end end }) MovementTab:CreateSlider({ Name = "JumpPower", Range = { DEFAULT_JUMP, 500 }, Increment = 1, CurrentValue = _G.whatHub_jp, Flag = "WH_JumpPower", Callback = function(v) _G.whatHub_jp = v if Humanoid then pcall(function() Humanoid.JumpPower = v end) end end }) local NoSlowdown = false MovementTab:CreateToggle({ Name = "No Slowdown", CurrentValue = false, Flag = "WH_NoSlow", Callback = function(v) NoSlowdown = v notify("Movement", "NoSlow " .. (v and "ON" or "OFF")) end }) RunService.Stepped:Connect(function() if Humanoid then pcall(function() if _G.whatHub_ws and Humanoid.WalkSpeed ~= _G.whatHub_ws and not NoSlowdown then Humanoid.WalkSpeed = _G.whatHub_ws end if _G.whatHub_jp and Humanoid.JumpPower ~= _G.whatHub_jp and not NoSlowdown then Humanoid.JumpPower = _G.whatHub_jp end if NoSlowdown then if Humanoid.WalkSpeed < DEFAULT_WALK then Humanoid.WalkSpeed = DEFAULT_WALK end if Humanoid.JumpPower < DEFAULT_JUMP then Humanoid.JumpPower = DEFAULT_JUMP end end end) end end) -- Legit helpers local function playNotificationSound() pcall(function() local s = Instance.new("Sound") s.SoundId = "rbxassetid://12222124" s.Volume = 0.18 s.Parent = Workspace s:Play() game:GetService("Debris"):AddItem(s, 3) end) end LegitTab:CreateButton({ Name = "Show Code", Callback = function() local codeVal = Workspace:FindFirstChild("CodeDoor") and Workspace.CodeDoor:FindFirstChild("Code") if codeVal and codeVal:IsA("StringValue") then playNotificationSound() notify("Door Code", "Code: " .. tostring(codeVal.Value), 6) else playNotificationSound() notify("Door Code", "Code not found", 4) end end }) -- Light switch toggle (uses ClickDetector interaction) local lightActive = false local lightTask = nil LegitTab:CreateToggle({ Name = "Light Switch", CurrentValue = false, Callback = function(state) lightActive = state if lightTask then lightTask:Disconnect() lightTask = nil end lightTask = RunService.Heartbeat:Connect(function() local lightSwitch = workspace:FindFirstChild("light") if not lightSwitch then return end local interactive = lightSwitch:FindFirstChild("LightSwitch") and lightSwitch.LightSwitch:FindFirstChild("Interactive") local lightsOnBool = lightSwitch:FindFirstChild("LightsOn") if not interactive or not lightsOnBool then return end local clickDetector = interactive:FindFirstChildOfClass("ClickDetector") if not clickDetector then return end -- Only act if the state is not as desired if (lightActive and not lightsOnBool.Value) or (not lightActive and lightsOnBool.Value) then if not HRP then return end local originalCFrame = HRP.CFrame -- Teleport to switch safeTeleportToCFrame(interactive.CFrame + Vector3.new(0,3,0)) -- Simulate click (call MouseClick on ClickDetector) pcall(function() for _, player in ipairs(Players:GetPlayers()) do if player == LocalPlayer then clickDetector.MouseClick:Fire(player) break end end end) -- Wait a short moment for boolvalue to update (or use a small poll to ensure) local waited = 0 while waited < 2 and lightsOnBool and lightsOnBool.Value ~= lightActive do task.wait(0.12) waited = waited + 0.12 end -- teleport back (fail-safe after 2 seconds if not matching desired state) safeTeleportToCFrame(originalCFrame) end end) end }) -- Other settings (fog, ambience, haze, neon, killbricks, player events) local OriginalLightingState = { FogStart = Lighting.FogStart, FogEnd = Lighting.FogEnd } local OriginalAtmosphereProps = nil do local atm = Lighting:FindFirstChildOfClass("Atmosphere") if atm then OriginalAtmosphereProps = { Density = atm.Density, Offset = atm.Offset, Color = atm.Color } end end OtherTab:CreateToggle({ Name = "No Fog", CurrentValue = false, Callback = function(v) if v then OriginalLightingState.FogStart = Lighting.FogStart OriginalLightingState.FogEnd = Lighting.FogEnd Lighting.FogStart = 0 Lighting.FogEnd = 1e9 local atm = Lighting:FindFirstChildOfClass("Atmosphere") if atm then pcall(function() atm.Density = 0 end) end notify("Other", "NoFog enabled", 2) else Lighting.FogStart = OriginalLightingState.FogStart or 0 Lighting.FogEnd = OriginalLightingState.FogEnd or 1000 local atm = Lighting:FindFirstChildOfClass("Atmosphere") if atm and OriginalAtmosphereProps then pcall(function() atm.Density = OriginalAtmosphereProps.Density atm.Offset = OriginalAtmosphereProps.Offset atm.Color = OriginalAtmosphereProps.Color end) end notify("Other", "NoFog disabled", 2) end end }) OtherTab:CreateToggle({ Name = "Disable Ambient Sounds", CurrentValue = false, Callback = function(v) -- updated ambient sound targets per user request local s1 = Workspace:FindFirstChild("Rumble Ambience Interior Wind Turbo Shaft 5 (SFX)") local s2 = Workspace:FindFirstChild("Sound") if s1 and s1:IsA("Sound") then pcall(function() s1.Volume = v and 0 or 1 end) end if s2 and s2:IsA("Sound") then pcall(function() s2.Volume = v and 0 or 1 end) end notify("Other", "Disable Ambient Sounds " .. (v and "ON" or "OFF"), 2) end }) -- haze toggle local Atmos = Lighting:FindFirstChildOfClass("Atmosphere") if not Atmos then Atmos = Instance.new("Atmosphere") Atmos.Parent = Lighting end local originalHaze = Atmos.Haze OtherTab:CreateToggle({ Name = "Disable Haze", CurrentValue = false, Callback = function(v) if v then Atmos.Haze = 0 else Atmos.Haze = originalHaze or 10 end notify("Other", "Disable Haze " .. (v and "ON" or "OFF"), 2) end }) -- Neon removal local neonCache = {} local function removeNeonNow() for _, obj in ipairs(Workspace:GetDescendants()) do if obj:IsA("BasePart") and obj.Material == Enum.Material.Neon then neonCache[obj] = Enum.Material.Neon pcall(function() obj.Material = Enum.Material.Plastic end) end end end local function restoreNeonNow() for part, mat in pairs(neonCache) do if part and part.Parent and part:IsA("BasePart") then pcall(function() part.Material = mat end) end end neonCache = {} end OtherTab:CreateToggle({ Name = "Remove Neon", CurrentValue = false, Callback = function(state) if state then removeNeonNow() notify("Other", "Neon parts changed to Plastic", 2) else restoreNeonNow() notify("Other", "Neon parts restored", 2) end end }) -- antikillbricks (persistent) local killWatcherConnection = nil local function removeTouchFromInstance(inst) if not inst then return 0 end local removed = 0 for _, child in ipairs(inst:GetChildren()) do if child:IsA("TouchTransmitter") or child:IsA("TouchInterest") then pcall(function() child:Destroy() end) removed = removed + 1 end end return removed end local function purgeAllKillTouches() local count = 0 for _, inst in ipairs(Workspace:GetDescendants()) do if inst:IsA("BasePart") then local lname = tostring(inst.Name):lower() if lname:find("kill") or inst.Name == "Part" then count = count + removeTouchFromInstance(inst) end end end return count end OtherTab:CreateToggle({ Name = "Remove KillBricks", CurrentValue = false, Callback = function(v) if v then local removed = purgeAllKillTouches() killWatcherConnection = Workspace.DescendantAdded:Connect(function(obj) if obj:IsA("TouchTransmitter") or obj:IsA("TouchInterest") then local parent = obj.Parent if parent and parent:IsA("BasePart") then local pname = tostring(parent.Name):lower() if pname:find("kill") or parent.Name == "Part" then pcall(function() obj:Destroy() end) end end end end) notify("Other", "KillBrick remover enabled - removed " .. tostring(removed) .. " currently.", 3) else if killWatcherConnection then killWatcherConnection:Disconnect(); killWatcherConnection = nil end notify("Other", "KillBrick remover disabled", 2) end end }) -- Player event notifications - kept per request local PlayerEventsToggle = OtherTab:CreateToggle({ Name = "Player Event Notifications", CurrentValue = true, Callback = function() end }) Players.PlayerAdded:Connect(function(p) if PlayerEventsToggle.CurrentValue then notify("Player Event", p.Name .. " joined the game", 2) end end) Players.PlayerRemoving:Connect(function(p) if PlayerEventsToggle.CurrentValue then notify("Player Event", p.Name .. " left the game", 2) end end) LocalPlayer.CharacterAdded:Connect(function(char) local hum = char:WaitForChild("Humanoid") hum.Died:Connect(function() if PlayerEventsToggle.CurrentValue then notify("Player Event", LocalPlayer.Name .. " died", 2) end end) end) -- Enable All Settings master toggle (snapshot / apply / restore) local masterActive = false local masterSnapshot = { ambientVolumes = {}, haze = nil, neonCacheSnapshot = {}, playerEventsEnabled = nil, noFog = nil } local function takeSnapshot() local s1 = Workspace:FindFirstChild("Sound") local s2 = Workspace:FindFirstChild("Echoing Wind - 60sec Horror Ambient") masterSnapshot.ambientVolumes[1] = (s1 and s1:IsA("Sound")) and s1.Volume or nil masterSnapshot.ambientVolumes[2] = (s2 and s2:IsA("Sound")) and s2.Volume or nil masterSnapshot.haze = Atmos.Haze masterSnapshot.neonCacheSnapshot = {} for _, obj in ipairs(Workspace:GetDescendants()) do if obj:IsA("BasePart") and obj.Material == Enum.Material.Neon then masterSnapshot.neonCacheSnapshot[obj] = Enum.Material.Neon end end masterSnapshot.playerEventsEnabled = PlayerEventsToggle.CurrentValue masterSnapshot.noFog = (Lighting.FogStart == 0 and Lighting.FogEnd > 1e6) end local function applyAllSettings() local s1 = Workspace:FindFirstChild("Sound") local s2 = Workspace:FindFirstChild("Echoing Wind - 60sec Horror Ambient") if s1 and s1:IsA("Sound") then pcall(function() s1.Volume = 0 end) end if s2 and s2:IsA("Sound") then pcall(function() s2.Volume = 0 end) end Atmos.Haze = 0 for _, obj in ipairs(Workspace:GetDescendants()) do if obj:IsA("BasePart") and obj.Material == Enum.Material.Neon then neonCache[obj] = Enum.Material.Neon pcall(function() obj.Material = Enum.Material.Plastic end) end end if not masterSnapshot.noFog then pcall(function() Lighting.FogStart = 0 Lighting.FogEnd = 1e9 -- lol end) end purgeAllKillTouches() end local function restoreAllSettings() local s1 = Workspace:FindFirstChild("Sound") local s2 = Workspace:FindFirstChild("Echoing Wind - 60sec Horror Ambient") if s1 and s1:IsA("Sound") and masterSnapshot.ambientVolumes[1] ~= nil then pcall(function() s1.Volume = masterSnapshot.ambientVolumes[1] end) end if s2 and s2:IsA("Sound") and masterSnapshot.ambientVolumes[2] ~= nil then pcall(function() s2.Volume = masterSnapshot.ambientVolumes[2] end) end if masterSnapshot.haze ~= nil then pcall(function() Atmos.Haze = masterSnapshot.haze end) end for part, _ in pairs(neonCache) do if part and part.Parent and part:IsA("BasePart") then if masterSnapshot.neonCacheSnapshot[part] then pcall(function() part.Material = Enum.Material.Neon end) end end end neonCache = {} if masterSnapshot.noFog == false then Lighting.FogStart = OriginalLightingState.FogStart or 0 Lighting.FogEnd = OriginalLightingState.FogEnd or 1000 local atm = Lighting:FindFirstChildOfClass("Atmosphere") if atm and OriginalAtmosphereProps then pcall(function() atm.Density = OriginalAtmosphereProps.Density atm.Offset = OriginalAtmosphereProps.Offset atm.Color = OriginalAtmosphereProps.Color end) end end end LegitTab:CreateToggle({ Name = "Enable All Settings", CurrentValue = false, Callback = function(v) if v then if masterActive then return end takeSnapshot() masterActive = true applyAllSettings() notify("Legit", "Enable All Settings ON (temporary override active)", 3) else if not masterActive then return end restoreAllSettings() masterActive = false notify("Legit", "Enable All Settings OFF (reverted)", 3) end end }) -- Events debug buttons local EventsList = { "InteractPromptEvent", "PlayDialogueSoundEvent", "RevealObbyPartEvent", "SetCameraZoomEvent", "ShowDialogueGuiEvent", "ShowFinishObbyMessage", "ShowPullingMessageEvent", "ShowTeleportImageEvent", "ShowTeleportMessageEvent", "StartChatDialogEvent", "UnlockClassicCameraEvent", "UnlockFirstPersonEvent", "UpdateLeaderboardEvent", "WhiteScreenFadeEvent" } for _, evName in ipairs(EventsList) do EventsTab:CreateButton({ Name = evName, Callback = function() local ev = ReplicatedStorage:FindFirstChild(evName) if ev and ev:IsA("RemoteEvent") then notify("Events", evName .. " exists (firing disabled for safety).", 3) else notify("Events", evName .. " not found", 3) end end }) end -- Stages helper to add buttons easily local function addStageButton(name, cfOrFunc) StagesTab:CreateButton({ Name = name, Callback = function() local targetCF = type(cfOrFunc) == "function" and cfOrFunc() or cfOrFunc if targetCF then safeTeleportToCFrame(targetCF) notify("Stages", "Teleported to " .. name, 2) else notify("Stages", "Target not found", 2) end end }) end -- Stage buttons - kept, updated with new coordinates addStageButton("Spawn (Stage 1)", CFrame.new(8294,4,-543)) addStageButton("End (Stage 1)", CFrame.new(8622,4,-544)) addStageButton("Markiplier Start (Stage 2)", function() local dest = Workspace:FindFirstChild("TeleportDestination") if dest and dest:IsA("BasePart") then return dest.CFrame + Vector3.new(0,5,0) else return CFrame.new(8534,36,55) end end) addStageButton("Obby Start (Stage 3)", CFrame.new(9830,42,303)) addStageButton("Corrupt Baseplate Start (Stage 4)", CFrame.new(10008,50,3089)) addStageButton("Corrupt Baseplate End (Stage 4)", CFrame.new(10627,50,3110)) addStageButton("Asylum Start (Stage 5)", CFrame.new(10641,129,5048)) addStageButton("Grandfather Clock (Stage 5)", CFrame.new(10616,127,5013)) addStageButton("Asylum Room (Stage 5)", CFrame.new(10632,127,5210)) addStageButton("Altar (Stage 5)", CFrame.new(10578,127,5278)) addStageButton("Mango Ball (Stage 5)", CFrame.new(10552,152,5182)) addStageButton("Black Room (Stage 5)", CFrame.new(10618,127,5279)) addStageButton("BOSSFIGHT BOII (Stage 6)", CFrame.new(10606, 126, 6068)) -- Stage Loader - improved list retained LegitTab:CreateButton({ Name = "Stage Loader", Callback = function() if not HRP then notify("Stage Loader", "Root part is missing.", 3); return end local origin = HRP.CFrame notify("Stage Loader", "Scanning stage streaming state...", 3) local allStages = { CFrame.new(8294,4,-543), CFrame.new(8622,4,-544), (Workspace:FindFirstChild("TeleportDestination") and Workspace.TeleportDestination:IsA("BasePart") and (Workspace.TeleportDestination.CFrame + Vector3.new(0,5,0))) or CFrame.new(8534,36,55), CFrame.new(9830,42,303), CFrame.new(10008,50,3089), CFrame.new(10627,50,3110), CFrame.new(10641,129,5048), CFrame.new(10616,127,5013), CFrame.new(10632,127,5210), CFrame.new(10578,127,5278), -- Altar CFrame.new(10552,152,5182), -- Mango Ball CFrame.new(10618,127,5279), -- Black Room CFrame.new(10606, 126, 6068) } local toVisit = {} for _, cf in ipairs(allStages) do if not isAreaStreamed(cf.Position, 25, 6) then table.insert(toVisit, cf) end end if #toVisit == 0 then notify("Stage Loader", "All stage areas appear streamed already, nothing to do.", 3) return end local startTick = tick() local aborted = false for _, cf in ipairs(toVisit) do if tick() - startTick > 10 then aborted = true; break end pcall(function() HRP.CFrame = cf end) local t0 = tick() local okStream = false repeat task.wait(0.25) if isAreaStreamed(cf.Position, 25, 6) then okStream = true; break end until tick() - t0 > 3 or tick() - startTick > 10 if not okStream then pcall(function() HRP.CFrame = origin end) notify("Stage Loader", "Stage area failed to stream; restored origin.", 4) aborted = true break end task.wait(0.6) end pcall(function() if origin then HRP.CFrame = origin end end) if aborted then notify("Stage Loader", "Sequence aborted (timeout/stream failure).", 4) else notify("Stage Loader", "All unstreamed stages visited and returned.", 4) end end }) -- Third person unlock attempt on load (teleport + jump) task.spawn(function() task.wait(0.8) if HRP and Humanoid then local originalPos = HRP.CFrame local stage3CF = CFrame.new(9830,42,303) safeTeleportToCFrame(stage3CF + Vector3.new(0,3,0)) task.wait(1) -- hold to ensure the unlock part loads pcall(function() Humanoid:ChangeState(Enum.HumanoidStateType.Jumping) end) task.wait(0.5) safeTeleportToCFrame(originalPos) notify("Third Person", "Attempted unlock.", 2) end end) -- ProximityPrompt AutoFarm (keeps original behavior) local autoFarmActive = false local autoFarmConnection = nil local originalCFrame = nil LegitTab:CreateToggle({ Name = "ProximityPrompt AutoFarm", CurrentValue = false, Callback = function(state) autoFarmActive = state local interactPart = Workspace:FindFirstChild("Interact") if not interactPart then notify("Legit", "Interact part not found in workspace", 3) return end local prompt = interactPart:FindFirstChildOfClass("ProximityPrompt") if not prompt then notify("Legit", "ProximityPrompt 'Interact' not found", 3) return end if state then if not HRP then notify("Legit", "HumanoidRootPart missing", 3); return end originalCFrame = HRP.CFrame -- Freeze player if Humanoid then pcall(function() Humanoid.WalkSpeed = 0; Humanoid.JumpPower = 0 end) end -- Teleport to interact part safeTeleportToCFrame(interactPart.CFrame + Vector3.new(0,3,0)) -- Modify prompt properties safely pcall(function() prompt.HoldDuration = 0 prompt.RequiresLineOfSight = false prompt.MaxActivationDistance = 200 end) -- Spam the prompt autoFarmConnection = RunService.Heartbeat:Connect(function() if autoFarmActive then pcall(function() prompt:InputHoldBegin() prompt:InputHoldEnd() end) end end) notify("Legit", "ProximityPrompt AutoFarm enabled", 2) else -- Stop spamming if autoFarmConnection then autoFarmConnection:Disconnect(); autoFarmConnection = nil end -- Restore player movement if Humanoid and _G.whatHub_ws and _G.whatHub_jp then pcall(function() Humanoid.WalkSpeed = _G.whatHub_ws Humanoid.JumpPower = _G.whatHub_jp end) end -- Teleport back to original position if originalCFrame then safeTeleportToCFrame(originalCFrame) originalCFrame = nil end notify("Legit", "ProximityPrompt AutoFarm disabled", 2) end end }) -- Optimization Machine 9000 - helper to remove by path array local function removeByPath(pathArray) if type(pathArray) ~= "table" or #pathArray == 0 then return false end local ok, target = pcall(function() local cur = Workspace for i, nm in ipairs(pathArray) do if not cur then return nil end local child = cur:FindFirstChild(nm) if not child then return nil end cur = child end return cur end) if not ok or not target then return false end -- detach then destroy to minimize transient overhead pcall(function() target.Parent = nil end) pcall(function() target:Destroy() end) return true end OptimizationTab:CreateButton({ Name = "Asylum Decorations (remove)", Callback = function() local path = {"All Stages [1-6]","Asylum [Stage5]","Decorations [STAGE5]"} local ok = removeByPath(path) notify("Optimization", ok and "Asylum Decorations removed" or "Asylum Decorations not found", ok and 2 or 4) end }) OptimizationTab:CreateButton({ Name = "Mark Particles (remove)", Callback = function() local path = {"All Stages [1-6]","Markiplier [STAGE2]","MarkParticleEmitter"} local ok = removeByPath(path) notify("Optimization", ok and "Mark ParticleEmitter removed" or "Mark ParticleEmitter not found", ok and 2 or 4) end }) OptimizationTab:CreateButton({ Name = "Error Trees (remove)", Callback = function() local path = {"All Stages [1-6]","Corrupt Baseplate [STAGE4]","Error Trees"} local ok = removeByPath(path) notify("Optimization", ok and "Error Trees removed" or "Error Trees not found", ok and 2 or 4) end }) OptimizationTab:CreateButton({ Name = "Extra (remove Mango/Mustard/Signs/etc)", Callback = function() local removedCount = 0 local candidates = {"Mango","Mustard","Mustard Droppings","Plastic Chair","Signs"} for _, name in ipairs(candidates) do local ok1 = false pcall(function() local inst = Workspace:FindFirstChild(name) if inst then inst.Parent = nil inst:Destroy() ok1 = true end end) if not ok1 then pcall(function() local wfold = Workspace:FindFirstChild("Workspace") if wfold and wfold:FindFirstChild(name) then local inst2 = wfold:FindFirstChild(name) inst2.Parent = nil inst2:Destroy() ok1 = true end end) end if ok1 then removedCount = removedCount + 1 end end if removedCount > 0 then notify("Optimization", "Removed " .. tostring(removedCount) .. " extra folders/items", 3) else notify("Optimization", "No extra folders found to remove", 3) end end }) -- Final notification notify("whatHub v1.5", "Loaded successfully - enjoy ❤", 4) dprint("whatHub v1.5 initialized (Optimization Machine 9000 added).")