DRS GPS
GPS de equipa: liga-te a um canal e vê todos os colegas no mapa do jogo e no ecrã do próprio GPS, com o mapa real da cidade. Cada colega aparece com o ícone do veículo (a pé, carro, mota, helicóptero, avião ou barco), a direção, a cor do emprego e o blip a piscar quando tem a sirene ligada. Tem canais reservados a empregos, botão SOS e entrada automática ao entrar de serviço. Funciona com Qbox, QBCore, ESX ou sem framework.
#Requisitos
| Recurso | Obrigatório |
|---|---|
| Qbox, QBCore, ESX ou nenhum | Sim (deteção automática; 'none' funciona sem framework) |
Inventário com o item gps | Não — com Config.Item = false usa-se só o comando |
drs_policejob | Não — indicativos nos blips e entrada automática pelo serviço |
#Instalação
- Coloca
drs_gpsemresources. - Adiciona ao
server.cfg, depois da framework e do inventário:
ensure qb-core
ensure drs_gps- Cria o item
gps(ver abaixo) e copiainstall/images/gps.pngpara o teu inventário — ou põeConfig.Item = falsepara usar só o comando. - Ajusta os canais reservados, a entrada automática e as cores no
config.lua.
#Item
QBCore — dentro de qb-core/shared/items.lua:
-- drs_gps: cola dentro de qb-core/shared/items.lua (Qbox: ox_inventory/data/items.lua, ver o outro ficheiro)
-- Imagens: copia install/images/*.png para qb-inventory/html/images/
gps = { name = 'gps', label = 'GPS', weight = 500, type = 'item', image = 'gps.png', unique = false, useable = true, shouldClose = true, combinable = nil, description = 'GPS de equipa: liga-te a um canal e vê a tua equipa no mapa' },ox_inventory / Qbox — dentro de ox_inventory/data/items.lua (repara no server.export, que abre o GPS ao usar o item):
-- drs_gps: cola dentro de ox_inventory/data/items.lua
-- Imagens: copia install/images/*.png para ox_inventory/web/images/
['gps'] = { label = 'GPS', weight = 500, stack = true, close = true, description = 'GPS de equipa: liga-te a um canal e vê a tua equipa no mapa', client = { image = 'gps.png' }, server = { export = 'drs_gps.use' } },ESX — importa na base de dados:
-- drs_gps: executa na base de dados (ESX com a tabela items)
INSERT IGNORE INTO `items` (`name`, `label`, `weight`, `rare`, `can_remove`) VALUES ('gps', 'GPS', 1, 0, 1);#Como usar
- Usa o item
gpsou escreve/gps. - No aparelho, escreve o número do canal (1 a
Config.MaxChannel) no teclado ou carrega num canal rápido (Polícia, INEM, Emergência). - Carrega em Ligar. A partir daí vês a equipa no mapa do jogo e no ecrã do GPS.
- Para sair, carrega em Desligar.
Quem deixa de ter o item é desligado sozinho (menos na entrada automática sem item).
#O aparelho
- Ecrã de GPS de carro com o mapa real do GTA, com a tua seta a rodar para onde vais.
- Zoom +/– e botão para voltar a centrar.
- Velocidade (
Config.SpeedUnit) e a rua onde estás. - Painel da equipa com nome, distância e veículo de cada um. Clica num colega para marcar o GPS até ele.
#Blips da equipa
| O quê | Como aparece |
|---|---|
| Ícone | Depende do veículo: a pé, carro, mota, helicóptero, avião ou barco (Config.Sprites) |
| Cor | Pela cor do emprego (Config.JobColors) |
| Direção | O blip roda com o colega |
| Sirene | Com a sirene ligada, o blip pisca (e o nome fica a vermelho no ecrã) |
| Nome | Com o drs_policejob, mostra o indicativo (/callsign) |
As posições são atualizadas a cada Config.Interval milissegundos.
#Canais reservados
Alguns canais são só para certos empregos. Quem não tem o emprego não entra e, com Config.RequireDuty = true, também tem de estar de serviço:
Config.Restricted = {
{ from = 1, to = 10, jobs = { 'police', 'sheriff' }, label = 'Polícia' },
{ from = 11, to = 15, jobs = { 'ambulance' }, label = 'INEM' },
{ from = 16, to = 20, jobs = { 'police', 'sheriff', 'ambulance' }, label = 'Emergência' },
}Os canais que não estão nesta lista são livres para todos.
#Entrada automática
Ao entrar de serviço, o jogador liga-se sozinho a um canal (e desliga-se ao sair):
Config.AutoJoin = { police = 1, sheriff = 1, ambulance = 11 }
Config.AutoJoinNeedsItem = false -- true = só entra se tiver o item#SOS
Mantém o botão SOS carregado holdSeconds segundos (1,5 s por defeito, para não haver alarmes sem querer). Todos no canal recebem um blip a piscar com a rota até ti, durante seconds segundos. Há um tempo de espera entre SOS (cooldown) e o SOS pode ir para um webhook do Discord.
#Opções principais
| Opção | Por defeito | Descrição |
|---|---|---|
Config.Locale | 'pt' | Idioma: pt ou en |
Config.Framework | 'auto' | auto, qbx, qb, esx ou none |
Config.Item | 'gps' | Item que abre o GPS (false = só comando) |
Config.Command | 'gps' | Comando (false = só item) |
Config.MaxChannel | 999 | Canal mais alto |
Config.RequireDuty | true | Serviço obrigatório nos canais reservados |
Config.Interval | 1500 | Milissegundos entre atualizações |
Config.SOS.enabled | true | Botão SOS |
Config.SpeedUnit | 'kmh' | kmh ou mph |
Config.Webhook | '' | Webhook do Discord para o SOS |
#Configuração completa
Config = {}
-- Idioma / Language: 'pt' ou 'en'
Config.Locale = 'pt'
-- Framework: 'auto' deteta Qbox/QBCore/ESX (ou 'qbx' | 'qb' | 'esx' | 'none')
Config.Framework = 'auto'
Config.UseOxNotify = false
-- Item do GPS (false = só com o comando) / GPS item (false = command only)
Config.Item = 'gps'
-- Comando que abre o GPS (false = só com o item) / Command that opens the GPS (false = item only)
Config.Command = 'gps'
-- Canais de 1 a MaxChannel / Channels 1 to MaxChannel
Config.MaxChannel = 999
-- Canais reservados a empregos (quem não tem o emprego não entra)
-- Channels reserved for jobs (players without the job cannot join)
Config.Restricted = {
{ from = 1, to = 10, jobs = { 'police', 'sheriff' }, label = 'Polícia' },
{ from = 11, to = 15, jobs = { 'ambulance' }, label = 'INEM' },
{ from = 16, to = 20, jobs = { 'police', 'sheriff', 'ambulance' }, label = 'Emergência' },
}
-- Nos canais reservados é preciso estar de serviço? / On-duty required for reserved channels?
Config.RequireDuty = true
-- Entrar sozinho num canal ao entrar de serviço (e sair ao sair) / Auto-join a channel on duty (and leave off duty)
Config.AutoJoin = { police = 1, sheriff = 1, ambulance = 11 }
-- A entrada automática também precisa do item? / Does auto-join also need the item?
Config.AutoJoinNeedsItem = false
-- De quanto em quanto tempo as posições são enviadas (ms) / How often positions are sent (ms)
Config.Interval = 1500
-- Cor do blip por emprego (cores do GTA) / Blip colour per job (GTA colours)
Config.JobColors = { police = 38, sheriff = 25, ambulance = 1 }
Config.DefaultColor = 0
-- Ícones por tipo / Sprites per type
Config.Sprites = { foot = 1, automobile = 56, bike = 226, heli = 43, plane = 423, boat = 427 }
Config.BlipScale = 0.85
-- Botão SOS: blip a piscar para o canal / SOS button: flashing blip for the channel
-- holdSeconds = tempo a carregar no botão para disparar (evita toques sem querer) / hold time to fire
Config.SOS = { enabled = true, seconds = 60, cooldown = 30, holdSeconds = 1.5 }
-- Webhook do Discord para o SOS / Discord webhook for SOS
Config.Webhook = ''
-- Mapa do ecrã (mosaicos do mapa do GTA; {style} = game | render | print) / Screen map (GTA map tiles)
Config.MapTiles = 'https://s.rsg.sc/sc/images/games/GTAV/map/print/{z}/{x}/{y}.jpg'
-- Velocidade no ecrã / Speed on screen: 'kmh' | 'mph'
Config.SpeedUnit = 'kmh'#Para programadores
exports.drs_gps:Join(src, channel) -- liga um jogador a um canal
exports.drs_gps:Leave(src) -- desliga
exports.drs_gps:GetChannel(src) -- canal atual (ou nil)#Segurança
As posições da equipa são enviadas pelo servidor, por isso um cliente modificado não consegue mentir sobre onde estão os outros. Os canais reservados e o item são verificados no servidor.
#Resolução de problemas
Não consigo entrar no canal — é um canal reservado: precisas do emprego certo e de estar de serviço (Config.RequireDuty).
Usar o item não faz nada (ox_inventory) — confirma que o item tem server = { export = 'drs_gps.use' }, como no bloco acima.
O mapa do ecrã aparece cinzento — os mosaicos vêm de Config.MapTiles. Se o endereço deixar de funcionar, muda o estilo (game, render ou print) no URL.
Fui desligado sozinho — deixaste de ter o item gps no inventário.