[Ajuda] Erro "array index out of bounds"
#1

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;

Reply
#2

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

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

//por
Player[playerid][Senha]

@RESPONDENDO TEU POST ABAIXO....

Disponha
Reply
#3

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

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

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

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)); 
Reply
#7

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.
Reply
#8

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.
Reply
#9

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.
Reply
#10

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


Forum Jump:


Users browsing this thread: 4 Guest(s)