Daily bonus. -
xPirate - 20.07.2015
Hello.
I seem to have a problem here, regarding Daily Bonuses when the player logs into his account or registers.
Basically, every 24 hours, after the player logs in he will recieve score, money..
That's not a problem.
However i don't know how to check each 24 hours, i made a script which doesn't seem to be working.
The saving system is MySQL, but i think this can be done without saving, which i would prefer if possible.
Код:
function CheckDailyBonus(playerid)
{
if(PInfo[playerid][TotalTime] % 24 == 0)
{
GivePlayerMoney(playerid, 50000);
GivePlayerScore(playerid, 20);
new string[128];
format(string,sizeof(string),"[+] "CBLUE"%s(%i) has collected "CGREEN"Daily bonus"CBLUE".",GetPName(playerid),playerid);
SendClientMessageToAll(COL_GREEN, string);
ShowBonusTDs(playerid);
}
else
{
return 1;
}
}
And then here i have the online time that's constantly counting.
Код:
TotalGameTime(playerid, &h = 0, &m = 0)
{
PInfo[playerid][TotalTime] = ( (gettime() - PInfo[playerid][ConnectTime]) + (PInfo[playerid][PlayedHours]*60*60) + (PInfo[playerid][PlayedMins]*60) );
h = floatround(PInfo[playerid][TotalTime] / 3600, floatround_floor);
m = floatround(PInfo[playerid][TotalTime] / 60, floatround_floor) % 60;
return PInfo[playerid][TotalTime];
}
Any help appreciated.
Re: Daily bonus. [+REP] -
xVIP3Rx - 20.07.2015
That'll give a bonus every day.
pawn Код:
new RecivedBonusOn[MAX_PLAYERS];//or use an enum(Must save it!)
public OnPlayerConnect(playerid)
{
if(RecivedBonusOn[playerid] && RecivedBonusOn[playerid] != getdate())
{
GivePlayerMoney(playerid, 50000);
GivePlayerScore(playerid, 20);
new string[128];
format(string,sizeof(string),"[+] "CBLUE"%s(%i) has collected "CGREEN"Daily bonus"CBLUE".",GetPName(playerid),playerid);
SendClientMessageToAll(COL_GREEN, string);
ShowBonusTDs(playerid);
RecivedBonusOn[playerid] = getdate();
}
return 1;
}
Re: Daily bonus. [+REP] -
xPirate - 20.07.2015
Thanks i'll try that, if not i'll reply tomorrow.
Re: Daily bonus. [+REP] -
xPirate - 21.07.2015
Doesn't seem to be working, or i misunderstood you.
I stored the variable with MySQL.
Код:
stock SaveBonus(playerid)
{
new TempQuery[565], TempQuery2[570];
strcat(TempQuery2,"UPDATE "Bonus_Table" SET RecievedDailyBonus = '%i' WHERE Username = '%s'");
format(TempQuery,sizeof TempQuery,TempQuery2, BInfo[playerid][RecievedDailyBonus], GetPName(playerid));
mysql_query(TempQuery);
return 1;
}
stock LoadBonus(playerid)
{
format(gQuery,sizeof gQuery,"SELECT * FROM "Bonus_Table" WHERE Username = '%s'",GetPName(playerid));
mysql_query(gQuery);
mysql_store_result();
mysql_fetch_row_format(gQuery);
return 1;
}
Saving / Loading ^^
Код:
function GiveDailyBonus(playerid)
{
if(BInfo[playerid][RecievedDailyBonus] && BInfo[playerid][RecievedDailyBonus] != getdate())
{
GivePlayerMoney(playerid, 50000);
GivePlayerScore(playerid, 20);
new string[128];
format(string,sizeof(string),"[+] "CBLUE"%s(%i) has collected "CGREEN"Daily bonus"CBLUE".",GetPName(playerid),playerid);
SendClientMessageToAll(COL_GREEN, string);
ShowBonusTDs(playerid);
BInfo[playerid][RecievedDailyBonus] = getdate();
}
return 1;
}
Код:
public OnPlayerConnect(playerid)
{
BInfo[playerid][RecievedDailyBonus] = 0;
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
SaveBonus(playerid);
return 1;
}
public OnPlayerSpawn(playerid)
{
LoadBonus(playerid);
GiveDailyBonus(playerid);
return 1;
}
Код:
enum BonusInfo
{
RecievedDailyBonus
};
new BInfo[MAX_PLAYERS][BonusInfo];