diff --git a/README.md b/README.md index 08a2755ef..7bd850801 100644 --- a/README.md +++ b/README.md @@ -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. diff --git a/docs/CaptureReplay.md b/docs/CaptureReplay.md index 01cb6e030..3310db184 100644 --- a/docs/CaptureReplay.md +++ b/docs/CaptureReplay.md @@ -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. diff --git a/docs/Dashboard.md b/docs/Dashboard.md index 2fc88327e..ce2934753 100644 --- a/docs/Dashboard.md +++ b/docs/Dashboard.md @@ -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 " moved to #"; 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.