Zitat:
Original von Lanathir
Primar. Vielen Dank. Was war die Ursache?
Innerhalb der Spielberechnung wird jedes auftretende Spielereignis als Objekt angelegt, welches zu einem späteren Zeitpunkt auf ein nicht-assoziatives Array gepusht wird. Um die Spielerstatistiken nach dem Spiel zu aktualisieren, werden alle Elemente dieses Arrays ausgewertet.
"Bedeutungslose" Ereignisse wie z.B. harmlose Fouls oder "Ball landet im Seitenaus" werden verworfen und landen gar nicht erst auf diesem Array - werden somit auch für die Spielerstatistiken nicht ausgewertet.
Während ich den Fehler der doppelten Karten gefixt hatte, habe ich alle Code-Stellen, in welchen eine Karte gezeigt werden konnte endlich mal in eine einzelne neue Methode refaktoriert, welche auch direkt diesen Push auf das Array vornimmt.
Und anschließend noch einen manuellen Push hinzugefügt für den Fall, dass es keine Karte gab.
Allerdings habe ich die Code-Stelle einige Zeilen weiter unten, an denen hier bereits IMMER auf das Array gepusht wurde, nicht entfernt.
Ergebnis: Das Spielereignis-Objekt für die Karte lag zwei mal auf dem Array. Die Karten wurden korrekt nur einmal in der Datenbank gespeichert, da es sich um das selbe Objekt handelt - das Array wird für die Statistik-Berechnung aber bloß in einer simplen For-Schleife durchlaufen. Daher wurde die Anzahl der Karten zwei mal erhöht.
Und wenn ich in meinem "Fix" gestern nun auch korrekterweise das allgemeine Hinzufügen zum Array herausgelöscht hätte anstatt den neu hinzugefügten, korrekten Else-Case, wäre das extrem cool gewesen...
An dieser Stelle übrigens ein dickes Dankeschön für genau diese Nachfrage:
Ohne die Nachfrage hätte ich gerade nicht noch einmal im Code nachgeschaut, um sicherzugehen, dass meine Beschreibung auch korrekt ist - und meinen Fauxpas vermutlich erst deutlich später bemerkt (mit den nächsten Meldungen zu noch immer doppelt gezählten Karten).
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Rizzen am 15.06.2024 12:33.