Versionierte Run-Bewertung
Aktive Strategie
Die aktive Bewertung ist PerformanceRunScoringStrategy mit scoreVersion performance-score-v2.
Game3D bezieht IRunScoringStrategy aus dem DI-Container in BootstrapBase; ein Wechsel auf
LegacyRunScoringStrategy erfordert nur eine andere Registrierung. Die Nakama-Runtime besitzt mit
activeRunScoringStrategy() denselben zentralen Auswahlpunkt. Client- und Serverformel müssen bei
einem Strategiewechsel gemeinsam versioniert werden.
LegacyRunScoringStrategy kapselt unverändert die alte v1-Formel. Sie dient ausschließlich Tests,
Vergleichen und der Auswertung historischer Daten. Neue Leaderboard-Projektionen akzeptieren v1 nicht.
Performance-v2-Formel
Für einen erfolgreich abgeschlossenen Run gilt:
Gesamt = 5.000 Abschlussbasis
+ round(3.000 * clamp(1 - Dauer / TargetDurationMs / 2, 0, 1))
+ round(3.000 * clamp(Trefferquote, 0, 1)^2)
+ round(3.000 * clamp(1 - erlittener Schaden / DamageTakenBudget, 0, 1))
Der Wertebereich ist 5.000 bis 14.000 Punkte. Kills, Critical Hits und verursachter Schaden gehen nicht in den v2-Score ein und können daher nicht zum Farmen verwendet werden. Sie bleiben für Objectives, Replay-Validierung und Statistiken verfügbar. Abgebrochene Runs erhalten einen vollständigen Breakdown mit null Punkten.
Standardwerte:
TargetDurationMs:180000DamageTakenBudget:100
Beide Werte liegen in DungeonRunConfig, werden beim Erstellen einer Online-Run-Session validiert,
in den Session-/Definition-Hash aufgenommen und anschließend für die autoritative Berechnung genutzt.
Punkteaufschlüsselung und Medaillen
Jedes neue RunResult speichert ScoreVersion und ScoreBreakdown. Der Breakdown enthält Strategie,
Version, Basis-, Zeit-, Präzisions-, Schadensvermeidungs- und begrenzte Bonuspunkte sowie die beiden
verwendeten Zielwerte. Nakama ersetzt die Client-Aufschlüsselung nach Replay-Validierung durch die
autoritative Server-Aufschlüsselung.
Medaillengrenzen für v2:
- Bronze: 8.000
- Silber: 10.500
- Gold: 12.500
Leaderboard-Migration
002_reset_leaderboard_for_performance_score_v2.sql entfernt innerhalb einer Transaktion nur
Definitionen und Einträge mit einer von performance-score-v2 abweichenden Version. Dadurch ist die
Migration wiederholbar und bewahrt später erzeugte v2-Einträge. Run-Historien, kanonische RunResults,
Submissions, Validierungen und Replays werden nicht verändert.
Zusätzlich prüfen upsertLeaderboardEntry und backfillLeaderboardEntries die aktive Version. Ein
Backfill mit development-score-v1 wird übersprungen; ein direkter Upsert mit alter Version wird
abgelehnt.
Versionswechsel
Bei einer weiteren Formeländerung müssen gemeinsam geändert werden:
RunScoringVersions.ActiveundACTIVE_SCORE_VERSION,- die C#- und TypeScript-Strategie,
- Medaillengrenzen und UI-Hinweise,
- Unit- und Runtime-Tests,
- Leaderboard-Migration beziehungsweise getrennte Projektion.
Unterschiedliche Score-Versionen dürfen niemals im selben Leaderboard-Kontext erscheinen.