Architect GUI
Key Required

Architect GUI

[UPDATE] Crazy Stairs + VRMediorceExploiterMediorceExploiter 2.3K views 91 executesUpdated Jan 26, 2026
Unrated
00
Lua Script•471 lines (12173 chars)
-- Architect's GUI (client-side)
-- MUST be a LocalScript running on the client (StarterPlayerScripts recommended).
-- Features:
--  - Hop Up/Down: teleports you to the closest platform ABOVE/BELOW your closest platform (same X/Z)
--  - Teleport to Pellet / MirrorPellet (Workspace/ServerOrb)
--  - Teleport to bottom floor (BigWindow anywhere in Workspace descendants)
--  - Closest platform list for all players (click a name to TP to their closest platform)
--  - X button deletes GUI, P toggles show/hide

local Players = game:GetService("Players")
local UIS = game:GetService("UserInputService")
local RunService = game:GetService("RunService")

if not RunService:IsClient() then
	warn("Architect's GUI must run as a LocalScript on the client.")
	return
end

local player = Players.LocalPlayer

-- ✅ Admin whitelist
local ADMINS = {
	[UserID Here] = true,
}

if not ADMINS[player.UserId] then
	warn("Architect's GUI: not an admin. GUI will not load.")
	return
end

local playerGui = player:WaitForChild("PlayerGui")

local GUI_NAME = "ArchitectsGui"
local gui = playerGui:FindFirstChild(GUI_NAME)

local function mk(class, props, parent)
	local o = Instance.new(class)
	for k, v in pairs(props or {}) do
		o[k] = v
	end
	o.Parent = parent
	return o
end

local function getHRP(plr: Player)
	local char = plr.Character or plr.CharacterAdded:Wait()
	return char:WaitForChild("HumanoidRootPart", 5)
end

-- ===== Finders =====
local function findOrb(which)
	local folder = workspace:FindFirstChild("ServerOrb")
	if not folder then return nil end
	return folder:FindFirstChild(which)
end

local function norm(s)
	return (tostring(s):gsub("%s+", ""))
end

local function findBigWindow()
	local direct = workspace:FindFirstChild("BigWindow")
	if direct then return direct end

	local deep = workspace:FindFirstChild("BigWindow", true)
	if deep then return deep end

	for _, d in ipairs(workspace:GetDescendants()) do
		if norm(d.Name) == "BigWindow" then
			return d
		end
	end
	return nil
end

-- ===== Platform cache / helpers =====
local function getPosForPlatform(inst: Instance): Vector3?
	-- Platforms are Models like L0X0Z0. Prefer Base part.
	if inst:IsA("Model") then
		local base = inst:FindFirstChild("Base", true)
		if base and base:IsA("BasePart") then
			return base.Position
		end
		local anyPart = inst:FindFirstChildWhichIsA("BasePart", true)
		if anyPart then
			return anyPart.Position
		end
		return inst:GetPivot().Position
	elseif inst:IsA("BasePart") then
		return inst.Position
	end
	return nil
end

local function getTeleportCFrame(inst: Instance): CFrame?
	if inst:IsA("BasePart") then
		return inst.CFrame
	end
	if inst:IsA("Model") then
		local base = inst:FindFirstChild("Base", true)
		if base and base:IsA("BasePart") then
			return base.CFrame
		end
		local anyPart = inst:FindFirstChildWhichIsA("BasePart", true)
		if anyPart then
			return anyPart.CFrame
		end
		return inst:GetPivot()
	end
	local anyPart = inst:FindFirstChildWhichIsA("BasePart", true)
	if anyPart then
		return anyPart.CFrame
	end
	return nil
end

local function tpTo(inst: Instance)
	if not inst then
		return false, "Target not found"
	end

	local hrp = getHRP(player)
	if not hrp then
		return false, "No HumanoidRootPart"
	end

	local cf = getTeleportCFrame(inst)
	if not cf then
		return false, "No teleport point"
	end

	hrp.CFrame = cf + Vector3.new(0, 4, 0)
	return true, "Teleported"
end

-- Parse names like: L0X0Z0 (supports negatives)
local function parsePlatformName(name: string)
	local lStr, xStr, zStr = string.match(name, "^L(-?%d+)X(-?%d+)Z(-?%d+)$")
	if not lStr then return nil end
	return tonumber(lStr), tonumber(xStr), tonumber(zStr)
end

local platformCache = {} -- array {inst, name, pos, L, X, Z}
local cacheDirty = true

local function rebuildPlatformCache()
	platformCache = {}
	local folder = workspace:FindFirstChild("Platforms")
	if not folder then
		cacheDirty = false
		return
	end

	for _, inst in ipairs(folder:GetChildren()) do
		local L, X, Z = parsePlatformName(inst.Name)
		local pos = getPosForPlatform(inst)
		if L and X and Z and pos then
			table.insert(platformCache, {
				inst = inst,
				name = inst.Name,
				pos = pos,
				L = L, X = X, Z = Z,
			})
		end
	end

	cacheDirty = false
end

local function ensureCache()
	if cacheDirty then rebuildPlatformCache() end
end

do
	local folder = workspace:FindFirstChild("Platforms")
	if folder then
		folder.ChildAdded:Connect(function() cacheDirty = true end)
		folder.ChildRemoved:Connect(function() cacheDirty = true end)
	end
end

local function nearestPlatformForPos(fromPos: Vector3)
	ensureCache()
	local best, bestDist = nil, math.huge
	for _, p in ipairs(platformCache) do
		local d = (fromPos - p.pos).Magnitude
		if d < bestDist then
			bestDist = d
			best = p
		end
	end
	return best, bestDist
end

local function hopRelative(direction: number)
	-- direction: +1 up, -1 down
	local hrp = getHRP(player)
	if not hrp then return false, "No character" end

	local current, dist = nearestPlatformForPos(hrp.Position)
	if not current then return false, "No platforms found" end

	-- find the nearest platform with same X/Z but L greater/less
	local bestCandidate, bestLDelta = nil, math.huge
	for _, p in ipairs(platformCache) do
		if p.X == current.X and p.Z == current.Z then
			local deltaL = p.L - current.L
			if direction > 0 and deltaL > 0 and deltaL < bestLDelta then
				bestLDelta = deltaL
				bestCandidate = p
			elseif direction < 0 and deltaL < 0 and math.abs(deltaL) < bestLDelta then
				bestLDelta = math.abs(deltaL)
				bestCandidate = p
			end
		end
	end

	if not bestCandidate then
		return false, (direction > 0 and "No higher platform found for this X/Z" or "No lower platform found for this X/Z")
	end

	local ok, msg = tpTo(bestCandidate.inst)
	if ok then
		return true, ("Hopped -> %s (from %s, %.1f studs away)"):format(bestCandidate.name, current.name, dist or 0)
	end
	return false, msg
end

-- ===== Build / rebuild GUI =====
if not gui then
	gui = mk("ScreenGui", { Name = GUI_NAME, ResetOnSpawn = false }, playerGui)
else
	local oldPanel = gui:FindFirstChild("Panel")
	if oldPanel then oldPanel:Destroy() end
end

local panel = mk("Frame", {
	Name = "Panel",
	Size = UDim2.new(0, 340, 0, 540),
	Position = UDim2.new(0, 20, 0.5, -270),
	BackgroundTransparency = 0.1,
	Active = true,
	Draggable = true,
}, gui)
mk("UICorner", { CornerRadius = UDim.new(0, 12) }, panel)

mk("TextLabel", {
	Size = UDim2.new(1, -60, 0, 28),
	Position = UDim2.new(0, 10, 0, 10),
	BackgroundTransparency = 1,
	Text = "Architect's GUI",
	Font = Enum.Font.GothamBold,
	TextSize = 16,
	TextXAlignment = Enum.TextXAlignment.Left,
}, panel)

