30.12.2015, 01:00
Comeзei a usar esse sistema hoje e entгo ainda estou aprendendo pois antes eu armazenava os dados do jogador em .ini usando a Include DOF2, entгo procurando no forum eu achei esse sistema aqui https://sampforum.blast.hk/showthread.php?tid=364392 um sistema de registrar e logar em SQLite e partir dele eu criei o meu sistema de login e registro e depois adaptei ao meu gamemode principal
porem eu estou tendo alguns problemas e eu gostaria que alguem me ajudasse, entгo eu nгo sei se й algum problema no script acima ou й algum problema no Database, o que acontece й que quando eu entro no servidor com uma conta tudo funciona perfeitamente, consigo efetuar o cadastro eo login e quando eu relogo no servidor os dados ficam salvos certinhos, o problema й que quando eu entro com outra conta, os dados da conta anterior exceto a senha sгo setados na conta atual e vice-versa, entгo nгo sei se o problema й no database ou no script
OBS: O Database abaixo й da minha outra gamemode onde eu adaptei o sistema acima e estou tendo problemas
Database anexado abaixo \/
PHP код:
#include <a_samp>
new DB:Contas;
#define D_Login (0)
#define D_Registro (1)
main()
{
print("SQL BASE - STARTED! 20");
}
public OnGameModeInit()
{
Contas = db_open("contas.db");
return 1;
}
public OnGameModeExit()
{
return 1;
}
public OnPlayerRequestClass(playerid, classid)
{
Autenticar(playerid);
return 1;
}
public OnPlayerConnect(playerid)
{
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
SalvarUsuario(playerid);
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
new DBResult:Result, Query[120];
if(dialogid == D_Login)
{
if(response)
{
format(Query, sizeof(Query), "SELECT * FROM `Usuarios` WHERE `Nome` = '%s' AND `Senha` = '%s'", DB_Escape(PegarNome(playerid)), DB_Escape(inputtext));
Result = db_query(Contas, Query);
if(db_num_rows(Result))
{
CarregarUsuario(playerid);
SpawnPlayer(playerid);
}
db_free_result(Result);
}
else Kick(playerid);
}
if(dialogid == D_Registro)
{
if(response)
{
if(strlen(inputtext) < 5 || strlen(inputtext) > 10) { ShowPlayerDialog(playerid, D_Registro, DIALOG_STYLE_INPUT, "[Register]", "Your pass must be bigger than 5 and smaller than 10 characters.", "Register", "Cancel"); }
else
{
format(Query, sizeof(Query), "INSERT INTO `Usuarios` (`Nome`, `Senha`, `Dinheiro`) VALUES ('%s','%s','1000')", DB_Escape(PegarNome(playerid)), DB_Escape(inputtext));
db_query(Contas, Query);
ShowPlayerDialog(playerid, D_Login, DIALOG_STYLE_PASSWORD, "[Login]", "Your Account has been sucessfully Created!\nInsert your Password to Login.", "Login", "Cancel");
}
}
}
return 1;
}
stock Autenticar(playerid)
{
new Query[120], DBResult:Result;
format(Query, sizeof(Query), "SELECT * FROM `Usuarios` WHERE `Nome` = '%s'", DB_Escape(PegarNome(playerid)));
Result = db_query(Contas, Query);
if(db_num_rows(Result)) ShowPlayerDialog(playerid, D_Login, DIALOG_STYLE_PASSWORD, "[Login]", "Account Status: Registred\nInsert your Password to Login!", "Login", "Cancel");
else ShowPlayerDialog(playerid, D_Registro, DIALOG_STYLE_INPUT, "[Register]", "Account Status: Unregistred\nInsert a Password to Register!", "Register", "Cancel");
db_free_result(Result);
return 1;
}
stock SalvarUsuario(playerid)
{
new Query[120];
format(Query, sizeof(Query), "UPDATE `Usuarios` SET Dinheiro = %i", GetPlayerMoney(playerid));
db_query(Contas, Query);
return 1;
}
stock CarregarUsuario(playerid)
{
new Dados[30], DBResult:Result, Query[120];
format(Query, sizeof(Query), "SELECT * FROM `Usuarios` WHERE `Nome` = '%s'", DB_Escape(PegarNome(playerid)));
Result = db_query(Contas, Query);
db_get_field_assoc(Result,"Dinheiro", Dados, sizeof(Dados)), GivePlayerMoney(playerid, strval(Dados));
return 1;
}
stock PegarNome(playerid)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, MAX_PLAYER_NAME);
return name;
}
stock DB_Escape(text[])
{
new
ret[80 * 2],
ch,
i,
j;
while ((ch = text[i++]) && j < sizeof (ret))
{
if (ch == '\'')
{
if (j < sizeof (ret) - 2)
{
ret[j++] = '\'';
ret[j++] = '\'';
}
}
else if (j < sizeof (ret))
{
ret[j++] = ch;
}
else
{
j++;
}
}
ret[sizeof (ret) - 1] = '\0';
return ret;
}
OBS: O Database abaixo й da minha outra gamemode onde eu adaptei o sistema acima e estou tendo problemas
Database anexado abaixo \/