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:

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, '{}', '{}');

Die wichtigen Regeln:

  • name ist der Code-Name: Kleinbuchstaben, keine Leerzeichen und überall gleich. label ist das, das Spieler sehen.
  • job_name in job_grades muss dem Job name entsprechen.
  • Grade 0 muss existieren, da neue Spieler des Jobs mit ihm anfangen. Nummeriere die Grade ohne Lücken.
  • salary wird bei jedem Zahlungsintervall bezahlt, wenn deine Lohnschecks laufen.
  • Ein Job, der in job_grades fehlt, bricht /setjob und 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:

text
restart es_extended

Auf 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:

text
/setjob <player id> mechanic2 0

Die 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:

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() 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:

lua
xPlayer.setJob('mechanic2', 1)

Wenn ESX in deinem Skript nil ist, behebe das zuerst mit ESX is nil: fixing esx:getSharedObject.

Auf dem 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)

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 boss benannt, 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 namens society_ plus der Job-Name, zum Beispiel society_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 →

Weiterlesen