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:
['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ätzlichestypeFeld, 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.luahindert 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:
restart qb-coreDann, als Admin, im Spiel oder der Konsole:
/setjob <player id> mechanic 1Die 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:
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:
Player.Functions.SetJob('mechanic', 1)Wenn QBCore hier nil ist, siehe attempt to index a nil value (global 'QBCore').
Auf dem Client
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:
local player = exports.qbx_core:GetPlayer(source)
if player then
print(player.PlayerData.job.name)
endBoss-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 = falsebedeutet, 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 →