Einen Job in ESX Legacy hinzufügen: jobs und job_grades SQL, setjob
Füge einen benutzerdefinierten Job zu ESX Legacy mit zwei SQL-Inserts in jobs und job_grades hinzu, stelle ihn mit /setjob ein, lese ihn in Skripten mit xPlayer.job und verknüpfe ihn mit einem Society-Konto.
ESX hat keine Jobs-Datei. Ein Job sind Zeilen in deiner Datenbank: eine in jobs und eine pro Rang in job_grades. Dieser Leitfaden fügt einen Job hinzu, gibt ihn einem Spieler, liest ihn im Code und verknüpft ihn mit einem Society-Konto.
1. Job einfügen
Die Tabelle jobs enthält den Job selbst und job_grades enthält seine Ränge. Führe dies in HeidiSQL, phpMyAdmin oder der MySQL-CLI auf der Datenbank aus, die dein Server verwendet:
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, '{}', '{}');Die wichtigen Regeln:
nameist der Code-Name: Kleinbuchstaben, keine Leerzeichen und überall gleich.labelist das, das Spieler sehen.job_nameinjob_gradesmuss dem Jobnameentsprechen.- Grade
0muss existieren, da neue Spieler des Jobs mit ihm anfangen. Nummeriere die Grade ohne Lücken. salarywird bei jedem Zahlungsintervall bezahlt, wenn deine Lohnschecks laufen.- Ein Job, der in
job_gradesfehlt, bricht/setjobund kann Fehler werfen, wenn ein Spieler lädt.
Spalten können zwischen ESX-Versionen ein wenig unterschiedlich sein, also öffne job_grades in deinem Tool und passe die Spaltenliste an die Tabelle an, die du siehst. Wenn ein Insert fehlschlägt, werden Import-Fehler unter Unknown column and table errors behandelt.
2. Neu starten, damit ESX Jobs neu lädt
ESX liest Jobs aus der Datenbank, wenn es_extended startet, daher ist eine neue Zeile unsichtbar, bis dann:
restart es_extendedAuf einem Live-Server kann das Neustarten des Kerns die Skripte, die davon abhängen, brechen, also starte den ganzen Server zu einer ruhigen Zeit neu, wenn du nicht sicher bist.
3. Gib den Job einem Spieler
Im Spiel oder von der Konsole aus als Admin:
/setjob <player id> mechanic2 0Die drei Werte sind die Spieler-ID, der Job name und die Grade-Nummer. Wenn es fehlschlägt, überprüfe die Schreibweise gegen die Tabelle jobs und dass der Grade existiert, dann siehe ACE permissions for admins wenn der Befehl abgelehnt wird.
4. Lese den Job in deinen Skripten
Auf dem Server, hole den Spieler und lese den Job:
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() gibt eine Tabelle zurück, und xPlayer.job hält die gleichen Daten. Die Felder, die du am meisten verwendest, sind name, label, grade, grade_name und grade_label.
Um einen Job eines Spielers aus Code zu ändern:
xPlayer.setJob('mechanic2', 1)Wenn ESX in deinem Skript nil ist, behebe das zuerst mit ESX is nil: fixing esx:getSharedObject.
Auf dem 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)Das Event esx:setJob wird ausgelöst, wenn sich der Job ändert, also behalte deine eigene Kopie aktuell, anstatt jeden Frame zu fragen.
5. Society-Konten mit esx_society
Wenn der Job ein gemeinsames Bankkonto, ein Boss-Menü oder einen Lagerraum braucht, verlässt es sich auf esx_society. Ein Job mit einer Society braucht:
- Einen Boss-Rang. Der oberste Rang ist
bossbenannt, wie im Insert oben. Das Boss-Menü sucht nach diesem Namen. - Ein Society-Konto. Society-Geld lebt in der Tabelle
addon_account, in einem Konto namenssociety_plus der Job-Name, zum Beispielsociety_mechanic2. Füge eine Zeile dafür hinzu und für sein Inventar und Datastore, wenn dein Job sie verwendet. - Die Registrierung. Das Skript des Jobs selbst registriert die Society mit esx_society auf dem Server, wenn es startet, mit dem gleichen Job-Namen.
Wo die Registrierung lebt, hängt von dem Skript ab, das den Job lädt. Überprüfe, wie ein vorhandener Job auf deinem Server es macht, z. B. der Police- oder Mechanic-Job, und spiegle es für deinen wider.
Tipp: Wenn das Boss-Menü leer öffnet oder Geld nicht bewegt wird, stimmt der Society-Kontoname nicht exakt mit
society_plus dem Job-Namen überein.
Checkliste
| Symptom | Lösung |
|---|---|
Job nicht gefunden von /setjob |
Starte es_extended nach dem Insert neu |
| Fehler beim Spieler-Laden | Der Job hat keinen Grade 0 in job_grades |
| Name-Mismatch | job_name muss dem Job name gleichen, Kleinbuchstaben |
| Falscher Rang bezahlt | Überprüfe das salary dieses grade |
| Kein Boss-Menü | Benenne den obersten Rang boss und registriere die Society |
| Society-Geld fehlt | Erstelle society_<job> in addon_account mit dem exakten Job-Namen |
Kurze Antworten
Wo werden ESX-Jobs gespeichert?
In der Datenbank: Die Tabelle jobs enthält den Job und die Tabelle job_grades enthält seine Ränge mit jeweils einem Gehalt. Es gibt keine Jobs-Datei zu bearbeiten in ESX Legacy.
Warum sagt /setjob, der Job existiert nicht?
ESX lädt Jobs, wenn es_extended startet. Starte es nach dem Insert neu und überprüfe, dass der Job-Name und die Grade-Nummer in job_grades existieren.
Wie bekomme ich das Boss-Menü für meinen Job?
Benenne den obersten Rang boss. esx_society prüft diesen Grade-Namen auf das Boss-Menü, und es braucht auch ein Society-Konto für den Job.
Scripts ohne dieses Problem
Advanced BoostingFahrzeug-Boosting per Tablet: Aufträge von Klasse D bis S+, Crews und eine Live-Warteschlange.Script ansehen →
Shop CreatorBau einen Shop in unter einer Minute — Besitzer, Angestellte, Tresore und Überfälle inklusive.Script ansehen →
Pawn Shop AppEin Pfandmarkt zwischen Spielern, direkt in lb-phone.Script ansehen →