Commands and Keys#
Lumberjack Job registers one command, for admins. Players work entirely through the foreman's panel and a few keys.
Command or key | Where | Description |
|---|---|---|
| In game | Opens the admin panel; typed again, closes it. Needs the |
Documentation
Lumberjack Job's admin command, key bindings, and the client and server exports for opening the shop and leaderboard, equipping axes and checking who is on a lumberjack mission.
Lumberjack Job registers one command, for admins. Players work entirely through the foreman's panel and a few keys.
Command or key | Where | Description |
|---|---|---|
| In game | Opens the admin panel; typed again, closes it. Needs the |
Left mouse button |
Key binding |
Swings the axe in hand at the tree in front of you. A FiveM key binding, so each player can move it in Settings → Key Bindings → FiveM. |
| Key | Talks to the foreman when no target is used, opens the chopping block and swings at it. Set by |
| Key | Leaves the chopping block between swings, without opening the pause menu. |
There are no console commands. Rich groves and tournaments are started and stopped from the admin panel's Events tab, which shows what is running while you use it; the daily and season resets run on their own at 00:00 server time.
For opening the job's screens from your own scripts — an NPC manager, a radial menu, a phone app — and for the inventory hooks.
exports['qs-lumberjack']:openShop() -- buy axes and sell wood
exports['qs-lumberjack']:openLeaderboard() -- the four rankings
-- Older names, kept for NPC managers that already use them. Both open the shop.
exports['qs-lumberjack']:openAxeMenu()
exports['qs-lumberjack']:openSellMenu()The same screens answer client events, for menus that fire an event instead of calling an export:
TriggerEvent('qs-lumberjack:shopMenu')
TriggerEvent('qs-lumberjack:openLeaderboard')Prices are always resolved on the server, so opening the shop from anywhere cannot change what it pays. The leaderboard export does nothing while Config.EnableLeaderboard is off.
exports['qs-lumberjack']:toggleAxe(...) -- ox_inventory's item export
exports['qs-lumberjack']:toggleAxeQuasar(...) -- qs-inventory's item exportEach puts the axe in the player's hand, or away if one is already there. They read the item from whatever shape the inventory passes, or from a plain axe name such as 'axe_iron'. Two calls within 400 ms count as one, so an inventory that fires twice for a single use does not undo itself. Whatever happens in hand, damage, loot and durability are always decided by the server from the axes the player really owns.
exports['qs-lumberjack']:ExitJob()For a player wearing the work outfit: puts their own clothes back, takes the axe out of their hand and clears the job's prompts. Useful from a multi-job menu or when a player clocks out elsewhere.
AddEventHandler('qs-lumberjack:configReady', function()
-- the admin panel's saved settings are now applied on this client
end)A local event fired once per session, after the client has laid the settings saved from the admin panel over config.lua. Wait for it before reading Config values of this resource from another script.
For other resources that need to know who is working the forest.
local busy = exports['qs-lumberjack']:IsPlayerOnMission(source) -- true / falseWhether the player is in a lumberjack crew with a mission running, read from the server's own record. It turns false when the mission completes, or when the player abandons it, changes job or disconnects. This is the authoritative answer — use it to stop a player starting another job's mission at the same time:
if exports['qs-lumberjack']:IsPlayerOnMission(source) then
return -- finish or abandon the lumberjack mission first
endlocal working = exports['qs-lumberjack']:isPlayerOnDuty(source) -- in the work outfit?
local count = exports['qs-lumberjack']:getOnDutyCount() -- how many areBoth follow the work outfit, as reported by each player's client — handy for a job board that shows how many lumberjacks are working right now. Kept for compatibility; to decide anything that matters, prefer IsPlayerOnMission.
Any server script can show a message through the job's own notification, styled and routed exactly like the ones it sends itself — including to SendTextMessage when Config.DefaultNotifications is off:
TriggerClientEvent('qs-lumberjack:sendNotification', source, 'notify', 'success', 'The yard is paying double today.')
-- type: 'success', 'error', 'info' or 'warning'Every decision that touches money or progress is made on the server: the damage a swing does, the loot a tree drops, axe wear, sale prices, mission progress and pay, achievement claims and tournament scores. A client only ever reports what it did — a swing, a pickup, an item name and an amount — and the server checks distance, level, ownership and rate before it accepts anything. Scripts that integrate with the job can rely on the same: nothing above can be granted from a client.