mysql problem
#1

When i do restart in server (i am ID 0) after servers starts and everyone spawns it spawns where id0 had quited at
pawn Код:
if(Logged[playerid] == 1 && spawned[playerid] == 1)
    {
        for(new i; i < MAX_PLAYERS; i++)
        {
        GetPlayerPos(i,PlayerData[i][PosX],PlayerData[i][PosY],PlayerData[i][PosZ]);
        PlayerData[i][PosX] = PlayerData[i][PosX];
        PlayerData[i][PosY] = PlayerData[i][PosY];
        PlayerData[i][PosZ] = PlayerData[i][PosZ];
        GetPlayerName(playerid,pname,sizeof(pname));

        format(query,sizeof(query),"UPDATE `accounts` SET `AdminLevel` = %d,`Cash` = %d,`vip` = %d,`Member` = %d,`Leader` = %d,`IsInOrg`= %d,`IsLaw` = %d,`IsGang` = %d,`IsPriv` = %d,`WantedLevel` = %d,`MinutesPlayed` = %d,`HoursPlayed` = %d,`Level` = %d,`Cig`= %d,`Sprunk` = %d,`Snack` = %d,`Lighter` = %d WHERE `Name` = '%s'",
        PlayerData[playerid][AdminLevel],hCash[playerid],PlayerData[playerid][vip],PlayerData[playerid][Member],PlayerData[playerid][Leader],PlayerData[playerid][IsInOrg],PlayerData[playerid][IsLaw],PlayerData[playerid][IsGang],PlayerData[playerid][IsPriv],GetPlayerWantedLevel(playerid),PlayerData[playerid][MinutesPlayed],PlayerData[playerid][HoursPlayed],GetPlayerScore(playerid),PlayerData[playerid][Cig],PlayerData[playerid][Sprunk],PlayerData[playerid][Snack],PlayerData[playerid][Lighter],pname);
        mysql_query(query);

        format(query,sizeof(query),"UPDATE `accounts` SET `FightingStyle` = %d,`Passport` = %d,`Bag` = %d,`GunLicense` = %d,`Job` = %d,`Pot` = %d,`Crack` = %d,`Bank` = %d,`BankAccount` = %d,`CarLicense` = %d,`Fuelcan` = %d,`Civilskin` = %d,`MinutesToNextLevel` = %d,`simcard` = %d,`phone` = %d,`phonebook` = %d WHERE `Name` = '%s'",
        PlayerData[playerid][FightingStyle],PlayerData[playerid][Passport],PlayerData[playerid][Bag],PlayerData[playerid][GunLicense],PlayerData[playerid][Job],PlayerData[playerid][Pot],PlayerData[playerid][Crack],PlayerData[playerid][Bank],PlayerData[playerid][BankAccount],PlayerData[playerid][CarLicense],PlayerData[playerid][Fuelcan],PlayerData[playerid][Civilskin],PlayerData[playerid][MinutesToNextLevel],PlayerData[playerid][simcard],PlayerData[playerid][phone],PlayerData[playerid][phonebook],pname);
        mysql_query(query);

        format(query,sizeof(query),"UPDATE `accounts` SET `X` = %f,`Y` = %f,`Z` = %f,`Interior` = %d,`BoatLicense` = %d,`Banned` = %d,`Achievement` = %d,`vKeys` = %d WHERE `Name` = '%s'",
        X,Y,Z,PlayerData[playerid][Interior],PlayerData[playerid][BoatLicense],PlayerData[playerid][Banned],PlayerData[playerid][Achievement],PlayerData[playerid][vKeys],pname);
        mysql_query(query);
        }
    }
I tryed switching i to playerid but it still spawns where id0 quits. I want help how to make player spawn where they disconnect
Reply
#2

Sorry, but I don't understand it at all.

Where is that code? If it is under OnPlayerDisconnect, why do you loop through all players? If it is under OnGameModeExit, why do you interact with player variables before the loop?

pawn Код:
PlayerData[i][PosX] = PlayerData[i][PosX];
What's the point of this?

You don't even save these values (PlayerData[i][PosX] and [PosY] and [PosZ]). You save X, Y and Z instead.

Saving brings me to another major issue. Why on earth do you save all the variables like that? It is pretty obvious that some of these fields only need modifying once they're actually changed. No point of doing that in OnPlayerDisconnect. Just save variables like score, money, positions and interior. This will help you cut down the number of queries executed per player from 3 to 1.

To shorten your queries even more, keep in mind that only strings need to be in single quotes, not integer values or field names. Turn this:
UPDATE `accounts` SET `X` = %f,`Y` = %f,`Z` = %f,`Interior` = %d,`BoatLicense` = %d,`Banned` = %d,`Achievement` = %d,`vKeys` = %d WHERE `Name` = '%s'
Into this:
UPDATE accounts SET X=%f,Y=%f,Z=%f,Interior=%d,BoatLicense=%d,Banned=% d,Achievement=%d,vKeys=%d WHERE Name='%s'
Reply
#3

Thanks
Reply
#4

pawn Код:
GetPlayerName(playerid,pname,sizeof(pname));

//to


GetPlayerName(i,pname,sizeof(pname));
That would work.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)