Daily bonus.
#1

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.
Reply
#2

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;
}
Reply
#3

Thanks i'll try that, if not i'll reply tomorrow.
Reply
#4

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];
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)