five-on-it / packages/protocol/src/messages / WelcomeMessage
Variable: WelcomeMessage
constWelcomeMessage:ZodObject<{clientId:ZodNumber;debug:ZodOptional<ZodBoolean>;garages:ZodOptional<ZodObject<{respray:ZodOptional<ZodNumber>;store:ZodOptional<ZodNumber>; },$strip>>;ghostTicks:ZodOptional<ZodNumber>;items:ZodOptional<ZodArray<ZodObject<{actions:ZodArray<ZodEnum<{drop:"drop";give:"give";use:"use"; }>>;heal:ZodOptional<ZodNumber>;id:ZodString;name:ZodString;price:ZodOptional<ZodNumber>;stack:ZodNumber;tags:ZodArray<ZodString>;weapon:ZodOptional<ZodString>; },$strip>>>;level:ZodObject<{data:ZodOptional<ZodObject<{cameras:ZodOptional<ZodArray<ZodObject<{name: ...;period: ...;range: ...;sweep: ...;x: ...;y: ...;yaw: ...;z: ...; },$strip>>>;containers:ZodOptional<ZodArray<ZodObject<{items: ...;kind: ...;lock: ...;name: ...;x: ...;y: ...;yaw: ...;z: ...; },$strip>>>;districts:ZodOptional<ZodArray<ZodObject<{areas: ...;name: ...;pedestrians: ...;theme: ...;title: ...; },$strip>>>;doors:ZodOptional<ZodArray<ZodObject<{depth: ...;height: ...;kind: ...;lock: ...;name: ...;width: ...;x: ...;y: ...;yaw: ...;z: ...; },$strip>>>;dummies:ZodArray<ZodObject<{x:ZodNumber;y:ZodNumber;yaw:ZodNumber;z:ZodNumber; },$strip>>;escalators:ZodOptional<ZodArray<ZodObject<{height: ...;length: ...;name: ...;up: ...;width: ...;x: ...;y: ...;yaw: ...;z: ...; },$strip>>>;garages:ZodOptional<ZodArray<ZodObject<{depth: ...;height: ...;name: ...;respray: ...;store: ...;width: ...;x: ...;y: ...;yaw: ...;z: ...; },$strip>>>;groundHalfSize:ZodNumber;ladders:ZodOptional<ZodArray<ZodObject<{height: ...;name: ...;x: ...;y: ...;yaw: ...;z: ...; },$strip>>>;lifts:ZodOptional<ZodArray<ZodObject<{depth: ...;name: ...;stops: ...;width: ...;x: ...;y: ...;yaw: ...;z: ...; },$strip>>>;meshes:ZodRecord<ZodString,ZodObject<{groups:ZodArray<...>;indices:ZodArray<...>;vertices:ZodArray<...>; },$strip>>;nailStrips:ZodArray<ZodObject<{length:ZodNumber;x:ZodNumber;yaw:ZodNumber;z:ZodNumber; },$strip>>;npcs:ZodOptional<ZodArray<ZodObject<{items: ...;loop: ...;name: ...;patrol: ...;refuge: ...;role: ...;schedule: ...;turn: ...;vehicle: ...;weapon: ...;x: ...;y: ...;yaw: ...;z: ...; },$strip>>>;placements:ZodArray<ZodObject<{breakable:ZodOptional<...>;kind:ZodEnum<...>;mesh:ZodString;name:ZodString;pitch:ZodNumber;scale:ZodTuple<..., ...>;shape:ZodEnum<...>;x:ZodNumber;y:ZodNumber;yaw:ZodNumber;z:ZodNumber; },$strip>>;roads:ZodArray<ZodObject<{kind:ZodOptional<...>;lanes:ZodNumber;lanesBack:ZodNumber;name:ZodString;points:ZodArray<...>;speed:ZodNumber;surface:ZodOptional<...>;width:ZodNumber; },$strip>>;schemaVersion:ZodOptional<ZodNumber>;shops:ZodOptional<ZodArray<ZodObject<{items: ...;name: ...;x: ...;y: ...;yaw: ...;z: ...; },$strip>>>;sky:ZodOptional<ZodObject<{climate:ZodString;clock:ZodOptional<...>; },$strip>>;spawners:ZodOptional<ZodArray<ZodObject<{classes: ...;key: ...;locked: ...;name: ...;owner: ...;respawn: ...;x: ...;y: ...;yaw: ...;z: ...; },$strip>>>;spawns:ZodArray<ZodObject<{role:ZodOptional<...>;x:ZodNumber;y:ZodNumber;yaw:ZodNumber;z:ZodNumber; },$strip>>;water:ZodOptional<ZodArray<ZodObject<{depth: ...;kind: ...;name: ...;width: ...;x: ...;y: ...;z: ...; },$strip>>>; },$strip>>;name:ZodString;ref:ZodOptional<ZodObject<{bytes:ZodNumber;hash:ZodString; },$strip>>; },$strip>;places:ZodOptional<ZodArray<ZodString>>;playerDamage:ZodOptional<ZodEnum<{off:"off";on:"on";rivals:"rivals"; }>>;playerEid:ZodNumber;protocolVersion:ZodNumber;rtc:ZodOptional<ZodBoolean>;safeZones:ZodOptional<ZodArray<ZodObject<{radius:ZodNumber;x:ZodNumber;z:ZodNumber; },$strip>>>;tick:ZodNumber;type:ZodLiteral<"welcome">;version:ZodOptional<ZodString>;zones:ZodOptional<ZodArray<ZodObject<{id:ZodString;kind:ZodEnum<{race_gate:"race_gate";restricted:"restricted"; }>;radius:ZodNumber;x:ZodNumber;z:ZodNumber; },$strip>>>; },$strip>
Defined in: packages/protocol/src/messages.ts:369
First message to a client: its id, its car, where the server clock is, the level the server runs, which the client builds its prediction world, its wireframe and its minimap from (nothing on the wire names a level any other way; inline as data, or as a LevelRef to fetch when the client asked for that and the level is big), whether players hurt each other there (the game's rule; on in free roam, and when absent), which the interaction prompt needs to tell a carjack from a ride, the room's items (the common ones, then the game's; a stack names one by its index here; the common ones alone when absent), and the prices the game sets for the garages' respray and storage over the level's (the level's alone when absent), and the game's safe zones and how long a player is a ghost after respawning (the simulation's rules the client's world plays by; none and free roam's when absent), and the game's zones the minimap draws (its restricted zones and race gates; none when absent), whether the server honours the client's debug commands (debug: on a test-* level, under npm run dev, with FOI_DEBUG=1, never in a player's room; the legend's debug options are offered where it is on and say they are off where it is off; absent from an older server, which says nothing either way), and, where they are on, the names of the game's places, which Go to also puts the player at (none when absent).