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

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

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

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

/ban и /unban

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

xDimasx

Специалист
Обычная система бана на первый взгляд,но нет.
Эта система бана работает на файлах т.е mxINI и ничего не заносится в pINFO.
Разбан идет вплоть до секунд.
Игроку при входе выдает полную информацию кто его забанил,когда забинили,когда разбан вплоть до секунд.
Вообщем,может кому нибуть и пригодится.
Команды на DC_CMD.

Команда /ban:
Код:
CMD:ban(playerid, params[])
{
if(PlayerInfo[playerid][pDuty] == 0) // Тут Ваша переменная на Админ.Авторизацию
{
SendClientMessage(playerid,0xFF4500FF,"[A] Вы не можете использовать чат. Авторизуйтесь в Админ.Панели {1E90FF}/duty [Пароль]");
return 1;
}
new string[256],idx;
if(PlayerInfo[playerid][pAdmin] < 3) return SendClientMessage(playerid,0xFF4500FF,"У Вас нет доступа к этой команде."); // Если игрок меньше чем 3 лвл администратора,то не пропускаем дальше.
if(GetPVarInt(playerid,"BanTime") > gettime()) return SendClientMessage(playerid,0xFF4500FF,"[Анти-Чит]: Банить игроков можно раз в {1E90FF}5 {FF4500}секунд."); // Анти-Флуд на команду. (( Спасает от пер****а ))
tmp = strtok(params[0], idx);
if(!strlen(tmp)) return SendClientMessage(playerid,0x808080FF, "[Ошибка]: Укажите ID. | /ban [ID] [Дни] [Причина]"); // Если игрок не указал ID
params[1] = ReturnUser(tmp);
tmp = strtok(params[0], idx);
if(!strlen(tmp)) return SendClientMessage(playerid,0x808080FF, "[Ошибка]: Укажите дни. | /ban [ID] [Дни] [Причина]"); // Если игрок не указал Дни
new chislo = strval(tmp);
new length = strlen(params[0]);
while ((idx < length) && (params[idx] <= ' ')) idx++;
new offset = idx;
new result[64];
while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
{
result[idx - offset] = params[idx];
idx++;
}
result[idx - offset] = EOS;
if(!strlen(result)) return SendClientMessage(playerid,0x808080FF, "[Ошибка]: Укажите причину | /ban [ID] [Дни] [Причина]"); // Если игрок не указал Причину
new PlayerNick[MAX_PLAYER_NAME], PlayerBan[MAX_PLAYER_NAME];
if(PlayerInfo[playerid][pAdmin] < 5 && PlayerInfo[params[1]][pAdmin] >= 5) return SendClientMessage(playerid, 0xFF4500FF, "[Ошибка]: Вы не можете применить это действие к {1E90FF}Гл.Администратору"); // Если админ больше 5 лвл то нельзя забанить
if(!IsPlayerConnected(params[1]))return SendClientMessage(playerid,0xFF4500FF,"[Ошибка]: Игрок не найден."); // Проверка на подключенность игрока
if(params[1] == playerid) return SendClientMessage(playerid,0xFF4500FF, "[Ошибка]: Вы не можете применить это действие к себе."); // Ну на всякий случай не дадим забанить самого себя
format(string,sizeof(string),"Администратор {1E90FF}%s[%d] {FF4500}забанил игрока {1E90FF}%s[%d] {FF4500}на {1E90FF}%d {FF4500}дней.",PlayerNick,playerid,PlayerBan,params[1],chislo); // Выводим текст для всех игроков
SendClientMessageToAll(0xFF4500FF, string); // Функция вывода текста
format(string,sizeof(string),"Причина: {1E90FF}%s",(result)); // Выводим текст для всех игроков
SendClientMessageToAll(0xFF4500FF, string); // Функция вывода текста
ShowPlayerDialog(params[1],0,DSM ,"{1E90FF}Заблокирован","{FF4500}Вы получили блокировку аккаунта.\n{1E90FF}Если Вы не согласны с администратором,то сделайте скриншот {008000}[F8]{1E90FF}\nИ оставьте жалобу на администратора в группе {008000}vk.com/Ganja_dm","Закрыть",""); // Показываем диалог игроку.
PlayerInfo[params[1]][pAdmin] = 0; // Если хотите можно его снять с админки.
PlayerInfo[params[1]][pWarns] = 0; // Снимаем все варны (Предупреждения)
AddBan(params[1], PlayerBan, PlayerNick, chislo, result); // Заносим аккаунт в папку с банами. (Сток будет ниже)
SetPVarInt(playerid,"BanTime",gettime() + 5); // Добавляем антифлуд на 5 секунд.
return 1;
}
Сток для добавления игрока в бан:
Код:
stock AddBan(player, playerid[], giveplayerid[], chislo = 0, reason[])
{
new totalban = 86400*chislo;
new string[128];
format(string,sizeof(string),"Banned/banlist/%s.ini", playerid); // Scriptfiles --> Banned --> banlist
new OpenBan = ini_createFile(string);
if(OpenBan < 0) ini_openFile(string);
ini_setInteger(OpenBan, "BanTime", gettime()); // Заносим дату и время бана
ini_setInteger(OpenBan, "UnBanTime", gettime()+totalban); // Заносим когда будет разбан
ini_setString(OpenBan, "PlayerBan", giveplayerid); // Ник администратора
ini_setString(OpenBan, "Reason", reason); // Причина
ini_closeFile(OpenBan);
return Kick(player);
}
[!] Обязательно в папке Scriptfiles создайте папку Banned а в этой папке добавьте еще одну папку banlist

