DRS Speed Camera

v1.6.8 drs_speedcam
Ver na loja

Radares de velocidade fixos e móveis: quem passa acima do limite leva uma multa automática, com flash no ecrã. O dinheiro vai para a conta da polícia, a multa fica no perfil do cidadão no MDT e, nos excessos mais graves, a polícia recebe um alerta com a matrícula. Funciona com Qbox, QBCore e ESX.

#Requisitos

RecursoObrigatório
oxmysqlSim
Qbox, QBCore ou ESXSim (deteção automática)
drs_dispatchNão — alertas de excesso grave
drs_mdtNão — multas no perfil do cidadão

#Instalação

  1. Coloca drs_speedcam em resources.
  2. Adiciona ao server.cfg, depois do oxmysql e da framework:
server.cfg
ensure oxmysql
ensure qb-core
ensure drs_speedcam
  1. As tabelas são criadas sozinhas no arranque. As multas vão para drs_pd_fines (a mesma do drs_policejob e do drs_mdt) e o registo completo fica em drs_speedcam_log.
  2. Ajusta os radares em Config.Cameras e os escalões em Config.Brackets.

#Como funciona

  1. O carro passa dentro do raio de um radar acima do limite + Config.Tolerance.
  2. O servidor confirma o condutor, a distância ao radar e as isenções.
  3. O condutor vê um flash branco, ouve o som da câmara e recebe a multa do escalão certo.
  4. O dinheiro sai da conta Config.Account e vai para a conta da polícia (Config.Society, na proporção SocietyShare).
  5. Se o excesso passar um escalão com alert = true, a polícia recebe um alerta no drs_dispatch com a matrícula.

Cada radar só multa o mesmo condutor uma vez por minuto.

#Radares fixos

Vêm 8 radares nas autoestradas do mapa base. Cada um tem posição, raio de deteção e limite:

config.lua
Config.Cameras = {
    { label = 'Autoestrada — Davis', coords = vector3(-524.26, -1776.36, 21.34), radius = 25.0, limit = 90 },
    { label = 'Vinewood',            coords = vector3(980.99, 407.42, 92.24),    radius = 20.0, limit = 80 },
}

Dica

Para acrescentar um radar, vai ao sítio no jogo, copia as coordenadas (ex.: com um script de coords) e junta uma linha. Um raio de 20–25 metros apanha bem uma estrada de duas faixas.

Os radares fixos aparecem no mapa (Config.Blips.Enabled).

#Escalões de multa

over = quanto acima do limite, fine = valor, alert = true = avisa a polícia. A tolerância só decide se há multa: até limite + Config.Tolerance não acontece nada.

config.lua
Config.Brackets = {
    { over = 0,  fine = 150 },
    { over = 20, fine = 400 },
    { over = 40, fine = 900 },
    { over = 60, fine = 2000, alert = true },
}

Exemplo: num radar de 120 com tolerância 5, quem passa a 124 não é multado; quem passa a 150 vai 30 acima do limite → escalão over = 20 → multa de 400; quem passa a 185 vai 65 acima → multa de 2000 e alerta à polícia.

#Radar móvel

A polícia de serviço monta um tripé que funciona como um radar fixo durante Config.Mobile.Minutes minutos:

ComandoO que faz
/radarmovel 80Monta um radar à frente do agente, com limite 80
/radarmovel junto ao tripéRecolhe o radar
  • Só para os empregos e cargos de Config.Mobile.Jobs.
  • Opcionalmente precisa de um item (Config.Mobile.Item).
  • Cada agente pode ter até MaxPerOfficer radares montados.
  • Os radares móveis não aparecem no mapa.

#Isenções

  • Empregos de Config.ExemptJobs (polícia, INEM…), só quando estão de serviço.
  • Classes de veículo de Config.ExemptClasses (18 = emergência).

#Opções principais

OpçãoPor defeitoDescrição
Config.Locale'pt'Idioma: pt ou en
Config.Unit'kmh'kmh ou mph
Config.Tolerance5Margem antes de multar
Config.Account'bank'De onde sai o dinheiro
Config.AllowDebttruePode ficar com saldo negativo
Config.Society'police'Conta que recebe as multas (false = nenhuma)
Config.Blips.EnabledtrueRadares fixos no mapa
Config.FlashtrueFlash branco no ecrã
Config.Mobile.EnabledtrueRadar móvel
Config.Mobile.Minutes30Tempo até o radar móvel desmontar
Config.Webhook''Webhook do Discord

#Configuração completa

config.lua
Config = {}

-- Idioma / Language: 'pt' ou 'en'
Config.Locale = 'pt'
Config.Framework = 'auto'
Config.UseOxNotify = false
Config.StaffGroups = { 'god', 'admin', 'superadmin' }
Config.Debug = false
Config.Currency = '€'

