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

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

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

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

/offban /offwarn /offmute /offjail (оффлайн выдача наказаний)

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

xDimasx

Эксперт
Пользователь
Регистрация
1 Фев 2014
Сообщения
1,364
Лучшие ответы
4
Репутация
158
Здравствуйте,давненько я ничего не делал т.к нету идей.
И сейчас я решил сделать офф команды.
Для чего они полезны? Полезны они тем,что если у Вас на форуме висит жалоба то по ней сразу Вы можете наказать.
ИЛи-же если нарушитель решился оффнуться от наказания.
Ну что-ж,давайте приступим.

Ниже будет использоваться handle,у Вас это может быть dbHandle или что то подобное.

Что нам понадобиться первым делом?
В своей Базе Данных создаём переменные:
Код:
OffWarns в Int значение
OffWarnsReason в VarChar значение
OffWarnsAdm в VarChar значение
В pInfo создаём переменные:
Код:
pOffWarns,
pOffWarnsReason,
pOffWarnsAdm,
Далее делаете сохранение и загрузку этих переменных.

Теперь идём к самим командам.
Команда /offban (что-бы работала корректно,Вам нужна моя система бана которая будет в след.уроке):
PHP:
CMD:offban(playerid,params[])
{
	if(pData[playerid][pAdmin] < 4) return 1;  // Проверка на админ.права
	new query[128],param_name[24],param_reason[32],param_day;  // Лично у меня не работали params[0],params[1] и params[2] поэтому я создал только так.
	if(sscanf(params, "s[24]ds[32]", param_name,param_day,param_reason)) return SCM(playerid, COLOR_NFR, "Используйте: /offban [Nick_Name] [Дни] [Причина]"); // Присваиваем значение
	if(!strcmp(param_name, "Nick_Name0", true) || !strcmp(param_name, "Nick_Name1", true) || !strcmp(param_name, "Nick_Name2", true)) return SCM(playerid,-1,"Вы не можете наказать данный аккаунт");// Проверка на то,что-бы Вас не заблокировали
	foreach(Player, i) // Создаём цикл
	{
		new szName[64];
		if(!IsPlayerConnected(i)) continue;
		GetPlayerName(i,szName,64);
		if(!strcmp(param_name, szName, false)) return SCM(playerid,-1,"Этот игрок в сети, используйте /ban"); // Проверка на игрока в сети
	}
	if(param_day > 30 || param_day < 1) return SCM(playerid, COLOR_GRAD1, "Используйте от 1 до 30 дней."); // Делаем проверку что бы не забанили больше чем на 30 дней или меньше 1 дня
	SetPVarString(playerid,"OffBanReason",param_reason); // Присваваем причину к PVar
	SetPVarInt(playerid,"OffBanDay",param_day); // Присваиваем дни к PVar
	format(qqstring,sizeof(qqstring), "SELECT * FROM `bans` WHERE `name` = '%s'", param_name); // Форматируем запрос (Система блокировки онлайн будет в моём след.уроке)
	mysql_function_query(handle, qqstring, true, "OffBans", "is", playerid, param_name); // Отправляем запрос
	return 1;
}

forward OffBans(playerid, name[]);
public OffBans(playerid, name[])
{
	new rows,fields;
	cache_get_data(rows, fields);
	if(rows) return SCM(playerid,COLOR_NFR,"Данный аккаунт уже заблокирован."); // Если аккаунт заблокирован,то выводим текст
    new string[216],reason[32],years,months,days,unbandate,data[32]; // Создаём переменные
    GetPVarString(playerid,"OffBanReason",reason,sizeof(reason)); // Достаём причину из PVar

	getdate(years, months, days); // Узнаём дату
	unbandate = gettime() + GetPVarInt(playerid,"OffBanDay")*86400; // Вычисляем дату разбана
	format(data, sizeof(data), "%02d.%02d.%04d", days, months, years); // Форматируем дату
	format(string, sizeof(string), "INSERT INTO bans (name, whobanned, ip, bandate, time, unbandate, reason) VALUES ('%s', '%s','-.-.-.-', '%s', %d, %d, '%s[Offline]')", name, pData[playerid][pName],data,GetPVarInt(playerid,"OffBanDay"), unbandate, reason); // Форматируем запрос
	mysql_function_query(handle, string, false, "",""); // Отправляем запрос

	format(qstring,sizeof(qstring), "UPDATE "TABLE_ACCOUNT" SET `Warn` = '0',`OffWarns` = '0',`OffWarnsAdm` = '0',`OffWarnsReason` = '0' WHERE `Name` = '%s'", name); // Форматируем запрос (У Вас `Warn` и `Name` могут быть подругому)
	mysql_function_query(handle, qstring, false, "",""); // Отправляем запрос

	format(string,sizeof(string),"[OFFLINE]: Администратор %s заблокировал %s на %d дней. Причина: %s",pData[playerid][pName],name,GetPVarInt(playerid,"OffBanDay"),reason); // Форматируем текст для всех
	SendClientMessageToAll(COLOR_LIGHTRED,string); // Выводим текст для всех
	DeletePVar(playerid,"OffBanReason"); // Удаляем PVar
	DeletePVar(playerid,"OffBanDay"); // Удаляем PVar
	return 1;
}
Команда /offwarn:
PHP:
CMD:offwarn(playerid,params[])
{
    if(pData[playerid][pAdmin] < 3) return SendClientMessage(playerid,-1,"У Вас нет доступа к этой команде."); // Проверка на админ.права
	new query[128],param_name[24],param_reason[32]; // Лично у меня не работали params[0] и params[1] поэтому я создал только так.
	if(sscanf(params, "s[24]s[32]", param_name,param_reason)) return SendClientMessage(playerid, -1, "Используйте: /offwarn [Nick_Name] [Причина]"); // Присваиваем значение
    if(!strcmp(param_name, "Nick_Name0", true) || !strcmp(param_name, "Nick_Name1", true) || !strcmp(param_name, "Nick_Name2", true)) return SendClientMessage(playerid,-1,"Вы не можете наказать данный аккаунт");// Проверка на то,что-бы Вас не заблокировали
	foreach(Player, i)// Создаём цикл
	{
		new szName[24];
		if(!IsPlayerConnected(i)) continue;
		GetPlayerName(i,szName,64);
		if(!strcmp(param_name, szName, false)) return SendClientMessage(playerid,-1,"Этот игрок в сети, используйте /awarn"); // Проверяем,есть ли этот игрок на сервере
	}
	SetPVarString(playerid,"OffWarnReason",param_reason); // Создаём PVar с причиной варна
	format(query,sizeof(query), "SELECT * FROM "TABLE_ACCOUNT" WHERE `Name` = '%s'", param_name); // Форматируем запрос
	mysql_function_query(handle, query, true, "OffWarns", "is", playerid, param_name); // Отправляем запрос в паблик OffWarns
	return 1;
}

forward OffWarns(playerid, name[]);
public OffWarns(playerid, name[])
{
	new rows,fields;
	cache_get_data(rows, fields);
	if(!rows) return SendClientMessage(playerid,-1,"Аккаунт по Вашему запросу не был найден."); // Если аккаунт не найден,то выводим текст
    new string[216],reason[32]; // Создаём переменные
	new warnsoff = cache_get_field_content_int(0, "Warn"); // К переменной warnsoff присваиваем сколько у игрока варнов (у Вас вместо Warn может быть подругому)
	if(warnsoff >= 3) return SendClientMessage(playerid,-1,"У данного игрока больше 3-ёх предупреждений."); // Если у него больше 3-ёх варнов,то выводим текст
    GetPVarString(playerid,"OffWarnReason",reason,sizeof(reason));// Достаём причину варна из PVar
    format(string,sizeof(string),"UPDATE "TABLE_ACCOUNT" SET `Warn` = (`Warn` + '1'),`OffWarns` = (`OffWarns` + '1'),`OffWarnsReason` = '%s',`OffWarnsAdm` = '%s' WHERE `Name` = '%s'",reason,pData[playerid][pName],name); // Форматируем запрос (Warn и `Name` у Вас может быть другой)
	mysql_function_query(handle, string, true, "", ""); // Отправляем запрос
	format(string,sizeof(string),"[OFFLINE]: Администратор %s выдал предупреждение %s[%d/3]. Причина: %s",pData[playerid][pName],name,warnsoff+1,reason); // Форматируем текст для всех
	SendClientMessageToAll(COLOR_LIGHTRED,string); // Выводим текст для всех
	DeletePVar(playerid,"OffWarnReason"); // удаляем PVar с причиной
	return 1;
}
Команда /offmute:
PHP:
CMD:offmute(playerid,params[])
{
    if(pData[playerid][pAdmin] < 3) return SendClientMessage(playerid,-1,"У Вас нет доступа к этой команде."); // Проверка на админ.права
	new query[128],param_name[24],param_reason[32],param_day; // Лично у меня не работали params[0],params[1] и params[2] поэтому я создал только так.
	if(sscanf(params, "s[24]ds[32]", param_name,param_day,param_reason)) return SendClientMessage(playerid, COLOR_NFR, "Используйте: /offmute [Nick_Name] [Минуты] [Причина]"); // Присваиваем значение
    if(!strcmp(param_name, "Nick_Name0", true) || !strcmp(param_name, "Nick_Name1", true) || !strcmp(param_name, "Nick_Name2", true)) return SendClientMessage(playerid,-1,"Вы не можете наказать данный аккаунт");// Проверка на то,что-бы Вас не заблокировали
	foreach(Player, i) // Создаём цикл
	{
		new szName[64];
		if(!IsPlayerConnected(i)) continue;
		GetPlayerName(i,szName,64);
		if(!strcmp(param_name, szName, false)) return SendClientMessage(playerid,-1,"Этот игрок в сети, используйте /mute"); // Проверяем игрока,в сети он или нет.
	}
	if(param_day > 180 || param_day < 1) return SendClientMessage(playerid, -1, "Используйте от 1 до 180 мин."); // Проверяем,что бы было не больше 180 мину и не меньше 1
	SetPVarString(playerid,"OffMuteReason",param_reason); // Сохраняем причину в PVar
	SetPVarInt(playerid,"OffMuteDay",param_day); // Сохрянем минуты в PVar
	format(query,sizeof(query), "SELECT * FROM "TABLE_ACCOUNT" WHERE `Name` = '%s'", param_name); // Форматируем запрос
	mysql_function_query(handle, query, true, "OffMutes", "is", playerid, param_name); // Отправляем запрос
	return 1;
}

forward OffMutes(playerid, name[]);
public OffMutes(playerid, name[])
{
	new rows,fields;
	cache_get_data(rows, fields);
	if(!rows) return SendClientMessage(playerid,-1,"Аккаунт по Вашему запросу не был найден."); // Если аккаунт не найден,выводим текст
    new string[216],reason[32]; // Создаём переменные
    GetPVarString(playerid,"OffMuteReason",reason,sizeof(reason)); // достаём причину из PVar
    format(string,sizeof(string),"UPDATE "TABLE_ACCOUNT" SET `MuteTime` = '%d' WHERE `Name` = '%s'",GetPVarInt(playerid,"OffMuteDay"),name); // Форматируем запрос (У Вас может быть другая переменная за мут и ник вместо `MuteTime` и `Name`)
	mysql_function_query(handle, string, true, "", ""); // Отправляем запрос
	format(string,sizeof(string),"[OFFLINE]: Администратор %s выдал бан чата игроку %s на %d мин. Причина: %s",pData[playerid][pName],name,GetPVarInt(playerid,"OffMuteDay"),reason); // Форматируем текст
	SendClientMessageToAll(COLOR_LIGHTRED,string); // Выводим текст всем
	DeletePVar(playerid,"OffMuteReason"); // Удаляем PVar
	DeletePVar(playerid,"OffMuteDay"); // Удаляем PVar
	return 1;
}

Команда /offjail:
PHP:
CMD:offjail(playerid,params[])
{
    if(pData[playerid][pAdmin] < 3) return SendClientMessage(playerid,-1,"У Вас нет доступа к этой команде."); // Проверка на админ.права
	new query[128],param_name[24],param_reason[32],param_day; // Лично у меня не работали params[0],params[1] и params[2] поэтому я создал только так.
	if(sscanf(params, "s[24]ds[32]", param_name,param_day,param_reason)) return SCM(playerid, COLOR_NFR, "Используйте: /offjail [Nick_Name] [Минуты] [Причина]"); // Присваиваем значение
    if(!strcmp(param_name, "Nick_Name0", true) || !strcmp(param_name, "Nick_Name1", true) || !strcmp(param_name, "Nick_Name2", true)) return SCM(playerid,-1,"Вы не можете наказать данный аккаунт");// Проверка на то,что-бы Вас не заблокировали
	foreach(Player, i) // Создаём цикл
	{
		new szName[64];
		if(!IsPlayerConnected(i)) continue;
		GetPlayerName(i,szName,64);
		if(!strcmp(param_name, szName, false)) return SendClientMessage(playerid,-1,"Этот игрок в сети, используйте /ajail"); // Проверка на игрока в сети
	}
	if(param_day > 180 || param_day < 1) return SCM(playerid, COLOR_GRAD1, "Используйте от 1 до 180 мин."); // Проверяем что бы посадили не больше чем на 180 мин и не меньше 1 минуты
	SetPVarString(playerid,"OffJailReason",param_reason); // Присваиваем причину для тюрьмы PVarом
	SetPVarInt(playerid,"OffJailDay",param_day); // Присваиваем кол-во минут тюрьмы PVarом
	format(query,sizeof(query), "SELECT * FROM "TABLE_ACCOUNT" WHERE `Name` = '%s'", param_name); // ФОрматируем запрос
	mysql_function_query(handle, query, true, "OffJails", "is", playerid, param_name); // Отправляем запрос
	return 1;
}

