18/05/2022 21:35
(13/11/2020 14:12)Nexus Escreveu: Estou tentando adicionar sampvoice ao meu servidor. Depois de fazer algumas mudanças no código original, compilei e não recebi nenhum erro, mas quando tento utilizar o plugin no servidor, o microfone é acionado, mas o nome do jogador no canto esquerdo da tela e o microfone acima do personagem não aparecem e nenhum som é reproduzido.Alguém encontrou uma solução? aparentemente tudo funciona, mas ocorre o mesmo(não sai som e nem aparece o nome verde de quem está falando)
Gostaria de saber se cometi algum erro nas modificações que fiz.
Código original:
Código:#include <sampvoice>
new SV_GSTREAM:gstream = SV_NULL;
new SV_LSTREAM:lstream[MAX_PLAYERS] = { SV_NULL, ... };
/*
The public OnPlayerActivationKeyPress and OnPlayerActivationKeyRelease
are needed in order to redirect the player's audio traffic to the
corresponding streams when the corresponding keys are pressed.
*/
public SV_VOID:OnPlayerActivationKeyPress(SV_UINT:playerid, SV_UINT:keyid)
{
// Attach player to local stream as speaker if 'B' key is pressed
if (keyid == 0x42 && lstream[playerid]) SvAttachSpeakerToStream(lstream[playerid], playerid);
// Attach the player to the global stream as a speaker if the 'Z' key is pressed
if (keyid == 0x5A && gstream) SvAttachSpeakerToStream(gstream, playerid);
}
public SV_VOID:OnPlayerActivationKeyRelease(SV_UINT:playerid, SV_UINT:keyid)
{
// Detach the player from the local stream if the 'B' key is released
if (keyid == 0x42 && lstream[playerid]) SvDetachSpeakerFromStream(lstream[playerid], playerid);
// Detach the player from the global stream if the 'Z' key is released
if (keyid == 0x5A && gstream) SvDetachSpeakerFromStream(gstream, playerid);
}
public OnPlayerConnect(playerid)
{
// Checking for plugin availability
if (SvGetVersion(playerid) == SV_NULL)
{
SendClientMessage(playerid, -1, "Could not find plugin sampvoice.");
}
// Checking for a microphone
else if (SvHasMicro(playerid) == SV_FALSE)
{
SendClientMessage(playerid, -1, "The microphone could not be found.");
}
// Create a local stream with an audibility distance of 40.0, an unlimited number of listeners
// and the name 'Local' (the name 'Local' will be displayed in red in the players' speakerlist)
else if (lstream[playerid] = SvCreateDLStreamAtPlayer(40.0, SV_INFINITY, playerid, 0xff0000ff, "Local"))
{
SendClientMessage(playerid, -1, "Press Z to talk to global chat and B to talk to local chat.");
// Attach the player to the global stream as a listener
if (gstream) SvAttachListenerToStream(gstream, playerid);
// Assign microphone activation keys to the player
SvAddKey(playerid, 0x42);
SvAddKey(playerid, 0x5A);
}
}
public OnPlayerDisconnect(playerid, reason)
{
// Removing the player's local stream after disconnecting
if (lstream[playerid])
{
SvDeleteStream(lstream[playerid]);
lstream[playerid] = SV_NULL;
}
}
public OnGameModeInit()
{
// Uncomment the line to enable debug mode
// SvDebug(SV_TRUE);
gstream = SvCreateGStream(0xffff0000, "Global");
}
public OnGameModeExit()
{
if (gstream) SvDeleteStream(gstream);
}
Exemplo do código modificado:
Código:#include <sampvoice>
new SV_LSTREAM:lstream[MAX_PLAYERS] = { SV_NULL, ... };
/*
The public OnPlayerActivationKeyPress and OnPlayerActivationKeyRelease
are needed in order to redirect the player's audio traffic to the
corresponding streams when the corresponding keys are pressed.
*/
public SV_VOID:OnPlayerActivationKeyPress(SV_UINT:playerid, SV_UINT:keyid)
{
// Attach player to local stream as speaker if 'B' key is pressed
if (keyid == 0x42 && lstream[playerid]) SvAttachSpeakerToStream(lstream[playerid], playerid);
}
public SV_VOID:OnPlayerActivationKeyRelease(SV_UINT:playerid, SV_UINT:keyid)
{
// Detach the player from the local stream if the 'B' key is released
if (keyid == 0x42 && lstream[playerid]) SvDetachSpeakerFromStream(lstream[playerid], playerid);
}
public OnPlayerSpawn(playerid)
{
// Checking for plugin availability
if (SvGetVersion(playerid) == SV_NULL)
{
SendClientMessage(playerid, -1, "Could not find plugin sampvoice.");
}
// Checking for a microphone
else if (SvHasMicro(playerid) == SV_FALSE)
{
SendClientMessage(playerid, -1, "The microphone could not be found.");
}
// Create a local stream with an audibility distance of 40.0, an unlimited number of listeners
// and the name 'Local' (the name 'Local' will be displayed in red in the players' speakerlist)
else
{
lstream[playerid] = SvCreateDLStreamAtPlayer(40.0, SV_INFINITY, playerid, 0xff0000ff, "Local");
SendClientMessage(playerid, -1, "Press B to talk to local chat.");
// Assign microphone activation keys to the player
SvAddKey(playerid, 0x42);
}
}
public OnPlayerDisconnect(playerid, reason)
{
// Removing the player's local stream after disconnecting
if (lstream[playerid])
{
SvDeleteStream(lstream[playerid]);
lstream[playerid] = SV_NULL;
}
}
public OnGameModeInit()
{
// Uncomment the line to enable debug mode
// SvDebug(SV_TRUE);
}
Plugin: https://github.com/CyberMor/sampvoice
Código:
public SV_VOID:OnPlayerActivationKeyPress(SV_UINT:playerid, SV_UINT:keyid)
{
if(keyid == 0x42 && lstream[playerid])
{
SendClientMessage(playerid, COR_FOREVER, "[VOIP] testando pressionar");
if(PlayerInfo[playerid][VOIPautorizado] == 0)
{
SendClientMessage(playerid, azulzin, "[VOIP] testando AUTORIZADO == 0");
}
if(PlayerInfo[playerid][VOIPautorizado] == 1)
{
SendClientMessage(playerid, azulzin, "[VOIP] testando AUTORIZADO == 1");
if(PlayerInfo[playerid][VOIPbloqueado] == 0)
{
SendClientMessage(playerid, azulzin, "[VOIP] BLOQUEADO == 0");
SvAttachSpeakerToStream(lstream[playerid], playerid); //local
}
}
}
}
pelo que percebi nenhum sendclientmessage aparece quando pressionado a tecla 'B'
O icone do microfonezinho chega a "brilhar" como se estivesse realmente conversando porém nenhum som é enviado e muito menos essas mensagens.