Геодата необходима для проецирования координат точки в реальном мира в координаты текстуры интерфейсной карты.
Если геодата получена, то таблица с полями:
x, y: number (int) - мировые координаты точки левого нижнего угла карты width, height: number (int) - размер зоны (в мировых единицах), охватываемой картой.
Пример проецирования:
local geodata = cartographer.GetPlayerGeodata( unitId, currentZonesMapId ) if geodata then local pos = object.GetPos( unitId ) if pos then local pixelsPerMeterX = ( MAP_TEXTURE_X / geodata.width ) local pixelsPerMeterY = ( MAP_TEXTURE_Y / geodata.height ) local mapCenterX = geodata.x + ( geodata.width / 2 ) local mapCenterY = geodata.y + ( geodata.height / 2 ) texturePosX = math.ceil( ( pos.posX - mapCenterX ) * pixelsPerMeterX ) texturePosY = math.ceil( ( mapCenterY - pos.posY ) * pixelsPerMeterY ) end end
Возвращается различными методами, если точка находится в зоне, принадлежащей интерфейсной карте зон zonesMapId. Если она не находится в этих зонах, то геодата не может быть получена и возвращается nil.
Кроме того nil возвращается для тех интерфейсных карт зон, у которых флаг isShowPositions = false. Это могут быть, например, общая карта мира, или чистилище. Также геодата не возвращается для карт, указанных в ресурсах, как карты неизвестного места.
Используется информация и о зоне самой точки и о зоне, в которой эта точка должна быть отображена. Это сделано, так как:
геодата может быть разной для разных точек на одной интерфейсной карте, если на карте есть инсеты, то есть некоторые участки карты смещены для лучшего визуального представления (например, три острова Новой Земли расположены на карте не так, как в пространстве);
геодата может возвращаться для одной и той же точки, но при показе её на разных картах, из-за чего геодата для отображения меняется от карты к карте (например, некоторые задания из Новограда видны также на общей карте Светлолесья).
Работает только для главного игрока, членов его группы и рейда, а так же для игроков, задетекченных детекторами, если такие есть. Также возвращается для целевых и финишной точки заданий.