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
- In
LocalCombatReplayRecordereine fachlicheRecord...-Methode ergänzen oderRecord(...)am tatsächlichen Ergebnisereignis aufrufen. - Simulationstick verwenden, nicht Renderzeit oder Wall-Clock.
- Stabile Entity-/Room-/Shot-IDs und deterministische Seeds mitschreiben.
- Das Ereignis nicht zur Platzersparnis verwerfen.
ReplayLimitssind 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.