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

    Статус
    Оффлайн
    Регистрация
    22.04.2016
    Адрес
    Украина
    Сообщений
    157
    Репутация:
    35 ±

    GameTextForPlayer + Timer

    Здравствуйте.

    Собственно, задаю SetPVarInt с временем(пробовал и таймер).

    Код:
    SendClientMessage(playerid, 0x008040AA, !"У Вас есть {FF8000}250 {008040}секунд, чтобы вернуться в автобус");                   
    SetPVarInt(playerid, "timer_count_bus", 250);
    Дальше в паблике глобального секундного таймера делаю следующее:

    Код:
    if(GetPVarInt(i, "timer_count_bus") != 0)
    {
    	new string[4];
    
    	SetPVarInt(i, "timer_count_bus", GetPVarInt(i, "timer_count_bus") - 1);
    
    	format(string, sizeof string, "%d", GetPVarInt(i, "timer_count_bus"));
    
    	GameTextForPlayer(i, string, 1000, 1);
    
    	if(GetPVarInt(i, "timer_count_bus") == 0)
    	{
    		SetPVarInt(i, "timer_count_bus", 0);
    		BusSpawn(i);
            }
    }
    Но происходит следующее: мне показываются секунды, по истечению 3-4 секунд только обновляется gametext, а должен каждую секунду -1. И отсчет заканчивается намного раньше времени, и происходит обнуления всех переменных связанных с работой, как и было задумано. То есть проверка(последняя) срабатывает, но не тогда когда мне нужно. Интересно, что когда автобус пропал - отсчет продолжается, хотя стоит обнуления пвара.

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

    Статус
    Оффлайн
    Регистрация
    15.08.2015
    Сообщений
    106
    Репутация:
    8 ±
    PHP код:
            if(GetPVarInt(i"timer_count_bus"))
            {
                if(!
    SetPVarInt(i"timer_count_bus"GetPVarInt(i"timer_count_bus") - 1))
                {
                    
    DeletePVar(i"timer_count_bus");
                    
    BusSpawn(i);
                }
                else
                {
                    static 
    str[4];
                    
    format(strsizeof str"%d"GetPVarInt(i"timer_count_bus"));
                    
    GameTextForPlayer(istr10003);
                }
            } 
    Вам стоит ознакомиться со всеми типами GameText http://wiki.sa-mp.com/wiki/GameTextStyle в вашем случае Style 1 и как написано в ресурсе выше, он будет обновляться/скрываться через 8 секунд, на ресурсе по всем типам есть описание. Также не надо забывать про баг с таймерами в павн, если в аргументах таймера стоит значение 1 на повторение таймера, то он будет не точным, либо юзать фикс таймера либо перезапускать в самом таймере. И еще я бы сделал само обнуление работы в OnVehicleDeath или OnVehicleSpawn, так как вы используйте в глобальном таймер обнуление то можете получить выход за приделы массива и тогда получить много проблем) Да и про остальные системы тоже нужно проследить, ну либо делайте отдельный таймер для каждого игрока, если делать умом то разницу не увидите в скорости.
    Последний раз редактировалось vasyok28; 21.08.2017 в 02:09.

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

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Как уже сказали выше - используйте timerfix, чтобы таймер не отставал и не спешил.

    Собирается довольно просто. Я собирал через MinGW для Windows:

    1) git clone https://github.com/Thomas14/samp-plugin-timerfix.git (ещё нужно склонировать SDK, но это думаю Вы сделаете сами)
    2) cd samp-plugin-timerfix/samp-plugin-timerfix
    3) Нужно отредактировать makefile (добавить флаги: -DHAVE_STDINT_H -D__need_size_t -static -static-libgcc)
    4) make в консоли MinGW

    Для Linux все ещё проще:
    1) Клонируем репозитории
    2) cd samp-plugin-timerfix/samp-plugin-timerfix
    3) make

    Удачи!

    P.S: Если все таки не сможете собрать - могу поделится библиотеками.
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

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

    Статус
    Оффлайн
    Регистрация
    22.04.2016
    Адрес
    Украина
    Сообщений
    157
    Репутация:
    35 ±
    Да, действительно нужно было изменить стиль.
    Окей, убрал с глобального, перенес в отдельный таймер, который вызывается когда игрок покидает транспорт.
    Отсчет доходит до 222 или 223 автобус спавнится. Но при этом не вызывается проверка где находиться BusSpawn. А таймер в свою очередь продолжает идти даже в минус.

    Желательно поделиться)
    Последний раз редактировалось Pa4enka; 21.08.2017 в 17:11.

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

    Статус
    Оффлайн
    Регистрация
    24.08.2015
    Адрес
    Ташкент
    Сообщений
    375
    Репутация:
    97 ±
    Цитата Сообщение от $continue$ Посмотреть сообщение
    Как уже сказали выше - используйте timerfix, чтобы таймер не отставал и не спешил.

    Собирается довольно просто. Я собирал через MinGW для Windows:

    1) git clone https://github.com/Thomas14/samp-plugin-timerfix.git (ещё нужно склонировать SDK, но это думаю Вы сделаете сами)
    2) cd samp-plugin-timerfix/samp-plugin-timerfix
    3) Нужно отредактировать makefile (добавить флаги: -DHAVE_STDINT_H -D__need_size_t -static -static-libgcc)
    4) make в консоли MinGW

    Для Linux все ещё проще:
    1) Клонируем репозитории
    2) cd samp-plugin-timerfix/samp-plugin-timerfix
    3) make

    Удачи!

    P.S: Если все таки не сможете собрать - могу поделится библиотеками.
    Вроде этот фикс имеется в fixes.inc, можно использовать и его, если ловишь геморрой со сборкой.

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

    Статус
    Оффлайн
    Регистрация
    22.04.2016
    Адрес
    Украина
    Сообщений
    157
    Репутация:
    35 ±
    Цитата Сообщение от Geebrox Посмотреть сообщение
    Вроде этот фикс имеется в fixes.inc, можно использовать и его, если ловишь геморрой со сборкой.
    В теме fixes указаны ссылки на фиксы от других людей.

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

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Там указана ссылка на именно этот фикс.
    Цитата Сообщение от Geebrox Посмотреть сообщение
    Вроде этот фикс имеется в fixes.inc, можно использовать и его, если ловишь геморрой со сборкой.
    ТС: download
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

  10. 2 пользователя(ей) сказали cпасибо:
    Mr_LemoneZ (22.08.2017) Pa4enka (22.08.2017)
  11. #8
    Аватар для vasyok28
    Пользователь

    Статус
    Оффлайн
    Регистрация
    15.08.2015
    Сообщений
    106
    Репутация:
    8 ±
    Цитата Сообщение от Pa4enka Посмотреть сообщение
    Да, действительно нужно было изменить стиль.
    Окей, убрал с глобального, перенес в отдельный таймер, который вызывается когда игрок покидает транспорт.
    Отсчет доходит до 222 или 223 автобус спавнится. Но при этом не вызывается проверка где находиться BusSpawn. А таймер в свою очередь продолжает идти даже в минус.

    Желательно поделиться)
    Дело в том что вы не предоставили весь код, и нужно еще логировать данные, стоит еще проверить в функцию создание транспорта аргумент respawn_delay если совпадает со временем который вы используйте для таймера, следовательно если перенесли в отдельный таймер код, надо удалить таймер после завершение нужных действий. Работа на 60 сек, стоит пробовать самому разобраться в банальных багав
    Последний раз редактировалось vasyok28; 22.08.2017 в 15:19.

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

    Статус
    Оффлайн
    Регистрация
    22.04.2016
    Адрес
    Украина
    Сообщений
    157
    Репутация:
    35 ±
    Цитата Сообщение от vasyok28 Посмотреть сообщение
    Дело в том что вы не предоставили весь код, и нужно еще логировать данные, стоит еще проверить в функцию создание транспорта аргумент respawn_delay если совпадает со временем который вы используйте для таймера, следовательно если перенесли в отдельный таймер код, надо удалить таймер после завершение нужных действий. Работа на 60 сек, стоит пробовать самому разобраться в банальных багав
    Не нужно сразу критиковать. Если я обратился на форум значит нужна помощь т.к я не знаю что делать. Не нужно делать поспешных выводов об авторе исходя из текста проблемы. Это первое.
    Да дело было в аргументе respawn_delay. Это я уже понял, когда начал копать в другом направлении.

    Всем спасибо. Тема закрыта!

 

 

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

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

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

Ваши права

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