DRS Radio List
Lista da rádio para o pma-voice: mostra no ecrã quem está na tua frequência e quem está a falar, em tempo real. Cada canal tem nome e cor, os canais podem ser só para certos empregos e cada jogador pode escolher o nome que aparece. Os dados vêm do servidor. Funciona com Qbox, QBCore, ESX ou sem framework.
#Requisitos
| Recurso | Obrigatório |
|---|---|
pma-voice | Sim |
| Qbox, QBCore, ESX ou nenhum | Sim (deteção automática) |
drs_radio ou outro rádio para o pma-voice | Sim — para entrar nas frequências |
ox_lib | Não — só para as notificações do ox |
#Instalação
- Desliga outra lista da rádio, se tiveres.
- Coloca
drs_radiolistemresources. - Adiciona ao
server.cfg, depois dopma-voicee da framework:
ensure pma-voice
ensure qb-core
ensure drs_radio
ensure drs_radiolist- Configura os canais em
Config.Channels.
#Comandos
| Comando | O que faz |
|---|---|
/radiolista | Mostra ou esconde a lista |
/radiolistamover | Ativa o modo de arrastar: move a lista para onde quiseres (a posição fica guardada) |
/radionome [nome] | Escolhe o nome que aparece na rádio |
/radionome (sem nome) | Volta ao nome da personagem |
Os nomes dos comandos estão em Config.ToggleCommand, Config.MoveCommand e Config.CustomNameCommand.
#A lista
- Quem está na tua frequência, com o ID do servidor e o indicativo (QBCore/Qbox:
metadata.callsign). - Quem está a falar fica destacado e sobe para o topo.
- O cabeçalho mostra o nome e a cor do canal.
- Até
Config.MaxVisiblenomes; o resto aparece como "+N". - Posição inicial em
Config.Position; cada jogador pode arrastá-la com/radiolistamover.
#Nomes
Config.NameSource:'rp'(nome da personagem) ou'fivem'(nome do FiveM).Config.NameFormat:'short'→ C Silva ·'full'→ Carlos Silva ·'first'→ Carlos.- Com
Config.CustomNames, cada jogador escolhe o nome com/radionome(filtrado, atéCustomNameMaxLengthcaracteres). ComKeepCustomName, fica guardado entre sessões.
#Canais
Config.Channels = {
[1] = { label = 'Polícia', color = '#3b82f6', jobs = { 'police', 'sheriff' }, lock = true },
[3] = { label = 'INEM', color = '#ef4444', jobs = { 'ambulance' }, lock = true },
[5] = { label = 'Mecânicos', color = '#a3e635', jobs = { 'mechanic' }, lock = false },
}| Campo | O que faz |
|---|---|
label | Nome do canal na lista |
color | Cor do canal |
jobs | Canal privado: só quem tem um destes empregos vê a lista (vazio = todos veem) |
lock = true | Canal bloqueado: só estes empregos conseguem entrar (usa o addChannelCheck do pma-voice) |
duty = true | Tem de estar de serviço (QBCore/Qbox) |
Quem perde o emprego é tirado da frequência bloqueada. Os canais que não estão na lista aparecem como Config.UnlistedLabel (ex.: "Frequência 42") se Config.ShowUnlistedChannels = true.
Dica
Se usas o DRS Radio, as frequências reservadas já são protegidas por ele. Aqui basta dar nome e cor aos canais; o lock é útil sobretudo se usas outro rádio.
Com Config.StaffBypass = true, o staff (ACE drs.radiolist ou grupo de Config.StaffGroups) vê a lista de qualquer canal em que esteja.
#Opções principais
| Opção | Por defeito | Descrição |
|---|---|---|
Config.Locale | 'pt' | Idioma: pt ou en |
Config.NameSource | 'rp' | rp (personagem) ou fivem |
Config.NameFormat | 'short' | short, full ou first |
Config.ShowServerId | true | ID do servidor ao lado do nome |
Config.ShowCallsign | true | Indicativo antes do nome |
Config.CustomNames | true | /radionome |
Config.Position | 'right-center' | Posição inicial da lista |
Config.MaxVisible | 14 | Nomes visíveis |
Config.ShowUnlistedChannels | true | Mostra canais sem configuração |
Config.StaffBypass | true | Staff vê qualquer canal |
#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'
-- ------------------------------------------------------------------ nomes / names
-- Nome mostrado na lista: 'rp' (nome da personagem) ou 'fivem' (nome do FiveM)
-- Name shown on the list: 'rp' (character name) or 'fivem' (FiveM name)
Config.NameSource = 'rp'
-- Formato do nome da personagem / Character name format
-- 'short' → C Silva · 'full' → Carlos Silva · 'first' → Carlos
Config.NameFormat = 'short'
-- Mostrar o ID do servidor ao lado do nome / Show the server ID next to the name
Config.ShowServerId = true
-- Mostrar o callsign (QBCore/Qbox: metadata.callsign) antes do nome / Show the callsign before the name
Config.ShowCallsign = true
-- Deixar os jogadores escolherem o nome que aparece na rádio / Let players pick the name shown on the radio
Config.CustomNames = true
Config.CustomNameCommand = 'radionome'
Config.CustomNameMaxLength = 24
-- Guardar o nome personalizado entre sessões (KVP no servidor) / Keep the custom name between sessions
Config.KeepCustomName = true
-- ------------------------------------------------------------------ comandos / commands
Config.ToggleCommand = 'radiolista' -- mostrar/esconder a lista / show/hide the list
Config.MoveCommand = 'radiolistamover' -- arrastar a lista para outro sítio / drag the list somewhere else
-- Posição inicial: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'right-center' | 'left-center' (centro: cresce para cima e para baixo)
-- Initial position (each player can drag it and the position is saved)
Config.Position = 'right-center'
-- Número máximo de nomes visíveis (o resto aparece como "+N") / Max names shown (the rest shows as "+N")
Config.MaxVisible = 14
-- ------------------------------------------------------------------ canais / channels
-- label: nome do canal; color: cor do canal na lista
-- jobs: só quem tem um destes empregos vê a lista deste canal (vazio = todos veem)
-- lock: se true, só quem tem um destes empregos consegue ENTRAR no canal (usa o addChannelCheck do pma-voice)
-- duty: se true, é preciso estar em serviço (QBCore/Qbox)
-- label: channel name; color: channel colour on the list
-- jobs: only players with one of these jobs see this channel's list (empty = everyone sees it)
-- lock: if true, only those jobs can JOIN the channel (uses pma-voice's addChannelCheck)
-- duty: if true, the player must be on duty (QBCore/Qbox)
Config.Channels = {
[1] = { label = 'Polícia', color = '#3b82f6', jobs = { 'police', 'sheriff' }, lock = true, duty = false },
[2] = { label = 'Polícia 2', color = '#60a5fa', jobs = { 'police', 'sheriff' }, lock = true, duty = false },
[3] = { label = 'INEM', color = '#ef4444', jobs = { 'ambulance' }, lock = true, duty = false },
[4] = { label = 'Emergência', color = '#f59e0b', jobs = { 'police', 'sheriff', 'ambulance' }, lock = true },
[5] = { label = 'Mecânicos', color = '#a3e635', jobs = { 'mechanic' }, lock = false },
}
-- Canais sem configuração: mostrar a lista a quem lá está? / Channels with no config: show the list to members?
Config.ShowUnlistedChannels = true
-- Nome dos canais sem configuração ('%s' = número) / Name of unlisted channels ('%s' = number)
Config.UnlistedLabel = 'Frequência %s'
-- Staff pode ver a lista de qualquer canal em que esteja (ACE drs.radiolist ou grupo admin)
-- Staff can see the list of any channel they are in (ACE drs.radiolist or admin group)
Config.StaffBypass = true
Config.StaffGroups = { 'god', 'admin', 'superadmin' }
-- Notificações com ox_lib quando estiver a correr / Use ox_lib notifications when it is running
Config.UseOxNotify = false#Para programadores
exports.drs_radiolist:GetChannelMembers(1) -- { { id, name }, ... }
exports.drs_radiolist:GetPlayerChannel(src) -- frequência atual (0 = nenhuma)
exports.drs_radiolist:GetRadioName(src) -- nome que aparece na rádioO chat do DRS Radio usa o GetRadioName, por isso os nomes são os mesmos na lista e no chat.
#Segurança
Os dados da lista vêm do servidor, a partir do estado que o próprio pma-voice escreve. Um cliente não consegue ver a lista de canais em que não está nem de canais privados de outros empregos.
#Resolução de problemas
A lista não aparece — só aparece quando estás numa frequência. Confirma que não a escondeste com /radiolista e que o canal não é privado de outro emprego.
Ninguém fica destacado a falar — o pma-voice tem de estar a correr e arrancar antes do drs_radiolist.
A lista ficou fora do ecrã — usa /radiolistamover e arrasta-a de volta.
Os nomes aparecem como o nome do FiveM — põe Config.NameSource = 'rp'. Sem framework ('none'), é sempre usado o nome do FiveM.