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