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 :
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 :
nameest le nom du code : minuscules, pas d'espaces, et le même partout.labelest ce que les joueurs voient.job_namedansjob_gradesdoit être égal aunamede l'emploi.- Le grade
0doit exister, car les nouveaux joueurs de l'emploi commencent à celui-ci. Numérotez les grades sans lacunes. salaryest payé à chaque intervalle de paie, si vos salaires s'exécutent.- Un emploi qui manque dans
job_gradescasse/setjobet 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 :
restart es_extendedSur 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 :
/setjob <player id> mechanic2 0Les 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 :
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 :
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
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 exemplesociety_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 →