03/12/2023 22:22
(Esta mensagem foi modificada pela última vez a: 03/12/2023 22:32 por Carlos Victor.)
Pelo o que eu vi, não tem a função de colocar a música para os jogadores, então para deixar as coisas mais fáceis de usar, fiz uma função PlayJBL que você usará para iniciar uma música.
A função conta com 3 parametros:
- playerid que é o jogador da JBL, a posição irá vir dele.
- range que é o raio que a música vai tocar.
- url que é o URL/Link da música que vai tocar.
Seu código:
Cara, na real. Analisando aqui eu acho melhor você manipular areas ao invés de ficar fazendo loopings, você utiliza o streamer, então é melhor usar ele mesmo criando areas para JBL's.
Aí quando o jogador destruir a JBL, você destrói a área para evitar conflitos.
A função conta com 3 parametros:
- playerid que é o jogador da JBL, a posição irá vir dele.
- range que é o raio que a música vai tocar.
- url que é o URL/Link da música que vai tocar.
Código PHP:
PlayJBL(playerid, Float:range, url[])
{
static
Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
for(new i = 0, j = GetPlayerPoolSize(); i <= j; i++) if(IsPlayerConnected(i)) {
if(IsPlayerInRangeOfPoint(i, range, x, y, z)) {
PlayAudioStreamForPlayer(i, url, x, y, z, range, 1);
}
}
return 1;
}
Seu código:
Código PHP:
if(dialogid == DIALOG_JBL)
{
if(response)
{
for(new j; j < MAX_JBL; j++)
{
if(InfoJBL[JblUsed][j] > -1)
{
new Float:XB, Float:YB, Float:ZB; GetDynamicObjectPos(InfoJBL[JblUsed][j], XB, YB, ZB);
if(IsPlayerInRangeOfPoint(playerid, 20.0, XB, YB, ZB))
{
return SCM(playerid, 0xFF4500FF, "{FFA07A}[!] Ja tem uma JBL tocando nesse local");
}
}
}
for(new j; j < MAX_JBL; j++)
{
if(InfoJBL[JblUsed][j] == -1)
{
ApplyAnimation(playerid, "BOMBER", "BOM_Plant", 4.0, 0, 0, 0, 0, 0);
GetPlayerPos(playerid, InfoJBL[xJBL][j], InfoJBL[yJBL][j], InfoJBL[zJBL][j]);
GetXYInFrontOfPlayer(playerid, InfoJBL[xJBL][j], InfoJBL[yJBL][j], 0.7);
JBL[playerid] = CreateDynamicObject(2226, InfoJBL[xJBL][j], InfoJBL[yJBL][j], InfoJBL[zJBL][j] - 0.9, 0.0, 0, 0);
InfoJBL[JblUsed][j] = JBL[playerid];
DestroyDynamic3DTextLabel(InfoJBL[TextJBL][j]);
new strp[80];
format(strp, sizeof(strp), "{FFFF00}JBL {00FF00}Ligada\n{FFFFFF}Proprietario: ID:[%d]", PlayerInfo[playerid][IDF]);
InfoJBL[TextJBL][j] = CreateDynamic3DTextLabel(strp, -1, InfoJBL[xJBL][j], InfoJBL[yJBL][j], InfoJBL[zJBL][j]-0.5, 10.0);
Streamer_Update(playerid);
switch(listitem)
{
case 0:
{
format(InfoJBL[StringMusica][j], 100, "https://www.dropbox.com/scl/fi/86xgktd2eq6ohoq89ghbq/22.mp3?rlkey=9bdxbmu8o0cdd3xosx5oge5sl&dl=0");
}
case 1:
{
format(InfoJBL[StringMusica][j], 100, "http://som.brasilplaygames.com.br/som/testejbl.mp3");
}
case 2:
{
format(InfoJBL[StringMusica][j], 100, "http://som.brasilplaygames.com.br/som/testejbl.mp3");
}
}
PlayJBL(playerid, 20.0, InfoJBL[StringMusica][j]);
return 1;
}
}
return SCM(playerid, 0xFF4500FF, "{FFA07A}[!] Ops! ja tem muitas JBL's ligadas na cidade, aguarde.");
}
}
Cara, na real. Analisando aqui eu acho melhor você manipular areas ao invés de ficar fazendo loopings, você utiliza o streamer, então é melhor usar ele mesmo criando areas para JBL's.
Código PHP:
// Cria essa nova variável no enumerador
STREAMER_TAG_AREA:jblArea
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == DIALOG_JBL)
{
if(response)
{
for(new j; j < MAX_JBL; j++)
{
if(InfoJBL[JblUsed][j] > -1)
{
new Float:XB, Float:YB, Float:ZB; GetDynamicObjectPos(InfoJBL[JblUsed][j], XB, YB, ZB);
if(IsPlayerInRangeOfPoint(playerid, 20.0, XB, YB, ZB))
{
return SCM(playerid, 0xFF4500FF, "{FFA07A}[!] Ja tem uma JBL tocando nesse local");
}
}
}
for(new j; j < MAX_JBL; j++)
{
if(InfoJBL[JblUsed][j] == -1)
{
ApplyAnimation(playerid, "BOMBER", "BOM_Plant", 4.0, 0, 0, 0, 0, 0);
GetPlayerPos(playerid, InfoJBL[xJBL][j], InfoJBL[yJBL][j], InfoJBL[zJBL][j]);
GetXYInFrontOfPlayer(playerid, InfoJBL[xJBL][j], InfoJBL[yJBL][j], 0.7);
JBL[playerid] = CreateDynamicObject(2226, InfoJBL[xJBL][j], InfoJBL[yJBL][j], InfoJBL[zJBL][j] - 0.9, 0.0, 0, 0);
InfoJBL[JblUsed][j] = JBL[playerid];
DestroyDynamic3DTextLabel(InfoJBL[TextJBL][j]);
new strp[80];
format(strp, sizeof(strp), "{FFFF00}JBL {00FF00}Ligada\n{FFFFFF}Proprietario: ID:[%d]", PlayerInfo[playerid][IDF]);
InfoJBL[TextJBL][j] = CreateDynamic3DTextLabel(strp, -1, InfoJBL[xJBL][j], InfoJBL[yJBL][j], InfoJBL[zJBL][j]-0.5, 10.0);
InfoJBL[jblArea][j] = CreateDynamicCircle(InfoJBL[xJBL][j], InfoJBL[yJBL][j], 20.0);
Streamer_Update(playerid);
switch(listitem)
{
case 0:
{
format(InfoJBL[StringMusica][j], 100, "https://www.dropbox.com/scl/fi/86xgktd2eq6ohoq89ghbq/22.mp3?rlkey=9bdxbmu8o0cdd3xosx5oge5sl&dl=0");
}
case 1:
{
format(InfoJBL[StringMusica][j], 100, "http://som.brasilplaygames.com.br/som/testejbl.mp3");
}
case 2:
{
format(InfoJBL[StringMusica][j], 100, "http://som.brasilplaygames.com.br/som/testejbl.mp3");
}
}
for(new i = 0, x = GetPlayerPoolSize(); i <= x; i++) if(IsPlayerConnected(i))
{
if(IsPlayerInDynamicArea(i, InfoJBL[jblArea][j]))
PlayAudioStreamForPlayer(i, InfoJBL[StringMusica][j]);
}
return 1;
}
}
return SCM(playerid, 0xFF4500FF, "{FFA07A}[!] Ops! ja tem muitas JBL's ligadas na cidade, aguarde.");
}
}
return 1;
}
IsPlayerInDynamicArea(playerid, STREAMER_TAG_AREA:areaid, recheck = 0)
public OnPlayerEnterDynamicArea(playerid, STREAMER_TAG_AREA:areaid)
{
for(new j; j < MAX_JBL; j++)
{
if(InfoJBL[JblUsed][j] != -1)
{
if(areaid == InfoJBL[jblArea][j])
{
PlayAudioStreamForPlayer(playerid, InfoJBL[StringMusica][j]);
// Jogador entrou na área da JBL
}
}
}
return 1;
}
public OnPlayerLeaveDynamicArea(playerid, STREAMER_TAG_AREA:areaid)
{
for(new j; j < MAX_JBL; j++)
{
if(InfoJBL[JblUsed][j] != -1)
{
if(areaid == InfoJBL[jblArea][j])
{
StopAudioStreamForPlayer(playerid);
// Jogador saiu da área da JBL
}
}
}
return 1;
}
Aí quando o jogador destruir a JBL, você destrói a área para evitar conflitos.
Código PHP:
DestroyDynamicArea(InfoJBL[jblArea][j]);