А теперь как же нам вытащить информацию о бане игрока?
Все просто,в паблик OnPlayerSpawn добавляем это:
Код:
GetBan(playerid);
Сам stock GetBan:
Код:
stock GetBan(playerid)
{
new PlayerNick[MAX_PLAYER_NAME],string[255];
GetPlayerName(playerid, PlayerNick, MAX_PLAYER_NAME);
format(string,sizeof(string),"Banned/banlist/%s.ini", PlayerNick);
if(fexist(string))
{
new OpenBan = ini_openFile(string);
new bantime, unbantime, PlayerBan[MAX_PLAYER_NAME], reason[128];
ini_getInteger(OpenBan, "BanTime", bantime);
ini_getInteger(OpenBan, "UnBanTime", unbantime);
ini_getString(OpenBan, "PlayerBan", PlayerBan);
ini_getString(OpenBan, "Reason", reason);
ini_closeFile(OpenBan);
if(gettime() >= unbantime) return UnBan(PlayerNick);
else
{
format(string,sizeof(string),"\
{008000}Дата бана: {808080}%s\n\
{008000}Дата Разбана: {808080}%s\n\
{008000}Ваш ник: {808080}%s\n\
{008000}Ник администратора: {808080}%s\n\
{008000}Причина бана: {808080}%s\n\
",
date("%dd.%mm.%yyyy в %hh:%ii:%ss",bantime),
date("%dd.%mm.%yyyy в %hh:%ii:%ss",unbantime),
PlayerNick,PlayerBan,reason);
ShowPlayerDialog(playerid,0,0,"{1E90FF}Заблокирован",string,"Выйти","");
SendClientMessage(playerid, 0xFF4500FF, "Если Вы не согласны с блокировкой Вашего аккаунта,то заскриньте[F8] этот диалог.");
SendClientMessage(playerid, 0xFF4500FF, "И оставьте свою жалобу у нас в группе {1E90FF}здесь свой сайт/группу");
return GKick(playerid);
}
}
else return true;
}

А теперь как же нам разбанить игрока?
Код:
CMD:unban(playerid, params[])
{
if(PlayerInfo[playerid][pDuty] == 0) // Здесь может быть Ваша переменная на админ.авторизацию
{
SendClientMessage(playerid,0xFF4500FF,"[A] Вы не можете использовать чат. Авторизуйтесь в Админ.Панели {1E90FF}/duty [Пароль]");
return 1;
}
new string[256],idx;
if(PlayerInfo[playerid][pAdmin] < 4) return SCM(playerid,0xFF4500FF,"У Вас нет доступа к этой команде."); // Если администратор меньше чем 4 лвл то не продолжаем действие команды.
tmp = strtok(params[0],idx);
if(!strlen(tmp)) return SCM(playerid,0x808080FF,"[Ошибка]: Укажите ник. | /unban [Nick_Name]"); // Если не указали ник.
format(string,sizeof(string),"[A] Администратор %s[%d] разбанил аккаунт {00FF00}%s",sendername2(playerid),playerid,tmp);
ABroadCast(0xAAAAAAFF,string,1); // У Вас может быть другая функция для вывода в админ чат.
UnBan(tmp);
return 1;
}
Сток для разбана:
Код:
stock UnBan(playerid[])
{
new string[64];
format(string,sizeof(string),"Banned/banlist/%s.ini", playerid);
return fremove(string);
}


Ну на этом все,пойду думать что еще сделать для Вас!)
P.S: Если будут ошибки,что врятли - пишите в комментарии,отвечу.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу