MySQL Doesn't Save when Player Disconnects
#1

hello guys. Park4Bmx just fixed my problem about "String buffer overflow" so thanks to him. but there is a new problem that i noticed. when player got all information he had

I Setted on database
pawn Код:
Money: 7500
BankCash: 7500
Cash: 7500
RegularPlayer: 1
CIAPlayer: 1
ArmyPlayer: 1
Thats my example i setted on Database. when player log outs. i checked the database again and shows player information as


When Player Disconnects
pawn Код:
Money: 0
BankCash: 0
Cash: 0
RegularPlayer: 0
CIAPlayer: 0
ArmyPlayer: 0
So can anyone help me? here is my OnplayerDisconnect
pawn Код:
public OnPlayerDisconnect(playerid, reason)
{
    new pip[128];
    GetPlayerIp(playerid, pip, sizeof(pip));
    new query[1024];
    format(query, sizeof(query), "UPDATE users SET \
    Money = '%d', \
    Bankcash = '%d',\
    Cash = '%d',\
    Score = '%d',\
    Adminlevel = '%d',\
    Army = '%d',\
    CIA = '%d',\
    RegularPlayer = '%d',\
    DrugHouseOwner = '%d',\
    OttoOwner = '%d',\
    TSkill = '%d',\
    RobSkill = '%d' ,\
    HasPackC4 = '%d',\
    HasPackRope = '%d',\
    HasPackMoney = '%d', \
    SavedWantedLevel = '%d' ,\
    SavedJailTime = '%d',\
    Coprank = '%d',\
    HoursPlayed = '%d',\
    MinutesPlayed = '%d',\
    SecondsPlayed = '%d',\
    IpAdress = '%s'\
    WHERE Username = '%s'"
,
    GetPlayerMoney(playerid),
    BankCash[playerid],
    GetPlayerMoney(playerid),
    GetPlayerScore(playerid),
    AdminLevel[playerid],
    CanUseArmy[playerid],
    CanUseCIA[playerid],
    IsRegularPlayer[playerid],
    DrugHouseOwner[playerid],
    OttoOwner[playerid],
    TerroristSkill[playerid],
    RobSkill[playerid],
    HasPackC4[playerid],
    HasPackRope[playerid],
    HasPackMoney[playerid],
    SavedWantedLevel[playerid],
    SavedJailTime[playerid],
    Coprank[playerid],
    TotalPlayedTime[playerid][0],
    TotalPlayedTime[playerid][1],
    TotalPlayedTime[playerid][2],
    pip,
    PlayerName(playerid));
    mysql_query(query);
    return 1;
}
Reply
#2

You have to use %d not '%d'
and why the fuck are you using / after each parameter.

pawn Код:
public OnPlayerDisconnect(playerid, reason)
{
    new pip[128];
    GetPlayerIp(playerid, pip, sizeof(pip));
    new query[1024];
    format(query, sizeof(query), "UPDATE `users` SET `Money` = %d, `Bankcash` = %d, `Cash` = %d, `Score` = %d, `Adminlevel` = %d, `Army` = %d, `CIA` = %d, `RegularPlayer` = %d, `DrugHouseOwner` = %d, `OttoOwner` = %d, `TSkill` = %d, `RobSkill` = %d , `HasPackC4` = %d, `HasPackRope` = %d, `HasPackMoney` = %d,  `SavedWantedLevel` = %d , `SavedJailTime` = %d, `Coprank` = %d, `HoursPlayed` = %d, `MinutesPlayed` = %d, `SecondsPlayed` = %d, `IpAdress` = '%s' WHERE `Username` = '%s'",
    GetPlayerMoney(playerid),
    BankCash[playerid],
    GetPlayerMoney(playerid),
    GetPlayerScore(playerid),
    AdminLevel[playerid],
    CanUseArmy[playerid],
    CanUseCIA[playerid],
    IsRegularPlayer[playerid],
    DrugHouseOwner[playerid],
    OttoOwner[playerid],
    TerroristSkill[playerid],
    RobSkill[playerid],
    HasPackC4[playerid],
    HasPackRope[playerid],
    HasPackMoney[playerid],
    SavedWantedLevel[playerid],
    SavedJailTime[playerid],
    Coprank[playerid],
    TotalPlayedTime[playerid][0],
    TotalPlayedTime[playerid][1],
    TotalPlayedTime[playerid][2],
    pip,
    PlayerName(playerid));
    mysql_query(query);
    return 1;
}
Reply
#3

Chill out man :P
Its my first time using MySQL.

Thanks Alot it works.

Maybe if you can also help me out. when pllayer disconnects. it works 'it saved' when player log's in the money he had and score didn't save here's my login stock

