Portal SAMP
[Ajuda] Tocar música para todos em um veículo - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] Tocar música para todos em um veículo (/showthread.php?tid=1836)



Tocar música para todos em um veículo - xbruno1000x - 12/11/2021

Estava criando um sistema de rádio em veículos e nele todos passageiros do veículo ouviriam o audiostream. O problema é que o audiostream só está tocando para quem liga o rádio.

Código:
foreach(new i : Player)
{
    if(IsPlayerInVehicle(i, GetPlayerVehicleID(playerid)))
    {
        PlayAudioStreamForPlayer(i, "http://"rockclassics"");
    }
}
*playerid se refere ao jogador que ligou o rádio
*todos os links usados estão ativos e funcionando para o playerid
*considere que o restante do código está em funcionamento pleno
*utilizei o sandboxie para o teste

Comentários sobre funcionamento do código:
O looping verifica se o jogador está no carro em que o rádio foi ligado e, caso esteja, a música toca.

Alguém tem ideia do motivo do não funcionamento?


RE: Tocar música para todos em um veículo - Luiz - 12/11/2021

Sobre o código, não há erros.
Verifique se a "rádio" nas configurações do jogo está ativada, caso esteja, acredito que seja algum problema do Sandboxie.


RE: Tocar música para todos em um veículo - domingues93 - 12/11/2021

(12/11/2021 02:26)xbruno1000x Escreveu: Estava criando um sistema de rádio em veículos e nele todos passageiros do veículo ouviriam o audiostream. O problema é que o audiostream só está tocando para quem liga o rádio.

Código:
foreach(new i : Player)
{
    if(IsPlayerInVehicle(i, GetPlayerVehicleID(playerid)))
    {
        PlayAudioStreamForPlayer(i, "http://"rockclassics"");
    }
}
*playerid se refere ao jogador que ligou o rádio
*todos os links usados estão ativos e funcionando para o playerid
*considere que o restante do código está em funcionamento pleno
*utilizei o sandboxie para o teste

Comentários sobre funcionamento do código:
O looping verifica se o jogador está no carro em que o rádio foi ligado e, caso esteja, a música toca.

Alguém tem ideia do motivo do não funcionamento?

Depende de onde esteja usando esse bloco de código. Se é em um comando ou uma callback.


RE: Tocar música para todos em um veículo - NelsonC. - 12/11/2021

Tenho este código do meu servidor, todos os passageiros do veículo conseguem escutar.

Código PHP:
if ( newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER)
        {
            if ( 
Vehicle[vehicleid][RadioOn] )
            {
                new 
name[MAX_STATION_NAME], url[MAX_STATION_URL];
                
GetStationName(Vehicle[vehicleid][RadioID], name), GetStationUrl(Vehicle[vehicleid][RadioID], url);
                
PlayAudioStreamForPlayer(playeridurl);
                
SendClientMessage(playeridCOR_BRANCO"%s{"COR_SISTEMA_INC"} sintonizada."name);
            }
        } 

Créditos ao Domingues 


RE: Tocar música para todos em um veículo - xbruno1000x - 13/11/2021

(12/11/2021 18:11)NelsonC. Escreveu: Tenho este código do meu servidor, todos os passageiros do veículo conseguem escutar.

Código PHP:
if ( newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER)
        {
            if ( 
Vehicle[vehicleid][RadioOn] )
            {
                new 
name[MAX_STATION_NAME], url[MAX_STATION_URL];
                
GetStationName(Vehicle[vehicleid][RadioID], name), GetStationUrl(Vehicle[vehicleid][RadioID], url);
                
PlayAudioStreamForPlayer(playeridurl);
                
SendClientMessage(playeridCOR_BRANCO"%s{"COR_SISTEMA_INC"} sintonizada."name);
            }
        } 

Créditos ao Domingues 

De fato funciona dessa maneira, eu até cheguei a fazer igual. Porém meu intuito era que a atualização do link para todos passageiros fosse no momento em que a escolha da rádio foi efetuada ao invés do momento em que ocorre a mudança de states.

(12/11/2021 17:15)domingues93 Escreveu: Depende de onde esteja usando esse bloco de código. Se é em um comando ou uma callback.

Eu utilizei num sistema similar a dialog, mas em textdraw, então o código está num equivalente a OnDialogResponse. Mas já testei em uma callback criada, timer, modifiquei o código e tudo mais que dava e também não funcionava.


RE: Tocar música para todos em um veículo - Jogador - 13/11/2021

( '-') Era pra funcionar...
Eu testei isso aqui (no android ainda por cima) e funcionou, totalmente igual ao seu
Código:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == DIALOG_MUSIC)
    {
        if(response)
        {
            if(listitem < sizeof MusicLinks)
                TocarRadio(playerid, MusicLinks[listitem]);
        }
        return 0;
    }

    return 1;
}

stock TocarRadio(playerid, const params[])
{
    new vehicleid = GetPlayerVehicleID(playerid);
    if(vehicleid)
    {
        foreach(new id : Player)
        {
            if(IsPlayerInVehicle(id, vehicleid))
                PlayAudioStreamForPlayer(id, params);
        }
    }
    else PlayAudioStreamForPlayer(playerid, params);
}



RE: Tocar música para todos em um veículo - xbruno1000x - 14/11/2021

(13/11/2021 16:52)Jogador Escreveu: ( '-') Era pra funcionar...
Eu testei isso aqui (no android ainda por cima) e funcionou, totalmente igual ao seu
Código:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == DIALOG_MUSIC)
    {
        if(response)
        {
            if(listitem < sizeof MusicLinks)
                TocarRadio(playerid, MusicLinks[listitem]);
        }
        return 0;
    }

    return 1;
}

stock TocarRadio(playerid, const params[])
{
    new vehicleid = GetPlayerVehicleID(playerid);
    if(vehicleid)
    {
        foreach(new id : Player)
        {
            if(IsPlayerInVehicle(id, vehicleid))
                PlayAudioStreamForPlayer(id, params);
        }
    }
    else PlayAudioStreamForPlayer(playerid, params);
}

Bom, nesse caso creio que tenha ocorrido algum bug por conta do uso do SandBoxie. De toda forma, agradeço a todos pela ajuda.

Edit: Finalmente encontrei o bug! Ocorreu por conta do SA-MP Addon v2.5. O código estava ok desde o inicio.