Como adicionar um job em QBCore: shared/jobs.lua, grades e /setjob
Adicione um job customizado ao QBCore ou QBox: a estrutura shared/jobs.lua com defaultDuty, offDutyPay e grades, o comando /setjob, e lendo Player.PlayerData.job.
Em QBCore um job é um bloco em um arquivo Lua, não uma linha de banco de dados. Você adiciona o bloco, reinicia o core, e define o job em um jogador. Este guia mostra a estrutura, o comando, e como ler o job em código, para QBCore e QBox.
A estrutura
Abra qb-core/shared/jobs.lua. Jobs são entradas na tabela QBShared.Jobs, com chave pelo nome do job. Adicione o seu:
['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 },
},
},O que cada parte significa:
| Campo | Significado |
|---|---|
Chave (mechanic) |
O nome do job usado em código e /setjob: lowercase, sem espaços |
label |
O nome que jogadores veem |
defaultDuty |
true se jogadores começam on duty quando recebem o job |
offDutyPay |
true se o job paga mesmo quando o jogador está off duty |
grades |
Os ranks, com chave pelo seu nível |
name |
O nome de exibição do rank |
payment |
O pagamento daquele rank a cada paycheck |
isboss |
true marca o rank como boss rank |
Duas regras:
- Chaves de grade são strings em QBCore:
['0'],['1']. Comece em'0'sem gaps. - Olhe os jobs já no arquivo, como
police, e copie sua forma. Alguns jobs carregam um campo extratypeque outros scripts usam para agrupá-los, e o arquivo mostra o que sua versão suporta.
Atenção: uma vírgula faltando ou brace em
jobs.luaimpede qb-core de carregar, e cada script que depende com ele.
Reinicie e defina o job
O core lê o arquivo ao iniciar:
restart qb-coreDepois, como um admin, no jogo ou no console:
/setjob <player id> mechanic 1Os valores são o id do jogador, a chave do job e o número de grade. Se o comando é recusado, você não tem permissões de admin: veja ACE permissions for admins.
Leia o job em scripts
No 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 contém name, label, onduty, isboss, payment e uma tabela grade com o name do rank e level. Para o número de rank use job.grade.level.
Para mudar o job de código:
Player.Functions.SetJob('mechanic', 1)Se QBCore é nil aqui, veja attempt to index a nil value (global 'QBCore').
No cliente
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)Ler GetPlayerData().job antes do jogador ter carregado dá nil, então espere por OnPlayerLoaded, e mantenha o job fresco com OnJobUpdate.
Em QBox
O core de QBox é qbx_core, e o arquivo de jobs é qbx_core/shared/jobs.lua. A estrutura é a mesma: um label, defaultDuty, offDutyPay e grades. Abra o arquivo e siga as entradas já nele, já que o arquivo de QBox pode diferir em detalhes como como as chaves de grade são escritas, e novas versões podem adicionar campos.
Reinicie qbx_core após o edit. Para código, a compatibility layer ainda responde exports['qb-core']:GetCoreObject(), e o export próprio de QBox é:
local player = exports.qbx_core:GetPlayer(source)
if player then
print(player.PlayerData.job.name)
endMenu de boss e fundos
Uma grade com isboss = true é apenas a flag. O menu que deixa o boss contratar pessoas e usar a conta da empresa vem do seu resource de management, que usualmente tem sua própria lista de jobs para configurar. Se o menu de boss não abre para seu novo job, verifique aquele resource's config para o nome do job.
Problemas comuns
- Job não encontrado por
/setjob. O core não foi reiniciado, ou a chave está errada. - Core falha após o edit. Um erro de sintaxe em
jobs.lua. Leia a primeira linha vermelha no console, e how to read a script error ajuda com o arquivo e linha. - Pay não é recebido.
offDutyPay = falsesignifica que o jogador deve estar on duty, e o intervalo de paycheck vem da config do core.
Checklist
| Sintoma | Solução |
|---|---|
| Job não encontrado | Adicione a shared/jobs.lua e reinicie qb-core ou qbx_core |
| Core não vai começar | Erro de sintaxe em jobs.lua; verifique vírgulas e braces |
| Rank errado | Chaves de grade são strings começando em '0' em QBCore |
| Sem pay off duty | Defina offDutyPay = true ou vá on duty |
| Job é nil no cliente | Espere por QBCore:Client:OnPlayerLoaded |
| Sem menu de boss | Defina isboss = true e adicione o job ao resource de management |
Respostas rápidas
Onde jobs de QBCore são definidos?
Em qb-core/shared/jobs.lua, como entradas de QBShared.Jobs. Em QBox o arquivo é qbx_core/shared/jobs.lua.
Por que /setjob diz que o job não existe?
O core lê o arquivo quando inicia. Reinicie qb-core (ou qbx_core) após o edit, e verifique que o nome do job e o número de grade existem no arquivo.
O que isboss faz?
Marca uma grade como boss grade. Menus de boss e scripts de management checam aquele flag para decidir quem pode contratar, desligar e usar o fundo do job.
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 →