Installation
Step-by-step guide to install the Multiplayer Builder Job (tw-builderjob) on your FiveM server.
Prerequisites
Before installing, make sure you have:
Framework
QBCore, QBox, ESX, vRP, TMC, or Standalone
ox_lib
Required — hard dependency
oxmysql
Required — hard dependency
FiveM Server
Build 2802 or higher recommended
Step 1: Download the Script
From Cfx.re Portal (Recommended)
Go to portal.cfx.re
Navigate to Granted Assets
Find tw-builderjob in your purchased scripts
Click Download to get the latest version
From Tebex
Log in to your Tebex account
Go to your purchases
Download the script package
Step 2: Extract Files
Extract the downloaded archive. You will find four folders — all four are required:
tw-builderjob
The main script
tw-builder-stream
Map 1 — the construction sites themselves
tw-builder-map
Map 2 — the company HQ: office, changing room and garage interiors
tw-builder-vehicles
The custom machines (crane, pump, excavator, haulers)
Place all four folders in your server's resources directory.
About the two maps
The job ships two separate map resources. They cover different places and you need both.
tw-builder-stream
Every construction site — the buildings under construction, scaffolding, piles, props and collisions for all 12 regions
tw-builder-map
The company HQ — the office interior, the changing room and the garage where players start the job, rent machines and change into work clothes
Both are map resources, not prop packs. Each declares this_is_a_map 'yes' and registers its .ytyp archetypes through data_file 'DLC_ITYP_REQUEST'. Without that registration the entities in the .ymap files never spawn — the map opens fine in CodeWalker but the game cannot see it.
If a map is missing or not started, that part of the world simply does not exist: players stand in an empty field, props do not spawn, and placement fails.
tw-builder-map also ships a client.lua. It calls EnableInteriorProp + RefreshInterior on the HQ interior so the office and garage rooms are actually populated. Do not delete it — without it the building loads as an empty shell.
Do not rename either map folder and do not merge their stream/ folders into another resource. The .ytyp archetype registration is tied to each resource's own manifest.
Step 3: Database Setup
Automatic Setup: The script creates and migrates its own database tables on first start. No manual SQL import needed. Works on both MySQL and MariaDB.
Step 4: Configure the Script
Open config/config.lua. The most important keys are at the top:
Config.InteractionHandler and Config.Interaction.style in config/systems/interaction.lua are derived from Config.InteractionStyle. Don't set them by hand — they get overwritten.
The two multipliers are the quickest way to balance the job for your server — you never have to touch a per-region number.
See the Configuration page for all available options.
Step 5: Set Your Admins
Field tools, the admin panel and the site builder all check this list:
The script ships with the developer's own Discord IDs in this list. Replace them with yours before going live, or those accounts keep admin access on your server.
Run /cranesiteid in-game to print your own identifier in the right format.
This one list gates both /builderadmin (the admin panel) and /tw_bp (the site builder) — see Interface.
Step 6: Discord Logging (Optional)
Never put a webhook URL in config/config.lua — that file is a shared script and ships to every client, so a URL there is a published secret. A player can dump it, flood your staff channel with fake logs, or delete the webhook.
URLs and the bot token belong in config/secrets/discord.lua, which is loaded only as a server_script:
Leaving everything empty is fine — no URL means no request is ever made, and the in-game log page (/builderadmin → Logs) works either way.
Which events fire is set separately in config/config.lua:
Step 7: Turn On the Release Profile
Release blocker. While debug mode is on, roughly 250 debug commands register and several server-side validations are bypassed. Before you go live, set:
This one switch force-disables Debug, DebugCommands, DebugZoneDraw, DebugZones, DebugTowerScenery, RopeProbe, Profiler, FastTest and SoloTest, and plays every region at full size. Read the value — don't trust a note.
Step 8: Add to server.cfg
Order matters. Your framework, oxmysql and ox_lib must be running first, and all three asset resources must load before the script:
Optional: Discord secrets as convars
If you would rather keep webhook URLs out of the resource folder (git, backups, a shared file server), set them here instead of in config/secrets/discord.lua:
Use set, not setr. setr replicates the value to every connected client — which leaks the webhook to exactly the people you are hiding it from. Only ever use plain set for these.
Load Order recap:
oxmysql,ox_liband your framework start beforetw-builderjobtw-builder-stream,tw-builder-mapandtw-builder-vehiclesstart beforetw-builderjobStarting the script first will produce missing sites, missing vehicles, or a failed database migration
Step 9: Restart Server
Save all configuration changes
Restart your server completely
Check the server console for any errors
Verification
After starting the server, verify the installation:
Check Console
Database tables created successfully (first run only)
No error messages related to
tw-builderjobNo streaming errors from
tw-builder-streamortw-builder-map
In-Game Test
Go to the builder job location and look for the job blip
Confirm the construction site is built in the world and the HQ interior is furnished (both maps are loading)
Interact with the NPC to open the job menu
Create a lobby and pick a region
Rent a vehicle — from the company lot, or from the rental clerk NPC if
rentalMode = 'npc'Drive to the site and complete the first task
Troubleshooting
"The tool cannot be placed" — Anti-Cheat
Some anti-cheats delete the custom construction props the script uses. In-game that shows up as "The tool cannot be placed". This was reported with HUNK-AC.
A ready whitelist with 251 model hashes ships in the package:
Add those models to your anti-cheat's allowed props list, or turn off its prop whitelist check.
Script Won't Start
Confirm
ox_libandoxmysqlare started beforetw-builderjobCheck the resource folder is named exactly
tw-builderjob(case-sensitive on Linux)Check for syntax errors in your edited config files
Site or HQ Missing / Empty Field / Props Not Loading
Make sure both
tw-builder-stream(sites) andtw-builder-map(HQ) are in your resources folderVerify both are ensured in
server.cfgbeforetw-builderjobConfirm neither folder was renamed and both
stream/folders are intactCheck the server console for
DLC_ITYP_REQUESTor streaming errors
HQ Building Loads But the Rooms Are Empty
Confirm
tw-builder-map/client.luais present and untouched — it enables the interior propsRestart
tw-builder-map, then rejoin; interior props are applied on resource start
Vehicles Missing or Spawning as a Default Car
Make sure
tw-builder-vehiclesis startedConfirm the meta files were not modified
Rewards Not Paid / Items Not Given
Verify
Config.Inventorymatches your inventory (or leaveauto)On ESX servers a leftover
qb_inventoryvalue silently gives nothing
Framework Not Detected
Leave
Config.Framework = 'auto', or set it explicitlyVerify the framework resource starts before
tw-builderjob
No Discord Logs
Check the URL is in
config/secrets/discord.lua(or aset tw_builder_webhook_*convar), not inconfig.luaConfirm
Config.Discord.enabled = trueand the event is onAn empty category falls back to
default; ifdefaultis empty too, that category is off
Need Help?
Last updated

