Подполковник
massa
Администраторы
|
Система блокировки 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
ТРЕБУЮТСЯ МОДЕРАТОРЫ НА ФОРУМ!
|
|
|
|
Нездешний
Ярик
Пользователи
|
Баг в системе! Сделал все правильно, у всех игроков кто заходит на сервер пишет "Ваш ip адрес заблокирован" даже у тебя у кого он не забанен. Исправьте!
|
|
|
|