public OnPlayerRegister(playerid, password[]) { new query[240]; if(IsPlayerConnected(playerid)) { if(GetPVarInt(playerid, "AccountExist") == 0) { new hashpass[129]; WP_Hash(hashpass, sizeof(hashpass), password); format(query, sizeof(query), "INSERT INTO accounts (Name,Pass) VALUES ('%s', '%s')", PlayerInfo[playerid][pUsername], password); mysql_function_query(handlesql, query, false, "SendQuery", ""); //==========// SetPVarInt(playerid, "Cash", 500); SetPVarInt(playerid, "Bank", 0); SetPVarInt(playerid, "Model", 26); SetPVarInt(playerid, "Interior", 0); SetPVarInt(playerid, "World", 0); SetPVarInt(playerid, "Tut", 0); SetPVarInt(playerid, "Age", 14); SetPVarInt(playerid, "Sex", 1); SetPVarFloat(playerid, "PosX", 1642.7285); SetPVarFloat(playerid, "PosY", -2240.5591); SetPVarFloat(playerid, "PosZ", 13.4945); SetPVarFloat(playerid, "Health", 50.0); SetPVarFloat(playerid, "Armour", 0.0); //==========// SetPVarInt(playerid, "AccountExist", 1); CheckAccount(playerid, 1); } else KickPlayer(playerid, "Unable to register, account exists!"); } return 1; } stock CheckAccount(playerid, type) { printf("CheckAccount is called [ID %i]", playerid); new query[82]; mysql_format(handlesql, query, sizeof(query), "SELECT * FROM `accounts` WHERE `Name` = '%e'", PlayerInfo[playerid][pUsername]); print("Send a query."); mysql_pquery(handlesql, query, "OnAccountCheck", "dd", playerid, type); print("Qury sent to OnAccountCheck."); return 1; } public OnAccountCheck(playerid, type) { printf("OnAccountCheck is called [ID %i]", playerid); if(playerid != INVALID_PLAYER_ID) { new rows, fields; cache_get_data(rows, fields, handlesql); if(rows) { new fetch[24], query[256]; cache_get_field_content(0, "ConnectTime", fetch); mysql_format(handlesql, query, sizeof(query), "SELECT `deleted` FROM `accounts` WHERE `Name` = '%s'", PlayerInfo[playerid][pUsername]); mysql_pquery(handlesql, query, "OnDeletedCheck", "d", playerid); //==========// cache_get_field_content(0, "Tut", fetch); SetPVarInt(playerid, "Tut", strval(fetch)); SetPVarInt(playerid, "AccountExist", 1); if(type == 1) { SetPVarInt(playerid, "AccountExist", 1); cache_get_row(0,2,PlayerInfo[playerid][pPass],handlesql, 128); ShowPlayerDialog(playerid,1,DIALOG_STYLE_PASSWORD,"Server Account","An existing account is using your playername, please login to the account!","Login", ""); CheckIfBanned(playerid); } } else { ShowPlayerDialog(playerid,2,DIALOG_STYLE_PASSWORD,"Server Account","There are no existing account using your playername, please create a new account!","Register", ""); } } return 1; }
Are you familiar with the term "race condition"? It is possible that you're querying the database before it's done inserting the new data. Besides, having a player log in after they just registered is rather dumb. Just log them in at once.
|