- Регистрация
- 1 Фев 2014
- Сообщения
- 1,364
- Лучшие ответы
- 4
- Репутация
- 158
Здравствуйте,давненько я ничего не делал т.к нету идей.
И сейчас я решил сделать офф команды.
Для чего они полезны? Полезны они тем,что если у Вас на форуме висит жалоба то по ней сразу Вы можете наказать.
ИЛи-же если нарушитель решился оффнуться от наказания.
Ну что-ж,давайте приступим.
Ниже будет использоваться handle,у Вас это может быть dbHandle или что то подобное.
Что нам понадобиться первым делом?
В своей Базе Данных создаём переменные:
В pInfo создаём переменные:
Далее делаете сохранение и загрузку этих переменных.
Теперь идём к самим командам.
Команда /offban (что-бы работала корректно,Вам нужна моя система бана которая будет в след.уроке):
Команда /offwarn:
Команда /offmute:
Команда /offjail:
Теперь в загрузку аккаунта или в OnPlayerSpawn:
Ну вот на этом и всё,кому-то может быть и полезно.
В следующем уроке я сделаю систему бана (что-бы корректно работала /offban)
Всем добра)
UPD: Система бана - http://pawno-info.ru/showthread.php?t=276805&p=1800246#post1800246
И сейчас я решил сделать офф команды.
Для чего они полезны? Полезны они тем,что если у Вас на форуме висит жалоба то по ней сразу Вы можете наказать.
ИЛи-же если нарушитель решился оффнуться от наказания.
Ну что-ж,давайте приступим.
Ниже будет использоваться handle,у Вас это может быть dbHandle или что то подобное.
Что нам понадобиться первым делом?
В своей Базе Данных создаём переменные:
Код:
OffWarns в Int значение
OffWarnsReason в VarChar значение
OffWarnsAdm в VarChar значение
Код:
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;
}
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;
}
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;
}
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
Последнее редактирование: