• Страница 1 из 1
  • 1
Бан чата на время, по клику в табе, в диалогах.
fenix05Дата: Суббота, 25.05.2013, 22:52 | Сообщение # 1
.::Offline::.
Гангстер
Сообщений: 151
[ 62 ]
Награды: 4

Статус отсутствует
Чтобы сделать бан чата на время, будем использовать OnPlayerClickPlayer, т.е. клик по нику в табе.

1. В начало мода добавим:
Код
#define DLG_ADMIN_CMD 1 // id диалогов, ставьте свои
#define DLG_ADMIN_BanChat 2
new TMR_BanChat[MAX_PLAYERS]; // timerid
new Chosen[MAX_PLAYERS]; // для записи id игрока в табе

Если у вас есть в моде enum pInfo, то вставьте pMutes в конец:
Код
enum pInfo
{
   --------,
   --------,
   pMutes
}

Если нет enum pInfo, то сделайте переменную pMutes:
Код
new pMutes[MAX_PLAYERS];

Будем считать что у Вас enum pInfo есть, поэтому будем использовать PlayerInfo[playerid][pMutes]. Иначе используйте pMutes[playerid]
В OnPlayerConnect вставим:
Код
PlayerInfo[playerid][pMutes] = 0;

2. В OnPlayerClickPlayer вставляем:
Код
new string1[128],string2[128],clickedname[24];
Chosen[playerid] = clickedplayerid;
GetPlayerName(Chosen[playerid],clickedname,24); // запись имени игрока

clickedplayerid обязательно нужно записать в глобальную переменную Chosen, т.к. это пригодится при работе в других пабликах.
Далее делаем проверку на rcon админа:
Код
if(IsPlayerAdmin(playerid))
{

}

Вставляем в это условие:
Код
format(string1,sizeof(string),"Доступные действия над игроком %s[%d]:",clickedname,Chosen[playerid]);
if(PlayerInfo[clickedplayerid][pMutes] == 0)
{
  format(string2,sizeof(string),"Дать бан чата");
}
else format(string2,sizeof(string),"Снять бан чата");
ShowPlayerDialog(playerid,DLG_ADMIN_CMD,DIALOG_STYLE_LIST,string1,string2,"Выбрать","Выход");

Ну здесь думаю понятно. В первой строке мы делаем заголовок диалога. А во второй, форматируем текст в зависимости от того, есть ли бан чата у игрока или нет.
Можно добавить не обязательное условие после проверки на rcon админа:
Код
else if(!IsPlayerAdmin(playerid)) SendClientMessage(playerid,COLOR_RED,"Это действие доступно только администратору!");

3. В public OnDialogResponse:
Код
    new clickedname[24];
  GetPlayerName(Chosen[playerid],clickedname,24);
  if(dialogid == DLG_ADMIN_CMD && response)
  {
   switch(listitem)
   {
    case 0://бан чата
    {
     if(PlayerInfo[Chosen[playerid]][pMutes] == 0)
     {
      format(string,256,"Чтобы дать игроку %s бан чата,\nвведите время в минутах:",clickedname);
      ShowPlayerDialog(playerid,DLG_ADMIN_BanChat,1,"Бан чата на время",string,"Ок","Отмена");
     }
     else if(PlayerInfo[Chosen[playerid]][pMutes] == 1)
     {
      PlayerInfo[Chosen[playerid]][pMutes] = 0;
      SendClientMessage(Chosen[playerid],COLOR_GREEN,"Администратор разрешил Вам писать в чат!");
      KillTimer(TMR_BanChat[Chosen[playerid]]);
     }
    }
   }
  }

Разберём. Если бана чата ещё не было у выбранного игрока, то запускаем диалог ввода. Если бан уже стоит, то обнуляем переменную pMutes, и убиваем таймер TMR_BanChat о котором будет описано ниже.

4. В этом же паблике ниже вставляем:
Код
    if(dialogid == DLG_ADMIN_BanChat && response)//бан чата
  {
   PlayerInfo[Chosen[playerid]][pMutes] = 1;
   TMR_BanChat[Chosen[playerid]] = SetTimer("BanChat",1000*60*strval(inputtext),false);
   format(string,256,"Администратор заткнул Вас на %d мин.!",strval(inputtext));
   SendClientMessage(playerid,COLOR_RED,string);
  }

Здесь мы устанавливаем бан чата, и запускаем таймер TMR_BanChat.

5. В любом месте вставим паблик BanChat:
Код
forward BanChat(playerid);
public BanChat(playerid)
{
  PlayerInfo[Chosen[playerid]][pMutes] = 0;
  SendClientMessage(Chosen[playerid],COLOR_GREEN,"Время молчанки истекло, теперь вы можете писать в чат!");
  return 1;
}

Здесь всё понятно.

6. В public OnPlayerText добавим:
Код
    if(PlayerInfo[playerid][pMutes] == 1)
  {
   SendClientMessage(playerid,COLOR_RED,"*Вам запрещено писать в чат!");
   return 0;
  }


Вот и всё!

Автор урока: fenix05
Для www.SAMP-TEAM.com


Alien Brickman [vk.com/alien_brickman]Обложка:
 
[S]ilverbac[k]Дата: Суббота, 25.05.2013, 22:55 | Сообщение # 2
.::Offline::.
Пахан
Сообщений: 723
[ 86 ]
Награды: 17

Статус отсутствует
Лучше использовать вместо enum'ов PVar'ы, они специально созданы, чтобы уменьшать нагрузку на сервер.


[FS]Neon[APP]FCP[APP]Vehicle Tuning Generator ||||| 20% -- Работа приостановленаОбложка:
 
PasharusДата: Среда, 06.08.2014, 13:53 | Сообщение # 3
.::Offline::.
Новичок
Сообщений: 6
[ 0 ]
Награды: 0

Статус отсутствует
Отлично. сделал себе так. норм
 
  • Страница 1 из 1
  • 1
Поиск:


Copyright www.SAMP-TEAM.com (c) 2009-2024
Правила использования материалов сайта

При копировании материалов из нашего сайта
ссылка на www.SAMP-TEAM.com обязательна!
Нарушители правил будут строго наказаны!

Хостинг от uCoz   
Для корректного просмотра мы рекомендуем Вам использовать браузер Google Chrome.
Яндекс.Метрика
Яндекс.Метрика