Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 9 из 9
  1. #1
    Аватар для Camelot
    Пользователь

    Статус
    Оффлайн
    Регистрация
    07.03.2014
    Адрес
    Ярославль
    Сообщений
    57
    Репутация:
    4 ±

    Бан система

    Недавно узнал про функцию выявления времени напрямую через мускул. (r7)
    Ну вроде не сложно и место много не требует. Вот решил и поставить.
    Всё шло хорошо, пока не дошёл до проверки, а именно, не представляю себе как её сделать.
    Может кто-нибудь сможет мне помочь?

    Постарался что-то сделать, но это не работает...

     Неудача:(
    PHP код:
    OnPlayerConnect(playerid
    {
        
    mysql_format(cHandlemysql_query"SELECT * FROM `Bans` WHERE `Nick` = '%s' AND `DateUnBan` > NOW() LIMIT 1"PInfo[playerid][pNick]);
        
    mysql_function_query(cHandlemysql_querytrue"BanListCheck""d"playerid);
    }
    publicsBanListCheck(playerid)
    {
        
    cache_get_data(rowsfields);
        if(
    rows)
        {
            new 
    adm[MAX_PLAYER_NAME], reason[64], bantime[30], unbantime[30];
            
    mysql_get_field("BanUnTime"unbantime);
            
    mysql_get_field("BanTime"bantime);
            
    mysql_get_field("Admin"adm);
            
    mysql_get_field("Reason"reason);
            
    format(mysql_querysizeof(mysql_query), "\
            {FF0000}Аккаунт заблокирован!\n\n\
            {FFFFFF}Дата блокировки: %s\n\
            Дата разбана: %s\n\
            Блокировщик: %s\n\
            Причина бана: %s"
    ,
            
    bantime,unbantime,admreason);
            
    ShowPlayerDialog(playerid425DIALOG_STYLE_MSGBOX"Бан"mysql_query"Закрыть""");
            return 
    Kick(playerid);
        }
        else
        {
            
    mysql_format(cHandlemysql_query"DELETE FROM `Bans` WHERE `Nick` = '%s'"PInfo[playerid][pNick]);
            
    mysql_function_query(cHandlemysql_queryfalse"""");
            return 
    SendClientMessage(playerid0xFFFFFF"Вы были разбанены.");
        }



     Сама команда(Рабочая)
    PHP код:
    CMD:ban(playeridparams[])
    {
        if(
    PInfo[playerid][pAdmin] < 3) return Message(playeridCOLOR_RED,"(Ошибка): {FF6666}Вам недоступна данная команда.");
        else if(
    sscanf(params"iis"params[0], params[1], params[2], params[3])) 
            return 
    SendClientMessage(playeridCOLOR_GREEN,"(Используйте): {669966}/ban [ID Player] [Часы] [Причина]");
        else if(!
    IsPlayerConnected(params[0])) 
            return 
    Message(playeridCOLOR_RED,"(Ошибка): {FF6666}Игрока нет на сервере.");
        
    mysql_format(cHandlemysql_query"INSERT INTO `Bans` (`Nick`,`Reason`,`Admin`,`DateUnBan`,`DateBan`) VALUES ('%s','%s','%s', NOW(), NOW()+INTERVAL %d HOUR)",
        
    PInfo[params[0]][pNick], params[3], PInfo[playerid][pNick], params[2]);
        
    mysql_function_query(cHandlemysql_queryfalse"""");
        return 
    Kick(params[0]);

    Последний раз редактировалось Camelot; 22.07.2014 в 17:49.

  2. #2
    Аватар для underwoker
    Пользователь

    Статус
    Оффлайн
    Регистрация
    07.03.2014
    Сообщений
    331
    Репутация:
    47 ±
    PHP код:
    if(gettime() >= ПЕРЕМЕННАЯ ХРАНЯЩАЯ ВРЕМЯ БАНА)
    {
        new 
    string1[128];
        
    mysql_format(cHandlemysql_query"DELETE FROM `Bans` WHERE `Nick` = '%s'"PInfo[playerid][pNick]);
            
    mysql_function_query(cHandlemysql_queryfalse"""");
        return 
    true;

    "Власть, кровь, няш-мяш, кровь, власть, Крым наш!" - (c) Наталья Поклонская.

    Критик должен быть готов и способен в любой момент и по первому требованию занять место критикуемого им и выполнять его дело продуктивно и компетентно. В противном случае критика превращается в наглую, самодовлеющую силу и становится тормозом на пути прогресса. (с) AXE

  3. #3
    Аватар для Camelot
    Пользователь

    Статус
    Оффлайн
    Регистрация
    07.03.2014
    Адрес
    Ярославль
    Сообщений
    57
    Репутация:
    4 ±
    Цитата Сообщение от underwoker Посмотреть сообщение
    PHP код:
    if(gettime() >= ПЕРЕМЕННАЯ ХРАНЯЩАЯ ВРЕМЯ БАНА)
    {
        new 
    string1[128];
        
    mysql_format(cHandlemysql_query"DELETE FROM `Bans` WHERE `Nick` = '%s'"PInfo[playerid][pNick]);
            
    mysql_function_query(cHandlemysql_queryfalse"""");
        return 
    true;

    Поставил. Не работает. При заходе на сервер, сразу показывается диалог с авторизацией.
     Проверка
    PHP код:
    publicsBanListCheck(playerid)
    {
        
    cache_get_data(rowsfields);
        if(
    rows)
        {
            new 
    tmp[30], adm[MAX_PLAYER_NAME], reason[64], bantimeunbantime;
            
    mysql_get_field("BanUnTime"tmp); unbantime strval(tmp);
            
    mysql_get_field("BanTime"tmp); bantime strval(tmp);
            
    mysql_get_field("Admin"adm);
            
    mysql_get_field("Reason"reason);
            if(
    gettime() >= unbantime)
            {
                
    mysql_format(cHandlemysql_query"DELETE FROM `Bans` WHERE `Nick` = '%s'"PInfo[playerid][pNick]);
                
    mysql_function_query(cHandlemysql_queryfalse"""");
                return 
    SendClientMessage(playerid0xFFFFFF"Вы были разбанены.");
            }
            
    format(mysql_querysizeof(mysql_query), "\
            {FF0000}Аккаунт заблокирован!\n\n\
            {FFFFFF}Дата блокировки: %s\n\
            Дата разбана: %s\n\
            Блокировщик: %s\n\
            Причина бана: %s"
    ,
            
    bantime,unbantime,admreason);
            
    ShowPlayerDialog(playerid425DIALOG_STYLE_MSGBOX"Бан"mysql_query"Закрыть""");
            
    Kick(playerid);
        }
        return 
    true;


  4. #4
    Аватар для #ball
    Пользователь

    Статус
    Оффлайн
    Регистрация
    01.06.2014
    Адрес
    Rostov-on-Don
    Сообщений
    119
    Репутация:
    14 ±
    Попробуй
    PHP код:
    publicsBanListCheck(playerid)
    {
        
    cache_get_data(rowsfields);
        if(
    rows)
        {
            new 
    tmp[30], adm[MAX_PLAYER_NAME], reason[64], bantimeunbantime;
            
    mysql_get_field("DateUnBan"tmp); unbantime strval(tmp);
            
    mysql_get_field("DateBan"tmp); bantime strval(tmp);
            
    mysql_get_field("Admin"adm);
            
    mysql_get_field("Reason"reason);
            if(
    gettime() >= unbantime)
            {
                
    mysql_format(cHandlemysql_query"DELETE FROM `Bans` WHERE `Nick` = '%s'"PInfo[playerid][pNick]);
                
    mysql_function_query(cHandlemysql_queryfalse"""");
                return 
    SendClientMessage(playerid0xFFFFFF"Вы были разбанены.");
            }
            else 
            {
            
    format(mysql_querysizeof(mysql_query), "\
            {FF0000}Аккаунт заблокирован!\n\n\
            {FFFFFF}Дата блокировки: %s\n\
            Дата разбана: %s\n\
            Блокировщик: %s\n\
            Причина бана: %s"
    ,
            
    bantime,unbantime,admreason);
            
    ShowPlayerDialog(playerid425DIALOG_STYLE_MSGBOX"Бан"mysql_query"Закрыть""");
            
    Kick(playerid);
            }
        }
        else 
    //Показываем авторизацию
        
    return true;

    PHP код:
    CMD:ban(playeridparams[])
    {
        if(
    PInfo[playerid][pAdmin] < 3) return Message(playeridCOLOR_RED,"(Ошибка): {FF6666}Вам недоступна данная команда.");
        else if(
    sscanf(params"iis[30]"params[0], params[1], params[2])) 
            return 
    SendClientMessage(playeridCOLOR_GREEN,"(Используйте): {669966}/ban [ID Player] [Дни] [Причина]");
        else if(!
    IsPlayerConnected(params[0])) 
            return 
    Message(playeridCOLOR_RED,"(Ошибка): {FF6666}Игрока нет на сервере.");
        
    mysql_format(cHandlemysql_query"INSERT INTO `Bans` (`Nick`,`Reason`,`Admin`,`DateBan`,`DateUnBan`) VALUES ('%s','%s','%s', '%d',NOW()+INTERVAL %i DAY)",
        
    PInfo[params[0]][pNick], params[2], PInfo[playerid][pNick], params[1],params[1]);
        
    mysql_function_query(cHandlemysql_queryfalse"""");
        return 
    Kick(params[0]);

    - - - Добавлено - - -

    Покажи еще свою таблицу в базе
    Последний раз редактировалось #ball; 22.07.2014 в 08:59.

  5. #5
    Аватар для underwoker
    Пользователь

    Статус
    Оффлайн
    Регистрация
    07.03.2014
    Сообщений
    331
    Репутация:
    47 ±
    Цитата Сообщение от Camelot Посмотреть сообщение
    Поставил. Не работает. При заходе на сервер, сразу показывается диалог с авторизацией.
     Проверка
    PHP код:
    publicsBanListCheck(playerid)
    {
        
    cache_get_data(rowsfields);
        if(
    rows)
        {
            new 
    tmp[30], adm[MAX_PLAYER_NAME], reason[64], bantimeunbantime;
            
    mysql_get_field("BanUnTime"tmp); unbantime strval(tmp);
            
    mysql_get_field("BanTime"tmp); bantime strval(tmp);
            
    mysql_get_field("Admin"adm);
            
    mysql_get_field("Reason"reason);
            if(
    gettime() >= unbantime)
            {
                
    mysql_format(cHandlemysql_query"DELETE FROM `Bans` WHERE `Nick` = '%s'"PInfo[playerid][pNick]);
                
    mysql_function_query(cHandlemysql_queryfalse"""");
                return 
    SendClientMessage(playerid0xFFFFFF"Вы были разбанены.");
            }
            
    format(mysql_querysizeof(mysql_query), "\
            {FF0000}Аккаунт заблокирован!\n\n\
            {FFFFFF}Дата блокировки: %s\n\
            Дата разбана: %s\n\
            Блокировщик: %s\n\
            Причина бана: %s"
    ,
            
    bantime,unbantime,admreason);
            
    ShowPlayerDialog(playerid425DIALOG_STYLE_MSGBOX"Бан"mysql_query"Закрыть""");
            
    Kick(playerid);
        }
        return 
    true;

    А почему в первом посте в запросе ты берешь данные из DateUnBan, а в котором мне показываешь из BanUnTime? Тогда уж сделай взятие данных из DateUnBan, а не из BanUnTime
    "Власть, кровь, няш-мяш, кровь, власть, Крым наш!" - (c) Наталья Поклонская.

    Критик должен быть готов и способен в любой момент и по первому требованию занять место критикуемого им и выполнять его дело продуктивно и компетентно. В противном случае критика превращается в наглую, самодовлеющую силу и становится тормозом на пути прогресса. (с) AXE

  6. #6
    Аватар для Camelot
    Пользователь

    Статус
    Оффлайн
    Регистрация
    07.03.2014
    Адрес
    Ярославль
    Сообщений
    57
    Репутация:
    4 ±
    Вот я дырявая бошка. Все BanUnTime сменил на DateUnBan - всё равно не помогло.
    Попробовал совет #ball - тоже не помогло.
    Вот скрин бд:
     Скрин

  7. #7
    Аватар для #ball
    Пользователь

    Статус
    Оффлайн
    Регистрация
    01.06.2014
    Адрес
    Rostov-on-Don
    Сообщений
    119
    Репутация:
    14 ±
    Зайди на сервер и дай бан этой командой:
    PHP код:
    CMD:ban(playeridparams[]) 

        if(
    PInfo[playerid][pAdmin] < 3) return Message(playeridCOLOR_RED,"(Ошибка): {FF6666}Вам недоступна данная команда."); 
        else if(
    sscanf(params"iis[30]"params[0], params[1], params[2]))  
            return 
    SendClientMessage(playeridCOLOR_GREEN,"(Используйте): {669966}/ban [ID Player] [Дни] [Причина]"); 
        else if(!
    IsPlayerConnected(params[0]))  
            return 
    Message(playeridCOLOR_RED,"(Ошибка): {FF6666}Игрока нет на сервере."); 
        
    mysql_format(cHandlemysql_query"INSERT INTO `Bans` (`Nick`,`Reason`,`Admin`,`DateBan`,`DateUnBan`) VALUES ('%s','%s','%s', '%d',NOW()+INTERVAL %i DAY)"
        
    PInfo[params[0]][pNick], params[2], PInfo[playerid][pNick], params[1],params[1]); 
        
    mysql_function_query(cHandlemysql_queryfalse""""); 
        return 
    Kick(params[0]); 

    Посмотри,будут ли данные в бд.

  8. #8
    Аватар для Camelot
    Пользователь

    Статус
    Оффлайн
    Регистрация
    07.03.2014
    Адрес
    Ярославль
    Сообщений
    57
    Репутация:
    4 ±
    Цитата Сообщение от #ball Посмотреть сообщение
    Зайди на сервер и дай бан этой командой:
    PHP код:
    CMD:ban(playeridparams[]) 

        if(
    PInfo[playerid][pAdmin] < 3) return Message(playeridCOLOR_RED,"(Ошибка): {FF6666}Вам недоступна данная команда."); 
        else if(
    sscanf(params"iis[30]"params[0], params[1], params[2]))  
            return 
    SendClientMessage(playeridCOLOR_GREEN,"(Используйте): {669966}/ban [ID Player] [Дни] [Причина]"); 
        else if(!
    IsPlayerConnected(params[0]))  
            return 
    Message(playeridCOLOR_RED,"(Ошибка): {FF6666}Игрока нет на сервере."); 
        
    mysql_format(cHandlemysql_query"INSERT INTO `Bans` (`Nick`,`Reason`,`Admin`,`DateBan`,`DateUnBan`) VALUES ('%s','%s','%s', '%d',NOW()+INTERVAL %i DAY)"
        
    PInfo[params[0]][pNick], params[2], PInfo[playerid][pNick], params[1],params[1]); 
        
    mysql_function_query(cHandlemysql_queryfalse""""); 
        return 
    Kick(params[0]); 

    Посмотри,будут ли данные в бд.
    Но это не совсем то, что нужно. Во-первых, здесь бан дается на дни. Во-вторых, не записывается дата бана. Моя команда, которую указал в первом посте - рабочая.

  9. #9
    Аватар для #ball
    Пользователь

    Статус
    Оффлайн
    Регистрация
    01.06.2014
    Адрес
    Rostov-on-Don
    Сообщений
    119
    Репутация:
    14 ±
    Смотри, gettime() в итоге нам даст часы:минуты:секунды, а unbantime равно у нас примерно вот такому 2014-07-22 17:15:20.
    Я не знаю как их сравнивать.
    Если делать вот так
    PHP код:
    new get[30],year,month,day,hour,minut,second;
    gettime(hour,minut,second);getdate(year,month,day);
    format(get,30,"%04d-%02d-%02d %02d:%02d:%02d",year,month,day,hour,minut,second); 
    Получится,что-то этого.
    Текущее время - 2014-07-22 17:15:20
    Время разбана - 2014-07-23 17:15:20


    Думай!

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •