SA-MP Forums Archive
[Ajuda] Erro "array index out of bounds" - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Português/Portuguese (https://sampforum.blast.hk/forumdisplay.php?fid=34)
+---- Thread: [Ajuda] Erro "array index out of bounds" (/showthread.php?tid=568159)



[Editado]Outro problema com Dialog's - Ever_SH - 20.03.2015

Estou tentando criar um sistema de registro em vбrios diбlogos, comecei apartir de um new.pwn, fui compilar para ver se estava ficando certo, deu um erro, sei que deve ser algum erro bobo meu, mas nгo consigo resolver

array index out of bounds (variable "Player")

PHP код:
enum Infop
{
    
Senha[36],
    
Email,
    
Idade,
    
Sexo
}
new 
Player[MAX_PLAYERS][Infop]; 
Dialogo de registro na parte em que o player bota a senha:
PHP код:
if(dialogid == DialogRegistro2)
    {
        if (!
response) return Kick(playerid);
        if (
response)
        {
            if(!
strlen(inputtext)) return ShowPlayerDialog(playeridDialogRegistro2DIALOG_STYLE_INPUT"Registro - Senha""Vocк nгo pode deixar em branco!""Ok""Cancelar");
            
Player[MAX_PLAYERS][Senha] = strlen(inputtext);
        }
    } 
@Edit

Bom o erro anterior ja foi resolvido, terminei o sistema mas agora tem um problema dentro do jogo, na hora do registro, quando seleciono uma opзгo(Senha, Email, Idade ou Sexo), nгo abre o dialog, simplesmente some, vou deixar a OnDialogResponse completa a baixo, nгo й muito grande jб que o gamemode sу tem isso ainda.

PHP код:
public OnDialogResponse(playeriddialogidresponselistiteminputtext[])
{
    if(
dialogid == DialogRegistro)
    {
        if (!
response) return Kick(playerid);
        if (
response)
        {
            if (
listitem == 0)
            {
                
ShowPlayerDialog(playeridDialogRegistro2DIALOG_STYLE_INPUT"Registro - Senha""""Ok""Cancelar");
            }
            if (
listitem == 1)
            {
                
ShowPlayerDialog(playeridDialogRegistro3DIALOG_STYLE_INPUT"Registro - Email""""Ok""Cancelar");
            }
            if (
listitem == 2)
            {
                
ShowPlayerDialog(playeridDialogRegistro4DIALOG_STYLE_INPUT"Registro - Idade""""Ok""Cancelar");
            }
            if (
listitem == 3)
            {
                new 
string[60];
                
strcat(string,"{FFFFFF}Masculino\nFeminino\n");
                
ShowPlayerDialog(playeridDialogRegistro5DIALOG_STYLE_LIST"Registro - Sexo"string"Ok""Cancelar");
            }
            if (
listitem == 4)
            {
                
DOF2_CreateFile(Contas(playerid));
                
DOF2_SetString(Contas(playerid), "Senha"Player[playerid][Senha]);
                
DOF2_SetString(Contas(playerid), "Email"Player[playerid][Email]);
                
DOF2_SetInt(Contas(playerid), "Idade"Player[playerid][Idade]);
                
DOF2_SetInt(Contas(playerid), "Sexo"Player[playerid][Sexo]);
                
SalvarPlayer(playerid);
            }
        }
    }
    if(
dialogid == DialogRegistro2)
    {
        if (
response)
        {
            if(!
strlen(inputtext)) return ShowPlayerDialog(playeridDialogRegistro2DIALOG_STYLE_INPUT"Registro - Senha""Vocк nгo pode deixar em branco!""Ok""Cancelar");
            
Player[playerid][Senha] = strlen(inputtext);
        }
        if (!
response) return Kick(playerid);
    }
    if(
dialogid == DialogRegistro3)
    {
        if (
response)
        {
            if(!
strlen(inputtext)) return ShowPlayerDialog(playeridDialogRegistro2DIALOG_STYLE_INPUT"Registro - Email""Vocк nгo pode deixar em branco!""Ok""Cancelar");
            
Player[playerid][Email] = strlen(inputtext);
        }
        if (!
response) return Kick(playerid);
    }
    if(
dialogid == DialogRegistro4)
    {
        if (
response)
        {
            if(!
IsNumeric(inputtext)) return ShowPlayerDialog(playeridDialogRegistro2DIALOG_STYLE_INPUT"Registro - Idade""Digite apenas numeros!""Ok""Cancelar");
            
Player[playerid][Idade] = strlen(inputtext);
        }
        if (!
response) return Kick(playerid);
    }
    if(
dialogid == DialogRegistro5)
    {
        if (
response)
        {
            if (
listitem == 0)
            {
                
Player[playerid][Sexo] = 0;
            }
            if (
listitem == 1)
            {
                
Player[playerid][Sexo] = 1;
            }
        }
        if (!
response) return Kick(playerid);
    }
    if(
dialogid == DialogLogin)
    {
        if (
response)
        {
            if(!
strlen(inputtext)) return ShowPlayerDialog(playeridDialogLoginDIALOG_STYLE_INPUT,"Login","Senha incorreta, digite novamente","Entrar","Sair");
            
format(Player[playerid][Senha], 40"%s"DOF2_GetString(Contas(playerid), "Senha"));
            if(!
strcmp(Player[playerid][Senha], inputtexttrue) && strlen(inputtext) > 0)
            {
                
SendClientMessage(playerid0x1EFF00FF"Logado com Sucesso");
                
CarregarPlayer(playerid);
            }
        }
        if (!
response) return Kick(playerid);
    }
    return 
1;




Re: Erro "array index out of bounds" - focaximubh - 20.03.2015

se nгo me engano o erro estб aqui:

pawn Код:
//substitua
Player[MAX_PLAYERS][Senha]

//por
Player[playerid][Senha]

@RESPONDENDO TEU POST ABAIXO....

Disponha


Re: Erro "array index out of bounds" - Ever_SH - 20.03.2015

Nossa, sabia que era algo bobo, nem sei como nгo vi isso antes, valeu ae.


Re: Erro "array index out of bounds" - ipsLuan - 20.03.2015

Vocк usa o MAX_PLAYERS pra definir que a variбvel serб do id de um jogador.


Re: Erro "array index out of bounds" - PT - 20.03.2015

PHP код:
Player[playerid][Senha] = strlen(inputtext); 
mesmo assim como se trata de uma string voce deve usar format..


Re: Erro "array index out of bounds" - Ever_SH - 20.03.2015

Bom o erro anterior ja foi resolvido, terminei o sistema mas agora tem um problema dentro do jogo, na hora do registro, quando seleciono uma opзгo(Senha, Email, Idade ou Sexo), nгo abre o dialog, simplesmente some, vou deixar a OnDialogResponse completa a baixo, nгo й muito grande jб que o gamemode sу tem isso ainda.

PHP код:
public OnDialogResponse(playeriddialogidresponselistiteminputtext[])
{
    if(
dialogid == DialogRegistro)
    {
        if (!
response) return Kick(playerid);
        if (
response)
        {
            if (
listitem == 0)
            {
                
ShowPlayerDialog(playeridDialogRegistro2DIALOG_STYLE_INPUT"Registro - Senha""""Ok""Cancelar");
            }
            if (
listitem == 1)
            {
                
ShowPlayerDialog(playeridDialogRegistro3DIALOG_STYLE_INPUT"Registro - Email""""Ok""Cancelar");
            }
            if (
listitem == 2)
            {
                
ShowPlayerDialog(playeridDialogRegistro4DIALOG_STYLE_INPUT"Registro - Idade""""Ok""Cancelar");
            }
            if (
listitem == 3)
            {
                new 
string[60];
                
strcat(string,"{FFFFFF}Masculino\nFeminino\n");
                
ShowPlayerDialog(playeridDialogRegistro5DIALOG_STYLE_LIST"Registro - Sexo"string"Ok""Cancelar");
            }
            if (
listitem == 4)
            {
                
DOF2_CreateFile(Contas(playerid));
                
DOF2_SetString(Contas(playerid), "Senha"Player[playerid][Senha]);
                
DOF2_SetString(Contas(playerid), "Email"Player[playerid][Email]);
                
DOF2_SetInt(Contas(playerid), "Idade"Player[playerid][Idade]);
                
DOF2_SetInt(Contas(playerid), "Sexo"Player[playerid][Sexo]);
                
SalvarPlayer(playerid);
            }
        }
    }
    if(
dialogid == DialogRegistro2)
    {
        if (
response)
        {
            if(!
strlen(inputtext)) return ShowPlayerDialog(playeridDialogRegistro2DIALOG_STYLE_INPUT"Registro - Senha""Vocк nгo pode deixar em branco!""Ok""Cancelar");
            
Player[playerid][Senha] = strlen(inputtext);
        }
        if (!
response) return Kick(playerid);
    }
    if(
dialogid == DialogRegistro3)
    {
        if (
response)
        {
            if(!
strlen(inputtext)) return ShowPlayerDialog(playeridDialogRegistro2DIALOG_STYLE_INPUT"Registro - Email""Vocк nгo pode deixar em branco!""Ok""Cancelar");
            
Player[playerid][Email] = strlen(inputtext);
        }
        if (!
response) return Kick(playerid);
    }
    if(
dialogid == DialogRegistro4)
    {
        if (
response)
        {
            if(!
IsNumeric(inputtext)) return ShowPlayerDialog(playeridDialogRegistro2DIALOG_STYLE_INPUT"Registro - Idade""Digite apenas numeros!""Ok""Cancelar");
            
Player[playerid][Idade] = strlen(inputtext);
        }
        if (!
response) return Kick(playerid);
    }
    if(
dialogid == DialogRegistro5)
    {
        if (
response)
        {
            if (
listitem == 0)
            {
                
Player[playerid][Sexo] = 0;
            }
            if (
listitem == 1)
            {
                
Player[playerid][Sexo] = 1;
            }
        }
        if (!
response) return Kick(playerid);
    }
    if(
dialogid == DialogLogin)
    {
        if (
response)
        {
            if(!
strlen(inputtext)) return ShowPlayerDialog(playeridDialogLoginDIALOG_STYLE_INPUT,"Login","Senha incorreta, digite novamente","Entrar","Sair");
            
format(Player[playerid][Senha], 40"%s"DOF2_GetString(Contas(playerid), "Senha"));
            if(!
strcmp(Player[playerid][Senha], inputtexttrue) && strlen(inputtext) > 0)
            {
                
SendClientMessage(playerid0x1EFF00FF"Logado com Sucesso");
                
CarregarPlayer(playerid);
            }
        }
        if (!
response) return Kick(playerid);
    }
    return 
1;

@Edit

Quote:
Originally Posted by PT
Посмотреть сообщение
PHP код:
Player[playerid][Senha] = strlen(inputtext); 
mesmo assim como se trata de uma string voce deve usar format..
Ok PT, logo mudo isso.

@Edit2

Estб certo deste jeito?
PHP код:
format(Player[playerid][Senha], 40"%s"strlen(inputtext)); 



Re: Erro "array index out of bounds" - GWMPT - 20.03.2015

O STRLEN irб sу devolver o tamanho da cadeia de texto e nгo o texto.
Caso queiras definir uma cadeia de texto com o valor de outra, deverбs usar o strcat.
Exemplo:
PHP код:
strcat(Player[playerid][Senha], inputtext); 
Quote:
Originally Posted by PT
Посмотреть сообщение
PHP код:
Player[playerid][Senha] = strlen(inputtext); 
mesmo assim como se trata de uma string voce deve usar format..
E ainda dizes que tens conhecimento... dб para ver.


Re: Erro "array index out of bounds" - Ever_SH - 20.03.2015

Fiz do seguinte jeito:

PHP код:
strcat(Player[playerid][Email], inputtext);
strcat(Player[playerid][Senha], inputtext);
Player[playerid][Idade] = strval(inputtext); 
E para salvar depois:
PHP код:
DOF2_SetString(Contas(playerid), "Senha"Player[playerid][Senha]);
DOF2_SetString(Contas(playerid), "Email"Player[playerid][Email]);
DOF2_SetInt(Contas(playerid), "Idade"Player[playerid][Idade]);
DOF2_SetInt(Contas(playerid), "Sexo"Player[playerid][Sexo]); 
Esta certo agora?

Obs: Se possivel me ajudem no erro que eu falei no outro post acima, quando seleciono uma opзгo, em vez de abrir o outro dialog, simplesmente some tudo.


Re: Erro "array index out of bounds" - ipsLuan - 20.03.2015

Se vocк colocar os dois strcat no mesmo cуdigo irб retornar o mesmo valor, entгo vocк teria que fazer em cуdigos diferentes.


Re: Erro "array index out of bounds" - Ever_SH - 20.03.2015

Arrumado, obrigado a todos, agora o sistema ta funcionando certinho.