local closeBtn = mk("TextButton", {
	Size = UDim2.new(0, 30, 0, 24),
	Position = UDim2.new(1, -40, 0, 12),
	Text = "X",
	Font = Enum.Font.GothamBold,
	TextSize = 14,
}, panel)
mk("UICorner", { CornerRadius = UDim.new(0, 8) }, closeBtn)

closeBtn.MouseButton1Click:Connect(function()
	if gui then gui:Destroy() end
end)

local function button(y, text)
	local b = mk("TextButton", {
		Size = UDim2.new(1, -20, 0, 36),
		Position = UDim2.new(0, 10, 0, y),
		Text = text,
		Font = Enum.Font.Gotham,
		TextSize = 14,
	}, panel)
	mk("UICorner", { CornerRadius = UDim.new(0, 10) }, b)
	return b
end

-- Floor hop buttons (no coordinate input)
local hopUp = mk("TextButton", {
	Size = UDim2.new(0.5, -15, 0, 36),
	Position = UDim2.new(0, 10, 0, 50),
	Text = "Hop Up (closest)",
	Font = Enum.Font.Gotham,
	TextSize = 14,
}, panel)
mk("UICorner", { CornerRadius = UDim.new(0, 10) }, hopUp)

local hopDown = mk("TextButton", {
	Size = UDim2.new(0.5, -15, 0, 36),
	Position = UDim2.new(0.5, 5, 0, 50),
	Text = "Hop Down (closest)",
	Font = Enum.Font.Gotham,
	TextSize = 14,
}, panel)
mk("UICorner", { CornerRadius = UDim.new(0, 10) }, hopDown)

local btnPellet = button(95, "Teleport to Pellet")
local btnMirror = button(137, "Teleport to MirrorPellet")
local btnBottom = button(179, "Teleport to bottom floor")

local status = mk("TextLabel", {
	Size = UDim2.new(1, -20, 0, 24),
	Position = UDim2.new(0, 10, 0, 225),
	BackgroundTransparency = 1,
	Text = "Ready. Press P to show/hide.",
	Font = Enum.Font.Gotham,
	TextSize = 12,
	TextXAlignment = Enum.TextXAlignment.Left,
	TextTransparency = 0.2,
}, panel)

local function setStatus(msg)
	if status and status.Parent then status.Text = msg end
end

hopUp.MouseButton1Click:Connect(function()
	local ok, msg = hopRelative(1)
	setStatus(ok and msg or ("Hop Up failed: " .. msg))
end)

hopDown.MouseButton1Click:Connect(function()
	local ok, msg = hopRelative(-1)
	setStatus(ok and msg or ("Hop Down failed: " .. msg))
end)

btnPellet.MouseButton1Click:Connect(function()
	local inst = findOrb("Pellet")
	local ok, msg = tpTo(inst)
	setStatus(ok and "OK: Pellet" or ("Fail: " .. msg))
end)

btnMirror.MouseButton1Click:Connect(function()
	local inst = findOrb("MirrorPellet")
	local ok, msg = tpTo(inst)
	setStatus(ok and "OK: MirrorPellet" or ("Fail: " .. msg))
end)

btnBottom.MouseButton1Click:Connect(function()
	local inst = findBigWindow()
	if not inst then
		setStatus("Fail: BigWindow not found (Workspace scan)")
		return
	end
	local ok, msg = tpTo(inst)
	setStatus(ok and "OK: bottom floor" or ("Fail: " .. msg))
end)

-- ===== Closest platform to players UI =====
mk("TextLabel", {
	Size = UDim2.new(1, -20, 0, 18),
	Position = UDim2.new(0, 10, 0, 260),
	BackgroundTransparency = 1,
	Text = "Closest Platform to Players (click a name to TP)",
	Font = Enum.Font.GothamSemibold,
	TextSize = 12,
	TextXAlignment = Enum.TextXAlignment.Left,
}, panel)

