Scenes & Garage
A scene is where the character lineup is showcased during selection. Three ship by default, and each one is a genuinely different map location with its own weather, time of day, camera preset and welcome cinematic.
Config.DefaultScene = 'studio'The `studio` key is kept for backwards-compatible saved preferences — its **label is "Airport"**, resolved from the `scene_studio` locale key.
Scene Fields
{
key = 'noir', -- saved in the player's preferences
labelKey = 'scene_noir', -- locale key for the UI label
coords = vector4(906.3, 7.13, 111.28, 279.81), -- where the lineup stands
weather = 'CLEAR',
time = { hour = 23, minute = 30 },
camera = 'dramatic', -- default camera preset for this scene
welcome = vector4(923.56, 4.71, 118.99, 102.8), -- this scene's own welcome cinematic
welcomeDuration = 5500,
}coords is where the rightmost character stands by default, with the rest of the lineup extending to its left (see Config.LineupAnchor). Pick a quiet, well-lit, out-of-the-way spot — players are placed in their own routing bucket, so nobody else can see them there.
Switching scenes fades the screen out, relocates the entire lineup, re-frames the camera, and fades back in.
Capturing Coordinates
Set Config.Debug = true, fly to a spot you like in normal gameplay, and run:
/mccoordsIt prints a ready-to-paste vector4(x, y, z, heading) to the F8 console and to chat. Use it for scene coords, welcome cameras, and garage slots.
Weather & Time Control
Each scene forces its own weather and time. To stop the server's weather-sync resource from snapping the scene back, that sync is paused client-side only, for the player viewing the menu — nobody else on the server is affected.
Adapters ship for qb-weathersync, qbx_weathersync, Renewed-Weathersync, cd_easytime and vSync, and the right one is auto-detected. Only touch this if yours is not picked up:
Config.WeatherControl = {
resource = nil, -- force a resource name, e.g. 'qb-weathersync' (nil = auto-detect)
-- Or provide fully custom client-side pause/resume for an unlisted system:
-- pause = function() TriggerEvent('my-weather:client:disable') end,
-- resume = function() TriggerEvent('my-weather:client:enable') end,
}The Garage Showroom
The garage scene is a showroom rather than a row lineup. Each character stands at a fixed slot with their own selected vehicle parked beside them — a real owned car, with the real colours and mods read from your framework's vehicle tables.
{
key = 'garage',
labelKey = 'scene_garage',
coords = vector4(-76.68, -820.83, 285.0, 337.52), -- centre (used for streaming focus)
weather = 'CLOUDS',
time = { hour = 19, minute = 15 },
camera = 'fullbody',
welcome = vector4(-72.11, -811.53, 285.0, 161.83),
welcomeDuration = 5500,
showVehicle = true, -- show each character's owned car
slots = {
{ ped = vector4(-78.66, -823.61, 285.02, 323.84), vehicle = vector4(-80.60, -825.07, 284.59, 306.23) },
{ ped = vector4(-75.79, -824.68, 285.04, 353.01), vehicle = vector4(-76.25, -827.04, 284.59, 348.55) },
{ ped = vector4(-78.00, -817.37, 285.06, 251.96), vehicle = vector4(-80.28, -816.66, 284.59, 251.40) },
{ ped = vector4(-71.78, -823.53, 285.00, 12.87), vehicle = vector4(-71.09, -825.86, 284.59, 17.65) },
},
}There should be one slot per character slot (`Config.Characters.DefaultSlots`). Capture new positions with `/mccoords`.
The Vehicle Picker
A "Your Vehicles" panel lists every car the selected character owns. The choice is remembered per character, so each of your characters can show off a different car.
Vehicles are read from your framework's tables:
Ownership is validated server-side for every citizen ID before any vehicle is returned, and the whole lineup's vehicles are fetched in a single round-trip.
The showroom car is **preview only** — it does not change what you spawn with.