Доступ к готовым решениям

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

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

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

Мануал Система бана (Copy Advance)

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

СергейTaz

Ученик
Вечер в хату, pawno-info. ​

Сегодня постараюсь показать, как сделать систему бана точно такую-же ( +-) как на Advance.
В итоге мы получим вот такую картину:

Использованные плагины, инклуды:
  1. Mysql R9-39;
  2. DC_CMD;
  3. Sscanf;
  4. mxdate;

Приступаем.

Первым шагом мы идем в самый вверх, там где у нас различные энуменаторы ( Enum ) и добавляем:​
PHP:
 enum bInfo
{

	bBan_name[MAX_PLAYER_NAME],
	bAdmin_Name[MAX_PLAYER_NAME],
	bBan_Reason[30],
	bUnban_Date,
	bBan_Date
};
new ban_variable[MAX_PLAYERS][bInfo];


Вторым шагом будет импортирование базы данных:​

Скачиваем


далее выбираем базу данных и нажимаем OK.​

Третьим шагом создаем команду для бана, а так же проверка аккаунт на нахождение в банлисте.​
Ко всем командам
PHP:
CMD:ban(playerid, params[])
{
	new
	    ban_ID,
	    ban_time,
	    ban_reason[30];
	    
	if(sscanf(params, "iis[30]", ban_ID, ban_time, ban_reason))
	    return SendClientMessage(playerid, 0xCECFCEFF, "Используй /ban [id игрока] [срок в днях] [причина(необязательно)]");
	if(!(2 <= ban_time <= 31))
	    return SendClientMessage(playerid, 0xCECFCEFF, "Срок может быть от до 2 до 30 дней");

	ban_variable[ban_ID][bUnban_Date] = gettime() + ban_time*86400;
	ban_variable[ban_ID][bBan_Date] = gettime()-366;
	
	static const
		frm_string[] = "INSERT INTO `banlist` (`ban_name`, `admin_name_ban`, `reason`, `unbane_date`, `ban_date`) VALUES ('%s', '%s', '%s', '%i', '%i')";
	new query_string[sizeof(frm_string)-2+MAX_PLAYER_NAME-2+MAX_PLAYER_NAME-2+30-2+11-2+11];

	format(query_string, sizeof(query_string), frm_string, player_name[ban_ID], player_name[playerid], ban_reason, ban_variable[ban_ID][bUnban_Date], ban_variable[ban_ID][bBan_Date]);
	mysql_function_query(mysql_connect_ID, query_string, false, "", "");
	
	static const
	    form_string[] = "Администратор %s забанил игрока %s на %i дней. Причина: %s";
	new string[sizeof(form_string)-2+MAX_PLAYER_NAME-2+MAX_PLAYER_NAME-2+144];
	
	format(string, sizeof(string), form_string, player_name[playerid], player_name[ban_ID], ban_time, ban_reason);
	SendClientMessageToAll(0xFF4F00FF, string);
	
	return true;
}


В паблик OnPlayerConnect проверка на нахождение в банлисте
PHP:
	static const
	    frm_string[] = "SELECT * FROM `banlist` WHERE `ban_name` = '%s'";
	new string[sizeof(frm_string)-2+MAX_PLAYER_NAME];
	
	format(string, sizeof(string), frm_string, player_name);
	mysql_function_query(mysql_connect_ID, string, true, "IsPlayerOnBanList", "i", playerid);
Создаем новый паблик IsPlayerOnBanList ( Добавляем после всех стандартных пабликов )
PHP:
forward IsPlayerOnBanList(playerid);
public IsPlayerOnBanList(playerid)
{
	new rows, fields;
	
	cache_get_data(rows, fields);
	
	if(rows)
	{
 		cache_get_field_content(0, "admin_name_ban", ban_variable[playerid][bAdmin_Name], mysql_connect_ID, MAX_PLAYER_NAME);
 		cache_get_field_content(0, "ban_name", ban_variable[playerid][bBan_name], mysql_connect_ID, MAX_PLAYER_NAME);
		cache_get_field_content(0, "reason", ban_variable[playerid][bBan_Reason], mysql_connect_ID, 30);
		
		ban_variable[playerid][bBan_Date]= cache_get_field_content_int(0, "ban_date", ban_variable[playerid][bBan_Date]);
		ban_variable[playerid][bUnban_Date] = cache_get_field_content_int(0, "unbane_date", ban_variable[playerid][bUnban_Date]);
		
		if(ban_variable[playerid][bUnban_Date] > gettime())
		{
			static const
			    frm_string[] = "{ffffff}Этот аккаунт заблокирован на {FF8000}%i дней{ffffff}\n\n\
				{ffffff}Ник администратора: %s\n\
				Причина блокировки: %s\n\
				Дата и время: %s\n\n\
				Введите {ffd200}/q (/quit){ffffff} чтобы выйти.";
			new string[sizeof(frm_string)-2+11-2+MAX_PLAYER_NAME-2+30-2+11];


			format(string, sizeof(string), frm_string, (floatround(ban_variable[playerid][bUnban_Date],floatround_ceil)-gettime())/86400, ban_variable[playerid][bAdmin_Name], ban_variable[playerid][bBan_Reason], date("%yyyy-%mm-%dd %hh:%mm:%ss",ban_variable[playerid][bBan_Date]));
			ShowPlayerDialog(playerid, 999, DIALOG_STYLE_MSGBOX, "{63cbff}Advance RolePlay", string, "Закрыть", "");
		}
		else
		{
		    static const
		        frm_string[] = "DELETE FROM `banlist` WHERE `ban_name` = '%s'";
			new query_string[sizeof(frm_string)-2+MAX_PLAYER_NAME];
			
			format(query_string, sizeof(query_string), frm_string, ban_variable[playerid][bBan_name]);
			mysql_function_query(mysql_connect_ID, query_string, false, "", "");
		}
	}
}


Возможные ошибки:
PHP:
error 017: undefined symbol "player_name"
Решается проблема так:

К глобальным переменым добавляем

PHP:
new player_name[MAX_PLAYERS][MAX_PLAYER_NAME];
В паблик OnPlayerConnect добавляем

PHP:
GetPlayerName(playerid, player_name[playerid], MAX_PLAYER_NAME);


Автор: СергейTaz

---------- Сообщение добавлено в 17:52 ---------- Предыдущее сообщение добавлено в 17:45 ----------

Так же в скором времени добавлю команду /offban FULL COPY ADVANCE
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу