Доступ к архиву

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Бан по IP адресу

Статус
В этой теме нельзя размещать новые ответы.

Rolt

Ученик
Писал систему бана по IP для своего сервера и решил выложить сюда, может кому пригодиться.
Итак приступим.
1. Для начала создадим в папке "scriptfiles" ещё одну папку с названием "logi".
2. Теперь в созданной нами папке создаём файл "Banip.ini". Важно: Формат файла обязательно должен быть .ini!
3. Ищем в моде public OnPlayerConnect(playerid).
И вставляем туда:
PHP:
new ip[MAX_PLAYERS], playerip[64];
GetPlayerIp(playerid, playerip, sizeof(playerip));
new iniFile = ini_openFile("logi/Banip.ini");
ini_getInteger(iniFile, playerip,ip[playerid]);
ini_closeFile(iniFile);
if(ip[playerid] == 1) return SendClientMessage(playerid, COLOR_RED, "Ваш IP адрес заблокирован!"), Kick(playerid); //Функцию Kick(playerid) замените на свою.
4. Теперь переходим непосредственно к командам.
В public OnPlayerCommandText(playerid, cmdtext[]) вставляем.
PHP:
	if(strcmp(cmd, "/banip", true) == 0)
	{
	    if(PlayerInfo[playerid][pAdmin] >= 2)
	    {
	        new sendername[256];
	    	GetPlayerName(playerid, sendername, sizeof(sendername));
	    	new length = strlen(cmdtext);
	    	while ((idx < length) && (cmdtext[idx] <= ' '))
			{
	    		idx++;
			}
	    	new offset = idx;
	    	new result[64];
	    	while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
			{
	    		result[idx - offset] = cmdtext[idx];
	    		idx++;
			}
			result[idx - offset] = EOS;
	    	if(!strlen(result)) return SendClientMessage(playerid, COLOR_WHITE, "Используйте: /banip [IP адресс]");
    		if(strfind(result, ".", true) != -1)
			{
				new iniFile = ini_openFile("logi/Banip.ini");
				format(string, sizeof(string), "%s", result);
				ini_setInteger(iniFile,string,1);
				ini_closeFile(iniFile);
				format(string, sizeof(string), "[Banip] %s заблокировал IP: %s", sendername, result);
				SendAdminMessage(COLOR_ADMIN, string);//SendAdminMessage - это чат админов, замените на свой!
				printf("[Banip] %s заблокировал IP: %s", sendername, result);
	 			return 1;
			}
			else return SendClientMessage(playerid, COLOR_WHITE, "Введён неверный IP!");
		}
	}

	if(strcmp(cmd, "/unbanip", true) == 0)
	{
	    if(PlayerInfo[playerid][pAdmin] >= 2)
	    {
			new sendername[256];
	    	GetPlayerName(playerid, sendername, sizeof(sendername));
	    	new length = strlen(cmdtext);
	    	while ((idx < length) && (cmdtext[idx] <= ' '))
			{
	    		idx++;
			}
	    	new offset = idx;
	    	new result[64];
	    	while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
			{
	    		result[idx - offset] = cmdtext[idx];
	    		idx++;
			}
			result[idx - offset] = EOS;
	    	if(!strlen(result)) return SendClientMessage(playerid, COLOR_WHITE, "Используйте: /unbanip [IP адресс]");
    		if(strfind(result, ".", true) != -1)
			{
				new iniFile = ini_openFile("logi/Banip.ini");
				format(string, sizeof(string), "%s", result);
				ini_setInteger(iniFile,string,0);
				ini_closeFile(iniFile);
				format(string, sizeof(string), "[Unbanip] %s разблокировал IP: %s", sendername, result);
				SendAdminMessage(COLOR_ADMIN, string);//SendAdminMessage - это чат админов, замените на свой!
				printf("[Banip] %s разблокировал IP: %s", sendername, result);
	 			return 1;
			}
			else return SendClientMessage(playerid, COLOR_WHITE, "Введён неверный IP!");
		}
	}
Вот и всё, теперь при каждом коннекте игрока, сервер будет проверять наличие его IP адреса в файле Banip.ini.
Автор: Rolt
P.S. С оптимизацией у меня не очень.
P.S.S. Если есть уже такая тема, то удалите мою. (Искал похожие темы, не нашёл).
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу