Comment ajouter un emploi sur ESX Legacy : SQL jobs et job_grades, setjob

Ajoutez un emploi personnalisé à ESX Legacy avec deux insertions SQL dans jobs et job_grades, réglez-le avec /setjob, lisez-le dans les scripts avec xPlayer.job et reliez-le à un compte de société.

ESX n'a pas de fichier d'emplois. Un emploi est des lignes dans votre base de données : une dans jobs, et une par rang dans job_grades. Ce guide ajoute un emploi, le donne à un joueur, le lit dans le code et le lie à un compte de société.

1. Insérez l'emploi

La table jobs contient l'emploi lui-même, et job_grades contient ses rangs. Exécutez ceci dans HeidiSQL, phpMyAdmin ou la CLI mysql, sur la base de données que votre serveur utilise :

sql
INSERT INTO `jobs` (`name`, `label`) VALUES
  ('mechanic2', 'Mechanic');

INSERT INTO `job_grades` (`job_name`, `grade`, `name`, `label`, `salary`, `skin_male`, `skin_female`) VALUES
  ('mechanic2', 0, 'recruit',  'Recruit',  200, '{}', '{}'),
  ('mechanic2', 1, 'novice',   'Novice',   300, '{}', '{}'),
  ('mechanic2', 2, 'boss',     'Boss',     500, '{}', '{}');

Les règles importantes :

  • name est le nom du code : minuscules, pas d'espaces, et le même partout. label est ce que les joueurs voient.
  • job_name dans job_grades doit être égal au name de l'emploi.
  • Le grade 0 doit exister, car les nouveaux joueurs de l'emploi commencent à celui-ci. Numérotez les grades sans lacunes.
  • salary est payé à chaque intervalle de paie, si vos salaires s'exécutent.
  • Un emploi qui manque dans job_grades casse /setjob et peut causer des erreurs quand un joueur se charge.

Les colonnes peuvent différer un peu entre les versions ESX, alors ouvrez job_grades dans votre outil et faites correspondre la liste des colonnes à la table que vous voyez. Si une insertion échoue, les erreurs d'importation sont couvertes dans Erreurs de colonne et table inconnues.

2. Redémarrez pour que ESX recharge les emplois

ESX lit les emplois de la base de données quand es_extended démarre, donc une nouvelle ligne est invisible jusqu'à alors :

text
restart es_extended

Sur un serveur en direct, redémarrer le cœur peut casser les scripts qui en dépendent, donc redémarrez le serveur entier à un moment calme si vous n'êtes pas sûr.

3. Donnez l'emploi à un joueur

En jeu ou depuis la console, en tant qu'administrateur :

text
/setjob <player id> mechanic2 0

Les trois valeurs sont l'ID du joueur, le name de l'emploi et le numéro de grade. S'il échoue, vérifiez l'orthographe par rapport à la table jobs et que le grade existe, puis voir Permissions ACE pour les administrateurs si la commande est refusée.

4. Lisez l'emploi dans vos scripts

Sur le serveur, obtenez le joueur et lisez l'emploi :

lua
local ESX = exports['es_extended']:getSharedObject()

RegisterNetEvent('my_script:doWork', function()
    local xPlayer = ESX.GetPlayerFromId(source)
    if not xPlayer then return end

    local job = xPlayer.getJob()
    if job.name ~= 'mechanic2' then
        return xPlayer.showNotification('You are not a mechanic')
    end

    if job.grade < 1 then
        return xPlayer.showNotification('You need a higher rank')
    end

    -- allowed
end)

xPlayer.getJob() retourne une table, et xPlayer.job contient les mêmes données. Les champs que vous utiliserez le plus sont name, label, grade, grade_name et grade_label.

Pour changer l'emploi d'un joueur depuis le code :

lua
xPlayer.setJob('mechanic2', 1)

Si ESX est nil dans votre script, corrigez-le d'abord avec ESX is nil: fixing esx:getSharedObject.

Sur le client

lua
local ESX = exports['es_extended']:getSharedObject()

local function isMechanic()
    local data = ESX.GetPlayerData()
    return data.job and data.job.name == 'mechanic2'
end

RegisterNetEvent('esx:setJob', function(job)
    -- job changed while the player is online
    print(job.name, job.grade)
end)

L'événement esx:setJob se déclenche quand l'emploi change, donc gardez votre propre copie à jour au lieu de demander à chaque frame.

5. Comptes de société avec esx_society

Si l'emploi a besoin d'un compte bancaire partagé, d'un menu boss ou d'une réserve, il dépend de esx_society. Un emploi avec une société a besoin de :

  • Un grade boss. Le grade supérieur est nommé boss, comme dans l'insertion ci-dessus. Le menu boss cherche ce nom.
  • Un compte de société. L'argent de la société vit dans la table addon_account, dans un compte appelé society_ plus le nom de l'emploi, par exemple society_mechanic2. Ajoutez une ligne pour cela, et pour son inventaire et datastore si votre emploi les utilise.
  • L'enregistrement. Le script de l'emploi enregistre la société avec esx_society sur le serveur quand il démarre, en utilisant le même nom d'emploi.

L'endroit où l'enregistrement vit dépend du script qui exécute l'emploi. Vérifiez comment un emploi existant sur votre serveur le fait, comme l'emploi de police ou de mécanicien, et reflétez-le pour le vôtre.

Astuce : si le menu boss s'ouvre vide ou l'argent ne se déplace pas, le nom du compte de société ne correspond pas à society_ plus le nom de l'emploi exactement.

Liste de vérification

Symptôme Correction
Emploi non trouvé par /setjob Redémarrez es_extended après l'insertion
Erreurs quand le joueur se charge L'emploi n'a pas de grade 0 dans job_grades
Décalage de nom job_name doit être égal au name de l'emploi, minuscules
Mauvais rang payé Vérifiez le salary de ce grade
Pas de menu boss Nommez le grade supérieur boss et enregistrez la société
Argent de la société manquant Créez society_<job> dans addon_account avec le nom exact de l'emploi

Réponses rapides

Où les emplois ESX sont-ils stockés ?

Dans la base de données : la table jobs contient l'emploi, et la table job_grades contient ses rangs avec un salaire chacun. Il n'y a pas de fichier d'emplois à modifier sur ESX Legacy.

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

ESX charge les emplois quand es_extended démarre. Redémarrez-le après l'insertion, et vérifiez que le nom de l'emploi et le numéro de grade existent dans job_grades.

Comment obtenir le menu boss pour mon emploi ?

Nommez le grade supérieur boss. esx_society vérifie ce nom de grade pour le menu boss, et il a aussi besoin d'un compte de société pour l'emploi.

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