legacy-cityhall
Configuration
Every Config key in config.lua, with defaults and notes.
Configuration
All keys live in config.lua (shared).
Config.Version
- Type: string
- Default:
'1.0.0' - Informational only.
Config.Locale
- Type: string
- Default:
'en' - Selects which
locales/<value>.jsonfile is loaded for UI text. A matching locale file must exist.
Config.Debug
- Type: boolean
- Default:
false - Enables debug output when true.
Config.AdminGroups
- Type: array of strings
- Default:
{ 'god', 'admin' } - ACE permission group names treated as admin for this resource's admin-only exports/callbacks (
registerJob,unregisterJob,createDocType,updateDocType,getAuditLog,revokeDocument, etc.). - ⚠️ If a group name here doesn't match an actual ACE group assigned on your server, admins are silently denied — there is no config-time validation.
Config.DocumentProvider
- Type: string
- Default:
'legacy-idcard' - Selects the document rendering backend. Only
'legacy-idcard'is actually supported in this version; the code comments reference'qbx_idcard'as a possible future option. Setting this to an unsupported value will likely break document issuance/verification since no other provider integration ships with this version.
Config.Locations
- Type: array of location objects
- Default: 3 entries — City Hall main desk, Sandy Shores Town Hall, Paleto Bay Town Hall
- Each entry requires:
coords— vec4 (x, y, z, heading)model— ped model stringlabel— interaction label shown in the target menuscenario— ped animation scenario nameblip— table:{ enabled, sprite, color, scale, label }
- ⚠️ All fields are required. Omitting
blipor leavingblip.enabled = truewithout validsprite/colorvalues will likely error or produce a broken blip client-side — there's no apparent nil-checking. - ⚠️ NPCs/blips are only spawned once, 1000ms after resource start. There is no export to force a respawn at runtime — changing
Config.Locationsrequires a resource restart.
Config.Webhooks
- Type: table (map of string → string)
- Default: all keys set to
''(empty, disabled) - Discord webhook URLs keyed by event name:
ApplicationSubmittedApplicationAcceptedApplicationDeniedApplicationWithdrawnDocumentIssuedDocumentRevokedJobRegistered
- An empty string disables that specific webhook. There is no separate on/off flag — a non-empty value is what enables it, so a malformed URL will attempt to fire and fail rather than being treated as disabled.