05.11.2013, 17:01
Hi
I decided to switch to SQLite for saving stats, because everyone says that along with MYSql it's the best option.
So I watched several tutorials, and finally tried it out myself.
The registering works fine, but when I reconnect to the server and try to login it crashes my server.exe and the server closes connection :/
So here's my code:
OnDialogResponse:
Custom function (which doesn't cause any trouble, but I'll post it here anyway, just in case:
Does anybody know what could be wrong?
Thanks in advance
Rep ++
I decided to switch to SQLite for saving stats, because everyone says that along with MYSql it's the best option.
So I watched several tutorials, and finally tried it out myself.
The registering works fine, but when I reconnect to the server and try to login it crashes my server.exe and the server closes connection :/
So here's my code:
pawn Код:
public OnPlayerRequestClass(playerid, classid) //•••
{
new Query[135], DBResult:conclusion , PlayerName[MAX_PLAYER_NAME] ;
GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
format(Query, sizeof(Query), "SELECT `NAME` FROM `USERS` WHERE `NAME` = '%s' COLLATE NOCASE", DB_Escape(PlayerName));
conclusion = db_query(Admin, Query);
if(db_num_rows(conclusion ))//if he is registered
{
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "Welcome back to the server! \nEnter your password:", "Login", "");
}
else
{//else if not
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Register", "Enter your password:", "Register", "");
}
db_free_result(conclusion);
if(PInfo[playerid][Logged] == 1) SpawnPlayer(playerid);
return 1;
}//•••
pawn Код:
if(dialogid == DIALOG_REGISTER) //•••
{
if(PInfo[playerid][Logged] == 1) return SendClientMessage(playerid,COLOR_WHITE,"You are already logged in!");//Checking if the player is logged in, if he is, it won't allow him to re-register
if(!strlen(inputtext)) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Register", "Password invalid, Enter your password:", "Register", "");
new Query[128];
new PlayerName[MAX_PLAYER_NAME];
GetPlayerName(playerid, PlayerName, MAX_PLAYER_NAME);
format(Query, 128, "INSERT INTO `USERS` (`NAME`, `PASSWORD`) VALUES ('%s','%s')", DB_Escape(PlayerName), DB_Escape(inputtext));//we are saving the fields values inside our DataBase
db_query(Admin, Query);
}
if(dialogid == DIALOG_LOGIN)
{
if(PInfo[playerid][Logged] == 1) return SendClientMessage(playerid,COLOR_WHITE,"You are already logged in!");//Checking if the player is logged in, if he is, it won't allow him to login
if(!strlen(inputtext)) return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "Password invalid, Enter your password:", "Login", "");
//Login(playerid, inputtext);
new Query[128];
new PlayerName[MAX_PLAYER_NAME];
new DBResult: Result;
GetPlayerName(playerid, PlayerName, MAX_PLAYER_NAME);
format(Query, sizeof(Query), "SELECT * FROM `USERS` WHERE `NAME` = '%s' COLLATE NOCASE AND `PASSWORD` = '%s'", DB_Escape(PlayerName), DB_Escape(inputtext));
Result = db_query(Admin, Query);
if(db_num_rows(Result))//if password is right
{
new money[30], level[2], score[30], kills[10], skin[5], rep[10], deaths[10], vortexPB[30], houses[5], racesWon[5], racesRaced[6];
db_get_field_assoc(Result, "MONEY", money, 30);
PInfo[playerid][Money] = strval(money);
db_get_field_assoc(Result, "LEVEL", level, 2);
PInfo[playerid][Level] = strval(level);
db_get_field_assoc(Result, "SCORE", score, 30);
PInfo[playerid][Score] = strval(score);
db_get_field_assoc(Result, "KILLS", kills, 10);
PInfo[playerid][Kills] = strval(kills);
db_get_field_assoc(Result, "SKIN", skin, 5);
PInfo[playerid][Skin] = strval(skin);
db_get_field_assoc(Result, "REPUTATION", rep, 10);
PInfo[playerid][Rep] = strval(rep);
db_get_field_assoc(Result, "DEATHS", deaths, 10);
PInfo[playerid][Deaths] = strval(deaths);
db_get_field_assoc(Result, "VORTEXPB", vortexPB, 30);
PInfo[playerid][VortexPB] = floatstr(vortexPB);
db_get_field_assoc(Result, "HOUSES", houses, 5);
PInfo[playerid][Houses] = strval(houses);
db_get_field_assoc(Result, "RACESWON", racesWon, 5);
PInfo[playerid][RacesWon] = strval(racesWon);
db_get_field_assoc(Result, "RACESRACED", racesRaced, 6);
PInfo[playerid][RacesRaced] = strval(racesRaced);
}
else
{//else he entered a wrong password
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "Password invalid, Enter your password:", "Login", "");//Checking if he inputted the correct password, if not, retrieve him a message and closing the file;
}
db_free_result(Result);
//Other stuff
} //•••
pawn Код:
//•••
forward public UpdateData(playerid);
public UpdateData(playerid)
{
new
Query[200],
name[MAX_PLAYER_NAME]
;
GetPlayerName(playerid, name, sizeof(name));
format(Query,sizeof(Query),"UPDATE `USERS` SET MONEY = '%d' WHERE `NAME` = '%s' COLLATE NOCASE", GetPlayerMoney(playerid), DB_Escape(name));
db_free_result(db_query(Admin, Query));
format(Query,sizeof(Query),"UPDATE `USERS` SET SCORE = '%d' WHERE `NAME` = '%s' COLLATE NOCASE", GetPlayerMoney(playerid), DB_Escape(name));
db_free_result(db_query(Admin, Query));
format(Query,sizeof(Query),"UPDATE `USERS` SET SKIN = '%d' WHERE `NAME` = '%s' COLLATE NOCASE", GetPlayerMoney(playerid), DB_Escape(name));
db_free_result(db_query(Admin, Query));
format(Query,sizeof(Query),"UPDATE `USERS` SET COLOR = '%d' WHERE `NAME` = '%s' COLLATE NOCASE", GetPlayerMoney(playerid), DB_Escape(name));
db_free_result(db_query(Admin, Query));
format(Query,sizeof(Query),"UPDATE `USERS` SET KILLS = '%d' WHERE `NAME` = '%s' COLLATE NOCASE", GetPlayerMoney(playerid), DB_Escape(name));
db_free_result(db_query(Admin, Query));
format(Query,sizeof(Query),"UPDATE `USERS` SET REPUTATION = '%d' WHERE `NAME` = '%s' COLLATE NOCASE", GetPlayerMoney(playerid), DB_Escape(name));
db_free_result(db_query(Admin, Query));
format(Query,sizeof(Query),"UPDATE `USERS` SET DEATHS = '%d' WHERE `NAME` = '%s' COLLATE NOCASE", GetPlayerMoney(playerid), DB_Escape(name));
db_free_result(db_query(Admin, Query));
format(Query,sizeof(Query),"UPDATE `USERS` SET VORTEXPB = '%d' WHERE `NAME` = '%s' COLLATE NOCASE", GetPlayerMoney(playerid), DB_Escape(name));
db_free_result(db_query(Admin, Query));
format(Query,sizeof(Query),"UPDATE `USERS` SET HOUSES = '%d' WHERE `NAME` = '%s' COLLATE NOCASE", GetPlayerMoney(playerid), DB_Escape(name));
db_free_result(db_query(Admin, Query));
format(Query,sizeof(Query),"UPDATE `USERS` SET RACESWON = '%d' WHERE `NAME` = '%s' COLLATE NOCASE", GetPlayerMoney(playerid), DB_Escape(name));
db_free_result(db_query(Admin, Query));
format(Query,sizeof(Query),"UPDATE `USERS` SET RACESRACED = '%d' WHERE `NAME` = '%s' COLLATE NOCASE", GetPlayerMoney(playerid), DB_Escape(name));
db_free_result(db_query(Admin, Query));
return 1;
}
Thanks in advance
Rep ++