§ How to · with Picoo
How to make a lobby in Roblox Studio
By Sametcan Tasgiran, Founder & Developer·Published ·Updated
Ask Picoo to make a lobby and it builds a hub world: a fountain plaza where players spawn, paths out to named zones, a plot for every player and pads that move them around.
It applies game_map, Picoo's map kit, whose default theme is this lobby hub: 10 scripts and 3,209 lines in one recipe call. A ready-up queue that teleports a group into a match is a separate system you add with a follow-up prompt.
A hub you can edit
One kit under Workspace.MapKit, all of it real parts in Edit mode: ground, fountain plaza, spawn, paths, zones, plots and edge walls, and the buildings, trees, rocks, props and lamps as textured CC0 models.
A plot for every player
Six plots by default (2 to 12). Each player who joins gets the first free one: their name goes on its sign and its border lights up in their colour. When they leave, it goes to a player who is waiting. Game code reads plot:GetAttribute("OwnerId") or player:GetAttribute("PlotId").
Portal pads
Walk onto a glowing pad and the server moves you to its zone, facing the right way; a pad there brings you back. A My Plot pad at the hub sends you to your own plot, and a light beam guides each player to it.
Coins and discovery
30 coins along the paths and in the zones, each worth 1 in leaderstats Coins and back after 20 seconds. Walking into a zone for the first time shows Discovered: <zone>; finding them all plays an Explorer celebration worth 10 coins.
Fountain show and daily chest
Hold E at the fountain for a water-jet and fireworks show. The daily chest pays 25 coins once a day per player, remembered across rejoins and, once the game is published, across servers through a DataStore.
Nobody falls off
Walls at the edge, and anything with a Humanoid that drops below the map is put back on the spawn. Press Play in Studio and a self-test checks spawn, paths, walls, rescue, lighting, portals and prompts, then prints one MAP_SELFTEST line.
Files Picoo ships for this prompt
12 files · 3209 lines · one recipe call
ServerScriptService/MapKit/Main.lua
Script that starts the map at Play: for that session it switches off any place SpawnLocation inside the map and sets aside the place's own sky and effects, then starts rescue, plots, interactions and the builder.
126 lines
ServerScriptService/MapKit/Config.lua
Generated settings and layout: theme, size, mood, spawn, zones, plots, portal pads, coin positions and sounds.
229 lines
ServerScriptService/MapKit/MapBuilder.lua
At Play, keeps the CC0 models Edit mode already shows, builds any decor Edit mode did not get, adds the decor's colliders and lamp lights, and shows a simple shape wherever a model does not load.
662 lines
ServerScriptService/MapKit/DecorData.lua
The decor rows (trees, rocks, props, lamps) as one compact string, and the Edit-mode folder each row was built in.
12 lines
ServerScriptService/MapKit/Interact.lua
Server rules for zone discovery, coins, portal pads, the fountain show and the daily chest.
1025 lines
ServerScriptService/MapKit/PlotService.lua
Gives each player a plot, puts their name on the sign, colours the border and frees the plot when they leave.
200 lines
ServerScriptService/MapKit/Rescue.lua
Puts anything with a Humanoid that falls below the map back on the spawn.
76 lines
ServerScriptService/MapKit/SelfTest.lua
Studio-only check on Play that prints one MAP_SELFTEST line.
366 lines
ServerScriptService/MapKit/PicooKit.lua
Marker Picoo reads to recognise the kit, so it can change the map's settings later.
6 lines
StarterPlayer/StarterPlayerScripts/MapKitClient.lua
Draws what the server reports: zone counter, Discovered toasts, coin pops, portal flashes and the beam to your plot.
507 lines
Workspace/MapKit
The map as real parts in Edit mode: ground, plaza, fountain, paths, zones, plots, walls and backdrop.
instance
Lighting/MapKitSky, MapKitAtmosphere, MapKitBloom, MapKitSunRays, MapKitColorCorrection
The map's sky and post effects, plus clouds under Workspace/Terrain.
instance
Sample output: ServerScriptService/MapKit/PlotService.lua
--!strict
-- Player plots: every player who joins gets the first free plot (the sign shows
-- "<name>'s Plot", the claim pad lights up, the plot's border glows in the player's
-- colour). A player without a plot (all taken) gets the next one that frees up, or
-- claims a free one by touching its pad. Interact.luau hooks onClaim to send the
-- player a guide (a light beam to the plot). Game code reads the owner from
-- plot:GetAttribute("OwnerId") or player:GetAttribute("PlotId"), and spawns things at
-- the plot's SpawnPoint.
-- (excerpt) plot lookups, sign, border and pad helpers sit here; then:
local function claim(player: Player, id: string): boolean
if owners[id] or PlotService.plotOf(player) then
return false
end
local plot = plotModel(id)
if not plot then
return false
end
owners[id] = player.UserId
plot:SetAttribute("OwnerId", player.UserId)
player:SetAttribute("PlotId", id)
player:SetAttribute("WaitingForPlot", nil)
setSign(plot, player.DisplayName .. "'s Plot")
setPad(plot, true)
local color = colorOf(id)
setBorder(plot, color)
player:SetAttribute("PlotColor", color)
for _, fn in claimHooks do
task.spawn(fn, player, plot, color)
end
return true
end
function PlotService.assign(player: Player): Instance?
for _, p in Config.Plots do
if not owners[p.Id] and claim(player, p.Id) then
return plotModel(p.Id)
end
end
player:SetAttribute("WaitingForPlot", true)
return nil
end
function PlotService.release(player: Player)
for id, userId in owners do
if userId == player.UserId then
owners[id] = nil
local plot = plotModel(id)
if plot then
plot:SetAttribute("OwnerId", nil)
setSign(plot, labelOf(id))
setPad(plot, false)
setBorder(plot, nil)
endBuilding a lobby in Roblox Studio
A lobby is where a player decides whether your game is worth staying in, so it has to answer three questions fast: where am I, what is mine, and where do I go next.
Ask Picoo to make a lobby and it applies game_map, its map kit, with the default lobby hub theme. The spawn faces a fountain plaza at the centre, paths lead out to named zones, and plots sit in a ring around the hub. Everything, decor included, is real parts under Workspace.MapKit in Edit mode, so you can move a building or recolour a path before pressing Play. The buildings and decor are textured CC0 models in Edit mode already, and anything whose model does not load on Play shows a simple shape instead of leaving a hole.
Ownership is handled on the server. PlotService gives each joining player the first free plot, writes their name on its sign, lights the border in their colour and records OwnerId on the plot and PlotId on the player, which is what your own game code reads. When a player leaves, the plot goes to whoever is waiting. Movement works the same way: the server checks each player's position against the portal pads, moves them with PivotTo when they step on one, and the client only draws the flash and the beam.
The rest is what a new player does first: coins to walk through along the paths, a Discovered toast in each new zone, a fountain show on a ProximityPrompt and a daily chest saved per player once the game is published. Nobody can fall off either: walls at the edge, and a rescue that puts anyone below the map back on the spawn.
The match is the part you add. A queue that counts ready players, runs a countdown and teleports the group into a separate place is a follow-up prompt, and it should keep the roster on the server and send the whole group in one TeleportAsync call.
See more on the Luau generator, the AI Luau script writer, the 3D model generator and the game builder, read how Picoo compares with ChatGPT, or browse the full blog.
Frequently asked
What does Picoo build when I ask for a lobby?+
The game_map recipe with its default theme, the lobby hub: a plaza with a fountain and the spawn facing it, paths out to two zones (named Shop and Event Plaza until you rename them), six player plots, portal pads, 30 coins, a fountain show and a daily chest. That is 10 scripts under ServerScriptService.MapKit and StarterPlayerScripts, plus the map itself as parts under Workspace.MapKit.
Can I change how it looks?+
Yes, by asking again with new settings: size (small, medium or large), mood (day, sunset or night), style (neon, winter, desert, autumn, spooky or candy), plot count (2 to 12), the title and the zone names. Picoo re-applies the kit with the complete new settings and rebuilds its own parts in place; editing Config by hand changes numbers, not the map.
Will it build over my existing game?+
The kit builds into an empty place. If your place already has your own world in it, Picoo builds what you asked for into that world by hand instead, and offers the full lobby in a new place: save and close your game, open File > New > Baseplate, connect Picoo there and ask again.
How do I send players from the lobby into a match?+
Ask for it in a follow-up prompt. A queue that gathers ready players and teleports them together needs a roster kept on the server, a countdown that cancels when players drop below the minimum, and one TeleportService:TeleportAsync call with the whole group, wrapped in pcall. Teleporting players one at a time sends each to a separately chosen server, and the older TeleportPartyAsync is deprecated.
Why does my lobby look flatter than expected?+
Two settings the kit leaves to you. Lighting.Technology can only be changed in Studio's Properties window, so select Lighting and set it to Future. And if Lighting still holds the place's own Sky, Atmosphere, Bloom or SunRays, Edit mode may show those instead of the map's; Play always uses the map's, and deleting the place's own ones makes Edit mode match.
Related Picoo prompts
Roblox matchmaking system
Example build: 7 files · 280 lines. Picoo writes this code for each prompt, so file names and line counts vary from run to run. Queue state is shared across servers with MessagingService.
Roblox currency system
Example build: 4 files · 165 lines. Cash, Gems and a premium currency.
How to teleport players in Roblox
Moving a character inside a place is one PivotTo call. Sending them to another place is a network call that can fail and needs handling. Picoo's teleport_system recipe ships both: two pads you can see in Edit mode and a cross-place helper.