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:
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_nameemjob_gradesdeve ser igual aonamedo emprego.- O posto
0deve 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_gradesquebra/setjobe 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:
restart es_extendedEm 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:
/setjob <player id> mechanic2 0Os 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:
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:
xPlayer.setJob('mechanic2', 1)Se ESX for nil em seu script, corrija-o primeiro com ESX é nil: corrigindo esx:getSharedObject.
No cliente
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 chamadasociety_mais o nome do emprego, por exemplosociety_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 →