Class MapMarkerFilter
Decides which markers the local player may see, and at what fidelity.
public sealed class MapMarkerFilter
- Inheritance
-
MapMarkerFilter
- Inherited Members
Remarks
This is the map system's answer to "the minimap is a radar hack that ships with the game". The observer system upstream already decides which entities exist on this client at all; this decides which of those the map is willing to draw, and — for the ones it draws grudgingly — how stale and how coarse the position it draws them at is.
Three tiers. The player's own character, their party and their guild are drawn exactly and continuously; the group already shares positions through the party frames, so the map is not the leak. World fixtures are drawn exactly and continuously because their positions are public and unchanging. Everyone else — hostile and neutral players — is drawn only inside DetectionRadius, refreshed at ThrottleInterval, snapped to a PositionQuantum grid, and never labelled.
Why that is worth doing at all, given that a modified client can skip it: the throttled position is the only position this code ever produces. A client that deletes the filter still has to read the entity's transform to beat it — at which point it is a memory-reading cheat with or without a minimap, and the map has not made it easier. What the filter does buy is that the detection radius is genuinely smaller than the observer range that put the entity here, so the honest client's map is strictly less informative than the network stream, and every value it draws has been through a rule.
Properties
DetectionRadius
How close a hostile or neutral player must be before their marker appears, in metres.
public float DetectionRadius { get; set; }
Property Value
Remarks
Deliberately below ObserverStreamingPolicy.MinimumRange, which is the floor the
observer system will shrink a character's streaming radius to under load. Keeping this
under that floor is what makes the guarantee hold in the worst case as well as the
usual one: there is no server condition under which the map would be showing more than
the stream already contains.
PositionQuantum
Grid, in metres, that a throttled marker's position is snapped to.
public float PositionQuantum { get; set; }
Property Value
Remarks
Four metres — one fog cell. Enough to say "something hostile is over there", not enough to aim with. Combined with the one-second refresh, a throttled marker tells a player roughly where an enemy was, which is what a map is for, rather than exactly where they are, which is what an aim assist is for.
ThrottleInterval
How often a throttled marker's position is re-sampled, in seconds.
public float ThrottleInterval { get; set; }
Property Value
Methods
Collect(List<MapMarkerSnapshot>, IPlayerCharacter, bool, FogOfWarMap)
Collects everything the local player may see.
public void Collect(List<MapMarkerSnapshot> results, IPlayerCharacter local, bool forWorldMap, FogOfWarMap fog)
Parameters
resultsList<MapMarkerSnapshot>List to fill. Cleared first.
localIPlayerCharacterThe local player character. May be null.
forWorldMapboolTrue for the world map, false for the minimap.
fogFogOfWarMapThe explored map, used by the discovery rule. May be null.
Reset()
Forgets every throttled position.
public void Reset()
Remarks
Called on character change and on quit to login. Carrying entries across would let a new character's map open showing where the previous character's neighbours were.