Multicharacter
Spawn Selector
config/spawn.lua - spawn rules, private world, spawn camera, and the spawn selector with location photos.
On this page6 sections
Basic spawn
Config.Spawn = { default = vector4(-1037.9153, -2737.6790, 20.1693, 328.8077), useLastPosition = true, fadeCamera = true, freezeDuringSelect = true,}Config.FirstSpawn = vector4(-1037.9153, -2737.6790, 20.1693, 328.8077)| Option | Description |
|---|---|
default | Used when there is no better location. |
useLastPosition | The character returns to where it logged out. |
fadeCamera | Fades the screen around the spawn. |
freezeDuringSelect | The character stands still while the menu is open. |
FirstSpawn | Landing spot for a new character after the airplane intro. false uses default. |
The Z coordinate snaps to the ground on spawn, so a coordinate one meter too high does not leave the character in the air.
Spawn resolution order
The server decides where the character spawns. The client only sends the key of the selected location, never coordinates.
- The
ResolveSpawnhook inbridge/server/editable.lua. If it returns something, it wins. - First play of a new character:
Config.FirstSpawn. - The location picked in the spawn selector.
- Last position, when
useLastPosition = true. Config.Spawn.default.
An unknown key, or a key sent while the selector is disabled, ends at Config.Spawn.default.
Private world
Config.Bucket = { enabled = true,}From connecting until spawn, the player is in their own routing bucket. Nobody can see, hit, or shoot them.
After selection, the player moves to the main world (bucket 0) or the bucket returned by ResolveBucket.
Spawn camera
Config.SpawnCamera = { enabled = true,}After spawn, the camera opens wide on the character and glides behind it. false goes straight into gameplay.
Spawn selector
Config.SpawnSelector = { enabled = true, previewCamera = true, photos = true, showLastLocation = true, locations = { { key = 'legion_square', label = 'Legion Square', area = 'Downtown Los Santos', coords = vector4(195.0, -935.0, 30.7, 250.0), description = 'The civic heart of the city - courthouses, offices, and the morning rush.', image = 'spawnmap/thumbs/legion_square.jpg', details = { time = '08:15', weather = 'Overcast', wind = '9 mph', temperature = '64Β°F / 18Β°C' }, }, },}| Option | Description |
|---|---|
enabled | Shows the spawn selector after character select. |
previewCamera | The camera flies over the highlighted location. false shows a flat map instead. |
photos | Takes location photos on your server. Requires screenshot-basic. |
showLastLocation | Last location as the first entry. Also needs Config.Spawn.useLastPosition = true. |
Location fields
| Field | Description |
|---|---|
key | Unique key. Remembers the choice and is used for translations. |
label | Location name. |
area | Smaller line above the name. |
coords | vector4 spawn point. |
description | One sentence of description. |
image | Optional. Image from web/dist/. Without it, a photo is taken automatically. |
details | Card text for time, weather, wind, and temperature. Flavor text, not real weather. |
Player controls
- Click or use the arrow keys to highlight, then press Spawn here.
Enteror a second click on the highlighted location confirms.- Number keys jump straight to a location.
New characters
A new character does not see the spawn selector when the airplane intro plays. The intro is its arrival and ends at Config.FirstSpawn.
When the intro is disabled or skipped by onlyFirstCharacter, the selector comes back.
Location photos
Each location in the list has a thumbnail. There are three ways to get one.
Automatic photos
Requires screenshot-basic (opens in a new tab) and Config.SpawnSelector.photos = true.
The first time a location is highlighted, the camera flies over it and the menu hides for a moment. The frame is captured and stored for that player.
The photo is tied to the location key and coordinates. Moving a location discards the old photo and takes a new one.
Admins can take every photo at once:
/scspawnshots/scspawnshots forceforce retakes photos that already exist.
Your own photos
Put JPG files in web/dist/spawnmap/thumbs/ and point the location to them:
image = 'spawnmap/thumbs/legion_square.jpg',The path is relative to web/dist/. Square images look best.
Fallback badge
Without a photo, the row shows a monogram badge on a hatched background. The hatch angle comes from the location key, so every location looks different.
Background map
With previewCamera = false, a flat map is shown behind the panel instead of the live camera.
The map is not included because it is Rockstar artwork. Put your own JPG in web/dist/spawnmap/. Without it, the background is a neutral grid.
Translating locations
Translate locations in locale/*.json with spawn.loc.<key>.label, spawn.loc.<key>.area, and spawn.loc.<key>.description.
Values from details use spawn.detail.<lowercase value>, for example spawn.detail.overcast. Missing keys fall back to the config text.