Config.Unit = 'kmh'                 -- 'kmh' | 'mph'
Config.Tolerance = 5                -- margem antes de multar / margin before fining

-- ------------------------------------------------------------------ multas / fines
-- over = quanto acima do limite | fine = valor | alert = avisa a polícia (drs_dispatch)
-- over = how far above the limit | fine = amount | alert = warn the police (drs_dispatch)
Config.Brackets = {
    { over = 0,  fine = 150 },
    { over = 20, fine = 400 },
    { over = 40, fine = 900 },
    { over = 60, fine = 2000, alert = true },
}
Config.Account = 'bank'
Config.AllowDebt = true             -- fica negativo se não tiver saldo / may go negative
Config.Society = 'police'           -- conta que recebe as multas (false = nenhuma) / society that gets the money
Config.SocietyShare = 1.0

-- Isentos / Exempt
Config.ExemptJobs = { police = true, sheriff = true, ambulance = true }   -- só de serviço / only on duty
Config.ExemptClasses = { [18] = true }                                    -- 18 = emergência / emergency

-- Mostrar os radares no mapa / Show cameras on the map
Config.Blips = { Enabled = true, sprite = 184, color = 1, scale = 0.6 }
-- Flash branco no ecrã / White screen flash
Config.Flash = true

-- ------------------------------------------------------------------ radares fixos / fixed cameras
-- radius = distância a que o radar apanha o carro / detection radius
Config.Cameras = {
    { label = 'Autoestrada — Davis',        coords = vector3(-524.26, -1776.36, 21.34),  radius = 25.0, limit = 90 },
    { label = 'Autoestrada — Mirror Park',  coords = vector3(1584.93, -993.46, 59.39),   radius = 25.0, limit = 120 },
    { label = 'Autoestrada — Tataviam',     coords = vector3(2442.20, -134.60, 88.78),   radius = 25.0, limit = 120 },
    { label = 'Senora Fwy — Sandy Shores',  coords = vector3(2871.80, 3540.58, 53.09),   radius = 25.0, limit = 120 },
    { label = 'Senora Fwy — Grapeseed',     coords = vector3(2506.07, 4145.24, 38.11),   radius = 25.0, limit = 120 },
    { label = 'Vinewood Hills',             coords = vector3(1258.20, 789.42, 103.22),   radius = 20.0, limit = 80 },
    { label = 'Vinewood',                   coords = vector3(980.99, 407.42, 92.24),     radius = 20.0, limit = 80 },
    { label = 'Great Ocean Hwy — Chumash',  coords = vector3(-2627.62, 2855.14, 16.69),  radius = 25.0, limit = 100 },
}

-- ------------------------------------------------------------------ radar móvel / mobile camera
-- A polícia monta um radar portátil (tripé) que funciona como os fixos durante X minutos
-- Police set up a portable camera (tripod) that works like the fixed ones for X minutes
Config.Mobile = {
    Enabled = true,
    Command = 'radarmovel',         -- /radarmovel [limite] — de novo perto dele para o recolher / again next to it to pick it up
    Jobs = { police = 0, sheriff = 0 }, -- emprego = cargo mínimo / job = minimum grade
    Item = false,                   -- ex.: 'speedcamera' (false = não precisa) / item needed (false = none)
    Minutes = 30,
    MaxPerOfficer = 1,
    Radius = 30.0,
    Model = 'prop_tripod_01',       -- tripé / tripod
}

-- Webhook do Discord / Discord webhook
Config.Webhook = ''

#Integrações (ficheiro aberto)

O server/editable.lua não é encriptado:

FunçãoPara que serve
Hooks.OnDutySaber se o condutor está de serviço (isenção)
Hooks.ChargeCobrar a multa ao jogador
Hooks.SocietyAddPôr o dinheiro na conta da polícia
Hooks.RecordFineGuardar a multa (por defeito em drs_pd_fines, para o MDT)
Hooks.AlertAlerta à polícia (por defeito no drs_dispatch)

#Resolução de problemas

Não sou multado — confirma que és tu o condutor, que não estás num emprego isento de serviço nem num veículo de emergência, e que passaste acima de limite + tolerância. Cada radar só multa uma vez por minuto.

Multas a mais numa estrada paralela — reduz o radius desse radar.

O dinheiro não chega à polícia — confirma o nome da conta em Config.Society. Se usas outro sistema de contas, adapta o Hooks.SocietyAdd.

O /radarmovel não funciona — tens de ter o emprego e cargo de Config.Mobile.Jobs, estar de serviço e (se definido) ter o item de Config.Mobile.Item.