Skip to content

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: 180000
  • DamageTakenBudget: 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:

  1. RunScoringVersions.Active und ACTIVE_SCORE_VERSION,
  2. die C#- und TypeScript-Strategie,
  3. Medaillengrenzen und UI-Hinweise,
  4. Unit- und Runtime-Tests,
  5. Leaderboard-Migration beziehungsweise getrennte Projektion.

Unterschiedliche Score-Versionen dürfen niemals im selben Leaderboard-Kontext erscheinen.