Noleran

Система вип объявлений

В теме 7 сообщений

Всем привет, сегодня я хочу вам представить систему вип объявлений

Для начала, заходим в наш мод, жмем CTRL+F и ищем new. Туда мы вписываем следующее:

new vadtime[MAX_PLAYERS];

Это будет лимит отправки сообщений по времени.

 

Далее переходим к добавлению команды. Ищем строку cmd:.

После команды, которая там стоит добавляем команду подачи объявления:

CMD:vad(playerid, params[])
{
    if(PI[playerid][pVIP] < 7)  //pVIP - ваша переменная на випку, 7 - уровень випки}
        return SCM(playerid, COLOR_RED, NO_DOSTUP_TEXT); //Ваша проверка}

    new text[128];
    if(vadtime[playerid] > gettime())
        return SCM(playerid, COLOR_RED, !"Объявление можно подавать один раз в 1 минуту."); //SCM - SendClientMessage
    if(sscanf(params, "s[128]", text))
        return SCM(playerid, COLOR_RED, !"Используй: /vad [объявление]"); //SCM - SendClientMessage
    if(strlen(text) > 128 || strlen(text) < 10) //Лимит символов
        return SCM(playerid, COLOR_RED, !"Объявление должно содержать от 10 до 128 символов!"); // SCM - SendClientMessage
    if(CheckIsADomen(playerid, text)) return 1;
    {
        SCMAllf(COLOR_BLUE, "[VIP-AD] {FF0000}%s. {FFFFFF}Автор: %s", text, PN(playerid)); //SCMAllf - SendClientMessageToAllf
    }

    vadtime[playerid] = gettime()+60; //Лимит по времени

    return 1;
}

Ну вот и все, если будет много актива то выложу другие системы

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, Noleran сказал:

if(CheckIsADomen(playerid, text))

Хотя бы качественнее вырезайте) Где checkisadomen?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Когда вырезал уже так было, но все работает отлично

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

+

Заметка от Cawfee , создано

Кнопочка "+" в правом нижнем углу текста автора есть. Отмечайте тему как понравившуюся через эту кнопку, чтобы выразить положительные эмоции.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня один вопрос, для чего выделять столько памяти под обычный лимит сообщений?
 

new vadtime[MAX_PLAYERS];


И никого это не смущает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, babyproger сказал:

столько памяти

4 b * 1000 = 4 000 b ~ 4 kB, разве это очень много? 

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

В 28.10.2021 в 12:08, Noleran сказал:

SCMAllf

Как по мне, лучше не использовать таких сокращений, как будто лимит на буквы ввели. Полное название более читаемое

SendClientMessageToAllFormat(...)

В 28.10.2021 в 12:08, Noleran сказал:

PN

Здесь аналогично. 

 

Я бы предложил такой вариант.

Спойлер

new VipAdPlayerCoolDown[MAX_PLAYERS];

CMD:vad(playerid, params[])
{
  if(GetPlayerVipLevel(playerid) < 7)  //pVIP - ваша переменная на випку, 7 - уровень випки
  {
    return SendClientMessage(playerid, COLOR_RED, !"У вас нет VIP"); //Ваша проверка}
  }

  if(HasPlayerVipAdCoolDown(playerid))
  {
    return SendClientMessage(playerid, COLOR_RED, !"Объявление можно подавать один раз в 1 минуту.");
  }

  new text[128];

  if(sscanf(params, "s[128]", text))
  {
    return SendClientMessage(playerid, COLOR_RED, !"Используй: /vad [объявление]");
  }

  if(strlen(text) > 128 || strlen(text) < 10) 
  {
    return SendClientMessage(playerid, COLOR_RED, !"Объявление должно содержать от 10 до 128 символов!"); 
  }

  new formattedText[200], playerName[MAX_PLAYER_NAME];
  GetPlayerName(playerid, playerName, sizeof playerName);
  format(formattedText, sizeof formattedText, "[VIP-AD] {FF0000}%s. {FFFFFF}Автор: %s", text, playerName);
  SendClientMessageToAll(COLOR_BLUE, formattedText); 

  SetPlayerVipAdCoolDown(playerid, 60); // кулдаун 60 сек.

  return 1;
}

GetPlayerVipLevel(playerid)
{
  return PI[playerid][pVip]; // глобальная перменная, в которой лежит VIP уровень для игрока playerid.
}

HasPlayerVipAdCoolDown(playerid)
{
  return VipAdPlayerCoolDown[playerid] > gettime();
}

SetPlayerVipAdCoolDown(playerid, seconds)
{
  VipAdPlayerCoolDown[playerid] = gettime() + seconds;
}

 

