The Foreman's Panel#
Everything starts with Big Ray, the foreman at the lumber yard above Paleto Bay, marked on the map as Lumberjack Zone and in the world by a floating blue marker. Press E beside him — or choose Start Working with your target resource — and the camera cuts to him while his panel opens on the right half of the screen.
Section | What it is for |
|---|---|
Missions | The contracts, each with its level, the wood it asks for, the pay and the experience. The footer offers Start mission, or Abandon mission while one is running. |
Crew | Up to four slots showing each member's face, an invite box and a remove button. |
Shop | Buy axes, and sell wood and planks. |
Statistics | The leaderboards, and the button to the achievements. |
Achievements | Your record per wood, every milestone, and the rewards waiting to be collected. |
Guide | The whole job in six steps and four tips, written in the translation file so you can reword it. |
The header shows the player's level, the experience bar and their current drop-rate bonus. Anyone can open the panel to browse the shop and the rankings; taking a mission is what needs the job.
The name and greeting on the foreman's card are
Config.PedNameandConfig.PedGreeting; leave either empty to hide it. His model and position areConfig.Locations.pedManager, and the marker above him isConfig.PedMarker.
The Work Loop#
Buy an axe
Shop → Buy axes. The Rusty Axe is open to everyone; better axes unlock with level.
Take it out
Use the axe from the inventory and it appears in your hand. Use it again to put it away.
Take a contract
Optional, but it is where the money is. Pick a mission, bring a crew if you like, and press Start mission. You change into the work outfit, every standing tree gets a blip, and a tracker shows what is still owed.
Fell trees
Stand at a trunk, face it and press the left mouse button to swing. Each hit shakes the tree; when its health runs out it falls in a burst of splinters.
Collect the wood
Three pieces of wood fly out of a felled tree. Walk within two metres and they are pulled to you; the loot is rolled the moment one is picked up.
Split and sell
Turn logs into planks at the chopping block for about double the price, then sell from the Shop.
The Forest#
The forest is three stands, each a tier in Config.Trees with its own level requirement, its own tree positions and the odds of what grows there.
Stand | Level | Trees | Grows | Where |
|---|---|---|---|---|
Tier 1 | 1 | 20 | Pine | Just north of the yard |
Tier 2 | 3 | 14 | Oak | West of the yard |
Tier 3 | 10 | 12 | Maple | Far north, past the first stand |
The trees are spawned for a player once they come within 500 metres of the yard, and the server keeps every tree's type and health, so everyone sees the same forest. A felled tree grows back after Config.RespawnTime (15 seconds) — and in a tier with several types, it can grow back as a different one. Tree blips (Config.TreeBlips) are shown only while a player is on a mission.
Config.Trees = {
[2] = {
levelRequired = 3, -- the level needed to fell here
chances = { tree2 = 100 }, -- what grows back, as weights
coords = {
vec3(-669.876892, 5333.393555, 64.833008),
vec3(-678.145081, 5329.213379, 67.175049),
-- one line per tree
}
},
}Mountain lions roam these woods, and a worker standing still at a tree is easy prey. Config.RemoveMountainLions clears any that wander within 100 metres of the yard, and touches no other animal.
Wood and Drops#
Each wood type in Config.WoodTypes sets the tree model, how much damage it takes to fell, the experience it pays and what it drops.
Wood | Health | Swings (Rusty · Iron · Mythical) | XP | Drops |
|---|---|---|---|---|
Pine · | 100 | 4 · 3 · 2 | 25 | Pine wood (always) · Pine resin 20%, up to 3 · Wood Shavings 10%, up to 2 |
Oak · | 200 | 8 · 6 · 4 | 50 | Oak wood (always) · Oak Bark 20%, up to 3 · Arcorn 10%, up to 2 |
Maple · | 300 | 12 · 9 · 6 | 75 | Maple wood (always) · Strong fiber 20%, up to 3 · Maple syrup extract 10%, up to 2 |
Every drop is one row of five values. The last one is the sell price of a single unit, and it is the only place that price is set:
-- item name label chance max price
{ "pine_wood", "Pine wood", 100, 1, 5 },
{ "pine_resin", "Pine resin", 20, 3, 7 },
{ "wood_shavings", "Wood Shavings", 10, 2, 9 },How the loot is rolled#
Every row is rolled once per felled tree, on the server. Its chance is raised by the axe, the level and a rich grove, and capped at 100:
chance = chance × (1 + axe bonus / 100) + level × 0.5 + rich grove bonus
-- Pine resin, level 10, Iron-Edged Axe: 20 × 1.10 + 5 = 27%When a row drops, the first unit is certain and each further one is less likely than the last, so the max is a ceiling rather than an amount — a 3 usually pays 1 or 2. The first row of each tree is the wood itself, at 100%.
The wood is reserved for the player who felled the tree for
Config.DropProtectionTime(10 seconds); after that anyone can take it, and uncollected wood disappears after five minutes. Wood that does not fit in the inventory is lost and the player is told their inventory is full — experience and mission progress are paid only for wood that actually arrived.
Axes#
Axe | Level | Price | Damage | Durability | Loot bonus |
|---|---|---|---|---|---|
Rusty Axe | 1 | $50 | 25 | 100 swings | +0% |
Iron-Edged Axe | 3 | $300 | 35 | 300 swings | +10% |
Mythical Axe | 6 | $2,000 | 50 | 1,200 swings | +25% |
Damage is taken off the tree's health on every hit. Durability is how many swings the axe survives — each swing costs the tree's durabilitypenalty, and a swing that breaks the axe does not damage the tree. The loot bonus multiplies every drop chance. With several axes in the bag, the best one counts.
Config.AxeLevel = {
["axe_iron"] = {
prop = "prop_dynasty_axe_lvl_2", -- the model in hand
label = 'Iron-Edged Axe',
durability = 300,
price = 300,
levelRequired = 3,
itemAcquisitionBonus = 10, -- percent, on every drop chance
damage = 35
},
}The swing is the left mouse button, a FiveM key binding each player can change. A swing counts only facing a trunk within reach; anything else is a miss. Config.AxeAttachment sets where the axe sits in the hand, and Config.AxeWithdrawAnimation plays a short animation when it comes out.
The Chopping Block#
Three tree stumps stand by the yard. Splitting a log there turns it into a plank worth about twice as much.
Walk up with the axe in hand
Press
E, or choose Use chopping block with your target. The camera frames the stump and a log is set on it.Swing
Every press of
Eis one swing and one plank, about a second and a half each. The most valuable log you carry is always split first, and the panel shows planks made, the next log and the queue.Leave
ESCbetween swings, or keep going until every log is split and the session closes itself.
Log | Becomes | Log price → plank price |
|---|---|---|
|
| $5 → $10 |
|
| $6 → $12 |
|
| $7 → $14 |
Config.ChopWood = {
Locations = {
{ coords = vector3(-573.6, 5378.9, 68.5), heading = 0.0 },
-- one line per stump
},
Drops = {
['pine_wood'] = { item = 'pinewood_plank', price = 10 },
}
}If the plank does not fit in the inventory, the log is handed back. Planks count toward nothing but money: splitting cannot be failed, so it is deliberately left out of the achievements.
Missions and Crews#
Missions are orders for wood, taken from the foreman's panel. These ship in Config.Tasks:
Mission | Level | Asks for | Pays | XP |
|---|---|---|---|---|
Beginner's Logging | 1 | 50 pine wood | $400 | 300 |
Novice Lumberjack | 2 | 50 oak wood | $600 | 500 |
Apprentice Woodcutter | 3 | 100 pine wood, 75 oak wood | $1,000 | 800 |
Journeyman Lumberjack | 4 | 150 oak wood, 80 maple wood | $1,500 | 1,200 |
Master of the Forest | 5 | 200 pine, 150 oak, 100 maple wood | $2,500 | 2,000 |
{
taskOrder = 3, -- unique, do not reuse
name = "Apprentice Woodcutter",
img = "lumberjack_img3.png", -- lumberjack_img1, 2 or 3
description = "Venture deeper into the woods...",
recommendedPlayers = { 1, 4 },
levelRequired = 3,
woodAmount = { 100, 75 }, -- read in pairs with woodRequired
woodRequired = { "pine_wood", "oak_wood" },
experience = 800,
money = 1000
},Only the logs count toward an order — pine_wood, oak_wood, maple_wood — and every crew member's wood counts toward the same order. When it is complete everyone still in the crew is paid, changes back into their own clothes, and the tree blips disappear.
Building a crew#
A crew holds up to
Config.MaxPartyMembersplayers, leader included — four by default.Invite by server ID from an empty slot. The player must be within
Config.InviteDistancemetres (20; 0 allows any distance), and has 60 seconds to accept. The same player cannot be invited again for 20 seconds.With
qs-partyrunning, the members of your party fill the crew on their own.Every member must meet the mission's level, and nobody can be in two crews at once. The server checks both when the mission starts.
Crew tiles show each member's real face when they are close by, and their initials otherwise.
How a crew is paid#
Config.MissionPayout | What happens |
|---|---|
| Every member gets the full money and experience. A crew of four on a $2,000 mission costs the economy $8,000. |
| The money and experience are divided between the members present when it completes, rounded down, never below 1. |
What a mission asks for does not grow with the crew, so four players bring in the same haul one would. Leaving — Abandon mission in the panel, disconnecting, or losing the job — takes that player out of the crew and its pay; the mission carries on for whoever is left.
Levels and Experience#
Experience comes from every tree carried away, from missions, from collected achievements and from tournament prizes. There is no level cap: each level needs a little more than the last.
Config.LevelExperience = {
LevelBonusMultiplier = 0.5, -- drop-chance points added per level
BaseExperience = 3500, -- experience from level 1 to 2
GrowthFactor = 1.1, -- each level needs 10% more than the last
}Reaching | That level costs | Total from level 1 | Unlocks |
|---|---|---|---|
Level 2 | 3,500 | 3,500 | Novice Lumberjack |
Level 3 | 3,850 | 7,350 | The oak stand, the Iron-Edged Axe, Apprentice Woodcutter |
Level 4 | 4,235 | 11,585 | Journeyman Lumberjack |
Level 5 | 4,658 | 16,243 | Master of the Forest |
Level 6 | 5,124 | 21,367 | The Mythical Axe |
Level 10 | 7,502 | 47,525 | The maple stand |
Every level also adds LevelBonusMultiplier points to every drop chance — +5 at level 10 — shown in the panel as the item drop rate bonus.
The Shop#
Buy axes lists every axe with its level, price, durability, damage and loot bonus, and how many you already own. Sell wood lists everything sellable in your inventory — logs, by-products and planks — with its price and what your whole stack is worth. Pick items and amounts, or Sell all.
Prices never move with a market: what the shop lists is what the server pays, read from the config. Money is paid in cash — the money account on ESX, cash on QBCore. The currency symbol is the CURRENCY_TYPE line in the translations, and Config.CurrencyPosition puts it before or after the amount.
Leaderboards#
Statistics in the panel holds four rankings. Players are ranked by experience, with their earnings beside it, and your own row is highlighted.
Tab | Ranks |
|---|---|
All-Time Lumberjacks | Every point of experience ever earned. Never resets. |
Top Lumberjacks Season | This month. Resets at 00:00 on the 1st, server time. |
Top Lumberjacks Daily | Today. Resets every day at 00:00, server time. |
Tournament wins | Tournaments won, in either ranking. |
When the daily or season board resets, the top three are paid from Config.LeaderBoardRewards, the panel shows them as the last winners, and it counts down to the next reset. A winner who is offline has the prize kept for them and paid on their next login.
Config.EnableLeaderboard = true -- false hides Statistics entirely
Config.UpdateLeaderboard = 1 -- minutes between refreshes
Config.MaxLeaderboardPlayers = 100 -- rows per tab
Config.LeaderBoardRewards = {
Daily = { [1] = 5215, [2] = 350, [3] = 200 },
Season = { [1] = 5000, [2] = 3500, [3] = 2000 },
}Earnings on the board are mission pay, collected achievement money and tournament prizes. Wood sold at the shop is not counted, so the board measures the job rather than the market.
Achievements#
Achievements are a record of what a lumberjack has actually done, counted on the server. Finishing one does not pay on the spot: a notification says it is earned, and the reward waits at the foreman until the player opens Achievements and presses Claim. The screen has two tabs — Wood and Milestones — and a badge for anything waiting.
Achievement | Goal | Reward |
|---|---|---|
First Cut | Fell your first tree | $100 · 150 XP |
Finding the Rhythm | Fell 100 trees | $700 · 900 XP |
Deep in the Woods | Fell 500 trees | $3,000 · 4,000 XP |
Master of the Forest | Fell 2,500 trees | $12,000 · 16,000 XP |
The Full Stand | Fell every type of tree | $2,500 · 3,000 XP |
Maple Runner | Fell 100 maples | $6,000 · 7,000 XP |
Nothing Left Standing | Fell at least 50 of every type | $15,000 · 18,000 XP |
On the Books | Finish 10 missions | $2,000 · 2,500 XP |
Company Man | Finish 50 missions | $7,000 · 8,500 XP |
Making a Name · Foreman · Legend of the Woods | Reach level 10 · 25 · 50 | $800 · $3,000 · $10,000 |
Everything Else | Earn every other achievement | $25,000 · 30,000 XP |
Felled enough Pine · Oak · Maple wood | 40 pines · 30 oaks · 20 maples | $400 / 500 XP · $800 / 1,000 XP · $1,500 / 1,800 XP |
The wood achievements are generated, one per entry in Config.WoodTypes, with their goals in WoodGoal and their rewards in WoodReward — a new wood type gets its own achievement without touching the list. A mission completed by a crew counts for every member.
Adding your own#
Config.Achievements.List = {
{ id = 'felled_100', icon = 'tree', type = 'totalFelled', value = 100, reward = 700, experience = 900 },
{ id = 'maple_100', icon = 'leaf', type = 'wood', wood = 'tree3', value = 100, reward = 6000, experience = 7000 },
{ id = 'quests_10', icon = 'clipboardCheck', type = 'counter', counter = 'quests', value = 10, reward = 2000, experience = 2500 },
}Type | Measures |
|---|---|
| Every tree felled and carried away, all types. |
| How many different wood types have been brought back. |
| Trees of one type, named in |
| At least |
| The job level reached. |
| A tally named in |
| Every other achievement on the list. Its goal moves on its own when you add rows. |
Icons: tree, treeCity, leaf, crown, medal, star, trophy, layerGroup, clipboardCheck and chartLine; any other name shows a trophy. The name and description come from ACHIEVEMENT_<ID> and ACHIEVEMENT_<ID>_DESC in the translations.
Rich Groves#
Every so often one wood type runs rich across the whole forest. It is not a place but a species: while maple is rich, maple grows back more often, drops more and pays more experience, and everything else carries on as it was. Lumberjacks get a notification and an on-screen clock for as long as it lasts.
Boost | Default | Effect on the rich wood |
|---|---|---|
| 3.0 | Three times as likely to be what a felled tree grows back as, at the expense of the other types in that stand. |
| 25 | Points added to each drop: a 20% item drops 45% of the time. |
| 1.6 | Multiplies how many can come out of one tree, rounded up. |
| 1.5 | Multiplies the experience the wood pays. |
Config.RichGroves = {
Enabled = true,
Duration = 20, -- minutes one lasts
LumberjacksOnly = true, -- false: anyone who chops benefits
Boost = { Spawn = 3.0, DropChance = 25, Quantity = 1.6, Experience = 1.5 },
Woods = { tree1 = 40, tree2 = 30, tree3 = 12, default = 20 }, -- weights, 0 = never
Random = { Enabled = true, MinInterval = 30, MaxInterval = 75 },
}A grove opens on its own a random 30 to 75 minutes after the last one closed. Maple is weighted low on purpose — a rich maple grove should be the thing people log in for. Admins can open or close one at any time from the admin panel's Events tab.
Tournaments#
A tournament is a timed competition across the whole forest — there is no zone to stand in. Lumberjacks are warned five minutes ahead, a live board shows both rankings while it runs, and everyone who felled a tree sees the final scoreboard.
Ranking | Won by | Prizes, 1st · 2nd · 3rd |
|---|---|---|
Richest haul | Points: pine 1, oak 3, maple 8 — rewards walking further for less. | $6,000 + 4,000 XP · $3,000 + 2,000 XP · $1,200 + 900 XP |
Biggest haul | Trees felled, every type the same — rewards speed. | $4,000 + 2,500 XP · $2,000 + 1,200 XP · $800 + 600 XP |
One player can win both and is paid for each. Money goes to winners who are online when it ends. Every win is recorded for the Tournament wins leaderboard.
Config.Tournaments = {
Enabled = true,
Duration = 20, -- minutes
AnnounceBefore = 5, -- minutes of warning, 0 for none
LumberjacksOnly = true,
ShowResults = true, -- the scoreboard for entrants
Schedule = { { at = '14:00' }, { at = '19:00' }, { at = '22:30' } }, -- server time
Random = { Enabled = true, CheckEvery = 60, Chance = 25 },
Points = { tree1 = 1, tree2 = 3, tree3 = 8, default = 3 },
MinimumEntries = 1, -- entrants needed before anything is paid
}Besides the schedule, every CheckEvery minutes there is a Chance% roll for an unscheduled one. Flatten the points and the two rankings become the same race. Prizes holds both ladders; remove a row and that place pays nothing.
The Admin Panel#
/lumberjackadmin opens an in-game editor for every setting in config.lua, grouped into sections, each setting with its help line. A search box finds any setting across all of them, and anything changed from the file is marked.
Section | What it holds |
|---|---|
Events | Start or stop a rich grove or a tournament right now, and their settings. |
Job & NPC | Who may work, the foreman's name, greeting and marker, the outfit switch, player names and the language. |
The forest | Tiers and tree positions, blips, locations, respawn, drop protection and mountain lions. |
Wood | What each stand drops and what it pays. |
Axes | The shop catalogue, durability, the attachment and axe removal. |
Chopping block | Where the stumps are and what they make. |
Missions & crew | The task list, crew size, invite distance and how a crew is paid. |
Levels & records | The experience curve, achievements and the leaderboard. |
Setup | Target, inventory, keys, notifications, webhooks, the admin panel itself and debug. |
Other | Anything that belongs to none of the above. |
Coordinates are never typed: Use my position fills in where you stand (with your heading where one is needed), Go there teleports you to check a spot, and Waypoint marks it on the map. Lists — trees, tasks, achievements — have add and remove buttons, and settings with a fixed set of answers offer a choice instead of a text box.
Saves go to the database, never to config.lua, and are laid over the file at start-up. Back to the file's value deletes one saved setting and Reset everything deletes them all. The detected framework, the translation strings and the outfit in clothing.lua are not edited from the panel. Each save can be logged to Discord with who made it — see Integrations.
General Settings#
The rest of config.lua, for reference:
Who can work and how they interact
Setting | Default | Does |
|---|---|---|
| true | Missions, crews and events need a job from |
| lumberjack | The jobs that count as lumberjacks. Add as many as you need. |
| false / "ox" | Third-eye on the foreman and stumps, with ox_target or qb-target. |
| true | Floating "press E" prompts at the foreman and the stumps. |
| "E" | The key for the foreman and the chopping block. |
| 'character' | Name shown in crews and tournaments: |
| true | Swap into the outfit in |
Notifications and money
Setting | Default | Does |
|---|---|---|
| true | The script's own notifications. false sends them to |
| "prefix" | $500 or 500 $. |
| 'members' | Full pay per member, or |
The world
Setting | Default | Does |
|---|---|---|
| public | The yard blip. |
| s_m_m_dockwork_01 | The foreman's model and position. The forest streams in within 500 m of him. |
| 15000 | Milliseconds before a felled tree grows back. |
| 10000 | Milliseconds the wood is reserved for the feller. |
| true | A blip per standing tree while on a mission. |
| enabled | The floating marker: type, height, distance, bobbing, size and colour. |
| false | Explains what the script is doing in the server console and F8. Leave it off on a live server. |



