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

В теме 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;
}

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

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


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

if(CheckIsADomen(playerid, text))

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

 

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


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

+

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

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

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


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

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

new vadtime[MAX_PLAYERS];


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

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


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

@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 пользователей онлайн

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

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

    • Korochansky
      От Korochansky
      Настало время объявить о скором выпуске первого релиза среды разработки под названием Spawn.

      В настоящее время программа находится на заключительных этапах доработки кода и локализации интерфейса.
      Таким образом, в течение следующей недели будет выпущена быстрая и современная среда разработки, обладающая следующими возможностями (о которых я расскажу сейчас, а о других — позже):
       
      Полнофункциональный локальный Git: 
      Индексирование, фиксации, индикаторы состояния и мягкий/жесткий сброс до любой точки сохранения одним щелчком мыши. Разрабатывайте свой игровой сервер, не боясь его сломать.
      Новички могут рассматривать это как историю кодовой базы вашего сервера (что и есть на самом деле).
       
      Чистый UTF-8 (без BOM): 
      Полный отказ от устаревшей кодировки Windows-1251 (CP1251) для абсолютной стабильности и идеальной совместимости с Git.
      Реализация поддержки CP1251 привела бы к нестабильному поведению программы и ухудшила бы пользовательский опыт.
       
      История изменений строк: Редактор выделяет измененные строки в реальном времени в полях рядом с номерами строк. Это позволяет мгновенно видеть границы изменений, внесенных с момента открытия файла.
       
      Сопоставление и выделение фигурных скобок: мгновенное выделение открывающих и закрывающих фигурных скобок для быстрой навигации по структуре кода и защиты от ошибок компиляции.
       
      Интеграция с SAMPCTL: готовая к использованию автоматизация процессов. Сборка, запуск сервера и менеджер зависимостей (управление библиотеками и плагинами) работают напрямую из интерфейса редактора.
       
      И многое другое...
       
      И самое главное: проект будет с открытым исходным кодом под лицензией GPLv3!
      Следите за новостями о выпуске в репозитории: https://github.com/daniilkorochansky/spawn
    • KodBi
      От KodBi
      шапка
      по одиночке работают
      нужны оба
    • Vova_Zenko
      От Vova_Zenko
      Приветствую всех. Подскажите пожалуйста, как реализовать систему как на Грине или мотион(не реклама). 
       
      Готов оплатить, если найдется человек, который поможет реализовать.