Pular para o conteúdo

Voz

Servidor

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.

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:

LadoDecide
ServidorQuais canais existem e quem está em cada um.
ClientePara 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 falar
addEventHandler("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 proximidade
bindKey("r", "both", function(key, state)
local policia = getVoiceChannel("policia")
if policia then
setVoiceChannelTransmitting(policia, state == "down")
end
end)

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.

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.