Перейти к содержанию
Авторизация  
PROMO_4ka!™

Бан на время с использование unix времени

Рекомендуемые сообщения

PROMO_4ka!™

Показываю как сделать бан на время с использованием Unix Времени + MxINI
Бан работает так банишь игрока /ban [1-сек,2-мин,3-часы,4-дни] [ид] [число времени] [причина] пример /ban 2 1 10 проверка
Если человек забанен и он заходит на сервер то ему вылазиет диалог когда он был забанен,когда разбанят,причина и потом кикает.
Если бан закончится то аккаунт который забанен будет лежать в папке banlist пока игрок которого забанили зайдет снова на сервер.

Важно: создать папку в scriptfiles с названием banlist
Скачать инклуды можно тут ИНКЛУД (http://rghost.ru/35622578)
Инклуды кидать в папку pawno->include, если есть то заменить.
Время перевода с Unix на нормальное настроенно на московское


В начало мода вставляем если нету

#include <MxINI>
#include <mxdate>
// Для диалогов id меняйте на ваши свободные
#define DIALOGUNBAN 1 // id дилога для высвечивания даты

Это в свободное место

stock GetBan(playerid)
{
new PlayerNick[MAX_PLAYER_NAME],string[255];
GetPlayerName(playerid, PlayerNick, MAX_PLAYER_NAME);
format(string, sizeof(string), "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), "\
Дата бана: %s\n\
Дата Разбана: %s\n\
Забанил: %s\n\
Причина бана: %s\n\
",
date("%dd.%mm.%yyyy в %hh:%ii:%ss",bantime),
date("%dd.%mm.%yyyy в %hh:%ii:%ss",unbantime),
PlayerBan,reason);
ShowPlayerDialog(playerid,DIALOGUNBAN,0,"Вы забанены",string,"Выйти","");
return Kick(playerid);
} 
}
else return true;
}

stock UnBan(playerid[])
{
new string[64];
format(string, sizeof(string), "banlist/%s.ini", playerid);
return fremove(string);
}

stock AddBan(player, playerid[], giveplayerid[], type = 1, chislo = 0, reason[])
{
new totalban = 0;
switch(type)
{
case 1: totalban = 60*chislo; // минуты
case 2: totalban = 3600*chislo; // часы
case 3: totalban = 86400*chislo; // сутки
default: totalban = chislo; // секунды
}
new string[64];
format(string, sizeof(string), "banlist/%s.ini", playerid);
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); // Закрываем файл. 
ShowPlayerDialog(player,DIALOGUNBAN,0,"Вы забанены","{FF0000}Вы забанены","Выйти",""); 
return Kick(player);
}

Далее вставляем в начало паблика OnPlayerConnect
 

GetBan(playerid);

Далее создадим саму команду бана (оптимизируйте под себя её) сделал под GF
 

if(strcmp(cmd, "/ban", true) == 0)
{
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid, 0xFFFFFFFF, "USAGE: /ban [playerid] [type:(1-минуты)(2-часы)(3-дни)(другое секунды)] [число] [причина]");
giveplayerid = strval(tmp);
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid, 0xFFFFFFFF, "USAGE: /ban [playerid] [type:(1-минуты)(2-часы)(3-дни)(другое секунды)] [число] [причина]");
new type = strval(tmp);
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid, 0xFFFFFFFF, "USAGE: /ban [playerid] [type:(1-минуты)(2-часы)(3-дни)(другое секунды)] [число] [причина]");
new chislo = strval(tmp);
if(PlayerInfo[playerid][pAdmin] >= 4)
{
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, 0xFFFFFFFF, "USAGE: /ban [playerid] [type:(1-минуты)(2-часы)(3-дни)(другое секунды)] [число] [причина]");
new PlayerNick[MAX_PLAYER_NAME], PlayerBan[MAX_PLAYER_NAME];
GetPlayerName(playerid, PlayerNick, MAX_PLAYER_NAME);
GetPlayerName(giveplayerid, PlayerBan, MAX_PLAYER_NAME);
AddBan(giveplayerid, PlayerBan, PlayerNick, type, chislo, result);
return true;
}//not connected
}
return true;
}
Теперь создадим команду разбана ниже

if(strcmp(cmd,"/unban",true)==0)
{
if(PlayerInfo[playerid][pAdmin] >= 8)
{
tmp = strtok(cmdtext,idx);
if(!strlen(tmp)) return SendClientMessage(playerid,COLOR_GRAD1,"/unban [players nick]");
UnBan(tmp);
}
return true;
}

Автор:Lik
Взято с павно портала

  • Like 3

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.