Skip to content

Editable Files Overview ​

The following files are outside the escrow lock. You can read and modify them freely.

Files you can edit ​

FilePurpose
config.luaAll configuration options and seat definitions
client/editable/functions.luaClient-side helper functions: ShowTooltip, GetVehicleLockState
client/util/transform.luaMatrix math helpers used by the editor and runtime
client/editor.luaThe full in-game seat editor
server/editor.luaServer-side admin gate, broadcast handler, export archival, admin commands
locale/locale.luaAll player-facing UI strings
nui/*NUI page (HTML, CSS, JS) for the export panel and toast notifications

Files you cannot edit ​

FileWhy escrowed
shared/classes.luaCore class layer (Seat, VehicleSeatConfig, Occupancy). These define the wire protocol between client and server and the JSON-encoded statebag format. Off-spec edits corrupt occupancy. The classes remain callable as globals from other resources — see the Developer API.
client/client.lua, client/functions.lua, server/server.lua, fxmanifest.luaCore runtime. Use the editable files above for any customization.

What you can safely change ​

  • config.lua — Any setting or seat definition. This is the primary customization surface.
  • locale/locale.lua — UI string text. See Localization.
  • client/editable/functions.lua — ShowTooltip (how occupied-seat notifications display) and GetVehicleLockState (what counts as "locked" — adapt for custom lock systems).
  • nui/style.css — Visual appearance of the export panel and toasts.
  • client/editor.lua — Editor behavior, gizmo appearance, keybind assignments (if you need to remap editor keys beyond what Key Bindings supports).
  • server/editor.lua — ACE check logic, broadcast sanitization limits (e.g. the 64-seat cap per model), export file format.

What you should not change ​

  • Seat entry kind field values — 'trunk' is the only supported type. The field is reserved for future polymorphism.
  • Event names — The string prefixes like rc_extra_seats:SetSeatOccupied are used by both sides of the network. Renaming them on one side without the other breaks occupancy.
  • The shared class globals (Seat, VehicleSeatConfig, Occupancy, VehicleRegistry, GetSeatConfigForEntity) — these are escrowed but exposed as globals. Other resources may call them — see the Developer API. Don't try to monkey-patch their methods.

Robicore