Not saving
#1

My mysql saving for players doesnt save, Does anyone see anything wrong with this?

pawn Код:
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;
}
Reply
#2

Can you place your mysql_log.txt here please.
Reply
#3

try to disable cache
Reply
#4

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'
could easily become
Код:
UPDATE playeraccounts SET playerBanned=%d,playerSeconds=%d,playerMoney=%d,playerBankMoney=%d WHERE playerID=%d
Reply
#5

Quote:
Originally Posted by AndreT
Посмотреть сообщение
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'
could easily become
Код:
UPDATE playeraccounts SET playerBanned=%d,playerSeconds=%d,playerMoney=%d,playerBankMoney=%d WHERE playerID=%d
I know Im going to be a pain but could you show me and example of what you mean? Like strcat().
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)