SCRIPTMAN 358 Опубликовано 24 июня, 2017 Привет всем! Решил с вами поделиться системой бана по дням, может кому-то пригодиться) Система ТОЛЬКО для мода на MySQL. 1. Запускаете Denwer 2. В адресной строке пишите: "localhost"3. Там переходите в "Проверка MySQL и phpMyAdmin"4. Выбираете свою базу, открываете её, там будет внизу "Создать таблицу", вводите имя: "ban", количество столбцов: "2"5. В первой строке: Имя: "Name", тип: "Varchar", длина: "24"6. Во второй строке: Имя "UnBanDate", тип: "INT", длина: "11"7. Жмёте "Сохранить", всё. База создана Можете прочитать данную тему. Всё, работа с базой на данный момент завершена, теперь перейдём к работе с модом, для начала добавим переменные: new BanTime; new BanDate[MAX_PLAYERS]; Теперь давайте добавим команду, вставляем в мод: CMD:ban(playerid, params[]) { new string[128]; if(Player[playerid][pAdmin] < 3) return ESCM;//Проверку на администратора замените на свою if(sscanf(params, "iis[128]", params[0], params[1], params[2])) return SCM(playerid, COLOR_WHITE, "Введите: /ban [id] [срок(дни)] [причина]"); if(!IsPlayerConnected(params[0])) return ISCM;//Проверку на коннект замените на свою if(Login[params[0]] == false) return LSCM;//Проверку на авторизацию замените на свою if(params[1] < 1 || params[1] > 30) return SCM(playerid, COLOR_GREY, "Количество дней не должно быть меньше 1-го или больше 30-ти!"); BanTime = gettime() + 86400*params[1];//86400 - 24 часа в секундах, то есть, 1 день и мы этот 1 день умножаем на количество дней, которые мы ввели f("Администратор %s забанил игрока %s на %d дней. Причина: %s", GN(playerid), GN(params[0]), params[1], params[2]); SCMTA(COLOR_LIGHTRED, string); f("INSERT INTO `ban` (`Name`, `UnBanDate`) VALUES (`%s`, `%d`)", GN(params[0]), BanTime); mysql_function_query(ConnectMySQL, string, false, "", "");//ConnectMySQL - переменную замените на свою. Kickk(params[0]);//Кик, замените на свой return true; Цвета наверное замените на свои, ну, а кто хочет, напишите в комменты, я скину необходимые цвета, чтобы не было ошибок. Теперь, чтобы не выскочили возможно ошибки, добавьте себе в мод дефайны: #define SCM SendClientMessage #define Kickk(%1) SetTimerEx("kick", GetPlayerPing(%1), false, "i", %1) #define ESCM SCM(playerid, COLOR_GREY, "Вы не уполномочены использовать данную команду!") #define ISCM SCM(playerid, COLOR_GREY, "Игрок оффлайн!") #define LSCM SCM(playerid, COLOR_GREY, "Игрок не авторизован!") #define SCMTA SendClientMessageToAll #define f( format(string, sizeof(string), #define GN(%1) Player[%1][pName] #define publics%0(%1) forward%0(%1); public%0(%1) Вот это вставьте в public OnPlayerConnect: f("SELECT * FROM `ban` WHERE `Name` = '%s'", GN(playerid)); mysql_function_query(ConnectMySQL, string, true, "PlayerBan", "d", playerid); Теперь создайте новый паблик: Надеюсь оцените окно бана, старался, но не проверял :D publics PlayerBan(playerid) { new string[128]; new rows; new rows2; cache_get_data(rows, rows2); if(rows) { BanDate[playerid] = cache_get_field_content_int(0, "UnBanDate"); if(gettime() > BanDate[playerid]) { f("DELETE FROM `ban` WHERE `Name` = `%s`", GN(playerid)); mysql_function_query(ConnectMySQL, string, false, "", ""); } else { f("{00FFA6}==============================\n\n{FF0000}Ваш аккаунт заблокирован!\nДата вашей разблокировки: {FFFF00}%s\n{00FFA6}==============================", date("%dd/%mm/%yyyy", BanDate[playerid])); SPD(playerid, 0, DSM, "{FF0000}Данный аккаунт забанен", string, "Хорошо", ""); Kickk(playerid); } } return true; } И последнее, там где у вас идёт обнуление, вставьте вот это: BanDate[playerid] = 0; Ну вот и всё. Надеюсь тема кому-нибудь пригодится, так-как старался сделать её простой и понятой. Если будут какие-то ошибки - пишите! Автор: Shapik 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты