A result belongs to a battle, not a window
The result service creates reusable information and a statistics controller from a result payload, stores the controller under arenaUniqueID, then posts the result notification. The battle identifier is the useful identity for accounting; opening a result window is a presentation action.
The service's onResultPosted supplies reusable information, the statistics controller and the result-window value. Treat these as a structured notification rather than assuming every callback means another completed battle.
Additional XP can update the same battle
applyAdditionalBonus submits an additional-XP request and, after success, updates the statistics controller for the same arena. Its update path can replace the stored controller without representing a new battle.
Account for the latest known record per battle. If a consumer keeps totals, replace the earlier contribution or apply the verified difference. Appending every refresh as another battle duplicates both counts and rewards.
Playback time can move backward
The replay controller's time-warp path compares the requested time with the current replay mark and emits a time-warp-start event carrying whether the operation is a rewind. Replay time is therefore not a monotonic wall clock.
A local observer that retained a later timestamp, accumulated counter or live entity reference must reconsider it after a seek. Rebuilding a presentation at an earlier point is not evidence that the corresponding live gameplay event happened again.
Recorded information has a scope
The client replay path records and reconstructs selected data. Its existence does not make a replay a complete server event log. Likewise, a result summary does not establish the exact sequence of shots, hits or health changes that produced its totals.
Game files and evidence
These links follow the public repository's default branch. Search each file for the symbols below. They establish client-side calculations and state handling; they do not verify server configuration or live behavior.
| Game file | Symbols to inspect | What it establishes |
|---|---|---|
| gui/battle_results/service.py | postResult; onResultPosted; applyAdditionalBonus; __updateStatsCtrl | Result publication, arena-keyed controller storage and additional-XP updates. |
| BattleReplay.py | timeWarp; __timeWarp; __cleanupAfterTimeWarp | Playback seek direction and reconstruction lifecycle. |
Use this in a mod
Read Battle Results and Accounting for totals and revisions, and Results & Replays for result delivery and replay lifecycle integration.