Voz
Estas funções controlam o roteamento do chat de voz: quem consegue ouvir quem, e por onde. Elas não ligam nem desligam o microfone de ninguém — apenas decidem para onde o áudio de cada jogador é encaminhado, pelas duas listas por jogador abaixo ou por um canal de voz.
Estas 12 funções existem somente no servidor. Chamá-las de um script de cliente resulta em erro de valor nulo.
Veja também as funções compartilhadas de Voz, que funcionam nos dois lados.
Como funcionam os canais de voz
Seção intitulada “Como funcionam os canais de voz”Voz por proximidade e voz por canal são dois caminhos separados, e um jogador pode estar nos dois ao mesmo tempo.
A proximidade é o padrão. O áudio é posicional: vem de onde quem fala está e some ao chegar em getVoiceMaxDistance.
Um canal leva o mesmo áudio a todos os seus membros, onde quer que estejam. Ele toca plano — sem direção, sem queda por distância — no volume que cada ouvinte definiu para aquele canal.
A divisão de responsabilidade é proposital:
| Lado | Decide |
|---|---|
| Servidor | Quais canais existem e quem está em cada um. |
| Cliente | Para quais dos seus próprios canais ele está falando agora, e o volume com que ouve cada um. |
O cliente anuncia para onde quer transmitir; o servidor confere esse anúncio contra a própria tabela de participação e descarta o conjunto inteiro se um único canal não conferir. Ou seja: não dá para falar num canal em que o jogador nunca foi colocado, diga o cliente o que disser.
Um jogador pode transmitir para até 8 canais ao mesmo tempo. Abrir um canal já deixa o microfone aberto por conta própria — o setVoiceTransmitting então só decide se esse mesmo áudio também sai por proximidade.
-- servidor: um canal de rádio em que só policiais podem falaraddEventHandler("onResourceStart", resourceRoot, function() createVoiceChannel("policia")end)
function darRadio(oJogador) addPlayerToVoiceChannel(getVoiceChannel("policia"), oJogador)end-- cliente: segure R para falar no rádio, independente do microfone de proximidadebindKey("r", "both", function(key, state) local policia = getVoiceChannel("policia") if policia then setVoiceChannelTransmitting(policia, state == "down") endend)O servidor avisa quando um jogador de fato começa e para de enviar para um canal, com onPlayerVoiceChannelStart e onPlayerVoiceChannelStop.
O roteamento por canal é aplicado em cima das duas listas de transmissão, nunca no lugar delas.
Como as duas listas se combinam
Seção intitulada “Como as duas listas se combinam”As listas são independentes e ficam em pontas diferentes da conversa: setPlayerVoiceBroadcastTo é definida em quem fala, e setPlayerVoiceIgnoreFrom em quem ouve. O áudio só passa quando os dois lados permitem — quem fala precisa ter o ouvinte na lista de destino (ou não ter lista nenhuma), e o ouvinte não pode ter quem fala na lista de ignorados.
As listas de um jogador são descartadas quando ele sai do servidor.