KO Bracket fixed
This commit is contained in:
@@ -24,6 +24,8 @@ export interface ResolvedTie {
|
||||
away: ResolvedSide;
|
||||
status: string;
|
||||
prob?: { home: number; draw: number | null; away: number } | null;
|
||||
homePenalty?: number | null;
|
||||
awayPenalty?: number | null;
|
||||
}
|
||||
|
||||
// Findet das tatsächliche Spiel (aus dem Feed) zu einer FIFA-Match-Nummer.
|
||||
@@ -34,13 +36,29 @@ function feedMatch(matches: Match[], num: number): Match | undefined {
|
||||
// Bestimmt den Sieger eines abgeschlossenen Spiels (Feed) als Team-ID.
|
||||
function winnerOf(m: Match | undefined): string | null {
|
||||
if (!m || m.status !== "FINISHED") return null;
|
||||
if (m.winnerTeamId) return m.winnerTeamId;
|
||||
if (m.homeScore == null || m.awayScore == null) return null;
|
||||
if (m.homeScore > m.awayScore) return m.homeTeamId;
|
||||
if (m.awayScore > m.homeScore) return m.awayTeamId;
|
||||
return null; // Unentschieden -> Elfmeter; Feed liefert i.d.R. Sieger separat
|
||||
return null;
|
||||
}
|
||||
let _winnerDbg = true; // Nur einmal loggen
|
||||
function winnerDbg(m: Match | undefined, result: string | null, ctx: string): void {
|
||||
if (!_winnerDbg || !m || m.matchNumber !== 74) return;
|
||||
_winnerDbg = false;
|
||||
console.log("[WINNER-OF]", ctx,
|
||||
"| matchNumber:", m.matchNumber,
|
||||
"| winnerTeamId:", m.winnerTeamId,
|
||||
"| homeScore:", m.homeScore, "| awayScore:", m.awayScore,
|
||||
"| status:", m.status,
|
||||
"| ergebnis (zurückgegebener sieger):", result);
|
||||
}
|
||||
|
||||
function loserOf(m: Match | undefined): string | null {
|
||||
if (!m || m.status !== "FINISHED") return null;
|
||||
if (m.winnerTeamId) {
|
||||
return m.homeTeamId === m.winnerTeamId ? m.awayTeamId : m.homeTeamId;
|
||||
}
|
||||
if (m.homeScore == null || m.awayScore == null) return null;
|
||||
if (m.homeScore > m.awayScore) return m.awayTeamId;
|
||||
if (m.awayScore > m.homeScore) return m.homeTeamId;
|
||||
@@ -159,6 +177,7 @@ export function resolveBracket(
|
||||
const away = sideFrom(a.teamId, slotLabel(rm.away, assignment, winnerGroup), teams, feed, "away", a.provisional, a.tooltip);
|
||||
|
||||
const feedWinner = winnerOf(feed);
|
||||
winnerDbg(feed, feedWinner, "resolveR32Slot");
|
||||
// Sim-Modus: Gewinner NUR aus Scores + Slot-Team-IDs ableiten.
|
||||
// feedWinner (aus feed.homeTeamId/awayTeamId) wird IGNORIERT,
|
||||
// weil matchNumber-Zuweisung (assignNumbersAndVenues) von der
|
||||
@@ -178,9 +197,16 @@ export function resolveBracket(
|
||||
losers.set(rm.matchNumber, loserOf(feed));
|
||||
}
|
||||
decided.set(rm.matchNumber, feed?.status === "FINISHED");
|
||||
if (rm.matchNumber === 74) {
|
||||
console.log("[PROPAGATE]", "von matchNumber:", rm.matchNumber,
|
||||
"| feedWinner:", feedWinner,
|
||||
"| -> in winners map unter key:", rm.matchNumber,
|
||||
"| ziel z.B. slot 89 fromHome:", 74);
|
||||
}
|
||||
return {
|
||||
matchNumber: rm.matchNumber, stage: "R32",
|
||||
home, away, status: feed?.status ?? "SCHEDULED", prob: feed?.prob,
|
||||
homePenalty: feed?.homePenalty, awayPenalty: feed?.awayPenalty,
|
||||
};
|
||||
});
|
||||
|
||||
@@ -190,6 +216,12 @@ export function resolveBracket(
|
||||
const src = km.losers ? losers : winners;
|
||||
const homeId = src.get(km.fromHome) ?? null;
|
||||
const awayId = src.get(km.fromAway) ?? null;
|
||||
if (km.matchNumber === 89) {
|
||||
console.log("[PROPAGATE]", "ziel slot:", km.matchNumber,
|
||||
"| fromHome:", km.fromHome, "| fromAway:", km.fromAway,
|
||||
"| homeId (aus winners):", homeId,
|
||||
"| awayId (aus winners):", awayId);
|
||||
}
|
||||
|
||||
// Ein Folgeteam ist fix, wenn das speisende Spiel beendet ist.
|
||||
const homeProv = !(decided.get(km.fromHome) ?? false);
|
||||
@@ -217,6 +249,7 @@ export function resolveBracket(
|
||||
later[km.matchNumber] = {
|
||||
matchNumber: km.matchNumber, stage: km.stage,
|
||||
home, away, status: feed?.status ?? "SCHEDULED", prob: feed?.prob,
|
||||
homePenalty: feed?.homePenalty, awayPenalty: feed?.awayPenalty,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user