Wie man einen Job in QBCore hinzufügt: shared/jobs.lua, Stufen und /setjob

Füge einen benutzerdefinierten Job zu QBCore oder QBox hinzu: die shared/jobs.lua Struktur mit defaultDuty, offDutyPay und Stufen, der /setjob Befehl, und das Lesen von Player.PlayerData.job.

Auf QBCore ist ein Job ein Block in einer Lua-Datei, nicht eine Datenbankzeile. Du fügt den Block hinzu, startest den Core neu, und setzt den Job auf einen Spieler. Dieses Handbuch zeigt die Struktur, den Befehl, und wie man den Job im Code liest, für QBCore und QBox.

Die Struktur

Öffne qb-core/shared/jobs.lua. Jobs sind Einträge in der QBShared.Jobs Tabelle, mit dem Job-Namen als Schlüssel. Füge deinen hinzu:

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 },
    },
},

Was jeder Teil bedeutet:

Feld Bedeutung
Schlüssel (mechanic) Der Job-Name, der im Code und /setjob verwendet wird: Kleinbuchstaben, keine Leerzeichen
label Der Name, den Spieler sehen
defaultDuty true wenn Spieler im Dienst starten, wenn sie den Job bekommen
offDutyPay true wenn der Job auch zahlt, wenn der Spieler im Dienst ist
grades Die Ränge, mit ihrer Ebene als Schlüssel
name Der Anzeigename des Rangs
payment Das Gehalt dieses Rangs bei jedem Lohnscheck
isboss true markiert den Rang als Boss-Rang

Zwei Regeln:

  • Grade-Schlüssel sind Zeichenketten in QBCore: ['0'], ['1']. Beginne mit '0' ohne Lücken.
  • Schaue dir die Jobs an, die bereits in der Datei sind, wie police, und kopiere ihre Form. Einige Jobs tragen ein zusätzliches type Feld, das andere Scripts verwenden, um sie zu gruppieren, und die Datei zeigt, was deine Version unterstützt.

Achtung: Ein fehlendes Komma oder Klammer in jobs.lua hindert qb-core daran zu laden, und jeden Script, der davon abhängt, mit ihm.

Neustart und setze den Job

Der Core liest die Datei beim Start:

text
restart qb-core

Dann, als Admin, im Spiel oder der Konsole:

text
/setjob <player id> mechanic 1

Die Werte sind die Spieler-ID, der Job-Schlüssel und die Stufennummer. Wenn der Befehl verweigert wird, hast du keine Admin-Berechtigungen: siehe ACE-Berechtigungen für Admins.

Lese den Job in Scripts

Auf dem Server:

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 hält name, label, onduty, isboss, payment und eine grade Tabelle mit dem name und level des Rangs. Für die Stufennummer verwende job.grade.level.

Um den Job aus dem Code zu ändern:

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

Wenn QBCore hier nil ist, siehe attempt to index a nil value (global 'QBCore').

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

Das Lesen von GetPlayerData().job bevor der Spieler geladen hat, gibt nil, also warte auf OnPlayerLoaded, und halte den Job mit OnJobUpdate aktuell.

In QBox

Der Core von QBox ist qbx_core, und die Jobs-Datei ist qbx_core/shared/jobs.lua. Die Struktur ist gleich: ein Label, defaultDuty, offDutyPay und grades. Öffne die Datei und folge den Einträgen, die bereits in ihr sind, da QBox-Datei Details unterscheiden kann, wie z.B. wie die Grade-Schlüssel geschrieben sind, und neue Versionen können Felder hinzufügen.

Starte qbx_core nach der Bearbeitung neu. Für Code beantwortet die Kompatibilitätsebene noch exports['qb-core']:GetCoreObject(), und QBox' eigener Export ist:

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

Boss-Menü und Gelder

Eine Stufe mit isboss = true ist nur das Flag. Das Menü, das dem Boss ermöglicht, Leute einzustellen und das Unternehmenskonto zu verwenden, kommt von deiner Management-Ressource, die normalerweise ihre eigene Liste von Jobs zum Konfigurieren hat. Wenn das Boss-Menü für deinen neuen Job nicht öffnet, überprüfe diese Ressource-Config für den Job-Namen.

Häufige Probleme

  • Job nicht gefunden durch /setjob. Der Core wurde nicht neu gestartet, oder der Schlüssel ist falsch geschrieben.
  • Core schlägt nach der Bearbeitung fehl. Ein Syntax-Fehler in jobs.lua. Lese die erste rote Zeile in der Konsole, und wie man einen Script-Fehler liest hilft bei der Datei und Zeile.
  • Zahlung wird nicht erhalten. offDutyPay = false bedeutet, der Spieler muss im Dienst sein, und das Lohnscheckintervall kommt aus der Config des Cores.

Checkliste

Symptom Behebung
Job nicht gefunden Füge es zu shared/jobs.lua hinzu und starte qb-core oder qbx_core neu
Core startet nicht Syntax-Fehler in jobs.lua; überprüfe Kommas und Klammern
Falscher Rang Grade-Schlüssel sind Zeichenketten, die mit '0' in QBCore beginnen
Keine Bezahlung im Dienst Setze offDutyPay = true oder gehe im Dienst
Job ist nil auf dem Client Warte auf QBCore:Client:OnPlayerLoaded
Kein Boss-Menü Setze isboss = true und füge den Job zur Management-Ressource hinzu

Kurze Antworten

Wo werden QBCore-Jobs definiert?

In qb-core/shared/jobs.lua, als Einträge von QBShared.Jobs. Auf QBox ist die Datei qbx_core/shared/jobs.lua.

Warum sagt /setjob, dass der Job nicht existiert?

Der Core liest die Datei beim Start. Starte qb-core (oder qbx_core) nach der Bearbeitung neu, und überprüfe, dass der Job-Name und die Stufennummer in der Datei existieren.

Was macht isboss?

Es markiert eine Stufe als Boss-Stufe. Boss-Menüs und Verwaltungs-Scripts überprüfen dieses Flag, um zu entscheiden, wer Leute einstellen, entlassen und das Unternehmenskonto verwenden kann.

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