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

    Статус
    Оффлайн
    Регистрация
    05.10.2019
    Адрес
    Планета Земля
    Сообщений
    318
    Репутация:
    7 ±

    Система мута, построенная на GetTickCount()

    Я сделал систему мута, основанную на получении тиков сервера, которые равны миллисекундам, и умножая их на 60к, и записывая в энум игрока, соответственно система мута у меня по минутам. Но на форуме sa-mp.com говорят, что при работе сервера более 24 часов GetTickCount переполняется, и нужно использовать сток с параметрами oldtick и newtick, но у меня не идет подсчет времени на вычитании тиков, соответственно я не могу пользоваться этим тиком - вычитать нечего. Повлияет ли переполнение GetTickCount на работу мута?

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

    Вот код:

    PHP код:
    enum pInfo {
        
    pPass[50+1], pMail[60+1], pMoneypLevelpAgepNationalpSkinpSexpIDpReferal[MAX_PLAYER_NAME+1], 
        
    pDateReg[10+1], pExppDeathpNockoutpItem1pItem2pItem3pItemAmmo1pItemAmmo2pItemAmmo3
        
    pItemSelectpAdminpMute
    }
    new
        
    player[MAX_PLAYERS][pInfo]; 
    PHP код:
    public OnPlayerText(playeridtext[])
    {
        if(
    login_check{playerid} == false)
        {
            
    SCM(playeridCOLOR_GREY"Вы не авторизованы!");
            return 
    false;
        }
        if(
    player[playerid][pMute] >= GetTickCount())
        {
            
    SCM(playeridCOLOR_RED, !"Вы заткнуты!");
            
    printf("GetTickCount - %d, Mute - %d"GetTickCount(), player[playerid][pMute]);
            return 
    false;
        }
        return 
    false;

    PHP код:
    CMD:mute(playeridparams[])
    {
        if(
    player[playerid][pAdmin] == 0)
        {
            
    SCM(playeridCOLOR_RED, !"Вы не администратор!");
            return 
    false;
        }
        if(
    player[playerid][pAdmin] <= 1)
                return 
    SCM(playeridCOLOR_RED, !"Вы не можете замутить игрока!");
        new
            
    targetid,
            
    targettime,
            
    reason[51];
        
        if(
    sscanf(params"uds[51]"targetidtargettimereason))
            return 
    SCM(playeridCOLOR_RED, !"Образец мута: /mute [playerid] [minute] [reason]");
        if(!
    IsPlayerConnected(targetid))
            return 
    SCM(playeridCOLOR_RED, !"Игрок с введенным вами ID не в сети!");
        if(
    reason[50] != EOS)
            return 
    SCM(playeridCOLOR_RED, !"Максимальная длина причины мута: 50 символов");
        if(
    targetid == playerid)
            return 
    SCM(playeridCOLOR_RED, !"Вы не можете замутить себя!");
        if(
    targettime 1)
            return 
    SCM(playeridCOLOR_RED, !"Вы не можете замутить игрока меньше, чем на 1 минуту!");

        new
            
    server_tick GetTickCount();

        if(
    player[targetid][pMute] > server_tick)
            return 
    SendClientMessage(playeridCOLOR_RED, !"Игрок уже заткнут!");
            
        
    player[targetid][pMute] = server_tick+targettime*60000;
        
        
    SavePlayer(targetid"Mute"player[targetid][pMute], "d");

        static const
            
    fmt_str[] = "Администратор %s заткнул игрока %s на %d минут по причине: %s";

        new
            
    str[sizeof(fmt_str)-6+MAX_PLAYER_NAME*2+4+50+1];

        
    format(strsizeof(str), fmt_strGetName(playerid), GetName(targetid), targettimereason);
        
    SCMTA(COLOR_REDstr);
        return 
    true;

    Последний раз редактировалось SteveStage; 18.10.2019 в 18:52.

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

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    А зачем вообще делать на GetTickCount, если есть gettime?)
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

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

    Статус
    Оффлайн
    Регистрация
    05.10.2019
    Адрес
    Планета Земля
    Сообщений
    318
    Репутация:
    7 ±
    Цитата Сообщение от Nexius_Tailer Посмотреть сообщение
    А зачем вообще делать на GetTickCount, если есть gettime?)
    У меня с ним проблемы - он не подсчитывает время, я кое-как на нем сделал систему бана по дням. Если ты на пальцах объяснишь, как с ним работать, и почему он получает время в секундах - буду благодарен (я знаю, что он записывает в переменные часы, потом минуты, а потом секунды)

  4. #4
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2590 ±
    Цитата Сообщение от Steve_Stage Посмотреть сообщение
    У меня с ним проблемы - он не подсчитывает время, я кое-как на нем сделал систему бана по дням. Если ты на пальцах объяснишь, как с ним работать, и почему он получает время в секундах - буду благодарен (я знаю, что он записывает в переменные часы, потом минуты, а потом секунды)
    gettime() не только записывает часы/минуты/секунды в переменные, но и сама тоже возвращает результат (да, так тоже бывает).
    На Pro-Pawn wiki есть и объяснение, и примеры использования: http://wiki.pro-pawn.ru/wiki/Gettime
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

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

    Статус
    Оффлайн
    Регистрация
    20.01.2018
    Сообщений
    52
    Репутация:
    7 ±
    Цитата Сообщение от Steve_Stage Посмотреть сообщение
    У меня с ним проблемы - он не подсчитывает время, я кое-как на нем сделал систему бана по дням. Если ты на пальцах объяснишь, как с ним работать, и почему он получает время в секундах - буду благодарен (я знаю, что он записывает в переменные часы, потом минуты, а потом секунды)
    если чуть-чуть перевести пример с вики:
    PHP код:
    new HourMinuteSecondTimestamp;
    Timestamp gettime(HourMinuteSecond);
    printf("%02d:%02d:%02d"HourMinuteSecond);//выведет: "час:минута:секунда" (в данный момент)
    printf("Столько секунд прошло с полуночи 1 января 1970: %d"Timestamp);//unix time другими словами 
    Принцип системы бана можно подать следующим образом:
    PHP код:
    new unbantime;

    cmd:ban(...)
    {
        
    unbantime gettime() + (10*24*60*60);//10 дней * 24 часа * 60 минут * 60 секунд
        //прибавляем к unix time количество секунд в 10 днях
        //то есть значение unix time будет равно переменной unbantime через 10 дней
    }

    public 
    OnPlayerConnect(...)
    {
        if(
    unbantime gettime())//если раньше 10 дней - кик
            
    return Kick(...);


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

    Статус
    Оффлайн
    Регистрация
    05.10.2019
    Адрес
    Планета Земля
    Сообщений
    318
    Репутация:
    7 ±
    И еще хотел бы задать вопрос, не связанный с unix временем. Как при коннекте делать запрос на нахождение ника игрока в таблице banlist? Я понимаю, что нужно форматировать, делать запросы, но, делая это, я сам запутался в своем коде, и в итоге получил MySql error, который не могу решить(

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

    Но ты можешь просто проигнорировать его, т.к. я должен сам создать новую тему на форуме по поводу MySql запроса

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

    Статус
    Оффлайн
    Регистрация
    05.10.2019
    Адрес
    Планета Земля
    Сообщений
    318
    Репутация:
    7 ±
    Спасибо, что проигнорировал, ато я бы совсем разленился)

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

    Закрыто

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

    Статус
    Оффлайн
    Регистрация
    20.01.2018
    Сообщений
    52
    Репутация:
    7 ±
    Есть миллион тем как с уже готовой системой банов, так и с туториалами по построению запросов.
    У меня не всегда есть желание разжевывать уже хренову тучу раз пережеванные до меня вопросы, так шо сорян (:

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

    Статус
    Оффлайн
    Регистрация
    05.10.2019
    Адрес
    Планета Земля
    Сообщений
    318
    Репутация:
    7 ±
    Я уже сделал, и кстати, спасибо)

 

 

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

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

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

Ваши права

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