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.