Приветствую Вас Гость | RSS

Все для SA-MP

Суббота, 18.05.2024, 12:51
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Мир GTA San Andreas » Уроки скриптинга » Пишем систему блокировки IP (Full Copy Samp-Rp)
Пишем систему блокировки IP (Full Copy Samp-Rp)
Подполковник

massa Администраторы

Сообщения:
145
Симпатия:
1
Система блокировки IP адресса как на самп рп.

1. В начале мода подключаем инклуд regex:
Код
#include <regex> // подключаем инклуд
  
2. Ко всем define'am добавляем:
Код
#define Banip(%1) \
regex_match(%1, "^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])$"

3. Ко всем командам (Внимание! Командный процессор: YCMD) добавляем:
Код
YCMD:banip(playerid, params[], help)
{
      if(gPlayerLogged [playerid]== 0) return true;
      if(!IsPlayerConnected(playerid)) return true;
      if(PlayerInfo[playerid] [pAdmin]< 1) return true;
      if(PlayerInfo[playerid] [pAdmin]< 4) return SCM(playerid, COLOR_WHITE, "Ошибка!");
      if(dostup [playerid]!= 1) return true;
      if(sscanf(params,"s[20]", params[0])) return SCM(playerid,COLOR_WHITE," Введите: /banip [IP адрес]");
      if(!Banip(params[0])) return SCM(playerid,COLOR_WHITE," Введите: /banip [IP адрес]");   
      new mes[128];
      format(mes, sizeof(mes), "gamefiles/log/banip/%s.log", params[0]);
      if(fexist(mes)) return SendClientMessage(playerid, COLOR_GREY, "IP адрес уже заблокирован");
      format(strings, 70, "%s забанил IP: %s", PlayerInfo[playerid][pName], params[0]);
      ABroadCast(COLOR_LIGHTRED,strings,1);
      fcreate(mes);
      return true;
}

YCMD:unbanip(playerid, params[], help)
{
      if(gPlayerLogged [playerid]== 0) return true;
      if(!IsPlayerConnected(playerid)) return true;
      if(PlayerInfo[playerid] [pAdmin]< 1) return true;
      if(PlayerInfo[playerid] [pAdmin]< 5) return SCM(playerid, COLOR_WHITE, "Ошибка");
      if (dostup [playerid]!= 1) return true;
      if(sscanf(params,"s[20]", params[0])) return SCM(playerid,COLOR_WHITE," Введите: /unbanip [IP адрес]");
      if(!Banip(params[0])) return SCM(playerid,COLOR_WHITE," Введите: /unbanip [IP адрес]");   
      new mes[128];
      format(mes, sizeof(mes), "gamefiles/log/banip/%s.log", params[0]);
      if(!fexist(mes)) return SendClientMessage(playerid, COLOR_GREY, "IP адрес не заблокирован");
      format(strings, 75, "%s разбанил IP: %s", PlayerInfo[playerid][pName], params[0]);
      ABroadCast(COLOR_GREEN,strings,1);
      fremove(mes);
      return true;
}

4. Далее, в OnPlayerConnect либо в OnPlayerRequestClass добавляем:
    
Код
new ipka[128];
      new ipStr[16];
      GetPlayerIp( playerid, ipStr, 16 );
      format(ipka,sizeof(ipka),"gamefiles/log/banip/%s.log",ipStr);
      if(!fexist(ipka)) { }
      else
      {
          SendClientMessage(playerid,0xC21D00AA, "Ваш IP адрес заблокирован");
          Kick(playerid);
      }
  
5. Для тех, у кого нету командного процессора:
 
Код
else if(strcmp(cmd, "/banip", true) == 0)
     {
         if(PlayerInfo[playerid][pAdmin] >= 3)
         {
             tmp = strtok(cmdtext, idx);
             if(!strlen(tmp)) return SendClientMessage(playerid,COLOR_WHITE, "Введите: /banip [IP адрес]");
             if(dostup[playerid] != 1) return true;
             if(!Banip(tmp)) return SCM(playerid,COLOR_WHITE," Введите: /banip [IP адрес]");  
             GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
             GetPlayerName(playerid, sendername, sizeof(sendername));
             format(string, 256, "%s забанил IP: %s", sendername, tmp);
             ABroadCast(COLOR_LIGHTRED, string, 1);
             new mes[128];
             format(mes, sizeof(mes), "gamefiles/log/banip/%s.log", tmp);
             if(fexist(mes)) return SendClientMessage(playerid, COLOR_GREY, "IP адрес уже заблокирован");
             fcreate(mes);
         }
         return true;
     }
      
     else if(strcmp(cmd, "/unbanip", true) == 0)
     {
         if(PlayerInfo[playerid][pAdmin] >= 4)
         {
             tmp = strtok(cmdtext, idx);
             if(!strlen(tmp)) return SendClientMessage(playerid,COLOR_WHITE, "Введите: /unbanip [IP адрес]");
             if(dostup[playerid] != 1) return true;
             if(!Banip(tmp)) return SCM(playerid,COLOR_WHITE," Введите: /banip [IP адрес]");
             GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
             GetPlayerName(playerid, sendername, sizeof(sendername));
             new mes[256];
             format(mes, sizeof(mes), "gamefiles/log/banip/%s.log", tmp);
             if(!fexist(mes)) return SendClientMessage(playerid, COLOR_GREY, "IP адрес в базе данных не найден!");
             format(string, sizeof(string), "%s разбанил IP: %s", sendername, tmp);
             ABroadCast(COLOR_GREEN, string, 1);
             fremove(mes);
         }
         return true;
     }  

6. В конец мода:
Код
stock fcreate(handle[]) //Создание файла.
{
     new File:create = fopen(handle,io_append); //io_append - создаём файл.
     {
         fclose(create); //Закрываем созданный файл.
     }
     return handle;
}  

7. Далее подключаем Include и Plugin Regex.
- Данной системы это то что нельзя блокировать подсеть.
Обязательно создайте папку gamefiles а в ней log.
Скачать инклуд регекс и плагин можно здесь.
Автор: SvemoR


ТРЕБУЮТСЯ МОДЕРАТОРЫ НА ФОРУМ!

 
Нездешний

Ярик Пользователи

Сообщения:
1
Симпатия:
0
Баг в системе! Сделал все правильно, у всех игроков кто заходит на сервер пишет "Ваш ip адрес заблокирован" даже у тебя у кого он не забанен. Исправьте!
 
Форум » Мир GTA San Andreas » Уроки скриптинга » Пишем систему блокировки IP (Full Copy Samp-Rp)
  • Страница 1 из 1
  • 1
Поиск: