Делаем бонус систему по дням

Описание: Уроки по скриптингу
Модератор: SJplayer

SJplayer M
Автор темы, Модератор
Модератор
Аватара
SJplayer M
Автор темы, Модератор
Модератор
Сообщения: 196
Зарегистрирован: 25 мая 2013
С нами: 10 лет 10 месяцев

#1 SJplayer » 3 июня 2013, 12:01

Делаем бонус систему по дням
Автор: Yurik_Jakson

И так, придумал систему не я но воплотил её в реальность. Это как в играх заходи каждый день чтобы получать бонусы.

Приступим:

Для начала после всех инклудов #include вставим это (фунция которая позволит нам писать SCM а не SendClientMessage)

Код: Выделить всё

stock SCM(playerid,color,string[])
{
    SendClientMessage(playerid,color,string);
    return true;
}
#define SendClientMessage SCM     


потом добавим в enum pInfo

Код: Выделить всё

pBonusDay,
pPoluchil,
pProigral,


ко всем new

Код: Выделить всё

new prower[MAX_PLAYERS];


потом в OnPlayerConnect(playerid)

Код: Выделить всё

PlayerInfo[playerid][pBonusDay]=0;
PlayerInfo[playerid][pPoluchil]=0;
PlayerInfo[playerid][pProigral]=0;


Теперь в OnPlayerLogin

Код: Выделить всё

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


ну и в OnPlayerRegister, OnPlayerUpdate(или как там у Вас)

Код: Выделить всё

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


теперь в паблик OnPlayerSpawn(playerid)

Код: Выделить всё

Bonus(playerid);


Теперь приступим к созданию паблика который будет отвечать за бонус

Код: Выделить всё

forward Bonus(playerid);
public Bonus(playerid)
{
    if(PlayerInfo[playerid][pProigral]==0)
    {
        if(PlayerInfo[playerid][pPoluchil]==0)
        {
            if(PlayerInfo[playerid][pBonusDay]==0)
            {
                //здесь то что будете давать игроку
                SCM(playerid,COLOR_LIGHTGREEN,"{FFFFFF} День 1/5");// сообщение
                PlayerInfo[playerid][pBonusDay]=1;
                PlayerInfo[playerid][pPoluchil]=1;
            }
            else if(PlayerInfo[playerid][pBonusDay]==1)
            {
                //и здесь 
                SCM(playerid,COLOR_LIGHTGREEN,"{FFFFFF} День 2/5");// сообщение
                PlayerInfo[playerid][pBonusDay]=2;
                PlayerInfo[playerid][pPoluchil]=1;
            }
            else if(PlayerInfo[playerid][pBonusDay]==2)
            {
                //и здесь 
                SCM(playerid,COLOR_LIGHTGREEN,"{FFFFFF} День 3/5");// сообщение
                PlayerInfo[playerid][pBonusDay]=3;
                PlayerInfo[playerid][pPoluchil]=1;
            }
            else if(PlayerInfo[playerid][pBonusDay]==3)
            {
                //и здесь 
                SCM(playerid,COLOR_LIGHTGREEN,"{FFFFFF} День  4/5");// сообщение
                PlayerInfo[playerid][pBonusDay]=4;
                PlayerInfo[playerid][pPoluchil]=1;
            }
            else if(PlayerInfo[playerid][pBonusDay]==4)
            {
                //и здесь 
                SCM(playerid,COLOR_LIGHTGREEN,"{FFFFFF} День  5/5");// сообщение
                PlayerInfo[playerid][pBonusDay]=0;
                PlayerInfo[playerid][pPoluchil]=1;
            }
        }
    }
    else
    
{
        if(PlayerInfo[playerid][pBonusDay]!=0)
        {
            SCM(playerid,COLOR_LIGHTGREEN,"Чтоб получать бонусы Вы должны играть кадый день. Начните с начала.");// сообщение
            PlayerInfo[playerid][pBonusDay]=0;
            PlayerInfo[playerid][pPoluchil]=0;
            if(PlayerInfo[playerid][pBonusDay]==0)
            {
                //и здесь 
                SCM(playerid,COLOR_LIGHTGREEN,"{FFFFFF} День 1/5");// сообщение
                PlayerInfo[playerid][pBonusDay]=1;PlayerInfo[playerid][pPoluchil]=1;
            }
        }
    }
    return true;
}

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


ну и последнее в OnGameModeInit()

Код: Выделить всё

    new hour,minute,second;
    gettime(hour,minute,second);
    for(new i=0; i<GetMaxPlayers(); i++)
    {
        if(hour==24)
        {
            SetTimer("Zawel",1000,true);// стартует проверку паблика зашел ли игрок.
            PlayerInfo[i][pPoluchil]=0;// обнуляет переменную которая даёт возможность получить бонус
        }
    }


Система полностью рабочая с INI сохранением

Далее прикреплен файл .PWN с бонус системой по дням и простенькой регистрацией на INI
Untitled.zip
(2.69 КБ) 202 скачивания


TheSpektor M
Ефрейтор
Ефрейтор
Аватара
TheSpektor M
Ефрейтор
Ефрейтор
Сообщения: 19
Зарегистрирован: 24 января 2015
С нами: 9 лет 2 месяца

#2 TheSpektor » 24 июня 2015, 2:40

Полезно! Взял. Спасибо.)


Вернуться в «Уроки»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 4 гостя