[Мануал]Система банов на MySQL R7(NewPwn) - Форум Cheat-Master.ru
  • Страница 1 из 1
  • 1
Модератор форума: Phoenixxx_Czar, Getbackthere, [CM]OlegEhtler  
[Мануал]Система банов на MySQL R7(NewPwn)
[CM]Logotipo Дата: Воскресенье, 20.04.2014, 21:56 | Сообщение # 1
Авторитет
Сообщений: 1083
Статус: Offline
Напишем систему банов на время.
PlayerInfo[playerid][ALevel] - лвл админки
В самое начало добавим.
Код
#include <mxdate>
-для работы разбана.
Далее сама команда бана.
Код
CMD:ban(playerid, params[])
{
   new str[100];
   if(PlayerInfo[playerid][ALevel] < 2) return false;
   if(sscanf(params,"uds[210]",params[0],params[1],params[2])) return SCM(playerid,COLOR_WHITE,"/ban [id][дни] [причина]");
   if(params[1] <1 || params[1] >30)return SCM(playerid,COLOR_GREY,"Количество дней должно быть от 1 до 30");
   if(!IsPlayerConnected(params[0])) return SendClientMessage(playerid, COLOR_GREY, "[Ошибка]Игрок не в сети");
   new unbandate;
   unbandate = gettime() + params[1]*86400;
   BanPlayer(Name(params[0]),params[2],Name(playerid),unbandate);//Для тех, кто будет говорить, что это не рационально - сделано, что бы 100 раз не прописывать код, ибо банит у меня не только в этой команде
   format(str, sizeof(str),"Администратор %s забанил игрока %s на %d дней. Причина: %s", Name(playerid), Name(params[0]),params[1],params[2]);
   SendClientMessageToAll(COLOR_RED, str);
   new ip[16];
   GetPlayerIp(params[0], ip, 16);
   format(str,sizeof(str),"Nick:[%s]|R-IP:[%s]|IP:[%s]",Name(params[0]),PlayerInfo[params[0]][RegIp],ip);
   SendAdminMessage(COLOR_YELLOW,str);
   Kick(params[0]);
   return true;
}

Добавим функцию
Код
stock BanPlayer(playername[],reason[],Aname[],unbandate)
{
   new data[16],query[200];
   new year,month,day;
   getdate(year,month,day);
   format(data,sizeof(data),"%d.%d.%d",day,month,year);
          format(query, sizeof(query), "INSERT INTO `bans` (`name`, `AName`, `bandate`, `reason`,`unbandate`) VALUES ('%s', '%s', '%s','%s','%d')",playername,Aname,data,reason,unbandate);
          mysql_function_query(connectionHandle, query, false, "","d");
}

Теперь чек на бан.
Там, где у нас загрузка аккаунта добавим:
Код
new str[70];
format(str, sizeof(str),"SELECT * FROM `bans` WHERE `name` = '%s'", Name(playerid));
mysql_function_query(connectionHandle, str, true, "OnPlayerBanCheck","d", playerid);

Добавим callback
Код
forward OnPlayerBanCheck(playerid);
public OnPlayerBanCheck(playerid)
{
      if(IsPlayerConnected(playerid))
      {
          new rows, fields;
          cache_get_data(rows, fields);
          if(rows)
          {
     new maximum[100], AName[32],data[16],string[226],reason[30];
           new day,month,year,unbandate;
                  cache_get_field_content(0, "AName", maximum, connectionHandle, sizeof(maximum)), sscanf(maximum,"s[32]",AName);
                  cache_get_field_content(0, "bandate", maximum, connectionHandle, sizeof(maximum)), sscanf(maximum,"s[32]",data);
                  cache_get_field_content(0, "reason", maximum, connectionHandle, sizeof(maximum)), sscanf(maximum,"s[32]",reason);
                  cache_get_field_content(0, "unbandate", maximum), unbandate = strval(maximum);
                  timestamp(unbandate,year,month,day);
                  if(unbandate<=gettime()){
                  new string1[70];
            SpawnPlayer(playerid);
            mysql_format(1, string1, "DELETE FROM `bans` WHERE `name` = '%s'",Name(playerid));
           mysql_function_query(1, string1, false, "","");}
                  else{
           SendClientMessage(playerid,COLOR_LIGHTRED,"Этот аккаунт заблокирован \n Забанил: %s \n Причина бана: %s \n Дата бана: %s \n Дата разбана: %d.%d.%d",AName,reason,data,day,month,year);
           Kick(playerid);}
   }
          else
          {
    SpawnPlayer(playerid);
   }
      }
      return true;
}

Отлично, теперь мы не впустим на сервер игрока, если он заблокирован и разбаним его, если время время блокировки вышло. Но что если администратор передумает?
Добавим команду.
Код
CMD:unban(playerid, params[])
{
      if(PlayerInfo[playerid][ALevel] <= 2) return false;
      new days[100];
      new query[200];
      if(sscanf(params,"s[100]",days))return SendClientMessage(playerid, COLOR_WHITE, "Используйте: /unban [ник игрока] ");
      mysql_format(1,query,"SELECT * FROM bans WHERE name = '%s'", params[0]);
      mysql_function_query(1, query, true, "Unban", "ds",playerid,params[0]);
      return 1;
}

Теперь callback
Код
forward Unban(i,nick[]);
public Unban(i,nick[])
{
      new rows,fields;
   new string1[70];
      cache_get_data(rows, fields);
      if(!rows)
      {
       SendClientMessage(i,COLOR_LIGHTRED,"Игрока с таким ником нет в списке заблокированых!");
      }
      else
      {
    mysql_format(1, string1, "DELETE FROM `bans` WHERE `name` = '%s'",nick);
    mysql_function_query(1, string1, false, "","");
    SendMes(i,COLOR_LIGHTRED,"Вы успешно разбанили игрока %s!",nick);
      }
      return 1;
}

Осталось создать таблицу, сделайте это как показано на скриншоте.


Скуп
ВК
RakDroid - прокачка аккаунтов с телефона
VKMusic - вк музыка без браузера
Делаю сайты/софт/стимботов на заказ


Сообщение отредактировал [CM]Logotipo - Воскресенье, 20.04.2014, 21:57
[CM]Delorenzy Дата: Пятница, 09.05.2014, 21:45 | Сообщение # 2
СУПЕР АККИ У МЕНЯ
Сообщений: 410
Статус: Offline
Отлично! Плюсик твой

http://vk.com/id_renaissance
DraKo Дата: Понедельник, 12.05.2014, 22:02 | Сообщение # 3
АВТОРИТЕТ
Сообщений: 178
Статус: Offline
Спасибо.

» Не чего не продаю / не покупаю.
» Помогаю новичкам, обращайтесь.
--------------------------------------------------------------------
» Приму аккаунты на любом сервере SA:MP.
» Приму аккаунты STEAM.
  • Страница 1 из 1
  • 1
Поиск: