MikeMercuxgoobydoolan collab gui v1
Key RequiredUniversal

MikeMercuxgoobydoolan collab gui v1

Universal ScriptMikeMe_ruMikeMe_ru 1.2K views 471 executesUpdated Sep 30, 2026
Unrated
00
Lua Script•1279 lines (41053 chars)
--[[
	MikeMercu f3x collab gui
	Разделы: goobydolan | MikeMercu
	Подразделы: Decal & Skybox | Music | Particles | Realm
]]

local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local TweenService = game:GetService("TweenService")

local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")
local camera = workspace.CurrentCamera

-- ============================================================
-- CLEANUP
-- ============================================================
local KILL_PATTERNS = {
	"Mike", "F3x", "TEST", "ZZZ",
	"MikeMercu", "MikeMercuPanel", "JohnDoe", "Pringles", "collab",
}
for _, g in ipairs(playerGui:GetChildren()) do
	if g:IsA("ScreenGui") then
		local name = g.Name
		local kill = false
		for _, pat in ipairs(KILL_PATTERNS) do
			if name:find(pat) then
				kill = true
				break
			end
		end
		if kill then
			pcall(function() g:Destroy() end)
		end
	end
end
task.wait(0.1)

local PREFIX     = ";"
local SPAM_DELAY = 0.03
local PURPLE     = Color3.fromRGB(170, 0, 255)
local BACKGROUND_DECAL = "rbxassetid://119931776743545"

-- ============================================================
-- BASE64 IDS
-- ============================================================
local ENC_WORLD_TOUR_DECAL = "MTI4ODkwMTcxMTI5NjAz"
local ENC_SKYBOX_TEXTURE   = "MTI4ODkwMTcxMTI5NjAz"

local function b64decode(s)
	local b = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
	s = s:gsub('[^' .. b .. '=]', '')
	return (s:gsub('.', function(x)
		if x == '=' then return '' end
		local r, f = '', (b:find(x) - 1)
		for i = 6, 1, -1 do r = r .. (f % 2^i - f % 2^(i-1) > 0 and '1' or '0') end
		return r
	end):gsub('%d%d%d?%d?%d?%d?%d?%d?', function(x)
		if #x ~= 8 then return '' end
		local c = 0
		for i = 1, 8 do c = c + (x:sub(i, i) == '1' and 2^(8-i) or 0) end
		return string.char(c)
	end))
end

local REAL_WORLD_TOUR_DECAL = b64decode(ENC_WORLD_TOUR_DECAL)
local REAL_SKYBOX_TEXTURE   = b64decode(ENC_SKYBOX_TEXTURE)

local WORLD_TOUR_DECAL_ID = REAL_WORLD_TOUR_DECAL
local SKYBOX_TEXTURE_ID   = REAL_SKYBOX_TEXTURE

local currentDecalID   = WORLD_TOUR_DECAL_ID
local currentMyDecalID = "74015851400423"
local currentMusicID   = "100048144167699"

-- ============================================================
-- IDS
-- ============================================================
-- goobydolan
local GOBBYDOOLAN_DECAL_ID  = "118747463854830"
local GOBBYDOOLAN_SKYBOX_ID = "118747463854830"

-- MikeMercu
local MIKEMERCU_DECAL_ID    = "74015851400423"
local MIKEMERCU_SKYBOX_ID   = "74015851400423"
local MIKEMERCU_RET_DECAL_ID = "107356254000416"
local MIKEMERCU_RET_SKYBOX_ID = "107356254000416"

-- Music
local GOBBY_MUSIC_ID    = "1839246711"
local MIKE_MUSIC_ID     = "100048144167699"
local HARDBASS_ID       = "119724983756181"
local HARDBASS_PITCH    = 0.13
local TUBERS93_ID       = "74464434454195"
local TUBERS93_PITCH    = 1.0
local SPARTA_ID         = "88982673611296"
local SPARTA_PITCH      = 0.05
local TROLL_MUSIC_ID    = "131800565792856"
local TROLL_MUSIC_PITCH = 0.05
local REALM_MUSIC_ID    = "123143562570662"
local IDIOT_MUSIC_ID    = "3200130016"

-- ============================================================
-- UTILS
-- ============================================================
local function addStroke(obj, thickness)
	local s = Instance.new("UIStroke")
	s.Color = PURPLE
	s.Thickness = thickness or 1.2
	s.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
	s.Parent = obj
	return s
end

local function getSilentRemote()
	local hd = ReplicatedStorage:FindFirstChild("HDAdminHDClient")
		or ReplicatedStorage:FindFirstChild("HDClient")
	if not hd then return nil end
	local signals = hd:FindFirstChild("Signals")
	if not signals then return nil end
	return signals:FindFirstChild("RequestCommandSilent")
		or signals:FindFirstChild("RequestCommand")
end

local function runSilent(cmd)
	local remote = getSilentRemote()
	if not remote then warn("[HD Admin] silent remote not found") return end
	pcall(function() remote:InvokeServer(PREFIX .. cmd) end)
end

local function getF3XRemote()
	local tool
	if player.Character then
		tool = player.Character:FindFirstChild("Building Tools+")
	end
	if not tool and player:FindFirstChild("Backpack") then
		tool = player.Backpack:FindFirstChild("Building Tools+")
	end
	if not tool then
		for _, v in ipairs(player:GetDescendants()) do
			if v.Name == "SyncAPI" then tool = v.Parent break end
		end
	end
	if not tool then
		for _, v in ipairs(ReplicatedStorage:GetDescendants()) do
			if v.Name == "SyncAPI" then tool = v.Parent break end
		end
	end
	if tool then
		local api = tool:FindFirstChild("SyncAPI")
		if api then return api:FindFirstChild("ServerEndpoint") end
	end
end

-- ============================================================
-- ANTI-SKID
-- ============================================================
local function antiSkidCheck()
	if currentDecalID ~= REAL_WORLD_TOUR_DECAL then
		player:Kick("f***in skid")
		return
	end
	if SKYBOX_TEXTURE_ID ~= REAL_SKYBOX_TEXTURE then
		player:Kick("f***in skid")
		return
	end
end

antiSkidCheck()
task.spawn(function()
	while true do
		task.wait(0.5)
		antiSkidCheck()
	end
end)

-- ============================================================
-- ACTIONS
-- ============================================================
local function giveBtools()
	runSilent("btools me")
	task.wait(0.4)
	runSilent("f3x me")
end

local function playMusicID(id, pitch, vol)
	runSilent("music " .. id)
	task.wait(0.2)
	if pitch then runSilent("pitch " .. pitch) task.wait(0.2) end
	runSilent("volume " .. (vol or "inf"))
end

local function playMusic()        playMusicID(currentMusicID, nil, "inf") end
local function playGobbyMusic()   playMusicID(GOBBY_MUSIC_ID, nil, "inf") end
local function playMikeMusic()    playMusicID(MIKE_MUSIC_ID, nil, "inf") end
local function playHardbass()     playMusicID(HARDBASS_ID, HARDBASS_PITCH, "999") end
local function playTubers93()     playMusicID(TUBERS93_ID, TUBERS93_PITCH, "999") end
local function playSparta()       playMusicID(SPARTA_ID, SPARTA_PITCH, "999") end
local function playTrollMusic()   playMusicID(TROLL_MUSIC_ID, TROLL_MUSIC_PITCH, "999") end
local function playRealmMusic()   playMusicID(REALM_MUSIC_ID, nil, "inf") end
local function playTitle()
	runSilent("titlep me MikeMercu")
end

-- ============================================================
-- YOU ARE AN IDIOT (TOGGLE)
-- ============================================================
local idiotState = { active = false }

local function toggleIdiotMusic(btn)
	idiotState.active = not idiotState.active
	if idiotState.active then
		playMusicID(IDIOT_MUSIC_ID, nil, "999")
		if btn then btn.Text = "You Are An Idiot: ON" end
	else
		runSilent("music 0")
		task.wait(0.2)
		runSilent("volume 1")
		if btn then btn.Text = "You Are An Idiot!" end
	end
end

-- ============================================================
-- UNIVERSAL DECAL SPAM
-- ============================================================
local function spamDecalOnEverything(decalID, label)
	local remote = getF3XRemote()
	if not remote then
		warn(("[" .. label .. "] F3X not found — click [F3X] first"))
		return
	end
	local function fire(args) pcall(function() remote:InvokeServer(unpack(args)) end) end

	local faces = {
		Enum.NormalId.Front, Enum.NormalId.Back,
		Enum.NormalId.Left,  Enum.NormalId.Right,
		Enum.NormalId.Top,   Enum.NormalId.Bottom,
	}

	task.spawn(function()
		for _, v in ipairs(workspace:GetDescendants()) do
			if v:IsA("BasePart") then
				task.spawn(function()
					fire({"SetLocked", {v}, false})
					for _, f in ipairs(faces) do
						fire({"CreateTextures", {{Part = v, Face = f, TextureType = "Decal"}}})
						fire({"SyncTexture", {{
							Part = v, Face = f, TextureType = "Decal",
							Texture = "rbxassetid://" .. decalID
						}}})
					end
				end)
				task.wait(SPAM_DELAY)
			end
		end
	end)
end

local function spamGobbyDecal() spamDecalOnEverything(GOBBYDOOLAN_DECAL_ID, "GobbyDoolan Decal") end
local function spamMikeDecal()  spamDecalOnEverything(MIKEMERCU_DECAL_ID, "MikeMercu Decal") end
local function spamMikeRetDecal() spamDecalOnEverything(MIKEMERCU_RET_DECAL_ID, "MikeMercu.ret Decal") end

-- ============================================================
-- UNIVERSAL PARTICLE SPAM
-- ============================================================
local function spamParticlesOnEverything(label, options)
	local remote = getF3XRemote()
	if not remote then
		warn(("[" .. label .. "] F3X not found — click [F3X] first"))
		return
	end
	local function fire(args) pcall(function() remote:InvokeServer(unpack(args)) end) end

	options = options or {}
	local texture     = options.Texture     or ("rbxassetid://" .. currentMyDecalID)
	local rate        = options.Rate        or "5000"
	local spreadAngle = options.SpreadAngle or "18000"
	local rotSpeed    = options.RotSpeed    or "10"
	local speed       = options.Speed       or "24"
	local size        = options.Size        or "1"

	task.spawn(function()
		for _, v in ipairs(workspace:GetDescendants()) do
			if v:IsA("BasePart") then
				task.spawn(function()
					fire({"SetLocked", {v}, false})
					fire({"CreateDecorations", {{Part = v, DecorationType = "ParticleEmitter"}}})
					fire({"SyncDecorate", {{
						Part = v, DecorationType = "ParticleEmitter",
						Rate = rate, SpreadAngle = spreadAngle, RotSpeed = rotSpeed,
						Texture = texture, Speed = speed, Size = size
					}}})
				end)
				task.wait(SPAM_DELAY)
			end
		end
	end)
end

local function clearParticlesFromEverything(label)
	local remote = getF3XRemote()
	if not remote then
		warn(("[" .. label .. "] F3X not found — click [F3X] first"))
		return
	end
	local function fire(args) pcall(function() remote:InvokeServer(unpack(args)) end) end

	for _, v in ipairs(workspace:GetDescendants()) do
		if v:IsA("ParticleEmitter") then
			pcall(function() v:Destroy() end)
		end
	end

	local decorationTypes = {"ParticleEmitter", "Fire", "Smoke", "Sparkles"}

	task.spawn(function()
		local parts = {}
		for _, v in ipairs(workspace:GetDescendants()) do
			if v:IsA("BasePart") then
				table.insert(parts, v)
			end
		end

		local batchSize = 30
		for i = 1, #parts, batchSize do
			for _, dtype in ipairs(decorationTypes) do
				local batch = {}
				for j = i, math.min(i + batchSize - 1, #parts) do
					table.insert(batch, {
						Part = parts[j],
						DecorationType = dtype
					})
				end
				fire({"RemoveDecorations", batch})
			end
			task.wait(0.05)
		end
	end)
end

-- ============================================================
-- UNIVERSAL SKYBOX SPAWNER (no anchor, just big part on ground)
-- ============================================================
local function spawnSkyboxWithID(textureID, label)
	local char = player.Character or player.CharacterAdded:Wait()
	local tool

	for _, v in ipairs(player:GetDescendants()) do
		if v.Name == "SyncAPI" then tool = v.Parent break end
	end
	if not tool then
		for _, v in ipairs(ReplicatedStorage:GetDescendants()) do
			if v.Name == "SyncAPI" then tool = v.Parent break end
		end
	end

	if not tool then
		warn(("[" .. label .. "] F3X not found"))
		return
	end

	local remote = tool.SyncAPI.ServerEndpoint
	local function _(args) pcall(function() remote:InvokeServer(unpack(args)) end) end

	local function CreatePart(cf, parent) _({"CreatePart", "Normal", cf, parent}) end
	local function AddMesh(part) _({"CreateMeshes", {{Part = part}}}) end
	local function SetMesh(part, meshid) _({"SyncMesh", {{Part = part, MeshId = "rbxassetid://" .. meshid}}}) end
	local function SetTexture(part, texid) _({"SyncMesh", {{Part = part, TextureId = "rbxassetid://" .. texid}}}) end
	local function MeshResize(part, size) _({"SyncMesh", {{Part = part, Scale = size}}}) end
	local function SetName(part, stringg) _({"SetName", {part}, stringg}) end
	local function SetCollision(part, boolean) _({"SyncCollision", {{Part = part, CanCollide = boolean}}}) end
	local function SetLocked(part, boolean) _({"SetLocked", {part}, boolean}) end
	local function SetAnchor(part, boolean) _({"SyncAnchor", {{Part = part}, Anchored = boolean}}) end

	local spawnCF = CFrame.new(0, 500, 0)

	CreatePart(spawnCF, workspace)
	task.wait(0.2)

	local skyPart
	local closest = math.huge
	for _, v in ipairs(workspace:GetChildren()) do
		if v:IsA("BasePart") then
			local d = (v.Position - spawnCF.Position).Magnitude
			if d < 10 and d < closest then
				closest = d
				skyPart = v
			end
		end
	end

	if not skyPart then
		warn(("[" .. label .. "] part not found"))
		return
	end

	SetName(skyPart, "Sky")
	task.wait(0.05)

	AddMesh(skyPart)
	task.wait(0.1)
	SetMesh(skyPart, "111891702759441")
	task.wait(0.1)
	SetTexture(skyPart, textureID)
	task.wait(0.1)

	MeshResize(skyPart, Vector3.new(1000, 1000, 1000))
	task.wait(0.2)

	SetCollision(skyPart, false)
	SetLocked(skyPart, true)
	SetAnchor(skyPart, true)

	local guardConn
	guardConn = RunService.Heartbeat:Connect(function()
		if not skyPart or not skyPart.Parent then
			if guardConn then guardConn:Disconnect() end
			return
		end
		if skyPart.Position.Y < 100 then
			pcall(function() skyPart.CFrame = CFrame.new(0, 500, 0) end)
			SetAnchor(skyPart, true)
		end
	end)
end

local function spawnGobbySkybox() spawnSkyboxWithID(GOBBYDOOLAN_SKYBOX_ID, "GobbyDoolan Skybox") end
local function spawnMikeSkybox()  spawnSkyboxWithID(MIKEMERCU_SKYBOX_ID, "MikeMercu Skybox") end
local function spawnMikeRetSkybox() spawnSkyboxWithID(MIKEMERCU_RET_SKYBOX_ID, "MikeMercu.ret Skybox") end

-- ============================================================
-- UNANCHOR ALL
-- ============================================================
local function unanchorAll()
	local remote = getF3XRemote()
	if not remote then
		warn("[Unanchor All] F3X not found — click [F3X] first")
		return
	end

	local function fire(args)
		pcall(function() remote:InvokeServer(unpack(args)) end)
	end

	task.spawn(function()
		local parts = {}
		for _, v in ipairs(workspace:GetDescendants()) do
			if v:IsA("BasePart") then
				parts[#parts + 1] = v
			end
		end

		local total = #parts
		print("[Unanchor All] Найдено частей:", total)
		local t0 = tick()

		if total == 0 then
			print("[Unanchor All] Нечего откреплять.")
			return
		end

		local completed = 0

		for i = 1, total do
			local part = parts[i]
			task.spawn(function()
				if part and part.Parent then
					fire({"SyncAnchor", {{Part = part}, false}})
					fire({"SetLocked", {part}, false})
				end
				completed = completed + 1
			end)
		end

		while completed < total do
			task.wait()
		end

		local elapsed = tick() - t0
		print(string.format("[Unanchor All] Карта откреплена за %.2f сек! (%d частей)", elapsed, total))
	end)
end

-- ============================================================
-- REALM SCRIPTS (goobydolan / MikeMercu)
-- ============================================================
local function getF3XFromPlayer()
	local char = player.Character
	local backpack = player:FindFirstChild("Backpack")
	if backpack then
		for _, v in ipairs(backpack:GetChildren()) do
			if v:FindFirstChild("SyncAPI") then return v end
		end
	end
	if char then
		for _, v in ipairs(char:GetChildren()) do
			if v:FindFirstChild("SyncAPI") then return v end
		end
	end
	return nil
end

local function deleteAllParts(serverendpoint)
	for _, v in ipairs(workspace:GetDescendants()) do
		if v:IsA("BasePart") or v:IsA("UnionOperation") then
			task.spawn(function()
				pcall(function()
					serverendpoint:InvokeServer("Remove", {v})
				end)
			end)
		end
	end
end

local function buildRealm(opts)
	-- opts: { SpawnDecal, RulesDecal, BadDecal, SkyTexture, MusicID, TitleName }
	local remote = getSilentRemote()
	if remote then
		pcall(function() remote:InvokeServer(";btools me") end)
		task.wait(0.4)
		pcall(function() remote:InvokeServer(";punish all") end)
		task.wait(0.1)
	end

	local f3x = getF3XFromPlayer()
	if not f3x then
		warn("[Realm] you dont have f3x skid")
		return
	end
	local serverendpoint = f3x.SyncAPI.ServerEndpoint

	-- Удаляем всё
	deleteAllParts(serverendpoint)
	task.wait(0.3)

	if remote then
		pcall(function() remote:InvokeServer(";fogcolor black ;time") end)
	end

	-- Хелперы F3X
	local function resize(part, size, cf)
		pcall(function()
			serverendpoint:InvokeServer("SyncResize", {{Part = part, CFrame = cf, Size = size}})
		end)
	end
	local function syncmaterial(part, mate)
		pcall(function()
			serverendpoint:InvokeServer("SyncMaterial", {{Part = part, Material = mate}})
		end)
	end
	local function transparency(part, trans)
		pcall(function()
			serverendpoint:InvokeServer("SyncMaterial", {{Part = part, Transparency = trans}})
		end)
	end
	local function color(part, c)
		pcall(function()
			serverendpoint:InvokeServer("SyncColor", {{Part = part, Color = c, UnionColoring = false}})
		end)
	end
	local function syncmeshid(part, id)
		pcall(function()
			serverendpoint:InvokeServer("SyncMesh", {{Part = part, MeshId = "rbxassetid://" .. id}})
		end)
	end
	local function makemesh(part)
		pcall(function()
			serverendpoint:InvokeServer("CreateMeshes", {{Part = part}})
		end)
	end
	local function syncmeshsize(part, vec)
		pcall(function()
			serverendpoint:InvokeServer("SyncMesh", {{Part = part, Scale = vec}})
		end)
	end
	local function syncmeshtexture(part, id)
		pcall(function()
			serverendpoint:InvokeServer("SyncMesh", {{Part = part, TextureId = "rbxassetid://" .. id}})
		end)
	end
	local function name(part, s)
		pcall(function()
			serverendpoint:InvokeServer("SetName", {part}, s)
		end)
	end
	local function lock(part, b)
		pcall(function()
			serverendpoint:InvokeServer("SetLocked", {part}, b)
		end)
	end
	local function setcollision(part, b)
		pcall(function()
			serverendpoint:InvokeServer("SyncCollision", {{Part = part, CanCollide = b}})
		end)
	end
	local function createdecal(part, side)
		pcall(function()
			serverendpoint:InvokeServer("CreateTextures", {{Part = part, Face = side, TextureType = "Decal"}})
		end)
	end
	local function setdecal(part, asset, side)
		pcall(function()
			serverendpoint:InvokeServer("SyncTexture", {{Part = part, Face = side, TextureType = "Decal", Texture = "rbxassetid://" .. asset}})
		end)
	end

	-- Базовое основание
	local function makerealmbase()
		local position = CFrame.new(0, 5, 0)
		local base = serverendpoint:InvokeServer("CreatePart", "Normal", position, workspace)
		resize(base, Vector3.new(512, 16, 512), position)
		syncmaterial(base, Enum.Material.Concrete)
		color(base, Color3.new(0.513725, 0.513725, 0.513725))
		name(base, "loltroll")
		lock(base, true)

		local spawnpos = CFrame.new(34.5, 8.1, -26)
		local spawna = serverendpoint:InvokeServer("CreatePart", "Spawn", spawnpos, workspace)
		resize(spawna, Vector3.new(20, 10, 20), spawnpos)
		name(spawna, "SpawnLocation")
		lock(spawna, true)
		createdecal(spawna, Enum.NormalId.Top)
		setdecal(spawna, opts.SpawnDecal, Enum.NormalId.Top)
		transparency(spawna, 1)

		local pos1 = CFrame.new(74.143, 24, -25.232)
		local rules = serverendpoint:InvokeServer("CreatePart", "Normal", pos1, workspace)
		transparency(rules, 0)
		setcollision(rules, false)
		createdecal(rules, Enum.NormalId.Left)
		setdecal(rules, opts.RulesDecal, Enum.NormalId.Left)
		color(rules, Color3.new(1, 1, 1))
		resize(rules, Vector3.new(4, 23, 37), pos1)

		local pos2 = CFrame.new(1.143, 24, -25.232)
		local bad = serverendpoint:InvokeServer("CreatePart", "Normal", pos2, workspace)
		transparency(bad, 1)
		setcollision(bad, false)
		createdecal(bad, Enum.NormalId.Right)
		setdecal(bad, opts.BadDecal, Enum.NormalId.Right)
		resize(bad, Vector3.new(4, 23, 37), pos2)
	end

	-- Скайбокс
	local function sky()
		local position = CFrame.new(0, 5, 0)
		local skyPart = serverendpoint:InvokeServer("CreatePart", "Normal", position, workspace)
		makemesh(skyPart)
		syncmeshid(skyPart, "139706960202832")
		syncmeshtexture(skyPart, opts.SkyTexture)
		syncmeshsize(skyPart, Vector3.new(20000, 20000, 20000))
		lock(skyPart, true)
		name(skyPart, "Sky")
		setcollision(skyPart, false)
	end

	sky()
	makerealmbase()

	if remote then
		pcall(function() remote:InvokeServer(";res all") end)
		task.wait(0.3)
		pcall(function() remote:InvokeServer(";r6 all") end)
		pcall(function() remote:InvokeServer(";time 14") end)
		task.wait(0.7)
		pcall(function()
			remote:InvokeServer(";music " .. opts.MusicID .. " ;volume inf ; ;char all " .. opts.TitleName .. " " .. opts.TitleName .. " HAX THIS SERVER L0LZ")
		end)
	end
end

local function startGobbyRealm()
	task.spawn(function()
		buildRealm({
			SpawnDecal  = "89425803793975",
			RulesDecal  = "118747463854830",
			BadDecal    = "89425803793975",
			SkyTexture  = "89425803793975",
			MusicID     = "1839246711",
			TitleName   = "goobydoolan",
		})
	end)
end

local function startMikeRealm()
	task.spawn(function()
		buildRealm({
			SpawnDecal  = "128890171129603",
			RulesDecal  = "74015851400423",
			BadDecal    = "128890171129603",
			SkyTexture  = "128890171129603",
			MusicID     = "100048144167699",
			TitleName   = "MikeMercu",
		})
	end)
end

-- ============================================================
-- GUI (GRID LAYOUT)
-- ============================================================
local GUI_WIDTH    = 600
local COLS         = 3
local BTN_W        = 190
local BTN_H        = 26
local BTN_GAP_X    = 4
local BTN_GAP_Y    = 4
local SECTION_GAP  = 6
local HEADER_H     = 18
local PAD          = 6
local ARROW_W      = 16
local PANEL_W      = 150

local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "MikeMercuF3xCollabGui"
ScreenGui.ResetOnSpawn = false
ScreenGui.Parent = playerGui

local MainFrame = Instance.new("Frame")
MainFrame.Name = "MainFrame"
MainFrame.Size = UDim2.new(0, GUI_WIDTH, 0, 400)
MainFrame.Position = UDim2.new(0.5, -GUI_WIDTH/2, 0.15, 0)
MainFrame.BackgroundColor3 = Color3.fromRGB(15, 15, 15)
MainFrame.BackgroundTransparency = 1
MainFrame.BorderSizePixel = 0
MainFrame.Active = true
MainFrame.Draggable = true
MainFrame.ClipsDescendants = false
MainFrame.ZIndex = 1
MainFrame.Parent = ScreenGui
addStroke(MainFrame, 2)

local BackgroundImage = Instance.new("ImageLabel")
BackgroundImage.Name = "BackgroundImage"
BackgroundImage.Size = UDim2.new(1, 0, 1, 0)
BackgroundImage.Position = UDim2.new(0, 0, 0, 0)
BackgroundImage.BackgroundTransparency = 1
BackgroundImage.Image = BACKGROUND_DECAL
BackgroundImage.ScaleType = Enum.ScaleType.Crop
BackgroundImage.ZIndex = 0
BackgroundImage.Parent = MainFrame

local ContentFrame = Instance.new("Frame")
ContentFrame.Name = "ContentFrame"
ContentFrame.Size = UDim2.new(1, -PAD*2, 1, 0)
ContentFrame.Position = UDim2.new(0, 0, 0, 0)
ContentFrame.BackgroundTransparency = 1
ContentFrame.ZIndex = 2
ContentFrame.Parent = MainFrame

local Title = Instance.new("TextLabel")
Title.Size = UDim2.new(1, -80, 0, 28)
Title.Position = UDim2.new(0, PAD, 0, PAD)
Title.BackgroundTransparency = 1
Title.Font = Enum.Font.SourceSansBold
Title.Text = "f3x collab gui"
Title.TextColor3 = PURPLE
Title.TextSize = 20
Title.TextXAlignment = Enum.TextXAlignment.Center
Title.ZIndex = 3
Title.Parent = ContentFrame

local giveBtoolsBtn = Instance.new("TextButton")
giveBtoolsBtn.Size = UDim2.new(0, 50, 0, 24)
giveBtoolsBtn.Position = UDim2.new(0, PAD, 0, PAD + 2)
giveBtoolsBtn.BackgroundColor3 = Color3.fromRGB(60, 0, 90)
giveBtoolsBtn.BackgroundTransparency = 0.3
giveBtoolsBtn.BorderSizePixel = 0
giveBtoolsBtn.Font = Enum.Font.SourceSansBold
giveBtoolsBtn.Text = "give\nF3x"
giveBtoolsBtn.TextColor3 = PURPLE
giveBtoolsBtn.TextSize = 10
giveBtoolsBtn.ZIndex = 5
giveBtoolsBtn.Parent = ContentFrame
addStroke(giveBtoolsBtn, 1.2)

local clearSkyboxBtn = Instance.new("TextButton")
clearSkyboxBtn.Size = UDim2.new(0, 90, 0, 24)
clearSkyboxBtn.Position = UDim2.new(1, -90 - PAD, 0, PAD + 2)
clearSkyboxBtn.BackgroundColor3 = Color3.fromRGB(60, 0, 90)
clearSkyboxBtn.BackgroundTransparency = 0.3
clearSkyboxBtn.BorderSizePixel = 0
clearSkyboxBtn.Font = Enum.Font.SourceSansBold
clearSkyboxBtn.Text = "Clear Skybox"
clearSkyboxBtn.TextColor3 = PURPLE
clearSkyboxBtn.TextSize = 10
clearSkyboxBtn.ZIndex = 5
clearSkyboxBtn.Parent = ContentFrame
addStroke(clearSkyboxBtn, 1.2)

-- ============================================================
-- GRID SECTIONS
-- ============================================================
local sections = {}
local allButtons = {}

local function makeGridSection(parent, yPos, title)
	local header = Instance.new("TextLabel")
	header.Name = "Header_" .. title
	header.Size = UDim2.new(1, -PAD*2, 0, HEADER_H)
	header.Position = UDim2.new(0, PAD, 0, yPos)
	header.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
	header.BackgroundTransparency = 0.35
	header.BorderSizePixel = 0
	header.Font = Enum.Font.SourceSansBold
	header.Text = title
	header.TextColor3 = PURPLE
	header.TextSize = 14
	header.TextXAlignment = Enum.TextXAlignment.Center
	header.ZIndex = 3
	header.Active = false
	header.Selectable = false
	header.Parent = parent
	addStroke(header, 1.2)

	local container = Instance.new("Frame")
	container.Name = "Grid_" .. title
	container.Size = UDim2.new(1, -PAD*2, 0, 0)
	container.Position = UDim2.new(0, PAD, 0, yPos + HEADER_H + 2)
	container.BackgroundTransparency = 1
	container.ZIndex = 3
	container.Parent = parent

	local section = {
		header = header,
		container = container,
		buttons = {},
		rows = 0,
		yPos = yPos,
	}
	table.insert(sections, section)
	return section
end

local function addGridButton(section, text, callback)
	local idx = #section.buttons
	local col = idx % COLS
	local row = math.floor(idx / COLS)

	local btn = Instance.new("TextButton")
	btn.Size = UDim2.new(0, BTN_W, 0, BTN_H)
	btn.Position = UDim2.new(0, col * (BTN_W + BTN_GAP_X), 0, row * (BTN_H + BTN_GAP_Y))
	btn.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
	btn.BackgroundTransparency = 0.35
	btn.BorderSizePixel = 0
	btn.Font = Enum.Font.SourceSansBold
	btn.Text = text
	btn.TextColor3 = PURPLE
	btn.TextSize = 12
	btn.ZIndex = 4
	btn.TextWrapped = true
	btn.Parent = section.container
	addStroke(btn, 1.2)
	if callback then btn.MouseButton1Click:Connect(callback) end

	table.insert(section.buttons, btn)
	table.insert(allButtons, btn)

	local totalRows = math.ceil(#section.buttons / COLS)
	section.container.Size = UDim2.new(1, -PAD*2, 0, totalRows * (BTN_H + BTN_GAP_Y) - BTN_GAP_Y)

	return btn
end

local function finalizeLayout()
	local y = PAD + 30
	for _, sec in ipairs(sections) do
		sec.header.Position = UDim2.new(0, PAD, 0, y)
		sec.container.Position = UDim2.new(0, PAD, 0, y + HEADER_H + 2)
		y = y + HEADER_H + 2 + sec.container.Size.Y.Offset + SECTION_GAP
	end
	local totalH = y - SECTION_GAP + PAD
	MainFrame.Size = UDim2.new(0, GUI_WIDTH, 0, totalH)
	return totalH
end

-- ============================================================
-- СЕКЦИЯ 1: goobydolan
-- ============================================================
local secGobby = makeGridSection(ContentFrame, 0, "goobydolan")
addGridButton(secGobby, "Decal",     spamGobbyDecal)
addGridButton(secGobby, "Skybox",    spawnGobbySkybox)
addGridButton(secGobby, "Music",     playGobbyMusic)
addGridButton(secGobby, "Realm",     startGobbyRealm)

local gobbyPartState = { active = false }
local gobbyPartBtn = addGridButton(secGobby, "Particles", function() end)
gobbyPartBtn.MouseButton1Click:Connect(function()
	gobbyPartState.active = not gobbyPartState.active
	gobbyPartBtn.Text = gobbyPartState.active and "Particles: ON" or "Particles"
	if gobbyPartState.active then
		spamParticlesOnEverything("GobbyDoolan Particles", {
			Texture = "rbxassetid://" .. GOBBYDOOLAN_DECAL_ID,
			Rate = "5000", SpreadAngle = "18000", RotSpeed = "10",
			Speed = "24", Size = "3"
		})
	else
		clearParticlesFromEverything("GobbyDoolan Particles")
	end
end)

-- ============================================================
-- СЕКЦИЯ 2: MikeMercu
-- ============================================================
local secMike = makeGridSection(ContentFrame, 0, "MikeMercu")
addGridButton(secMike, "Decal",   spamMikeDecal)
addGridButton(secMike, "Skybox",  spawnMikeSkybox)
addGridButton(secMike, "Music",   playMikeMusic)
addGridButton(secMike, "Decal .ret",  spamMikeRetDecal)
addGridButton(secMike, "Skybox .ret", spawnMikeRetSkybox)
addGridButton(secMike, "Realm",       startMikeRealm)

local mikePartState = { active = false }
local mikePartBtn = addGridButton(secMike, "Particles", function() end)
mikePartBtn.MouseButton1Click:Connect(function()
	mikePartState.active = not mikePartState.active
	mikePartBtn.Text = mikePartState.active and "Particles: ON" or "Particles"
	if mikePartState.active then
		spamParticlesOnEverything("MikeMercu Particles", {
			Texture = "rbxassetid://" .. MIKEMERCU_DECAL_ID,
			Rate = "5000", SpreadAngle = "18000", RotSpeed = "10",
			Speed = "24", Size = "3"
		})
	else
		clearParticlesFromEverything("MikeMercu Particles")
	end
end)

-- ============================================================
-- СЕКЦИЯ 3: Music
-- ============================================================
local secMusic = makeGridSection(ContentFrame, 0, "Music")
addGridButton(secMusic, "My Theme",                playMusic)
addGridButton(secMusic, "Hardbass",                playHardbass)
addGridButton(secMusic, "Tubers 93",               playTubers93)
addGridButton(secMusic, "This Is Sparta (slowed)", playSparta)
addGridButton(secMusic, "Troll Music (slowed)",    playTrollMusic)
addGridButton(secMusic, "Realm Music",             playRealmMusic)
addGridButton(secMusic, "Title",                   playTitle)

local idiotBtn = addGridButton(secMusic, "You Are An Idiot!", function() end)
idiotBtn.MouseButton1Click:Connect(function()
	toggleIdiotMusic(idiotBtn)
end)

-- ============================================================
-- СЕКЦИЯ 4: Maps
-- ============================================================
local secMaps = makeGridSection(ContentFrame, 0, "Maps")
addGridButton(secMaps, "Unanchor All", unanchorAll)

-- ============================================================
-- СЕКЦИЯ 5: Particles
-- ============================================================
local secParts = makeGridSection(ContentFrame, 0, "Particles")

local particlesState      = { active = false }
local marioPartState      = { active = false }
local yaaiPartState       = { active = false }

local function onParticlesClick(btn)
	particlesState.active = not particlesState.active
	btn.Text = particlesState.active and "Particles: ON" or "Particles: OFF"
	if particlesState.active then
		spamParticlesOnEverything("Particles", {
			Texture = "rbxassetid://" .. currentMyDecalID,
			Rate = "5000", SpreadAngle = "18000", RotSpeed = "10",
			Speed = "24", Size = "1"
		})
	else
		clearParticlesFromEverything("Particles")
	end
end

local partBtn = addGridButton(secParts, "Particles", function() end)
partBtn.MouseButton1Click:Connect(function() onParticlesClick(partBtn) end)

local marioPartBtn = addGridButton(secParts, "Mario.exe Particles", function() end)
marioPartBtn.MouseButton1Click:Connect(function()
	marioPartState.active = not marioPartState.active
	marioPartBtn.Text = marioPartState.active and "Mario.exe Particles: ON" or "Mario.exe Particles"
	if marioPartState.active then
		spamParticlesOnEverything("Mario.exe", { Texture = "rbxassetid://135887982387868" })
	else
		clearParticlesFromEverything("Mario.exe")
	end
end)

local yaaiPartBtn = addGridButton(secParts, "Yaai Particles", function() end)
yaaiPartBtn.MouseButton1Click:Connect(function()
	yaaiPartState.active = not yaaiPartState.active
	yaaiPartBtn.Text = yaaiPartState.active and "Yaai Particles: ON" or "Yaai Particles"
	if yaaiPartState.active then
		spamParticlesOnEverything("Yaai", { Texture = "rbxassetid://14938704333" })
	else
		clearParticlesFromEverything("Yaai")
	end
end)

finalizeLayout()

-- ============================================================
-- ID PANEL
-- ============================================================
local ArrowButton = Instance.new("TextButton")
ArrowButton.Name = "ArrowButton"
ArrowButton.Size = UDim2.new(0, ARROW_W, 1, 0)
ArrowButton.Position = UDim2.new(1, -ARROW_W, 0, 0)
ArrowButton.BackgroundColor3 = Color3.fromRGB(60, 0, 90)
ArrowButton.BackgroundTransparency = 0.2
ArrowButton.BorderSizePixel = 0
ArrowButton.Font = Enum.Font.SourceSansBold
ArrowButton.Text = "►"
ArrowButton.TextColor3 = PURPLE
ArrowButton.TextSize = 11
ArrowButton.ZIndex = 10
ArrowButton.Parent = MainFrame
addStroke(ArrowButton, 1)

local SlidePanel = Instance.new("Frame")
SlidePanel.Name = "SlidePanel"
SlidePanel.Size = UDim2.new(0, PANEL_W, 1, 0)
SlidePanel.Position = UDim2.new(1, 0, 0, 0)
SlidePanel.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
SlidePanel.BackgroundTransparency = 0.15
SlidePanel.BorderSizePixel = 0
SlidePanel.ClipsDescendants = false
SlidePanel.Visible = false
SlidePanel.Active = false
SlidePanel.Selectable = false
SlidePanel.ZIndex = 20
SlidePanel.Parent = MainFrame
addStroke(SlidePanel, 1.5)

local PanelTitle = Instance.new("TextLabel")
PanelTitle.Size = UDim2.new(1, -12, 0, 16)
PanelTitle.Position = UDim2.new(0, 6, 0, 4)
PanelTitle.BackgroundTransparency = 1
PanelTitle.Font = Enum.Font.SourceSansBold
PanelTitle.Text = "Settings"
PanelTitle.TextColor3 = PURPLE
PanelTitle.TextSize = 11
PanelTitle.TextXAlignment = Enum.TextXAlignment.Left
PanelTitle.ZIndex = 21
PanelTitle.Parent = SlidePanel

local MyDecalLabel = Instance.new("TextLabel")
MyDecalLabel.Size = UDim2.new(1, -12, 0, 12)
MyDecalLabel.Position = UDim2.new(0, 6, 0, 24)
MyDecalLabel.BackgroundTransparency = 1
MyDecalLabel.Font = Enum.Font.SourceSans
MyDecalLabel.Text = "My Decal ID"
MyDecalLabel.TextColor3 = Color3.fromRGB(200, 200, 200)
MyDecalLabel.TextSize = 10
MyDecalLabel.TextXAlignment = Enum.TextXAlignment.Left
MyDecalLabel.ZIndex = 21
MyDecalLabel.Parent = SlidePanel

local MyDecalBox = Instance.new("TextBox")
MyDecalBox.Name = "MyDecalBox"
MyDecalBox.Size = UDim2.new(1, -12, 0, 18)
MyDecalBox.Position = UDim2.new(0, 6, 0, 38)
MyDecalBox.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
MyDecalBox.BorderSizePixel = 0
MyDecalBox.Font = Enum.Font.SourceSans
MyDecalBox.Text = currentMyDecalID
MyDecalBox.PlaceholderText = "asset id"
MyDecalBox.TextColor3 = PURPLE
MyDecalBox.TextSize = 10
MyDecalBox.ClearTextOnFocus = false
MyDecalBox.ZIndex = 21
MyDecalBox.Parent = SlidePanel
addStroke(MyDecalBox, 1)

local MyThemeLabel = Instance.new("TextLabel")
MyThemeLabel.Size = UDim2.new(1, -12, 0, 12)
MyThemeLabel.Position = UDim2.new(0, 6, 0, 62)
MyThemeLabel.BackgroundTransparency = 1
MyThemeLabel.Font = Enum.Font.SourceSans
MyThemeLabel.Text = "My Theme ID"
MyThemeLabel.TextColor3 = Color3.fromRGB(200, 200, 200)
MyThemeLabel.TextSize = 10
MyThemeLabel.TextXAlignment = Enum.TextXAlignment.Left
MyThemeLabel.ZIndex = 21
MyThemeLabel.Parent = SlidePanel

local MyThemeBox = Instance.new("TextBox")
MyThemeBox.Name = "MyThemeBox"
MyThemeBox.Size = UDim2.new(1, -12, 0, 18)
MyThemeBox.Position = UDim2.new(0, 6, 0, 76)
MyThemeBox.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
MyThemeBox.BorderSizePixel = 0
MyThemeBox.Font = Enum.Font.SourceSans
MyThemeBox.Text = currentMusicID
MyThemeBox.PlaceholderText = "asset id"
MyThemeBox.TextColor3 = PURPLE
MyThemeBox.TextSize = 10
MyThemeBox.ClearTextOnFocus = false
MyThemeBox.ZIndex = 21
MyThemeBox.Parent = SlidePanel
addStroke(MyThemeBox, 1)

local WalkSpeedLabel = Instance.new("TextLabel")
WalkSpeedLabel.Size = UDim2.new(1, -12, 0, 12)
WalkSpeedLabel.Position = UDim2.new(0, 6, 0, 100)
WalkSpeedLabel.BackgroundTransparency = 1
WalkSpeedLabel.Font = Enum.Font.SourceSans
WalkSpeedLabel.Text = "WalkSpeed"
WalkSpeedLabel.TextColor3 = Color3.fromRGB(200, 200, 200)
WalkSpeedLabel.TextSize = 10
WalkSpeedLabel.TextXAlignment = Enum.TextXAlignment.Left
WalkSpeedLabel.ZIndex = 21
WalkSpeedLabel.Parent = SlidePanel

local WalkSpeedBox = Instance.new("TextBox")
WalkSpeedBox.Name = "WalkSpeedBox"
WalkSpeedBox.Size = UDim2.new(1, -12, 0, 18)
WalkSpeedBox.Position = UDim2.new(0, 6, 0, 114)
WalkSpeedBox.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
WalkSpeedBox.BorderSizePixel = 0
WalkSpeedBox.Font = Enum.Font.SourceSans
WalkSpeedBox.Text = "16"
WalkSpeedBox.PlaceholderText = "16"
WalkSpeedBox.TextColor3 = PURPLE
WalkSpeedBox.TextSize = 10
WalkSpeedBox.ClearTextOnFocus = false
WalkSpeedBox.ZIndex = 21
WalkSpeedBox.Parent = SlidePanel
addStroke(WalkSpeedBox, 1)

local JumpPowerLabel = Instance.new("TextLabel")
JumpPowerLabel.Size = UDim2.new(1, -12, 0, 12)
JumpPowerLabel.Position = UDim2.new(0, 6, 0, 138)
JumpPowerLabel.BackgroundTransparency = 1
JumpPowerLabel.Font = Enum.Font.SourceSans
JumpPowerLabel.Text = "JumpPower"
JumpPowerLabel.TextColor3 = Color3.fromRGB(200, 200, 200)
JumpPowerLabel.TextSize = 10
JumpPowerLabel.TextXAlignment = Enum.TextXAlignment.Left
JumpPowerLabel.ZIndex = 21
JumpPowerLabel.Parent = SlidePanel

local JumpPowerBox = Instance.new("TextBox")
JumpPowerBox.Name = "JumpPowerBox"
JumpPowerBox.Size = UDim2.new(1, -12, 0, 18)
JumpPowerBox.Position = UDim2.new(0, 6, 0, 152)
JumpPowerBox.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
JumpPowerBox.BorderSizePixel = 0
JumpPowerBox.Font = Enum.Font.SourceSans
JumpPowerBox.Text = "50"
JumpPowerBox.PlaceholderText = "50"
JumpPowerBox.TextColor3 = PURPLE
JumpPowerBox.TextSize = 10
JumpPowerBox.ClearTextOnFocus = false
JumpPowerBox.ZIndex = 21
JumpPowerBox.Parent = SlidePanel
addStroke(JumpPowerBox, 1)

local ApplyButton = Instance.new("TextButton")
ApplyButton.Name = "ApplyButton"
ApplyButton.Size = UDim2.new(1, -12, 0, 20)
ApplyButton.Position = UDim2.new(0, 6, 0, 178)
ApplyButton.BackgroundColor3 = Color3.fromRGB(60, 0, 90)
ApplyButton.BorderSizePixel = 0
ApplyButton.Font = Enum.Font.SourceSansBold
ApplyButton.Text = "Apply"
ApplyButton.TextColor3 = PURPLE
ApplyButton.TextSize = 10
ApplyButton.ZIndex = 21
ApplyButton.Parent = SlidePanel
addStroke(ApplyButton, 1)

local ResetButton = Instance.new("TextButton")
ResetButton.Name = "ResetButton"
ResetButton.Size = UDim2.new(1, -12, 0, 18)
ResetButton.Position = UDim2.new(0, 6, 0, 202)
ResetButton.BackgroundColor3 = Color3.fromRGB(60, 30, 30)
ResetButton.BorderSizePixel = 0
ResetButton.Font = Enum.Font.SourceSansBold
ResetButton.Text = "Reset speed/jump"
ResetButton.TextColor3 = PURPLE
ResetButton.TextSize = 10
ResetButton.ZIndex = 21
ResetButton.Parent = SlidePanel
addStroke(ResetButton, 1)

ApplyButton.MouseButton1Click:Connect(function()
	local decalRaw = string.match(MyDecalBox.Text or "", "%d+")
	if decalRaw then currentMyDecalID = decalRaw; MyDecalBox.Text = decalRaw end
	local themeRaw = string.match(MyThemeBox.Text or "", "%d+")
	if themeRaw then currentMusicID = themeRaw; MyThemeBox.Text = themeRaw end

	local ws = tonumber(WalkSpeedBox.Text)
	local char = player.Character
	if char then
		local h = char:FindFirstChildOfClass("Humanoid")
		if h and ws then
			h.WalkSpeed = math.clamp(ws, 0, 1000)
		end
		local jp = tonumber(JumpPowerBox.Text)
		if h and jp then
			pcall(function() h.UseJumpPower = true end)
			h.JumpPower = math.clamp(jp, 0, 1000)
		end
	end
end)

ResetButton.MouseButton1Click:Connect(function()
	local char = player.Character
	if char then
		local h = char:FindFirstChildOfClass("Humanoid")
		if h then
			h.WalkSpeed = 16
			h.JumpPower = 50
			WalkSpeedBox.Text = "16"
			JumpPowerBox.Text = "50"
		end
	end
end)

MyDecalBox.FocusLost:Connect(function()
	local raw = string.match(MyDecalBox.Text or "", "%d+")
	if raw then currentMyDecalID = raw; MyDecalBox.Text = raw
	else MyDecalBox.Text = currentMyDecalID end
end)
MyThemeBox.FocusLost:Connect(function()
	local raw = string.match(MyThemeBox.Text or "", "%d+")
	if raw then currentMusicID = raw; MyThemeBox.Text = raw
	else MyThemeBox.Text = currentMusicID end
end)

-- ============================================================
-- ARROW TOGGLE
-- ============================================================
local isPanelOpen = false
local isAnimating = false
local basePosition = UDim2.new(0.5, -GUI_WIDTH/2, 0.15, 0)

ArrowButton.MouseButton1Click:Connect(function()
	if isAnimating then return end
	isAnimating = true

	isPanelOpen = not isPanelOpen
	ArrowButton.Text = isPanelOpen and "◄" or "►"

	local targetPos
	if isPanelOpen then
		targetPos = UDim2.new(0.5, -GUI_WIDTH/2 - PANEL_W, 0.15, 0)
		SlidePanel.Visible = true
		SlidePanel.Active = true
		SlidePanel.Selectable = true
	else
		targetPos = basePosition
		SlidePanel.Visible = false
		SlidePanel.Active = false
		SlidePanel.Selectable = false
	end

	local tween = TweenService:Create(
		MainFrame,
		TweenInfo.new(0.25, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),
		{ Position = targetPos }
	)
	tween.Completed:Connect(function()
		isAnimating = false
	end)
	tween:Play()
end)

giveBtoolsBtn.MouseButton1Click:Connect(giveBtools)

clearSkyboxBtn.MouseButton1Click:Connect(function()
	for _, v in ipairs(workspace:GetDescendants()) do
		if v:IsA("BasePart") and (v.Name == "Sky" or v.Name == "SkyAnchor") then
			pcall(function() v:Destroy() end)
		end
	end
end)

Features & Information

its goobydolan with MikeMercu colab gui

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts