stock savePlayerData(const playerid) {
if(playerVariables[playerid][pStatus] >= 1 || playerVariables[playerid][pStatus] == -1) {
new
saveQuery[3500];
if(playerVariables[playerid][pStatus] == -1) playerVariables[playerid][pStatus] = 0;
if(playerVariables[playerid][pCarModel] >= 1 && doesVehicleExist(playerVariables[playerid][pCarID])) {
GetVehiclePos(playerVariables[playerid][pCarID], playerVariables[playerid][pCarPos][0], playerVariables[playerid][pCarPos][1], playerVariables[playerid][pCarPos][2]);
GetVehicleZAngle(playerVariables[playerid][pCarID], playerVariables[playerid][pCarPos][3]);
for(new i = 0; i < 13; i++) {
playerVariables[playerid][pCarMods][i] = GetVehicleComponentInSlot(playerVariables[playerid][pCarID], i);
}
}
if(playerVariables[playerid][pAdminDuty] == 0 && playerVariables[playerid][pEvent] == 0) {
GetPlayerHealth(playerid, playerVariables[playerid][pHealth]);
GetPlayerArmour(playerid, playerVariables[playerid][pArmour]);
}
// If they're not in an event and not spectating, current pos is saved. Otherwise, they'll be set back to the pos they last used /joinevent or /spec.
if(playerVariables[playerid][pSpectating] == INVALID_PLAYER_ID && playerVariables[playerid][pEvent] == 0) {
GetPlayerPos(playerid, playerVariables[playerid][pPos][0], playerVariables[playerid][pPos][1], playerVariables[playerid][pPos][2]);
playerVariables[playerid][pInterior] = GetPlayerInterior(playerid);
playerVariables[playerid][pVirtualWorld] = GetPlayerVirtualWorld(playerid); // If someone disconnects while spectating.
}
format(saveQuery, sizeof(saveQuery), "UPDATE playeraccounts SET playerBanned = '%d', playerSeconds = '%d', playerSkin = '%d', playerMoney = '%d', playerBankMoney = '%d'", playerVariables[playerid][pBanned], playerVariables[playerid][pSeconds], playerVariables[playerid][pSkin], playerVariables[playerid][pMoney], playerVariables[playerid][pBankMoney]);
format(saveQuery, sizeof(saveQuery), "%s, playerInterior = '%d', playerVirtualWorld = '%d', playerHealth = '%f', playerArmour = '%f', playerPosX = '%f', playerPosY = '%f', playerPosZ = '%f'", saveQuery, playerVariables[playerid][pInterior], playerVariables[playerid][pVirtualWorld], playerVariables[playerid][pHealth], playerVariables[playerid][pArmour], playerVariables[playerid][pPos][0], playerVariables[playerid][pPos][1], playerVariables[playerid][pPos][2]);
format(saveQuery, sizeof(saveQuery), "%s, playerAccent = '%s', playerAdminLevel = '%d', playerJob = '%d', playerWeapon0 = '%d', playerWeapon1 = '%d', playerWeapon2 = '%d', playerWeapon3 = '%d'", saveQuery, playerVariables[playerid][pAccent], playerVariables[playerid][pAdminLevel], playerVariables[playerid][pJob], playerVariables[playerid][pWeapons][0], playerVariables[playerid][pWeapons][1], playerVariables[playerid][pWeapons][2], playerVariables[playerid][pWeapons][3]);
format(saveQuery, sizeof(saveQuery), "%s, playerWeapon4 = '%d', playerWeapon5 = '%d', playerWeapon6 = '%d', playerWeapon7 = '%d', playerWeapon8 = '%d', playerWeapon9 = '%d', playerWeapon10 = '%d'", saveQuery, playerVariables[playerid][pWeapons][4], playerVariables[playerid][pWeapons][5], playerVariables[playerid][pWeapons][6], playerVariables[playerid][pWeapons][7], playerVariables[playerid][pWeapons][8], playerVariables[playerid][pWeapons][9], playerVariables[playerid][pWeapons][10]);
format(saveQuery, sizeof(saveQuery), "%s, playerWeapon11 = '%d', playerWeapon12 = '%d', playerJobSkill1 = '%d', playerJobSkill2 = '%d', playerMaterials = '%d', playerHours = '%d', playerLevel = '%d'", saveQuery, playerVariables[playerid][pWeapons][11], playerVariables[playerid][pWeapons][12], playerVariables[playerid][pJobSkill][0], playerVariables[playerid][pJobSkill][1], playerVariables[playerid][pMaterials], playerVariables[playerid][pPlayingHours], playerVariables[playerid][pLevel]);
format(saveQuery, sizeof(saveQuery), "%s, playerWarning1 = '%s', playerWarning2 = '%s', playerWarning3 = '%s', playerHospitalized = '%d', playerFirstLogin = '%d', playerAdminName = '%s', playerPrisonTime = '%d', playerPrisonID = '%d', playerPhoneNumber = '%d'", saveQuery, playerVariables[playerid][pWarning1], playerVariables[playerid][pWarning2], playerVariables[playerid][pWarning3], playerVariables[playerid][pHospitalized], playerVariables[playerid][pFirstLogin], playerVariables[playerid][pAdminName],
playerVariables[playerid][pPrisonTime], playerVariables[playerid][pPrisonID], playerVariables[playerid][pPhoneNumber]);
format(saveQuery, sizeof(saveQuery), "%s, playerCarPaintJob = '%d', playerCarLock = '%d', playerStatus = '%d', playerGender = '%d', playerFightStyle = '%d', playerCarWeapon1 = '%d', playerCarWeapon2 = '%d', playerCarWeapon3 = '%d', playerCarWeapon4 = '%d', playerCarWeapon5 = '%d', playerCarLicensePlate = '%s'", saveQuery, playerVariables[playerid][pCarPaintjob], playerVariables[playerid][pCarLock],
playerVariables[playerid][pStatus], playerVariables[playerid][pGender], playerVariables[playerid][pFightStyle], playerVariables[playerid][pCarWeapons][0], playerVariables[playerid][pCarWeapons][1], playerVariables[playerid][pCarWeapons][2], playerVariables[playerid][pCarWeapons][3], playerVariables[playerid][pCarWeapons][4], playerVariables[playerid][pCarLicensePlate]);
format(saveQuery, sizeof(saveQuery), "%s, playerCarModel = '%d', playerCarColour1 = '%d', playerCarColour2 = '%d', playerCarPosX = '%f', playerCarPosY = '%f', playerCarPosZ = '%f', playerCarPosZAngle = '%f', playerCarMod0 = '%d', playerCarMod1 = '%d', playerCarMod2 = '%d', playerCarMod3 = '%d', playerCarMod4 = '%d', playerCarMod5 = '%d', playerCarMod6 = '%d'", saveQuery, playerVariables[playerid][pCarModel], playerVariables[playerid][pCarColour][0], playerVariables[playerid][pCarColour][1],
playerVariables[playerid][pCarPos][0], playerVariables[playerid][pCarPos][1], playerVariables[playerid][pCarPos][2], playerVariables[playerid][pCarPos][3], playerVariables[playerid][pCarMods][0], playerVariables[playerid][pCarMods][1], playerVariables[playerid][pCarMods][2], playerVariables[playerid][pCarMods][3], playerVariables[playerid][pCarMods][4], playerVariables[playerid][pCarMods][5], playerVariables[playerid][pCarMods][6]);
format(saveQuery, sizeof(saveQuery), "%s, playerCarTrunk1 = '%d', playerCarTrunk2 = '%d', playerWalkieTalkie = '%d'", saveQuery, playerVariables[playerid][pCarTrunk][0], playerVariables[playerid][pCarTrunk][1], playerVariables[playerid][pWalkieTalkie]);
new saveQuery2[200], saveQuery3[200], saveQuery4[200];
format(saveQuery, sizeof(saveQuery), "%s, playerPhoneBook = '%d', playerGroup = '%d', playerGroupRank = '%d', playerIP = '%s', playerScrapCarTimeout = '%d', playerHotwireTime = '%d', playerRope = '%d', playerToolKit = '%d', playerScrewdriver = '%d', playerMask = '%d', playerVehicleParts = '%d', playerGunLicense = '%d', playerAdminDuty = '%d', playerCrimes = '%d', playerArrests = '%d', playerWarrants = '%d', playerAge = '%d', playerCarMod7 = '%d', playerCarMod8 = '%d', playerCarMod9 = '%d'", saveQuery,
playerVariables[playerid][pPhoneBook], playerVariables[playerid][pGroup], playerVariables[playerid][pGroupRank], playerVariables[playerid][pConnectionIP], playerVariables[playerid][pScrapCarTimeout], playerVariables[playerid][pHotwireTime], playerVariables[playerid][pRope], playerVariables[playerid][pToolKit], playerVariables[playerid][pScrewDriver], playerVariables[playerid][pVehicleParts], playerVariables[playerid][pMask], playerVariables[playerid][pGunLicense], playerVariables[playerid][pAdminDuty],
playerVariables[playerid][pCrimes], playerVariables[playerid][pArrests], playerVariables[playerid][pWarrants], playerVariables[playerid][pAge], playerVariables[playerid][pCarMods][7], playerVariables[playerid][pCarMods][8], playerVariables[playerid][pCarMods][9]);
format(saveQuery2,sizeof(saveQuery2),",playerCarMod10 = '%d', playerCarMod11 = '%d', playerCarMod12 = '%d', playerBoomBox = '%d'",
playerVariables[playerid][pCarMods][10], playerVariables[playerid][pCarMods][11], playerVariables[playerid][pCarMods][12], playerVariables[playerid][pBoomBox]);
strcat(saveQuery,saveQuery2);
format(saveQuery3, sizeof(saveQuery3), "%s, playerCarModel2 = '%d', playerCar2Colour1 = '%d', playerCar2Colour2 = '%d', playerCar2PosX = '%f', playerCar2PosY = '%f', playerCar2PosZ = '%f', playerCar2PosZAngle = '%f', playerCar2Mod0 = '%d', playerCar2Mod1 = '%d', playerCar2Mod2 = '%d', playerCar2Mod3 = '%d', playerCar2Mod4 = '%d', playerCar2Mod5 = '%d', playerCar2Mod6 = '%d'", saveQuery, playerVariables[playerid][pCarModel2], playerVariables[playerid][pCar2Colour][0],
playerVariables[playerid][pCar2Colour][1], playerVariables[playerid][pCar2Pos][0], playerVariables[playerid][pCar2Pos][1], playerVariables[playerid][pCar2Pos][2], playerVariables[playerid][pCar2Pos][3], playerVariables[playerid][pCar2Mods][0], playerVariables[playerid][pCar2Mods][1], playerVariables[playerid][pCar2Mods][2], playerVariables[playerid][pCar2Mods][3], playerVariables[playerid][pCar2Mods][4], playerVariables[playerid][pCar2Mods][5], playerVariables[playerid][pCar2Mods][6]);
strcat(saveQuery,saveQuery3);
format(saveQuery4,sizeof(saveQuery4),",playerCar2Mod10 = '%d', playerCar2Mod11 = '%d', playerCar2Mod12 = '%d', playerCarPaintJob = '%d', playerCarLock = '%d'",
playerVariables[playerid][pCar2Mods][10], playerVariables[playerid][pCar2Mods][11], playerVariables[playerid][pCar2Mods][12], playerVariables[playerid][pCar2Paintjob], playerVariables[playerid][pCar2Lock]);
strcat(saveQuery,saveQuery4);
if(playerVariables[playerid][pHelper] > 0)
format(saveQuery, sizeof(saveQuery), "%s, playerHelperLevel = %d", saveQuery, playerVariables[playerid][pHelper]);
if(playerVariables[playerid][pAdminLevel] > 0)
format(saveQuery, sizeof(saveQuery), "%s, playerAdminPIN = %d", saveQuery, GetPVarInt(playerid, "pAdminPIN"));
format(saveQuery, sizeof(saveQuery), "%s WHERE playerID = '%d'", saveQuery, playerVariables[playerid][pInternalID]);
mysql_query(saveQuery);
}
return 1;
}
UPDATE playeraccounts SET playerBanned = '%d', playerSeconds = '%d', playerMoney = '%d', playerBankMoney = '%d' WHERE playerID = '%d'
UPDATE playeraccounts SET playerBanned=%d,playerSeconds=%d,playerMoney=%d,playerBankMoney=%d WHERE playerID=%d
Yeah, most likely the length of the final text you're trying to fit into the saveQuery array.
I just got to say this: that design is awful, awful and awful once again. 1) You should not UPDATE data which has not been changed (is the same on the save time as it was on the load time). This will save you from updating about 75% of the fields in usual cases I assume. 2) You could as well, in some cases, UPDATE the data when it is changed (in case it changes rarely and cannot be "flooded" by the player). 3) Trying to format large strings into large strings in format() is just slow. strcat() could help you out in any similar (and this) case. Speaking from personal preference, you could also make your queries shorter by removing the unnecessary spacing and unnecessary single quotes. Single quotes do not have to be put around integer values (and I strictly assume that the field playerInterior for example is not a string in your database). So a query like Код:
UPDATE playeraccounts SET playerBanned = '%d', playerSeconds = '%d', playerMoney = '%d', playerBankMoney = '%d' WHERE playerID = '%d' Код:
UPDATE playeraccounts SET playerBanned=%d,playerSeconds=%d,playerMoney=%d,playerBankMoney=%d WHERE playerID=%d |