AgentSkillsCN

wow-api-map-navigation

WoW Retail地图、导航、区域POI、出租车、小景、小地图、姓名牌、路标、区域能力、战争迷雾,以及探索API的完整参考。涵盖C_Map(50多项用于地图数据、坐标、地图ID、区域信息的功能)、C_MapExplorationInfo、C_AreaPoiInfo、C_TaxiMap(飞行路径)、C_Vignette、C_SuperTrackManager、C_Navigation(游戏内导航)、C_ZoneAbility、C_FogOfWar、小地图功能、C_NamePlateManager,以及坐标转换。当您需要处理地图、坐标、路标、飞行路径、小地图、姓名牌、小景、探索、区域能力,或游戏内导航时,此功能将为您提供全面支持。

SKILL.md
--- frontmatter
name: wow-api-map-navigation
description: "Complete reference for WoW Retail Map, Navigation, Area POI, Taxi, Vignette, Minimap, Nameplate, Waypoint, Zone Ability, Fog of War, and Exploration APIs. Covers C_Map (50+ functions for map data, coordinates, map IDs, area info), C_MapExplorationInfo, C_AreaPoiInfo, C_TaxiMap (flight paths), C_Vignette, C_SuperTrackManager, C_Navigation (in-game navigation), C_ZoneAbility, C_FogOfWar, Minimap functions, C_NamePlateManager, and coordinate conversion. Use when working with maps, coordinates, waypoints, flight paths, minimap, nameplates, vignettes, exploration, zone abilities, or in-game navigation."

Map & Navigation API (Retail — Patch 12.0.0)

Comprehensive reference for all map, navigation, and location APIs in WoW Retail.

Source: https://warcraft.wiki.gg/wiki/World_of_Warcraft_API Current as of: Patch 12.0.0 (Build 65655) — January 28, 2026 Scope: Retail only.


Scope

  • C_Map — Map data, coordinates, map IDs, areas
  • C_MapExplorationInfo — Fog of war / exploration data
  • C_AreaPoiInfo — Area Points of Interest
  • C_TaxiMap — Flight master/taxi routes
  • C_Vignette — Vignettes (rare mobs, treasures)
  • C_SuperTrackManager — Super tracking (waypoint tracking)
  • C_Navigation — In-game navigation system
  • C_ZoneAbility — Zone-specific abilities
  • C_FogOfWar — Fog of war system
  • Minimap — Minimap functions
  • C_NamePlateManager — Nameplate management

C_Map — Core Map System

Map Info & IDs

FunctionReturnsDescription
C_Map.GetBestMapForUnit(unitToken)uiMapIDBest map for unit's location
C_Map.GetMapInfo(uiMapID)mapInfoMap name, type, parent
C_Map.GetMapInfoAtPosition(uiMapID, x, y)mapInfoMap info at coordinate
C_Map.GetMapChildrenInfo(uiMapID [, mapType [, allDescendants]])childrenInfoChild maps
C_Map.GetMapGroupID(uiMapID)mapGroupIDMap group (floor group)
C_Map.GetMapGroupMembersInfo(mapGroupID)membersInfoMaps in group (floors)
C_Map.GetMapLinksForMap(uiMapID)mapLinksMap links (transitions)
C_Map.GetMapRectOnMap(uiMapID, parentMapID)minX, maxX, minY, maxYMap rect on parent
C_Map.GetPlayerMapPosition(uiMapID, unitToken)positionPlayer position on map
C_Map.GetWorldPosFromMapPos(uiMapID, mapPosition)continentID, worldPositionMap → world coords
C_Map.GetMapPosFromWorldPos(continentID, worldPosition [, overrideUiMapID])uiMapID, mapPositionWorld → map coords
C_Map.GetFallbackWorldMapID()uiMapIDDefault world map
C_Map.GetBountySetMaps(bountySetID)mapIDsMaps for bounty set
C_Map.GetAreaInfo(areaID)areaNameArea name by ID
C_Map.GetMapArtID(uiMapID)mapArtIDArt asset ID
C_Map.GetMapArtBackgroundAtlas(uiMapID)atlasNameBackground atlas
C_Map.GetMapArtHelpTextPosition(uiMapID)positionHelp text position
C_Map.GetMapArtLayerTextures(uiMapID, layerIndex)texturesLayer texture files
C_Map.GetNumMapArtLayers(uiMapID)numLayersNumber of art layers
C_Map.GetMapArtLayers(uiMapID)layersAll art layer info
C_Map.GetMapDisplayInfo(uiMapID)hideIconsDisplay flags
C_Map.GetMapHighlightInfoAtPosition(uiMapID, x, y)fileDataID, atlasID, texturePercentageX, texturePercentageY, textureX, textureY, scrollChildX, scrollChildYHighlight at position
C_Map.HasArt(uiMapID)hasArtHas map art?
C_Map.IsMapValidForNavBarDropdown(uiMapID)isValidValid for navbar?
C_Map.MapHasArt(uiMapID)hasArtAlias for HasArt
C_Map.RequestPreloadMap(uiMapID)Preload map data
C_Map.SetUserWaypoint(uiMapID, position)Set user waypoint
C_Map.GetUserWaypoint()pointGet user waypoint
C_Map.HasUserWaypoint()hasWaypointHas user waypoint?
C_Map.ClearUserWaypoint()Clear user waypoint
C_Map.CanSetUserWaypointOnMap(uiMapID)canSetCan set waypoint?
C_Map.GetUserWaypointHyperlink()hyperlinkWaypoint hyperlink
C_Map.GetUserWaypointFromHyperlink(hyperlink)pointParse waypoint link
C_Map.GetUserWaypointPositionForMap(uiMapID)mapPositionWaypoint on map

Map Types (Enum.UIMapType)

ValueTypeDescription
0CosmicAll continents
1WorldShows continents
2ContinentSingle continent
3ZoneZone (e.g., Durotar)
4DungeonDungeon floors
5MicroSubzone
6OrphanStandalone map

C_MapExplorationInfo — Exploration

FunctionReturnsDescription
C_MapExplorationInfo.GetExploredMapTextures(uiMapID)texturesExplored area textures
C_MapExplorationInfo.GetExploredAreaIDsAtPosition(uiMapID, position)areaIDsExplored area IDs at pos

C_AreaPoiInfo — Area Points of Interest

FunctionReturnsDescription
C_AreaPoiInfo.GetAreaPOIForMap(uiMapID)poiIDsAll POIs on map
C_AreaPoiInfo.GetAreaPOIInfo(uiMapID, poiID)poiInfoPOI details
C_AreaPoiInfo.GetAreaPOISecondsLeft(poiID)secondsLeftTime-limited POI timer
C_AreaPoiInfo.GetAreaPOITimeOfDay()hours, minutesPOI time context
C_AreaPoiInfo.IsAreaPOITimed(poiID)isTimedIs POI time-limited?

POI Info Fields

  • areaPoiID — Unique POI ID
  • position{x, y} on map
  • name — Display name
  • description — Description text
  • textureIndex — POI icon index
  • atlasName — Atlas for icon
  • uiTextureKit — Texture kit
  • tooltipWidgetSet — Tooltip widget set
  • iconWidgetSet — Icon widget set
  • availableInPlayerChoice — Available in player choice

C_TaxiMap — Flight Paths / Taxi

FunctionReturnsDescription
C_TaxiMap.GetAllTaxiNodes(uiMapID)nodesAll flight nodes on map
C_TaxiMap.GetTaxiNodesForMap(uiMapID)nodesAvailable taxi nodes
C_TaxiMap.ShouldMapShowTaxiNodes(uiMapID)shouldShowShow taxi nodes on map?
NumTaxiNodes()numNodesAvailable nodes at taxi NPC
TaxiNodeName(index)nameNode name
TaxiNodePosition(index)x, yNode position
TaxiNodeGetType(index)nodeTypeREACHABLE, UNREACHABLE, CURRENT
TaxiGetDestX(index, i)xRoute destination X
TaxiGetDestY(index, i)yRoute destination Y
TaxiGetSrcX(index, i)xRoute source X
TaxiGetSrcY(index, i)yRoute source Y
GetNumRoutes(index)numRoutesRoute segments count
TakeTaxiNode(index)Take flight to node
CloseTaxiMap()Close taxi map
TaxiRequestEarlyLanding()Request early landing
UnitOnTaxi(unit)onTaxiIs unit on a taxi?

C_Vignette — Vignettes (Rare Mobs, Treasures, Events)

FunctionReturnsDescription
C_VignetteInfo.GetVignetteInfo(vignetteGUID)infoVignette details
C_VignetteInfo.GetVignettes()vignetteGUIDsAll active vignettes
C_VignetteInfo.GetVignettePosition(vignetteGUID, uiMapID)positionVignette position on map
C_VignetteInfo.FindBestUniqueVignette(vignetteID)bestGUIDBest unique vignette

Vignette Info Fields

  • vignetteGUID — Unique identifier
  • objectGUID — Object GUID (unit, object, etc.)
  • name — Display name
  • atlasName — Icon atlas
  • type — Vignette type (Normal, PvPBounty, Torghast, etc.)
  • isDead — Is the linked unit dead?
  • onWorldMap — Shows on world map?
  • onMinimap — Shows on minimap?
  • hasTooltip — Has mouseover tooltip?
  • inFogOfWar — In unexplored area?
  • widgetSetID — UI widget set

C_SuperTrackManager — Waypoint Super Tracking

FunctionReturnsDescription
C_SuperTrack.GetSuperTrackedContent()trackableType, trackableIDCurrently tracked content
C_SuperTrack.GetSuperTrackedMapPin()type, typeIDTracked map pin
C_SuperTrack.GetSuperTrackedQuestID()questIDSuper tracked quest
C_SuperTrack.SetSuperTrackedContent(trackableType, trackableID)Set tracked content
C_SuperTrack.SetSuperTrackedMapPin(type, typeID)Set tracked map pin
C_SuperTrack.SetSuperTrackedQuestID(questID)Track quest
C_SuperTrack.SetSuperTrackedUserWaypoint(superTracked)Track user waypoint
C_SuperTrack.IsSuperTrackingAnything()isTrackingIs tracking anything?
C_SuperTrack.IsSuperTrackingCorpse()isTrackingCorpseTracking corpse?
C_SuperTrack.IsSuperTrackingQuest()isTrackingTracking a quest?
C_SuperTrack.IsSuperTrackingUserWaypoint()isTrackingTracking user waypoint?
C_SuperTrack.ClearAllSuperTracked()Clear all tracking

C_Navigation — In-Game Navigation

FunctionReturnsDescription
C_Navigation.GetDistance()distanceDistance to tracked target
C_Navigation.GetFrame()frameNavigation frame
C_Navigation.HasValidScreenPosition()hasValidPosIs nav arrow valid?
C_Navigation.WasClampedToScreen()wasClampedWas arrow clamped?

C_ZoneAbility

FunctionReturnsDescription
C_ZoneAbility.GetActiveAbilities()abilitiesActive zone abilities

C_FogOfWar

FunctionReturnsDescription
C_FogOfWar.GetFogOfWarForMap(uiMapID)fogOfWarIDFog of war ID for map
C_FogOfWar.GetFogOfWarInfo(fogOfWarID)infoFog of war info

Minimap Functions

FunctionReturnsDescription
GetMinimapZoneText()zoneTextMinimap zone text
GetZoneText()zoneTextCurrent zone name
GetSubZoneText()subZoneTextCurrent subzone
GetRealZoneText()zoneTextReal zone text
GetMinimapShape()shapeROUND or SQUARE
Minimap:SetZoom(zoomLevel)Set minimap zoom
Minimap:GetZoom()zoomLevelGet minimap zoom
Minimap:GetZoomLevels()numLevelsMax zoom levels
ToggleMinimap()Toggle minimap visibility

C_NamePlateManager / Nameplates

FunctionReturnsDescription
C_NamePlate.GetNamePlates([includeForbidden])nameplatesAll activated nameplates
C_NamePlate.GetNamePlateForUnit(unitToken [, includeForbidden])nameplateNameplate for unit
C_NamePlate.GetNumNamePlates()numActiveActive nameplates count
C_NamePlate.SetNamePlateFriendlySize(width, height)Set friendly plate size
C_NamePlate.SetNamePlateEnemySize(width, height)Set enemy plate size
C_NamePlate.SetNamePlateSelfSize(width, height)Set personal plate size
C_NamePlate.SetNamePlateFriendlyClickThrough(clickThrough)Click through friendly
C_NamePlate.SetNamePlateEnemyClickThrough(clickThrough)Click through enemy
C_NamePlate.SetNamePlateSelfClickThrough(clickThrough)Click through personal

12.0.0 Note: Nameplates in instances are tightly restricted. Enemy nameplate unit tokens may expose only secret values for health, casting, etc.


Coordinate Conversion

Map Position Object

C_Map.GetPlayerMapPosition() returns a Vector2DMixin with:

lua
local pos = C_Map.GetPlayerMapPosition(mapID, "player")
if pos then
    local x, y = pos:GetXY()
    -- x, y are 0-1 normalized coordinates on the map
    print(string.format("%.2f, %.2f", x * 100, y * 100))
end

Convert Between Maps

lua
-- Get player position on the current best map
local mapID = C_Map.GetBestMapForUnit("player")
if mapID then
    local pos = C_Map.GetPlayerMapPosition(mapID, "player")
    if pos then
        -- Convert to world coordinates
        local continentID, worldPos = C_Map.GetWorldPosFromMapPos(mapID, pos)
        -- Convert back to a different map
        local otherMapID, otherPos = C_Map.GetMapPosFromWorldPos(continentID, worldPos)
    end
end

User Waypoint

lua
-- Set a waypoint on the map
local mapID = C_Map.GetBestMapForUnit("player")
if C_Map.CanSetUserWaypointOnMap(mapID) then
    local point = UiMapPoint.CreateFromCoordinates(mapID, 0.5, 0.5)
    C_Map.SetUserWaypoint(point)
    C_SuperTrack.SetSuperTrackedUserWaypoint(true)
end

Key Events

EventPayloadDescription
ZONE_CHANGEDSubzone changed
ZONE_CHANGED_INDOORSIndoor zone changed
ZONE_CHANGED_NEW_AREAMajor zone change
NEW_WMO_CHUNKNew world map object
MAP_EXPLORATION_UPDATEDExploration updated
WORLD_MAP_UPDATEWorld map data changed
USER_WAYPOINT_UPDATEDUser waypoint changed
SUPER_TRACKING_CHANGEDSuper tracking changed
VIGNETTE_MINIMAP_UPDATEDvignetteGUID, onMinimapVignette on minimap changed
VIGNETTES_UPDATEDVignettes updated
AREA_POIS_UPDATEDArea POIs changed
NAME_PLATE_CREATEDnamePlateFrameNameplate created
NAME_PLATE_UNIT_ADDEDunitTokenUnit added to nameplate
NAME_PLATE_UNIT_REMOVEDunitTokenUnit removed from nameplate
PLAYER_STARTED_MOVINGPlayer started moving
PLAYER_STOPPED_MOVINGPlayer stopped moving
TAXIMAP_OPENEDsystemIDTaxi map opened
TAXIMAP_CLOSEDTaxi map closed
NAVIGATION_FRAME_CREATEDNav frame created
NAVIGATION_FRAME_DESTROYEDNav frame destroyed

Gotchas & Restrictions

  1. GetPlayerMapPosition returns nil — Returns nil for units in instances where position tracking is restricted or for invalid map IDs.
  2. Map coordinates are 0-1 normalized — Not world coordinates. Use GetWorldPosFromMapPos() to convert.
  3. uiMapID vs areaID — These are different ID systems. C_Map.GetAreaInfo() takes areaID, not uiMapID.
  4. Nameplate secrets in 12.0.0 — In instances, enemy nameplate unit data (health, casting, name) may be secret values.
  5. TakeTaxiNode hardware event — Requires a hardware event to execute (must be called from a click handler).
  6. Vignette GUIDs are transient — Vignette GUIDs change when you zone or reload. Don't persist them.
  7. Map group = floors — Dungeon maps with multiple floors use map groups. Each floor is a separate uiMapID in the group.
  8. Waypoint limit — Only one user waypoint can exist at a time. Setting a new one replaces the old.