docs: following a player across worlds

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Aaron Kimbrell
2026-09-30 03:06:20 -05:00
parent 826ba058ff
commit 5265da7b2e
3 changed files with 27 additions and 2 deletions

View File

@@ -47,7 +47,8 @@ A web dashboard for running and moderating a server, started and supervised by m
* **Game text from the client:** zone, item and other game names and labels come from the client's locale, in the
viewer's language (picker in the user menu, or the browser's language), never written into the pages.
* **Packet capture and replay:** record whole packets for an account, a character or everything; play them back with
movement in World 3D; replay bundles against a sandbox stack with a headless client. See
movement in World 3D, which follows a player across worlds (live too) with the world changes marked on the
timeline; replay bundles against a sandbox stack with a headless client. See
[docs/CaptureReplay.md](docs/CaptureReplay.md).
* **Settings:** every setting the servers read, grouped by purpose with typed inputs, conditions, fuzzy search,
history, and hot reload; values can be set on the page or kept in the `.ini` files.

View File

@@ -5,6 +5,17 @@ back on the dashboard; and replay it against a throwaway server to see how the s
takes the 2014 live captures, which makes them a conformance test for the server. The dashboard side is described in
[Dashboard.md](Dashboard.md#packet-captures); this document is how it works and the rules it follows.
## Playback across worlds
An account or character capture puts every server on one timeline, so one character's packets move from one world
server to the next when they transfer. `CaptureTools::Worlds` lists each character's world visits in time order: one
entry each time the packets their client sends (never the server's, since the old world can still send a few after
the client reached the new one) carry another zone or instance in the record header; zone 0 is character select.
The dashboard serves them with the zone's name from the client's locale (`/api/inspector/sessions/:id/worlds`, and
`worlds` in `/positions`, which takes `?zone=all` for every zone's movement). The capture page marks each change on
its slider; World 3D switches its scene to the followed character's world at that time (`world3d-core.js`
`captureSwitch`, `worldMarkers`).
Captures, bundles and fixtures are player data. None of them is ever committed: `captures/`, `*.bundle` and
`tests/fixtures-local/` are in `.gitignore`.
@@ -210,4 +221,7 @@ decoder registry knows and checks it writes back to the same bytes; without fixt
captured character is picked.
- Arm everything on a busy test server for a minute: no stutter; the capture's size grows about once a second.
- Play a capture with movement back and open World 3D: the player moves with the playhead.
- Capture a character that changes worlds (a rocket or a portal): the capture page's slider has a mark at each change
named after the new zone; in World 3D, following the character switches the scene at the mark and the camera stays
on them, forward and when seeking back.
- Export a bundle, replay it with `CaptureTool replay`, and open a kept sandbox's logs.

View File

@@ -969,6 +969,14 @@ objects and its sky, with everyone online moving on it live. Pick the zone and,
Click a player to see who it is, double-click (or **Follow**) to keep the camera on them; click an object for its name,
LOT and the scene it belongs to. Needs `client_location`.
Following works across worlds. Live, when the position feed reports the followed player only in another world (another
zone, or another instance when one instance is picked), the view loads that world's scene, keeps the camera on them
and says "<name> moved to <zone> #<instance>"; while the old world still reports them, or before the new one does, it
waits. With **All instances** picked it stays on all instances. In a packet capture's replay the followed character
is followed the same way at the moment their client's packets move to another world server; a capture of one
character follows that character from the start. The replay slider marks each world change with the zone's name
(click a mark to go there); zone names come from the client's locale.
The view fills the window (the page doesn't scroll; the wheel only zooms). View settings are in the **Layers** tab
(on phones, the **Panel** button opens it from the bottom) and are remembered per account.
@@ -1817,7 +1825,9 @@ limits and the replay are in [CaptureReplay.md](CaptureReplay.md).
to the playhead. Filter by name or server; click a packet for its decoded fields (from the server's own packet
structs) and its bytes. Game messages show their names; their fields are decoded by the game message inspector.
- **World 3D** opens the captured movement in World 3D's replay (needs `players_history`); while the capture page
plays, its playhead drives World 3D.
plays, its playhead drives World 3D, which switches to the world the followed character is on (see World 3D).
- The slider marks each time a captured character moved to another world server, with the zone's name (and the
character's, when there are several); click a mark to go there.
- **Export bundle** downloads a portable bundle for the capture tool's replay; **Export anonymised** also replaces
character names and chat, for a local test fixture.