Форум Pawn.Wiki - Воплоти мечту в реальность!: Бан IP, подсеть, unix, mxINI | Урок 8 от Suza - Форум Pawn.Wiki - Воплоти мечту в реальность!

Перейти к содержимому

  • (2 Страниц) +
  • 1
  • 2
  • Вы не можете создать новую тему
  • Тема закрыта

[ Урок ]
Бан IP, подсеть, unix, mxINI | Урок 8 от Suza Создаем система блокироки IP и подсети на время (файлы)
Оценка: -----

#1
Пользователь офлайн   suza 

  • suza
  • Вставить ник
  • Раскрыть информацию
Всем привет.
Это мой восьмой урок.
Сегодня мы создадим систему блокировки.
Но не простую... Не Ban(playerid);
Система блокировки, будет блокировать IP адрес, подсеть IP адреса да и еще на время, unix время pawn.

Заходим в папку "scriptfiles" и создаем здесь папку "Userz" и/или заходим если она уже есть.
В папке "Userz" создаем/находим и заходим в папку/папку "Banedz".
В папке "Banedz" создаем две папки "IPs" и "Podset".

Создаем дефайны:
#define SERVER_PAHTACC_BANNEDSIPZ                               "Userz/Banedz/IPs/" // Путь до файлов блокировки IP адресов
#define SERVER_PAHTACC_BANNEDSPODSETZ                           "Userz/Banedz/Podset/" // Путь до файлов блокировки подсетей IP

Если вы делали все по предыдущим урокам, у вас должно быть "FixConnectPlayer" или может вы его называли по другому, вы поймете.
Ищем этот паблик и вконце вставляем это:
	ProverkaBanIpAdress(playerid); // Отправим игрока по его номеру на проверку бана IP адреса
	ProverkaBanIpPodset(playerid); // Отправим игрока по его номеру на проверку бана подсети IP


А сейчас мы добавим две команды.
Первая "/иблок" блокирует IP игрока.
Команда с параметрами: "/иблок [номер игрока] [Количество дней блокировки аккаунта] [Причина]"
Пример использования: "/иблок 0 10 Использование читов/модов/программ дающих преимущество в игре."

Вторая "/пблок" блокирует подсеть IP игрока.
Что такое подсеть? Это часть IP обычно без последнего или последних звеньев.
Возмем игрока с IP адресом 11.22.33.44 и блокируем его подсеть. Например, мы заблокировали 11.22.33.*
и это значит, что все любой игрок у кого IP начинается на 11.22.33.число не сможет играть.
Например игрок с IP 11.22.33.55 не зайдет в игру и увидит блокировку.
Команда с параметрами: "/пблок [номер игрока] [Количество дней блокировки аккаунта] [Параметр (2 или 3)] [Причина]"
Что за параметр? Если вы введете команду в таком виде: "/пблок 0 10 2 Обход блокировки IP"
То игрока с номером 0 заблокирует сервер на 10 дней по такой то причине на две части от IP.
Например его IP 11.22.33.44, а забанится 11.22.*.*, если: "/пблок 0 10 3 Обход блокировки IP", то
забанится 11.22.33.*. Думаю здесь все понятно.

// | Команда блокировки IP
    if(!strcmp("/иблок",cmd,true)) // Если игрок ввел команду
    {
        if(!AdminAccess(playerid,1))return true;
        new giveplayerid, dney;

        tmp=strtok(cmdtext,idx); // Ищем пробел
		if(!strlen(tmp))return SendClientMessage(playerid,-1,COL_GREEN"[Подсказка]"COL_LBLUE" /иблок [ид] [кол-во дней] [причина] - Не введен номер игрока"); // Если после первого пробела нечего нет

		giveplayerid = UserID(tmp); // Присваиваем первое значение первой перменной (номер игрока)

		tmp=strtok(cmdtext,idx); // Ищем пробел
		if(!strlen(tmp))return SendClientMessage(playerid,-1,COL_GREEN"[Подсказка]"COL_LBLUE" /иблок [ид] [кол-во дней] [причина] - Не введено количество дней блокировки IP"); // Если после второго пробела нечего нет

		dney = strval(tmp); // Присваиваем второе значение второй перменной (Кол-во дней)

		if(giveplayerid != INVALID_PLAYER_ID) // Если номер адекватный
		{ // Ниже система выбора причины
			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,-1,COL_GREEN"[Подсказка]"COL_LBLUE" /иблок [ид] [кол-во дней] [причина] - Не введена причина блокировки аккаунта"); // Если после третьего пробела нечего нет или нет пробела выводим сообщение

			AdmBaneedIpAdress(giveplayerid,playerid,dney,(result)); // Запускаем сток с нашими параметрами
		}
		else return SendClientMessage(playerid,-1,COL_RED"[Ошибка]"COL_YELLOW" Неправильно указан ID игрока"); // Если номер не адекватный
        return true;
    }
// | Команда блокировки IP
// | Команда блокировки подсети IP
	if(!strcmp("/пблок",cmd,true))
    {
        if(!AdminAccess(playerid,1))return true;
        new giveplayerid, dney, paramz;
        
        tmp=strtok(cmdtext,idx); // Ищем пробел
		if(!strlen(tmp))return SendClientMessage(playerid,-1,COL_GREEN"[Подсказка]"COL_LBLUE" /пблок [ид] [кол-во дней] [Параметр (2 или 3)] [причина] - Не введен номер игрока"); // Если после первого пробела нечего нет
		
		giveplayerid = UserID(tmp); // Присваиваем первое значение первой перменной (номер игрока)

		tmp=strtok(cmdtext,idx); // Ищем пробел
		if(!strlen(tmp))return SendClientMessage(playerid,-1,COL_GREEN"[Подсказка]"COL_LBLUE" /пблок [ид] [кол-во дней] [Параметр (2 или 3)] [причина] - Не введено количество дней блокировки IP"); // Если после второго пробела нечего нет
		
		dney = strval(tmp); // Присваиваем второе значение второй перменной (Кол-во дней)
		
		tmp=strtok(cmdtext,idx); // Ищем пробел
		if(!strlen(tmp))return SendClientMessage(playerid,-1,COL_GREEN"[Подсказка]"COL_LBLUE" /пблок [ид] [кол-во дней] [Параметр (2 или 3)] [причина] - Не введен параметр"); // Если после второго пробела нечего нет
		
		paramz = strval(tmp); // Присваиваем третье значение третьей перменной (параметр)
		
		if(giveplayerid != INVALID_PLAYER_ID) // Если номер адекватный
		{ // Ниже система выбора причины
			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,-1,COL_GREEN"[Подсказка]"COL_LBLUE" /иблок [ид] [кол-во дней] [Параметр (2 или 3)] [причина] - Не введена причина блокировки аккаунта"); // Если после третьего пробела нечего нет или нет пробела выводим сообщение

			AdmBaneedIpPodset(giveplayerid,playerid,dney,paramz,(result)); // Запускаем сток с нашими параметрами
		}
		else return SendClientMessage(playerid,-1,COL_RED"[Ошибка]"COL_YELLOW" Неправильно указан ID игрока"); // Если номер не адекватный
        return true;
    }
// | Команда блокировки подсети IP


Дальше создадим несколько стоков:
stock ProverkaBanIpAdress(playerid)
{
    new account[256]; // Временная переменная
    
    format(account,sizeof(account),SERVER_PAHTACC_BANNEDSIPZ"%s.txt",pIPAdressPlayer[playerid]); // Форматируем путь
    
    if(!fexist(account)) return true; // Если файла нет останавливаем процесс
    
    new AdminName[SERVER_MAXNAMEE]; // Переменная для админ-ника
    new ReasonBan[256]; // Перменная для причины
    new VidBan[24]; // Перменная вида блокировки
	new ipforfile[30];
    new BanIpNamePlaya[SERVER_MAXNAMEE]; // Переменная для игрока при котором был заблокирован IP адрес
    new dney,unbantime; // Перменная для кол-ва дней и unix времени разблокировки
    new d_year,d_month,d_day; // Перменные года, месяца, дня
    new v_hour,v_minuite,v_second; // Перменная часа, минуты, секунды
    new currenttime = gettime(); // Переменная unix времени сейчас

    new iniFile=ini_openFile(account); // Откроем файл и запишем его номер
	//
	ini_getString(iniFile, "Ник_админа_вышавшего_блокировку",AdminName); // Запишем ник админа в переменную
	ini_getString(iniFile, "Причина_блокировки",ReasonBan); // Запишем причину бана в переменную
	ini_getString(iniFile, "Вид_блокировки",VidBan); // Запишем вид бана
	ini_getString(iniFile, "Заблокированный_IP_адрес", ipforfile);
	ini_getString(iniFile, "Ник_имевший_этот_IP_на_момент_блокировки",BanIpNamePlaya);
	ini_getInteger(iniFile,"Количество_дней_блокировки_аккаунта",dney); // Запишем количество дней бана
	ini_getInteger(iniFile,"ЧИСЛО_ПРИ_РАЗБЛОКИРОВКЕ", unbantime); // Запишем unix время разбана
	ini_getInteger(iniFile,"Год_блокировки_аккаунта",d_year); // Запишем год бана
	ini_getInteger(iniFile,"Месяц_блокировки_аккаунта",d_month);  // Запишем месяц бана
	ini_getInteger(iniFile,"День_блокировки_аккаунта",d_day); // Запишем день бана
	ini_getInteger(iniFile,"Час_блокировки_аккаунта",v_hour); // Запишем час бана
	ini_getInteger(iniFile,"Минута_блокировки_аккаунта",v_minuite); // Запишем минуту бана
	ini_getInteger(iniFile,"Секунда_блокировки_аккаунта",v_second); // Запишем секунду бана
	ini_closeFile(iniFile); // Закроем файл по его номеру
	
	if(currenttime >= unbantime) return SusUnbaneedIpAdress(playerid, account); // Если unix время сейчас больше или равно unix время разблокировки, запустим сток разбана
	else // Если меньше то выведем информацию о блокировке
	{
	    format(gString, sizeof(gString), COL_RED" | "COL_YELLOW"Информация о блокировке "COL_RED"|");
	    format(gString, sizeof(gString), "%s\n"COL_WHITE"Вид блокировки: "COL_LBLUE"%s",gString, VidBan);
	    format(gString, sizeof(gString), "%s\n"COL_WHITE"IP адрес: "COL_LBLUE"%s "COL_WHITE"заблокирован",gString,ipforfile);
	    format(gString, sizeof(gString), "%s\n"COL_WHITE"Ваш IP адрес: "COL_LBLUE"%s "COL_WHITE"совпал с заблокированным или заблокированный "COL_LBLUE"IP адрес ваш.",gString,pIPAdressPlayer[playerid]);
	    format(gString, sizeof(gString), "%s\n"COL_WHITE"Доступ в игру с этого IP адреса запрещен сервером!",gString);
	    format(gString, sizeof(gString), "%s\n"COL_WHITE"Ваш ник: "COL_LBLUE"%s",gString,pNickNamePlayer[playerid]);
	    format(gString, sizeof(gString), "%s\n"COL_WHITE"Ник, при котором был заблокирован этот IP адрес: "COL_LBLUE"%s",gString,BanIpNamePlaya);
	    format(gString, sizeof(gString), "%s\n"COL_WHITE"Причина блокировки: "COL_LBLUE"%s",gString, ReasonBan);
	    format(gString, sizeof(gString), "%s\n"COL_WHITE"Дата бана - Год: "COL_LBLUE"%d"COL_WHITE", Месяц: "COL_LBLUE"%d"COL_WHITE", День: "COL_LBLUE"%d",gString,d_year,d_month,d_day);
		format(gString, sizeof(gString), "%s\n"COL_WHITE"Время бана - Час: "COL_LBLUE"%d"COL_WHITE", Минута: "COL_LBLUE"%d"COL_WHITE", Секунда: "COL_LBLUE"%d",gString,v_hour,v_minuite,v_second);
		format(gString, sizeof(gString), "%s\n"COL_WHITE"Блокировка аккаунта на "COL_LBLUE"%d "COL_WHITE"дней",gString,dney);
		format(gString, sizeof(gString), "%s\n"COL_WHITE"Администрор выдавший блокировку: "COL_LBLUE"%s",gString, AdminName);
		ShowPlayerDialog(playerid,D_BANINFORMATION,DIALOG_STYLE_MSGBOX,"Блокировка",gString,"Ясно",""); // Информация о блокировке
		
	    Fixkikeed(playerid); // Отключим от сервера
	}
	return true;
}

stock ProverkaBanIpPodset(playerid)
{
    new account[256]; // Временная переменная
    new AdminName[SERVER_MAXNAMEE]; // Переменная для админ-ника
    new ReasonBan[256]; // Перменная для причины
    new VidBan[24]; // Перменная вида блокировки
    new podsetIP[30];
    new BanIpNamePlaya[SERVER_MAXNAMEE]; // Переменная для игрока при котором был заблокирован IP адрес
    new dney,unbantime; // Перменная для кол-ва дней и unix времени разблокировки
    new d_year,d_month,d_day; // Перменные года, месяца, дня
    new v_hour,v_minuite,v_second; // Перменная часа, минуты, секунды
    new currenttime = gettime(); // Переменная unix времени сейчас
    
    format(account,sizeof(account),SERVER_PAHTACC_BANNEDSPODSETZ"%s.txt",pIPPodsetPlayerTwo[playerid]);
    if(!fexist(account))
    {
        format(account,sizeof(account),SERVER_PAHTACC_BANNEDSPODSETZ"%s.txt",pIPPodsetPlayerThree[playerid]);
        if(!fexist(account)) return true;
        else goto PROVERKABANPODSETIP;
    }
    else goto PROVERKABANPODSETIP;
	
	PROVERKABANPODSETIP:
	
	new iniFile=ini_openFile(account); // Откроем файл и запишем его номер
	ini_getString(iniFile, "Ник_админа_вышавшего_блокировку",AdminName); // Запишем ник админа в переменную
	ini_getString(iniFile, "Причина_блокировки",ReasonBan); // Запишем причину бана в переменную
	ini_getString(iniFile, "Вид_блокировки",VidBan); // Запишем вид бана
	ini_getString(iniFile, "Заблокированная_подсеть", podsetIP);
	ini_getString(iniFile, "Ник_имевший_эту_подсеть",BanIpNamePlaya);
	ini_getInteger(iniFile,"Количество_дней_блокировки_аккаунта",dney); // Запишем количество дней бана
	ini_getInteger(iniFile,"ЧИСЛО_ПРИ_РАЗБЛОКИРОВКЕ", unbantime); // Запишем unix время разбана
	ini_getInteger(iniFile,"Год_блокировки_аккаунта",d_year); // Запишем год бана
	ini_getInteger(iniFile,"Месяц_блокировки_аккаунта",d_month);  // Запишем месяц бана
	ini_getInteger(iniFile,"День_блокировки_аккаунта",d_day); // Запишем день бана
	ini_getInteger(iniFile,"Час_блокировки_аккаунта",v_hour); // Запишем час бана
	ini_getInteger(iniFile,"Минута_блокировки_аккаунта",v_minuite); // Запишем минуту бана
	ini_getInteger(iniFile,"Секунда_блокировки_аккаунта",v_second); // Запишем секунду бана
	ini_closeFile(iniFile); // Закроем файл по его номеру
	
	if(currenttime >= unbantime) return SusUnbaneedIpPodset(playerid, account); // Если unix время сейчас больше или равно unix время разблокировки, запустим сток разбана
	else
	{
	    format(gString, sizeof(gString), COL_RED" | "COL_YELLOW"Информация о блокировке "COL_RED"|");
	    format(gString, sizeof(gString), "%s\n"COL_WHITE"Вид блокировки: "COL_LBLUE"%s",gString, VidBan);
	    format(gString, sizeof(gString), "%s\n"COL_WHITE"Заблокированная подсеть: "COL_LBLUE"%s",gString, podsetIP);
	    format(gString, sizeof(gString), "%s\n"COL_WHITE"Ваша подсеть: "COL_LBLUE"%s"COL_WHITE":"COL_LBLUE"%s",gString,pIPPodsetPlayerTwo[playerid],pIPPodsetPlayerThree[playerid]
);
	    format(gString, sizeof(gString), "%s\n"COL_WHITE"Доступ в игру с этой подсети "COL_LBLUE"запрещен "COL_WHITE"сервером!",gString);
	    format(gString, sizeof(gString), "%s\n"COL_WHITE"Ваш ник: "COL_LBLUE"%s",gString,pNickNamePlayer[playerid]);
	    format(gString, sizeof(gString), "%s\n"COL_WHITE"Ник, при котором была заблокирована подсеть: "COL_LBLUE"%s",gString,BanIpNamePlaya);
	    format(gString, sizeof(gString), "%s\n"COL_WHITE"Причина блокировки: "COL_LBLUE"%s",gString, ReasonBan);
	    format(gString, sizeof(gString), "%s\n"COL_WHITE"Дата бана - Год: "COL_LBLUE"%d"COL_WHITE", Месяц: "COL_LBLUE"%d"COL_WHITE", День: "COL_LBLUE"%d",gString,d_year,d_month,d_day);
		format(gString, sizeof(gString), "%s\n"COL_WHITE"Время бана - Час: "COL_LBLUE"%d"COL_WHITE", Минута: "COL_LBLUE"%d"COL_WHITE", Секунда: "COL_LBLUE"%d",gString,v_hour,v_minuite,v_second);
		format(gString, sizeof(gString), "%s\n"COL_WHITE"Блокировка аккаунта на "COL_LBLUE"%d "COL_WHITE"дней",gString,dney);
		format(gString, sizeof(gString), "%s\n"COL_WHITE"Администрор выдавший блокировку: "COL_LBLUE"%s",gString, AdminName);
		ShowPlayerDialog(playerid,D_BANINFORMATION,DIALOG_STYLE_MSGBOX,"Блокировка",gString,"Ясно",""); // Информация о блокировке

	    Fixkikeed(playerid); // Отключим от сервера
	}
	return true;
}

stock SusUnbaneedIpAdress(playerid, account[])
{
    new AdminName[SERVER_MAXNAMEE]; // Перменная ника админа
    new ReasonBan[256]; // Перменная причины бана
    new VidBan[24]; // Перменная вида бана
    new ipforfile[30];
    new BanIpNamePlaya[SERVER_MAXNAMEE]; // Переменная для игрока при котором был заблокирован IP адрес
    new dney; // Перменная для кол-ва дней бана
    new d_year,d_month,d_day; // Перменные года, месяца, дня
    new v_hour,v_minuite,v_second; // Перменная часа, минуты, секунды
    
    new iniFile=ini_openFile(account); // Откроем файл и запишем его номер
    //
    ini_getString(iniFile, "Ник_админа_вышавшего_блокировку",AdminName); // Запишем ник админа в переменную
    ini_getString(iniFile, "Причина_блокировки",ReasonBan); // Запишем причину бана в переменную
    ini_getString(iniFile, "Вид_блокировки",VidBan); // Запишем вид бана
    ini_getString(iniFile, "Заблокированный_IP_адрес", ipforfile);
    ini_getString(iniFile, "Ник_имевший_этот_IP_на_момент_блокировки",BanIpNamePlaya);
    ini_getInteger(iniFile,"Количество_дней_блокировки_аккаунта",dney); // Запишем количество дней бана
    ini_getInteger(iniFile,"Год_блокировки_аккаунта",d_year); // Запишем год бана
    ini_getInteger(iniFile,"Месяц_блокировки_аккаунта",d_month);  // Запишем месяц бана
    ini_getInteger(iniFile,"День_блокировки_аккаунта",d_day); // Запишем день бана
    ini_getInteger(iniFile,"Час_блокировки_аккаунта",v_hour); // Запишем час бана
    ini_getInteger(iniFile,"Минута_блокировки_аккаунта",v_minuite); // Запишем минуту бана
    ini_getInteger(iniFile,"Секунда_блокировки_аккаунта",v_second); // Запишем секунду бана
	ini_closeFile(iniFile); // Закроем файл по его номеру

	fremove(account); // Удалим файл
	
	format(gString, sizeof(gString), COL_RED" | "COL_YELLOW"Информация о разблокировке "COL_RED"|");
	format(gString, sizeof(gString), "%s\n"COL_WHITE"Ранее твой "COL_RED"IP адрес "COL_WHITE"был забанен.", gString);
	format(gString, sizeof(gString), "%s\n"COL_WHITE"Вид блокировки: "COL_LBLUE"%s",gString,VidBan);
	format(gString, sizeof(gString), "%s\n"COL_WHITE"Разблокированный IP адрес: "COL_LBLUE"%s",gString,ipforfile);
	format(gString, sizeof(gString), "%s\n"COL_WHITE"Доступ в игру с этого "COL_LBLUE"IP адреса "COL_WHITE"разрешен сервером!",gString);
	format(gString, sizeof(gString), "%s\n"COL_WHITE"Ник имевший этот "COL_LBLUE"IP адрес "COL_WHITE"на момент блокировки: "COL_LBLUE"%s",gString,BanIpNamePlaya);
	format(gString, sizeof(gString), "%s\n"COL_WHITE"Причина блокировки: "COL_LBLUE"%s",gString, ReasonBan);
	format(gString, sizeof(gString), "%s\n"COL_WHITE"Дата бана - Год: "COL_LBLUE"%d"COL_WHITE", Месяц: "COL_LBLUE"%d"COL_WHITE", День: "COL_LBLUE"%d",gString,d_year,d_month,d_day);
	format(gString, sizeof(gString), "%s\n"COL_WHITE"Время бана - Час: "COL_LBLUE"%d"COL_WHITE", Минута: "COL_LBLUE"%d"COL_WHITE", Секунда: "COL_LBLUE"%d",gString,v_hour,v_minuite,v_second);
	format(gString, sizeof(gString), "%s\n"COL_WHITE"Блокировка аккаунта производилась на "COL_LBLUE"%d "COL_WHITE"дней",gString,dney);
	format(gString, sizeof(gString), "%s\n"COL_WHITE"Администрор выдавший блокировку: "COL_LBLUE"%s"COL_WHITE,gString, AdminName);
    format(gString, sizeof(gString), "%s\n"COL_WHITE"Сегодня твой "COL_LBLUE"IP адрес"COL_WHITE" был "COL_LBLUE"разблокирован "COL_WHITE"сервером.", gString);
    format(gString, sizeof(gString), "%s\n"COL_WHITE"Впредь пожалуйста не нарушай правила сервера и (или) проекта.", gString);
	ShowPlayerDialog(playerid,D_UNBANINFORMATION,DIALOG_STYLE_MSGBOX,"Разблокировка",gString,"Авториз",""
); // Информация о разблокировке
	
	format(estr,sizeof(estr),COL_LBLUE"[Разбан]"COL_RED" У игрока "COL_APELS"%s "COL_RED"IP адрес: "COL_APELS"%s "COL_RED"был разблокирован системой. Причина: "COL_APELS"Кончился срок блокировки.",pNickNamePlayer[playerid],ipforfile); // Оповещаем игроков
    SendClientMessageToAll(-1,estr); // Сообщение
	return true;
}

stock SusUnbaneedIpPodset(playerid, account[])
{
    new AdminName[SERVER_MAXNAMEE]; // Перменная ника админа
    new ReasonBan[256]; // Перменная причины бана
    new VidBan[24]; // Перменная вида бана
    new podsetIP[30];
    new BanIpNamePlaya[SERVER_MAXNAMEE]; // Переменная для игрока при котором был заблокирован IP адрес
    new dney; // Перменная для кол-ва дней бана
    new d_year,d_month,d_day; // Перменные года, месяца, дня
    new v_hour,v_minuite,v_second; // Перменная часа, минуты, секунды
    
	new iniFile=ini_openFile(account); // Откроем файл и запишем его номер
	ini_getString(iniFile, "Ник_админа_вышавшего_блокировку",AdminName); // Запишем ник админа в переменную
	ini_getString(iniFile, "Причина_блокировки",ReasonBan); // Запишем причину бана в переменную
	ini_getString(iniFile, "Вид_блокировки",VidBan); // Запишем вид бана
	ini_getString(iniFile, "Заблокированная_подсеть", podsetIP);
	ini_getString(iniFile, "Ник_имевший_эту_подсеть",BanIpNamePlaya);
	ini_getInteger(iniFile,"Количество_дней_блокировки_аккаунта",dney); // Запишем количество дней бана
	ini_getInteger(iniFile,"Год_блокировки_аккаунта",d_year); // Запишем год бана
	ini_getInteger(iniFile,"Месяц_блокировки_аккаунта",d_month);  // Запишем месяц бана
	ini_getInteger(iniFile,"День_блокировки_аккаунта",d_day); // Запишем день бана
	ini_getInteger(iniFile,"Час_блокировки_аккаунта",v_hour); // Запишем час бана
	ini_getInteger(iniFile,"Минута_блокировки_аккаунта",v_minuite); // Запишем минуту бана
	ini_getInteger(iniFile,"Секунда_блокировки_аккаунта",v_second); // Запишем секунду бана
	ini_closeFile(iniFile); // Закроем файл по его номеру
	
	fremove(account); // Удалим файл
	
	format(gString, sizeof(gString), COL_RED" | "COL_YELLOW"Информация о разблокировке "COL_RED"|");
	format(gString, sizeof(gString), "%s\n"COL_WHITE"Ранее твоя "COL_RED"подсеть "COL_WHITE"была заблокирована.", gString);
	format(gString, sizeof(gString), "%s\n"COL_WHITE"Вид блокировки: "COL_LBLUE"%s",gString,VidBan);
	format(gString, sizeof(gString), "%s\n"COL_WHITE"Разблокированная подсеть: "COL_LBLUE"%s",gString,podsetIP);
	format(gString, sizeof(gString), "%s\n"COL_WHITE"Доступ в игру с этой "COL_LBLUE"подсети "COL_WHITE"разрешен сервером!",gString);
	format(gString, sizeof(gString), "%s\n"COL_WHITE"Ник имевший эту "COL_LBLUE"подсеть "COL_WHITE"на момент блокировки: "COL_LBLUE"%s",gString,BanIpNamePlaya);
	format(gString, sizeof(gString), "%s\n"COL_WHITE"Причина блокировки: "COL_LBLUE"%s",gString, ReasonBan);
	format(gString, sizeof(gString), "%s\n"COL_WHITE"Дата бана - Год: "COL_LBLUE"%d"COL_WHITE", Месяц: "COL_LBLUE"%d"COL_WHITE", День: "COL_LBLUE"%d",gString,d_year,d_month,d_day);
	format(gString, sizeof(gString), "%s\n"COL_WHITE"Время бана - Час: "COL_LBLUE"%d"COL_WHITE", Минута: "COL_LBLUE"%d"COL_WHITE", Секунда: "COL_LBLUE"%d",gString,v_hour,v_minuite,v_second);
	format(gString, sizeof(gString), "%s\n"COL_WHITE"Блокировка аккаунта производилась на "COL_LBLUE"%d "COL_WHITE"дней",gString,dney);
	format(gString, sizeof(gString), "%s\n"COL_WHITE"Администрор выдавший блокировку: "COL_LBLUE"%s"COL_WHITE,gString, AdminName);
    format(gString, sizeof(gString), "%s\n"COL_WHITE"Сегодня твой "COL_LBLUE"IP адрес"COL_WHITE" был "COL_LBLUE"разблокирован "COL_WHITE"сервером.", gString);
    format(gString, sizeof(gString), "%s\n"COL_WHITE"Впредь пожалуйста не нарушай правила сервера и (или) проекта.", gString);
	ShowPlayerDialog(playerid,D_UNBANINFORMATION,DIALOG_STYLE_MSGBOX,"Разблокировка",gString,"Авториз",""
); // Информация о разблокировке

	format(estr,sizeof(estr),COL_LBLUE"[Разбан]"COL_RED" У игрока "COL_APELS"%s "COL_RED"подсеть: "COL_APELS"%s "COL_RED"была разблокирована системой. Причина: "COL_APELS"Кончился срок блокировки.",pNickNamePlayer[playerid],podsetIP); // Оповещаем игроков
    SendClientMessageToAll(-1,estr); // Сообщение
	return true;
}

stock AdmBaneedIpAdress(banid,admid,dney,reaz[])
{
    if(dney == 0)return SendClientMessage(admid,-1,COL_RED"[Ошибка]"COL_YELLOW" Нельзя указать ноль дней!"); // Если дней меньше одного указано админом
    
    new razbanacc; // Переменная для unix времени разблокировки
    new banacc; // Перменная для unix блокировки
    new account[256]; // Перменная для пути
	new year, month, day; // Перменные года, месяца, дня
	new hour ,minuite, second; // Перменная часа, минуты, секунды
	
	format(estr,sizeof(estr),COL_RED"Администратор "COL_APELS"%s "COL_RED" заблокировал IP адрес: "COL_APELS"%s "COL_RED"игрока "COL_APELS"%s[%d] "COL_RED"на "COL_APELS"%d "COL_RED"дней. Причина: "COL_APELS"%s",pNickNamePlayer[admid],pIPAdressPlayer[banid],pNickNamePlayer[banid],banid,dney,reaz);
	SendClientMessageToAll(-1,estr); // Сообщение
	format(estr,sizeof(estr),COL_RED"Твой IP адрес: "COL_APELS"%s"COL_RED", был заблокирован администратором "COL_APELS"%s"COL_RED", на "COL_APELS"%d "COL_RED"дней. Причина: "COL_APELS"%s",pIPAdressPlayer[banid],pNickNamePlayer[admid],dney,reaz);
	SendClientMessage(banid,-1,estr); // Сообщение
	format(estr,sizeof(estr),COL_RED"Ты заблокировил IP адрес: "COL_APELS"%s"COL_RED", игрока "COL_APELS"%s[%d] "COL_RED"на "COL_APELS"%d "COL_RED"дней. Причина: "COL_APELS"%s",pIPAdressPlayer[banid],pNickNamePlayer[banid],banid,dney,reaz);
	SendClientMessage(admid,-1,estr); // Сообщение
	
	getdate(year,month,day); // Запишем год, месяц, день в наши переменные
	gettime(hour,minuite,second); // Запишем час, минуту, секунду в наши переменные
	banacc = gettime(); // Запишем unix время бана
    razbanacc = 86400 * dney; // Узнаем unix время разбана
    
    format(account,sizeof(account),SERVER_PAHTACC_BANNEDSIPZ"%s.txt",pIPAdressPlayer[banid]); // Форматируем путь
    
    new iniFile=ini_createFile(account);
    if(iniFile < 0)ini_openFile (account); // Если файл пустой откроем его
	{
	    ini_setString(iniFile, "Ник_админа_вышавшего_блокировку", pNickNamePlayer[admid]); // Узнаем ник админа выдавшего бан и запишем его в файл
	    ini_setString(iniFile, "Причина_блокировки", reaz); // Запишем причину бана
	    ini_setString(iniFile, "Вид_блокировки", "IP адрес"); // Запишем вид бана
	    ini_setString(iniFile, "Заблокированный_IP_адрес", pIPAdressPlayer[banid]);
	    ini_setString(iniFile, "Ник_имевший_этот_IP_на_момент_блокировки",pNickNamePlayer[banid]);
	    ini_setInteger(iniFile,"Количество_дней_блокировки_аккаунта",dney); // Запишем количество дней бана
	    ini_setInteger(iniFile,"ЧИСЛО_ПРИ_БЛОКИРОВКЕ", banacc); // Запишем unix время бана
	    ini_setInteger(iniFile,"ЧИСЛО_ПРИ_РАЗБЛОКИРОВКЕ", razbanacc + banacc); // Запишем unix время разбана
	    ini_setInteger(iniFile,"Год_блокировки_аккаунта",year); // Запишем год бана
		ini_setInteger(iniFile,"Месяц_блокировки_аккаунта",month);  // Запишем месяц бана
		ini_setInteger(iniFile,"День_блокировки_аккаунта",day); // Запишем день бана
		ini_setInteger(iniFile,"Час_блокировки_аккаунта",hour); // Запишем час бана
		ini_setInteger(iniFile,"Минута_блокировки_аккаунта",minuite); // Запишем минуту бана
		ini_setInteger(iniFile,"Секунда_блокировки_аккаунта",second); // Запишем секунду бана
	    ini_closeFile(iniFile); // Закроем файл по его номеру

		SendClientMessage(banid,-1,""); // Сообщение
		SendClientMessage(banid,-1,COL_RED"--------------------------------------------------------------------------------------------------------");
 // Сообщение
		SendClientMessage(banid,-1,COL_WHITE"Не согласен с действием администрации? Пиши жалобу - "COL_APELS SERVER_WEBURL_JB_GRUPS); // Сообщение
		SendClientMessage(banid,-1,COL_WHITE"Для разблокировки пиши в эту тему - "COL_APELS SERVER_WEBURL_UNB_GRUPS); // Сообщение
		SendClientMessage(banid,-1,COL_RED"--------------------------------------------------------------------------------------------------------");
 // Сообщение
		SendClientMessage(banid,-1,""); // Сообщение

		ProverkaBanIpAdress(banid); // Отправим игрока по его номеру на проверку бана
	}
	return true;
}

stock AdmBaneedIpPodset(banid,admid,dney,paramz,reaz[])
{
    if(dney == 0)return SendClientMessage(admid,-1,COL_RED"[Ошибка]"COL_YELLOW" Нельзя указать ноль дней!"); // Если дней меньше одного указано админом
    
    new razbanacc; // Переменная для unix времени разблокировки
    new banacc; // Перменная для unix блокировки
    new account[256]; // Перменная для пути
	new year, month, day; // Перменные года, месяца, дня
	new hour ,minuite, second; // Перменная часа, минуты, секунды
	new podsetIP[30];
	
	switch (paramz)
	{
	    case 2:format(podsetIP,sizeof(podsetIP),"%s",pIPPodsetPlayerTwo[banid]);
	    case 3:format(podsetIP,sizeof(podsetIP),"%s",pIPPodsetPlayerThree[banid]);
	}
	
	format(estr,sizeof(estr),"Администратор %s заблокировал подсеть IP: %s игрока %s[%d] на %d дней. Причина: %s",pNickNamePlayer[admid],podsetIP,pNickNamePlayer[banid],banid,dney,reaz);
	SendClientMessageToAll(-1,estr); // Сообщение
	format(estr,sizeof(estr),"Твою подсеть IP: %s заблокировал админ %s на %d дней. Причина: %s",podsetIP,pNickNamePlayer[admid],dney,reaz);
	SendClientMessage(banid,-1,estr); // Сообщение
	format(estr,sizeof(estr),"Ты заблокировал подсеть: %s игрока %s[%d] на %d дней. Причина: %s",podsetIP,pNickNamePlayer[banid],banid,dney,reaz);
	SendClientMessage(admid,-1,estr); // Сообщение
	
	getdate(year,month,day); // Запишем год, месяц, день в наши переменные
	gettime(hour,minuite,second); // Запишем час, минуту, секунду в наши переменные
	banacc = gettime(); // Запишем unix время бана
    razbanacc = 86400 * dney; // Узнаем unix время разбана
    
    format(account,sizeof(account),SERVER_PAHTACC_BANNEDSPODSETZ"%s.txt",podsetIP); // Форматируем путь
    
    new iniFile=ini_createFile(account);
    if(iniFile < 0)ini_openFile (account); // Если файл пустой откроем его
	{
	    ini_setString(iniFile, "Ник_админа_вышавшего_блокировку", pNickNamePlayer[admid]); // Узнаем ник админа выдавшего бан и запишем его в файл
	    ini_setString(iniFile, "Причина_блокировки", reaz); // Запишем причину бана
	    ini_setString(iniFile, "Вид_блокировки", "Подсеть"); // Запишем вид бана
	    ini_setString(iniFile, "Заблокированная_подсеть", podsetIP);
	    ini_setString(iniFile, "Ник_имевший_эту_подсеть", pNickNamePlayer[banid]);
	    ini_setInteger(iniFile,"Количество_дней_блокировки_аккаунта",dney); // Запишем количество дней бана
	    ini_setInteger(iniFile,"ЧИСЛО_ПРИ_БЛОКИРОВКЕ", banacc); // Запишем unix время бана
	    ini_setInteger(iniFile,"ЧИСЛО_ПРИ_РАЗБЛОКИРОВКЕ", razbanacc + banacc); // Запишем unix время разбана
	    ini_setInteger(iniFile,"Год_блокировки_аккаунта",year); // Запишем год бана
		ini_setInteger(iniFile,"Месяц_блокировки_аккаунта",month);  // Запишем месяц бана
		ini_setInteger(iniFile,"День_блокировки_аккаунта",day); // Запишем день бана
		ini_setInteger(iniFile,"Час_блокировки_аккаунта",hour); // Запишем час бана
		ini_setInteger(iniFile,"Минута_блокировки_аккаунта",minuite); // Запишем минуту бана
		ini_setInteger(iniFile,"Секунда_блокировки_аккаунта",second); // Запишем секунду бана
	    ini_closeFile(iniFile); // Закроем файл по его номеру

		SendClientMessage(banid,-1,""); // Сообщение
		SendClientMessage(banid,-1,COL_RED"--------------------------------------------------------------------------------------------------------");
 // Сообщение
		SendClientMessage(banid,-1,COL_WHITE"Не согласен с действием администрации? Пиши жалобу - "COL_APELS SERVER_WEBURL_JB_GRUPS); // Сообщение
		SendClientMessage(banid,-1,COL_WHITE"Для разблокировки пиши в эту тему - "COL_APELS SERVER_WEBURL_UNB_GRUPS); // Сообщение
		SendClientMessage(banid,-1,COL_RED"--------------------------------------------------------------------------------------------------------");
 // Сообщение
		SendClientMessage(banid,-1,""); // Сообщение

		ProverkaBanIpPodset(banid); // Отправим игрока по его номеру на проверку бана
	}
	return true;
}

0

#2
Пользователь офлайн   suza 

  • suza
  • Вставить ник
  • Раскрыть информацию
Скачать целый сервер
new.pwn [115,96К]

1

#3
Пользователь офлайн   .evoxxx 

  • Liberty Inc.
  • Вставить ник
  • Раскрыть информацию
начиная с ProverkaBanIpAdress
у меня потекли глаза :wacko:
1

#4
Пользователь офлайн   suza 

  • suza
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияSnoopDy (07 июля 2015 - 21:07) писал:

начиная с ProverkaBanIpAdress
у меня потекли глаза :wacko:


чем вас не устраивает код? Работает же и без багов
0

#5
Пользователь офлайн   .evoxxx 

  • Liberty Inc.
  • Вставить ник
  • Раскрыть информацию
Ладно это еще что-то но что за оптимизация?
[256];

0

#6
Пользователь офлайн   suza 

  • suza
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияSnoopDy (08 июля 2015 - 10:35) писал:

Ладно это еще что-то но что за оптимизация?
[256];



Главное "Работает и ладно".
0

#7
Пользователь офлайн   .evoxxx 

  • Liberty Inc.
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияsuza (08 июля 2015 - 15:35) писал:

Главное "Работает и ладно".

Допустим, а вот найдется такой человек, который будет делать мод по твоим урокам (не видел таких) и поставит свой мод на ОоОчень слабенький хост, и у него при онлайне 20 сервер крашить будет, лучше оптимизируй
0

#8
Пользователь офлайн   suza 

  • suza
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияSnoopDy (09 июля 2015 - 10:33) писал:

Допустим, а вот найдется такой человек, который будет делать мод по твоим урокам (не видел таких) и поставит свой мод на ОоОчень слабенький хост, и у него при онлайне 20 сервер крашить будет, лучше оптимизируй


скинь пример оптимизации этого кода. Я посмотрю.
0

#9
Пользователь офлайн   arediveev 

  • Прохожий
  • Вставить ник
  • Раскрыть информацию
Дайте ссылку на 1 урок пожалуйста
0

#10
Пользователь офлайн   suza 

  • suza
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияarediveev (27 июля 2015 - 19:31) писал:

Дайте ссылку на 1 урок пожалуйста


https://pawn.wiki/in...pic/26292-suza/
0

Поделиться темой:


  • (2 Страниц) +
  • 1
  • 2
  • Вы не можете создать новую тему
  • Тема закрыта

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей


Яндекс.Метрика