sim fix
This commit is contained in:
@@ -682,12 +682,6 @@ export function applyFifaScores(
|
|||||||
console.warn("[fifa] FIFA-Winner-ID nicht in Team-Map:", fs.winnerTeamId, "| matchNumber:", m.matchNumber);
|
console.warn("[fifa] FIFA-Winner-ID nicht in Team-Map:", fs.winnerTeamId, "| matchNumber:", m.matchNumber);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
console.log("[FIFA-WINNER]", "matchNumber:", m.matchNumber,
|
|
||||||
"| fifa.Winner:", fs.winnerTeamId,
|
|
||||||
"| status:", r.status,
|
|
||||||
"| homeScore:", r.homeScore, "| awayScore:", r.awayScore,
|
|
||||||
"| homePenalty:", r.homePenalty, "| awayPenalty:", r.awayPenalty,
|
|
||||||
"| -> m.winnerTeamId gesetzt:", r.winnerTeamId);
|
|
||||||
if (fs.matchTime) {
|
if (fs.matchTime) {
|
||||||
const min = parseInt(fs.matchTime, 10);
|
const min = parseInt(fs.matchTime, 10);
|
||||||
if (!isNaN(min)) r.minute = min;
|
if (!isNaN(min)) r.minute = min;
|
||||||
|
|||||||
@@ -42,16 +42,23 @@ function winnerOf(m: Match | undefined): string | null {
|
|||||||
if (m.awayScore > m.homeScore) return m.awayTeamId;
|
if (m.awayScore > m.homeScore) return m.awayTeamId;
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
let _winnerDbg = true; // Nur einmal loggen
|
// Bestimmt im Sim-Modus die Sieger-Slot-ID.
|
||||||
function winnerDbg(m: Match | undefined, result: string | null, ctx: string): void {
|
// Real gespielte Spiele: echtes winnerTeamId (inkl. Elfmeter) auf die
|
||||||
if (!_winnerDbg || !m || m.matchNumber !== 74) return;
|
// aufgelöste Slot-Seite mappen. Simulierte Spiele: Score-Vergleich.
|
||||||
_winnerDbg = false;
|
function simWinnerSlotId(feed: Match, homeSlotId: string, awaySlotId: string): string {
|
||||||
console.log("[WINNER-OF]", ctx,
|
if (feed.status === "FINISHED" && feed.winnerTeamId) {
|
||||||
"| matchNumber:", m.matchNumber,
|
if (feed.winnerTeamId === homeSlotId) return homeSlotId;
|
||||||
"| winnerTeamId:", m.winnerTeamId,
|
if (feed.winnerTeamId === awaySlotId) return awaySlotId;
|
||||||
"| homeScore:", m.homeScore, "| awayScore:", m.awayScore,
|
if (feed.homePenalty != null && feed.awayPenalty != null
|
||||||
"| status:", m.status,
|
&& feed.homePenalty !== feed.awayPenalty) {
|
||||||
"| ergebnis (zurückgegebener sieger):", result);
|
return feed.homePenalty > feed.awayPenalty ? homeSlotId : awaySlotId;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (feed.homeScore != null && feed.awayScore != null) {
|
||||||
|
if (feed.homeScore > feed.awayScore) return homeSlotId;
|
||||||
|
if (feed.awayScore > feed.homeScore) return awaySlotId;
|
||||||
|
}
|
||||||
|
return homeSlotId;
|
||||||
}
|
}
|
||||||
|
|
||||||
function loserOf(m: Match | undefined): string | null {
|
function loserOf(m: Match | undefined): string | null {
|
||||||
@@ -177,32 +184,17 @@ export function resolveBracket(
|
|||||||
const away = sideFrom(a.teamId, slotLabel(rm.away, assignment, winnerGroup), teams, feed, "away", a.provisional, a.tooltip);
|
const away = sideFrom(a.teamId, slotLabel(rm.away, assignment, winnerGroup), teams, feed, "away", a.provisional, a.tooltip);
|
||||||
|
|
||||||
const feedWinner = winnerOf(feed);
|
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
|
|
||||||
// FIFA-Nummerierung abweichen kann → feed gehört evtl. zum falschen Spiel.
|
|
||||||
if (resolveWinners && feed && h.teamId && a.teamId
|
if (resolveWinners && feed && h.teamId && a.teamId
|
||||||
&& feed.homeScore != null && feed.awayScore != null) {
|
&& feed.homeScore != null && feed.awayScore != null) {
|
||||||
// Simulation: Gewinner aus Scores und aufgelösten Team-IDs ableiten.
|
const winnerId = simWinnerSlotId(feed, h.teamId, a.teamId);
|
||||||
// Nutze NICHT feed.homeTeamId/awayTeamId (sind null für KO-Matches),
|
const loserId = winnerId === h.teamId ? a.teamId : h.teamId;
|
||||||
// sondern die aufgelösten h.teamId / a.teamId aus resolveR32Slot.
|
|
||||||
const homeWins = feed.homeScore > feed.awayScore;
|
|
||||||
const awayWins = feed.awayScore > feed.homeScore;
|
|
||||||
const winnerId = homeWins ? h.teamId : awayWins ? a.teamId : h.teamId;
|
|
||||||
winners.set(rm.matchNumber, winnerId);
|
winners.set(rm.matchNumber, winnerId);
|
||||||
losers.set(rm.matchNumber, loserOf(feed) ?? (homeWins ? a.teamId : awayWins ? h.teamId : a.teamId));
|
losers.set(rm.matchNumber, loserId);
|
||||||
} else {
|
} else {
|
||||||
winners.set(rm.matchNumber, feedWinner);
|
winners.set(rm.matchNumber, feedWinner);
|
||||||
losers.set(rm.matchNumber, loserOf(feed));
|
losers.set(rm.matchNumber, loserOf(feed));
|
||||||
}
|
}
|
||||||
decided.set(rm.matchNumber, feed?.status === "FINISHED");
|
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 {
|
return {
|
||||||
matchNumber: rm.matchNumber, stage: "R32",
|
matchNumber: rm.matchNumber, stage: "R32",
|
||||||
home, away, status: feed?.status ?? "SCHEDULED", prob: feed?.prob,
|
home, away, status: feed?.status ?? "SCHEDULED", prob: feed?.prob,
|
||||||
@@ -216,11 +208,16 @@ export function resolveBracket(
|
|||||||
const src = km.losers ? losers : winners;
|
const src = km.losers ? losers : winners;
|
||||||
const homeId = src.get(km.fromHome) ?? null;
|
const homeId = src.get(km.fromHome) ?? null;
|
||||||
const awayId = src.get(km.fromAway) ?? null;
|
const awayId = src.get(km.fromAway) ?? null;
|
||||||
if (km.matchNumber === 89) {
|
if (km.matchNumber === 89 || km.matchNumber === 90) {
|
||||||
console.log("[PROPAGATE]", "ziel slot:", km.matchNumber,
|
console.log("[PROPAGATE-R16]", {
|
||||||
"| fromHome:", km.fromHome, "| fromAway:", km.fromAway,
|
zielSlot: km.matchNumber,
|
||||||
"| homeId (aus winners):", homeId,
|
fromHome: km.fromHome,
|
||||||
"| awayId (aus winners):", awayId);
|
fromAway: km.fromAway,
|
||||||
|
homeIdAusWinners: homeId,
|
||||||
|
awayIdAusWinners: awayId,
|
||||||
|
homeIdAusLosers: losers.get(km.fromHome) ?? null,
|
||||||
|
awayIdAusLosers: losers.get(km.fromAway) ?? null,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ein Folgeteam ist fix, wenn das speisende Spiel beendet ist.
|
// Ein Folgeteam ist fix, wenn das speisende Spiel beendet ist.
|
||||||
@@ -236,11 +233,10 @@ export function resolveBracket(
|
|||||||
const feedWinner = winnerOf(feed);
|
const feedWinner = winnerOf(feed);
|
||||||
if (resolveWinners && feed && homeId && awayId
|
if (resolveWinners && feed && homeId && awayId
|
||||||
&& feed.homeScore != null && feed.awayScore != null) {
|
&& feed.homeScore != null && feed.awayScore != null) {
|
||||||
const homeWins = feed.homeScore > feed.awayScore;
|
const winnerId = simWinnerSlotId(feed, homeId, awayId);
|
||||||
const awayWins = feed.awayScore > feed.homeScore;
|
const loserId = winnerId === homeId ? awayId : homeId;
|
||||||
const winnerId = homeWins ? homeId : awayWins ? awayId : homeId;
|
|
||||||
winners.set(km.matchNumber, winnerId);
|
winners.set(km.matchNumber, winnerId);
|
||||||
losers.set(km.matchNumber, loserOf(feed) ?? (homeWins ? awayId : awayWins ? homeId : awayId));
|
losers.set(km.matchNumber, loserId);
|
||||||
} else {
|
} else {
|
||||||
winners.set(km.matchNumber, feedWinner);
|
winners.set(km.matchNumber, feedWinner);
|
||||||
losers.set(km.matchNumber, loserOf(feed));
|
losers.set(km.matchNumber, loserOf(feed));
|
||||||
|
|||||||
Reference in New Issue
Block a user