There is this problem like when I try to connect in the server - The server won't recognize that there is already a row registered under my name. However what I noticed is, It recognized my account the first time I logged in but as soon as I relogged (having 2 players in the server already) the server won't recognize my account anymore and is prompting me to register an account, Why is that?
Still experiencing the same exact problem, Can someone at least tell me what is causing this problem?
show us the line where a row is added in the mysql database ( after register )
You probably forgot to close the database handle in another query, causing the database to be locked.
I'm honestly clueless where the problem is coming from, Should I use db_debug_openresults?
This usually happens when you are writing to the database from 2 different sources. There's a database handle that is active or wasn't closed properly that results in your database being write locked.
Are you sure you aren't accessing the database with any SQLite browser while the server is running?
Does it happen on every query or just specific queries in a specific code block?
Not that I know of, But I do think it has something to do with the unoptimized way of reading data like this for example.
PHP код:
public OnUserPlayerLogin(playerid, password[])
{
new hash[65], DBResult:Result, sz_Query[92];
SHA256_PassHash(password, PlayerInfo[playerid][pSalt], hash, 64);
format(sz_Query, sizeof(sz_Query), "SELECT * FROM `users` WHERE `admin_name` = '%s'", GetPlayersName(playerid));
Result = db_query(Database, sz_Query);
if(!strcmp(hash, PlayerInfo[playerid][pKey]))
{
db_get_field_assoc(Result, "admin_name", PlayerInfo[playerid][pAdminName], MAX_PLAYER_NAME);
db_get_field_assoc(Result, "email", PlayerInfo[playerid][pEmail], 64);
PlayerInfo[playerid][pAdmin] = db_get_field_assoc_int(Result, "adminlevel");
PlayerInfo[playerid][pBanned] = db_get_field_assoc_int(Result, "banned");
PlayerInfo[playerid][pPermaBanned] = db_get_field_assoc_int(Result, "permbanned");
PlayerInfo[playerid][pWarns] = db_get_field_assoc_int(Result, "warnings");
PlayerInfo[playerid][pLWarns] = db_get_field_assoc_int(Result, "logwarnings");
PlayerInfo[playerid][pDonateRank] = db_get_field_assoc_int(Result, "donaterank");
PlayerInfo[playerid][pBuddyInvited] = db_get_field_assoc_int(Result, "buddyinvited");
PlayerInfo[playerid][pBanAppealer] = db_get_field_assoc_int(Result, "banappealer");
PlayerInfo[playerid][pShopTech] = db_get_field_assoc_int(Result, "shoptech");
PlayerInfo[playerid][pVehMods] = db_get_field_assoc_int(Result, "vehmodder");
PlayerInfo[playerid][pUndercover] = db_get_field_assoc_int(Result, "undercover");
PlayerInfo[playerid][pTogReports] = db_get_field_assoc_int(Result, "togreports");
PlayerInfo[playerid][pFactionModerator] = db_get_field_assoc_int(Result, "factionmod");
PlayerInfo[playerid][pGangModerator] = db_get_field_assoc_int(Result, "gangmod");
PlayerInfo[playerid][gPupgrade] = db_get_field_assoc_int(Result, "upgradepoints");
PlayerInfo[playerid][pConnectTime] = db_get_field_assoc_int(Result, "connectedtime");
PlayerInfo[playerid][pHelper] = db_get_field_assoc_int(Result, "helper");
PlayerInfo[playerid][pDutyHours] = db_get_field_assoc_int(Result, "helphours");
PlayerInfo[playerid][pAcceptedHelp] = db_get_field_assoc_int(Result, "acceptedhelp");
PlayerInfo[playerid][pAcceptReport] = db_get_field_assoc_int(Result, "acceptreport");
PlayerInfo[playerid][pTrashReport] = db_get_field_assoc_int(Result, "trashreport");
PlayerInfo[playerid][pGangWarn] = db_get_field_assoc_int(Result, "gangwarn");
PlayerInfo[playerid][pAMSSent] = db_get_field_assoc_int(Result, "amsent");
db_get_field_assoc(Result, "prisonedby", PlayerInfo[playerid][pPrisonedBy], MAX_PLAYER_NAME);
db_get_field_assoc(Result, "prisonreason", PlayerInfo[playerid][pPrisonReason], 128);
PlayerInfo[playerid][pOrder] = db_get_field_assoc_int(Result, "order");
PlayerInfo[playerid][pOBlocked] = db_get_field_assoc_int(Result, "oblocked");
PlayerInfo[playerid][pUnListed] = db_get_field_assoc_int(Result, "unlisted");
PlayerInfo[playerid][pTokens] = db_get_field_assoc_int(Result, "viptokens");
PlayerInfo[playerid][pMuted] = db_get_field_assoc_int(Result, "muted");
PlayerInfo[playerid][pNMute] = db_get_field_assoc_int(Result, "newbmuted");
PlayerInfo[playerid][pADMute] = db_get_field_assoc_int(Result, "admuted");
PlayerInfo[playerid][pOOCMute] = db_get_field_assoc_int(Result, "oocmuted");
PlayerInfo[playerid][pAmute] = db_get_field_assoc_int(Result, "amuted");
PlayerInfo[playerid][pCMute] = db_get_field_assoc_int(Result, "cmuted");
PlayerInfo[playerid][pRMuted] = db_get_field_assoc_int(Result, "rmuted");
PlayerInfo[playerid][pRMutedTime] = db_get_field_assoc_int(Result, "rmutedtime");
PlayerInfo[playerid][pVMuted] = db_get_field_assoc_int(Result, "vmuted");
db_free_result(Result);
// Loads Characters Data
LoadCharacter(playerid);
LoadCharItems(playerid);
LoadCharJobSkills(playerid);
LoadCharLicenses(playerid);
LoadCharGuns(playerid);
LoadCharTime(playerid); // waiting time (jail time etc..)
LoadCharSkills(playerid); // weapon skills
LoadCharVehiclesModification(playerid);
LoadCharVehiclesWeapon(playerid);
LoadCharVehicles(playerid);
LoadCharToys(playerid);
SetPlayerName(playerid, PlayerInfo[playerid][pRPName]);
ResetPlayerMoney(playerid);
CurrentMoney[playerid] = GetPVarInt(playerid, "Cash");
TotalLogin++;
OnHelp[playerid] = INVALID_PLAYER_ID;
PlayerInfo[playerid][pJustLogged] = 30;
PlayerInfo[playerid][pLoggedIn] = 1;
PlayerInfo[playerid][pLoginTime] = 0;
if(PlayerInfo[playerid][pTruckingLevel] == 0) PlayerInfo[playerid][pTruckingLevel] = 1;
//SetPlayerScore(playerid, PlayerInfo[playerid][pLevel]);
if(PlayerInfo[playerid][pHospital] == 1)
{
PlayerInfo[playerid][pHospital] = 0;
SetPVarInt(playerid, "MedicBill", 1);
}
if( PlayerInfo[playerid][pBanAppealer] >= 1 && PlayerInfo[playerid][pAdmin] < 1) PlayerInfo[playerid][pBanAppealer] = 0;
if( PlayerInfo[playerid][pUndercover] >= 1 && PlayerInfo[playerid][pAdmin] < 1) PlayerInfo[playerid][pUndercover] = 0;
if( PlayerInfo[playerid][pFactionModerator] >= 1 && PlayerInfo[playerid][pAdmin] < 1) PlayerInfo[playerid][pFactionModerator] = 0;
if( PlayerInfo[playerid][pBanAppealer] > 1) PlayerInfo[playerid][pBanAppealer] = 0;
if( PlayerInfo[playerid][pShopTech] > 1) PlayerInfo[playerid][pShopTech] = 0;
if( PlayerInfo[playerid][pUndercover] > 1) PlayerInfo[playerid][pUndercover] = 0;
if( PlayerInfo[playerid][pFactionModerator] > 1) PlayerInfo[playerid][pFactionModerator] = 0;
if( PlayerInfo[playerid][pGangModerator] > 1) PlayerInfo[playerid][pGangModerator] = 0;
if(PlayerInfo[playerid][pJob2] >= 1 && PlayerInfo[playerid][pDonateRank] < 1)
{
PlayerInfo[playerid][pJob2] = 0;
SendClientMessageEx(playerid, COLOR_YELLOW, "VIP: You have lost your secondary job due to the fact that you are longer a VIP.");
}
if(PlayerInfo[playerid][pDonateRank] >= 4 && PlayerInfo[playerid][pArmsSkill] < 400)
{
PlayerInfo[playerid][pArmsSkill] = 401;
SendClientMessageEx(playerid, COLOR_YELLOW, "Platinum VIP Feature: You have been given Level 5 Arms Dealer.");
}
if (PlayerInfo[playerid][pAdmin] >= 1)
{
PlayerInfo[playerid][pToggedVIPChat] = 1;
}
if (PlayerInfo[playerid][pLevel] < 6 || PlayerInfo[playerid][pAdmin] > 0)
{
gNewbie[playerid] = 0;
}
if (PlayerInfo[playerid][pHelper] >= 1 || PlayerInfo[playerid][pAdmin] == 1)
{
gNewbie[playerid] = 0;
}
if (PlayerInfo[playerid][pAdmin] > 0)
{
if(PlayerInfo[playerid][pAdmin] >= 1)
{
format(sz_Query, sizeof(sz_Query), "{6CC417}AdminNotice{FFFFFF}: You are logged in as a level %d Administrator.",PlayerInfo[playerid][pAdmin]);
SendClientMessageEx(playerid, COLOR_WHITE,sz_Query);
}
if(PlayerInfo[playerid][pAdmin] >= 1)
{
format( sz_Query, sizeof( sz_Query ), "{6CC417}AdminNotice{FFFFFF}: Administrator %s has just logged in.", PlayerInfo[playerid][pAdminName]);
}
foreach(Player, i)
{
if( PlayerInfo[i][pAdmin] >= 1337 )
{
if(PlayerInfo[i][pAdmin] >= PlayerInfo[playerid][pAdmin]) SendClientMessageEx(i, COLOR_WHITE, sz_Query);
}
}
}
ToggleMainMenu(playerid, 0);
printf("%s has logged in.", GetPlayersName(playerid));
format(sz_Query, sizeof(sz_Query), "Welcome to Andreas Nations Roleplay, %s.", PlayerInfo[playerid][pAdminName]);
SendClientMessageEx(playerid, COLOR_YELLOW, sz_Query);
SetSpawnInfo(playerid, PlayerInfo[playerid][pTeam], PlayerInfo[playerid][pModel], PlayerInfo[playerid][pPos_x], PlayerInfo[playerid][pPos_y], PlayerInfo[playerid][pPos_z], 1.0, -1, -1, -1, -1, -1, -1);
SpawnPlayer(playerid);
SkinDelay(playerid);
if(PlayerInfo[playerid][pInt] > 0 || PlayerInfo[playerid][pVW] > 0)
{
TogglePlayerControllable(playerid, 0);
GameTextForPlayer(playerid, "Objects loading...", 4000, 5);
SetPVarInt(playerid, "LoadingObjects", 1);
SetTimerEx("SafeLoadObjects", 4000, 0, "d", playerid);
}
gPlayerLogged{playerid} = 1;
SetPVarInt(playerid, "MedicBill", 0);
format(sz_Query, sizeof(sz_Query), "~w~Welcome~n~~y~%s~n~~h~~b~www.an-rp.com", PlayerInfo[playerid][pAdminName]);
GameTextForPlayer(playerid, sz_Query, 5000, 1);
SendClientMessageEx(playerid, COLOR_YELLOW, GlobalMOTD);
if(PlayerInfo[playerid][pAdmin] >= 1)
{
SendClientMessageEx(playerid, COLOR_GREEN, AdminMOTD);
}
if(PlayerInfo[playerid][pAdmin] > 0)
{
SendClientMessageEx(playerid, TEAM_AZTECAS_COLOR, CAMOTD);
}
if(PlayerInfo[playerid][pDonateRank] >= 1) SendClientMessageEx(playerid, COLOR_VIP, VIPMOTD);
if(PlayerInfo[playerid][pHelper] >= 1) SendClientMessageEx(playerid, COLOR_LIGHTBLUE, CAMOTD);
if(PlayerInfo[playerid][pMember] == 1) SendClientMessageEx(playerid, COLOR_DBLUE, PDMOTD);
if(PlayerInfo[playerid][pMember] == 19) SendClientMessageEx(playerid, COLOR_DBLUE, LVPDMOTD);
SetPlayerFightingStyle(playerid, PlayerInfo[playerid][pFightStyle]);
LoadPlayerVehicles(playerid);
SetPlayerToTeamColor(playerid);
if(PlayerInfo[playerid][pFMember] < 255)
{
format(sz_Query, sizeof(sz_Query), "Family MOTD: %s.", FamilyInfo[PlayerInfo[playerid][pFMember]][FamilyMOTD]);
SendClientMessageEx(playerid, TEAM_VAGOS_COLOR, sz_Query);
}
if(PlayerInfo[playerid][pOrder] > 0)
{
format(sz_Query, sizeof(sz_Query), "SERVER: %s has an outstanding market place order.", PlayerInfo[playerid][pAdminName]);
ShopTechBroadCast(COLOR_WHITE, sz_Query);
}
new hcheck = INVALID_HOUSE_ID, hcheck2 = INVALID_HOUSE_ID;
for(new i = 0; i < MAX_HOUSES; i++)
{
if(!strcmp(PlayerInfo[playerid][pRPName], HouseInfo[i][hOwner], false) && HouseInfo[i][hOwned] != 0)
{
if(hcheck != INVALID_HOUSE_ID)
{
hcheck2 = i;
}
else
{
hcheck = i;
}
}
}
if(hcheck != INVALID_HOUSE_ID)
{
PlayerInfo[playerid][pPhousekey] = hcheck;
}
if(hcheck2 != INVALID_HOUSE_ID)
{
PlayerInfo[playerid][pPhousekey2] = hcheck2;
}
if(hcheck == INVALID_HOUSE_ID)
{
PlayerInfo[playerid][pPhousekey] = INVALID_HOUSE_ID;
return 1;
}
if(hcheck2 == INVALID_HOUSE_ID)
{
PlayerInfo[playerid][pPhousekey2] = INVALID_HOUSE_ID;
return 1;
}
}
else
{
db_free_result(Result);
ShowMainMenuDialog(playerid, 3);
gPlayerLogTries[playerid] += 1;
if(gPlayerLogTries[playerid] == 3) {
ShowPlayerDialog(playerid, DIALOG_SHOW_INFO, DIALOG_STYLE_MSGBOX, "{008000}You've been Auto-Kicked from the Server", "{FF0000}You've typed the wrong password too many times.", "Ok", "Cancel");
SetTimerEx("SendToKick", 1500, 0, "i", playerid);
}
}
return 1;
}
stock LoadCharToys(playerid)
{
new DBResult:Result, sz_Query[128], var[32];
format(sz_Query, sizeof(sz_Query), "SELECT * FROM `char_toys` WHERE `charid` = %d", PlayerInfo[playerid][pCharID]);
Result = db_query(Database, sz_Query);
if(db_num_rows(Result))
{
for(new v = 0; v < MAX_PLAYERTOYS; v++)
{
format(var, 32, "pt%dModelID",v);
PlayerToyInfo[playerid][v][ptModelID] = db_get_field_assoc_int(Result, var);
format(var, 32, "pt%dBone",v);
PlayerToyInfo[playerid][v][ptBone] = db_get_field_assoc_int(Result, var);
format(var, 32, "pt%dPosX",v);
PlayerToyInfo[playerid][v][ptPosX] = db_get_field_assoc_float(Result, var);
format(var, 32, "pt%dPosY",v);
PlayerToyInfo[playerid][v][ptPosY] = db_get_field_assoc_float(Result, var);
format(var, 32, "pt%dPosZ",v);
PlayerToyInfo[playerid][v][ptPosZ] = db_get_field_assoc_float(Result, var);
format(var, 32, "pt%dRotX",v);
PlayerToyInfo[playerid][v][ptRotX] = db_get_field_assoc_float(Result, var);
format(var, 32, "pt%dRotY",v);
PlayerToyInfo[playerid][v][ptRotY] = db_get_field_assoc_float(Result, var);
format(var, 32, "pt%dRotZ",v);
PlayerToyInfo[playerid][v][ptRotZ] = db_get_field_assoc_float(Result, var);
format(var, 32, "pt%dScaleX",v);
PlayerToyInfo[playerid][v][ptScaleX] = db_get_field_assoc_float(Result, var);
format(var, 32, "pt%dScaleY",v);
PlayerToyInfo[playerid][v][ptScaleY] = db_get_field_assoc_float(Result, var);
format(var, 32, "pt%dScaleZ",v);
PlayerToyInfo[playerid][v][ptScaleZ] = db_get_field_assoc_float(Result, var);
}
}
db_free_result(Result);
return 1;
}
stock LoadCharacter(playerid)
{
new DBResult:Result, sz_Query[128];
format(sz_Query, sizeof(sz_Query), "SELECT * FROM `characters` WHERE `userid` = %d", PlayerInfo[playerid][pUserID]);
Result = db_query(Database, sz_Query);
if(db_num_rows(Result))
{
PlayerInfo[playerid][pCharID] = db_get_field_assoc_int(Result, "charid");
db_get_field_assoc(Result, "rp_name", PlayerInfo[playerid][pRPName], MAX_PLAYER_NAME);
PlayerInfo[playerid][pTut] = db_get_field_assoc_int(Result, "tutorial");
PlayerInfo[playerid][pLevel] = db_get_field_assoc_int(Result, "level");
PlayerInfo[playerid][pSex] = db_get_field_assoc_int(Result, "sex");
PlayerInfo[playerid][pAge] = db_get_field_assoc_int(Result, "age");
PlayerInfo[playerid][pExp] = db_get_field_assoc_int(Result, "respect");
SetPVarInt(playerid, "Cash", db_get_field_assoc_int(Result, "money"));
PlayerInfo[playerid][pAccount] = db_get_field_assoc_int(Result, "bank");
PlayerInfo[playerid][pCrimes] = db_get_field_assoc_int(Result, "crimes");
db_get_field_assoc(Result, "accent", PlayerInfo[playerid][pAccent], 32);
PlayerInfo[playerid][pArrested] = db_get_field_assoc_int(Result, "arrested");
PlayerInfo[playerid][pJob] = db_get_field_assoc_int(Result, "job");
PlayerInfo[playerid][pJob2] = db_get_field_assoc_int(Result, "job2");
PlayerInfo[playerid][pPayCheck] = db_get_field_assoc_int(Result, "paycheck");
PlayerInfo[playerid][pJailed] = db_get_field_assoc_int(Result, "jailed");
PlayerInfo[playerid][pLeader] = db_get_field_assoc_int(Result, "leader");
PlayerInfo[playerid][pMember] = db_get_field_assoc_int(Result, "member");
PlayerInfo[playerid][pDivision] = db_get_field_assoc_int(Result, "division");
PlayerInfo[playerid][pFMember] = db_get_field_assoc_int(Result, "family");
PlayerInfo[playerid][pRank] = db_get_field_assoc_int(Result, "rank");
PlayerInfo[playerid][pFightStyle] = db_get_field_assoc_int(Result, "fightstyle");
PlayerInfo[playerid][pHealth] = db_get_field_assoc_float(Result, "health");
PlayerInfo[playerid][pArmor] = db_get_field_assoc_float(Result, "armor");
PlayerInfo[playerid][pSHealth] = db_get_field_assoc_float(Result, "spawn_armor");
PlayerInfo[playerid][pInt] = db_get_field_assoc_int(Result, "interior");
PlayerInfo[playerid][pLocal] = db_get_field_assoc_int(Result, "local");
PlayerInfo[playerid][pVW] = db_get_field_assoc_int(Result, "virtualworld");
PlayerInfo[playerid][pPos_x] = db_get_field_assoc_float(Result, "x");
PlayerInfo[playerid][pPos_y] = db_get_field_assoc_float(Result, "y");
PlayerInfo[playerid][pPos_z] = db_get_field_assoc_float(Result, "z");
PlayerInfo[playerid][pPos_r] = db_get_field_assoc_float(Result, "r");
PlayerInfo[playerid][pModel] = db_get_field_assoc_int(Result, "model");
PlayerInfo[playerid][pPhousekey] = db_get_field_assoc_int(Result, "house");
PlayerInfo[playerid][pPhousekey2] = db_get_field_assoc_int(Result, "house2");
PlayerInfo[playerid][pRenting] = db_get_field_assoc_int(Result, "renting");
PlayerInfo[playerid][pWins] = db_get_field_assoc_int(Result, "wins");
PlayerInfo[playerid][pLoses] = db_get_field_assoc_int(Result, "loses");
PlayerInfo[playerid][pDuty] = db_get_field_assoc_int(Result, "duty");
SetPVarInt(playerid, "Hospital", db_get_field_assoc_int(Result, "hospital"));
PlayerInfo[playerid][pMarried] = db_get_field_assoc_int(Result, "married");
PlayerInfo[playerid][pWantedLevel] = db_get_field_assoc_int(Result, "wanted");
PlayerInfo[playerid][pInsurance] = db_get_field_assoc_int(Result, "insurance");
PlayerInfo[playerid][pPayDay] = db_get_field_assoc_int(Result, "payday");
PlayerInfo[playerid][pPayDayHad] = db_get_field_assoc_int(Result, "paydayhad");
PlayerInfo[playerid][pNoble] = db_get_field_assoc_int(Result, "noble");
PlayerInfo[playerid][pNoble2] = db_get_field_assoc_int(Result, "noble2");
PlayerInfo[playerid][pNoble3] = db_get_field_assoc_int(Result, "noble3");
PlayerInfo[playerid][pNoble4] = db_get_field_assoc_int(Result, "noble4");
PlayerInfo[playerid][pCitizen] = db_get_field_assoc_int(Result, "citizen");
PlayerInfo[playerid][pDispatch] = db_get_field_assoc_int(Result, "dispatch");
PlayerInfo[playerid][pHospital] = db_get_field_assoc_int(Result, "sendtohospital");
PlayerInfo[playerid][pSpeedTix] = db_get_field_assoc_int(Result, "speedtickets");
db_get_field_assoc(Result, "warrants", PlayerInfo[playerid][pWarrant], 128);
PlayerInfo[playerid][pJudgeJailType] = db_get_field_assoc_int(Result, "judgejail");
PlayerInfo[playerid][pBeingSentenced] = db_get_field_assoc_int(Result, "sentenced");
PlayerInfo[playerid][pCallsAccepted] = db_get_field_assoc_int(Result, "callsaccepted");
PlayerInfo[playerid][pPatientsDelivered] = db_get_field_assoc_int(Result, "ptdelivered");
PlayerInfo[playerid][pLiveBanned] = db_get_field_assoc_int(Result, "livebanned");
PlayerInfo[playerid][pFreezeBank] = db_get_field_assoc_int(Result, "bankfroze");
PlayerInfo[playerid][pTogRadio] = db_get_field_assoc_int(Result, "togradio");
PlayerInfo[playerid][pTruckingLevel] = db_get_field_assoc_int(Result, "truckinglevel");
PlayerInfo[playerid][pTruckingXP] = db_get_field_assoc_int(Result, "truckingxp");
PlayerInfo[playerid][pJackAttempts] = db_get_field_assoc_int(Result, "jackattempts");
PlayerInfo[playerid][pBadgeNum] = db_get_field_assoc_int(Result, "badgenumber");
PlayerInfo[playerid][p911sAccepted] = db_get_field_assoc_int(Result, "911accepted");
PlayerInfo[playerid][pArrestsMade] = db_get_field_assoc_int(Result, "arrestmade");
PlayerInfo[playerid][pInfractionsIssued] = db_get_field_assoc_int(Result, "infractionissued");
PlayerInfo[playerid][pEnrolledEZPass] = db_get_field_assoc_int(Result, "ezpass");
PlayerInfo[playerid][pChopShopped] = db_get_field_assoc_int(Result, "chopshopped");
PlayerInfo[playerid][pHouseSpawn] = db_get_field_assoc_int(Result, "housespawn");
PlayerInfo[playerid][pTimedOut] = db_get_field_assoc_int(Result, "timedout");
}
db_free_result(Result);
return 1;
}
I don't see any problem with reading too much data since that doesn't write lock the database, it's most likely due to the fact that you open the database handle in OnGameModeInit and keep it open to be used every where in the gamemode, which usually cases problems like that, I'd rather open the database (and probably print a debug message) > execute the query (and free the result) > close the database.
The debug messages could be placed before every db_open call so it could be easier to track where exactly the problem occurs, for example: