Раздел навигации

Добро пожаловать!

Зарегистрировавшись у нас, вы сможете обсуждать, делиться и отправлять личные сообщения другим участникам нашего сообщества.

Зарегистрироваться!
  • Если Вы желаете помогать развитию проекта, готовы заполнять раздел(-ы) и подсказывать другим пользователям на портале, есть возможность попасть в команду редакторов. Для этого следует обратиться в техническую поддержку
Новичок
Пользователь
Регистрация
14 Апр 2023
Сообщения
49
Итак,эта команда позволяет выдавать 5000 вирт каждый день
Также я немного все расписал если кто то что-то не понял
Также я еще не так сильно умен в pawn,поэтому не отрицайте меня

C++:
new const BONUS_AMOUNT = 5000;

public OnPlayerCommandText(playerid, cmdtext[])
{
    if(!strcmp("/bonus", cmdtext, true))
    {
        if(!IsPlayerOnline(playerid)) return SendClientMessage(playerid, -1, "Вы не в игре");
        if(!IsPlayerConnected(playerid)) return SendClientMessage(playerid, -1, "Вы не авторизованы");

        if(Player[playerid][LAST_BONUS] != strtime("%d") // Проверяем, получал ли игрок бонус сегодня
        {
            Player[playerid][LAST_BONUS] = strtime("%d"); // Обновляем дату последнего получения бонуса
            GivePlayerCash(playerid, BONUS_AMOUNT); // Выдаем игроку вирты
            SendClientMessage(playerid, -1, "Вы успешно получили бонус в размере " + BONUS_AMOUNT + " вирт");
        }
        else
        {
            SendClientMessage(playerid, -1, "Вы уже получили бонус сегодня, приходите завтра");
        }
    }
    return 1;
}
 
Последнее редактирование модератором:
Создатель WayDev
Команда форума
Администратор
Регистрация
13 Мар 2022
Сообщения
606
И так, разберем код команды и некоторые моменты.
1. strtime - нестандартная функция pawn, из-за чего возникнут ошибки при компиляции кода.
2. IsPlayerOnline - нестандартная функция pawn, из-за чего, опять же, возникнут ошибки при компиляции.
3. Нет никакого пояснения про то, что такое Player и что такое LAST_BONUS.
4. Функция SendClientMessage не имеет возможности форматирования строки в стиле python, php и т.д., поэтому у нее всего 3 аргумента - playerid, color, text[];


Приведем код в рабочий вид. Переменную BONUS_COUNT изменил на дефайн. Так можно использовать без форматирования текста и никаких проблем не должно возникнуть. Функцию IsPlayerOnline отсюда можно вовсе убрать. Всё так же остается проблема с strtime, эту проверку нужно заменить.

C++:
#define BONUS_COUNT (5000)
public OnPlayerCommandText(playerid, cmdtext[])
{
    if(!strcmp("/bonus", cmdtext, true))
    {
        if(!IsPlayerConnected(playerid))
            return SendClientMessage(playerid, -1, "Вы не авторизованы");

        if(Player[playerid][LAST_BONUS] != strtime("%d") // Проверяем, получал ли игрок бонус сегодня
        {
            Player[playerid][LAST_BONUS] = strtime("%d"); // Обновляем дату последнего получения бонуса
            GivePlayerCash(playerid, BONUS_AMOUNT); // Выдаем игроку вирты
            SendClientMessage(playerid, -1, "Вы успешно получили бонус в размере "BONUS_COUNT" вирт");
        }
        else
            SendClientMessage(playerid, -1, "Вы уже получили бонус сегодня, приходите завтра");
    }
    return 1;
}
 
Новичок
Пользователь
Регистрация
14 Апр 2023
Сообщения
49
И так, разберем код команды и некоторые моменты.
1. strtime - нестандартная функция pawn, из-за чего возникнут ошибки при компиляции кода.
2. IsPlayerOnline - нестандартная функция pawn, из-за чего, опять же, возникнут ошибки при компиляции.
3. Нет никакого пояснения про то, что такое Player и что такое LAST_BONUS.
4. Функция SendClientMessage не имеет возможности форматирования строки в стиле python, php и т.д., поэтому у нее всего 3 аргумента - playerid, color, text[];


Приведем код в рабочий вид. Переменную BONUS_COUNT изменил на дефайн. Так можно использовать без форматирования текста и никаких проблем не должно возникнуть. Функцию IsPlayerOnline отсюда можно вовсе убрать. Всё так же остается проблема с strtime, эту проверку нужно заменить.

C++:
#define BONUS_COUNT (5000)
public OnPlayerCommandText(playerid, cmdtext[])
{
    if(!strcmp("/bonus", cmdtext, true))
    {
        if(!IsPlayerConnected(playerid))
            return SendClientMessage(playerid, -1, "Вы не авторизованы");

        if(Player[playerid][LAST_BONUS] != strtime("%d") // Проверяем, получал ли игрок бонус сегодня
        {
            Player[playerid][LAST_BONUS] = strtime("%d"); // Обновляем дату последнего получения бонуса
            GivePlayerCash(playerid, BONUS_AMOUNT); // Выдаем игроку вирты
            SendClientMessage(playerid, -1, "Вы успешно получили бонус в размере "BONUS_COUNT" вирт");
        }
        else
            SendClientMessage(playerid, -1, "Вы уже получили бонус сегодня, приходите завтра");
    }
    return 1;
}
проверку можно заменить на это
Код:
if(Player[playerid][LAST_BONUS] == 0 || (gettime() - Player[playerid][LAST_BONUS]) > 24 * 60 * 60)
 
Сверху