PDA

Просмотр полной версии : [Вопрос] Бонусы для игроков



Unknown
28.08.2014, 16:25
Проблема системы в том что если 1 день получил бонус на 2 не получаю..


stock Bonus(playerid)
{
if(PlayerInfo[playerid][pProigral]==0)
{
if(PlayerInfo[playerid][pPoluchil]==0)
{
if(PlayerInfo[playerid][pBonusDay]==0)
{
PlayerInfo[playerid][pExp] += 1;
SendClientMessage(playerid,COLOR_LIGHTGREEN,"Вы получили бонус ");
PlayerInfo[playerid][pBonusDay]=1;
PlayerInfo[playerid][pPoluchil]=1; // это значит что игрок получил бонус
new hour,minut,sec;
gettime(hour,minut,sec);//узнаём время
new wremya = 23 - hour;//отнимаем 23 от часа который у игрока сейчас
SetTimer("Obnul",wremya*60*60*1000,false);//запускаем таймер который обнулит переменную получения бонуса
new mtr[144];
format(mtr,144,"Вы сможете получить следующий бонус через {FFFFFF}%d часов",wremya);
SendClientMessage(playerid,COLOR_LIGHTGREEN,mtr);
return true;
}
if(PlayerInfo[playerid][pBonusDay]==1)
{
PlayerInfo[playerid][pExp] += 2;
SendClientMessage(playerid,COLOR_LIGHTGREEN,"Вы получили бонус ");
PlayerInfo[playerid][pBonusDay]=2;
PlayerInfo[playerid][pPoluchil]=1;
new hour,minut,sec;
gettime(hour,minut,sec);
new wremya = 23 - hour;
SetTimer("Obnul",wremya*60*60*1000,false);
new mtr[144];
format(mtr,144,"Вы сможете получить следующий бонус через {FFFFFF}%d часов",wremya);
SendClientMessage(playerid,COLOR_LIGHTGREEN,mtr);
return true;
}
}
}
else
{
if(PlayerInfo[playerid][pBonusDay]!=0)
{
SendClientMessage(playerid,COLOR_LIGHTGREEN,"Чтобы получать бонусы Вы должны играть каждый день. Начинайте с начала.");
PlayerInfo[playerid][pBonusDay]=0;
PlayerInfo[playerid][pPoluchil]=0;
if(PlayerInfo[playerid][pBonusDay]==0)
{
PlayerInfo[playerid][pExp] += 1;
SendClientMessage(playerid,COLOR_LIGHTGREEN,"Вы получили бонус ");
PlayerInfo[playerid][pBonusDay]=1;
PlayerInfo[playerid][pPoluchil]=1;
new hour,minut,sec;
gettime(hour,minut,sec);
new wremya = 23 - hour;
SetTimer("Obnul",wremya*60*60*1000,false);
new mtr[144];
format(mtr,144,"Вы сможете получить следующий бонус через {FFFFFF}%d часов",wremya);
SendClientMessage(playerid,COLOR_LIGHTGREEN,mtr);
return true;
}
}
}
return true;
}

forward Obnul(i);
public Obnul(i)
{
PlayerInfo[i][pPoluchil]=0;//обнулили теперь игрок сможет получить бонус!!
SetTimer("Zawel",1000,true);
return true;
}

forward Zawel(i);
public Zawel(i)
{
prower[i]++;//переменная которая будет считать кол-во раз загружения паблика
if(prower[i]==86400)//если игрок не зашел на сервер за это время (это колво секунд = 24 часам)
{
PlayerInfo[i][pProigral]=1; // устанавливаем игроку что он проиграл и ему прийдёться начать все с начала )
}
if(IsPlayerConnected(i))// а если подключился
{
prower[i]=0; // обнуляем и продолжаем давать бонусы игроку
}
return true;
}

- - - Добавлено - - -

сохронение и т.д все сделал все сохроняет

Salvacore
28.08.2014, 16:42
if(PlayerInfo[playerid][pPoluchil]==0)

PlayerInfo[playerid][pPoluchil]=1; // это значит что игрок получил бонус

Flime
28.08.2014, 17:03
Опишите систему. Сам принцип не ясен.
Как вы собираетесь отслеживать что-то, если у вас игроки меняются, а id остаются. Без записи в таблицу или в фаил ничего не выйдет.
Или задача игрока оставаться на сервере до 24 часов?

Unknown
28.08.2014, 17:11
смысла не понял -_- т.е если я так сделаю то перезайду и получу за 2й день

- - - Добавлено - - -

сейчас опишу

- - - Добавлено - - -

бонус на система по дням если допустим игрок не зашел один день на сервер то ему прийдеться начинать все с начала.

OnPlayerLogin

iniGetInt(File,"BonusDay",PlayerInfo[playerid][pBonusDay]);
iniGetInt(File,"Poluchil",PlayerInfo[playerid][pPoluchil]);
iniGetInt(File,"Proigral",PlayerInfo[playerid][pProigral]);

и т.д где это сохроняем в файл с аккаунтом игрока если игрок получил бонус за 1 день то
pBonusDay=1;
pPoluchil =1;
затем наступил следующий день то игрок должен получить бонус за 2й день
pBonusDay=2;
pPoluchil =1;
но проблема в том что он его не получает хоть и есть этот паблик обнуления "pPoluchil"


forward Obnul(i);
public Obnul(i)
{
PlayerInfo[i][pPoluchil]=0;
SetTimer("Zawel",1000,true);
return true;
}
надеюсь понятно...

DeimoS
28.08.2014, 18:34
Вы в файл записывайте дату получения из getdate, а не получил/не получил. И уже когда игрок хочет получить бонус - проверяйте