17/05/2022 11:19
Não consegui
2 problemas:
1- Você consegue ouvir e falar com qualquer frequencia, se vc se conecta em uma é como se tivesse em todas
2- Servidor Crasha algum tempo depois da galera usar o radio, trocar de frequencia (não sei exatamente o que ta fazendo crashar, mas é algo assim)
Vê se você consegue me dizer o pq, código:
variaveis globais
OnPlayerActivationKeyPress
OnPlayerActivationKeyRelease
funções do comando
comando
2 problemas:
1- Você consegue ouvir e falar com qualquer frequencia, se vc se conecta em uma é como se tivesse em todas
2- Servidor Crasha algum tempo depois da galera usar o radio, trocar de frequencia (não sei exatamente o que ta fazendo crashar, mas é algo assim)
Vê se você consegue me dizer o pq, código:
variaveis globais
Código:
#define MAX_RADIOS 9999
forward ConnectRadioVoice(playerid);
forward DisconnectRadioVoice(playerid);
new SV_GSTREAM:StreamFreq[MAX_RADIOS] = SV_NULL;
new players_in_radiofrequency[MAX_RADIOS];
OnPlayerActivationKeyPress
Código:
// radio voice
if(radio_frequency[playerid] == 0) {
SvAttachSpeakerToStream(StreamFreq[radio_frequency[playerid]], playerid);
}
// voice local
else {
SvAttachSpeakerToStream(lstream[playerid], playerid);
}
OnPlayerActivationKeyRelease
Código:
// 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 local stream if the 'B' key is released
if (keyid == 0x42 && StreamFreq[radio_frequency[playerid]]) {
SvDetachSpeakerFromStream(StreamFreq[radio_frequency[playerid]], playerid);
}
funções do comando
Código:
public ConnectRadioVoice(playerid) {
new rfid = radio_frequency[playerid];
if(StreamFreq[rfid] == SV_NULL)
{
new string[128];
format(string, sizeof(string), "Radio %i", rfid);
StreamFreq[rfid] = SvCreateGStream(0xFF00FFFF, string);
SvAttachListenerToStream(StreamFreq[rfid], playerid);
}
else
{
SvAttachListenerToStream(StreamFreq[rfid], playerid);
}
players_in_radiofrequency[rfid] += 1;
return 1;
}
public DisconnectRadioVoice(playerid) {
new rfid = radio_frequency[playerid];
players_in_radiofrequency[rfid] -= 1;
if(players_in_radiofrequency[rfid] <= 0) {
StreamFreq[rfid] = SV_NULL;
}
return 1;
}
comando
Código:
CMD:radio(playerid, params[]) {
new frequency_id;
if(sscanf(params,"i", frequency_id)) return SendClientMessage(playerid, -1, "Use: /testid [id]");
if(frequency_id > MAX_RADIOS || frequency_id < 1) return SendClientMessage(playerid, -1, "O numero deve ser entre 1 e MAX_RADIOS");
radio_frequency[playerid] = frequency_id;
if(frequency_id == 0) DisconnectRadioVoice(playerid);
else ConnectRadioVoice(playerid);
return 1;
}