поправлена отдача данных в vMix с помощью agent.exe
This commit is contained in:
@@ -1036,7 +1036,12 @@ function updatePeriodButtons() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function addPlayerEvent(side, type, playerId, playerName) {
|
function addPlayerEvent(side, type, playerId, playerName) {
|
||||||
pushEvent(side, type, playerName, `Игрок #${playerId ?? ""}`, playerId);
|
const row =
|
||||||
|
findLineupRowByPlayerId(side, "starting", playerId) ||
|
||||||
|
findLineupRowByPlayerId(side, "bench", playerId);
|
||||||
|
|
||||||
|
const displayName = getRowDisplayName(row) || String(playerName || "").trim();
|
||||||
|
pushEvent(side, type, displayName, `Игрок #${playerId ?? ""}`, playerId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1173,7 +1178,7 @@ function getPlayersForSide(side) {
|
|||||||
.filter((row) => row.dataset.temporary !== "1")
|
.filter((row) => row.dataset.temporary !== "1")
|
||||||
.map((row) => ({
|
.map((row) => ({
|
||||||
player_id: row.dataset.playerId || "",
|
player_id: row.dataset.playerId || "",
|
||||||
player_name: row.dataset.playerName || "",
|
player_name: getRowDisplayName(row),
|
||||||
player_number: row.dataset.playerNumber || ""
|
player_number: row.dataset.playerNumber || ""
|
||||||
}))
|
}))
|
||||||
.filter((p) => p.player_name.trim() !== "");
|
.filter((p) => p.player_name.trim() !== "");
|
||||||
@@ -1293,19 +1298,29 @@ function getScoreSum() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getSubOutName(payload) {
|
function getSubOutName(payload) {
|
||||||
|
const explicit = String(payload.player_name_out || "").trim();
|
||||||
|
if (explicit) {
|
||||||
|
return explicit;
|
||||||
|
}
|
||||||
|
|
||||||
const raw = String(payload.player_name || "");
|
const raw = String(payload.player_name || "");
|
||||||
if (raw.includes("→")) {
|
if (raw.includes("→")) {
|
||||||
return raw.split("→")[0].trim();
|
return raw.split("→")[0].trim();
|
||||||
}
|
}
|
||||||
return String(payload.player_name_out || "").trim();
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
function getSubInName(payload) {
|
function getSubInName(payload) {
|
||||||
|
const explicit = String(payload.player_name_in || "").trim();
|
||||||
|
if (explicit) {
|
||||||
|
return explicit;
|
||||||
|
}
|
||||||
|
|
||||||
const raw = String(payload.player_name || "");
|
const raw = String(payload.player_name || "");
|
||||||
if (raw.includes("→")) {
|
if (raw.includes("→")) {
|
||||||
return raw.split("→")[1].trim();
|
return raw.split("→")[1].trim();
|
||||||
}
|
}
|
||||||
return String(payload.player_name_in || "").trim();
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
function escapeVmixValue(value) {
|
function escapeVmixValue(value) {
|
||||||
@@ -1425,8 +1440,12 @@ function getPlayerNumberByEvent(event) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
const row = findLineupRowByPlayerId(event.side, "starting", event.player_id)
|
const playerSide = event.type === "own_goal"
|
||||||
|| findLineupRowByPlayerId(event.side, "bench", event.player_id);
|
? getOppositeSide(event.side)
|
||||||
|
: event.side;
|
||||||
|
|
||||||
|
const row = findLineupRowByPlayerId(playerSide, "starting", event.player_id)
|
||||||
|
|| findLineupRowByPlayerId(playerSide, "bench", event.player_id);
|
||||||
|
|
||||||
return row?.dataset.playerNumber || "";
|
return row?.dataset.playerNumber || "";
|
||||||
}
|
}
|
||||||
@@ -1602,6 +1621,10 @@ function renderEvents() {
|
|||||||
];
|
];
|
||||||
|
|
||||||
const eventNumberData = getPlayerNumberByEvent(event);
|
const eventNumberData = getPlayerNumberByEvent(event);
|
||||||
|
const eventNameData = getPlayerNamesByEvent(event);
|
||||||
|
const vmixPlayerName = event.type === "sub"
|
||||||
|
? `${eventNameData.out || ""} → ${eventNameData.in || ""}`.trim()
|
||||||
|
: getVmixPlayerDisplayName(event);
|
||||||
|
|
||||||
const isClickable = clickableTypes.includes(event.type);
|
const isClickable = clickableTypes.includes(event.type);
|
||||||
|
|
||||||
@@ -1612,10 +1635,12 @@ function renderEvents() {
|
|||||||
side: event.side ?? "",
|
side: event.side ?? "",
|
||||||
minute: event.minute ?? "",
|
minute: event.minute ?? "",
|
||||||
seconds: event.seconds ?? 0,
|
seconds: event.seconds ?? 0,
|
||||||
player_name: event.player_name ?? "",
|
player_name: vmixPlayerName,
|
||||||
player_id: event.player_id ?? null,
|
player_id: event.player_id ?? null,
|
||||||
player_out_id: event.player_out_id ?? null,
|
player_out_id: event.player_out_id ?? null,
|
||||||
player_in_id: event.player_in_id ?? null,
|
player_in_id: event.player_in_id ?? null,
|
||||||
|
player_name_out: eventNameData.out ?? "",
|
||||||
|
player_name_in: eventNameData.in ?? "",
|
||||||
player_number: typeof eventNumberData === "string" ? eventNumberData : "",
|
player_number: typeof eventNumberData === "string" ? eventNumberData : "",
|
||||||
player_out_number: typeof eventNumberData === "object" ? (eventNumberData.out ?? "") : "",
|
player_out_number: typeof eventNumberData === "object" ? (eventNumberData.out ?? "") : "",
|
||||||
player_in_number: typeof eventNumberData === "object" ? (eventNumberData.in ?? "") : "",
|
player_in_number: typeof eventNumberData === "object" ? (eventNumberData.in ?? "") : "",
|
||||||
@@ -1665,9 +1690,13 @@ function getVmixPlayerDisplayName(event) {
|
|||||||
return String(event?.player_name || "").trim();
|
return String(event?.player_name || "").trim();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const playerSide = event.type === "own_goal"
|
||||||
|
? getOppositeSide(event.side)
|
||||||
|
: event.side;
|
||||||
|
|
||||||
const row =
|
const row =
|
||||||
findLineupRowByPlayerId(event.side, "starting", event.player_id) ||
|
findLineupRowByPlayerId(playerSide, "starting", event.player_id) ||
|
||||||
findLineupRowByPlayerId(event.side, "bench", event.player_id);
|
findLineupRowByPlayerId(playerSide, "bench", event.player_id);
|
||||||
|
|
||||||
if (!row) {
|
if (!row) {
|
||||||
return String(event.player_name || "").trim();
|
return String(event.player_name || "").trim();
|
||||||
@@ -2324,9 +2353,13 @@ function getDisplayNameForEvent(event) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (event.player_id) {
|
if (event.player_id) {
|
||||||
|
const playerSide = event.type === "own_goal"
|
||||||
|
? getOppositeSide(event.side)
|
||||||
|
: event.side;
|
||||||
|
|
||||||
const row =
|
const row =
|
||||||
findLineupRowByPlayerId(event.side, "starting", event.player_id) ||
|
findLineupRowByPlayerId(playerSide, "starting", event.player_id) ||
|
||||||
findLineupRowByPlayerId(event.side, "bench", event.player_id);
|
findLineupRowByPlayerId(playerSide, "bench", event.player_id);
|
||||||
|
|
||||||
if (row) {
|
if (row) {
|
||||||
return getRowDisplayName(row);
|
return getRowDisplayName(row);
|
||||||
@@ -2446,6 +2479,7 @@ function renderLineupRow(row) {
|
|||||||
class="player-link-btn vmix-person-trigger"
|
class="player-link-btn vmix-person-trigger"
|
||||||
data-vmix-person-type="player"
|
data-vmix-person-type="player"
|
||||||
data-side="${escapeHtml(side)}"
|
data-side="${escapeHtml(side)}"
|
||||||
|
data-name="${escapeHtml(displayName)}"
|
||||||
data-first-name="${escapeHtml(player.firstName || "")}"
|
data-first-name="${escapeHtml(player.firstName || "")}"
|
||||||
data-last-name="${escapeHtml(player.lastName || "")}"
|
data-last-name="${escapeHtml(player.lastName || "")}"
|
||||||
data-role="${escapeHtml(player.position || "")}"
|
data-role="${escapeHtml(player.position || "")}"
|
||||||
|
|||||||
@@ -427,6 +427,7 @@
|
|||||||
class="player-inline vmix-person-trigger player-link"
|
class="player-inline vmix-person-trigger player-link"
|
||||||
data-vmix-person-type="player"
|
data-vmix-person-type="player"
|
||||||
data-side="home"
|
data-side="home"
|
||||||
|
data-name="{{ (((p.first_name or '') ~ ' ' ~ (p.last_name or '')) | trim) or (p.player_name or '') }}"
|
||||||
data-first-name="{{ p.first_name or '' }}"
|
data-first-name="{{ p.first_name or '' }}"
|
||||||
data-last-name="{{ p.last_name or '' }}"
|
data-last-name="{{ p.last_name or '' }}"
|
||||||
data-role="{{ p.position or '' }}"
|
data-role="{{ p.position or '' }}"
|
||||||
@@ -452,7 +453,7 @@ data-role="{{ p.position or '' }}"
|
|||||||
type="button"
|
type="button"
|
||||||
class="icon-btn goal"
|
class="icon-btn goal"
|
||||||
title="Гол"
|
title="Гол"
|
||||||
onclick="addPlayerEvent('home', 'goal', {{ p.player_id | default(p.number) | tojson }}, {{ ((p.last_name or p.player_name or '') ~ ' ' ~ (p.first_name or '')) | trim | tojson }})"
|
onclick="addPlayerEvent('home', 'goal', {{ p.player_id | default(p.number) | tojson }}, {{ ((((p.first_name or '') ~ ' ' ~ (p.last_name or '')) | trim) or (p.player_name or '')) | tojson }})"
|
||||||
>
|
>
|
||||||
⚽
|
⚽
|
||||||
</button>
|
</button>
|
||||||
@@ -460,7 +461,7 @@ data-role="{{ p.position or '' }}"
|
|||||||
type="button"
|
type="button"
|
||||||
class="icon-btn"
|
class="icon-btn"
|
||||||
title="Автогол"
|
title="Автогол"
|
||||||
onclick="addPlayerEvent('home', 'own_goal', {{ p.player_id | default(p.number) | tojson }}, {{ ((p.last_name or p.player_name or '') ~ ' ' ~ (p.first_name or '')) | trim | tojson }})"
|
onclick="addPlayerEvent('home', 'own_goal', {{ p.player_id | default(p.number) | tojson }}, {{ ((((p.first_name or '') ~ ' ' ~ (p.last_name or '')) | trim) or (p.player_name or '')) | tojson }})"
|
||||||
>
|
>
|
||||||
АГ
|
АГ
|
||||||
</button>
|
</button>
|
||||||
@@ -468,7 +469,7 @@ data-role="{{ p.position or '' }}"
|
|||||||
type="button"
|
type="button"
|
||||||
class="icon-btn"
|
class="icon-btn"
|
||||||
title="Пенальти"
|
title="Пенальти"
|
||||||
onclick="addPlayerEvent('home', 'penalty', {{ p.player_id | default(p.number) | tojson }}, {{ ((p.last_name or p.player_name or '') ~ ' ' ~ (p.first_name or '')) | trim | tojson }})"
|
onclick="addPlayerEvent('home', 'penalty', {{ p.player_id | default(p.number) | tojson }}, {{ ((((p.first_name or '') ~ ' ' ~ (p.last_name or '')) | trim) or (p.player_name or '')) | tojson }})"
|
||||||
>
|
>
|
||||||
П
|
П
|
||||||
</button>
|
</button>
|
||||||
@@ -476,7 +477,7 @@ data-role="{{ p.position or '' }}"
|
|||||||
type="button"
|
type="button"
|
||||||
class="icon-btn sub"
|
class="icon-btn sub"
|
||||||
title="Замена"
|
title="Замена"
|
||||||
onclick="beginSubstitution('home', {{ p.player_id | default(p.number) | tojson }}, {{ ((p.last_name or p.player_name or '') ~ ' ' ~ (p.first_name or '')) | trim | tojson }}, this)"
|
onclick="beginSubstitution('home', {{ p.player_id | default(p.number) | tojson }}, {{ ((((p.first_name or '') ~ ' ' ~ (p.last_name or '')) | trim) or (p.player_name or '')) | tojson }}, this)"
|
||||||
>
|
>
|
||||||
⇄
|
⇄
|
||||||
</button>
|
</button>
|
||||||
@@ -484,13 +485,13 @@ data-role="{{ p.position or '' }}"
|
|||||||
type="button"
|
type="button"
|
||||||
class="icon-btn yellow-card"
|
class="icon-btn yellow-card"
|
||||||
title="Жёлтая карточка"
|
title="Жёлтая карточка"
|
||||||
onclick="addPlayerEvent('home', 'yellow', {{ p.player_id | default(p.number) | tojson }}, {{ ((p.last_name or p.player_name or '') ~ ' ' ~ (p.first_name or '')) | trim | tojson }})"
|
onclick="addPlayerEvent('home', 'yellow', {{ p.player_id | default(p.number) | tojson }}, {{ ((((p.first_name or '') ~ ' ' ~ (p.last_name or '')) | trim) or (p.player_name or '')) | tojson }})"
|
||||||
></button>
|
></button>
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
class="icon-btn red-card"
|
class="icon-btn red-card"
|
||||||
title="Красная карточка"
|
title="Красная карточка"
|
||||||
onclick="addPlayerEvent('home', 'red', {{ p.player_id | default(p.number) | tojson }}, {{ ((p.last_name or p.player_name or '') ~ ' ' ~ (p.first_name or '')) | trim | tojson }})"
|
onclick="addPlayerEvent('home', 'red', {{ p.player_id | default(p.number) | tojson }}, {{ ((((p.first_name or '') ~ ' ' ~ (p.last_name or '')) | trim) or (p.player_name or '')) | tojson }})"
|
||||||
></button>
|
></button>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
@@ -543,6 +544,7 @@ data-role="{{ p.position or '' }}"
|
|||||||
class="player-inline vmix-person-trigger player-link"
|
class="player-inline vmix-person-trigger player-link"
|
||||||
data-vmix-person-type="player"
|
data-vmix-person-type="player"
|
||||||
data-side="home"
|
data-side="home"
|
||||||
|
data-name="{{ (((p.first_name or '') ~ ' ' ~ (p.last_name or '')) | trim) or (p.player_name or '') }}"
|
||||||
data-first-name="{{ p.first_name or '' }}"
|
data-first-name="{{ p.first_name or '' }}"
|
||||||
data-last-name="{{ p.last_name or '' }}"
|
data-last-name="{{ p.last_name or '' }}"
|
||||||
data-role="{{ p.position or '' }}"
|
data-role="{{ p.position or '' }}"
|
||||||
@@ -568,7 +570,7 @@ data-role="{{ p.position or '' }}"
|
|||||||
type="button"
|
type="button"
|
||||||
class="icon-btn sub"
|
class="icon-btn sub"
|
||||||
title="Замена"
|
title="Замена"
|
||||||
onclick="selectBenchPlayer('home', {{ p.player_id | default(p.number) | tojson }}, {{ ((p.last_name or p.player_name or '') ~ ' ' ~ (p.first_name or '')) | trim | tojson }}, this)"
|
onclick="selectBenchPlayer('home', {{ p.player_id | default(p.number) | tojson }}, {{ ((((p.first_name or '') ~ ' ' ~ (p.last_name or '')) | trim) or (p.player_name or '')) | tojson }}, this)"
|
||||||
>
|
>
|
||||||
⇄
|
⇄
|
||||||
</button>
|
</button>
|
||||||
@@ -669,6 +671,7 @@ data-role="{{ p.position or '' }}"
|
|||||||
class="player-inline vmix-person-trigger player-link"
|
class="player-inline vmix-person-trigger player-link"
|
||||||
data-vmix-person-type="player"
|
data-vmix-person-type="player"
|
||||||
data-side="away"
|
data-side="away"
|
||||||
|
data-name="{{ (((p.first_name or '') ~ ' ' ~ (p.last_name or '')) | trim) or (p.player_name or '') }}"
|
||||||
data-first-name="{{ p.first_name or '' }}"
|
data-first-name="{{ p.first_name or '' }}"
|
||||||
data-last-name="{{ p.last_name or '' }}"
|
data-last-name="{{ p.last_name or '' }}"
|
||||||
data-role="{{ p.position or '' }}"
|
data-role="{{ p.position or '' }}"
|
||||||
@@ -694,7 +697,7 @@ data-role="{{ p.position or '' }}"
|
|||||||
type="button"
|
type="button"
|
||||||
class="icon-btn goal"
|
class="icon-btn goal"
|
||||||
title="Гол"
|
title="Гол"
|
||||||
onclick="addPlayerEvent('away', 'goal', {{ p.player_id | default(p.number) | tojson }}, {{ ((p.last_name or p.player_name or '') ~ ' ' ~ (p.first_name or '')) | trim | tojson }})"
|
onclick="addPlayerEvent('away', 'goal', {{ p.player_id | default(p.number) | tojson }}, {{ ((((p.first_name or '') ~ ' ' ~ (p.last_name or '')) | trim) or (p.player_name or '')) | tojson }})"
|
||||||
>
|
>
|
||||||
⚽
|
⚽
|
||||||
</button>
|
</button>
|
||||||
@@ -702,7 +705,7 @@ data-role="{{ p.position or '' }}"
|
|||||||
type="button"
|
type="button"
|
||||||
class="icon-btn"
|
class="icon-btn"
|
||||||
title="Автогол"
|
title="Автогол"
|
||||||
onclick="addPlayerEvent('away', 'own_goal', {{ p.player_id | default(p.number) | tojson }}, {{ ((p.last_name or p.player_name or '') ~ ' ' ~ (p.first_name or '')) | trim | tojson }})"
|
onclick="addPlayerEvent('away', 'own_goal', {{ p.player_id | default(p.number) | tojson }}, {{ ((((p.first_name or '') ~ ' ' ~ (p.last_name or '')) | trim) or (p.player_name or '')) | tojson }})"
|
||||||
>
|
>
|
||||||
АГ
|
АГ
|
||||||
</button>
|
</button>
|
||||||
@@ -710,7 +713,7 @@ data-role="{{ p.position or '' }}"
|
|||||||
type="button"
|
type="button"
|
||||||
class="icon-btn"
|
class="icon-btn"
|
||||||
title="Пенальти"
|
title="Пенальти"
|
||||||
onclick="addPlayerEvent('away', 'penalty', {{ p.player_id | default(p.number) | tojson }}, {{ ((p.last_name or p.player_name or '') ~ ' ' ~ (p.first_name or '')) | trim | tojson }})"
|
onclick="addPlayerEvent('away', 'penalty', {{ p.player_id | default(p.number) | tojson }}, {{ ((((p.first_name or '') ~ ' ' ~ (p.last_name or '')) | trim) or (p.player_name or '')) | tojson }})"
|
||||||
>
|
>
|
||||||
П
|
П
|
||||||
</button>
|
</button>
|
||||||
@@ -718,7 +721,7 @@ data-role="{{ p.position or '' }}"
|
|||||||
type="button"
|
type="button"
|
||||||
class="icon-btn sub"
|
class="icon-btn sub"
|
||||||
title="Замена"
|
title="Замена"
|
||||||
onclick="beginSubstitution('away', {{ p.player_id | default(p.number) | tojson }}, {{ ((p.last_name or p.player_name or '') ~ ' ' ~ (p.first_name or '')) | trim | tojson }}, this)"
|
onclick="beginSubstitution('away', {{ p.player_id | default(p.number) | tojson }}, {{ ((((p.first_name or '') ~ ' ' ~ (p.last_name or '')) | trim) or (p.player_name or '')) | tojson }}, this)"
|
||||||
>
|
>
|
||||||
⇄
|
⇄
|
||||||
</button>
|
</button>
|
||||||
@@ -726,13 +729,13 @@ data-role="{{ p.position or '' }}"
|
|||||||
type="button"
|
type="button"
|
||||||
class="icon-btn yellow-card"
|
class="icon-btn yellow-card"
|
||||||
title="Жёлтая карточка"
|
title="Жёлтая карточка"
|
||||||
onclick="addPlayerEvent('away', 'yellow', {{ p.player_id | default(p.number) | tojson }}, {{ ((p.last_name or p.player_name or '') ~ ' ' ~ (p.first_name or '')) | trim | tojson }})"
|
onclick="addPlayerEvent('away', 'yellow', {{ p.player_id | default(p.number) | tojson }}, {{ ((((p.first_name or '') ~ ' ' ~ (p.last_name or '')) | trim) or (p.player_name or '')) | tojson }})"
|
||||||
></button>
|
></button>
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
class="icon-btn red-card"
|
class="icon-btn red-card"
|
||||||
title="Красная карточка"
|
title="Красная карточка"
|
||||||
onclick="addPlayerEvent('away', 'red', {{ p.player_id | default(p.number) | tojson }}, {{ ((p.last_name or p.player_name or '') ~ ' ' ~ (p.first_name or '')) | trim | tojson }})"
|
onclick="addPlayerEvent('away', 'red', {{ p.player_id | default(p.number) | tojson }}, {{ ((((p.first_name or '') ~ ' ' ~ (p.last_name or '')) | trim) or (p.player_name or '')) | tojson }})"
|
||||||
></button>
|
></button>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
@@ -785,6 +788,7 @@ data-role="{{ p.position or '' }}"
|
|||||||
class="player-inline vmix-person-trigger player-link"
|
class="player-inline vmix-person-trigger player-link"
|
||||||
data-vmix-person-type="player"
|
data-vmix-person-type="player"
|
||||||
data-side="away"
|
data-side="away"
|
||||||
|
data-name="{{ (((p.first_name or '') ~ ' ' ~ (p.last_name or '')) | trim) or (p.player_name or '') }}"
|
||||||
data-first-name="{{ p.first_name or '' }}"
|
data-first-name="{{ p.first_name or '' }}"
|
||||||
data-last-name="{{ p.last_name or '' }}"
|
data-last-name="{{ p.last_name or '' }}"
|
||||||
data-role="{{ p.position or '' }}"
|
data-role="{{ p.position or '' }}"
|
||||||
@@ -810,7 +814,7 @@ data-role="{{ p.position or '' }}"
|
|||||||
type="button"
|
type="button"
|
||||||
class="icon-btn sub"
|
class="icon-btn sub"
|
||||||
title="Замена"
|
title="Замена"
|
||||||
onclick="selectBenchPlayer('away', {{ p.player_id | default(p.number) | tojson }}, {{ ((p.last_name or p.player_name or '') ~ ' ' ~ (p.first_name or '')) | trim | tojson }}, this)"
|
onclick="selectBenchPlayer('away', {{ p.player_id | default(p.number) | tojson }}, {{ ((((p.first_name or '') ~ ' ' ~ (p.last_name or '')) | trim) or (p.player_name or '')) | tojson }}, this)"
|
||||||
>
|
>
|
||||||
⇄
|
⇄
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
Reference in New Issue
Block a user