local scroll = mk("ScrollingFrame", {
	Size = UDim2.new(1, -20, 0, 250),
	Position = UDim2.new(0, 10, 0, 280),
	BackgroundTransparency = 0.2,
	BorderSizePixel = 0,
	AutomaticCanvasSize = Enum.AutomaticSize.Y,
	CanvasSize = UDim2.new(0, 0, 0, 0),
	ScrollBarThickness = 6,
}, panel)
mk("UICorner", { CornerRadius = UDim.new(0, 10) }, scroll)

mk("UIListLayout", {
	Padding = UDim.new(0, 4),
	SortOrder = Enum.SortOrder.LayoutOrder,
}, scroll)

local rowPool = {}  -- [Player] = TextButton
local rowConns = {} -- [Player] = connection

local function getHRPFor(plr: Player)
	local char = plr.Character
	if not char then return nil end
	return char:FindFirstChild("HumanoidRootPart")
end

local function ensureRow(plr: Player)
	if rowPool[plr] then return rowPool[plr] end

	local btn = mk("TextButton", {
		Size = UDim2.new(1, -10, 0, 20),
		BackgroundTransparency = 1,
		Font = Enum.Font.Gotham,
		TextSize = 12,
		TextXAlignment = Enum.TextXAlignment.Left,
		Text = plr.Name .. " -> ...",
	}, scroll)

	rowPool[plr] = btn

	rowConns[plr] = btn.MouseButton1Click:Connect(function()
		local hrp = getHRPFor(plr)
		if not hrp then
			setStatus(("Can't TP: %s has no character"):format(plr.Name))
			return
		end

		local closest = nearestPlatformForPos(hrp.Position)
		if not closest then
			setStatus("Can't TP: no platforms found.")
			return
		end

		local ok, msg = tpTo(closest.inst)
		setStatus(ok and ("TP -> " .. plr.Name .. " closest: " .. closest.name) or ("TP failed: " .. msg))
	end)

	return btn
end

local function cleanupRows()
	for plr, btn in pairs(rowPool) do
		if not plr.Parent then
			if rowConns[plr] then rowConns[plr]:Disconnect() end
			rowConns[plr] = nil
			btn:Destroy()
			rowPool[plr] = nil
		end
	end
end

task.spawn(function()
	while gui and gui.Parent do
		cleanupRows()
		ensureCache()

		for _, plr in ipairs(Players:GetPlayers()) do
			local row = ensureRow(plr)
			local hrp = getHRPFor(plr)

			if not hrp then
				row.Text = ("%s -> (no character)"):format(plr.Name)
			else
				local closest, dist = nearestPlatformForPos(hrp.Position)
				if closest then
					row.Text = ("%s -> %s (%.1f studs)"):format(plr.Name, closest.name, dist or 0)
				else
					row.Text = ("%s -> (no platforms found)"):format(plr.Name)
				end
			end
		end

		task.wait(0.5)
	end
end)

-- Toggle GUI with P
local shown = true
UIS.InputBegan:Connect(function(input, gpe)
	if gpe then return end
	if input.KeyCode == Enum.KeyCode.P then
		shown = not shown
		if panel and panel.Parent then
			panel.Visible = shown
		end
	end
end)

print("Architect's GUI loaded for", player.Name)
setStatus("Ready. Press P to show/hide.")

Features & Information

Teleport up & down platforms Teleport to pellet, mirror pellet, or bottom floor. Teleport to players. Generated by ChatGPT 5.2
#niche#good#exploit

Community Comments (5)

MediorceExploiterMediorceExploiterJan 26, 2026

*, holy bots, plus It's meant to be open source

Byte_Shopper68750Byte_Shopper68750Apr 22, 2026

*ing dumb* it’s not working

Byte_Shopper68750Byte_Shopper68750Apr 22, 2026

Keys

Byte_Shopper68750Byte_Shopper68750Apr 22, 2026

Kys

Byte_Shopper68750Byte_Shopper68750Apr 22, 2026

*in tard