Come aggiungere un lavoro su ESX Legacy: SQL jobs e job_grades, setjob

Aggiungi un lavoro personalizzato a ESX Legacy con due inserimenti SQL in jobs e job_grades, impostalo con /setjob, leggilo negli script con xPlayer.job e collegalo a un account society.

ESX non ha un file di lavori. Un lavoro è righe nel tuo database: una in jobs, e una per grado in job_grades. Questa guida aggiunge un lavoro, lo assegna a un giocatore, lo legge nel codice e lo collega a un account society.

1. Inserisci il lavoro

La tabella jobs contiene il lavoro stesso, e job_grades contiene i suoi gradi. Esegui questo in HeidiSQL, phpMyAdmin o nella CLI mysql, sul database che il tuo server utilizza:

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

Le regole che contano:

  • name è il nome del codice: minuscolo, nessuno spazio, e uguale ovunque. label è ciò che i giocatori vedono.
  • job_name in job_grades deve essere uguale al name del lavoro.
  • Il grado 0 deve esistere, perché i nuovi giocatori del lavoro iniziano da esso. Numera i gradi senza spazi.
  • salary viene pagato a ogni intervallo di stipendio, se i tuoi pagamenti vengono eseguiti.
  • Un lavoro mancante da job_grades interrompe /setjob e può lanciare errori quando un giocatore si carica.

Le colonne possono differire leggermente tra le versioni di ESX, quindi apri job_grades nel tuo strumento e abbina l'elenco delle colonne alla tabella che vedi. Se un inserimento fallisce, gli errori di importazione sono coperti in Errori di colonna sconosciuta e tabella.

2. Riavvia affinché ESX ricarichi i lavori

ESX legge i lavori dal database quando es_extended si avvia, quindi una nuova riga è invisibile fino ad allora:

text
restart es_extended

Su un server live, riavviare il core può rompere gli script che dipendono da esso, quindi riavvia l'intero server in un momento tranquillo se non sei sicuro.

3. Dai il lavoro a un giocatore

Nel gioco o dalla console, come amministratore:

text
/setjob <player id> mechanic2 0

I tre valori sono l'id del giocatore, il name del lavoro e il numero del grado. Se fallisce, controlla l'ortografia rispetto alla tabella jobs e che il grado esista, quindi vedi Permessi ACE per amministratori se il comando viene rifiutato.

4. Leggi il lavoro nei tuoi script

Sul server, ottieni il giocatore e leggi il lavoro:

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() restituisce una tabella, e xPlayer.job contiene gli stessi dati. I campi che utilizzerai di più sono name, label, grade, grade_name e grade_label.

Per cambiare il lavoro di un giocatore dal codice:

lua
xPlayer.setJob('mechanic2', 1)

Se ESX è nil nel tuo script, correggi prima questo con ESX è nil: correzione di esx:getSharedObject.

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

L'evento esx:setJob si attiva quando il lavoro cambia, quindi mantieni la tua copia aggiornata invece di chiedere ad ogni frame.

5. Account society con esx_society

Se il lavoro ha bisogno di un account bancario condiviso, un menu del boss o una stanza di stock, si basa su esx_society. Un lavoro con una society ha bisogno di:

  • Un grado di boss. Il grado superiore è denominato boss, come nell'inserimento sopra. Il menu del boss cerca quel nome.
  • Un account society. Il denaro della society vive nella tabella addon_account, in un account chiamato society_ più il nome del lavoro, ad esempio society_mechanic2. Aggiungi una riga per esso, e per il suo inventario e datastore se il tuo lavoro li utilizza.
  • La registrazione. Lo script del lavoro stesso registra la society con esx_society sul server quando si avvia, utilizzando lo stesso nome del lavoro.

Dove vive la registrazione dipende dallo script che gestisce il lavoro. Controlla come fa un lavoro esistente sul tuo server, come il lavoro di polizia o meccanico, e duplicalo per il tuo.

Suggerimento: se il menu del boss si apre vuoto o il denaro non si muove, il nome dell'account society non corrisponde a society_ più il nome del lavoro esattamente.

Lista di controllo

Sintomo Soluzione
Lavoro non trovato da /setjob Riavvia es_extended dopo l'inserimento
Errori quando il giocatore si carica Il lavoro non ha grado 0 in job_grades
Mancata corrispondenza del nome job_name deve essere uguale al name del lavoro, minuscolo
Grado pagato errato Controlla la salary di quel grade
Nessun menu del boss Nomina il grado superiore boss e registra la society
Denaro society mancante Crea society_<job> in addon_account con il nome esatto del lavoro

Risposte rapide

Dove sono archiviati i lavori di ESX?

Nel database: la tabella jobs contiene il lavoro e la tabella job_grades contiene i suoi gradi con uno stipendio ciascuno. Non c'è un file di lavori da modificare su ESX Legacy.

Perché /setjob dice che il lavoro non esiste?

ESX carica i lavori quando es_extended si avvia. Riavvialo dopo l'inserimento e controlla che il nome del lavoro e il numero di grado esistano in job_grades.

Come ottengo il menu del boss per il mio lavoro?

Nomina il grado superiore boss. esx_society controlla quel nome di grado per il menu del boss, e ha anche bisogno di un account society per il lavoro.

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