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

Система бана по дням

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

SCRIPTMAN

Привет всем! Решил с вами поделиться системой бана по дням, может кому-то пригодиться)

Система ТОЛЬКО для мода на 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

  • Like 1

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


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

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

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

×

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

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