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

    Статус
    Оффлайн
    Регистрация
    08.12.2018
    Адрес
    Россия
    Сообщений
    146
    Репутация:
    25 ±

    GameTextForPlayer останавливает таймер

    При вызове команды, функция GameTextForPlayer(playerid, "text", 3000, 3) через 3 секунды останавливает глобальный таймер, если изменить 3000 на 1000, то таймер после вызова функции проработает 1 секунду.

      Открыть/закрыть
    PHP код:
    CMD:buyhouse(playerid)
    {
        for(new 
    1<= TotalHousesh++)
        {
            if(
    IsPlayerInDynamicArea(playeridHouseInfo[h][hZone_Exit]))
            {
                
    GameTextForPlayer(playerid"~w~welcome home"30003);
                return 
    1;
            }
        }
        return 
    1;






    UPD: Только что проверил, вообще любой вызов функции GameTextForPlayer останавливает глобальный таймер. А точнее по завершению работы функции GameTextForPlayer останавливается глобальный таймер

    UPD: Заметил что при отключении игрока от сервера, останавливается глобальный таймер. Функции KillTimer для глобального таймера в OnPlayerDisconnect не используется.

    UPD: При создании таймера функцией SetTimer в OnGameModeInit, ID таймера = 1. При создании уже второго таймера в OnPlayerConnect функцией SetTimerEx, ID таймера так-же = 1. Следовательно при отключении игрока, уничтожается таймер с ID 1.
    Далее я смоделирую ситуацию:

    PHP код:
    OnPlayerStateChange(playeridnewstate)
    {
        if(
    newstate == PLAYER_STATE_DRIVER)
        {
            
    TimerSpeedometer[playerid] = SetTimerEx("UpdateSpeedometer"1501"i"playerid);
        }
        else if(
    newstate == PLAYER_STATE_ONFOOT)
        {
            if(
    TimerSpeedometer[playerid] != 0) {
                
    KillTimer(TimerSpeedometer[playerid]);
            }
        }
        return 
    1;

    Когда игрок - водитель, то таймер запускается. Когда игрок НЕ водитель - таймер продолжает работать.
    Не могу понять в чем может быть проблема, куда копать. Понятно что проблема в таймерах, но что конкретно, не ясно.

    Проверил все на new.pwn. Все работает как нужно.
      Открыть/закрыть
    Последний раз редактировалось punkochel; 01.07.2019 в 09:05. Причина: Дополнение

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2590 ±
    Если верить тому, что вы описываете, то дело наверняка в криво реализованных перехватах. Вы пытались перехватывать SetTimerEx или GameTextForPlayer? Если нет, смотрите, какие инклуды у вас подключены и где могут эти функции перехватываться (fixes.inc, к примеру; может быть, ещё какие-нибудь другие инклуды).
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  3. Пользователь сказал cпасибо:
    punkochel (02.07.2019)
  4. #3
    Аватар для punkochel
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.12.2018
    Адрес
    Россия
    Сообщений
    146
    Репутация:
    25 ±
    Да, дело в инклуде fixes. Все заработало снова. Спасибо за помощь!
    Но остался еще 1 вопрос, проверил на new pawn, там id таймера не обнуляется и при повторном коннекте инкрементируется +1.
    У меня он инкрементируется на +2. С чем это может быть связано? И должен ли он ID обнуляться?

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2590 ±
    Ну если к этому "причастен" fixes.inc, то сами собой напрашиваются два вопроса:
    1. Эта проблема воспроизводится в new.pwn, если в нём тоже подключить fixes.inc?
    2. Вы используете последнюю версию инклуда? (Если не уверены, последнюю версию можно взять отсюда: https://raw.githubusercontent.com/Op...ster/fixes.inc.)
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  6. Пользователь сказал cпасибо:
    punkochel (04.07.2019)
  7. #5
    Аватар для punkochel
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.12.2018
    Адрес
    Россия
    Сообщений
    146
    Репутация:
    25 ±
    Нет, версия fixes.inc была предыдущей. С проблемой подразобрался, причина в не правильной последовательности подключений. Что касается MySQL, то тут все нормально. А вот в fix.inc используется просто создание таймера SetTimerEx без каких либо перехватов, не знаю зачем я его подключил, видимо тогда это выглядело для меня правильным. При такой последовательности подключений, на new.pwn появилась так-же проблема, что поспособствовала созданию этой темы. Daniel, если у тебя есть какие-то замечания по последовательности, подскажи как будет лучше. Заранее спасибо!

    Последовательность подключений:
    PHP код:
    #include <crashdetect>
    #include <a_samp>
    #include <fix>
    #include <a_mysql>
    #define FIXES_Single 1
    #define FIXES_ServerVarMsg 0
    #include <fixes>
    #include <timerfix>
    #include <streamer>
    #include <fixobject>
    #include <Pawn.CMD>
    #include <sscanf2>
    #include <foreach>
    //#include <nex-ac>
    #include <pawn.regex>
    #include <TOTP>
    #include <mdialog> 

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2590 ±
    По-хорошему первым делом следует подключать a_samp, сразу после него - всяческие костыли-фиксы, вроде того же fixes.inc. Остальные инклуды по идее не должны влиять на пользовательский код, поэтому и их порядок подключения не должен иметь значения.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  9. Пользователь сказал cпасибо:
    punkochel (04.07.2019)
 

 

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

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

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

Ваши права

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