Portal SAMP
[Ajuda] Comando não respondendo - 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] Comando não respondendo (/showthread.php?tid=4500)



Comando não respondendo - L10motos - 06/02/2024

Citar:
Código PHP:
CMD:infoadmins(playerid, const params[])
{
    if(!IsPlayerLogged(playerid))
return 
1;

if(
PlayerInfo[playerid][pAdmin] == 0)
return 
SendClientMessage(playeridCOLOR_GREY"Você não está autorizado a usar este comando.");
    
if(IsPlayerConnected(playerid))
{
      new megastring[3000];
for(new 
1<= MAX_ADMINi++)
    {
  format(sstringsizeof(sstring), "%02d - %s  Cargo: %d"iInfoAdmin[i], LevelAdmin[i]);
  strcat(megastringsstring);
      }
      ShowPlayerDialog(playerid1361DIALOG_STYLE_LIST"Administração"megastring"Confirmar""Fechar");
}
return 
1;



Fiz esse comando mais ele não mostra nada, o que fiz de errado?


Citar:
Código PHP:
#define MAX_ADMIN 20
new InfoAdmin[MAX_ADMIN][MAX_PLAYER_NAME];
new 
LevelAdmin[MAX_ADMIN]; 



RE: Comando não respondendo - pushline - 06/02/2024

Tente isso:
Coloquei alguns prints de debug pra voce saber aonde que "para" o comando
Código PHP:
CMD:infoadmins(playerid, const params[])
{
    print(
"debug 1");

    if(!
IsPlayerLogged(playerid) || !IsPlayerConnected(playerid))
        return 
false;

    print(
"debug 2");

    if(
PlayerInfo[playerid][pAdmin] == 0)
        return 
SendClientMessage(playeridCOLOR_GREY"Você não está autorizado a usar este comando.");
    
    print(
"debug 3");

    new 
megastring[3000];
    for(new 
1<= MAX_ADMINi++)
    {
        
format(sstringsizeof(sstring), "%s%02d - %s  Cargo: %d\n"megastring iInfoAdmin[i], LevelAdmin[i]);
    }

    
ShowPlayerDialog(playerid1361DIALOG_STYLE_LIST"Administração"megastring"Confirmar""Fechar");
    
    print(
"debug 4");

    return 
true;




RE: Comando não respondendo - L10motos - 06/02/2024

(06/02/2024 15:56)pushline Escreveu: Tente isso:
Coloquei alguns prints de debug pra voce saber aonde que "para" o comando
Código PHP:
CMD:infoadmins(playerid, const params[])
{
    print("debug 1");

    if(!IsPlayerLogged(playerid) || !IsPlayerConnected(playerid))
        return false;

    print("debug 2");

    if(PlayerInfo[playerid][pAdmin] == 0)
        return SendClientMessage(playeridCOLOR_GREY"Você não está autorizado a usar este comando.");
    
    
print("debug 3");

    new megastring[3000];
    for(new 1<= MAX_ADMINi++)
    {
        format(sstringsizeof(sstring), "%s%02d - %s  Cargo: %d\n"megastring iInfoAdmin[i], LevelAdmin[i]);
    }

    ShowPlayerDialog(playerid1361DIALOG_STYLE_LIST"Administração"megastring"Confirmar""Fechar");
    
    
print("debug 4");

    return true;


Cara, o que pode ser, tah crashando quando digito o comando, vou te mostrar todo o sistema

Código PHP:
#define MAX_ADMIN 20
new InfoAdmin[MAX_ADMIN][MAX_PLAYER_NAME];
new 
LevelAdmin[MAX_ADMIN];

forward LoadAdmins();
public 
LoadAdmins()
{
new 
file[64];
for(new 
1MAX_ADMINi++)
{
    format(filesizeof(file), "general/admins/admin-%02d.ini"i);
    if(DOF2_FileExists(file))
    {
format(InfoAdmin[i], MAX_PLAYER_NAME"%s"DOF2_GetString(file"Name"));
            LevelAdmin[i] = DOF2_GetInt(file"Level");
    }
    else
    {
            format(InfoAdmin[i], MAX_PLAYER_NAME"Vazio");
            LevelAdmin[i] = 0;
    }
}
return 
1;
}

forward SaveAdmins();
public 
SaveAdmins()
{
    new file[64];
for(new 
1MAX_ADMINi++)
{
      format(filesizeof(file), "general/admins/admin-%02d.ini"i);
        if(!DOF2_FileExists(file)) DOF2_CreateFile(file);
        DOF2_SetString(file"Name"InfoAdmin[i]);
    DOF2_SetInt(file"Level"LevelAdmin[i]);
    DOF2_SaveFile();
}
    return 1;
}

forward UpdateAdmin(playerid);
public 
UpdateAdmin(playerid)
{
for(new 
1MAX_ADMINi++)
{
    if(!strcmp(InfoAdmin[i], Name(playerid), false))
    {
    LevelAdmin[i] = PlayerInfo[playerid][pAdmin];

printf("%s set to admin %s."Name(playerid), PlayerInfo[playerid][pAdmin]);
return 
1;
    }
  }
if(
PlayerInfo[playerid][pAdmin] >= 1)
  {
  PlayerInfo[playerid][pAdmin] = 0;
  printf("%s was taken from the administrator."Name(playerid));
  }
return 
1;


Estranho com mensagens funciona:

Código PHP:
    if(IsPlayerConnected(playerid))
    {
        new megastring[3000];
        for(new 1MAX_ADMINi++)
        {
            format(sstringsizeof(sstring), "%02d - %s  Cargo: %d"iInfoAdmin[i], LevelAdmin[i]);
            
SendClientMessage(playerid, -1sstring);

            //format(sstring, sizeof(sstring), "%02d - %s  Cargo: %d", i, InfoAdmin[i], LevelAdmin[i]);
            //strcat(megastring, sstring);
        }
        //ShowPlayerDialog(playerid, 1361, DIALOG_STYLE_LIST, "Administração", megastring, "Fechar", "");
    



RE: Comando não respondendo - pushline - 06/02/2024

Usa crashdetect (https://github.com/Zeex/samp-plugin-crashdetect), compile com -d3 nos argumentos e teste novamente o código, pode ser que retorne o que causa o erro.


RE: Comando não respondendo - L10motos - 06/02/2024

(06/02/2024 20:29)pushline Escreveu: Usa crashdetect (https://github.com/Zeex/samp-plugin-crashdetect), compile com -d3 nos argumentos e teste novamente o código, pode ser que retorne o que causa o erro.

Agora esta funcionando, só tem um problema, em vez de mostrar todas as vagas de 1 a 19 (MAX_ADMIN) , tah mostrando no dialogo apenas a 19:

Imagem: https://imgur.com/CqiJQE2
Código PHP:
    if(IsPlayerConnected(playerid))
    {
        new string[256];

        for(new 1MAX_ADMINi++)
            format(stringsizeof(string), "%02d - %s  Cargo: %d\n"iInfoAdmin[i], LevelAdmin[i]);

        ShowPlayerDialog(playerid1361DIALOG_STYLE_LIST"Administração"string"Fechar""");
    



RE: Comando não respondendo - xbruno1000x - 06/02/2024

Tenta concatenando dessa forma aqui:
Código:
    if(IsPlayerConnected(playerid))
    {
        new Dialog[1500], string[256];

        for(new i = 1; i < MAX_ADMIN; i++)
        {
            format(string, sizeof(string), "%02d - %s  Cargo: %d\n", i, InfoAdmin[i], LevelAdmin[i]);
            strcat(Dialog, string);
//Caso não funcione, adicione printf("%s", Dialog); e envie o que apareceu na log aqui no tópico.
        }
        ShowPlayerDialog(playerid, 1361, DIALOG_STYLE_LIST, "Administração", Dialog, "Fechar", "");
    }



RE: Comando não respondendo - pushline - 06/02/2024

nem eh necessario o strcat ou aquele if do player connected ja que podia retornar falso junto do isplayerlogged
tenta o do bruno, ou esse:
Código PHP:
CMD:infoadmins(playerid, const params[])
{
    if(!
IsPlayerLogged(playerid) || !IsPlayerConnected(playerid))
        return 
false;

    if(
PlayerInfo[playerid][pAdmin] == 0)
        return 
SendClientMessage(playeridCOLOR_GREY"Você não está autorizado a usar este comando.");
    
    new 
megastring[3000];
    for(new 
1<= MAX_ADMINi++)
    {
        
format(megastringsizeof(megastring), "%s%02d - %s  Cargo: %d\n"megastring iInfoAdmin[i], LevelAdmin[i]);
    }

    
ShowPlayerDialog(playerid1361DIALOG_STYLE_LIST"Administração"megastring"Confirmar""Fechar");
    
    return 
true;