Admin & Developer Tools

Reference for all admin commands and developer utilities in oxide-postaljob

Postal Builder

The postal builder is a single context menu that combines location creation, prop scanning, and config export into one unified tool. It replaces all previous coordinate builder and prop scanner commands.

Opening the Builder

/postalbuilder

Requires the admin.postaljob ACE permission. Opens a context menu with all builder tools.

OptionDescription
New LocationCreates a new location at your current position via input dialog
Set Vehicle SpawnCaptures current position as vehicle spawn point
Add Pickup PointCaptures current position as a pallet pickup point
Add Delivery ZoneOpens input dialog for label + min level, captures position. Label is auto-suggested from the GTA street name
Scan Post BoxesPrompts for a scan radius, scans nearby GTA props for post boxes, shows results submenu with individual and batch add options
Scan LetterboxesPrompts for a scan radius, scans nearby GTA props for letterboxes, shows results submenu with individual and batch add options
View Last Scan ResultsReopens the results submenu from the most recent scan without re-scanning
Clear Scan MarkersRemoves all scan markers and blips from the world
Undo Last ActionReverses the most recent action (up to 20 actions)
View StatusShows current location progress and what's missing
Finish LocationValidates and saves the current location to the locations list
Export AllSerializes all finished locations to Lua and saves to file
Import ConfigImports existing Config.Locations entries into the builder's finished locations list for editing
Edit LocationOpens a finished location for re-editing (moves it back to active)
Test PropToggles mail bag prop attachment on/off for testing

Workflow

  1. Run /postalbuilder to open the menu
  2. Click New Location and enter a name — this captures your position as the depot coords
  3. Move to the van spawn point and click Set Vehicle Spawn
  4. Move to each pallet pickup point and click Add Pickup Point (at least 1 required)
  5. Use Scan Post Boxes and Scan Letterboxes to find nearby GTA props — select individual results or use Add All Remaining for batch add
  6. Move to each delivery address and click Add Delivery Zone — label is auto-suggested from the GTA street name
  7. Click View Status to check progress and see what's missing
  8. Click Finish Location when all required fields are set
  9. Repeat steps 2-8 for additional locations
  10. Use Edit Location to reopen any finished location for changes
  11. Click Export All to save all locations to exported_locations.lua

To modify existing depot configurations, use Import Config to load the current Config.Locations entries into the builder, then Edit Location to modify individual locations.

Validation Rules

A location requires the following to be considered complete:

  • Name (set on creation)
  • Coords + heading (set on creation)
  • Vehicle spawn (required)
  • At least 1 pickup point (required)
  • At least 1 delivery zone (required)
  • Post boxes and letterboxes are optional

Scan Results

When scanning for props, the builder prompts for a scan radius (default 100m, range 10-500m) and then displays results as a submenu sorted by distance. Each result shows:

  • Prop model name and distance
  • Coordinates in the description
  • Clicking a result adds it directly to the current location

The results submenu also provides an Add All Remaining option for batch-adding all unselected scan results at once. Already-added entries are marked with a green checkmark and disabled.

For letterboxes, after selecting a prop individually, an input dialog asks for a label and minimum level. The label is auto-suggested from the GTA street name with auto-incrementing suffixes (e.g., location.mirror_park_1, location.mirror_park_2). Batch-adding letterboxes prompts for a default minimum level and auto-names all entries using street labels.

For post boxes, clicking a result or using batch add directly captures the coordinates and heading.

Scanned props are marked with green pillar markers and map blips. Use Clear Scan Markers to remove them. Use View Last Scan Results to reopen a previous scan submenu without re-scanning.

Export Format

The export generates a complete Config.Locations block covering all 7 fields:

Config.Locations = {
    {
        name = 'GoPostal Depot',
        coords = vector3(133.59, 96.31, 83.51),
        heading = 153.7,
        vehicleSpawn = vector4(70.17, 120.21, 79.16, 158.7),
        pickupPoints = {
            vector4(60.36, 129.25, 78.22, 245.1),
        },
        postBoxes = {
            vector4(-238.10, 106.99, 68.66, 265.0),
        },
        letterBoxes = {
            { coords = vector3(924.97, -488.54, 58.69), minLevel = 1, label = 'location.mirror_park_1' },
        },
        deliveryZones = {
            { coords = vector3(254.99, -1013.25, 29.26), minLevel = 1, label = 'location.strawberry_ave' },
        },
    },
}

Copy this output into shared/config/locations.lua, updating locale keys as needed.

Permissions

ACE Permission Setup

The /postalbuilder command requires the admin.postaljob ACE permission. Add the following to your server.cfg:

add_ace group.admin admin.postaljob allow

Or for specific players:

add_principal identifier.license:xxxx group.admin

Progression Management

Player progression is stored in the postaljob_progression database table. To manage progression:

Reset a Player's Progression

UPDATE postaljob_progression
SET level = 1, total_deliveries = 0, daily_streak = 0, complaints = 0, timeout_until = NULL
WHERE char_id = ?;

Remove a Suspension

UPDATE postaljob_progression SET timeout_until = NULL WHERE char_id = ?;

Clear Complaints

UPDATE postaljob_progression SET complaints = 0 WHERE char_id = ?;

View a Player's Stats

SELECT * FROM postaljob_progression WHERE char_id = ?;