121 lines
10 KiB
Plaintext
121 lines
10 KiB
Plaintext
BUILD184 — 2026.10.02.5
|
||
Обновление плашек верхнего счёта, Value/SelectedName, SQL-признаки удаления и сессия Mapping
|
||
|
||
Установка поверх BUILD183:
|
||
1. Остановите сервер, сохраните копии пяти заменяемых файлов.
|
||
2. Распакуйте архив в корень проекта с app.py, сохранив папки и заменив файлы.
|
||
3. Запустите сервер, обновите страницу Ctrl+F5.
|
||
|
||
В архиве только пять изменённых файлов программы и эта инструкция.
|
||
Локальные конфиги, SQL-источники, связи Mapping и база данных не заменяются.
|
||
Изменений схемы БД и новых зависимостей нет. Новые системные переменные
|
||
регистрируются автоматически при запуске механизма Mapping.
|
||
|
||
Верхний счёт / Отложенный штраф / Пустые ворота:
|
||
- Условные шаги OverlayInput1–8In (и старые OverlayInput1–8) в включённом
|
||
сценарии, отмеченном как верхний счёт, теперь проверяются при изменении
|
||
флагов HOME/AWAY/ANY: empty_net и delayed_penalty.
|
||
- При появлении условия обновляются связанные данные титра и выдаётся
|
||
настроенный Input. При исчезновении условия плашка снимается со своего слоя.
|
||
Весь сценарий, основной счёт, задержки и команды таймеров повторно не запускаются.
|
||
- Снятие проверяет Input, который находится на слое: посторонний титр,
|
||
заменивший плашку, не снимается. Основной Input защищён от снятия флагом.
|
||
- При смене HOME/AWAY на одном слое сначала снимается старая плашка, затем
|
||
обновляется и выдаётся новая. Если несколько активных шагов адресуют один
|
||
слой, приоритет у последнего шага сценария, как при его обычном исполнении.
|
||
- Плашки восстанавливаются после получения Agent tally. Одна вспомогательная
|
||
плашка не удерживает основной счёт в состоянии «в эфире», если счёт снят.
|
||
- Изменения выполняются в общей очереди титров. Во время ожидания SQL
|
||
повторно проверяются флаги, основной счёт, матч, Agent, сессия и права.
|
||
Устаревшая выдача отменяется. Зрители команды не отправляют.
|
||
|
||
Пример шага с картинки:
|
||
Function: OverlayInput3In
|
||
Условие: HOME — пустые ворота включены
|
||
Input: EMPTY NET HOME - GT
|
||
SelectedName: Text_Away.Text
|
||
Value: EMPTY NET
|
||
|
||
Если у команды включены пустые ворота и верхний счёт в эфире, теперь
|
||
отправляется SetText в Text_Away.Text, затем OverlayInput3In.
|
||
При выключении пустых ворот отправляется OverlayInput3Out, если на слое
|
||
остаётся этот Input. Снимать и заново выдавать основной счёт не требуется.
|
||
|
||
Value/SelectedName:
|
||
- В шаге vMix с PreviewInput, ActiveInput или OverlayInput1–8[/In], если
|
||
заданы SelectedName и Value, поле заполняется отдельной командой перед
|
||
выдачей/Preview. Тип поля из актуальной структуры выбранного Agent определяет
|
||
SetText, SetImage или SetColor, в том числе при первом вызове.
|
||
- SQL/Mapping читается один раз для Input перед заполнением поля.
|
||
Явный Value из шага применяется после Mapping.
|
||
- Поддерживаются числовой Value=0, шаблоны, альтернативный Input и поле
|
||
при выданном счёте. Пустой результат заданного шаблона очищает поле.
|
||
Незаданный Value не создаёт лишнюю команду очистки.
|
||
- Прямые SetText и нативные команды Countdown не дублируются.
|
||
Рабочий механизм основного времени и удалений сохранён.
|
||
|
||
Применение конфига Mapping на другом аккаунте/компьютере:
|
||
- Передаются текущие матч, матчевая сессия и выбранный Agent этого браузера.
|
||
- Сервер использует именно эту сессию. Последняя сессия аккаунта из другой
|
||
вкладки, в том числе пустой канал без матча, больше не подменяет выбранный матч.
|
||
- Проверяются принадлежность активной сессии и Agent аккаунту и совпадение
|
||
выбранного матча. Устаревший или чужой токен не подменяется другой сессией.
|
||
- Для клиента без токена допускается только действующее назначение именно
|
||
выбранного Agent. При несовпадении матча выполнение останавливается.
|
||
- Сначала назначается правильный матч без отправки старого Mapping, затем
|
||
применяется выбранный конфиг. Защита сессии/Agent от соседнего браузера сохранена.
|
||
|
||
Новые SQL-параметры:
|
||
:home_has_penalty
|
||
:away_has_penalty
|
||
|
||
Значение каждого — строка true или false для всей команды, независимо от
|
||
выбранной карточки. true, если есть хотя бы одно назначенное незавершённое
|
||
удаление с остатком времени. Учитываются удаления до запуска и на паузе,
|
||
командные, дисциплинарные 10/20 и обоюдные удаления. Черновики без необходимых
|
||
данных, история, законченные и нулевые удаления не учитываются.
|
||
После удаления/завершения последней карточки команды значение false.
|
||
Если матч не определён — false. Значения берутся из сохранённого состояния
|
||
матча; вручную подменить их через Mapping нельзя.
|
||
|
||
Готовый запрос, возвращающий настоящие boolean поля PostgreSQL:
|
||
|
||
SELECT
|
||
CAST(:home_has_penalty AS boolean) AS "home_has_penalty",
|
||
CAST(:away_has_penalty AS boolean) AS "away_has_penalty";
|
||
|
||
Пример использования в условии:
|
||
|
||
CASE
|
||
WHEN CAST(:home_has_penalty AS boolean) THEN 'HOME PENALTY'
|
||
ELSE ''
|
||
END AS "home_penalty_caption"
|
||
|
||
Параметры также видны в «Переменные» / «Система · Удаления» и напрямую
|
||
доступны в Mapping как context.home_has_penalty и context.away_has_penalty.
|
||
|
||
Проверки:
|
||
- 22 новые backend-проверки применения конфига: точная сессия, более новый
|
||
пустой/другой канал, другой аккаунт со своим Agent, чужие и закрытые токены,
|
||
несовпадение матча, изменение назначения при ожидании, защита другого браузера.
|
||
- 7 прежних проверок маршрутизации нескольких Agent, копирования конфигов
|
||
и защиты сессии/Agent другого браузера прошли.
|
||
- Браузерная проверка применения Mapping по реальным кнопкам интерфейса:
|
||
текущие матч/токен/Agent, другой аккаунт/компьютер, старый канал настроек,
|
||
неверный Agent в сохранённых настройках и понятные сообщения ошибок.
|
||
Прежние браузерные проверки Mapping BUILD170/175/183 также прошли.
|
||
- 82 локальные проверки backend, включая 26 новых вариантов признаков
|
||
удаления, прошлые SQL/Mapping, контекст игрока, команды и Preview.
|
||
- 29 подходящих статических проверок интерфейса прошли.
|
||
- Браузерные проверки: условия плашек и подписи; HOME/AWAY; защита слоя;
|
||
восстановление по tally; все восемь Overlay; быстрая смена флагов и смена
|
||
матча/Agent/сессии/прав при ожидании SQL; реальная кнопка нижней панели;
|
||
тексты/картинки/цвета; один запрос Mapping; удаления последней карточки;
|
||
прежние кнопки и триггеры Preview; общая ссылка «Свои плюсы».
|
||
- Синтаксис Python и JavaScript проверен.
|
||
В старых статических проверках остаются 9 устаревших ожиданий предыдущих
|
||
механизмов timer-fast/PauseCountdown и четырёх Overlay; те же проверки
|
||
не проходят и на версии до этой правки. Ради них рабочий Countdown не менялся.
|
||
Реальный PostgreSQL и ваш vMix не использовались: проверки выполнялись
|
||
изолированно, с имитацией команд и состояния Agent.
|