Configuração de police job em FiveM: graus, duty, armory e contagem de polícia

Como configurar um police job em um servidor FiveM: job e graus, toggle de duty, armory com shop e stash, algema e escolta, verificações de contagem de polícia, MDT e dispatch.

O sintoma: você adicionou um police job, mas ninguém consegue entrar em duty, a armory está aberta para todos, ou roubos dizem "sem polícia suficiente" enquanto três oficiais estão online.

Um police job que funciona é um punhado de pequenas peças que devem concordar com uma coisa: o nome do job e quem está em duty. Este artigo caminha por cada peça e onde geralmente quebra.

O job e seus graus

O job é uma linha de dados: um nome, um rótulo e uma lista de graus (cadet, officer, sergeant, chief). O número de grau é o que você verifica depois, então decida a ordem primeiro e mantenha-a. Como criar o job em cada framework é coberto em adding a job on ESX e adding a job on QBCore. Em QBox o job vive nos dados compartilhados qbx_core em vez de um arquivo qb-core.

Duas regras que salvam dor:

  • Use um nome interno em todos os lugares, por exemplo police. Cada script que diz "apenas polícia" compara contra essa string.
  • Dê ao grau do chefe a flag que seu framework usa para chefes, então menus de sociedade e gerenciamento funcionam.

O toggle de duty

Ser um policial e estar em duty não é a mesma coisa. Roubos, dispatch e vencimentos devem contar apenas oficiais em duty.

  • QBCore e QBox mantêm um campo onduty no job, e um toggle o muda. Um job pode ser definido para começar em duty ou fora de duty por padrão.
  • ESX não tem campo de duty no job base. Muitas configurações usam um job de off-duty segundo, ou uma flag que seu recurso de polícia mantém, então verifique como o seu faz antes de escrever qualquer contagem.

Seja qual for o framework, o toggle deve rodar no servidor, e o servidor decide o valor. Um evento do cliente que diz "Estou em duty" sem verificação é um exploit.

A armory: shop ou stash

Não distribua armas de um evento do cliente. Use as próprias ferramentas de seu inventário. Com ox_inventory você pode restringir uma loja ou stash a um job e um grau mínimo, que é a armory mais limpa:

lua
-- shop entry (in the ox_inventory shops data)
PoliceArmory = {
    name = 'Police Armory',
    groups = { police = 0 },          -- job name and minimum grade
    inventory = {
        { name = 'radio', price = 0 },
        { name = 'handcuffs', price = 0 },
    },
    locations = { vec3(452.6, -980.0, 30.7) },
}

Um stash funciona da mesma forma para evidence lockers e armazenamento compartilhado. Veja ox_inventory shops e ox_inventory stashes. Mantenha os nomes groups e a verificação de grau iguais ao nome do seu job, ou a armory permanecerá trancada para todos.

Algema e escolta

Algema é um conjunto de pequenas peças, não um recurso:

  1. O oficial toca uma animação e o servidor verifica se o alvo está próximo e o oficial tem o job.
  2. O alvo recebe um estado de algema, uma animação de algema e controles desabilitados (sem disparar, sem correr, sem entrar em veículos sozinhos).
  3. Escolta prende o alvo ao oficial, ou segue-o, até ser liberado.

Mantenha a flag de algema como um state bag para que cada cliente veja, e para que jogadores que apareçam depois vejam também. Verifique distância e job no servidor, da forma que securing your server events descreve. Lembre-se de limpar a flag quando o jogador for liberado, morrer ou partir.

Contagem de polícia para roubos

Roubos, heists e alguns drug jobs perguntam "quantos oficiais estão em duty". A resposta deve vir do servidor:

lua
-- ESX (server)
local function policeOnline()
    local count = 0
    for _, xPlayer in pairs(ESX.GetExtendedPlayers('job', 'police')) do
        count += 1
    end
    return count
end
lua
-- QBCore (server)
local function policeOnline()
    local count = 0
    for _, player in pairs(QBCore.Functions.GetQBPlayers()) do
        local job = player.PlayerData.job
        if job.name == 'police' and job.onduty then
            count += 1
        end
    end
    return count
end

Em QBox, versões recentes qbx_core também enviam exports de contagem de duty, então verifique sua documentação antes de escrever seu próprio loop. Se você usar um par de job off-duty em ESX, conte apenas o nome em duty.

Sempre conte no servidor, e conte novamente quando o roubo começar, não apenas quando o jogador se aproximar. Veja robbery scripts para o fluxo completo.

MDT e dispatch são separados

O police job te dá um job e uma contagem. Estes geralmente são outros recursos:

  • MDT: registros, mandados, cidadãos e busca de veículos.
  • Dispatch: chamadas 911, blips de alerta, status do oficial.
  • Evidência e depósito: frequentemente seus próprios scripts novamente.

Verifique a configuração de cada um para o nome do job. Um dispatch que nunca mostra alertas é quase sempre configurado para um nome de job diferente do que você criou.

Lista de verificação

Sintoma Solução
Armory aberta para todos Adicione o nome do job e um grau mínimo aos groups da loja ou stash
Armory trancada para oficiais O nome do job na armory não corresponde ao nome do job que você criou
Roubo diz sem polícia, oficiais online Conte apenas oficiais em duty, com o nome exato do job, no servidor
Dispatch mostra sem alertas Defina o nome do police job na configuração do dispatch
Jogador permanece algemiado após libertação Limpe o estado de algema ao liberar, morte e desconexão
Qualquer um pode entrar em duty Faça o toggle no servidor e verifique o job primeiro

Respostas rápidas

Como conto os policiais online?

No servidor, percorra os jogadores conectados e conte os que possuem seu police job e que estão em duty. Faça no servidor, nunca no cliente, porque roubos e heists confiam nesse número.

Um police job inclui um MDT e dispatch?

Geralmente não. O job em si é apenas o job, graus, duty e uma armory. O MDT (registros, mandados) e o dispatch (chamadas, blips) são recursos separados que leem o job do jogador.

Onde dou armas para a polícia?

Coloque-as em uma armory: uma loja de inventário ou um stash restrito ao police job e a um grau mínimo. Não dê armas de um evento do cliente.

Scripts sem esse problema

CCTV Security CamerasCâmeras posicionáveis, um tablet com várias telas ao vivo e fotos impressas como prova.Ver script →Advanced BoostingBoosting de veículos pelo tablet: contratos da classe D à S+, crews e fila ao vivo.Ver script →

Continue lendo