Come aggiungere un job su QBCore: shared/jobs.lua, gradi e /setjob

Aggiungi un job personalizzato a QBCore o QBox: la struttura shared/jobs.lua con defaultDuty, offDutyPay e gradi, il comando /setjob, e leggere Player.PlayerData.job.

Su QBCore un job è un blocco in un file Lua, non una riga nel database. Aggiungi il blocco, riavvia il core, e imposta il job su un giocatore. Questa guida mostra la struttura, il comando, e come leggere il job nel codice, per QBCore e QBox.

La struttura

Apri qb-core/shared/jobs.lua. I job sono entry nella tabella QBShared.Jobs, con chiave del nome del job. Aggiungi il tuo:

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

Cosa significa ogni parte:

Campo Significato
Chiave (mechanic) Il nome del job usato nel codice e /setjob: minuscolo, senza spazi
label Il nome che i giocatori vedono
defaultDuty true se i giocatori iniziano in servizio quando ottengono il job
offDutyPay true se il job paga anche quando il giocatore è fuori servizio
grades I ranghi, con chiave del loro livello
name Il nome di visualizzazione del rango
payment Lo stipendio di quel rango ad ogni pagamento
isboss true marca il rango come un rango di boss

Due regole:

  • Le chiavi di grado sono stringhe su QBCore: ['0'], ['1']. Inizia a '0' senza lacune.
  • Guarda i job già nel file, come police, e copia la loro forma. Alcuni job portano un campo type extra che altri script usano per raggrupparli, e il file mostra cosa la tua versione supporta.

Attenzione: una virgola o una parentesi mancante in jobs.lua ferma qb-core dal caricamento, e ogni script che dipende da esso con esso.

Riavvia e imposta il job

Il core legge il file all'avvio:

text
restart qb-core

Poi, come admin, nel gioco o la console:

text
/setjob <player id> mechanic 1

I valori sono l'id del giocatore, la chiave del job e il numero di grado. Se il comando è rifiutato, non hai permessi di admin: vedi permessi ACE per admin.

Leggi il job negli script

Sul 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 contiene name, label, onduty, isboss, payment e una tabella grade con il name e level del rango. Per il numero di rango usa job.grade.level.

Per cambiare il job dal codice:

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

Se QBCore è nil qui, vedi tentativo di indicizzare un valore nil (globale 'QBCore').

Sul 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)

Leggere GetPlayerData().job prima che il giocatore abbia caricato dà nil, quindi aspetta OnPlayerLoaded, e mantieni il job fresco con OnJobUpdate.

Su QBox

Il core di QBox è qbx_core, e il file jobs è qbx_core/shared/jobs.lua. La struttura è la stessa: un label, defaultDuty, offDutyPay e grades. Apri il file e segui le entry già in esso, poiché il file di QBox può differire nei dettagli come le chiavi di grado sono scritte, e le nuove versioni possono aggiungere campi.

Riavvia qbx_core dopo la modifica. Per il codice, il livello di compatibilità ancora risponde a exports['qb-core']:GetCoreObject(), e l'export proprio di QBox è:

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

Un grado con isboss = true è solo il flag. Il menu che lascia il boss assumere persone e usare l'account dell'azienda viene dalla tua risorsa di gestione, che di solito ha la sua lista di job da configurare. Se il menu di boss non si apre per il tuo nuovo job, controlla quella risorsa's config per il nome del job.

Problemi comuni

  • Job non trovato da /setjob. Il core non è stato riavviato, o la chiave è scritta male.
  • Il core fallisce dopo la modifica. Un errore di sintassi in jobs.lua. Leggi la prima riga rossa nella console, e come leggere un errore di script aiuta con il file e la riga.
  • Lo stipendio non viene ricevuto. offDutyPay = false significa che il giocatore deve essere in servizio, e l'intervallo di pagamento viene dalla config del core.

Checklist

Sintomo Soluzione
Job non trovato Aggiungilo a shared/jobs.lua e riavvia qb-core o qbx_core
Il core non si avvia Errore di sintassi in jobs.lua; controlla le virgole e le parentesi
Rango sbagliato Le chiavi di grado sono stringhe che iniziano a '0' su QBCore
Nessun pagamento fuori servizio Imposta offDutyPay = true o vai in servizio
Il job è nil sul client Aspetta QBCore:Client:OnPlayerLoaded
Nessun menu di boss Imposta isboss = true e aggiungi il job alla risorsa di gestione

Risposte rapide

Dove sono definiti i job di QBCore?

In qb-core/shared/jobs.lua, come entry di QBShared.Jobs. Su QBox il file è qbx_core/shared/jobs.lua.

Perché /setjob dice che il job non esiste?

Il core legge il file quando si avvia. Riavvia qb-core (o qbx_core) dopo la modifica, e controlla che il nome del job e il numero di grado esistano nel file.

Cosa fa isboss?

Marca un grado come grado di boss. I menu di boss e gli script di gestione controllano quel flag per decidere chi può assumere, licenziare e usare i fondi dell'azienda.

Script senza questo problema

Advanced BoostingBoosting di veicoli dal tablet: contratti dalla classe D alla S+, crew e coda in tempo reale.Vedi script →Shop CreatorCrea un negozio in meno di un minuto — proprietari, dipendenti, casseforti e rapine inclusi.Vedi script →Pawn Shop AppUn banco dei pegni tra giocatori dentro lb-phone.Vedi script →

Continua a leggere