pawn Код:
stock LoginPlayer(playerid,const password[])
{
    new Query[256];
    new EscapedText[129];
    mysql_real_escape_string(password, EscapedText);
    format(Query,sizeof(Query),"SELECT * FROM `Users` WHERE `Username` = '%s' AND `Password` = '%s'",PlayerName(playerid),EscapedText);
    mysql_query(Query);
    mysql_store_result();
    if(mysql_num_rows() != 0)
    {
        new pName[24],money,score,user[24],pass[129],pIp[17]/*16 characters plus a null on‌e = 17*/,banned;
        GetPlayerName(playerid,pName,24);
        format(Query, sizeof(Query), "SELECT * FROM `Users` WHERE `Username` = '%s' ", pName);
        mysql_query(Query);
        mysql_store_result();
        mysql_fetch_row_format(Query, "|");
        sscanf(Query, "s[24]s[128]iiiiiiiiiiiiiiiiiiiis[17]i", user, pass,money,score, BankCash[playerid],CanUseArmy[playerid],CanUseCIA[playerid],AdminLevel[playerid],IsRegularPlayer[playerid],NameBanned[playerid],DrugHouseOwner[playerid],OttoOwner[playerid],TerroristSkill[playerid],RobSkill[playerid],HasPackC4[playerid],HasPackRope[playerid],HasPackMoney[playerid],
        SavedWantedLevel[playerid],SavedJailTime[playerid],Coprank[playerid],TotalPlayedTime[playerid][0],TotalPlayedTime[playerid][1],TotalPlayedTime[playerid][2],pIp,banned);
        GivePlayerMoney(playerid,money);//sets player money to last money he has
        SetPlayerScore(playerid, score);//sets player score's to last score he has
        mysql_free_result();
        PLAYERLIST_authed[playerid]=true;
        return SendClientMessage(playerid,COLOR_LIGHTBLUE,"You have successfully logged in! Your previous stats have been restored.");
    }
    //CheckPasswordAttempts(playerid);
    //ShowLoginScreen(playerid);
    return 1;
}
Reply
#4

-removed- Didn't notice the piece of code before mysql_free_result-
You might want to debug the code, and print out the money value.
In the loading stock, add print(money); and print(score); , then, when you log in, check the console
Reply
#5

@Jari_Johnson* ill try it

My Print debuging code
pawn Код:
new string[128];
format(string,128,"%d %d",money,score);
print(string);
and print's this on console

Код:
[13:27:54] 0 0

1st 0 = money
2nd 0 = score
Reply
#6

That means the mysql query isn't loaded in the variables correctly..
Is this only for money and score, or also for the other variables?
Reply
#7

This is only for mysql variable. i only used this. as Park4Bmx told me. try to do that way to load player's money and score . but it doesn't so thats why i asked on forums.
Reply
#8

Why don't you use cache.. very simple.
Reply
#9

There is a new version available for MySQL in pawn. This version is faster and doesn't require the use of the sscanf variable.

Now, to get back to your point:

You are pushing your QUERY variable through your sscanf, not your actual query.
Reply
#10

Quote:
Originally Posted by PaulDinam
Посмотреть сообщение
You have to use %d not '%d'
and why the fuck are you using / after each parameter.

pawn Код:
public OnPlayerDisconnect(playerid, reason)
{
    new pip[128];
    GetPlayerIp(playerid, pip, sizeof(pip));
    new query[1024];
    format(query, sizeof(query), "UPDATE `users` SET `Money` = %d, `Bankcash` = %d, `Cash` = %d, `Score` = %d, `Adminlevel` = %d, `Army` = %d, `CIA` = %d, `RegularPlayer` = %d, `DrugHouseOwner` = %d, `OttoOwner` = %d, `TSkill` = %d, `RobSkill` = %d , `HasPackC4` = %d, `HasPackRope` = %d, `HasPackMoney` = %d,  `SavedWantedLevel` = %d , `SavedJailTime` = %d, `Coprank` = %d, `HoursPlayed` = %d, `MinutesPlayed` = %d, `SecondsPlayed` = %d, `IpAdress` = '%s' WHERE `Username` = '%s'",
    GetPlayerMoney(playerid),
    BankCash[playerid],
    GetPlayerMoney(playerid),
    GetPlayerScore(playerid),
    AdminLevel[playerid],
    CanUseArmy[playerid],
    CanUseCIA[playerid],
    IsRegularPlayer[playerid],
    DrugHouseOwner[playerid],
    OttoOwner[playerid],
    TerroristSkill[playerid],
    RobSkill[playerid],
    HasPackC4[playerid],
    HasPackRope[playerid],
    HasPackMoney[playerid],
    SavedWantedLevel[playerid],
    SavedJailTime[playerid],
    Coprank[playerid],
    TotalPlayedTime[playerid][0],
    TotalPlayedTime[playerid][1],
    TotalPlayedTime[playerid][2],
    pip,
    PlayerName(playerid));
    mysql_query(query);
    return 1;
}
"and why the fuck are you using / after each parameter."

Really ? Can't you talk normally ? If you don't know what they are for just ask not "omfg u sch n0b y th fuck u use those i don't even know wht they are forrrr" If you actually don't put that the query won't continue.. it will count it as for example Coprank[playerid] and not the query.. try it out and see if you don't put \ what happens..
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)