Live-Ergebnisse: Stream-Seite, Anzeige, automatischer Mapwechsel

- Stream-Übersicht unter /stream/<Zuschauercode> (1920x1080, Lobby, Veto, Spielstand)
- Live-Stand, Rundenverlauf und Serienstand auf Match-Seite und Übersicht
- Parser mit echten AMP-Logs geprüft: Game Over mit leerer Map-Gruppe,
  Match_Start vor der Aufwärmphase, veraltete Seitenzuordnung nach der Halbzeit
- Nach Map-Ende automatisch nächste Map bzw. Abschluss der entschiedenen Serie
- LOG_DEBUG zur Fehlersuche, README und .env.example ergänzt

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
SPP UserandClaude Opus 5.5 committed 2026-10-25 19:20:10 +01:00
1 parent 5fade769e7
commit 43dc5b837a
20 files changed
+901 -44

No files matched your search

+5 -4
View File
@@ -39,8 +39,11 @@ export class DemoMatchSimulator {
run.score[winner] += 1;
run.played += 1;
const notice = REASONS[side][Math.floor(this.random() * REASONS[side].length)];
// Reihenfolge wie bei einem echten CS2-Server: Rundenende, Seitenzuordnung der gespielten Runde, Round_End
const lines = [
`${stamp()}Team "${side === 'CT' ? 'CT' : 'TERRORIST'}" triggered "SFUI_Notice_${notice}" (CT "${run.score[run.sides.CT]}") (T "${run.score[run.sides.T]}")`,
...teamLines(),
`${stamp()}World triggered "Round_End"`,
];
if (run.score[winner] >= toWin) {
lines.push(`${stamp()}Game Over: competitive mg_active ${map} score ${run.score[run.sides.CT]}:${run.score[run.sides.T]} after 1 min`);
@@ -48,10 +51,8 @@ export class DemoMatchSimulator {
this.stop(matchId);
return;
}
if (run.played === maxRounds / 2) {
run.sides = { CT: run.sides.T, T: run.sides.CT };
lines.push(...teamLines());
}
// Halbzeit: Seiten wechseln, die nächsten Zeilen nennen die neue Zuordnung
if (run.played === maxRounds / 2) run.sides = { CT: run.sides.T, T: run.sides.CT };
onLines(lines);
}, roundMs);
this.runs.set(matchId, run);