15/10/2024 19:21
(15/10/2024 19:04)BitSain Escreveu: Uma coisa é que, você não precisa lançar um forward para a callback OnPlayerDialogResponse, isso já é feito (nativamente) na include 'a_samp'.
Mantive a mesma estrutura do seu código (inclusive na solução), mas a forma de como você está fazendo isso (OnPlayerDialogResponse) pode parecer estranho no futuro (para mim foi agora).
Código:#define DIALOG_REGISTER 1000
#define DIALOG_LOGIN 1001
new Logged[MAX_PLAYERS];
public OnPlayerConnect(playerid) {
new name[MAX_PLAYER_NAME], file[200];
GetPlayerName(playerid, name, sizeof(name));
format(file, sizeof(file), "\\users\\%s.ini", name);
if (!dini_Exists(file)) {
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Registro", "Por favor, insira uma senha para se registrar:", "Registrar", "Cancelar");
} else {
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Login", "Por favor, insira sua senha:", "Logar", "Cancelar");
}
Logged[playerid] = 0;
return 1;
}
forward OnPlayerDialogResponse(playerid, dialogid, response, input[]);
public OnPlayerDialogResponse(playerid, dialogid, response, input[]) {
if (response == 1) { // Verifica se o jogador apertou OK
if (strlen(input) == 0) { // Verifica se o campo de senha está vazio
SendClientMessage(playerid, vermelho, "Você precisa inserir uma senha!");
if (dialogid == DIALOG_REGISTER) {
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Registro", "Por favor, insira uma senha para se registrar:", "Registrar", "Cancelar");
} else if (dialogid == DIALOG_LOGIN) {
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Login", "Por favor, insira sua senha:", "Logar", "Cancelar");
}
return 1;
}
new name[MAX_PLAYER_NAME], file[200];
GetPlayerName(playerid, name, sizeof(name));
format(file, sizeof(file), "\\users\\%s.ini", name);
if (dialogid == DIALOG_REGISTER) {
if (strlen(input) < 4) { // Verifica se a senha tem no mínimo 4 caracteres
SendClientMessage(playerid, vermelho, "A senha deve ter no mínimo 4 caracteres.");
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Registro", "Por favor, insira uma senha para se registrar:", "Registrar", "Cancelar");
return 1;
}
dini_Create(file);
dini_IntSet(file, "password", adler32_hash(input)); // Armazena a senha com hash
dini_IntSet(file, "cash", 0);
dini_IntSet(file, "score", 0);
SendClientMessage(playerid, amarelo, "Você foi registrado com sucesso!");
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Login", "Por favor, insira sua senha:", "Logar", "Cancelar");
return 1;
}
else if (dialogid == DIALOG_LOGIN) {
if (!dini_Exists(file)) { // Verifica se o arquivo do jogador existe
SendClientMessage(playerid, vermelho, "O arquivo de usuário não foi encontrado. Por favor, registre-se.");
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Registro", "Por favor, insira uma senha para se registrar:", "Registrar", "Cancelar");
return 1;
}
if (adler32_hash(input) != dini_Int(file, "password")) { // Verifica a senha
SendClientMessage(playerid, vermelho, "Senha incorreta! Tente novamente.");
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Login", "Senha incorreta! Por favor, tente novamente:", "Logar", "Cancelar");
return 1;
}
// Login bem-sucedido
Logged[playerid] = 1;
GivePlayerMoney(playerid, dini_Int(file, "cash"));
SetPlayerScore(playerid, dini_Int(file, "score"));
SendClientMessage(playerid, amarelo, "Você está logado com sucesso!");
return 1;
}
} else if (response == 0) { // O jogador apertou "Cancelar"
SendClientMessage(playerid, vermelho, "Operação cancelada.");
return 1;
}
return 1;
}
obg pela ajuda o problema todo ainda continua quando eu registro ao ivez de colocar a senha se apertar na dialo do registro ele fecha a mesma coisa e no login to quase desistindo e arrumar um sistema simples de login que salve senha em hash grana e score mas obg ainda sim nao funcionou mas compilou tudo sem erro vou tentar ver se consigo descobri