Sign in to follow this  
Followers 0
Noleran

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

7 posts in this topic

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

Для начала, заходим в наш мод, жмем 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;
}

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

Share this post


Link to post
Share on other sites
1 час назад, Noleran сказал:

if(CheckIsADomen(playerid, text))

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

 

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites

+

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

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

Share this post


Link to post
Share on other sites

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

new vadtime[MAX_PLAYERS];


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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
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;
}

 

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • Tappert
      By Tappert
      Диалог команды работает и отображается, после выбора любой должности пустота
      CMD:ahelp(playerid) {     if (admin_level[playerid] < 1 || !admin_logged[playerid]) return 1;     SPD(playerid, 1234, DIALOG_STYLE_LIST, ""c_server"Команды администрации","\         "c_server"1 "c_white"- Помощник администрации\n\         "c_server"}2 "c_white"- Стажёр модерации\n\         "c_server"3 "c_white"- Младший администратор\n\         "c_server"4 "c_white"- Опытный администратор\n\         "c_server"5 "c_white"- Куратор сервера\n\         "c_server"6 "c_white"- Заместитель главы администрации\n\         "c_server"7 "c_white"- Глава администрации\n\         "c_server"8 "c_white"- Куратор игрового процесса\n\         "c_server"9 "c_white"- Директор проекта\n\         "c_server"10 "c_white"- Создатель", "Выбрать", "Закрыть");          return 1; }         case 9992: return pc_cmd_leaders(playerid, "");         case 9993: return pc_cmd_offleaders(playerid, "");         case 9996: return MenuAtms(playerid); // основной банковский счет         case 9997: return OprDialog(playerid); // система счетов банк         case 9998: return BankDialog(playerid); // банкдиалог         case 9999: return pc_cmd_menu(playerid, ""); // /mm         case 1234:         {         if (!response) return 1;         switch (listitem)         {                 case 0:                 {                     if (admin_level[playerid] < 1 || !admin_logged[playerid])                     {                         SendClientMessage(playerid, col_grey, "Вы не достигли такого уровня.");                         return 1;                     }                                          SPD(playerid, 1234, DIALOG_STYLE_MSGBOX, "", "\                     "c_server"/sc"c_white" — чат игровых помощников\n\                     "c_server"/alogin"c_white" — авторизоваться в панели администратора\n\                     "c_server"/aexit"c_white" — выйти из панели администратора\n\                     "c_server"/ans"c_white" — ответить игроку\n\                     "c_server"/srep"c_white" — список вопросов в порядке живой очереди\n\                     "c_server"/admins"c_white" — список администрации в сети", "Закрыть", "");                 }                 case 1:                 {                     if (admin_level[playerid] < 2 || !admin_logged[playerid])                     {                         SendClientMessage(playerid, col_grey, "Вы не достигли такого уровня.");                         return 1;                     }                          SPD(playerid, 1234, DIALOG_STYLE_MSGBOX, "", "\                     "c_server"/a"c_white" — чат администрации\n\                     "c_server"/arep"c_white" — список жалоб в порядке живой очереди\n\                     "c_server"/sp | /offsp"c_white" — начать / завершить слежку за игроком\n\                     "c_server"/pstats | /offpstats"c_white" — посмотреть статистику игрока\n\                     "c_server"/frz"c_white" — заморозить / разморозить игрока\n\                     "c_server"/ajail"c_white" — посадить игрока в тюрьму (< 30)\n\                     "c_server"/mute"c_white" — заблокировать чат игроку (< 60)\n\                     "c_server"/spawn"c_white" — отправить игрока на место возрождение\n\                     "c_server"/kick"c_white" — отключить игрока от сервера\n\                     "c_server"/hp"c_white" — восстановить здоровье игроку\n\                     "c_server"/okay"c_white" — подтвердить изменение nonRP ник\n\                     "c_server"/nookay"c_white" — отменить изменение nonRP ника", "Закрыть", "");                 }                 case 2:                 {                     if (admin_level[playerid] < 3 || !admin_logged[playerid])                     {                         SendClientMessage(playerid, col_grey, "Вы не достигли такого уровня.");                         return 1;                     }                          SPD(playerid, 1234, DIALOG_STYLE_MSGBOX, "", "\                     "c_server"/ban"c_white" — заблокировать аккаунт игроку (< 10)\n\                     "c_server"/warn"c_white" — выдать предупреждение игроку\n\                     "c_server"/ajail"c_white" — посадить игрока в тюрьму (< 120)\n\                     "c_server"/mute"c_white" — заблокировать чат игроку (< 120)\n\                     "c_server"/goto"c_white" — телепортироватся к игроку\n\                     "c_server"/gethere"c_white" — телепортировать игрока к себе\n\                     "c_server"/fix"c_white" — починить транспорт (ID)\n\                     "c_server"/gotcar"c_white" — телепортироваться к транспорту\n\                     "c_server"/getcar"c_white" — телепортировать транспорт к себе\n\                     "c_server"/recar"c_white" — заспавнить транспорт (ID)\n\                     "c_server"/skick"c_white" — тихо отключить игрока от сервера", "Закрыть", "");                 }                 case 3:                 {                     if (admin_level[playerid] < 4 || !admin_logged[playerid])                     {                         SendClientMessage(playerid, col_grey, "Вы не достигли такого уровня.");                         return 1;                     }                     SPD(playerid, 1234, DIALOG_STYLE_MSGBOX, "", "\                     "c_server"/ban"c_white" — заблокировать аккаунт игроку (< 30)\n\                     "c_server"/fip"c_white" — имеющиеся аккаунты по IP адресу\n\                     "c_server"/banip"c_white" — заблокировать IP адрес\n\                     "c_server"/unwarn"c_white" — снять предупреждение с игрока\n\                     "c_server"/unmute"c_white" — разблокировать чат игроку\n\                     "c_server"/unajail"c_white" — выпустить игрока из тюрьмы\n\                     "c_server"/slap"c_white" — подкинуть игрока\n\                     "c_server"/veh"c_white" — создать транспорт\n\                     "c_server"/delveh"c_white" — удалить созданный транспорт\n\                     "c_server"/delvehall"c_white" — удалить весь созданный транспорт\n\                     "c_server"/plveh"c_white" — выдать временный транспорт игроку\n\                     "c_server"/getip"c_white" — узнать IP игрока\n\                     "c_server"/offmute"c_white" — заблокировать чат игроку в оффлайне\n\                     "c_server"/offajail"c_white" — посадить игрока в тюрьму в оффлайне\n\                     "c_server"/offwarn"c_white" — выдать предупруждение игроку в оффлайне\n\                     "c_server"/offban"c_white" — заблокировать аккаунт в оффлайне\n\                     "c_server"/spveh"c_white" — заспавнить транспорт в радиусе\n\                     "c_server"/spawncars"c_white" — заспавнить весь свободный транспорт", "Закрыть", "");                 }                 case 4:                 {                     if (admin_level[playerid] < 5 || !admin_logged[playerid])                     {                         SendClientMessage(playerid, col_grey, "Вы не достигли такого уровня.");                         return 1;                     }                     SPD(playerid, 1234, DIALOG_STYLE_MSGBOX, "", "\                     "c_server"/aad"c_white" — OOC сообщение для игроков\n\                     "c_server"/skin"c_white" — выдать временную одежду игроку\n\                     "c_server"/setskin"c_white" — выдать постоянную одежду игроку\n\                     "c_server"/templeader"c_white" — назначить себя временным руководителем\n\                     "c_server"/getonline"c_white" — информация онлайна игрока\n\                     "c_server"/unban"c_white" — разблокировать аккаунт\n\                     "c_server"/unbanip"c_white" — разблокировать IP адрес\n\                     "c_server"/setfaction"c_white" — принять игрока в организацию\n\                     "c_server"/infoip"c_white" — информация о IP адресе\n\                     "c_server"/getfake"c_white" — поиск информации по IP адресу\n\                     "c_server"/setvw"c_white" — переместиться в другой виртуальный мир\n\                     "c_server"/setint"c_white" — переместиться в другой интерьер", "Закрыть", "");                 }                 case 5:                 {                     if (admin_level[playerid] < 6 || !admin_logged[playerid])                     {                         SendClientMessage(playerid, col_grey, "Вы не достигли такого уровня.");                         return 1;                     }                     SPD(playerid, 1234, DIALOG_STYLE_MSGBOX, "", "\                     "c_server"/givegun"c_white" — выдать оружие игроку\n\                     "c_server"/settime"c_white" — изменить время на сервере\n\                     "c_server"/agl"c_white" — выдать лицензии игроку\n\                     "c_server"/fullgwh"c_white" — пополнить склады всем организациям\n\                     "c_server"/auninvite"c_white" — уволить игрока из организации", "Закрыть", "");                 }                 case 6:                 {                     if (admin_level[playerid] < 7 || !admin_logged[playerid])                     {                         SendClientMessage(playerid, col_grey, "Вы не достигли такого уровня.");                         return 1;                     }                     SPD(playerid, 1234, DIALOG_STYLE_MSGBOX, "", "\                     "c_server"/makeadmin"c_white" — назначить администратора\n\                     "c_server"/unadmin"c_white" — снять администратора\n\                     "c_server"/createpromo"c_white" — создать новый промокод\n\                     "c_server"/promo"c_white" — список доступных промокодов\n\                     "c_server"/ahouse"c_white" — телепортироваться к дому\n\                     "c_server"/abiz"c_white" — телепортироваться к бизнесу\n\                     "c_server"/afuel"c_white" — телепортироваться к заправке\n\                     "c_server"/freezepanel"c_white" — статусы заморозки банд\n\                     "c_server"/delacc"c_white" — удалить аккаунт", "Закрыть", "");                 }                 case 7:                 {                     if (admin_level[playerid] < 8 || !admin_logged[playerid])                     {                         SendClientMessage(playerid, col_grey, "Вы не достигли такого уровня.");                         return 1;                     }                     SPD(playerid, 1234, DIALOG_STYLE_MSGBOX, "", "\                     "c_server"/alog"c_white" — действия администратора\n\                     "c_server"/addnotify"c_white" — добавить сообщение для игрока (при входе)\n\                     "c_server"/asellhouse"c_white" — продать дом государству\n\                     "c_server"/asellbiz"c_white" — продать бизнес государству\n\                     "c_server"/asellfuel"c_white" — продать запраку государству\n\                     "c_server"/bonus"c_white" — панель управления бонусами\n\                     "c_server"/setprod"c_white" — установить всем бизнесам 20,000 продуктов\n\                     "c_server"/setbizname"c_white" — изменить название бизнеса\n\                     "c_server"/sptext"c_white" — написать сообщение от лица игрока", "Закрыть", "");                 }                 case 8:                 {                     if (admin_level[playerid] < 9 || !admin_logged[playerid])                     {                         SendClientMessage(playerid, col_grey, "Вы не достигли такого уровня.");                         return 1;                     }                     SPD(playerid, 1234, DIALOG_STYLE_MSGBOX, "", "\                     "c_server"/saveall"c_white" — сохранить все данные\n\                     "c_server"/payday"c_white" — запустить PayDay\n\                     "c_server"/setlevel"c_white" — установить игроку уровень", "Закрыть", "");                 }                 case 9:                 {                     if (admin_level[playerid] < 10 || !admin_logged[playerid])                     {                         SendClientMessage(playerid, col_grey, "Вы не достигли такого уровня.");                         return 1;                     }                     SPD(playerid, 1234, DIALOG_STYLE_MSGBOX, "", "\                     "c_server"/restart"c_white" — перезагрузить сервер\n\                     "c_server"/anticheat"c_white" — настройки античита\n\                     "c_server"/givemoney"c_white" — выдать игровую валюту игроку\n\                     "c_server"/givedonate"c_white" — выдать донат рубли игроку\n\                     "c_server"/giveoskolok"c_white" — выдать осколки тайника игроку", "Закрыть", "");                 }                            }         }  
    • Владислав2
      By Владислав2
      Всем привет, я вставляю команду 

      CMD:rep(playerid, params[])
      {     if(!GetPlayerAdminEx(playerid)) return SendClientMessage(playerid, 0xFFFFFFFF, "{FF0000}| {FFFFFF}Доступно только администрации проекта!");     if(!g_report_created) return SendClientMessage(playerid, 0xCECECEFF, "{FF0000}| {FFFFFF}Нет обращений для проверки!");     new fmt_text[360],         bool: rep_is_found;     for(new idx; idx < g_report_created; idx ++)     {         if(GetReportData(idx, REP_EDIT) || GetReportData(idx, REP_CREATOR) == INVALID_PLAYER_ID) continue;         format         (             fmt_text, sizeof fmt_text,             "{FFFF00}|{FFFFFF}Отправитель: {FFFF00}%s[%d]\n\n{FFFF00}|{FFFFFF}Содержимое: {FFFF00}%s \n\n"\             "{FFFFFF}Вам необходимо сформулировать, а затем ввести ответ на\n"\             "жалобу игрока в диалоговое поле ниже.",             GetPlayerNameEx(GetReportData(idx, REP_CREATOR)), GetReportData(idx, REP_CREATOR), GetReportData(idx, REP_TEXT)         );         Dialog(playerid, DIALOG_REPORT_EDIT, DIALOG_STYLE_INPUT, "{EB4C42}"SERVER_NAME" {FFFFFF}| Жалобы", fmt_text, "Далеее", "Отмена");         SetReportData(idx, REP_EDIT, true);         SetPVarInt(playerid, "report_id", idx);         rep_is_found = true;         break;     }     if(!rep_is_found) return SendClientMessage(playerid, 0xCECECEFF, "{FF0000}| {FFFFFF}Нет актуальных обращений для рассмотрения!");     return 1; } И после у меня появляются варнинги:

      error 017: undefined symbol "g_report_created"
      error 017: undefined symbol "g_report"
      error 017: undefined symbol "g_report_created"
      error 001: expected token: ";", but found "]"

      Можете помочь, как убрать ошибки?
    • Владислав2
      By Владислав2
      Здравствуйте! Можете помочь с системой ANTI-DM.
      Допустим игрок дмит другово игрока, у админов в чате будет писать такое сообщение: "[ANTI-DM]: Игрок 1 атакует игрока 2 без причины. (Фиолетовым цветом)"

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

      /ban, /permban и /unban - Что-бы можно было выдать по нескольким критериям id / ник / id аккаунта. текст который будет при простом вводе команды "/ban [id / ник / id аккаунта]." (Вместо бан под другие команды) Важно  чтобы банить по id аккаунта перед цыфрами надо ввести #. 

      Так-же и с командами jail и /unjail, Главное что-бы снимать наказания можо было в оффлайне.