Назад к блогу
Scripts5 мин чтения

Agency-ProgressBar: деталь интерфейса, которая незаметно улучшает каждый скрипт

Узнайте, почему качество индикатора прогресса важнее, чем кажется, и как Agency-ProgressBar учитывает детали, которые другие скрипты упускают.

Agency Scripts

Основатель и ведущий разработчик Agency Scripts

Маленький скрипт, огромное влияние

Прогресс-бары встречаются повсюду в FiveM: взлом замков, ремонт, отмывание денег, добыча, медицинская помощь. Стандартные реализации функциональны, но плоски. Agency-ProgressBar , наш взгляд на то, каким должен быть этот инструмент, когда разработчики заботятся о деталях.

Анатомия хорошей полосы прогресса

Хороший прогресс-бар одновременно сообщает четыре вещи: какое действие происходит, насколько оно продвинулось, сколько времени осталось и можно ли отменить. Большинство реализаций показывают только первые два. Agency-ProgressBar отображает все четыре с тонкими анимациями, делающими прогресс плавным, а не прерывистым.

Отмена, которая работает

Отмена, инициированная игроком, запускает короткую анимацию затухания, которая возвращает непрозрачность панели к нулю за 300 мс. Без резких исчезновений. Разработчики могут зарегистрировать обратный вызов отмены, чтобы скрипты корректно очищались, когда игроки прерывают действие.

Контекстное позиционирование

Полоса появляется рядом с соответствующим элементом на экране, над вашей головой для действий, направленных на себя, над целевым NPC для интерактивных действий. Больше не нужно читать статус действия внизу экрана, когда что-то происходит вверху. Такое контекстное позиционирование , тонкое улучшение UX, которое игроки ощущают, но не могут назвать.

Паттерн экспорта

Как и все наши утилитарные скрипты, Agency-ProgressBar предоставляет простой API экспорта: exports['agency-progressbar']:Play({label, duration, canCancel, onCancel, onDone}). Вставьте его в любой скрипт за считанные минуты. Он совместим с Agency-Notify, Agency-Hud и остальной частью нашей экосистемы без какой-либо специальной настройки.

Установка & настройка

Agency-ProgressBar , готовый к установке инструмент, которому не нужна база данных. Скачайте его с Tebex, поместите папку в каталог ресурсов и добавьте ensure agency-progressbar в server.cfg. Вот и всё. Ресурс начинает работать сразу, и любой скрипт может вызвать exports API при следующем перезапуске.

Если вы заменяете существующую панель прогресса (ox_lib progressBar, qb-progressbar и т.п.), поиск и замена имени вызова экспорта решают миграцию за несколько минут. Структура параметров специально близка к распространённым паттернам сообщества.

Параметры конфигурации

Открыто config.lua для настройки значений по умолчанию:

  • Позиция по умолчанию , над головой игрока (по умолчанию) или фиксировано внизу по центру.
  • Color scheme , градиент заливки. Поддерживает одноцветный, двухцветный градиент или отображение по степени серьёзности (зелёный для нормального, оранжевый для медленного, красный для критического).
  • Отменить клавишу , какая клавиша отменяет отменяемую индикаторную шкалу прогресса. По умолчанию: backspace.
  • Отменить анимацию , исчезновение с затемнением (по умолчанию), выезд или мгновенное исчезновение.
  • Отображение времени , показывать оставшиеся секунды (по умолчанию), процент или ничего.
  • Минимальная продолжительность , действия короче этого порога полностью пропускают индикатор выполнения. По умолчанию: 500 мс.

Совместимость с фреймворками

Agency-ProgressBar полностью автономен и не зависит от фреймворков. Он одинаково работает на QBCore, ESX и пользовательских настройках сервера. Для интеграции используется только API exports: никаких общих глобальных переменных, событий фреймворка и проверок прав. Установите его и вызывайте из любого скрипта, независимо от его происхождения.

Почему это важно для ролевой игры

Прогресс-бары , это примитив UX, который появляется во множестве игровых моментов: взлом замков, наручники, крафт, лечение, сбор улик, взлом. Когда эти бары выглядят несогласованно или ведут себя непоследовательно в разных скриптах, это создает тонкий визуальный шум, подрывающий целостность сервера.

Когда на вашем сервере все прогресс-бары используют Agency-ProgressBar, визуальный язык становится единым. Игроки интуитивно понимают, что означает полоса и как она ведёт себя. Поведение при отмене одинаково. Типографика соответствует остальному UI. Мелочи, но они складываются в заметно более отточенный опыт для игроков.

Контекстное позиционирование важнее, чем кажется. Прогресс-бар, закреплённый над головой вашего персонажа во время взлома замка, удерживает внимание на действии, а не в углу экрана. В напряжённые моменты, например, когда вас преследуют во время взлома, это помогает игрокам сохранять пространственную осведомлённость, пока бар виден.

Часто задаваемые вопросы

Могу ли я запускать несколько прогресс-баров одновременно?

Да. Каждый Play() вызов возвращает ID и управляет своим состоянием. Несколько полос располагаются вертикально над игроком с разумным интервалом. Это полезно для многоэтапных действий, где прогресс по параллельным задачам должен быть виден одновременно, хотя в большинстве RP-сценариев используется одна полоса за раз.

Как прикрепить progress bar к объекту или NPC вместо игрока?

Пройти target = {type = 'entity', id = entityNetId} поле в таблице опций. Полоса висит над указанным объектом, а не над игроком. Используйте это для действий по ремонту, медицинских действий на поверженных игроках или в любом случае, когда фокус действия внешней.

Можно ли с сервера принудительно сделать бар неотменяемым?

Да. Установите canCancel = false при вызове Play(). Клавиша отмены не действует, а анимация отмены не воспроизводится. Это уместно для действий, принудительно выполняемых сервером (анимации ареста, скриптовые катсцены), где прерывание игроком нарушило бы ход событий.

Работает ли это с анимациями ox_lib?

Да. Agency-ProgressBar не зависит от анимаций, вы управляете анимациями в своём скрипте вместе с вызовом прогресс-бара. Бар , это чисто UI-элемент. Используйте с любой библиотекой анимаций или вызовами анимаций FiveM отдельно.

Требования

  • Сервер FiveM (любой фреймворк или standalone)
  • аккаунт cfx.re с действующей лицензией Agency-ProgressBar
  • Нет зависимости от базы данных
  • Нет внешних зависимостей ресурсов

Практические примеры интеграции

Вот распространённые схемы интеграции Agency-ProgressBar с существующими скриптами:

Взлом замков: Звонок Play({label = 'Picking lock...', duration = 8000, canCancel = true, onCancel = cleanupFunction}) в начале попытки взлома замка. Используйте вместе с мини-игрой взлома, работающей параллельно. Если мини-игра провалилась, вызовите Dismiss() с возвращённым ID. Если успешна, дайте полосе завершиться естественно.

Медицинское лечение: Использовать target = {type = 'entity', id = patientNetId} чтобы закрепить панель над пациентом, а не над медиком. Игроки, наблюдающие сцену, видят прогресс лечения в точке оказания помощи, а не плавающим над головой медика.

Сбор доказательств: Установить canCancel = false для скриптового сбора улик, который нельзя прерывать (чтобы предотвратить отмену игроками и избежать оставления отпечатков пальцев на месте происшествия). Неотменяемая шкала сообщает игроку, что это действие обязательно, а не опционально.

Действия на стороне сервера: Отобразите индикатор прогресса на клиенте, пока серверное действие выполняется асинхронно. Когда серверный callback возвращается, либо дайте индикатору завершиться, либо закройте его раньше в зависимости от результата на сервере. Визуальная длительность должна примерно соответствовать ожидаемому времени обработки на сервере.

Подходящий скрипт

Готов для твоего сервера, обновления включены.

Готовы начать?

Возьмите скрипты в нашем магазине или заходите в Discord за поддержкой, обновлениями и анонсами.