Тут используется доступ к глобальным переменным через функции, мне кажется, такой подход лучше чем менять глобальное состояние во всем моде. Так все изменения "стекаются" в одно место, и их можно хоть как-то контролировать. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!


Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.


Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • gooding
      От gooding


      Скачать файл America RP | БОНУСНЫЙ МОД | VEGAS RP
      Приветствую, уважаемый читатель. Я выложил на продажу игровой мод America RolePlay (Основа мода: VEGAS)
      Этот мод представляет из себя доработку старого мода Vegas RP.
       
      Лог изменений и добавлений:
      1. Добавлен красный никнейм для админов.
      2. Исправлено множество багов.
      3. Новый анти-чит.
      4. XL VIP.
      5. Основные привилегии. (Бесконечный VIP Gold, Прокачка Наркозависимости и тд)
      6. Топовые привилегии. (Радужный никнейм, бронированный автомобиль, Supreme наклейка, Неон на автомобиль, Джетпак, VIP-интерьер для дома, Мигающий цвет автомобиля, Анти-Реклама, скин CJ, Цветные скины на оружие)
      7. Исправлены работы. (Тренер, Продукты, Развозчик продуктов, Пожарный, Таксист, Механик)
      8. Новые квесты.
      9. DUBAI ISLAND.
      10. Обновленный интерьер у VIP-домов на DUBAI ISLAND.
      11. Новая админ-зона.
      12. Разнообразие контейнеров на пляже. (From RUSSIA/UAE/BELARUS/UKRAINE и другие)
      13. Кейсы. (Возможность выбить VIP-автомобиль, включая танк - Rhino или Hotring B)
      14. VIP-Автомобили. (Rhino, Monster-Truck, Tractor, Hotring A/B и тд)
      15. Обновленные интерьеры.
      16. Обновленный маппинг.
      17. Добавлены команды для поддерживания экономики. (/server_econom)
      18. Секретные промо-коды. (FREEHELPER, AMERICATOP, RECORD4000)
      19. Новая валюта Euro.
      20. Зарплата на работах выдается в Euro.
      21. Админ-донат. (Можно купить повышение админ-прав и приватные команды: /ban /warn /soz /banip /fdon /goadm /makeleader и другие)
      22. Разнообразие уровней ФД. (/fdon)
      23. Добавлены новые команды для администрации. (/soz, /idea, /ot, /pm)
      24. Умная система ботов. (pawnbots, fakeonline, метки на карте, npc bots)
       
      Добавил gooding Добавлено 30.04.2024 Категория Моды Автор vasёk, gooding  
    • gooding
      От gooding
      Приветствую, уважаемый читатель. Я выложил на продажу игровой мод America RolePlay (Основа мода: VEGAS)
      Этот мод представляет из себя доработку старого мода Vegas RP.
       
      Лог изменений и добавлений:
      1. Добавлен красный никнейм для админов.
      2. Исправлено множество багов.
      3. Новый анти-чит.
      4. XL VIP.
      5. Основные привилегии. (Бесконечный VIP Gold, Прокачка Наркозависимости и тд)
      6. Топовые привилегии. (Радужный никнейм, бронированный автомобиль, Supreme наклейка, Неон на автомобиль, Джетпак, VIP-интерьер для дома, Мигающий цвет автомобиля, Анти-Реклама, скин CJ, Цветные скины на оружие)
      7. Исправлены работы. (Тренер, Продукты, Развозчик продуктов, Пожарный, Таксист, Механик)
      8. Новые квесты.
      9. DUBAI ISLAND.
      10. Обновленный интерьер у VIP-домов на DUBAI ISLAND.
      11. Новая админ-зона.
      12. Разнообразие контейнеров на пляже. (From RUSSIA/UAE/BELARUS/UKRAINE и другие)
      13. Кейсы. (Возможность выбить VIP-автомобиль, включая танк - Rhino или Hotring B)
      14. VIP-Автомобили. (Rhino, Monster-Truck, Tractor, Hotring A/B и тд)
      15. Обновленные интерьеры.
      16. Обновленный маппинг.
      17. Добавлены команды для поддерживания экономики. (/server_econom)
      18. Секретные промо-коды. (FREEHELPER, AMERICATOP, RECORD4000)
      19. Новая валюта Euro.
      20. Зарплата на работах выдается в Euro.
      21. Админ-донат. (Можно купить повышение админ-прав и приватные команды: /ban /warn /soz /banip /fdon /goadm /makeleader и другие)
      22. Разнообразие уровней ФД. (/fdon)
      23. Добавлены новые команды для администрации. (/soz, /idea, /ot, /pm)
      24. Умная система ботов. (pawnbots, fakeonline, метки на карте, npc bots)
       
    • Bolotovka
      От Bolotovka
      Ку, короче при компиляции мода вылазит ошибка fatal error 100: cannot read from file: "gamemode/gardens" самого gardens нету, я бы хотел спросить есть ли он у кого то?
    • SheikhMAN
      От SheikhMAN
      Приветствую коллеги, столкнулся с проблемой считаю что решить её достаточно легко (но мой мозг отказывается думать). 
      Пытаюсь загрузить "Password" в итоге он не загружается по каким-то причинам. Вот сам код.
      new rows;     cache_get_row_count(rows);     cache_get_value_name(0, "Password", player_info[playerid][S_PASSWORD], 32);     if(rows) ShowLogin(playerid);     else ShowRegistration(playerid) Ошибка находится в
       
      public OnPlayerConnect(playerid) {     GetPlayerName(playerid, player_info[playerid][S_NAME], MAX_PLAYER_NAME);     static const fmt_query[] = "SELECT `id` FROM `users` WHERE `name` = '%s'";     new query[sizeof(fmt_query)+(-2+MAX_PLAYER_NAME)];     format(query, sizeof(query), fmt_query, player_info[playerid][S_NAME]);     mysql_tquery(dbHandle, query, "CheckRegistration", "i", playerid);     return 1; }     new rows;     cache_get_row_count(rows);     cache_get_value_name(0, "Password", player_info[playerid][S_PASSWORD], 32);     if(rows) ShowLogin(playerid);     else ShowRegistration(playerid);  
      cache_get_value_name(0, "Password", player_info[playerid][S_PASSWORD], 32); Код ошибки 
      [04/28/24 12:46:40] [ERROR] cache_get_value_name: field 'Password' not found Буду рад всем помогающим, желаю всем добра!