PDA

View Full Version : Account Check [Donator]


zT KiNgKoNg
19/05/2013, 07:25 PM
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:


- 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;
}

zT KiNgKoNg
20/05/2013, 12:26 PM
Highly needed, Any help would be great.

zT KiNgKoNg
21/05/2013, 04:05 PM
Still Needed [Major]

zT KiNgKoNg
23/05/2013, 02:44 PM
Still needed.

MiGu3X
23/05/2013, 03:37 PM
Ill later chec the error also use %i instead of %d ... Its a number (integer) ..

SuperViper
23/05/2013, 03:50 PM
Firstly, wrap your values in MySQL queries with ' '.

DELETE FROM `Donators` WHERE Username = '%s'

Secondly, you forgot to specify the player's name as an arguement in format.

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.

Scenario
23/05/2013, 03:52 PM
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.

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.