JBL TOCA NO MAPA TODO - EduzinMods - 03/12/2023
TOU COM UMA GM COM SISTEMA DE JBL POREM NO ANDROID QUANDO AFASTA DA JBL EU FICO OUVINDA A JBL A QUALQUER DISTANCIA E TAMBEM A MUSICA SO TOCA PELA METADE E DEPOIS REINICA NOVAMENTE.
ALGUEM PODE MIM AJUDAR ?
RE: JBL TOCA NO MAPA TODO - Carlos Victor - 03/12/2023
Você precisa compartilhar o código conosco, não conseguimos te ajudar sem ver o código e o erro que está presente nele, se é um erro.
Mas com base no que você falou, provavelmente a função PlayAudioStreamForPlayer está setada para tocar para todos os jogadores e não em uma determinada posição como você disse, a posição da JBL.
Código PHP: CMD:musica(playerid) { new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z); PlayAudioStreamForPlayer(playerid, "http://live.hunterfm.com/live", x, y, z, 20.0, 1); // Vai tocar a rádio HunterFM em um raio de 20 metros na posição x, y, z (do jogador) return 1; }
RE: JBL TOCA NO MAPA TODO - EduzinMods - 03/12/2023
(03/12/2023 21:48)Carlos Victor Escreveu: Você precisa compartilhar o código conosco, não conseguimos te ajudar sem ver o código e o erro que está presente nele, se é um erro.
Mas com base no que você falou, provavelmente a função PlayAudioStreamForPlayer está setada para tocar para todos os jogadores e não em uma determinada posição como você disse, a posição da JBL.
Código PHP: CMD:musica(playerid) { new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z); PlayAudioStreamForPlayer(playerid, "http://live.hunterfm.com/live", x, y, z, 20.0, 1); // Vai tocar a rádio HunterFM em um raio de 20 metros na posição x, y, z (do jogador) return 1; }
mn ta tudo certo mn so mente no mobile que ta dando isso, tentei varias vezes e n deu certo.
RE: JBL TOCA NO MAPA TODO - Carlos Victor - 03/12/2023
Agora que você falou mobile, se o seu código está 100% correto, eu tenho quase certeza que o problema é APK. Se você estiver usando um APK padrão, SA-MP Launcher, etc... Provavelmente o erro está em seu código, tenho sistemas semelhantes e não tenho problema nenhum com isso com esses APK's padrões.
RE: JBL TOCA NO MAPA TODO - EduzinMods - 03/12/2023
(03/12/2023 22:01)Carlos Victor Escreveu: Agora que você falou mobile, se o seu código está 100% correto, eu tenho quase certeza que o problema é APK.
tbm n e o apk testei com 3 samp e continua do mesmo jeito. talvez poderia ser o link da musica ?
RE: JBL TOCA NO MAPA TODO - Carlos Victor - 03/12/2023
É mais fácil você compartilhar o código, ficar tentando adivinhar o problema não é uma boa opção.
RE: JBL TOCA NO MAPA TODO - EduzinMods - 03/12/2023
(03/12/2023 22:06)Carlos Victor Escreveu: É mais fácil você compartilhar o código, ficar tentando adivinhar o problema não é uma boa opção.
DIALOG DA JBL
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");
}
}
return 1;
}
}
return SCM(playerid, 0xFF4500FF, "{FFA07A}[!] Ops! ja tem muitas JBL's ligadas na cidade, aguarde.");
}
}
CMD DA JBL
CMD:ljbl(playerid, params[])
{
if(PlayerInfo[playerid][Algemado] == true)return SCM(playerid, -1, "{FFA07A}[!] Voce nao pode usar este comando agora");
if(PlayerInfo[playerid][Ferido] == true)return SCM(playerid, -1, "{FFA07A}[!] Voce nao pode usar este comando agora.");
if(PlayerInfo[playerid][TemJbl] == 1)
{
if(GetPlayerInterior(playerid) != 0)
{
return SCM(playerid, 0xFF4500FF, "{FFA07A}[!] Interior bloqueado.");
}
if(IsPlayerInAnyVehicle(playerid))
{
return SCM(playerid, 0xFF4500FF, "{FFA07A}[!] Voce nao pode ligar em veiculos.");
}
if(JBL[playerid] > -1)
{
return SCM(playerid, 0xFF4500FF, "{FFA07A}[!] Voce ja tem uma JBL ligada.");
}
new stringj[8000];
strcat(stringj,"{FF0000}VOCE JA SABE QUAL E\n{FF0000}JOAO GOMES\n{FF0000}PAPAI BANCA");
ShowPlayerDialog(playerid, DIALOG_JBL, DIALOG_STYLE_LIST, "{FFFFFF}JBL", stringj, "Tocar", ">>");
}
else
{
SCM(playerid, 0xFF4500FF, "{FF2400}ERRO - {FFFFFF}Voce nao tem uma JBL");
}
return 1;
}
RE: JBL TOCA NO MAPA TODO - Carlos Victor - 03/12/2023
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.
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]);
RE: JBL TOCA NO MAPA TODO - White_Blue - 03/12/2023
(03/12/2023 22:22)Carlos Victor Escreveu: 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.
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]);
Apenas um adendo, o parâmetro "url" deve ser constante, pois não é modificado dentro da função.
Código PHP: PlayJBL(playerid, Float:range, const url[])
|