Scan to open on your phone
Point a camera at the QR code - it opens this exact paste, no app needed.
https://codepastes.com/ai-buiAIbuilderPlain Text
-- AI BUILDER 2026
-- Professional Creator Edition
-- Runtime prototype for Roblox Studio Lite
-- Place this LocalScript in StarterPlayerScripts.
local Players = game:GetService("Players")
local TweenService = game:GetService("TweenService")
local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")
local OBBY_ASSET_ID = 121219424139703
local OBBY_MAINTENANCE_MESSAGE =
"The Obby generation is currently being worked on."
local SIMULATOR_MAINTENANCE_MESSAGE =
"The simulator generation is currently being worked on."
local old = playerGui:FindFirstChild("AIBuilder2026")
if old then old:Destroy() end
local PURPLE = Color3.fromRGB(151, 91, 255)
local PURPLE_DARK = Color3.fromRGB(69, 43, 108)
local BG = Color3.fromRGB(17, 17, 23)
local PANEL = Color3.fromRGB(27, 27, 36)
local PANEL2 = Color3.fromRGB(36, 35, 47)
local WHITE = Color3.fromRGB(245, 244, 250)
local MUTED = Color3.fromRGB(160, 157, 177)
local GREEN = Color3.fromRGB(75, 210, 137)
local RED = Color3.fromRGB(235, 83, 100)
local gui = Instance.new("ScreenGui")
gui.Name = "AIBuilder2026"
gui.ResetOnSpawn = false
gui.DisplayOrder = 20
gui.Parent = playerGui
local generated = {}
local generatedDocks = {}
local serial = 0
local currentPage = "Builder"
local statusLabel
local itemList
local pageHolder
local pages = {}
local gold = 1000
local goldLabel
local goldGui
local function create(class, props, parent)
local obj = Instance.new(class)
for k, v in pairs(props or {}) do
obj[k] = v
end
obj.Parent = parent
return obj
end
local function round(obj, radius)
create("UICorner", {
CornerRadius = UDim.new(0, radius or 10)
}, obj)
end
local function outline(obj, color, thickness)
create("UIStroke", {
Color = color or PURPLE,
Thickness = thickness or 1,
Transparency = 0.2
}, obj)
end
local function makeLabel(parent, text, size, color, bold)
return create("TextLabel", {
BackgroundTransparency = 1,
Text = text,
TextColor3 = color or WHITE,
TextSize = size or 14,
Font = bold and Enum.Font.GothamBold or Enum.Font.Gotham,
TextWrapped = true,
TextXAlignment = Enum.TextXAlignment.Left,
TextYAlignment = Enum.TextYAlignment.Center,
Size = UDim2.new(1, 0, 0, 28)
}, parent)
end
local function makeButton(parent, text, callback, height)
local b = create("TextButton", {
AutoButtonColor = true,
BackgroundColor3 = PANEL2,
BorderSizePixel = 0,
Size = UDim2.new(1, 0, 0, height or 40),
Text = text,
TextColor3 = WHITE,
TextSize = 13,
Font = Enum.Font.GothamSemibold,
TextWrapped = true
}, parent)
round(b, 9)
outline(b, Color3.fromRGB(69, 66, 86), 1)
b.Activated:Connect(function()
if callback then callback() end
end)
return b
end
local function makeInput(parent, placeholder, default, height)
local box = create("TextBox", {
BackgroundColor3 = BG,
BorderSizePixel = 0,
Size = UDim2.new(1, 0, 0, height or 40),
PlaceholderText = placeholder,
PlaceholderColor3 = MUTED,
Text = default or "",
TextColor3 = WHITE,
TextSize = 13,
Font = Enum.Font.Gotham,
ClearTextOnFocus = false,
TextXAlignment = Enum.TextXAlignment.Left
}, parent)
round(box, 8)
outline(box, Color3.fromRGB(65, 62, 80), 1)
create("UIPadding", {
PaddingLeft = UDim.new(0, 10),
PaddingRight = UDim.new(0, 8)
}, box)
return box
end
local function makeSection(parent, title, description)
local section = create("Frame", {
BackgroundColor3 = PANEL,
BorderSizePixel = 0,
Size = UDim2.new(1, 0, 0, 10),
AutomaticSize = Enum.AutomaticSize.Y
}, parent)
round(section, 12)
create("UIPadding", {
PaddingTop = UDim.new(0, 12),
PaddingBottom = UDim.new(0, 12),
PaddingLeft = UDim.new(0, 12),
PaddingRight = UDim.new(0, 12)
}, section)
create("UIListLayout", {
Padding = UDim.new(0, 8),
SortOrder = Enum.SortOrder.LayoutOrder
}, section)
makeLabel(section, title, 16, WHITE, true).LayoutOrder = 1
if description then
local d = makeLabel(section, description, 12, MUTED, false)
d.AutomaticSize = Enum.AutomaticSize.Y
d.Size = UDim2.new(1, 0, 0, 30)
d.LayoutOrder = 2
end
return section
end
local function setStatus(message, isError)
if statusLabel then
statusLabel.Text = message
statusLabel.TextColor3 = isError and RED or GREEN
end
end
-- GENERATED GUI DOCK MANAGER
-- Every generated GUI gets its own vertically stacked dock button.
local function relayoutGeneratedDocks()
local liveDocks = {}
for _, entry in ipairs(generatedDocks) do
if entry.button and entry.button.Parent
and entry.screen and entry.screen.Parent then
table.insert(liveDocks, entry)
end
end
table.clear(generatedDocks)
for _, entry in ipairs(liveDocks) do
table.insert(generatedDocks, entry)
end
for index, entry in ipairs(generatedDocks) do
entry.button.Position = UDim2.new(
0, 12,
0, 86 + ((index - 1) * 53)
)
end
end
local function refreshItems()
if not itemList then return end
for _, child in ipairs(itemList:GetChildren()) do
if child:IsA("Frame") or child:IsA("TextLabel") then
child:Destroy()
end
end
if #generated == 0 then
local empty = makeLabel(
itemList,
"No generated items yet. Create something in a generator.",
12,
MUTED,
false
)
empty.Size = UDim2.new(1, -8, 0, 48)
return
end
for index = #generated, 1, -1 do
local entry = generated[index]
local row = create("Frame", {
BackgroundColor3 = PANEL2,
BorderSizePixel = 0,
Size = UDim2.new(1, -4, 0, 54)
}, itemList)
round(row, 8)
local name = makeLabel(row, entry.name, 12, WHITE, true)
name.Position = UDim2.new(0, 9, 0, 3)
name.Size = UDim2.new(1, -86, 0, 22)
local kind = makeLabel(row, entry.kind, 10, MUTED, false)
kind.Position = UDim2.new(0, 9, 0, 25)
kind.Size = UDim2.new(1, -86, 0, 20)
local delete = create("TextButton", {
BackgroundColor3 = Color3.fromRGB(94, 39, 53),
BorderSizePixel = 0,
Text = "Delete",
TextColor3 = WHITE,
TextSize = 11,
Font = Enum.Font.GothamBold,
Size = UDim2.new(0, 60, 0, 30),
Position = UDim2.new(1, -67, 0.5, -15)
}, row)
round(delete, 7)
delete.Activated:Connect(function()
if entry.object and entry.object.Parent then
entry.object:Destroy()
end
if entry.gui and entry.gui.Parent then
entry.gui:Destroy()
end
local actualIndex = table.find(generated, entry)
if actualIndex then
table.remove(generated, actualIndex)
end
refreshItems()
relayoutGeneratedDocks()
setStatus("Deleted: " .. entry.name)
end)
end
end
local function register(name, kind, object, extraGui)
serial += 1
table.insert(generated, {
id = serial,
name = name,
kind = kind,
object = object,
gui = extraGui
})
refreshItems()
setStatus("Generated: " .. name)
end
-- Flat, consistent directions prevent builds from drifting
-- when the player looks up or down.
local function playerOrigin()
local character = player.Character
local root = character and character:FindFirstChild("HumanoidRootPart")
if root then
local forward = Vector3.new(
root.CFrame.LookVector.X,
0,
root.CFrame.LookVector.Z
)
if forward.Magnitude < 0.001 then
forward = Vector3.new(0, 0, -1)
else
forward = forward.Unit
end
local right = Vector3.new(-forward.Z, 0, forward.X)
return root.Position + forward * 45, forward, right
end
return Vector3.new(0, 10, 0),
Vector3.new(0, 0, -1),
Vector3.new(1, 0, 0)
end
local function newBuildFolder(name)
local folder = Instance.new("Folder")
folder.Name = "AIBuild_" .. name .. "_" .. tostring(serial + 1)
folder.Parent = workspace
return folder
end
local function part(parent, name, size, position, color, material)
local p = Instance.new("Part")
p.Name = name
p.Size = size
p.Position = position
p.Anchored = true
p.Color = color or PURPLE
p.Material = material or Enum.Material.SmoothPlastic
p.TopSurface = Enum.SurfaceType.Smooth
p.BottomSurface = Enum.SurfaceType.Smooth
p.Parent = parent
return p
end
-- Correctly orients parts to the player's horizontal direction.
local function orientedPart(parent, name, size, position, forward, color, material)
local p = Instance.new("Part")
p.Name = name
p.Size = size
p.Anchored = true
p.Color = color or PURPLE
p.Material = material or Enum.Material.SmoothPlastic
p.TopSurface = Enum.SurfaceType.Smooth
p.BottomSurface = Enum.SurfaceType.Smooth
local flatForward = Vector3.new(forward.X, 0, forward.Z)
if flatForward.Magnitude < 0.001 then
flatForward = Vector3.new(0, 0, -1)
else
flatForward = flatForward.Unit
end
local right = Vector3.new(-flatForward.Z, 0, flatForward.X)
p.CFrame = CFrame.fromMatrix(position, right, Vector3.yAxis, -flatForward)
p.Parent = parent
return p
end
local function addSign(parent, text, position, size)
local p = part(
parent,
"Sign",
size or Vector3.new(12, 4, 1),
position,
Color3.fromRGB(31, 28, 43),
Enum.Material.SmoothPlastic
)
local surface = create("SurfaceGui", {
Face = Enum.NormalId.Front,
AlwaysOnTop = true,
SizingMode = Enum.SurfaceGuiSizingMode.PixelsPerStud,
PixelsPerStud = 35
}, p)
create("TextLabel", {
BackgroundTransparency = 1,
Size = UDim2.fromScale(1, 1),
Text = text,
TextColor3 = WHITE,
TextScaled = true,
Font = Enum.Font.GothamBold
}, surface)
return p
end
-- LOCAL DEMO CURRENCY
local function ensureGoldGui()
if goldGui and goldGui.Parent then return end
goldGui = create("ScreenGui", {
Name = "AIBuildDemoCurrency",
ResetOnSpawn = false,
DisplayOrder = 12
}, playerGui)
local label = create("TextLabel", {
Name = "GoldLabel",
BackgroundColor3 = BG,
BorderSizePixel = 0,
Position = UDim2.new(1, -170, 0, 14),
Size = UDim2.new(0, 155, 0, 40),
Text = "Gold: " .. tostring(gold),
TextColor3 = Color3.fromRGB(255, 221, 105),
TextSize = 16,
Font = Enum.Font.GothamBold
}, goldGui)
round(label, 10)
outline(label, PURPLE, 1)
goldLabel = label
end
local function addGold(amount)
gold += amount
ensureGoldGui()
goldLabel.Text = "Gold: " .. tostring(gold)
end
local function updateGoldDisplay()
ensureGoldGui()
goldLabel.Text = "Gold: " .. tostring(gold)
end
-- BASIC BUILDER
local function generateStructure(request)
request = string.lower(request or "tower")
local origin, forward, right = playerOrigin()
local folder = newBuildFolder("Structure")
local color = Color3.fromRGB(
math.random(70, 220),
math.random(70, 220),
math.random(100, 255)
)
local stone = Color3.fromRGB(103, 105, 121)
local name = "Tower"
local function at(x, y, z)
return origin + right * x + Vector3.new(0, y, 0) + forward * z
end
local function localPart(partName, size, x, y, z, partColor, material)
return orientedPart(
folder,
partName,
size,
at(x, y, z),
forward,
partColor,
material
)
end
if string.find(request, "bridge") then
name = "Bridge"
local length = 80
local deckY = 0
orientedPart(folder, "BridgeDeck",
Vector3.new(16, 2, length),
at(0, deckY, 0), forward, stone,
Enum.Material.Concrete)
for _, side in ipairs({-1, 1}) do
orientedPart(folder, "BridgeRail",
Vector3.new(1, 3, length),
at(side * 7, deckY + 2.5, 0),
forward, color, Enum.Material.Metal)
for z = -35, 35, 10 do
orientedPart(folder, "RailingPost",
Vector3.new(1, 4, 1),
at(side * 7, deckY + 2, z),
forward, color, Enum.Material.Metal)
end
end
for z = -30, 30, 15 do
for _, side in ipairs({-1, 1}) do
orientedPart(folder, "BridgeSupport",
Vector3.new(3, 12, 3),
at(side * 5, deckY - 8, z),
forward, stone, Enum.Material.Concrete)
end
end
for _, z in ipairs({-48, 48}) do
orientedPart(folder, "BridgeEntrance",
Vector3.new(22, 2, 16),
at(0, deckY, z),
forward,
Color3.fromRGB(75, 160, 115),
Enum.Material.Concrete)
end
addSign(folder, "BRIDGE", at(0, 6, -49))
elseif string.find(request, "castle")
or string.find(request, "fort") then
name = "Castle"
localPart("CastleBase", Vector3.new(42, 4, 42),
0, 0, 0, stone)
for _, x in ipairs({-16, 16}) do
for _, z in ipairs({-16, 16}) do
localPart("CastleTower", Vector3.new(9, 24, 9),
x, 14, z, color)
localPart("TowerTop", Vector3.new(11, 2, 11),
x, 27, z, stone)
end
end
localPart("BackWall", Vector3.new(32, 15, 3),
0, 9, -17, color)
localPart("LeftWall", Vector3.new(3, 15, 32),
-17, 9, 0, color)
localPart("RightWall", Vector3.new(3, 15, 32),
17, 9, 0, color)
localPart("FrontWallLeft", Vector3.new(12, 15, 3),
-10, 9, 17, color)
localPart("FrontWallRight", Vector3.new(12, 15, 3),
10, 9, 17, color)
localPart("GateTop", Vector3.new(10, 4, 4),
0, 15, 17, stone)
localPart("GateFloor", Vector3.new(10, 1, 8),
0, 2.5, 18, stone, Enum.Material.Concrete)
elseif string.find(request, "skyscraper")
or string.find(request, "building") then
name = "Skyscraper"
local width = 28
local depth = 28
local floors = 12
local floorHeight = 4
localPart("Foundation", Vector3.new(width + 4, 3, depth + 4),
0, 0, 0, stone, Enum.Material.Concrete)
for floor = 1, floors do
local floorY = floor * floorHeight
localPart("Floor_" .. floor,
Vector3.new(width, 1, depth),
0, floorY, 0, color, Enum.Material.Concrete)
local wallHeight = floorHeight - 1
localPart("FrontWall_" .. floor,
Vector3.new(width, wallHeight, 0.5),
0, floorY + 2, -depth / 2,
color, Enum.Material.Concrete)
localPart("BackWall_" .. floor,
Vector3.new(width, wallHeight, 0.5),
0, floorY + 2, depth / 2,
color, Enum.Material.Concrete)
localPart("LeftWall_" .. floor,
Vector3.new(0.5, wallHeight, depth),
-width / 2, floorY + 2, 0,
color, Enum.Material.Concrete)
localPart("RightWall_" .. floor,
Vector3.new(0.5, wallHeight, depth),
width / 2, floorY + 2, 0,
color, Enum.Material.Concrete)
for _, x in ipairs({-9, -3, 3, 9}) do
for _, side in ipairs({-1, 1}) do
local window = localPart(
"Window",
Vector3.new(3, 2, 0.25),
x,
floorY + 2,
side * (depth / 2 + 0.3),
Color3.fromRGB(111, 208, 255),
Enum.Material.Glass
)
window.Transparency = 0.2
window.CanCollide = false
end
end
for _, z in ipairs({-9, -3, 3, 9}) do
for _, side in ipairs({-1, 1}) do
local window = localPart(
"SideWindow",
Vector3.new(0.25, 2, 3),
side * (width / 2 + 0.3),
floorY + 2,
z,
Color3.fromRGB(111, 208, 255),
Enum.Material.Glass
)
window.Transparency = 0.2
window.CanCollide = false
end
end
end
local roofY = floors * floorHeight + 2
localPart("Roof", Vector3.new(width + 3, 2, depth + 3),
0, roofY, 0, stone, Enum.Material.Metal)
localPart("Antenna", Vector3.new(1, 12, 1),
0, roofY + 7, 0, color, Enum.Material.Metal)
elseif string.find(request, "tree") then
name = "Giant Tree"
part(folder, "Trunk", Vector3.new(7, 26, 7),
at(0, 12, 0),
Color3.fromRGB(112, 70, 42), Enum.Material.Wood)
for _, offset in ipairs({
Vector3.new(0, 26, 0),
Vector3.new(7, 21, 0),
Vector3.new(-7, 21, 0),
Vector3.new(0, 21, 7),
Vector3.new(0, 21, -7)
}) do
local leaf = part(folder, "Leaves",
Vector3.new(15, 15, 15),
origin + offset,
Color3.fromRGB(57, 176, 93),
Enum.Material.Grass)
leaf.Shape = Enum.PartType.Ball
end
else
name = "Tower"
part(folder, "TowerBase", Vector3.new(22, 3, 22),
at(0, 0, 0), stone)
for floor = 1, 10 do
local width = math.max(7, 20 - floor)
part(folder, "TowerFloor_" .. floor,
Vector3.new(width, 4, width),
at(0, floor * 4, 0), color)
end
part(folder, "TowerRoof", Vector3.new(8, 8, 8),
at(0, 45, 0), stone)
part(folder, "TowerSpire", Vector3.new(2, 12, 2),
at(0, 55, 0), color)
end
register(name, "Builder", folder)
end
-- MAP BUILDER
local function generateMap(mapType)
mapType = string.lower(mapType or "island")
local origin, forward, right = playerOrigin()
local folder = newBuildFolder("Map")
local green = Color3.fromRGB(70, 153, 90)
local road = Color3.fromRGB(57, 59, 70)
local name = "Island Map"
local base = part(folder, "Ground",
Vector3.new(180, 3, 180),
origin - Vector3.new(0, 3, 0),
green, Enum.Material.Grass)
if string.find(mapType, "city") then
name = "City Map"
base.Color = Color3.fromRGB(83, 145, 88)
part(folder, "MainRoad", Vector3.new(22, 0.5, 160),
origin + Vector3.new(0, -1.2, 0), road)
part(folder, "CrossRoad", Vector3.new(160, 0.5, 20),
origin + Vector3.new(0, -1.1, 0), road)
for x = -60, 60, 30 do
for z = -60, 60, 30 do
if math.abs(x) > 18 and math.abs(z) > 18 then
local height = math.random(18, 48)
part(folder, "CityBuilding",
Vector3.new(18, height, 18),
origin + Vector3.new(x, height / 2, z),
Color3.fromRGB(
math.random(85, 180),
math.random(85, 180),
math.random(100, 210)
))
end
end
end
elseif string.find(mapType, "town") then
name = "Town Map"
base.Size = Vector3.new(180, 3, 180)
base.Color = Color3.fromRGB(94, 151, 91)
part(folder, "TownMainRoad", Vector3.new(14, 0.5, 150),
origin + Vector3.new(0, -1.2, 0), road)
part(folder, "TownCrossRoad", Vector3.new(150, 0.5, 12),
origin + Vector3.new(0, -1.1, 0), road)
for x = -60, 60, 30 do
for z = -60, 60, 30 do
if math.abs(x) > 12 or math.abs(z) > 12 then
local houseColor = Color3.fromRGB(
math.random(140, 235),
math.random(100, 190),
math.random(100, 210)
)
local houseHeight = math.random(10, 15)
local houseWidth = math.random(12, 16)
local houseDepth = math.random(12, 16)
local housePosition = origin + Vector3.new(x, 0, z)
part(folder, "House",
Vector3.new(houseWidth, houseHeight, houseDepth),
housePosition + Vector3.new(0, houseHeight / 2, 0),
houseColor)
part(folder, "HouseRoof",
Vector3.new(houseWidth + 2, 2, houseDepth + 2),
housePosition + Vector3.new(0, houseHeight + 1, 0),
Color3.fromRGB(90, 57, 67),
Enum.Material.Slate)
part(folder, "HouseDoor",
Vector3.new(3, 6, 0.5),
housePosition + Vector3.new(0, 3, -houseDepth / 2 - 0.3),
Color3.fromRGB(96, 61, 40),
Enum.Material.Wood)
for _, windowX in ipairs({-4, 4}) do
local window = part(folder, "HouseWindow",
Vector3.new(2.5, 2.5, 0.4),
housePosition + Vector3.new(
windowX, houseHeight * 0.65, -houseDepth / 2 - 0.35
),
Color3.fromRGB(125, 208, 255),
Enum.Material.Glass)
window.Transparency = 0.15
window.CanCollide = false
end
end
end
end
elseif string.find(mapType, "forest") then
name = "Forest Map"
for i = 1, 35 do
local x = math.random(-75, 75)
local z = math.random(-75, 75)
local trunkHeight = math.random(8, 15)
part(folder, "TreeTrunk",
Vector3.new(3, trunkHeight, 3),
origin + Vector3.new(x, trunkHeight / 2, z),
Color3.fromRGB(107, 70, 43), Enum.Material.Wood)
local leaves = part(folder, "TreeLeaves",
Vector3.new(12, 12, 12),
origin + Vector3.new(x, trunkHeight + 5, z),
Color3.fromRGB(44, math.random(115, 180), 65),
Enum.Material.Grass)
leaves.Shape = Enum.PartType.Ball
end
elseif string.find(mapType, "island")
or string.find(mapType, "fantasy") then
name = "Island Map"
base.Size = Vector3.new(110, 8, 110)
base.Position = origin - Vector3.new(0, 6, 0)
base.Material = Enum.Material.Grass
for i = 1, 12 do
local x = math.random(-42, 42)
local z = math.random(-42, 42)
local h = math.random(8, 28)
part(folder, "Rock",
Vector3.new(math.random(8, 18), h, math.random(8, 18)),
origin + Vector3.new(x, h / 2 - 2, z),
Color3.fromRGB(91, 94, 111),
Enum.Material.Slate)
end
for i = 1, 5 do
local x = math.random(-35, 35)
local z = math.random(-35, 35)
part(folder, "IslandTree",
Vector3.new(3, 15, 3),
origin + Vector3.new(x, 7, z),
Color3.fromRGB(105, 71, 43),
Enum.Material.Wood)
local leaves = part(folder, "IslandLeaves",
Vector3.new(11, 11, 11),
origin + Vector3.new(x, 16, z),
Color3.fromRGB(60, 183, 103),
Enum.Material.Grass)
leaves.Shape = Enum.PartType.Ball
end
end
addSign(folder, name,
origin + forward * -68 + Vector3.new(0, 4, 0))
register(name, "Map Builder", folder)
end
-- OBBY GENERATOR
-- Temporarily disabled while the generator is being worked on.
local function generateObby()
setStatus(OBBY_MAINTENANCE_MESSAGE)
end
-- ADVANCED GUI GENERATOR
local function generateUI(style)
style = string.lower(style or "shop")
local screen = Instance.new("ScreenGui")
screen.Name = "Generated_" .. style .. "_" .. tostring(serial + 1)
screen.ResetOnSpawn = false
screen.DisplayOrder = 10
screen.Parent = playerGui
local panel = create("Frame", {
Name = "MainPanel",
AnchorPoint = Vector2.new(0.5, 0.5),
Position = UDim2.fromScale(0.5, 0.5),
Size = UDim2.new(0.75, 0, 0.7, 0),
BackgroundColor3 = BG,
BorderSizePixel = 0
}, screen)
round(panel, 15)
outline(panel, PURPLE, 2)
create("UISizeConstraint", {
MinSize = Vector2.new(280, 250),
MaxSize = Vector2.new(650, 560)
}, panel)
local header = create("Frame", {
BackgroundColor3 = Color3.fromRGB(37, 30, 53),
BorderSizePixel = 0,
Size = UDim2.new(1, 0, 0, 55)
}, panel)
round(header, 15)
local titleText = string.upper(style)
local title = makeLabel(header, titleText, 18, WHITE, true)
title.Position = UDim2.new(0, 16, 0, 3)
title.Size = UDim2.new(1, -70, 1, -6)
local close = create("TextButton", {
BackgroundColor3 = Color3.fromRGB(62, 39, 76),
BorderSizePixel = 0,
Size = UDim2.new(0, 35, 0, 35),
Position = UDim2.new(1, -44, 0, 10),
Text = "X",
TextColor3 = WHITE,
Font = Enum.Font.GothamBold,
TextSize = 16
}, header)
round(close, 9)
close.Activated:Connect(function()
panel.Visible = false
end)
local content = create("ScrollingFrame", {
BackgroundTransparency = 1,
BorderSizePixel = 0,
Position = UDim2.new(0, 12, 0, 65),
Size = UDim2.new(1, -24, 1, -78),
CanvasSize = UDim2.new(),
AutomaticCanvasSize = Enum.AutomaticSize.Y,
ScrollBarThickness = 4,
ScrollBarImageColor3 = PURPLE
}, panel)
create("UIListLayout", {
Padding = UDim.new(0, 10),
SortOrder = Enum.SortOrder.LayoutOrder
}, content)
local function card(cardTitle, description, buttonText, callback)
local c = makeSection(content, cardTitle, description)
makeButton(c, buttonText, callback, 38)
return c
end
if string.find(style, "shop") then
for i = 1, 4 do
card("Item " .. i,
"A sample shop item. Connect a real purchase system to sell items.",
"BUY - " .. (i * 100) .. " Gold",
function()
setStatus("Demo shop button pressed. Add a server purchase script for real buying.")
end)
end
elseif string.find(style, "inventory") then
card("Your Inventory",
"Sample inventory slots for a generated interface.",
"Slot 1 | Empty",
function()
setStatus("Inventory slot selected.")
end)
card("Equipment", "Put equipment controls here.",
"Equip Item", function()
setStatus("Demo equip button pressed.")
end)
elseif string.find(style, "setting") then
card("Settings", "Sample settings panel.",
"Toggle Music", function()
setStatus("Demo setting toggled.")
end)
card("Gameplay", "More settings can be connected to your game.",
"Toggle Effects", function()
setStatus("Demo effects setting toggled.")
end)
elseif string.find(style, "loading") then
local barBack = create("Frame", {
BackgroundColor3 = PANEL2,
BorderSizePixel = 0,
Size = UDim2.new(1, 0, 0, 20)
}, content)
round(barBack, 8)
local bar = create("Frame", {
BackgroundColor3 = PURPLE,
BorderSizePixel = 0,
Size = UDim2.new(0, 0, 1, 0)
}, barBack)
round(bar, 8)
TweenService:Create(bar, TweenInfo.new(2), {
Size = UDim2.fromScale(1, 1)
}):Play()
else
card("Welcome", "A polished generated game menu.",
"PLAY", function()
panel.Visible = false
setStatus("Play button pressed.")
end)
card("Options", "Customize your experience.",
"SETTINGS", function()
setStatus("Settings button pressed.")
end)
card("About", "Created using AI BUILDER 2026.",
"CLOSE MENU", function()
panel.Visible = false
end)
end
local dock = create("TextButton", {
BackgroundColor3 = PURPLE_DARK,
BorderSizePixel = 0,
Position = UDim2.new(0, 12, 0, 86),
Size = UDim2.new(0, 54, 0, 45),
Text = string.upper(string.sub(style, 1, 4)),
TextColor3 = WHITE,
TextSize = 11,
Font = Enum.Font.GothamBold
}, screen)
round(dock, 10)
outline(dock, PURPLE, 1)
dock.Activated:Connect(function()
panel.Visible = not panel.Visible
end)
table.insert(generatedDocks, {
button = dock,
screen = screen
})
relayoutGeneratedDocks()
register("Advanced " .. titleText .. " GUI",
"GUI Generator", nil, screen)
end
-- TYCOON GENERATOR
local function generateTycoon()
local origin, forward, right = playerOrigin()
local folder = newBuildFolder("Tycoon")
part(folder, "TycoonBase", Vector3.new(100, 3, 100),
origin, Color3.fromRGB(74, 119, 88))
addSign(folder, "YOUR TYCOON",
origin + forward * -35 + Vector3.new(0, 5, 0))
for i = 1, 4 do
local x = (i - 2.5) * 20
part(folder, "Machine_" .. i,
Vector3.new(12, 12, 12),
origin + right * x + forward * -5 + Vector3.new(0, 8, 0),
Color3.fromHSV(i / 5, 0.7, 1))
local pad = part(folder, "PurchasePad_" .. i,
Vector3.new(12, 1, 12),
origin + right * x + forward * 20,
Color3.fromRGB(70, 215, 130),
Enum.Material.Neon)
addSign(folder, "BUY " .. i,
pad.Position + Vector3.new(0, 4, 0))
local bought = false
pad.Touched:Connect(function(hit)
local character = player.Character
if not character or not hit:IsDescendantOf(character) then
return
end
if bought then return end
local price = i * 100
if gold >= price then
gold -= price
updateGoldDisplay()
bought = true
pad.Color = Color3.fromRGB(75, 90, 85)
setStatus("Demo purchase " .. i .. " activated.")
else
setStatus("Not enough demo Gold for purchase " .. i, true)
end
end)
end
local conveyor = part(folder, "Conveyor",
Vector3.new(16, 1, 40),
origin + forward * -25 + Vector3.new(0, 2, 0),
Color3.fromRGB(76, 81, 100),
Enum.Material.Metal)
part(folder, "CashCollector",
Vector3.new(15, 4, 8),
conveyor.Position + forward * -20 + Vector3.new(0, 2, 0),
Color3.fromRGB(255, 207, 71),
Enum.Material.Neon)
register("Starter Tycoon", "Tycoon Generator", folder)
end
-- SIMULATOR GENERATOR
-- Temporarily disabled while the generator is being worked on.
local function generateSimulator()
setStatus(SIMULATOR_MAINTENANCE_MESSAGE)
end
-- SCRIPT TEMPLATE LIBRARY
local templates = {
["Gold leaderstats"] = [[
-- Place this Script in ServerScriptService
game.Players.PlayerAdded:Connect(function(player)
local stats = Instance.new("Folder")
stats.Name = "leaderstats"
stats.Parent = player
local gold = Instance.new("IntValue")
gold.Name = "Gold"
gold.Value = 1000
gold.Parent = stats
end)
]],
["Create a part"] = [[
-- Place this Script in ServerScriptService
local part = Instance.new("Part")
part.Name = "GeneratedPart"
part.Size = Vector3.new(8, 2, 8)
part.Position = Vector3.new(0, 5, 0)
part.Anchored = true
part.Parent = workspace
]],
["Touch for Gold"] = [[
-- Put this Script inside a Part in Workspace
local pad = script.Parent
local debounce = {}
pad.Touched:Connect(function(hit)
local character = hit.Parent
local player = game.Players:GetPlayerFromCharacter(character)
if not player or debounce[player] then return end
local stats = player:FindFirstChild("leaderstats")
local gold = stats and stats:FindFirstChild("Gold")
if not gold then return end
debounce[player] = true
gold.Value += 10
task.wait(1)
debounce[player] = nil
end)
]],
["Kill brick"] = [[
-- Put this Script inside a Part in Workspace
local brick = script.Parent
brick.Touched:Connect(function(hit)
local character = hit.Parent
local humanoid = character:FindFirstChildOfClass("Humanoid")
if humanoid then
humanoid.Health = 0
end
end)
]],
["Speed pad"] = [[
-- Put this Script inside a Part in Workspace
local pad = script.Parent
local debounce = {}
pad.Touched:Connect(function(hit)
local character = hit.Parent
local humanoid = character:FindFirstChildOfClass("Humanoid")
if not humanoid or debounce[character] then return end
debounce[character] = true
local oldSpeed = humanoid.WalkSpeed
humanoid.WalkSpeed = 32
task.wait(5)
if humanoid.Parent then
humanoid.WalkSpeed = oldSpeed
end
debounce[character] = nil
end)
]]
}
-- MAIN INTERFACE
local main = create("Frame", {
Name = "MainWindow",
AnchorPoint = Vector2.new(0.5, 0.5),
Position = UDim2.fromScale(0.5, 0.5),
Size = UDim2.new(0.88, 0, 0.82, 0),
BackgroundColor3 = BG,
BorderSizePixel = 0,
Visible = true
}, gui)
round(main, 14)
outline(main, Color3.fromRGB(74, 63, 100), 1)
create("UISizeConstraint", {
MinSize = Vector2.new(310, 360),
MaxSize = Vector2.new(780, 650)
}, main)
local top = create("Frame", {
BackgroundColor3 = Color3.fromRGB(25, 23, 34),
BorderSizePixel = 0,
Size = UDim2.new(1, 0, 0, 58)
}, main)
round(top, 14)
local title = makeLabel(top, "AI BUILDER 2026", 18, WHITE, true)
title.Position = UDim2.new(0, 16, 0, 4)
title.Size = UDim2.new(1, -75, 0, 27)
local subtitle = makeLabel(top, "PROFESSIONAL CREATOR EDITION", 9, MUTED, true)
subtitle.Position = UDim2.new(0, 17, 0, 31)
subtitle.Size = UDim2.new(1, -75, 0, 17)
local closeMain = create("TextButton", {
BackgroundColor3 = Color3.fromRGB(62, 39, 76),
BorderSizePixel = 0,
Size = UDim2.new(0, 35, 0, 35),
Position = UDim2.new(1, -45, 0, 11),
Text = "X",
TextColor3 = WHITE,
TextSize = 16,
Font = Enum.Font.GothamBold
}, top)
round(closeMain, 9)
local dockMain = create("TextButton", {
BackgroundColor3 = PURPLE_DARK,
BorderSizePixel = 0,
Position = UDim2.new(0, 10, 0.5, -24),
Size = UDim2.new(0, 48, 0, 48),
Text = "AI\nBUILD",
TextColor3 = WHITE,
TextSize = 11,
Font = Enum.Font.GothamBold,
Visible = false
}, gui)
round(dockMain, 10)
outline(dockMain, PURPLE, 1)
closeMain.Activated:Connect(function()
main.Visible = false
dockMain.Visible = true
end)
dockMain.Activated:Connect(function()
main.Visible = true
dockMain.Visible = false
end)
local nav = create("ScrollingFrame", {
Name = "Navigation",
BackgroundTransparency = 1,
BorderSizePixel = 0,
Position = UDim2.new(0, 10, 0, 68),
Size = UDim2.new(0, 125, 1, -80),
CanvasSize = UDim2.new(),
AutomaticCanvasSize = Enum.AutomaticSize.Y,
ScrollBarThickness = 3,
ScrollBarImageColor3 = PURPLE
}, main)
create("UIListLayout", {
Padding = UDim.new(0, 6),
SortOrder = Enum.SortOrder.LayoutOrder
}, nav)
pageHolder = create("Frame", {
Name = "Pages",
BackgroundTransparency = 1,
Position = UDim2.new(0, 145, 0, 68),
Size = UDim2.new(1, -155, 1, -80)
}, main)
local function makePage(name)
local page = create("ScrollingFrame", {
Name = name,
BackgroundTransparency = 1,
BorderSizePixel = 0,
Size = UDim2.fromScale(1, 1),
CanvasSize = UDim2.new(),
AutomaticCanvasSize = Enum.AutomaticSize.Y,
ScrollBarThickness = 4,
ScrollBarImageColor3 = PURPLE,
Visible = false
}, pageHolder)
create("UIListLayout", {
Padding = UDim.new(0, 10),
SortOrder = Enum.SortOrder.LayoutOrder
}, page)
pages[name] = page
return page
end
local tabNames = {
"Builder",
"Advanced Obby",
"Advanced GUI",
"Map Builder",
"Tycoon",
"Simulator",
"Scripting",
"Ask AI",
"Generated Items"
}
local function switchPage(name)
currentPage = name
for pageName, page in pairs(pages) do
page.Visible = pageName == name
end
for _, button in ipairs(nav:GetChildren()) do
if button:IsA("TextButton") then
local selected = button.Name == name
button.BackgroundColor3 = selected and PURPLE_DARK or PANEL
end
end
end
for _, name in ipairs(tabNames) do
local button = create("TextButton", {
Name = name,
BackgroundColor3 = PANEL,
BorderSizePixel = 0,
Size = UDim2.new(1, -3, 0, 38),
Text = name,
TextColor3 = WHITE,
TextSize = 11,
Font = Enum.Font.GothamSemibold,
TextWrapped = true
}, nav)
round(button, 8)
button.Activated:Connect(function()
switchPage(name)
end)
makePage(name)
end
-- BUILDER PAGE
do
local page = pages["Builder"]
local intro = makeSection(page, "Build something cool",
"Create towers, castles, skyscrapers, bridges, trees, and complete maps.")
local structureInput = makeInput(intro,
"Try: tower, castle, skyscraper, bridge, tree", "tower")
makeButton(intro, "Generate Structure", function()
generateStructure(structureInput.Text)
end)
local map = makeSection(page, "World Builder",
"Map Builder is also available here. Choose a world theme.")
local mapInput = makeInput(map, "city, island, forest, town", "island")
makeButton(map, "Generate World Map", function()
generateMap(mapInput.Text)
end)
local quick = makeSection(page, "Quick Builds",
"One-tap builds for common structures.")
makeButton(quick, "Tall Tower", function()
generateStructure("tower")
end)
makeButton(quick, "Castle / Fort", function()
generateStructure("castle")
end)
makeButton(quick, "Skyscraper", function()
generateStructure("skyscraper")
end)
makeButton(quick, "Bridge", function()
generateStructure("bridge")
end)
makeButton(quick, "Giant Tree", function()
generateStructure("tree")
end)
end
-- ADVANCED OBBY PAGE
-- Displays a maintenance notice instead of a generator button.
do
local page = pages["Advanced Obby"]
local section = makeSection(page, "Obby Generation",
"The obby generator is temporarily unavailable.")
local notice = makeLabel(
section,
OBBY_MAINTENANCE_MESSAGE,
15,
WHITE,
true
)
notice.AutomaticSize = Enum.AutomaticSize.Y
notice.Size = UDim2.new(1, 0, 0, 54)
end
-- ADVANCED GUI PAGE
do
local page = pages["Advanced GUI"]
local section = makeSection(page, "Advanced GUI Generator",
"Generate a polished sample interface with a close button, a reopen dock, and styled content.")
local styleInput = makeInput(section,
"shop, inventory, settings, menu, loading", "shop")
makeButton(section, "Generate GUI", function()
generateUI(styleInput.Text)
end)
local presets = makeSection(page, "GUI Presets",
"Try one of the prepared interface layouts.")
makeButton(presets, "Shop UI", function()
generateUI("shop")
end)
makeButton(presets, "Inventory UI", function()
generateUI("inventory")
end)
makeButton(presets, "Settings UI", function()
generateUI("settings")
end)
makeButton(presets, "Main Menu UI", function()
generateUI("menu")
end)
makeButton(presets, "Loading Screen", function()
generateUI("loading")
end)
end
-- MAP BUILDER PAGE
do
local page = pages["Map Builder"]
local section = makeSection(page, "Map Builder",
"Build an environment around your current location.")
local mapInput = makeInput(section,
"city, town, island, forest", "city")
makeButton(section, "Generate Map", function()
generateMap(mapInput.Text)
end)
local presets = makeSection(page, "Map Presets",
"Choose a themed environment.")
makeButton(presets, "City", function()
generateMap("city")
end)
makeButton(presets, "Town", function()
generateMap("town")
end)
makeButton(presets, "Fantasy Island", function()
generateMap("island")
end)
makeButton(presets, "Forest", function()
generateMap("forest")
end)
end
-- TYCOON PAGE
do
local page = pages["Tycoon"]
local section = makeSection(page, "Tycoon Generator",
"Creates a base, machines, purchase pads, a conveyor, and a collector.")
makeButton(section, "Generate Starter Tycoon", function()
generateTycoon()
end)
local note = makeSection(page, "About Tycoon Gameplay",
"The generated pads have local demo purchase behavior. For a real multiplayer tycoon, purchases, currency, and saving should be handled by server scripts.")
makeButton(note, "Show Tycoon Script Templates", function()
switchPage("Scripting")
setStatus("Choose a template in the Scripting tab.")
end)
end
-- SIMULATOR PAGE
-- Displays a maintenance notice instead of generator controls.
do
local page = pages["Simulator"]
local section = makeSection(page, "Simulator Generation",
"The simulator generator is temporarily unavailable.")
local notice = makeLabel(
section,
SIMULATOR_MAINTENANCE_MESSAGE,
15,
WHITE,
true
)
notice.AutomaticSize = Enum.AutomaticSize.Y
notice.Size = UDim2.new(1, 0, 0, 54)
end
-- SCRIPTING PAGE
do
local page = pages["Scripting"]
local section = makeSection(page, "Script Template Library",
"Choose a template to display example Lua code. Copy it into the appropriate Script or LocalScript in Studio.")
local output = create("TextBox", {
Name = "ScriptOutput",
BackgroundColor3 = Color3.fromRGB(12, 12, 17),
BorderSizePixel = 0,
Size = UDim2.new(1, 0, 0, 220),
Text = "-- Choose a template below.",
TextColor3 = Color3.fromRGB(204, 195, 255),
TextSize = 11,
Font = Enum.Font.Code,
TextXAlignment = Enum.TextXAlignment.Left,
TextYAlignment = Enum.TextYAlignment.Top,
TextWrapped = false,
ClearTextOnFocus = false,
MultiLine = true
}, section)
round(output, 8)
outline(output, PURPLE, 1)
local buttons = makeSection(page, "Templates",
"These are examples. Place each template in the location mentioned in its comments.")
for _, name in ipairs({
"Gold leaderstats",
"Create a part",
"Touch for Gold",
"Kill brick",
"Speed pad"
}) do
makeButton(buttons, name, function()
output.Text = templates[name]
output.CursorPosition = 1
setStatus("Loaded template: " .. name)
end)
end
makeSection(page, "Important",
"This tab displays code only. It does not automatically insert runnable scripts into ServerScriptService or Workspace.")
end
-- ASK AI PAGE
do
local page = pages["Ask AI"]
local section = makeSection(page, "Ask AI",
"Enter a request. This prototype recognizes built-in commands and presets; it is not connected to an external AI service.")
local prompt = makeInput(section,
"Example: make a big castle or generate an obby", "")
makeButton(section, "Generate From Request", function()
local request = string.lower(prompt.Text)
if string.find(request, "obby") then
setStatus(OBBY_MAINTENANCE_MESSAGE)
elseif string.find(request, "simulator") then
setStatus(SIMULATOR_MAINTENANCE_MESSAGE)
elseif string.find(request, "tycoon") then
generateTycoon()
elseif string.find(request, "gui")
or string.find(request, "interface")
or string.find(request, "shop")
or string.find(request, "inventory")
or string.find(request, "settings")
or string.find(request, "menu") then
if string.find(request, "inventory") then
generateUI("inventory")
elseif string.find(request, "settings") then
generateUI("settings")
elseif string.find(request, "menu") then
generateUI("menu")
else
generateUI("shop")
end
elseif string.find(request, "map")
or string.find(request, "city")
or string.find(request, "forest")
or string.find(request, "island")
or string.find(request, "town") then
if string.find(request, "forest") then
generateMap("forest")
elseif string.find(request, "island") then
generateMap("island")
elseif string.find(request, "town") then
generateMap("town")
else
generateMap("city")
end
elseif string.find(request, "tower")
or string.find(request, "castle")
or string.find(request, "bridge")
or string.find(request, "tree")
or string.find(request, "building")
or string.find(request, "skyscraper") then
generateStructure(request)
else
setStatus("I don't recognize that request yet. Try a built-in preset.", true)
end
end)
local presets = makeSection(page, "Quick Requests",
"Try these supported commands.")
makeButton(presets, "Make a castle", function()
generateStructure("castle")
end)
makeButton(presets, "Make a city map", function()
generateMap("city")
end)
makeButton(presets, "Make a tycoon", function()
generateTycoon()
end)
end
-- GENERATED ITEMS PAGE
do
local page = pages["Generated Items"]
local section = makeSection(page, "Generated Items",
"See and delete objects generated during this Play session.")
itemList = create("Frame", {
BackgroundTransparency = 1,
Size = UDim2.new(1, 0, 0, 10),
AutomaticSize = Enum.AutomaticSize.Y
}, section)
create("UIListLayout", {
Padding = UDim.new(0, 7),
SortOrder = Enum.SortOrder.LayoutOrder
}, itemList)
makeButton(section, "Delete All Generated Items", function()
for _, entry in ipairs(generated) do
if entry.object and entry.object.Parent then
entry.object:Destroy()
end
if entry.gui and entry.gui.Parent then
entry.gui:Destroy()
end
end
table.clear(generated)
refreshItems()
relayoutGeneratedDocks()
setStatus("Deleted all tracked generated items.")
end)
end
-- FOOTER STATUS
statusLabel = create("TextLabel", {
Name = "Status",
BackgroundColor3 = Color3.fromRGB(22, 22, 30),
BorderSizePixel = 0,
Position = UDim2.new(0, 145, 1, -25),
Size = UDim2.new(1, -155, 0, 19),
Text = "Ready. Choose a tool to get started.",
TextColor3 = GREEN,
TextSize = 10,
Font = Enum.Font.Gotham,
TextXAlignment = Enum.TextXAlignment.Left
}, main)
switchPage("Builder")
refreshItems()
print("AI BUILDER 2026 loaded.")
49,330 chars · codepastes.com