Como adicionar um emprego no ESX Legacy: jobs e job_grades SQL, setjob

Adicione um emprego personalizado ao ESX Legacy com dois inserts SQL em jobs e job_grades, defina-o com /setjob, leia-o em scripts com xPlayer.job e vincule-o a uma conta de sociedade.

ESX não tem arquivo de empregos. Um emprego são linhas em seu banco de dados: uma em jobs e uma por posto em job_grades. Este guia adiciona um emprego, o dá a um jogador, lê-o em código e o vincula a uma conta de sociedade.

1. Insira o emprego

A tabela jobs contém o próprio emprego, e job_grades contém seus postos. Execute isso no HeidiSQL, phpMyAdmin ou na CLI do mysql, no banco de dados que seu servidor usa:

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

As regras que importam:

  • name é o nome do código: minúsculas, sem espaços, e igual em todo lugar. label é o que os jogadores veem.
  • job_name em job_grades deve ser igual ao name do emprego.
  • O posto 0 deve existir, porque novos jogadores do emprego começam nele. Numere os postos sem lacunas.
  • salary é pago em cada intervalo de pagamento, se seus contracheques forem executados.
  • Um emprego que está faltando em job_grades quebra /setjob e pode gerar erros quando um jogador é carregado.

As colunas podem diferir um pouco entre versões do ESX, então abra job_grades em sua ferramenta e corresponda a lista de colunas à tabela que você vê. Se um insert falhar, erros de importação são cobertos em Erros de coluna e tabela desconhecida.

2. Reinicie para que ESX recarregue os empregos

ESX lê empregos do banco de dados quando es_extended inicia, então uma nova linha é invisível até então:

text
restart es_extended

Em um servidor ativo, reiniciar o núcleo pode quebrar os scripts que dependem dele, então reinicie todo o servidor em um momento tranquilo se você não tem certeza.

3. Dê o emprego a um jogador

No jogo ou do console, como um admin:

text
/setjob <player id> mechanic2 0

Os três valores são o id do jogador, o name do emprego e o número do posto. Se falhar, verifique a ortografia contra a tabela jobs e que o posto existe, depois veja Permissões ACE para admins se o comando for recusado.

4. Leia o emprego em seus scripts

No servidor, obtenha o jogador e leia o emprego:

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() retorna uma tabela, e xPlayer.job contém os mesmos dados. Os campos que você usará mais são name, label, grade, grade_name e grade_label.

Para alterar o emprego de um jogador do código:

lua
xPlayer.setJob('mechanic2', 1)

Se ESX for nil em seu script, corrija-o primeiro com ESX é nil: corrigindo esx:getSharedObject.

No cliente

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)

O evento esx:setJob dispara quando o emprego muda, então mantenha sua própria cópia atualizada em vez de perguntar a cada frame.

5. Contas de sociedade com esx_society

Se o emprego precisar de uma conta bancária compartilhada, um menu do chefe ou uma sala de estoque, ele depende de esx_society. Um emprego com uma sociedade precisa:

  • Um posto de chefe. O posto superior é nomeado boss, como no insert acima. O menu do chefe procura por esse nome.
  • Uma conta de sociedade. Dinheiro de sociedade vive na tabela addon_account, em uma conta chamada society_ mais o nome do emprego, por exemplo society_mechanic2. Adicione uma linha para ele e para seu inventário e datastore se seu emprego os usar.
  • O registro. O próprio script do emprego registra a sociedade com esx_society no servidor quando inicia, usando o mesmo nome do emprego.

Onde o registro vive depende do script que executa o emprego. Verifique como um emprego existente em seu servidor o faz, como o emprego de polícia ou mecânico, e espelhe-o para o seu.

Dica: se o menu do chefe abre vazio ou o dinheiro não se move, o nome da conta de sociedade não corresponde exatamente a society_ mais o nome do emprego.

Lista de verificação

Sintoma Correção
Emprego não encontrado por /setjob Reinicie es_extended após o insert
Erros quando o jogador é carregado O emprego não tem o posto 0 em job_grades
Falta de correspondência de nome job_name deve ser igual a name do emprego, minúsculas
Posto errado pago Verifique o salary desse grade
Sem menu do chefe Nomeie o posto superior como boss e registre a sociedade
Dinheiro de sociedade faltando Crie society_<job> em addon_account com o nome exato do emprego

Respostas rápidas

Onde os empregos ESX são armazenados?

No banco de dados: a tabela jobs contém o emprego, e a tabela job_grades contém seus postos com um salário cada um. Não há arquivo de empregos para editar no ESX Legacy.

Por que /setjob diz que o emprego não existe?

ESX carrega empregos quando es_extended inicia. Reinicie-o após o insert e verifique se o nome do emprego e o número do posto existem em job_grades.

Como faço para obter o menu do chefe para meu emprego?

Nomeie o posto superior como boss. esx_society verifica esse nome de posto para o menu do chefe, e também precisa de uma conta de sociedade para o emprego.

Scripts sem esse problema

Advanced BoostingBoosting de veículos pelo tablet: contratos da classe D à S+, crews e fila ao vivo.Ver script →Shop CreatorMonte uma loja em menos de um minuto — donos, funcionários, cofres e assaltos inclusos.Ver script →Pawn Shop AppUma casa de penhores entre jogadores dentro do lb-phone.Ver script →

Continue lendo