mirror of
https://github.com/Deutscher-Tischfussballbund/com_sportsmanager.git
synced 2026-09-11 18:41:50 +00:00
Die Remis-Regel galt nur auf einem der beiden Rechenwege
Sven 2026-09-08: „Teste fuer alle Modus, ob Siege, Unentschieden und
Niederlagen weiter korrekt berechnet werden pro Spiel fuer saemtliche
Modusszenarien."
Beim Testen ueber die volle Matrix (4 Spielpunkte-Wertungen x 7 Satzmodi x 4
Spielstaende = 112 Szenarien) kam ein Fehler DIESES Zweigs heraus: die
Spielpunkte werden an ZWEI Stellen berechnet, und 09ae1c1/554ad25 hatte die
Remis-Pruefung nur in eine davon eingebaut.
Weg A admin.php, Spielbericht speichern — MIT Pruefung
Weg B sportsmanager.php, begegnungenAktualisieren() bei Modus-/
Wettbewerbsaenderung — OHNE Pruefung
Dasselbe Spiel bekam damit verschiedene Spielpunkte, je nachdem, welcher Weg es
zuletzt angefasst hatte: Speichern ergab 0:0, ein Moduswechsel schrieb 1:1
zurueck. Betroffen sind Gleichstaende ungleich 0:0 in Wettbewerben, deren
Satzmodus kein Remis zulaesst (ein fester Satz, ungerade Satzzahl,
Gewinnsaetze) bei Wertung „Sieg 2/Remis 1" oder „Sieg 3/Remis 1" — 8 der 112
Szenarien. Gemessen, nicht geschaetzt.
Die Regel steht jetzt als remisMoeglich() auf Dateiebene und wird von beiden
Wegen aufgerufen, statt als Closure in einem der beiden Loops zu leben.
Matrix danach: 0 Widersprueche.
NICHT betroffen und mitgeprueft:
- Siege/Unentschieden/Niederlagen je Spiel sind in ALLEN 112 Szenarien
unveraendert. Sie kommen in der Spielerstatistik aus dem Vergleich der
PUNKTE (sportsmanager.php:6338), nicht aus den Spielpunkten, und an den
Punkten aendert dieser Zweig nichts.
- Race bleibt unberuehrt: die Race-Normalisierung setzt die Wertung auf 2
(„ohne Umrechnung"), und dort gibt es keinen Remis-Zweig.
- spielerstatistikAktualisieren() selbst ist unveraendert (nur die
Einheiten-Beschriftung kam hinzu).
This commit is contained in:
@@ -10988,6 +10988,23 @@ function adminEditBegegnungSpielplan($bestaetigen): void
|
||||
|
||||
}
|
||||
|
||||
// Kann ein Spiel dieses Satzmodus ueberhaupt unentschieden enden?
|
||||
//
|
||||
// Gleichstand ist nicht immer ein Unentschieden. Wo eine Zahl von GEWINNSAETZEN gilt, hat ein
|
||||
// Spiel mit gleichem Satzstand noch keinen Sieger — es ist unfertig, und dafuer gibt es keinen
|
||||
// Punkt. Ohne Angabe zur Satzzahl bleibt es beim bisherigen Verhalten.
|
||||
//
|
||||
// Steht bewusst auf Dateiebene und nicht als Closure im Speicher-Loop: die Spielpunkte werden
|
||||
// an ZWEI Stellen berechnet — hier beim Speichern eines Spielberichts und in
|
||||
// begegnungenAktualisieren() bei einer Modus-/Wettbewerbsaenderung. Dort fehlte die Regel,
|
||||
// sodass beide Wege demselben Spiel verschiedene Spielpunkte gaben (gefunden 2026-09-08).
|
||||
function remisMoeglich($saetze_modus): bool
|
||||
{
|
||||
if ($saetze_modus == 0) return true; // keine Angabe
|
||||
if ($saetze_modus < 0) return false; // Gewinnsaetze: am Ende steht keiner gleich
|
||||
return $saetze_modus % 2 == 0; // feste Satzzahl: nur eine gerade endet remis
|
||||
}
|
||||
|
||||
function adminSaveBegegnungSpielplan(): void
|
||||
{
|
||||
$app = Factory::getContainer()->get(SiteApplication::class);
|
||||
@@ -11325,16 +11342,6 @@ function adminSaveBegegnungSpielplan(): void
|
||||
$total_heim_punkte += $spiel_heim_punkte;
|
||||
$total_gast_punkte += $spiel_gast_punkte;
|
||||
|
||||
// Gleichstand ist nicht immer ein Unentschieden. Wo eine Zahl von GEWINNSAETZEN
|
||||
// gilt, hat ein Spiel mit gleichem Satzstand einfach noch keinen Sieger — es ist
|
||||
// unfertig, und dafuer gibt es keinen Punkt. Ohne Angabe zur Satzzahl bleibt es
|
||||
// beim bisherigen Verhalten.
|
||||
$remis_moeglich = function ($saetze_modus) {
|
||||
if ($saetze_modus == 0) return true; // keine Angabe
|
||||
if ($saetze_modus < 0) return false; // Gewinnsaetze: am Ende steht keiner gleich
|
||||
return $saetze_modus % 2 == 0; // feste Satzzahl: nur eine gerade endet remis
|
||||
};
|
||||
|
||||
if ($spieltyp[0] != "D") {
|
||||
if ($spielpunkte_wertung_einzel == 2) {
|
||||
$spiel_heim_spielpunkte = $spiel_heim_punkte;
|
||||
@@ -11350,7 +11357,7 @@ function adminSaveBegegnungSpielplan(): void
|
||||
$spiel_heim_spielpunkte = 0;
|
||||
$spiel_gast_spielpunkte = 0;
|
||||
} else if ($spielpunkte_wertung_einzel != 3
|
||||
&& $remis_moeglich($teamspiel_modus->saetze_modus_einzel)) {
|
||||
&& remisMoeglich($teamspiel_modus->saetze_modus_einzel)) {
|
||||
$spiel_heim_spielpunkte = 1;
|
||||
$spiel_gast_spielpunkte = 1;
|
||||
} else {
|
||||
@@ -11373,7 +11380,7 @@ function adminSaveBegegnungSpielplan(): void
|
||||
$spiel_heim_spielpunkte = 0;
|
||||
$spiel_gast_spielpunkte = 0;
|
||||
} else if ($spielpunkte_wertung_doppel != 3
|
||||
&& $remis_moeglich($teamspiel_modus->saetze_modus_doppel)) {
|
||||
&& remisMoeglich($teamspiel_modus->saetze_modus_doppel)) {
|
||||
$spiel_heim_spielpunkte = 1;
|
||||
$spiel_gast_spielpunkte = 1;
|
||||
} else {
|
||||
|
||||
@@ -6196,7 +6196,8 @@ function begegnungenAktualisieren($geaendert_veranstaltung_id = 0, $geaendert_mo
|
||||
} else if ($spiel_heim_punkte == 0 && $spiel_gast_punkte == 0) {
|
||||
$spiel_heim_spielpunkte = 0;
|
||||
$spiel_gast_spielpunkte = 0;
|
||||
} else if ($spielpunkte_wertung_einzel != 3) {
|
||||
} else if ($spielpunkte_wertung_einzel != 3
|
||||
&& remisMoeglich($teamspiel_modus->saetze_modus_einzel)) {
|
||||
$spiel_heim_spielpunkte = 1;
|
||||
$spiel_gast_spielpunkte = 1;
|
||||
} else {
|
||||
@@ -6218,7 +6219,8 @@ function begegnungenAktualisieren($geaendert_veranstaltung_id = 0, $geaendert_mo
|
||||
} else if ($spiel_heim_punkte == 0 && $spiel_gast_punkte == 0) {
|
||||
$spiel_heim_spielpunkte = 0;
|
||||
$spiel_gast_spielpunkte = 0;
|
||||
} else if ($spielpunkte_wertung_doppel != 3) {
|
||||
} else if ($spielpunkte_wertung_doppel != 3
|
||||
&& remisMoeglich($teamspiel_modus->saetze_modus_doppel)) {
|
||||
$spiel_heim_spielpunkte = 1;
|
||||
$spiel_gast_spielpunkte = 1;
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user