Skip to content

How-to: Replay-Ereignis ergänzen

Status: Lokale Aufnahme, versionierte Checkpoints, Chunk-/Streaming-Upload, Nakama-Validierung und Replay Viewer sind aktiv.

1. Vertrag festlegen

Verwende eine stabile lowercase ID mit Unterstrichen. Das gemeinsame Eventmodell liegt in src/HolodeckArena.Shared/Runs/ReplayEvent.cs; Payloadfelder sind typisiert (SubjectId, TargetId, Value, Flags, Position, Policy-/Loadout-Metadaten). Spezielle deterministische Daten werden über klar benannte Encoder wie ReplayWeaponFireEncoding oder ReplayBossHazardEncoding abgebildet.

Falls das bestehende Modell nicht reicht, ändere Client und Nakama gemeinsam: C# unter Shared/Runs, TypeScript in src/server/nakama/modules/src/models/onlineRunModels.ts und Chunk-Verträge in chunkedReplayModels.ts. Schemaänderungen erhöhen ReplayPayload.PlaybackSchemaVersion; alte Replays bleiben über ReplayPlaybackCapability gegated.

2. Ereignis aufnehmen

  1. In LocalCombatReplayRecorder eine fachliche Record...-Methode ergänzen oder Record(...) am tatsächlichen Ergebnisereignis aufrufen.
  2. Simulationstick verwenden, nicht Renderzeit oder Wall-Clock.
  3. Stabile Entity-/Room-/Shot-IDs und deterministische Seeds mitschreiben.
  4. Das Ereignis nicht zur Platzersparnis verwerfen. ReplayLimits sind Hard-Limits; nur Checkpoint-Details dürfen am Soft-Budget reduziert werden.

Für serverautoritativen Dungeon-Combat zusätzlich DungeonCombatReplayEvent und die Übersetzung in DungeonCombatNetworkSync prüfen. Niemals Client-Schaden, Kill-, Score- oder Validierungswerte ungeprüft übernehmen.

3. Playback und Backend ergänzen

Wenn das Ereignis sichtbar ist, den passenden Presenter unter Features/Replay erweitern. Unbekannte Events müssen kompatibel ignoriert oder durch das Capability-Gate abgelehnt werden. Backend-Validierung und Reassembly liegen in services/onlineRunValidation.ts, services/chunkedReplayReader.ts und rpcs/chunkedReplayRpcs.ts; neue TypeScript-Dateien zusätzlich in tsconfig.json aufnehmen.

Tests

  • C#: Serialization/Hash, Reihenfolge, Limits, Recorder und Playback-Presenter.
  • Nakama: gültiges/ungültiges Event, Chunk-Reassembly, Größenlimit und Schema-Mismatch.
  • Manuell: lokalen Run aufzeichnen, Upload fortsetzen, über Leaderboard ansehen und fehlende/alte Replays prüfen.

Verwandt: Replay-System, Chunked Upload, Nakama RPC.