удаления еще раз 2
This commit is contained in:
@@ -4606,11 +4606,11 @@ function startCustomTooltips() {
|
||||
const selectedName = String(step.game_vmix_selected_name || "").trim();
|
||||
if (!input || !selectedName) continue;
|
||||
const target = { Input: input, SelectedName: selectedName };
|
||||
if (["timer_start", "timer_restart"].includes(eventName)) {
|
||||
if (["timer_start", "timer_restart", "timer_resume"].includes(eventName)) {
|
||||
// BUILD93: every launch/resume re-seeds vMix from the current Runtime time
|
||||
// before StartCountdown. This prevents drift after pauses or delayed operator actions.
|
||||
commands.push({ Function: "SetCountdown", ...target, Value: vmixCountdownValue(timerState.currentMs) });
|
||||
commands.push({ Function: "StartCountdown", ...target });
|
||||
} else if (eventName === "timer_resume") {
|
||||
commands.push({ Function: "StartCountdown", ...target });
|
||||
} else if (eventName === "timer_pause") {
|
||||
commands.push({ Function: "PauseCountdown", ...target });
|
||||
} else if (["timer_stop", "timer_finished"].includes(eventName)) {
|
||||
@@ -4893,11 +4893,15 @@ function startCustomTooltips() {
|
||||
eventKey, input: target.input, selectedName: target.selected_name, overlay, sourceSide, targetSide: side,
|
||||
mode: "countdown", running: Boolean(entry.event.running),
|
||||
});
|
||||
if (force || assignmentChanged) {
|
||||
const startingCountdown = Boolean(entry.event.running)
|
||||
&& (force || assignmentChanged || previous?.running !== true);
|
||||
// BUILD93 invariant: whenever StartCountdown is emitted, SetCountdown with
|
||||
// the current web value is emitted immediately before it.
|
||||
if (force || assignmentChanged || startingCountdown) {
|
||||
setCommands.push({ Function: "SetCountdown", Input: target.input, SelectedName: target.selected_name, Value: vmixCountdownValue(entry.event.remainingMs) });
|
||||
}
|
||||
if (entry.event.running) {
|
||||
if (force || assignmentChanged || previous?.running !== true) {
|
||||
if (startingCountdown) {
|
||||
runCommands.push({ Function: "StartCountdown", Input: target.input, SelectedName: target.selected_name });
|
||||
}
|
||||
} else if (force || assignmentChanged || previous?.running !== false) {
|
||||
@@ -5078,9 +5082,8 @@ function startCustomTooltips() {
|
||||
commands.push({ Function: "SetText", Input: step.game_vmix_input, SelectedName: step.game_vmix_selected_name, Value: formatTimerValue(gameTimer, gameTimerState) });
|
||||
} else if (pausing) {
|
||||
commands.push({ Function: "PauseCountdown", Input: step.game_vmix_input, SelectedName: step.game_vmix_selected_name });
|
||||
} else if (action === "resume") {
|
||||
commands.push({ Function: "StartCountdown", Input: step.game_vmix_input, SelectedName: step.game_vmix_selected_name });
|
||||
} else {
|
||||
// BUILD93: start and resume are both a hard Runtime -> vMix sync.
|
||||
commands.push({ Function: "SetCountdown", Input: step.game_vmix_input, SelectedName: step.game_vmix_selected_name, Value: vmixCountdownValue(gameTimerState.currentMs) });
|
||||
commands.push({ Function: "StartCountdown", Input: step.game_vmix_input, SelectedName: step.game_vmix_selected_name });
|
||||
}
|
||||
@@ -5111,9 +5114,8 @@ function startCustomTooltips() {
|
||||
});
|
||||
if (pausing) {
|
||||
commands.push({ Function: "PauseCountdown", Input: target.input, SelectedName: target.selected_name });
|
||||
} else if (action === "resume") {
|
||||
commands.push({ Function: "StartCountdown", Input: target.input, SelectedName: target.selected_name });
|
||||
} else {
|
||||
// BUILD93: every penalty launch/resume is re-seeded from the web timer first.
|
||||
commands.push({ Function: "SetCountdown", Input: target.input, SelectedName: target.selected_name, Value: vmixCountdownValue(event.remainingMs) });
|
||||
commands.push({ Function: "StartCountdown", Input: target.input, SelectedName: target.selected_name });
|
||||
}
|
||||
@@ -13461,7 +13463,7 @@ function renderHockeyPenaltyDashboard(node, component, runtime) {
|
||||
<div class="shortcut-finish-action-list">${timerFinishActionRows(step)}</div>
|
||||
|
||||
<div class="shortcut-vmix-inventory-note"><span>${escapeHtml(shortcutInventoryLabel())}</span><small>Для каждого countdown теперь обязательно выбирается конкретный Text / SelectedName. Это исключает отправку времени в первый текстовый элемент по умолчанию.</small></div>
|
||||
<p class="shortcut-step-note">Режим <b>Countdown vMix</b> рекомендуется и используется по умолчанию: веб отправляет <code>SetCountdown</code> только при установке/коррекции времени и затем <code>StartCountdown</code>; каждую секунду значение больше не передаётся. <b>Text mirror</b> оставлен только как режим совместимости для старых титров. Для верхнего счёта используется одна penalty-плашка: при реальном большинстве она показывается на стороне команды преимущества и отсчитывает ближайшее изменение численного состава; при чистом равном обоюдном удалении плашка не выводится. Режим «Все удаления по слотам» оставлен как дополнительный. Действие по окончании показывает выбранный Input в заданном Overlay и автоматически убирает его через указанное время.</p>
|
||||
<p class="shortcut-step-note">Режим <b>Countdown vMix</b> рекомендуется и используется по умолчанию: при каждом запуске или продолжении веб сначала отправляет актуальное время через <code>SetCountdown</code>, затем <code>StartCountdown</code>; каждую секунду значение не передаётся. <b>Text mirror</b> оставлен только как режим совместимости для старых титров. Для верхнего счёта используется одна penalty-плашка: при реальном большинстве она показывается на стороне команды преимущества и отсчитывает ближайшее изменение численного состава; при чистом равном обоюдном удалении плашка не выводится. Режим «Все удаления по слотам» оставлен как дополнительный. Действие по окончании показывает выбранный Input в заданном Overlay и автоматически убирает его через указанное время.</p>
|
||||
</div>`;
|
||||
} else if (step.type === "delay") {
|
||||
body.innerHTML = `<div class="shortcut-step-grid"><label>Задержка, мс<input type="number" min="0" max="10000" step="10" data-step-field="milliseconds" value="${Number(step.milliseconds) || 0}"></label></div>`;
|
||||
|
||||
Reference in New Issue
Block a user