Account Check [Donator]
#1

I've just started my donator system and i've made it so it checks if the player is vip or not when they spawn, If they're vip it then checks the expiration date and removes them from the donators list after the 30 days has gone, But if they're still vip with lets say 25 days left i wan't it to show they've got 25 days left and i've coded it that way but for some reason it isn't showing up.

Let me add, Its inserting into the database table correctly with the correct date and expiration date.


Code:
pawn Код:
- OnPlayerSpawn -

CheckAccountDonator(playerid);

 -Checking -

stock CheckAccountDonator(playerid)
{
    new bExpiration;

    format(Query, sizeof(Query), "SELECT * FROM `Donators` WHERE (Username = '%s') AND status = 1", GetPName(playerid), GetIP(playerid));
    mysql_query(Query);
    mysql_store_result();
    if(mysql_num_rows() >= 1)
    {
        while(mysql_fetch_row_format(Query,"|"))
        {
            mysql_fetch_field_row(Query, "Expiration"); bExpiration = strval(Query);

            if(bExpiration > 0)
            {
                if(gettime() >= bExpiration)
                {
                    format(Query, sizeof(Query), "DELETE FROM `Donators` WHERE Username = %s", GetPName(playerid));
                    mysql_query(Query);
                    SendClientMessage(playerid,-1,"Your time as a Donator has run out and you've been removed from donator status");
                    pData[playerid][DonatorLevel] = 0;
                }
                else
                {
                    new string[100];
                    format(string, sizeof(string),"Welcome Back, %s you've got %d days level as a donator",(bExpiration-gettime())/2592000);
                    SendClientMessage(playerid,-1,string);
                }
            }
        }
        return 1;
    }
    return 0;
}
Reply
#2

Highly needed, Any help would be great.
Reply
#3

Still Needed [Major]
Reply
#4

Still needed.
Reply
#5

Ill later chec the error also use %i instead of %d ... Its a number (integer) ..
Reply
#6

Firstly, wrap your values in MySQL queries with ' '.

pawn Код:
DELETE FROM `Donators` WHERE Username = '%s'
Secondly, you forgot to specify the player's name as an arguement in format.

pawn Код:
format(string, sizeof(string),"Welcome Back, %s you've got %d days level as a donator", GetPName(playerid), (bExpiration-gettime())/2592000);
Thirdly, 2592000 is a month in seconds and 86400 is a day.
Reply
#7

Your query was wrong, and so was the way you were loading the information. mysql_fetch_row_format() would be used if you were planning to split the data with sscanf, or, as the name suggests, the "split" function.

Also, on your SendClientMessage line you listed a %s and a %d. You didn't fill in any variable to replace the %s with, so it made the time your %s and %d was nothing.

pawn Код:
stock CheckAccountDonator(playerid)
{
    new bExpiration;

    format(Query, sizeof(Query), "SELECT * FROM `Donators` WHERE Username = '%s' AND status = 1", GetPName(playerid), GetIP(playerid));
    mysql_query(Query);
   
    mysql_store_result();
    if(mysql_num_rows() >= 1)
    {
        while(mysql_fetch_row())
        {
            mysql_fetch_field_row(Query, "Expiration"); bExpiration = strval(Query);

            if(bExpiration > 0)
            {
                if(gettime() >= bExpiration)
                {
                    format(Query, sizeof(Query), "DELETE FROM `Donators` WHERE Username = %s", GetPName(playerid));
                    mysql_query(Query);
                    SendClientMessage(playerid,-1,"Your time as a Donator has run out and you've been removed from donator status");
                    pData[playerid][DonatorLevel] = 0;
                }
                else
                {
                    new string[100];
                    format(string, sizeof(string),"Welcome Back, %s you've got %d days level as a donator",(bExpiration-gettime())/2592000);
                    SendClientMessage(playerid,-1,string);
                }
            }
        }
    }
    mysql_free_result(); // you need to be calling this!
    return 0;
}
Furthermore, MiGu3X, you're wrong. %d and %i are basically the same thing.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)