F.A.Q

3 min readUpdated Today

Setup

Set Config.Locale in shared/config.lua:

shared/config.lua
1Config.Locale = 'en'
  1. Check the F8 console for DUI errors
  2. Verify web/index.html and web/board.html are present
  3. Ensure the board is within RenderDistance (default 30m)
  1. Verify items from _INSTALL/ox_items.lua are in your ox_inventory
  2. Check that Config.UseItems = true
  3. Ensure the note variant's items list matches your inventory item names

Notes

  • postit: Text-only notes. Players type a message.
  • photo: Image notes. Requires a photo URL (from ml_camera or pasted manually).

Notes have a duration set between Config.Duration.Min and Config.Duration.Max (in hours). When the timer runs out, the note is automatically removed during the next cleanup cycle (Config.Defaults.CleanupInterval).

Yes. Set allowedVariants in the board's location config. Only note variant IDs in that array will be selectable.

The pen lives in the board toolbar. Drawing on the board surface follows the draw permission, which is staff only unless a board opens it up:

shared/config_locations.lua
1permissions = { draw = { 'police' } },

Drawing on a note follows the place permission instead, and is on by default:

shared/config.lua
1Config.AllowNoteDrawing = true

Add an entry to Config.Stamps. Give it a label and an ink colour, or an image URL to print your own artwork:

shared/config.lua
1Config.Stamps = {
2    { id = 'sealed', label = 'SEALED', color = '#37474f', size = 'medium' },
3    { id = 'lspd',   label = 'LSPD',   image = 'https://your.cdn/lspd_stamp.png', size = 'large' },
4}

Yes. A photo variant accepts a frame image plus the window the picture shows through and the box the caption is written in, both in percent of the artwork:

shared/config_notes.lua
1{
2    id      = 3,
3    type    = 'photo',
4    label   = 'Wanted Poster',
5    items   = { 'photo' },
6    frame   = 'https://your.cdn/wanted_poster.png',
7    ratio   = 1.4,
8    window  = { x = 18, y = 26, w = 64, h = 42 },
9    caption = { x = 14, y = 74, w = 72, h = 14 },
10}

Yes. A stamp pressed on a note and ink drawn across it are stored against that note, so moving or rotating the note carries them along. Deleting the note removes them with it.

Dynamic Boards

Players use a board item (e.g. whiteboard_small) from their inventory. They aim at a wall or surface and the board is placed. The board persists in the database until the owner picks it up.

Controlled by Config.BoardPickupPolicy:

  • 'owner': Only the player who placed it
  • 'anyone': Any player can pick it up

Locations

Add an entry to Config.Locations in shared/config_locations.lua:

shared/config_locations.lua
1{
2    id                = 'my_board',
3    model             = 'hei_prop_hei_muster_01',
4    coords            = vec4(x, y, z, heading),
5    currentBackground = 'cork',
6}

Restart the resource after adding locations.

Yes. Add jobView, jobWrite, and/or jobClear to the location config:

lua
1jobView  = nil,
2jobWrite = { 'police', 'sheriff' },
3jobClear = { 'police' },

nil means everyone. A table restricts to those jobs only.

Updates

  1. Download latest from CFX Portal
  2. Backup shared/config.lua, shared/config_notes.lua, shared/config_locations.lua, and server/config_server.lua
  3. Replace all files except config
  4. Restart the resource

Board content and dynamic placements are stored in the database, so they survive updates.

Boards written by an older release use a different surface layout. The console reports how many are left on start:

server console
1/mlboard_migrate

Run it once from the server console, or in game with the admin permission. Boards already converted are skipped.