Struct CharacterWaypointData
One page of a character's discovered waypoints in one scene: a 64-bit mask where bit N is
waypoint page * 64 + N.
public struct CharacterWaypointData
- Inherited Members
Remarks
Why a mask. A waypoint is a bit — discovered or not — and a scene has tens of them, all read together on login and written together on save. A row per waypoint would spend roughly forty bytes on each bit and have the load path fold them back into the set the game actually wants. The mask stores the set as it is used, exactly as CharacterDialogueChoiceData does for dialogue choices; pages keep it unbounded rather than capped at 64 per scene.
Merge, not replace. Bits are only ever set, so the write is
mask | EXCLUDED.mask: idempotent under retries, and two scene servers writing during
a transfer converge on the union rather than one discarding the other's discoveries. That
is also why there is no version column — there is no stale write to reject.
When scenes change. The bit index is the waypoint's authored index, which is
stable by contract (see Waypoint.WaypointIndex). A renamed scene orphans its rows;
they cost eight bytes each and are never read. A removed waypoint leaves a bit nothing
consults.
Constructors
CharacterWaypointData(long, string, short, ulong)
public CharacterWaypointData(long characterID, string sceneName, short page, ulong mask)
Parameters
Fields
CharacterID
Character that discovered the waypoints.
public readonly long CharacterID
Field Value
Mask
The discovered bits of that page.
public readonly ulong Mask
Field Value
Page
Which 64-waypoint page of the scene this row holds.
public readonly short Page
Field Value
SceneName
The scene the waypoints stand in.
public readonly string SceneName