Comment ajouter un emploi sur QBCore : shared/jobs.lua, grades et /setjob

Ajouter un emploi personnalisé à QBCore ou QBox : la structure shared/jobs.lua avec defaultDuty, offDutyPay et grades, la commande /setjob, et lire Player.PlayerData.job.

Sur QBCore, un emploi est un bloc dans un fichier Lua, pas une ligne de base de données. Vous ajoutez le bloc, redémarrez le noyau, et définissez l'emploi sur un joueur. Ce guide montre la structure, la commande, et comment lire l'emploi dans le code, pour QBCore et QBox.

La structure

Ouvrez qb-core/shared/jobs.lua. Les emplois sont des entrées dans la table QBShared.Jobs, clé par le nom de l'emploi. Ajoutez le vôtre :

lua
['mechanic'] = {
    label = 'Mechanic',
    defaultDuty = true,
    offDutyPay = false,
    grades = {
        ['0'] = { name = 'Recruit', payment = 50 },
        ['1'] = { name = 'Mechanic', payment = 75 },
        ['2'] = { name = 'Boss', payment = 120, isboss = true },
    },
},

Ce que chaque partie signifie :

Champ Signification
Clé (mechanic) Le nom de l'emploi utilisé dans le code et /setjob : minuscules, pas d'espaces
label Le nom que les joueurs voient
defaultDuty true si les joueurs commencent en service quand ils obtiennent l'emploi
offDutyPay true si l'emploi paie même quand le joueur est en dehors des heures de service
grades Les rangs, clés par leur niveau
name Le nom d'affichage du rang
payment La paie de ce rang à chaque paie
isboss true marque le rang comme un rang de patron

Deux règles :

  • Les clés de grade sont des chaînes sur QBCore : ['0'], ['1']. Commencez à '0' sans lacunes.
  • Regardez les emplois déjà dans le fichier, comme police, et copiez leur forme. Certains emplois portent un champ type supplémentaire que d'autres scripts utilisent pour les grouper, et le fichier montre ce que votre version supporte.

Attention : une virgule manquante ou une accolade manquante dans jobs.lua empêche qb-core de charger, et tous les scripts qui en dépendent avec lui.

Redémarrer et définir l'emploi

Le noyau lit le fichier au démarrage :

text
restart qb-core

Ensuite, en tant qu'administrateur, dans le jeu ou la console :

text
/setjob <player id> mechanic 1

Les valeurs sont l'ID du joueur, la clé de l'emploi et le numéro de grade. Si la commande est refusée, vous manquez de permissions d'administrateur : consultez permissions ACE pour les administrateurs.

Lire l'emploi dans les scripts

Sur le serveur :

lua
local QBCore = exports['qb-core']:GetCoreObject()

RegisterNetEvent('my_script:doWork', function()
    local src = source
    local Player = QBCore.Functions.GetPlayer(src)
    if not Player then return end

    local job = Player.PlayerData.job
    if job.name ~= 'mechanic' then
        return TriggerClientEvent('QBCore:Notify', src, 'You are not a mechanic', 'error')
    end

    if not job.onduty then
        return TriggerClientEvent('QBCore:Notify', src, 'Go on duty first', 'error')
    end

    -- allowed
end)

Player.PlayerData.job contient name, label, onduty, isboss, payment et une table grade avec le name et le level du rang. Pour le numéro de rang, utilisez job.grade.level.

Pour modifier l'emploi à partir du code :

lua
Player.Functions.SetJob('mechanic', 1)

Si QBCore est nil ici, consultez tentative d'indexer une valeur nil (global 'QBCore').

Sur le client

lua
local QBCore = exports['qb-core']:GetCoreObject()
local PlayerData = {}

RegisterNetEvent('QBCore:Client:OnPlayerLoaded', function()
    PlayerData = QBCore.Functions.GetPlayerData()
end)

RegisterNetEvent('QBCore:Client:OnJobUpdate', function(job)
    PlayerData.job = job
end)

Lire GetPlayerData().job avant que le joueur ait chargé donne nil, alors attendez OnPlayerLoaded, et gardez l'emploi à jour avec OnJobUpdate.

Sur QBox

Le noyau de QBox est qbx_core, et le fichier des emplois est qbx_core/shared/jobs.lua. La structure est la même : une étiquette, defaultDuty, offDutyPay et grades. Ouvrez le fichier et suivez les entrées déjà en place, car le fichier de QBox peut différer dans les détails comme la façon dont les clés de grade sont écrites, et les nouvelles versions peuvent ajouter des champs.

Redémarrez qbx_core après la modification. Pour le code, la couche de compatibilité répond toujours à exports['qb-core']:GetCoreObject(), et l'export propre de QBox est :

lua
local player = exports.qbx_core:GetPlayer(source)
if player then
    print(player.PlayerData.job.name)
end

Un grade avec isboss = true n'est que le drapeau. Le menu qui permet au patron d'embaucher des gens et d'utiliser le compte de l'entreprise provient de votre ressource de gestion, qui a habituellement sa propre liste d'emplois à configurer. Si le menu du patron ne s'ouvre pas pour votre nouvel emploi, vérifiez le config de cette ressource pour le nom de l'emploi.

Problèmes courants

  • Emploi non trouvé par /setjob. Le noyau n'a pas été redémarré, ou la clé est mal orthographiée.
  • Le noyau échoue après la modification. Une erreur de syntaxe dans jobs.lua. Lisez la première ligne rouge dans la console, et comment lire une erreur de script aide avec le fichier et la ligne.
  • La paie n'est pas reçue. offDutyPay = false signifie que le joueur doit être en service, et l'intervalle de paie provient de la config du noyau.

Liste de contrôle

Symptôme Correction
Emploi non trouvé Ajoutez-le à shared/jobs.lua et redémarrez qb-core ou qbx_core
Le noyau ne démarre pas Erreur de syntaxe dans jobs.lua ; vérifiez les virgules et les accolades
Mauvais rang Les clés de grade sont des chaînes commençant à '0' sur QBCore
Pas de paie hors service Définissez offDutyPay = true ou allez en service
L'emploi est nil sur le client Attendez QBCore:Client:OnPlayerLoaded
Pas de menu de patron Définissez isboss = true et ajoutez l'emploi à la ressource de gestion

Réponses rapides

Où les emplois QBCore sont-ils définis ?

Dans qb-core/shared/jobs.lua, comme des entrées de QBShared.Jobs. Sur QBox, le fichier est qbx_core/shared/jobs.lua.

Pourquoi /setjob dit que l'emploi n'existe pas ?

Le noyau lit le fichier quand il démarre. Redémarrez qb-core (ou qbx_core) après la modification, et vérifiez que le nom de l'emploi et le numéro de grade existent dans le fichier.

Qu'est-ce que isboss fait ?

Il marque un grade comme un grade de patron. Les menus de patron et les scripts de gestion vérifier ce drapeau pour décider qui peut embaucher, licencier et utiliser les fonds de l'entreprise.

Des scripts sans ce problème

Advanced BoostingDu boosting de véhicules piloté par tablette : contrats de classe D à S+, crews et file d’attente en direct.Voir le script →Shop CreatorCréez un magasin en moins d’une minute — propriétaires, employés, coffres et braquages inclus.Voir le script →Pawn Shop AppUn marché de prêt sur gage entre joueurs, directement dans lb-phone.Voir le script →

À lire aussi