Дата: Четверг, 31.07.2014, 14:58 | Сообщение # 1
|
Бан на время с использованием Unix Времени + MxINI
Важно: создать папку в scriptfiles с названием banlist
Скачать инклуды можно тут Время перевода с 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
Далее создадим саму команду бана Код 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; }
|
| |