forward OffJails(playerid, name[]);
public OffJails(playerid, name[])
{
	new rows,fields;
	cache_get_data(rows, fields);
	if(!rows) return SendClientMessage(playerid,-1,"Аккаунт по Вашему запросу не был найден."); // Если аккаунт не найден,то выводим текст
    new string[216],reason[32]; // Создаём переменные
    GetPVarString(playerid,"OffJailReason",reason,sizeof(reason)); // Достаём причину для тюрьмы из PVar
    format(string,sizeof(string),"UPDATE "TABLE_ACCOUNT" SET `Jail` = '%d' WHERE `Name` = '%s'",GetPVarInt(playerid,"OffJailDay"),name); // Форматируем запрос (Вместо `Jail` и `Name` у Вас могут быть другие переменные)
	mysql_function_query(handle, string, true, "", ""); // Отправляем запрос
	format(string,sizeof(string),"[OFFLINE]: Администратор %s посадил игрока %s на %d мин. Причина: %s",pData[playerid][pName],name,GetPVarInt(playerid,"OffJailDay"),reason); // Форматируем текст для всех
	SendClientMessageToAll(COLOR_LIGHTRED,string); // Отправляем текст всем
	DeletePVar(playerid,"OffJailReason"); // Удаляем PVar
	DeletePVar(playerid,"OffMJailDay");// Удаляем PVar
	return 1;
}
Теперь в загрузку аккаунта или в OnPlayerSpawn:
PHP:
switch(pData[playerid][pOffWarns]) // Делаем проверку на то,сколько варнов
{
	case 0: pData[playerid][pOffWarnsAdm] = 0,pData[playerid][pOffWarnsReason] = 0,pData[playerid][pOffWarns] = 0,Player[playerid][pWarn] = pData[playerid][pWarn]; // Если Варнов 0 то обнуляем все переменные (pWarn у Вас может бтыь другой)
	case 1: // Если 1 варн в оффлайне,то выводим то что ниже.
	{
		new string[128]; // Создаём переменную
		format(string,sizeof(string),"Вы получили одно предупреждение в оффлайне от администратора %s. Причина: %s",pData[playerid][pOffWarnsAdm],pData[playerid][pOffWarnsReason]); // Форматируем текст
		SCM(playerid,COLOR_RED,string),Player[playerid][pWarn] ++; // Выводим текст,и прибавляем варн.
		Player[playerid][pOffWarnsAdm] = 0,Player[playerid][pOffWarnsReason] = 0,Player[playerid][pOffWarns] = 0; // Обнуляем все переменные.
	}
	case 2: // Если 2 варна в оффлайне
	{
		new string[128]; // Создаём переменную
		format(string,sizeof(string),"Вы получили два предупреждения в оффлайне от администратора %s. Причина: %s",pData[playerid][pOffWarnsAdm],pData[playerid][pOffWarnsReason]); // Форматируем текст
		SCM(playerid,COLOR_RED,string),Player[playerid][pWarn] ++; // Выводим текст,и прибавляем варн.
		Player[playerid][pOffWarnsAdm] = 0,Player[playerid][pOffWarnsReason] = 0,Player[playerid][pOffWarns] = 0;// Обнуляем все переменные.
	}
	default: // Если 3 и более варнов
	{
		new string[128],ip[24],years,months,days,unbandate,data[32],quer[256]; // Создаём переменную
		format(string,sizeof(string),"Вы получили три или более предупреждений в оффлайне от администратора %s. Причина: %s",pData[playerid][pOffWarnsAdm],pData[playerid][pOffWarnsReason]); // Форматируем текст
		SendClientMessage(playerid,COLOR_RED,string); // Выводим текст
		SendClientMessage(playerid,COLOR_RED,"Аккаунт заблокирован на 7 дней."); // Выводим текст
		GetPlayerIp(playerid, ip, 32);
		Player[playerid][pWarn] = 0; // Обнуляем варны (у Вас pWarn может быть другой)
		getdate(years, months, days);// Узнаём дату
		unbandate = gettime() + 7*86400; // Вычисляем дату разбана
		format(data, sizeof(data), "%02d.%02d.%04d", days, months, years); // Форматируем дату
		format(quer, sizeof(quer), "INSERT INTO bans (name, whobanned, ip, bandate, time, unbandate, reason) VALUES ('%s', '%s','%s', '%s', 7, %d, '%s[3 warns]')", pData[playerid][pName], pData[playerid][pOffWarnsAdm], ip, data, unbandate, pData[playerid][pOffWarnsReason]); // Вносим в список забаненых
		mysql_function_query(handle, query, false, "",""); // Отправляем запрос выше
		pData[playerid][pOffWarnsAdm] = 0,pData[playerid][pOffWarnsReason] = 0,pData[playerid][pOffWarns] = 0; // Обнуляем все переменные
		SaveAccount(playerid); // Сохраняем аккаунт
		KickEx(playerid); // Кикаем
		return 1;
	}
}
Ну вот на этом и всё,кому-то может быть и полезно.
В следующем уроке я сделаю систему бана (что-бы корректно работала /offban)
Всем добра)

UPD: Система бана - http://pawno-info.ru/showthread.php?t=276805&p=1800246#post1800246
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу