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

Description: Уроки по скриптингу
Moderator: SJplayer

SJplayer M
Topic author, Модератор
Модератор
Avatar
SJplayer M
Topic author, Модератор
Модератор
Reputation: 26
Posts: 184
Joined: 25 May 2013
With us: 5 years 11 months

#1by SJplayer » 3 Jun 2013, 12:01

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

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

Приступим:

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

Code: Select all

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


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

Code: Select all

pBonusDay,
pPoluchil,
pProigral,


ко всем new

Code: Select all

new prower[MAX_PLAYERS];


потом в OnPlayerConnect(playerid)

Code: Select all

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


Теперь в OnPlayerLogin

Code: Select all

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


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

Code: Select all

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


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

Code: Select all

Bonus(playerid);


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

Code: Select all

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()

Code: Select all

    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 KiB) Downloaded 39 times

! ! !


TheSpektor M
Ефрейтор
Ефрейтор
Avatar
TheSpektor M
Ефрейтор
Ефрейтор
Reputation: 9
Posts: 19
Joined: 24 Jan 2015
With us: 4 years 3 months

#2by TheSpektor » 24 Jun 2015, 2:40

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


Return to “Уроки”