Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Урок Система бонуса (аналогов в САМП нету)

Статус
В этой теме нельзя размещать новые ответы.

Darge

Умник
Это второй вариант системы бонуса. В нем теперь нету таких недочетов как в прошлой версии. Вся суть - игра переменных.

PHP:
// как простой пример
if(a == 0)
{
    if(b == 0)
    {
        a++;
    }
}

Если:
  • игрок не не получал бонуса, то после рестарта сервер его показатели обнулятся.
  • игрок получал бонус, то его обнулиться все, кроме количества пройденных дней, что даст ему возможно перейти к следующему дню.

Не забываем подключить foreach.inc.

База данных:
Тут мы добавляем 2 колонки. Первая - player_bonus, тип INT, максимальное количество символов 1 и day_of_bonus, тип INT, максимальное количество символов 1

Непосредственно код:
Ко всем переменным добавим

PHP:
new player_bonus[MAX_PLAYERS],
    day_of_bonus[MAX_PLAYERS];
Далее, добавим stock. Он будет вызываться только тогда, когда игрок авторизуется. Добавим в конец вашего мода.

PHP:
stock GivePlayerBonus(playerid)
{
    player_bonus[playerid] = cache_get_field_content_int(0, "player_bonus", <MySQL>);
    day_of_bonus[playerid] = cache_get_field_content_int(0, "day_of_bonus", <MySQL>);

    if(player_bonus[playerid] == 0)
    {// когда то пропустил бонус

    }
    else if(player_bonus[playerid] == 1)
    {// первый день боуса
        if(day_of_bonus[playerid] == 0)
        {// сегодня он не получал бонуса
        
            // ...
    
            day_of_bonus[playerid] = 1;
            player_bonus[playerid]++;
            SaveBonusInformation(playerid);
        }
    }
    else if(player_bonus[playerid] == 2)
    {// второй день боуса
        if(day_of_bonus[playerid] == 0)
        {// сегодня он не получал бонуса
        
            // ...
    
            day_of_bonus[playerid] = 1;
            player_bonus[playerid]++;
            SaveBonusInformation(playerid);
        }
    }
    else if(player_bonus[playerid] == 3)
    {// третий день боуса
        if(day_of_bonus[playerid] == 0)
        {// сегодня он не получал бонуса
        
            // ...    
            
            day_of_bonus[playerid] = 1;
            player_bonus[playerid]++;
            SaveBonusInformation(playerid);
        }
    }
    else if(player_bonus[playerid] == 4)
    {// четвертый день боуса
        if(day_of_bonus[playerid] == 0)
        {// сегодня он не получал бонуса
        
            // ...    
            
            day_of_bonus[playerid] = 1;
            player_bonus[playerid]++;
            SaveBonusInformation(playerid);
        }
    }
    else if(player_bonus[playerid] == 5)
    {// пятый день боуса
        if(day_of_bonus[playerid] == 0)
        {// сегодня он не получал бонуса
        
            // ...    
            
            day_of_bonus[playerid] = 1;
            player_bonus[playerid]++;
            SaveBonusInformation(playerid);
        }
    }
    else if(player_bonus[playerid] == 6)
    {// шестой день боуса
        if(day_of_bonus[playerid] == 0)
        {// сегодня он не получал бонуса
    
            // ...
    
            day_of_bonus[playerid] = 1;
            player_bonus[playerid]++;
            SaveBonusInformation(playerid);
        }
    }    
    else if(player_bonus[playerid] == 7)
    {// последний седьмой день боуса
        if(day_of_bonus[playerid] == 0)
        {// сегодня он не получал бонуса

            // ...
    
            day_of_bonus[playerid] = 1;
            player_bonus[playerid] = 0;
            SaveBonusInformation(playerid);
        }
    }
}
Теперь добавим GivePlayerBonus(playerid) в коллбэк, когда игрок авторизовался.

Это опять же в конец вашего мода. Ведь нам нужно сохранить наш результат?

PHP:
stock SaveBonusInformation(playerid)
{     
    if(player_bonus[playerid] > 0 &&  day_of_bonus[playerid] == 1)
    {    
        new 
            query[MAX_PLAYER_NAME+3]= "UPDATE `таблица` SET",
            player_name[MAX_PLAYER_NAME];
            
        GetPlayerName(playerid, player_name, sizeof(player_name));
        format(query, sizeof(query), "%s `player_bonus` = '%d'", query, player_bonus[playerid]);
        format(query, sizeof(query), "%s `day_of_bonus` = '%d'", query, day_of_bonus[playerid]);
        format(query, sizeof(query), "%s WHERE `столбец` = '%s'", query, player_name);
        mysql_function_query(<MySQL>, query, false, "", "");
    }
    return 1;
}

stock NonBonus(playerid)
{
    if(player_bonus[playerid] > 0 && day_of_bonus[playerid] == 0)
    {
        new 
            query[MAX_PLAYER_NAME+3]= "UPDATE `таблица` SET",
            player_name[MAX_PLAYER_NAME];
            
        GetPlayerName(playerid, player_name, sizeof(player_name));
        format(query, sizeof(query), "%s `player_bonus` = '0'", query);
        format(query, sizeof(query), "%s `day_of_bonus` = '0'", query);
        format(query, sizeof(query), "%s WHERE `столбец` = '%s'", query, player_name);
        mysql_function_query(<MySQL>, query, false, "", "");
    }
    else if(player_bonus[playerid] > 0 && day_of_bonus[playerid] == 1)
    {
        new 
            query[MAX_PLAYER_NAME+3]= "UPDATE `таблица` SET",
            player_name[MAX_PLAYER_NAME];
            
        GetPlayerName(playerid, player_name, sizeof(player_name));
        format(query, sizeof(query), "%s `player_bonus` = '%d'", query, player_bonus[playerid]);
        format(query, sizeof(query), "%s `day_of_bonus` = '0'", query);
        format(query, sizeof(query), "%s WHERE `столбец` = '%s'", query, player_name);
        mysql_function_query(<MySQL>, query, false, "", "");
    }
    return 1;
}
stock NonBonusEx()
{
    foreach(Player, i)
    {
        NonBonus(i);
    }
    return 1;
}
Теперь в OnGameModeExit добавим NonBonusEx().
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу