Commands#
Hunter Job registers no chat or console commands. Everything a player does starts at the employer, and everything an owner changes is in the config. The commands you will use around it belong to your framework:
Command | Where | Description |
|---|---|---|
| In game (ESX, QBCore, Qbox) | Gives a player the hunter job. Taking the job away ends any mission they are on. |
| Console | Applies config changes. Crews and missions in progress are dropped; levels, experience and the leaderboard are kept. |
For diagnosing, turn on Config.Debug: the script then traces what it is doing in the server console and in F8, which shows how far something got before it stopped.
Client Exports#
For opening the job panel from your own scripts — a radial menu, an NPC manager, a phone app.
openHunterMenu
Opens the full job panel — missions, crew, shop, statistics and guide — exactly as talking to the employer does.
exports['qs-hunter']:openHunterMenu()The camera only cuts to the employer when the player is standing within 6 m of them; from anywhere else the panel simply opens over the game. The job is still checked when a mission is started.
Opening it from the server
The same panel, triggered for a player from a server script:
TriggerClientEvent('qs-hunter:openHunterMenu', source)Showing a hunter notification
Sends a message through the job's own notifications — or through your SendTextMessage when Config.DefaultNotifications is off:
-- server side; type is 'info', 'success', 'error' or 'warning'
TriggerClientEvent('qs-hunter:sendNotification', source, 'notify', 'success', 'The ranger signed off your licence.')There is deliberately no export that opens the statistics on their own. They are a view inside the panel, and opening one without the other would capture the cursor and draw nothing. Open the panel instead.
Server Exports#
How another resource asks about hunters — a ranger or poaching script, a dispatch board, a job centre counting who is working.
IsPlayerOnMission
Whether a player is on a hunting mission right now, answered from the server's own record of who is on what — written when a mission starts and cleared when it is finished, abandoned or the player disconnects.
if exports['qs-hunter']:IsPlayerOnMission(source) then
-- carrying a rifle in the woods is part of the job
endReturns a boolean. This is the one to trust when the answer matters.
getOnDutyCount
How many players are currently hunting, as reported by their clients when a mission starts and ends.
local hunters = exports['qs-hunter']:getOnDutyCount()isPlayerOnDuty
Whether one player's client says it is hunting. Kept for scripts that already call it; a modified client decides its own answer here, so use IsPlayerOnMission for anything that grants or refuses something.
local onDuty = exports['qs-hunter']:isPlayerOnDuty(source)checkItem callback
An ox_lib callback that answers how many of an item a player carries, or false when they have none. Called from the client:
local hides = lib.callback.await('qs-hunter:checkItem', false, 'deer_hide')
if hides then
print(('carrying %d deer hides'):format(hides))
endAbout the Events#
The job's network events — qs-hunter:startGroupQuest, qs-hunter:buyItems, qs-hunter:invitePlayerToParty and the rest — exist for its own interface. They take names and quantities, never prices or rewards, and every one is checked against the config and the server's records, so triggering them from elsewhere gains nothing and is not supported. Use the exports above.
Refusals reach the player as translation keys turned into text in their language — NOTIFY_NOT_HUNTER, NOT_ENOUGH_LEVEL_MEMBERS, NOTIFY_ANIMAL_LIMIT_REACHED. What each one means is in Common Errors.



