Firefighter Job
This is a step-by-step installation guide, configuration preview, and full explanation of all settings for legends_firefighter.
If you lack programming experience, ensure you read each step thoroughly without skipping, as all documentation is essential!
Before submitting a support ticket or following the guides in this documentation, please make sure that you are running the latest version of the resource.
What is legends_firefighter?
legends_firefighter is a complete, framework-agnostic firefighter job for FiveM servers. Players talk to a fire-station NPC, pick a mission tier based on their rank, drive out to a route of fire locations, extinguish each one, optionally search the scene for salvage, and return the vehicle to collect their pay. A built-in leveling system unlocks more powerful mission types — from a handheld extinguisher on foot, to the department firetruck, all the way up to a firefighting helicopter for large-scale suppression runs.
The resource auto-detects your framework (QB-Core, QBox, ESX, or standalone) and your targeting system (ox_target, qb-target, or native textui), so most servers can drop it in with zero code edits.
Key Features
- Three Mission Tiers — Rookie (on-foot extinguisher), Standard (firetruck), and Aerial (helicopter water spray) with per-tier fire sizes, ranges, and rewards
- Leveling System — Earn XP per fire and per completed route; unlock higher tiers at configurable level thresholds (default: Firefighter at 500 XP, Aerial Specialist at 3,500 XP)
- Six Pre-Built Routes — Two routes per tier across Los Santos and Blaine County, each with unique fire locations, sizes, and optional loot tables
- Dynamic Fire Behavior — Configurable fire size, spread radius, and per-location progress requirements; blaze vs. spread fire types
- Salvage / Loot System — Search the scene after extinguishing for vehicle wreckage, street debris, dumpster finds, or yard scrap, with percentage-based loot tables
- Helicopter Water Drops — Aerial tier uses spray controls, altitude gates, and horizontal-range checks for realistic air-tanker gameplay
- Framework Auto-Detection — Works with QB-Core, QBox, ESX, or fully standalone — no framework edits required
- Inventory & Money Auto-Detection — Supports ox_inventory, framework inventories, and custom systems via a clean config switch
- Editable Hooks —
CanStartJob,CalculateBonus,OnRewardGiven,OnJobStart,OnFireExtinguished,OnJobCompletefor Discord logs, metadata, reputation, cooldowns, weekend boosts, and more - Target System Support — Works with ox_target, qb-target, or falls back to native textui
- Multi-Language Support — All player-facing text lives in
locales/*.jsonfor easy translation - Rewards with Bonus — Per-location payout plus a full-route completion bonus; choose
cashorbankpayout - No Hard Dependencies — Uses ox_lib if present for better UX, but works without it
- Clean Editable Files —
client/editable.lua,server/editable.lua,config/config.lua,config/routes.lua, and all bridge files are unlocked and fully commented
Mission Tiers
| Tier | Name | Unlock Level | Vehicle | Fire Method | Per-Location Reward | Completion Bonus |
|---|---|---|---|---|---|---|
| 1 | Rookie Mission | 1 (Rookie) | — (on foot) | Handheld fire extinguisher | $75 | $500 |
| 2 | Standard Mission | 2 (Firefighter) | Firetruck | Water cannon (long range) | $150 | $1,500 |
| 3 | Aerial Mission | 3 (Aerial Specialist) | Helicopter (Conada) | Altitude-gated water spray | $250 | $3,000 |
Leveling Ladder
| Level | Rank | XP Required | Tier Unlocked |
|---|---|---|---|
| 1 | Rookie | 0 | Tier 1 |
| 2 | Firefighter | 500 | Tier 2 |
| 3 | Aerial Specialist | 3,500 | Tier 3 |
Pre-Configured Routes
| Route ID | Name | Tier |
|---|---|---|
| 101 | Fire Training Route 1 | 1 — Rookie |
| 102 | Fire Training Route 2 | 1 — Rookie |
| 201 | Groove Street Fires | 2 — Standard |
| 202 | Del Perro Fires | 2 — Standard |
| 301 | Los Santos Build Roof Fires | 3 — Aerial |
| 302 | Blaine County Wildfires | 3 — Aerial |
All routes, fire locations, and loot tables live in config/routes.lua and are fully editable — add your own routes, remove defaults, or swap in map-specific coordinates.
Need help? Join our Discord (opens in a new tab) for support!
FAQ
How do I add a custom route to one of the three mission tiers?
Open config/routes.lua and append a new route with a unique id (continue the 1XX/2XX/3XX tier convention), then list each fire location with coords, heading, fire count, loot table key and salvage radius. Reference the new route id from the matching Config.MissionTiers entry in config/config.lua so the depot NPC can hand it out.
How do I change the leveling ladder (500 XP Firefighter, 3500 XP Aerial Specialist)?
Edit Config.Leveling in config/config.lua. You can rename the ranks, change the XP thresholds, add a new rank or reorder the ladder. The only requirement is that thresholds are strictly ascending. Existing players keep their XP; the rank they see is recalculated on next login from the database.
How do I gate job access behind a Discord role or custom permission check?
Edit CanStartJob in server/editable.lua. The function receives the playerId and the target tier and returns true/false. Plug in your Discord API, ACE permission or framework-job check there. Rejecting returns a locale-ready reason string that the depot NPC forwards to the player.
How do loot tables for vehicle, street, dumpster and yard spawns actually work?
Each route location has four per-type loot tables with weighted items. When a fire is extinguished the server rolls once per spawn category and consults Config.Loot[type] for chances, min/max quantity. You can override the weights globally in config or per-location for special missions like the marina fire.
Can I pay rewards as cash vs. bank, and how do I plug in my own currency?
Config.Payout.account accepts "cash", "bank" or a custom account id your framework exposes. For non-standard currencies edit CalculateBonus and OnRewardGiven in server/editable.lua. CalculateBonus returns the final number (tier multiplier, XP bonus, Discord boost, etc.) and OnRewardGiven gives you a post-payment hook for custom ledgers.
How do I hook firefighter events into my scoreboard or Discord logger?
OnJobStart, OnFireExtinguished and OnJobComplete live in server/editable.lua as empty hooks. Fill them in with your existing logger calls. They receive structured payloads (playerId, tier, route, time, reward) that map directly to Discord webhook embeds without extra processing.