DRS GPS

v2.1.1 drs_gps
Ver na loja

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

RecursoObrigatório
Qbox, QBCore, ESX ou nenhumSim (deteção automática; 'none' funciona sem framework)
Inventário com o item gpsNão — com Config.Item = false usa-se só o comando
drs_policejobNão — indicativos nos blips e entrada automática pelo serviço

#Instalação

  1. Coloca drs_gps em resources.
  2. Adiciona ao server.cfg, depois da framework e do inventário:
server.cfg
ensure qb-core
ensure drs_gps
  1. Cria o item gps (ver abaixo) e copia install/images/gps.png para o teu inventário — ou põe Config.Item = false para usar só o comando.
  2. Ajusta os canais reservados, a entrada automática e as cores no config.lua.

#Item

QBCore — dentro de qb-core/shared/items.lua:

items_qb-core.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):

items_ox_inventory.lua
-- 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:

items_esx.sql
-- 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

  1. Usa o item gps ou escreve /gps.
  2. 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).
  3. Carrega em Ligar. A partir daí vês a equipa no mapa do jogo e no ecrã do GPS.
  4. 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
ÍconeDepende do veículo: a pé, carro, mota, helicóptero, avião ou barco (Config.Sprites)
CorPela cor do emprego (Config.JobColors)
DireçãoO blip roda com o colega
SireneCom a sirene ligada, o blip pisca (e o nome fica a vermelho no ecrã)
NomeCom 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.lua
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.lua
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çãoPor defeitoDescriçã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.MaxChannel999Canal mais alto
Config.RequireDutytrueServiço obrigatório nos canais reservados
Config.Interval1500Milissegundos entre atualizações
Config.SOS.enabledtrueBotão SOS
Config.SpeedUnit'kmh'kmh ou mph
Config.Webhook''Webhook do Discord para o SOS

#Configuração completa

config.lua
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

server
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.