From 854d02f509488b6cc0625bc68b4aa51e7491ecad Mon Sep 17 00:00:00 2001 From: Aaron Kimbrell Date: Sat, 26 Sep 2026 08:43:13 -0500 Subject: [PATCH] docs: what live servers sent around world transfers Co-Authored-By: Claude Opus 5.5 --- docs/SeamlessTransfer.md | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/docs/SeamlessTransfer.md b/docs/SeamlessTransfer.md index 0e098ced2..343189035 100644 --- a/docs/SeamlessTransfer.md +++ b/docs/SeamlessTransfer.md @@ -100,14 +100,28 @@ Friends, the team and guild live on the chat server, which the world forwards to itself; the new world sends them again. Anything tied to objects is rebuilt: the pet, missions shown in the UI, buffs, and possession. -### Packet captures +### What live servers sent (packet captures) -* `found.zip` in lcdr-utils holds 9,730 files, all `[24]` (replica constructions). It contains no world-connect or - transfer packets. The full live capture folder those were extracted from was not accessible to this investigation. -* lu_packets' test packet `src/world/client/tests/TransferToWorld.bin` is a live transfer: ip `"171.20.35.42"` (the rest - of the 33 bytes is uninitialised stack), port 2005, flag 0. Its `LoadStaticZone` sample (map 1450, clone 376426) shows - that live sent `LOAD_STATIC_ZONE` after transfers. lu_packets' notes also describe the "no `LoadStaticZone`" takeover - architecture as theoretical. +These are live captures of 242 world connections from several players (the lcdr capture archive). They were read +locally, and none of it is in this repository. They agree with the client: + +* **`TRANSFER_TO_WORLD`**: 168 captured. Every one is 44 bytes (8-byte header, `char[33]` ip, `u16` port, `u8` + flag). All 168 have the Mythran shift flag at 0, and none were failures (empty ip). Ports were 2001-2009, one world + server each. No maintenance transfer (flag 1) and no `LocalizedAnnouncementServerToSingleClient` (1580) is in the + captures. +* **What followed a transfer on the old connection**: nothing in 89 of them. The rest show replica destructions (`0x25`, + about 2,500) and disconnection notifications (`0x13`). Live took its objects away from the leaving client, but only + after the transfer, when the client had already left. The experimental seamless mode sends them before it. +* **Every new world connection** started the same way: handshake, `MSG_WORLD_CLIENT_VALIDATION`, then at once + `LOAD_STATIC_ZONE`. After that came the client's `LEVEL_LOAD_COMPLETE`, `CREATE_CHARACTER`, `SERVER_STATES` and the + replica constructions. Some clients sent a few game messages in between. + * A character list request appears in only 6 connections, the ones at character select. So after a transfer the + client did not ask for its characters, as `WorldValidation` predicts. +* **Transfers within the same map**: 4 transfers went to another instance of the same map, all property → property + (map 1150, different clones). Live still sent `LOAD_STATIC_ZONE`, a full reload. No live transfer kept the scene. + +lu_packets' test packet `src/world/client/tests/TransferToWorld.bin` shows the same shape (ip `"171.20.35.42"` with +the rest of the 33 bytes uninitialised, port 2005, flag 0). lcdr-utils' `found.zip` has only replica constructions. ## What DarkflameServer does