DRS Fingerprint
Leitor biométrico fixo para as esquadras. O agente identifica uma pessoa pela impressão digital e vê no ecrã a foto, o nome, os dados pessoais, os mandados ativos, se está presa e o número de ocorrências e multas — com um botão para abrir logo o perfil no MDT. Funciona com Qbox, QBCore e ESX.
#Requisitos
| Recurso | Obrigatório |
|---|---|
oxmysql | Sim |
| Qbox, QBCore ou ESX | Sim (deteção automática) |
drs_mdt | Recomendado — foto, mandados, ocorrências, multas e "Abrir no MDT" |
drs_prison | Não — mostra se a pessoa está presa |
drs_policejob | Não — verificação de serviço |
Sem o drs_mdt, o leitor mostra só a identificação (nome, data de nascimento, sexo, nacionalidade e impressão digital).
#Instalação
- Coloca
drs_fingerprintemresources. - Adiciona ao
server.cfg, depois dodrs_mdt:
ensure oxmysql
ensure qb-core
ensure drs_mdt
ensure drs_fingerprint- A tabela
drs_fingerprint_log(registo de todas as leituras) é criada sozinha. - Ajusta as posições dos terminais em
Config.Terminalse os empregos emConfig.Jobs.
#Como usar
- O agente de serviço vai ao terminal (marcador azul) e carrega em E.
- A pessoa a identificar fica junto ao terminal (a menos de
Config.TargetDistancemetros). - O agente carrega em "Iniciar leitura"; a pessoa põe o dedo no sensor (com animação) durante
Config.ScanSecondssegundos. - O ecrã mostra a identificação:
| Dado | De onde vem |
|---|---|
| Foto | Perfil do drs_mdt |
| Nome, ID, data de nascimento, sexo, nacionalidade | Personagem (framework) |
| Impressão digital | metadata.fingerprint (no ESX é gerado um código fixo a partir do identificador) |
| Mandados ativos | drs_mdt |
| Está presa? | drs_prison |
| N.º de ocorrências e de multas | drs_mdt |
- "Abrir no MDT" fecha o terminal e abre o perfil da pessoa no
drs_mdt.
Se a pessoa ainda não tiver foto no MDT, é tirado o mugshot automático (Config.AutoMugshot).
#Terminais
Config.Terminals = {
{ label = 'Leitor biométrico — Mission Row', coords = vector3(460.97, -989.18, 24.92) },
{ label = 'Leitor biométrico — Paleto Bay', coords = vector3(-447.30, 6013.80, 31.72) },
}Podes pôr quantos quiseres (esquadras, prisão, tribunal). Com Config.Blip definido, aparecem no mapa.
#Opções principais
| Opção | Por defeito | Descrição |
|---|---|---|
Config.Locale | 'pt' | Idioma: pt ou en |
Config.Jobs | police = 0, sheriff = 0 | Empregos e cargo mínimo |
Config.RequireDuty | true | Só de serviço |
Config.UseDistance | 1.5 | Distância do agente ao terminal |
Config.TargetDistance | 2.5 | Distância da pessoa ao terminal |
Config.ScanSeconds | 3 | Duração da leitura |
Config.AutoMugshot | true | Mugshot automático se não houver foto |
Config.Blip | false | Blip no mapa |
Config.Webhook | '' | Webhook do Discord para as leituras |
#Configuração completa
Config = {}
-- Idioma / Language: 'pt' ou 'en'
Config.Locale = 'pt'
Config.Framework = 'auto'
Config.UseOxNotify = false
Config.StaffGroups = { 'god', 'admin', 'superadmin' }
Config.Debug = false
-- Quem usa o terminal: emprego = cargo mínimo / Who can use the terminal: job = minimum grade
Config.Jobs = { police = 0, sheriff = 0 }
Config.RequireDuty = true
-- ------------------------------------------------------------------ terminais / terminals
-- Leitores fixos nas esquadras / Fixed readers at the stations
Config.Terminals = {
{ label = 'Leitor biométrico — Mission Row', coords = vector3(460.97, -989.18, 24.92) },
{ label = 'Leitor biométrico — Paleto Bay', coords = vector3(-447.30, 6013.80, 31.72) },
}
Config.UseDistance = 1.5 -- agente → terminal / officer → terminal
-- A pessoa a identificar tem de estar junto ao terminal / The person to identify must be next to the terminal
Config.TargetDistance = 2.5
Config.ScanSeconds = 3 -- duração da leitura / scan time
Config.Marker = { type = 2, size = 0.3, color = { 59, 130, 246, 180 }, drawDistance = 10.0 }
Config.Blip = false -- { sprite = 480, color = 3, scale = 0.6 }
-- Tirar o mugshot automático (drs_mdt) se a pessoa ainda não tiver foto / Automatic mugshot (drs_mdt) when there is no photo
Config.AutoMugshot = true
-- Webhook do Discord para registar as leituras / Discord webhook to log scans
Config.Webhook = ''#Integrações (ficheiro aberto)
O server/editable.lua não é encriptado:
| Função | Para que serve |
|---|---|
Hooks.OnDuty | Saber se o agente está de serviço (usa o drs_policejob se existir) |
Hooks.Identity | Dados da pessoa: nome, data de nascimento, sexo, nacionalidade e impressão digital |
Hooks.Record | Dados extra: foto, mandados, ocorrências, multas (drs_mdt) e prisão (drs_prison) |
Hooks.Mugshot | Mugshot automático |
Se usas outro MDT, adapta o Hooks.Record para ir buscar os dados ao teu.
#Resolução de problemas
O marcador não aparece — precisas de um emprego de Config.Jobs e de estar de serviço.
"Não está ninguém junto ao leitor" — a pessoa tem de estar a menos de Config.TargetDistance metros do terminal (não do agente).
Não aparecem a foto nem os mandados — o drs_mdt tem de estar a correr e arrancar antes do drs_fingerprint.
A impressão digital aparece vazia — no QBCore/Qbox vem do metadata.fingerprint da personagem; personagens muito antigas podem não a ter.