Portal SAMP
[Tutorial] O que é e como instalar o SAMPVOICE? (4.2) - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Guias e Tutoriais (https://portalsamp.com/forumdisplay.php?fid=7)
+--- Tópico: [Tutorial] O que é e como instalar o SAMPVOICE? (4.2) (/showthread.php?tid=4753)



O que é e como instalar o SAMPVOICE? (4.2) - BitSain - 06/05/2024

Guia Sobre o plugin SAMPVOICE

GUIA Criador por: BitSain
Última Atualização: 06/05/2024 às 14:57
Créditos ao criador no final do Guia.

INÍCIO DO GUIA
Nesse guia, eu irei explicar o que é e como instalar corretamente e sem nenhum problema o SAMPVOICE (v4.2) em seu servidor de GTA SAMP.
Bom, as informações que eu estou a passar é do documento oficial do sampvoice (sampvoice.chm -> arquivo HTML compilado).
Para consultar todas as informações referentes, abra o documento .chm do sampvoice (obs.: documento Russo, será necessário a tradução).

OBSERVAÇÃO: Este "GUIA" não está finalizado, irei complementando aos poucos pois as informações não são poucas, muita coisa foi alterada/adicionada/removida no plugin.


O que é SAMPVOICE?
SAMPVOICE - é um kit de desenvolvimento de software (SDK) para implementação de sistemas de comunicação de voz em servidores SA-MP 0.3.7.
Este não é apenas um chat de voz, é uma ferramenta para criá-lo!

Funcionalidade SAMPVOICE
- Verificando a versão do plugin do player
- Verificando se um jogador tem microfone
- Ativar/desativar a capacidade do player de ouvir outros players - Ativar/desativar a capacidade do player de ser ouvido por outros players
- Definir chaves de ativação de canal para o player Iniciar/parar a reprodução do canal com um comando do servidor Criar streams globais (som 2D)
- Criação de streams locais (áudio 3D)
- Vincule threads locais a objetos de jogo
- Definir vários parâmetros de fluxo (panorâmica, distância audibilidade, posição, etc.)
- Criação de efeitos sonoros (walkie-talkie, eco, etc.)


Como funciona o SAMPVOICE?
O plugin consiste em três módulos: cliente, servidor de controle e servidor de voz.
Cliente - este é um player com plugin, consumindo e produzindo tráfego de áudio.
Servidor de controle - este é um servidor que recebe comandos do mod do jogo e transmitindo-os servidor de voz (via serviço de comando) e clientes relevantes.
Servidor de voz - este é um servidor que distribui o que chega
tráfego de áudio, de acordo com o que o gerente lhe prescreveu
servidor (enviar de tal e tal player para tal e tal stream e
etc.).

[!] -> As informações a seguir, eu posso tentar dizer que é a funcionalidade "atrás da cortina"; Configuração entre duas Máquinas para aliviar o servidor de SAMP. <- [!]

O servidor de voz foi necessário para aliviar o servidor SAMP, que já tem bastante trabalho.
Antes de considerar a configuração a seguir, vale dizer desde já que, por padrão, configurações do gerenciador e servidores de voz são configurados para serem executados na mesma máquina. Então e se o gerente e servidores de voz estão rodando na mesma máquina, você não precisa criar uma configuração e não leia mais sobre essa configuração, pule essa explicação e se dirija para o Capítulo "Inserindo o SAMPVOICE no seu código".

Os endereços (uma combinação das opções '*_host' e '*_port') são divididos em dois tipos: interno e externo.

Endereço interno - endereço dentro da máquina, para o valor '*_host' estão disponíveis as interfaces de rede da máquina (valores de exemplo: 0.0.0.0 (funciona em todas as interfaces disponíveis), 127.0.0.1 (também conhecido como localhost), 192.168.0.2 (pode ter um endereço diferente) (interface direcionada para sua rede local),
234.13.24.1 (você pode ter um endereço diferente) (interface direcionada para a Internet global)).
O valor '*_port' varia de 0 a 65535 (aqueles que não estão ocupados).
Um valor 0 significa selecionar uma porta dinâmica aleatória (normalmente 49152 a 65535).

Endereço externo - o endereço a partir do qual a máquina está acessível a algum cliente que esteja prestes a contatá-la.
Este endereço varia de acordo com o cliente. Se o cliente estiver dentro da rede local, você estará disponível
em 192.168.0.2 (este é apenas um exemplo), e se estiver batendo na rede global, então você está disponível
no seu endereço IP global 241.34.24.1 (também condicional, seu endereço de Internet corresponde ao endereço
o roteador final do seu provedor de Internet, ele pode ser encontrado através de serviços como 2ip).

Agora que você conhece a teoria, vamos dar uma olhada nas opções de configuração do servidor de controle e voz.

Citar:Servidor de controle
[Endereço interno] control_host - o host ao qual o serviço de controle está vinculado antes de se conectar ao serviço de comando
[Endereço interno] control_port - porta à qual o serviço de controle está vinculado antes de se conectar ao serviço de comando
[Endereço externo] command_host - o host do serviço de comando sob o qual está disponível para o serviço de controle
[Endereço externo] command_port - porta de serviço de comando sob a qual é acessível ao serviço de controle
[Endereço externo] voice_host - o host do serviço de voz sob o qual está disponível para clientes (jogadores)
[Endereço externo] voice_port - porta de serviço de voz na qual está disponível para clientes (jogadores)

Servidor de voz
[Endereço externo] control_host - host do serviço de controle sob o qual é acessível ao serviço de comando
[Endereço externo] control_port - porta do serviço de controle sob a qual é acessível ao serviço de comando
[Endereço interno] command_host - o host ao qual o serviço de comando está vinculado [Endereço interno] command_port - a porta à qual o serviço de comando está vinculado [Endereço interno] voice_host - o host ao qual o serviço de voz está vinculado [Endereço interno] voice_port - a porta à qual o serviço de voz está vinculado

Vamos considerar o caso quando você possui várias máquinas. Digamos que você tenha 2 máquinas acessíveis pela Internet: A (234.13.24.1) e B (234.13.24.2).
Você deseja executar um servidor SAMP na primeira máquina com o plugin SampVoice (que atuará como um servidor de controle).
na segunda máquina, inicie o servidor de voz para aliviar o servidor SAMP. Então, as configurações do servidor devem ficar assim:

Citar:Servidor de controle
control_host = 0.0.0.0 (ligar a todas as interfaces de rede) control_port = 2020
command_host = 234.13.24.2 (especifique o endereço IP global do serviço de comando)
porta_comando = 2020
voice_host = 234.13.24.2 (especifique o endereço IP global do serviço de voz para que os jogadores possam enviar pacotes para ele)
porta_voz = 2020

Servidor de voz
control_host = 234.13.24.1 (especifique o endereço IP global do serviço de controle)
porta_controle = 2020
command_host = 0.0.0.0 (ligamos a todas as interfaces de rede, pois este é um serviço público)
porta_comando = 2020
voice_host = 0.0.0.0 (ligamos a todas as interfaces de rede, pois este é um serviço público)
porta_voz = 2020

Agora vejamos outro caso em que você tem várias máquinas e uma rede local.
Digamos que você tenha 2 máquinas acessíveis pela Internet: A (234.13.24.1) e B (234.13.24.2).
Neste caso, A e B estão conectados por cabo a uma rede local, onde A (192.168.0.1) e B (192.168.0.2).
qual é a vantagem desta abordagem? A comunicação entre os servidores de controle e de voz é realizada através de um canal físico fechado, ou seja, ninguém poderá se conectar ao servidor de voz, exceto o único um participante de uma rede local fechada - um servidor de controle. Mas isso é um exagero na maioria dos casos.

Você deseja executar um servidor SAMP com o plugin SampVoice na primeira máquina (que atuará como servidor de gerenciamento). E na segunda máquina, inicie um servidor de voz para que descarregue o servidor SAMP.
Então, as configurações do servidor devem ficar assim:

Citar:Servidor de controle
control_host = 192.168.0.1 (ligamos à interface de rede de uma rede local fechada)
porta_controle = 2020
command_host = 192.168.0.2 (especifique o endereço do serviço de comando dentro de uma rede local fechada)
porta_comando = 2020
voice_host = 234.13.24.2 (especifique o endereço IP global do serviço de voz para que os jogadores possam enviar pacotes para ele)
porta_voz = 2020

Servidor de voz
control_host = 192.168.0.1 (especifique o endereço do serviço de controle dentro de uma rede local fechada)
porta_controle = 2020
command_host = 192.168.0.2 (ligamos à interface de rede de uma rede local fechada)
porta_comando = 2020
voice_host = 0.0.0.0 (ligamos a todas as interfaces de rede, pois este é um serviço público)
porta_voz = 2020

• Inserindo o SAMPVOICE no seu Código:

Código Base:
Código:
#include <sampvoice>

#define GLOBAL_CHANNEL 0
#define LOCAL_CHANNEL 1

new SV_UINT:gstream = SV_NONE;
new SV_UINT:lstream[MAX_PLAYERS] = { SV_NONE, ... };

public OnPlayerConnect(playerid) {
    if (SvGetVersion(playerid) == 0) { // Verificando a disponibilidade do plugin
        SendClientMessage(playerid, -1, "Falha ao encontrar o plugin.");
    }
    else if (SvHasMicro(playerid) == SV_FALSE) { // Verificando a disponibilidade do microfone
        SendClientMessage(playerid, -1, "Falha ao encontrar o microfone.");
    }
    else {
        if(gstream != SV_NONE) {
            SvSetKey(playerid, 0x5A, GLOBAL_CHANNEL); // Z key
            SvAttachStream(playerid, gstream, GLOBAL_CHANNEL);
            SvAttachListener(gstream, playerid);
            SvSetIcon(gstream, "speaker");
            SendClientMessage(playerid, -1, "Pressione Z para falar no chat global.");
        }
        if((lstream[playerid] = SvCreateStream(40.0)) != SV_NONE) {
            SvSetKey(playerid, 0x42, LOCAL_CHANNEL); // B key
            SvAttachStream(playerid, lstream[playerid], LOCAL_CHANNEL);
            SvSetTarget(lstream[playerid], SvMakePlayer(playerid));
            SvSetIcon(lstream[playerid], "speaker");
            SendClientMessage(playerid, -1, "Pressione B para falar no chat local.");
        }
    }
}

public OnPlayerDisconnect(playerid, reason) {
    // Removendo o stream local do player após desconectar
    if(lstream[playerid] != SV_NONE) {
        SvDeleteStream(lstream[playerid]);
        lstream[playerid] = SV_NONE;
    }
}

public OnGameModeInit() {
    // Remova o comentário da linha para ativar o modo de depuração
    // SvEnableDebug();
    gstream = SvCreateStream();
}
public OnGameModeExit() {
    if(gstream != SV_NONE){
        SvDeleteStream(gstream);
        gstream = SV_NONE;
    }
}

Já observado, você percebe a ausência de 2 funções -> 'OnPlayerActivationKeyPress' e 'OnPlayerActivationKeyRelease'.
Sim, elas foram removidas.

Aqui está todas as funções nativas do SAMPVOICE atualmente (4.2):
Código PHP:
// [Functions] Debug
// ------------------------------------------------------------

native SV_VOID:SvEnableDebug();
native SV_VOID:SvDisableDebug();
native SV_BOOL:SvCheckDebug();

// [Functions] Player
// ------------------------------------------------------------

native SV_UINT:SvGetVersion(SV_UINT:player);
native SV_BOOL:SvHasMicro(SV_UINT:player);

native SV_BOOL:SvEnableListener(SV_UINT:player);
native SV_BOOL:SvDisableListener(SV_UINT:player);
native SV_BOOL:SvCheckListener(SV_UINT:player);

native SV_BOOL:SvEnableSpeaker(SV_UINT:playerSV_UINT:/*channels*/...);
native SV_BOOL:SvDisableSpeaker(SV_UINT:playerSV_UINT:/*channels*/...);
native SV_BOOL:SvCheckSpeaker(SV_UINT:playerSV_UINT:/*channels*/...);

native SV_BOOL:SvAttachStream(SV_UINT:playerSV_UINT:streamSV_UINT:/*channels*/...);
native SV_BOOL:SvDetachStream(SV_UINT:playerSV_UINT:streamSV_UINT:/*channels*/...);
native SV_BOOL:SvHasStream(SV_UINT:playerSV_UINT:streamSV_UINT:/*channels*/...);

native SV_BOOL:SvSetKey(SV_UINT:playerSV_UINT:keySV_UINT:/*channels*/...);
native SV_UINT:SvGetKey(SV_UINT:playerSV_UINT:channel);

native SV_BOOL:SvPlay(SV_UINT:playerSV_UINT:/*channels*/...);
native SV_BOOL:SvStop(SV_UINT:playerSV_UINT:/*channels*/...);

// [Functions] Stream
// ------------------------------------------------------------

native SV_UINT:SvCreateStream(SV_FLOAT:distance 0.0);

native SV_BOOL:SvEnableTransiter(SV_UINT:stream);
native SV_BOOL:SvDisableTransiter(SV_UINT:stream);
native SV_BOOL:SvCheckTransiter(SV_UINT:stream);

native SV_BOOL:SvAttachListener(SV_UINT:streamSV_UINT:player);
native SV_BOOL:SvDetachListener(SV_UINT:streamSV_UINT:player);
native SV_BOOL:SvHasListener(SV_UINT:streamSV_UINT:player);

native SV_VOID:SvSetVolume(SV_UINT:streamSV_FLOAT:volume);
native SV_VOID:SvSetPanning(SV_UINT:streamSV_FLOAT:panning);
native SV_VOID:SvSetDistance(SV_UINT:streamSV_FLOAT:distance);
native SV_VOID:SvSetPosition(SV_UINT:streamSV_FLOAT:xSV_FLOAT:ySV_FLOAT:z);
native SV_VOID:SvSetTarget(SV_UINT:streamSV_UINT:target);
native SV_VOID:SvSetEffect(SV_UINT:streamSV_UINT:effect);
native SV_VOID:SvSetIcon(SV_UINT:stream, const SV_STR:icon[]);

native SV_VOID:SvDeleteStream(SV_UINT:stream);

// [Functions] Effect
// ------------------------------------------------------------

native SV_UINT:SvCreateEffect();

native SV_BOOL:SvAppendFilter(SV_UINT:effectSV_FILTER:filterSV_INT:prioritySV_ANY:/*parameters*/...);
native SV_VOID:SvRemoveFilter(SV_UINT:effectSV_FILTER:filterSV_INT:priority);

native SV_VOID:SvDeleteEffect(SV_UINT:effect); 


//Fim do GUIA

• Créditos e Links do Projeto:
Link do Projeto: SAMPVOICE - GitHub
Criador: CyberMor


RE: O que é e como instalar o SAMPVOICE? (4.2) - pushline - 06/05/2024

Muito bom mano! Parabéns.