From 814fc1b0672b322d6bbf5218bed9690fe4532f18 Mon Sep 17 00:00:00 2001 From: Hendrik Leppkes Date: Fri, 21 Aug 2015 15:40:52 +0200 Subject: [PATCH] Replace (unmaintained) LibMapData-1.0 with HereBeDragons-1.0 --- .pkgmeta | 1 + TomTom.lua | 16 +- TomTom.toc | 2 +- libs/HereBeDragons-1.0/HereBeDragons-1.0.lua | 646 +++++ libs/HereBeDragons-1.0/HereBeDragons-Pins-1.0.lua | 591 ++++ libs/LibMapData-1.0/library.lua | 3196 --------------------- 6 files changed, 1247 insertions(+), 3205 deletions(-) create mode 100644 libs/HereBeDragons-1.0/HereBeDragons-1.0.lua create mode 100644 libs/HereBeDragons-1.0/HereBeDragons-Pins-1.0.lua delete mode 100755 libs/LibMapData-1.0/library.lua diff --git a/.pkgmeta b/.pkgmeta index e9c751a..04a9d07 100755 --- a/.pkgmeta +++ b/.pkgmeta @@ -5,5 +5,6 @@ tools-used: - callbackhandler - libstub - astrolabe + - herebedragons enable-nolib-creation: no diff --git a/TomTom.lua b/TomTom.lua index 58c4b2c..b891899 100755 --- a/TomTom.lua +++ b/TomTom.lua @@ -7,7 +7,7 @@ -- Simple localization table for messages local L = TomTomLocals local ldb = LibStub("LibDataBroker-1.1") -local lmd = LibStub("LibMapData-1.0") +local hbd = LibStub("HereBeDragons-1.0") local addonName, addon = ... local TomTom = addon @@ -679,7 +679,7 @@ function TomTom:CHAT_MSG_ADDON(event, prefix, data, channel, sender) x = tonumber(x) y = tonumber(y) - local zoneName = lmd:MapLocalize(m) + local zoneName = hbd:GetLocalizedMap(m) self:AddMFWaypoint(m, f, x, y, {title = title}) local msg = string.format(L["|cffffff78TomTom|r: Added '%s' (sent from %s) to zone %s"], title, sender, zoneName) ChatFrame1:AddMessage(msg) @@ -712,7 +712,7 @@ local function _both_tooltip_show(event, tooltip, uid, dist) tooltip:AddLine(L["Unknown distance"]) end local m,f,x,y = unpack(data) - local zoneName = lmd:MapLocalize(m) + local zoneName = hbd:GetLocalizedMap(m) tooltip:AddLine(string.format(L["%s (%.2f, %.2f)"], zoneName, x*100, y*100), 0.7, 0.7, 0.7) tooltip:Show() @@ -904,7 +904,7 @@ function TomTom:AddMFWaypoint(m, f, x, y, opts) opts.callbacks = TomTom:DefaultCallbacks(opts) end - local zoneName = lmd:MapLocalize(m) + local zoneName = hbd:GetLocalizedMap(m) -- Get the default map floor, if necessary if not f then @@ -1076,7 +1076,7 @@ do function Block_OnClick(self, button, down) local m,f,x,y = TomTom:GetCurrentPlayerPosition() - local zoneName = lmd:MapLocalize(m,f) + local zoneName = hbd:GetLocalizedMap(m) local desc = string.format("%s: %.2f, %.2f", zoneName, x*100, y*100) TomTom:AddMFWaypoint(m, f, x, y, { title = desc, @@ -1087,7 +1087,7 @@ end function TomTom:DebugListWaypoints() local m,f,x,y = self:GetCurrentPlayerPosition() local ctxt = RoundCoords(x, y, 2) - local czone = lmd:MapLocalize(m) + local czone = hbd:GetLocalizedMap(m) self:Printf(L["You are at (%s) in '%s' (map: %d, floor: %d)"], ctxt, czone or "UNKNOWN", m, f) if waypoints[m] then for key, wp in pairs(waypoints[m]) do @@ -1113,7 +1113,7 @@ end function TomTom:GetClosestWaypoint() local m,f,x,y = self:GetCurrentPlayerPosition() - local c = lmd:GetContinentFromMap(m) + local c = hbd:GetCZFromMapID(m) local closest_waypoint = nil local closest_dist = nil @@ -1132,7 +1132,7 @@ function TomTom:GetClosestWaypoint() else -- Search all waypoints on this continent for map, waypoints in pairs(waypoints) do - if c == lmd:GetContinentFromMap(map) then + if c == hbd:GetCZFromMapID(m) then for key, waypoint in pairs(waypoints) do local dist, x, y = TomTom:GetDistanceToWaypoint(waypoint) if (dist and closest_dist == nil) or (dist and dist < closest_dist) then diff --git a/TomTom.toc b/TomTom.toc index 76ed7bf..0ffc909 100755 --- a/TomTom.toc +++ b/TomTom.toc @@ -22,7 +22,7 @@ libs\AceEvent-3.0\AceEvent-3.0.xml libs\AceDB-3.0\AceDB-3.0.xml libs\AceDBOptions-3.0\AceDBOptions-3.0.xml libs\LibDataBroker-1.1\LibDataBroker-1.1.lua -libs\LibMapData-1.0\library.lua +libs\HereBeDragons-1.0\HereBeDragons-1.0.lua AddonCore.lua diff --git a/libs/HereBeDragons-1.0/HereBeDragons-1.0.lua b/libs/HereBeDragons-1.0/HereBeDragons-1.0.lua new file mode 100644 index 0000000..b082756 --- /dev/null +++ b/libs/HereBeDragons-1.0/HereBeDragons-1.0.lua @@ -0,0 +1,646 @@ +-- HereBeDragons is a data API for the World of Warcraft mapping system + +local MAJOR, MINOR = "HereBeDragons-1.0", 11 +assert(LibStub, MAJOR .. " requires LibStub") + +local HereBeDragons, oldversion = LibStub:NewLibrary(MAJOR, MINOR) +if not HereBeDragons then return end + +local CBH = LibStub("CallbackHandler-1.0") + +HereBeDragons.eventFrame = HereBeDragons.eventFrame or CreateFrame("Frame") + +HereBeDragons.mapData = HereBeDragons.mapData or {} +HereBeDragons.continentZoneMap = HereBeDragons.continentZoneMap or { [-1] = { [0] = WORLDMAP_COSMIC_ID }, [0] = { [0] = WORLDMAP_AZEROTH_ID }} +HereBeDragons.mapToID = HereBeDragons.mapToID or { Cosmic = WORLDMAP_COSMIC_ID, World = WORLDMAP_AZEROTH_ID } +HereBeDragons.microDungeons = HereBeDragons.microDungeons or {} +HereBeDragons.transforms = HereBeDragons.transforms or {} + +HereBeDragons.callbacks = CBH:New(HereBeDragons, nil, nil, false) + +-- Lua upvalues +local PI2 = math.pi * 2 +local atan2 = math.atan2 +local pairs, ipairs = pairs, ipairs +local type = type + +-- WoW API upvalues +local UnitPosition = UnitPosition + +-- data table upvalues +local mapData = HereBeDragons.mapData -- table { width, height, left, top } +local continentZoneMap = HereBeDragons.continentZoneMap +local mapToID = HereBeDragons.mapToID +local microDungeons = HereBeDragons.microDungeons +local transforms = HereBeDragons.transforms + +local currentPlayerZoneMapID, currentPlayerLevel, currentMapFile, currentMapIsMicroDungeon + +-- Override instance ids for phased content +local instanceIDOverrides = { + -- Draenor + [1152] = 1116, -- Horde Garrison 1 + [1153] = 1116, -- Horde Garrison 2 + [1154] = 1116, -- Horde Garrison 3 + [1158] = 1116, -- Alliance Garrison 1 + [1159] = 1116, -- Alliance Garrison 2 + [1160] = 1116, -- Alliance Garrison 3 + [1464] = 1116, -- Tanaan + [1465] = 1116, -- Tanaan +} + +-- unregister and store all WORLD_MAP_UPDATE registrants, to avoid excess processing when +-- retrieving info from stateful map APIs +local wmuRegistry +local function UnregisterWMU() + wmuRegistry = {GetFramesRegisteredForEvent("WORLD_MAP_UPDATE")} + for _, frame in ipairs(wmuRegistry) do + frame:UnregisterEvent("WORLD_MAP_UPDATE") + end +end + +-- restore WORLD_MAP_UPDATE to all frames in the registry +local function RestoreWMU() + assert(wmuRegistry) + for _, frame in ipairs(wmuRegistry) do + frame:RegisterEvent("WORLD_MAP_UPDATE") + end + wmuRegistry = nil +end + +-- gather map info, but only if this isn't an upgrade (or the upgrade version forces a re-map) +if not oldversion or oldversion < 10 then + -- wipe old data, if required, otherwise the upgrade path isn't triggered + if oldversion then + wipe(mapData) + end + + local MAPS_TO_REMAP = { + -- alliance garrison + [973] = 971, + [974] = 971, + [975] = 971, + [991] = 971, + -- horde garrison + [980] = 976, + [981] = 976, + [982] = 976, + [990] = 976, + } + + -- some zones will remap initially, but have a fixup later + local REMAP_FIXUP_EXEMPT = { + -- main draenor garrison maps + [971] = true, + [976] = true, + } + + local function processTransforms() + wipe(transforms) + for _, tID in ipairs(GetWorldMapTransforms()) do + local terrainMapID, newTerrainMapID, _, _, transformMinY, transformMaxY, transformMinX, transformMaxX, offsetY, offsetX = GetWorldMapTransformInfo(tID) + if offsetY ~= 0 or offsetX ~= 0 then + local transform = { + instanceID = terrainMapID, + newInstanceID = newTerrainMapID, + minY = transformMinY, + maxY = transformMaxY, + minX = transformMinX, + maxX = transformMaxX, + offsetY = offsetY, + offsetX = offsetX + } + table.insert(transforms, transform) + end + end + end + + local function applyMapTransforms(instanceID, left, right, top, bottom) + for _, transformData in ipairs(transforms) do + if transformData.instanceID == instanceID then + if left < transformData.maxX and right > transformData.minX and top < transformData.maxY and bottom > transformData.minY then + instanceID = transformData.newInstanceID + left = left + transformData.offsetX + right = right + transformData.offsetX + top = top + transformData.offsetY + bottom = bottom + transformData.offsetY + break + end + end + end + return instanceID, left, right, top, bottom + end + + -- gather the data of one zone (by mapID) + local function processZone(id) + if not id or mapData[id] then return end + + -- set the map and verify it could be set + local success = SetMapByID(id) + if not success then + return + elseif id ~= GetCurrentMapAreaID() and not REMAP_FIXUP_EXEMPT[id] then + -- this is an alias zone (phasing terrain changes), just skip it and remap it later + if not MAPS_TO_REMAP[id] then + MAPS_TO_REMAP[id] = GetCurrentMapAreaID() + end + return + end + + -- dimensions of the map + local originalInstanceID, _, _, left, right, top, bottom = GetAreaMapInfo(id) + local instanceID = originalInstanceID + if (left and top and right and bottom and (left ~= 0 or top ~= 0 or right ~= 0 or bottom ~= 0)) then + instanceID, left, right, top, bottom = applyMapTransforms(originalInstanceID, left, right, top, bottom) + mapData[id] = { left - right, top - bottom, left, top } + else + mapData[id] = { 0, 0, 0, 0 } + end + + mapData[id].instance = instanceID + mapData[id].name = GetMapNameByID(id) + + local mapFile = GetMapInfo() + if mapFile then + -- remove phased terrain from the map names + mapFile = mapFile:gsub("_terrain%d+$", "") + + if not mapToID[mapFile] then mapToID[mapFile] = id end + mapData[id].mapFile = mapFile + end + + local C, Z = GetCurrentMapContinent(), GetCurrentMapZone() + mapData[id].C = C or -100 + mapData[id].Z = Z or -100 + + if mapData[id].C > 0 and mapData[id].Z >= 0 then + if not microDungeons[instanceID] then + microDungeons[instanceID] = {} + end + + -- store C/Z lookup table + if not continentZoneMap[C] then + continentZoneMap[C] = {} + end + if not continentZoneMap[C][Z] then + continentZoneMap[C][Z] = id + end + end + + local numFloors = GetNumDungeonMapLevels() + if numFloors == 0 and GetCurrentMapDungeonLevel() == 1 then + numFloors = 1 + mapData[id].fakefloor = true + end + + mapData[id].floors = {} + if numFloors > 0 then + for f = 1, numFloors do + SetDungeonMapLevel(f) + local _, right, bottom, left, top = GetCurrentMapDungeonLevel() + if left and top and right and bottom then + instanceID, left, right, top, bottom = applyMapTransforms(originalInstanceID, left, right, top, bottom) + mapData[id].floors[f] = { left - right, top - bottom, left, top } + mapData[id].floors[f].instance = mapData[id].instance + elseif f == 1 and DungeonUsesTerrainMap() then + mapData[id].floors[f] = { mapData[id][1], mapData[id][2], mapData[id][3], mapData[id][4] } + mapData[id].floors[f].instance = mapData[id].instance + end + end + end + end + + local function processMicroDungeons() + for _, dID in ipairs(GetDungeonMaps()) do + local floorIndex, minX, maxX, minY, maxY, terrainMapID, parentWorldMapID, flags = GetDungeonMapInfo(dID) + + -- apply transform + terrainMapID, maxX, minX, maxY, minY = applyMapTransforms(terrainMapID, maxX, minX, maxY, minY) + + -- check if this zone can have microdungeons + if microDungeons[terrainMapID] then + microDungeons[terrainMapID][floorIndex] = { maxX - minX, maxY - minY, maxX, maxY } + microDungeons[terrainMapID][floorIndex].instance = terrainMapID + end + end + end + + local function fixupZones() + -- fake cosmic map + mapData[WORLDMAP_COSMIC_ID] = {0, 0, 0, 0} + mapData[WORLDMAP_COSMIC_ID].instance = -1 + mapData[WORLDMAP_COSMIC_ID].mapFile = "Cosmic" + mapData[WORLDMAP_COSMIC_ID].floors = {} + mapData[WORLDMAP_COSMIC_ID].C = -1 + mapData[WORLDMAP_COSMIC_ID].Z = 0 + mapData[WORLDMAP_COSMIC_ID].name = WORLD_MAP + + -- fake world map + mapData[WORLDMAP_AZEROTH_ID] = {0, 0, 0, 0} + mapData[WORLDMAP_AZEROTH_ID].instance = -1 + mapData[WORLDMAP_AZEROTH_ID].mapFile = "World" + mapData[WORLDMAP_AZEROTH_ID].floors = {} + mapData[WORLDMAP_AZEROTH_ID].C = 0 + mapData[WORLDMAP_AZEROTH_ID].Z = 0 + mapData[WORLDMAP_AZEROTH_ID].name = WORLD_MAP + + -- alliance draenor garrison + if mapData[971] then + mapData[971].Z = 5 + + mapToID["garrisonsmvalliance_tier1"] = 971 + mapToID["garrisonsmvalliance_tier2"] = 971 + mapToID["garrisonsmvalliance_tier3"] = 971 + end + + -- horde draenor garrison + if mapData[976] then + mapData[976].Z = 3 + + mapToID["garrisonffhorde_tier1"] = 976 + mapToID["garrisonffhorde_tier2"] = 976 + mapToID["garrisonffhorde_tier3"] = 976 + end + + -- remap zones with alias IDs + for remapID, validMapID in pairs(MAPS_TO_REMAP) do + if mapData[validMapID] then + mapData[remapID] = mapData[validMapID] + end + end + end + + local function gatherMapData() + -- unregister WMU to reduce the processing burden + UnregisterWMU() + + -- load transforms + processTransforms() + + -- load the main zones + -- these should be processed first so they take precedence in the mapFile lookup table + local continents = {GetMapContinents()} + for i = 1, #continents, 2 do + processZone(continents[i]) + local zones = {GetMapZones((i + 1) / 2)} + for z = 1, #zones, 2 do + processZone(zones[z]) + end + end + + -- process all other zones, this includes dungeons and more + local areas = GetAreaMaps() + for idx, zoneID in pairs(areas) do + processZone(zoneID) + end + + -- fix a few zones with data lookup problems + fixupZones() + + -- and finally, the microdungeons + processMicroDungeons() + + -- restore WMU + RestoreWMU() + end + + gatherMapData() +end + +-- Transform a set of coordinates based on the defined map transformations +local function applyCoordinateTransforms(x, y, instanceID) + for _, transformData in ipairs(transforms) do + if transformData.instanceID == instanceID then + if transformData.minX <= x and transformData.maxX >= x and transformData.minY <= y and transformData.maxY >= y then + instanceID = transformData.newInstanceID + x = x + transformData.offsetX + y = y + transformData.offsetY + break + end + end + end + if instanceIDOverrides[instanceID] then + instanceID = instanceIDOverrides[instanceID] + end + return x, y, instanceID +end + +-- get the data table for a map and its level (floor) +local function getMapDataTable(mapID, level) + if not mapID then return nil end + if type(mapID) == "string" then + mapID = mapID:gsub("_terrain%d+$", "") + mapID = mapToID[mapID] + end + local data = mapData[mapID] + if not data then return nil end + + if (level == nil or level == 0) and data.fakefloor then + level = 1 + end + + if level and level > 0 then + if data.floors[level] then + return data.floors[level] + elseif microDungeons[data.instance] and microDungeons[data.instance][level] then + return microDungeons[data.instance][level] + end + else + return data + end +end + +local function UpdateCurrentPosition() + UnregisterWMU() + + -- save active map and level + local prevContinent + local prevMapID, prevLevel = GetCurrentMapAreaID(), GetCurrentMapDungeonLevel() + + -- handle continent maps (751 is the maelstrom continent, which fails with SetMapByID) + if not prevMapID or prevMapID < 0 or prevMapID == 751 then + prevContinent = GetCurrentMapContinent() + end + + -- set current map + SetMapToCurrentZone() + + -- retrieve active values + local newMapID, newLevel = GetCurrentMapAreaID(), GetCurrentMapDungeonLevel() + local mapFile, _, _, isMicroDungeon, microFile = GetMapInfo() + + -- we want to ignore any terrain phasings + if mapFile then + mapFile = mapFile:gsub("_terrain%d+$", "") + end + + -- hack to update the mapfile for the garrison map (as it changes when the player updates his garrison) + -- its not ideal to only update it when the player is in the garrison, but updates should only really happen then + if (newMapID == 971 or newMapID == 976) and mapData[newMapID] and mapFile ~= mapData[newMapID].mapFile then + mapData[newMapID].mapFile = mapFile + end + + -- restore previous map + if prevContinent then + SetMapZoom(prevContinent) + else + if prevMapID and prevMapID ~= newMapID then + SetMapByID(prevMapID) + end + -- and level + if prevLevel and prevLevel > 0 then + SetDungeonMapLevel(prevLevel) + end + end + + RestoreWMU() + + if newMapID ~= currentPlayerZoneMapID or newLevel ~= currentPlayerLevel then + -- store micro dungeon map lookup, if available + if microFile and not mapToID[microFile] then mapToID[microFile] = newMapID end + + -- update upvalues and signal callback + currentPlayerZoneMapID, currentPlayerLevel, currentMapFile, currentMapIsMicroDungeon = newMapID, newLevel, microFile or mapFile, isMicroDungeon + HereBeDragons.callbacks:Fire("PlayerZoneChanged", currentPlayerZoneMapID, currentPlayerLevel, currentMapFile, currentMapIsMicroDungeon) + end +end + +local function OnEvent(frame, event, ...) + UpdateCurrentPosition() +end + +HereBeDragons.eventFrame:SetScript("OnEvent", OnEvent) +HereBeDragons.eventFrame:UnregisterAllEvents() +HereBeDragons.eventFrame:RegisterEvent("ZONE_CHANGED_NEW_AREA") +HereBeDragons.eventFrame:RegisterEvent("ZONE_CHANGED") +HereBeDragons.eventFrame:RegisterEvent("ZONE_CHANGED_INDOORS") +HereBeDragons.eventFrame:RegisterEvent("NEW_WMO_CHUNK") +HereBeDragons.eventFrame:RegisterEvent("PLAYER_ENTERING_WORLD") + +-- if we're loading after entering the world (ie. on demand), update position now +if IsLoggedIn() then + UpdateCurrentPosition() +end + +--- Return the localized zone name for a given mapID or mapFile +-- @param mapID numeric mapID or mapFile +function HereBeDragons:GetLocalizedMap(mapID) + if type(mapID) == "string" then + mapID = mapID:gsub("_terrain%d+$", "") + mapID = mapToID[mapID] + end + return mapData[mapID] and mapData[mapID].name or nil +end + +--- Return the map id to a mapFile +-- @param mapFile Map File +function HereBeDragons:GetMapIDFromFile(mapFile) + if mapFile then + mapFile = mapFile:gsub("_terrain%d+$", "") + return mapToID[mapFile] + end + return nil +end + +--- Return the mapFile to a map ID +-- @param mapID Map ID +function HereBeDragons:GetMapFileFromID(mapID) + return mapData[mapID] and mapData[mapID].mapFile or nil +end + +--- Lookup the map ID for a Continent / Zone index combination +-- @param C continent index from GetCurrentMapContinent +-- @param Z zone index from GetCurrentMapZone +function HereBeDragons:GetMapIDFromCZ(C, Z) + if C and continentZoneMap[C] then + return Z and continentZoneMap[C][Z] + end + return nil +end + +--- Lookup the C/Z values for map +-- @param mapID the MapID +function HereBeDragons:GetCZFromMapID(mapID) + if mapData[mapID] then + return mapData[mapID].C, mapData[mapID].Z + end + return nil, nil +end + +--- Get the size of the zone +-- @param mapID Map ID or MapFile of the zone +-- @param level Optional map level +-- @return width, height of the zone, in yards +function HereBeDragons:GetZoneSize(mapID, level) + local data = getMapDataTable(mapID, level) + if not data then return 0, 0 end + + return data[1], data[2] +end + +--- Get the number of floors for a map +-- @param mapID map ID or mapFile of the zone +function HereBeDragons:GetNumFloors(mapID) + if not mapID then return 0 end + if type(mapID) == "string" then + mapID = mapID:gsub("_terrain%d+$", "") + mapID = mapToID[mapID] + end + + if not mapData[mapID] then return 0 end + + return #(mapData[mapID].floors) +end + +--- Get a list of all map IDs +-- @return array-style table with all known/valid map IDs +function HereBeDragons:GetAllMapIDs() + local t = {} + for id in pairs(mapData) do + table.insert(t, id) + end + return t +end + +--- Convert local/point coordinates to world coordinates in yards +-- @param x X position in 0-1 point coordinates +-- @param y Y position in 0-1 point coordinates +-- @param zone MapID or MapFile of the zone +-- @param level Optional level of the zone +function HereBeDragons:GetWorldCoordinatesFromZone(x, y, zone, level) + local data = getMapDataTable(zone, level) + if not data or data[0] == 0 or data[1] == 0 then return nil, nil, nil end + + local width, height, left, top = data[1], data[2], data[3], data[4] + x, y = left - width * x, top - height * y + + return x, y, data.instance +end + +--- Convert world coordinates to local/point zone coordinates +-- @param x Global X position +-- @param y Global Y position +-- @param zone MapID or MapFile of the zone +-- @param level Optional level of the zone +-- @param allowOutOfBounds Allow coordinates to go beyond the current map (ie. outside of the 0-1 range), otherwise nil will be returned +function HereBeDragons:GetZoneCoordinatesFromWorld(x, y, zone, level, allowOutOfBounds) + local data = getMapDataTable(zone, level) + if not data or data[0] == 0 or data[1] == 0 then return nil, nil end + + local width, height, left, top = data[1], data[2], data[3], data[4] + x, y = (left - x) / width, (top - y) / height + + -- verify the coordinates fall into the zone + if not allowOutOfBounds and (x < 0 or x > 1 or y < 0 or y > 1) then return nil, nil end + + return x, y +end + +--- Translate zone coordinates from one zone to another +-- @param x X position in 0-1 point coordinates, relative to the origin zone +-- @param y Y position in 0-1 point coordinates, relative to the origin zone +-- @param oZone Origin Zone, mapID or mapFile +-- @param oLevel Origin Zone Level +-- @param dZone Destination Zone, mapID or mapFile +-- @param dLevel Destination Zone Level +-- @param allowOutOfBounds Allow coordinates to go beyond the current map (ie. outside of the 0-1 range), otherwise nil will be returned +function HereBeDragons:TranslateZoneCoordinates(x, y, oZone, oLevel, dZone, dLevel, allowOutOfBounds) + local xCoord, yCoord, instance = self:GetWorldCoordinatesFromZone(x, y, oZone, oLevel) + if not xCoord then return nil, nil end + + local data = getMapDataTable(dZone, dLevel) + if not data or data.instance ~= instance then return nil, nil end + + return self:GetZoneCoordinatesFromWorld(xCoord, yCoord, dZone, dLevel, allowOutOfBounds) +end + +--- Return the distance from an origin position to a destination position in the same instance/continent. +-- @param instanceID instance ID +-- @param oX origin X +-- @param oY origin Y +-- @param dX destination X +-- @param dY destination Y +-- @return distance, deltaX, deltaY +function HereBeDragons:GetWorldDistance(instanceID, oX, oY, dX, dY) + local deltaX, deltaY = dX - oX, dY - oY + return (deltaX * deltaX + deltaY * deltaY)^0.5, deltaX, deltaY +end + +--- Return the distance between two points on the same continent +-- @param oZone origin zone map id or mapfile +-- @param oLevel optional origin zone level (floor) +-- @param oX origin X, in local zone/point coordinates +-- @param oY origin Y, in local zone/point coordinates +-- @param dZone destination zone map id or mapfile +-- @param dLevel optional destination zone level (floor) +-- @param dX destination X, in local zone/point coordinates +-- @param dY destination Y, in local zone/point coordinates +-- @return distance, deltaX, deltaY in yards +function HereBeDragons:GetZoneDistance(oZone, oLevel, oX, oY, dZone, dLevel, dX, dY) + local oX, oY, oInstance = self:GetWorldCoordinatesFromZone(oX, oY, oZone, oLevel) + if not oX then return nil, nil, nil end + + -- translate dX, dY to the origin zone + local dX, dY, dInstance = self:GetWorldCoordinatesFromZone(dX, dY, dZone, dLevel) + if not dX then return nil, nil, nil end + + if oInstance ~= dInstance then return nil, nil, nil end + + return self:GetWorldDistance(oInstance, oX, oY, dX, dY) +end + +--- Return the angle and distance from an origin position to a destination position in the same instance/continent. +-- @param instanceID instance ID +-- @param oX origin X +-- @param oY origin Y +-- @param dX destination X +-- @param dY destination Y +-- @return angle, distance where angle is in radians and distance in yards +function HereBeDragons:GetWorldVector(instanceID, oX, oY, dX, dY) + local distance, deltaX, deltaY = self:GetWorldDistance(instanceID, oX, oY, dX, dY) + if not distance then return nil, nil end + + -- calculate the angle from deltaY and deltaX + local angle = atan2(-deltaX, deltaY) + + -- normalize the angle + if angle > 0 then + angle = PI2 - angle + else + angle = -angle + end + + return angle, distance +end + +--- Get the current world position of the player +-- The position is transformed to the current continent, if applicable +-- @return x, y, instanceID +function HereBeDragons:GetPlayerWorldPosition() + -- get the current position + local y, x, z, instanceID = UnitPosition("player") + + -- return transformed coordinates + return applyCoordinateTransforms(x, y, instanceID) +end + +--- Get the current zone and level of the player +-- The returned mapFile can represent a micro dungeon, if the player currently is inside one. +-- @return mapID, level, mapFile, isMicroDungeon +function HereBeDragons:GetPlayerZone() + return currentPlayerZoneMapID, currentPlayerLevel, currentMapFile, currentMapIsMicroDungeon +end + +--- Get the current position of the player on a zone level +-- The returned values are local point coordinates, 0-1. The mapFile can represent a micro dungeon. +-- @return x, y, mapID, level, mapFile, isMicroDungeon +function HereBeDragons:GetPlayerZonePosition() + if not currentPlayerZoneMapID then return nil, nil, nil, nil end + local x, y, instanceID = self:GetPlayerWorldPosition() + + x, y = self:GetZoneCoordinatesFromWorld(x, y, currentPlayerZoneMapID, currentPlayerLevel) + if x and y then + return x, y, currentPlayerZoneMapID, currentPlayerLevel, currentMapFile, currentMapIsMicroDungeon + end + return nil, nil, nil, nil +end diff --git a/libs/HereBeDragons-1.0/HereBeDragons-Pins-1.0.lua b/libs/HereBeDragons-1.0/HereBeDragons-Pins-1.0.lua new file mode 100644 index 0000000..355a786 --- /dev/null +++ b/libs/HereBeDragons-1.0/HereBeDragons-Pins-1.0.lua @@ -0,0 +1,591 @@ +-- HereBeDragons-Pins is a library to show pins/icons on the world map and minimap + +local MAJOR, MINOR = "HereBeDragons-Pins-1.0", 7 +assert(LibStub, MAJOR .. " requires LibStub") + +local pins, oldversion = LibStub:NewLibrary(MAJOR, MINOR) +if not pins then return end + +local HBD = LibStub("HereBeDragons-1.0") + +pins.updateFrame = pins.updateFrame or CreateFrame("Frame") + +-- storage for minimap pins +pins.minimapPins = pins.minimapPins or {} +pins.activeMinimapPins = pins.activeMinimapPins or {} +pins.minimapPinRegistry = pins.minimapPinRegistry or {} + +-- and worldmap pins +pins.worldmapPins = pins.worldmapPins or {} +pins.worldmapPinRegistry = pins.worldmapPinRegistry or {} + +-- upvalue lua api +local cos, sin, max = math.cos, math.sin, math.max +local type, pairs = type, pairs + +-- upvalue wow api +local GetPlayerFacing = GetPlayerFacing + +-- upvalue data tables +local minimapPins = pins.minimapPins +local activeMinimapPins = pins.activeMinimapPins +local minimapPinRegistry = pins.minimapPinRegistry + +local worldmapPins = pins.worldmapPins +local worldmapPinRegistry = pins.worldmapPinRegistry + +local minimap_size = { + indoor = { + [0] = 300, -- scale + [1] = 240, -- 1.25 + [2] = 180, -- 5/3 + [3] = 120, -- 2.5 + [4] = 80, -- 3.75 + [5] = 50, -- 6 + }, + outdoor = { + [0] = 466 + 2/3, -- scale + [1] = 400, -- 7/6 + [2] = 333 + 1/3, -- 1.4 + [3] = 266 + 2/6, -- 1.75 + [4] = 200, -- 7/3 + [5] = 133 + 1/3, -- 3.5 + }, +} + +local minimap_shapes = { + -- { upper-left, lower-left, upper-right, lower-right } + ["SQUARE"] = { false, false, false, false }, + ["CORNER-TOPLEFT"] = { true, false, false, false }, + ["CORNER-TOPRIGHT"] = { false, false, true, false }, + ["CORNER-BOTTOMLEFT"] = { false, true, false, false }, + ["CORNER-BOTTOMRIGHT"] = { false, false, false, true }, + ["SIDE-LEFT"] = { true, true, false, false }, + ["SIDE-RIGHT"] = { false, false, true, true }, + ["SIDE-TOP"] = { true, false, true, false }, + ["SIDE-BOTTOM"] = { false, true, false, true }, + ["TRICORNER-TOPLEFT"] = { true, true, true, false }, + ["TRICORNER-TOPRIGHT"] = { true, false, true, true }, + ["TRICORNER-BOTTOMLEFT"] = { true, true, false, true }, + ["TRICORNER-BOTTOMRIGHT"] = { false, true, true, true }, +} + +local tableCache = setmetatable({}, {__mode='k'}) + +local function newCachedTable() + local t = next(tableCache) + if t then + tableCache[t] = nil + else + t = {} + end + return t +end + +local function recycle(t) + tableCache[t] = true +end + +-- minimap rotation +local rotateMinimap = GetCVar("rotateMinimap") == "1" + +-- is the minimap indoors or outdoors +local indoors = GetCVar("minimapZoom")+0 == Minimap:GetZoom() and "outdoor" or "indoor" + +local minimapPinCount, queueFullUpdate = 0, false +local minimapScale, minimapShape, mapRadius, minimapWidth, minimapHeight, mapSin, mapCos +local lastZoom, lastFacing, lastXY, lastYY + +local worldmapWidth, worldmapHeight = WorldMapButton:GetWidth(), WorldMapButton:GetHeight() + +local function drawMinimapPin(pin, data) + local xDist, yDist = lastXY - data.x, lastYY - data.y + + -- handle rotation + if rotateMinimap then + local dx, dy = xDist, yDist + xDist = dx*mapCos - dy*mapSin + yDist = dx*mapSin + dy*mapCos + end + + -- adapt delta position to the map radius + local diffX = xDist / mapRadius + local diffY = yDist / mapRadius + + -- different minimap shapes + local isRound = true + if minimapShape and not (xDist == 0 or yDist == 0) then + isRound = (xDist < 0) and 1 or 3 + if yDist < 0 then + isRound = minimapShape[isRound] + else + isRound = minimapShape[isRound + 1] + end + end + + -- calculate distance from the center of the map + local dist + if isRound then + dist = (diffX*diffX + diffY*diffY) / 0.9^2 + else + dist = max(diffX*diffX, diffY*diffY) / 0.9^2 + end + + -- if distance > 1, then adapt node position to slide on the border + if dist > 1 and data.floatOnEdge then + dist = dist^0.5 + diffX = diffX/dist + diffY = diffY/dist + end + + if dist <= 1 or data.floatOnEdge then + pin:Show() + pin:ClearAllPoints() + pin:SetPoint("CENTER", Minimap, "CENTER", diffX * minimapWidth, -diffY * minimapHeight) + data.onEdge = (dist > 1) + else + pin:Hide() + data.onEdge = nil + pin.keep = nil + end +end + +local function UpdateMinimapPins(force) + -- get the current player position + local x, y, instanceID = HBD:GetPlayerWorldPosition() + local mapID, mapFloor = HBD:GetPlayerZone() + + -- get data from the API for calculations + local zoom = Minimap:GetZoom() + local diffZoom = zoom ~= lastZoom + + -- for rotating minimap support + local facing + if rotateMinimap then + facing = GetPlayerFacing() + else + facing = lastFacing + end + + local newScale = Minimap:GetScale() + if minimapScale ~= newScale then + minimapScale = newScale + force = true + end + + if x ~= lastXY or y ~= lastYY or diffZoom or facing ~= lastFacing or force then + -- minimap information + minimapShape = GetMinimapShape and minimap_shapes[GetMinimapShape() or "ROUND"] + mapRadius = minimap_size[indoors][zoom] / 2 + minimapWidth = Minimap:GetWidth() / 2 + minimapHeight = Minimap:GetHeight() / 2 + + -- update upvalues for icon placement + lastZoom = zoom + lastFacing = facing + lastXY, lastYY = x, y + + if rotateMinimap then + mapSin = sin(facing) + mapCos = cos(facing) + end + + for pin, data in pairs(minimapPins) do + if data.instanceID == instanceID and (not data.floor or (data.floor == mapFloor and (data.floor == 0 or data.mapID == mapID))) then + activeMinimapPins[pin] = data + data.keep = true + -- draw the pin (this may reset data.keep if outside of the map) + drawMinimapPin(pin, data) + end + end + + minimapPinCount = 0 + for pin, data in pairs(activeMinimapPins) do + if not data.keep then + activeMinimapPins[pin] = nil + else + minimapPinCount = minimapPinCount + 1 + data.keep = nil + end + end + end +end + +local function UpdateMinimapIconPosition() + + -- get the current map zoom + local zoom = Minimap:GetZoom() + local diffZoom = zoom ~= lastZoom + -- if the map zoom changed, run a full update sweep + if diffZoom then + UpdateMinimapPins() + return + end + + -- we have no active minimap pins, just return early + if minimapPinCount == 0 then return end + + local x, y = HBD:GetPlayerWorldPosition() + + -- for rotating minimap support + local facing + if rotateMinimap then + facing = GetPlayerFacing() + else + facing = lastFacing + end + + local refresh + local newScale = Minimap:GetScale() + if minimapScale ~= newScale then + minimapScale = newScale + refresh = true + end + + if x ~= lastXY or y ~= lastYY or facing ~= lastFacing or refresh then + -- update radius of the map + mapRadius = minimap_size[indoors][zoom] / 2 + -- update upvalues for icon placement + lastXY, lastYY = x, y + lastFacing = facing + + if rotateMinimap then + mapSin = sin(facing) + mapCos = cos(facing) + end + + -- iterate all nodes and check if they are still in range of our minimap display + for pin, data in pairs(activeMinimapPins) do + -- update the position of the node + drawMinimapPin(pin, data) + end + end +end + +local function UpdateMinimapZoom() + local zoom = Minimap:GetZoom() + if GetCVar("minimapZoom") == GetCVar("minimapInsideZoom") then + Minimap:SetZoom(zoom < 2 and zoom + 1 or zoom - 1) + end + indoors = GetCVar("minimapZoom")+0 == Minimap:GetZoom() and "outdoor" or "indoor" + Minimap:SetZoom(zoom) +end + +local function PositionWorldMapIcon(icon, data, currentMapID, currentMapFloor) + local x, y = HBD:GetZoneCoordinatesFromWorld(data.x, data.y, currentMapID, currentMapFloor) + if x and y then + icon:ClearAllPoints() + icon:SetPoint("CENTER", WorldMapButton, "TOPLEFT", x * worldmapWidth, -y * worldmapHeight) + icon:Show() + else + icon:Hide() + end +end + +local function UpdateWorldMap() + if not WorldMapButton:IsVisible() then return end + + local mapID, mapFloor = GetCurrentMapAreaID(), GetCurrentMapDungeonLevel() + + -- not viewing a valid map + if not mapID or mapID == -1 then + for icon in pairs(worldmapPins) do + icon:Hide() + end + return + end + + local instanceID = HBD.mapData[mapID] and HBD.mapData[mapID].instance or -1 + + worldmapWidth = WorldMapButton:GetWidth() + worldmapHeight = WorldMapButton:GetHeight() + + for icon, data in pairs(worldmapPins) do + if instanceID == data.instanceID and (not data.floor or (data.floor == mapFloor and (data.floor == 0 or data.mapID == mapID))) then + PositionWorldMapIcon(icon, data, mapID, mapFloor) + else + icon:Hide() + end + end +end + +local function UpdateMaps() + UpdateMinimapZoom() + UpdateMinimapPins() + UpdateWorldMap() +end + +local last_update = 0 +local function OnUpdateHandler(frame, elapsed) + last_update = last_update + elapsed + if last_update > 1 or queueFullUpdate then + UpdateMinimapPins(queueFullUpdate) + last_update = 0 + queueFullUpdate = false + else + UpdateMinimapIconPosition() + end +end +pins.updateFrame:SetScript("OnUpdate", OnUpdateHandler) + +local function OnEventHandler(frame, event, ...) + if event == "CVAR_UPDATE" then + local cvar, value = ... + if cvar == "ROTATE_MINIMAP" then + rotateMinimap = (value == "1") + queueFullUpdate = true + end + elseif event == "MINIMAP_UPDATE_ZOOM" then + UpdateMinimapZoom() + UpdateMinimapPins() + elseif event == "PLAYER_LOGIN" then + -- recheck cvars after login + rotateMinimap = GetCVar("rotateMinimap") == "1" + elseif event == "PLAYER_ENTERING_WORLD" then + UpdateMaps() + elseif event == "WORLD_MAP_UPDATE" then + UpdateWorldMap() + end +end + +pins.updateFrame:SetScript("OnEvent", OnEventHandler) +pins.updateFrame:UnregisterAllEvents() +pins.updateFrame:RegisterEvent("CVAR_UPDATE") +pins.updateFrame:RegisterEvent("MINIMAP_UPDATE_ZOOM") +pins.updateFrame:RegisterEvent("PLAYER_LOGIN") +pins.updateFrame:RegisterEvent("PLAYER_ENTERING_WORLD") +pins.updateFrame:RegisterEvent("WORLD_MAP_UPDATE") + +HBD.RegisterCallback(pins, "PlayerZoneChanged", UpdateMaps) + + +--- Add a icon to the minimap (x/y world coordinate version) +-- Note: This API does not let you specify a floor, as floors are map-specific, not instance/world wide. Use the Map/Floor API to specify a floor. +-- @param ref Reference to your addon to track the icon under (ie. your "self" or string identifier) +-- @param icon Icon Frame +-- @param instanceID Instance ID of the map to add the icon to +-- @param x X position in world coordinates +-- @param y Y position in world coordinates +-- @param floatOnEdge flag if the icon should float on the edge of the minimap when going out of range, or hide immediately (default false) +function pins:AddMinimapIconWorld(ref, icon, instanceID, x, y, floatOnEdge) + if not ref then + error(MAJOR..": AddMinimapIconWorld: 'ref' must not be nil") + end + if type(icon) ~= "table" or not icon.SetPoint then + error(MAJOR..": AddMinimapIconWorld: 'icon' must be a frame", 2) + end + if type(instanceID) ~= "number" or type(x) ~= "number" or type(y) ~= "number" then + error(MAJOR..": AddMinimapIconWorld: 'instanceID', 'x' and 'y' must be numbers", 2) + end + + if not minimapPinRegistry[ref] then + minimapPinRegistry[ref] = {} + end + + minimapPinRegistry[ref][icon] = true + + local t = newCachedTable() + t.instanceID = instanceID + t.x = x + t.y = y + t.floatOnEdge = floatOnEdge + t.mapID = nil + t.floor = nil + + minimapPins[icon] = t + queueFullUpdate = true +end + +--- Add a icon to the minimap (mapid/floor coordinate version) +-- @param ref Reference to your addon to track the icon under (ie. your "self" or string identifier) +-- @param icon Icon Frame +-- @param mapID Map ID of the map to place the icon on +-- @param mapFloor Floor to place the icon on (or nil for all floors) +-- @param x X position in local/point coordinates (0-1), relative to the zone +-- @param y Y position in local/point coordinates (0-1), relative to the zone +-- @param floatOnEdge flag if the icon should float on the edge of the minimap when going out of range, or hide immediately (default false) +function pins:AddMinimapIconMF(ref, icon, mapID, mapFloor, x, y, floatOnEdge) + if not ref then + error(MAJOR..": AddMinimapIconMF: 'ref' must not be nil") + end + if type(icon) ~= "table" or not icon.SetPoint then + error(MAJOR..": AddMinimapIconMF: 'icon' must be a frame") + end + if type(mapID) ~= "number" or type(x) ~= "number" or type(y) ~= "number" then + error(MAJOR..": AddMinimapIconMF: 'mapID', 'x' and 'y' must be numbers") + end + + -- convert to world coordinates and use our known adding function + local xCoord, yCoord, instanceID = HBD:GetWorldCoordinatesFromZone(x, y, mapID, mapFloor) + if not xCoord then return end + + self:AddMinimapIconWorld(ref, icon, instanceID, xCoord, yCoord, floatOnEdge) + + -- store extra information + minimapPins[icon].mapID = mapID + minimapPins[icon].floor = mapFloor +end + +--- Check if a floating minimap icon is on the edge of the map +-- @param icon the minimap icon +function pins:IsMinimapIconOnEdge(icon) + if not icon then return false end + local data = minimapPins[icon] + if not data then return nil end + + return data.onEdge +end + +--- Remove a minimap icon +-- @param ref Reference to your addon to track the icon under (ie. your "self" or string identifier) +-- @param icon Icon Frame +function pins:RemoveMinimapIcon(ref, icon) + if not ref or not icon or not minimapPinRegistry[ref] then return end + minimapPinRegistry[ref][icon] = nil + if minimapPins[icon] then + recycle(minimapPins[icon]) + minimapPins[icon] = nil + end + queueFullUpdate = true +end + +--- Remove all minimap icons belonging to your addon (as tracked by "ref") +-- @param ref Reference to your addon to track the icon under (ie. your "self" or string identifier) +function pins:RemoveAllMinimapIcons(ref) + if not ref or not minimapPinRegistry[ref] then return end + for icon in pairs(minimapPinRegistry[ref]) do + recycle(minimapPins[icon]) + minimapPins[icon] = nil + end + wipe(minimapPinRegistry[ref]) + queueFullUpdate = true +end + +--- Add a icon to the world map (x/y world coordinate version) +-- Note: This API does not let you specify a floor, as floors are map-specific, not instance/world wide. Use the Map/Floor API to specify a floor. +-- @param ref Reference to your addon to track the icon under (ie. your "self" or string identifier) +-- @param icon Icon Frame +-- @param instanceID Instance ID of the map to add the icon to +-- @param x X position in world coordinates +-- @param y Y position in world coordinates +function pins:AddWorldMapIconWorld(ref, icon, instanceID, x, y) + if not ref then + error(MAJOR..": AddWorldMapIconWorld: 'ref' must not be nil") + end + if type(icon) ~= "table" or not icon.SetPoint then + error(MAJOR..": AddWorldMapIconWorld: 'icon' must be a frame", 2) + end + if type(instanceID) ~= "number" or type(x) ~= "number" or type(y) ~= "number" then + error(MAJOR..": AddWorldMapIconWorld: 'instanceID', 'x' and 'y' must be numbers", 2) + end + + if not worldmapPinRegistry[ref] then + worldmapPinRegistry[ref] = {} + end + + worldmapPinRegistry[ref][icon] = true + + local t = newCachedTable() + t.instanceID = instanceID + t.x = x + t.y = y + t.mapID = nil + t.floor = nil + + worldmapPins[icon] = t + + if WorldMapButton:IsVisible() then + local currentMapID, currentMapFloor = GetCurrentMapAreaID(), GetCurrentMapDungeonLevel() + if currentMapID and HBD.mapData[currentMapID] and HBD.mapData[currentMapID].instance == instanceID then + PositionWorldMapIcon(icon, t, currentMapID, currentMapFloor) + else + icon:Hide() + end + end +end + +--- Add a icon to the world map (mapid/floor coordinate version) +-- @param ref Reference to your addon to track the icon under (ie. your "self" or string identifier) +-- @param icon Icon Frame +-- @param mapID Map ID of the map to place the icon on +-- @param mapFloor Floor to place the icon on (or nil for all floors) +-- @param x X position in local/point coordinates (0-1), relative to the zone +-- @param y Y position in local/point coordinates (0-1), relative to the zone +function pins:AddWorldMapIconMF(ref, icon, mapID, mapFloor, x, y) + if not ref then + error(MAJOR..": AddWorldMapIconMF: 'ref' must not be nil") + end + if type(icon) ~= "table" or not icon.SetPoint then + error(MAJOR..": AddWorldMapIconMF: 'icon' must be a frame") + end + if type(mapID) ~= "number" or type(x) ~= "number" or type(y) ~= "number" then + error(MAJOR..": AddWorldMapIconMF: 'mapID', 'x' and 'y' must be numbers") + end + + -- convert to world coordinates + local xCoord, yCoord, instanceID = HBD:GetWorldCoordinatesFromZone(x, y, mapID, mapFloor) + if not xCoord then return end + + if not worldmapPinRegistry[ref] then + worldmapPinRegistry[ref] = {} + end + + worldmapPinRegistry[ref][icon] = true + + local t = newCachedTable() + t.instanceID = instanceID + t.x = xCoord + t.y = yCoord + t.mapID = mapID + t.floor = mapFloor + + worldmapPins[icon] = t + + if WorldMapButton:IsVisible() then + local currentMapID, currentMapFloor = GetCurrentMapAreaID(), GetCurrentMapDungeonLevel() + if currentMapID and HBD.mapData[currentMapID] and HBD.mapData[currentMapID].instance == instanceID and (not mapFloor or (currentMapFloor == mapFloor and (mapFloor == 0 or currentMapID == mapID))) then + PositionWorldMapIcon(icon, t, currentMapID, currentMapFloor) + else + icon:Hide() + end + end +end + +--- Remove a worldmap icon +-- @param ref Reference to your addon to track the icon under (ie. your "self" or string identifier) +-- @param icon Icon Frame +function pins:RemoveWorldMapIcon(ref, icon) + if not ref or not icon or not worldmapPinRegistry[ref] then return end + worldmapPinRegistry[ref][icon] = nil + if worldmapPins[icon] then + recycle(worldmapPins[icon]) + worldmapPins[icon] = nil + end + icon:Hide() +end + +--- Remove all worldmap icons belonging to your addon (as tracked by "ref") +-- @param ref Reference to your addon to track the icon under (ie. your "self" or string identifier) +function pins:RemoveAllWorldMapIcons(ref) + if not ref or not worldmapPinRegistry[ref] then return end + for icon in pairs(worldmapPinRegistry[ref]) do + recycle(worldmapPins[icon]) + worldmapPins[icon] = nil + icon:Hide() + end + wipe(worldmapPinRegistry[ref]) +end + +--- Return the angle and distance from the player to the specified pin +-- @param icon icon object (minimap or worldmap) +-- @return angle, distance where angle is in radians and distance in yards +function pins:GetVectorToIcon(icon) + if not icon then return nil, nil end + local data = minimapPins[icon] or worldmapPins[icon] + if not data then return nil, nil end + + local x, y, instance = HBD:GetPlayerWorldPosition() + if instance ~= data.instanceID then return nil end + + return HBD:GetWorldVector(instance, x, y, data.x, data.y) +end diff --git a/libs/LibMapData-1.0/library.lua b/libs/LibMapData-1.0/library.lua deleted file mode 100755 index dbd26c1..0000000 --- a/libs/LibMapData-1.0/library.lua +++ /dev/null @@ -1,3196 +0,0 @@ ---[[ - Library contains a dataset for Map file names and floors giving the raw map data - it also has a few functions to help determine distance and directions. ---]] -local MAJOR = "LibMapData-1.0" -local MINOR = 1000 + tonumber(("$Revision: 144 $"):match("%d+")) -assert(LibStub, MAJOR.." requires LibStub") - -local lib = LibStub:NewLibrary(MAJOR, MINOR) -if not lib then return end -lib.callbacks = lib.callbacks or LibStub("CallbackHandler-1.0"):New(lib) - -local watchFrame = CreateFrame("Frame") -local lastMap, lastFloor = nil,0 -local mapData = {} -local mapToLocal = {} -local localToMap = {} -local idToMap = {} -local GetPlayerFacing, GetPlayerMapPosition,SetMapToCurrentZone = GetPlayerFacing, GetPlayerMapPosition, SetMapToCurrentZone -local atan2 = math.atan2 -local PI2 = math.pi*2 -local floor = math.floor -local type,assert = type,assert -local wowMoP -do - local _, _, _, interface = GetBuildInfo() - wowMoP = (interface >= 50000) -end - ---- Constants -lib.MAP_NORMAL = 0 -lib.MAP_INSTANCE = 1 -lib.MAP_RAID = 2 -lib.MAP_BG = 3 -lib.MAP_ARENA = 4 -lib.MAP_SENARIO = 5 - -- estimated world map size -local worldMapWidth = 47714.278579261 -local worldMapHeight = 31809.64857610083 -local missingCache = { - data = {}, - aid = {}, - locale = {} -} - -local contOffsets = { - [1] = {-8590.40725049343,5628.692856102324}, - [2] = {18542.31220836664, 3585.574573158966}, - [3] = {0,0}, - [4] = {16020.94044398222,454.2451915717977}, - [5] = {0,0}, - [6] = {0,0}, - [7] = {0,0}, -} - -local transforms_x = { - [1] = 10133.3330078125, - [2] = -2400.0, - [3] = 0, - [4] = 0, - [5] = 0, - [6] = 0, - [7] = 0, -} -local transforms_y = { - [1] = 17600.0, - [2] = 2400.0, - [3] = 0, - [4] = 0, - [5] = 0, - [6] = 0, - [7] = 0, -} - -do - -- Format: - -- floors = number of floors - -- area_id = in game area id - -- floor_index = width,height, ulX,ulY, lrXx,lrY, mapid - local emptyMaps = { - ['floors'] = 0,['name'] = WORLD_MAP, ['continent'] = 0, ['phase'] = 0, ['map_type'] = 0, - [1] = {0,0,0,0,0,0,0} - } - -- silencing the data for now, since old versions send teh info out even though new versions correct the issue - setmetatable(mapData, { __index = function(t, k) - if k then - if missingCache.data[k] == nil then - --print("LibMapData-1.0 is missing data for ",k) - missingCache.data[k] = true - end - end - return emptyMaps - end - }) - setmetatable(idToMap, { __index = function(t, k) - if k then - if missingCache.aid[k] == nil then - --print("LibMapData-1.0 is missing data for area id ",k) - missingCache.aid[k] = true - end - end - return k - end - }) - setmetatable(mapToLocal, { __index = function(t,k) - if k then - if missingCache.locale[k] == nil then - --print("LibMapData-1.0 is missing localized data for ",k) - missingCache.locale[k] = true - end - end - return k - end - }) - mapData[4] = { - ['floors'] = 0, ['name'] = "Durotar", ['rzti'] = 1, ['map_type'] = 0, ['continent'] = 2, ['transform'] = 0, - [1] = {5287.4996337890625,3524.9998779296875,1962.4998779296875,1808.333251953125,7249.99951171875,-1716.6666259765625}, - ['micro'] = { - - }, - } - mapData[9] = { - ['floors'] = 0, ['name'] = "Mulgore", ['rzti'] = 1, ['map_type'] = 0, ['continent'] = 2, ['transform'] = 0, - [1] = {5449.999755859375,3633.333251953125,-2204.16650390625,-168.75,3245.833251953125,-3802.083251953125}, - ['micro'] = { - - }, - } - mapData[11] = { - ['floors'] = 0, ['name'] = "Barrens", ['rzti'] = 1, ['map_type'] = 0, ['continent'] = 2, ['transform'] = 0, - [1] = {5745.83332824707,3831.2498779296875,-202.0833282470703,1810.4166259765625,5543.75,-2020.833251953125}, - ['micro'] = { - - }, - } - mapData[13] = { - ['floors'] = 0, ['name'] = "Kalimdor", ['rzti'] = 1, ['map_type'] = 0, ['continent'] = 2, ['transform'] = 0, - [1] = {36799.810546875,24533.2001953125,-17066.599609375,12799.900390625,19733.2109375,-11733.2998046875}, - ['micro'] = { - - }, - } - mapData[14] = { - ['floors'] = 0, ['name'] = "Azeroth", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {40741.181640625,27149.6875,-18171.970703125,11176.34375,22569.2109375,-15973.34375}, - ['micro'] = { - - }, - } - mapData[16] = { - ['floors'] = 0, ['name'] = "Arathi", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {3477.083251953125,2318.7498474121094,1127.083251953125,-141.66665649414062,4604.16650390625,-2460.41650390625}, - ['micro'] = { - - }, - } - mapData[17] = { - ['floors'] = 0, ['name'] = "Badlands", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {3070.833251953125,2045.8330078125,1902.083251953125,-5854.16650390625,4972.91650390625,-7899.99951171875}, - ['micro'] = { - [18] = { 562.5,375.0,3311.25,-6330.0,2748.75,-5955.0 }, - - }, - } - mapData[19] = { - ['floors'] = 0, ['name'] = "BlastedLands", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {3662.5,2441.666015625,1193.75,-10583.3330078125,4856.25,-13024.9990234375}, - ['micro'] = { - - }, - } - mapData[20] = { - ['floors'] = 0, ['name'] = "Tirisfal", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {4518.7498779296875,3012.4998168945312,-3033.333251953125,3837.499755859375,1485.4166259765625,824.9999389648438}, - ['micro'] = { - [12] = { 220.0,146.666748046875,-1800.0,1976.666748046875,-2020.0,2123.33349609375 }, - [13] = { 204.990234375,136.66015625,864.9951171875,2812.169921875,660.0048828125,2948.830078125 }, - - }, - } - mapData[21] = { - ['floors'] = 0, ['name'] = "Silverpine", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {4199.999755859375,2799.9998779296875,-3449.999755859375,1666.6666259765625,750.0,-1133.333251953125}, - ['micro'] = { - - }, - } - mapData[22] = { - ['floors'] = 0, ['name'] = "WesternPlaguelands", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {4299.999908447266,2866.666534423828,-416.6666564941406,3366.66650390625,3883.333251953125,499.9999694824219}, - ['micro'] = { - - }, - } - mapData[23] = { - ['floors'] = 0, ['name'] = "EasternPlaguelands", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {4031.25,2687.4998779296875,2287.5,3704.16650390625,6318.75,1016.6666259765625}, - ['micro'] = { - - }, - } - mapData[24] = { - ['floors'] = 0, ['name'] = "HillsbradFoothills", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {4862.4998779296875,3241.6666259765625,-1849.9998779296875,1481.25,3012.5,-1760.4166259765625}, - ['micro'] = { - - }, - } - mapData[26] = { - ['floors'] = 0, ['name'] = "Hinterlands", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {3850.0,2566.6666259765625,1575.0,1466.6666259765625,5425.0,-1100.0}, - ['micro'] = { - - }, - } - mapData[27] = { - ['floors'] = 0, ['name'] = "DunMorogh", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {4897.91650390625,3264.5830078125,-2137.5,-3941.66650390625,2760.41650390625,-7206.24951171875}, - ['micro'] = { - [6] = { 330.0,220.0,85.0,-6240.0,-245.0,-6020.0 }, - [7] = { 505.5,337.0,472.75,-5650.0,-32.75,-5313.0 }, - [8] = { 195.0,130.0,-584.0,-5600.0,-779.0,-5470.0 }, - [9] = { 266.490234375,177.66015625,-241.7548828125,-6623.330078125,-508.2451171875,-6445.669921875 }, - [10] = { 570.0,380.0,-500.0,-5242.5,-1070.0,-4862.5 }, - [11] = { 374.009765625,249.33984375,1917.0048828125,-5736.169921875,1542.9951171875,-5486.830078125 }, - - }, - } - mapData[28] = { - ['floors'] = 0, ['name'] = "SearingGorge", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {2231.2498474121094,1487.49951171875,322.9166564941406,-6100.0,2554.16650390625,-7587.49951171875}, - ['micro'] = { - [16] = { 760.0239868164062,506.6826171875,1387.510009765625,-7593.34130859375,627.4860229492188,-7086.65869140625 }, - - }, - } - mapData[29] = { - ['floors'] = 0, ['name'] = "BurningSteppes", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {3152.0831909179688,2099.99951171875,464.58331298828125,-6985.41650390625,3616.66650390625,-9085.416015625}, - ['micro'] = { - [14] = { 712.5,475.0,1473.75,-7800.0,761.25,-7325.0 }, - [15] = { 255.0,170.0,1400.0,-7650.0,1145.0,-7480.0 }, - - }, - } - mapData[30] = { - ['floors'] = 0, ['name'] = "Elwynn", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {3470.833251953125,2314.5830078125,-1535.4166259765625,-7939.5830078125,1935.4166259765625,-10254.166015625}, - ['micro'] = { - [1] = { 240.0,160.0,-41.75,-9860.0,-281.75,-9700.0 }, - [2] = { 255.0,170.0,-34.25,-9880.0,-289.25,-9710.0 }, - [3] = { 279.0,186.0,306.0,-8686.0,27.0,-8500.0 }, - [19] = { 323.25,215.5,769.125,-9200.5,445.875,-8985.0 }, - - }, - } - mapData[32] = { - ['floors'] = 0, ['name'] = "DeadwindPass", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {2499.9999389648438,1666.6669921875,833.3333129882812,-9866.666015625,3333.333251953125,-11533.3330078125}, - ['micro'] = { - - }, - } - mapData[34] = { - ['floors'] = 0, ['name'] = "Duskwood", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {2699.9999389648438,1800.0,-833.3333129882812,-9716.666015625,1866.6666259765625,-11516.666015625}, - ['micro'] = { - - }, - } - mapData[35] = { - ['floors'] = 0, ['name'] = "LochModan", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {2758.3331298828125,1839.5830078125,1993.7498779296875,-4487.5,4752.0830078125,-6327.0830078125}, - ['micro'] = { - - }, - } - mapData[36] = { - ['floors'] = 0, ['name'] = "Redridge", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {2568.7498779296875,1712.5,1479.1666259765625,-8514.5830078125,4047.91650390625,-10227.0830078125}, - ['micro'] = { - - }, - } - mapData[37] = { - ['floors'] = 0, ['name'] = "StranglethornJungle", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {4099.9998779296875,2733.3330078125,-1743.7498779296875,-11016.666015625,2356.25,-13749.9990234375}, - ['micro'] = { - - }, - } - mapData[38] = { - ['floors'] = 0, ['name'] = "SwampOfSorrows", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {2508.3330078125,1672.9169921875,2081.25,-9535.416015625,4589.5830078125,-11208.3330078125}, - ['micro'] = { - - }, - } - mapData[39] = { - ['floors'] = 0, ['name'] = "Westfall", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {3499.9998168945312,2333.3330078125,-3016.66650390625,-9400.0,483.33331298828125,-11733.3330078125}, - ['micro'] = { - [4] = { 262.5,175.0,-1833.75,-10605.0,-2096.25,-10430.0 }, - [5] = { 277.0,184.666015625,-1293.5,-9983.3330078125,-1570.5,-9798.6669921875 }, - [17] = { 450.0,300.0,-1342.5,-11355.0,-1792.5,-11055.0 }, - - }, - } - mapData[40] = { - ['floors'] = 0, ['name'] = "Wetlands", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {4135.416687011719,2756.25,389.58331298828125,-2147.91650390625,4525.0,-4904.16650390625}, - ['micro'] = { - - }, - } - mapData[41] = { - ['floors'] = 0, ['name'] = "Teldrassil", ['rzti'] = 1, ['map_type'] = 0, ['continent'] = 2, ['transform'] = 0, - [1] = {5874.999755859375,3916.66650390625,-4235.41650390625,11847.916015625,1639.583251953125,7931.24951171875}, - ['micro'] = { - - }, - } - mapData[42] = { - ['floors'] = 0, ['name'] = "Darkshore", ['rzti'] = 1, ['map_type'] = 0, ['continent'] = 2, ['transform'] = 0, - [1] = {6464.5830078125,4310.416259765625,-3016.66650390625,8222.916015625,3447.91650390625,3912.499755859375}, - ['micro'] = { - - }, - } - mapData[43] = { - ['floors'] = 0, ['name'] = "Ashenvale", ['rzti'] = 1, ['map_type'] = 0, ['continent'] = 2, ['transform'] = 0, - [1] = {5766.6663818359375,3843.7498779296875,-1699.9998779296875,4672.91650390625,4066.66650390625,829.1666259765625}, - ['micro'] = { - - }, - } - mapData[61] = { - ['floors'] = 0, ['name'] = "ThousandNeedles", ['rzti'] = 1, ['map_type'] = 0, ['continent'] = 2, ['transform'] = 0, - [1] = {4399.999694824219,2933.3330078125,433.33331298828125,-3966.66650390625,4833.3330078125,-6899.99951171875}, - ['micro'] = { - - }, - } - mapData[81] = { - ['floors'] = 0, ['name'] = "StonetalonMountains", ['rzti'] = 1, ['map_type'] = 0, ['continent'] = 2, ['transform'] = 0, - [1] = {5899.9998779296875,3933.3331298828125,-3902.083251953125,3404.16650390625,1997.9166259765625,-529.1666259765625}, - ['micro'] = { - - }, - } - mapData[101] = { - ['floors'] = 0, ['name'] = "Desolace", ['rzti'] = 1, ['map_type'] = 0, ['continent'] = 2, ['transform'] = 0, - [1] = {4495.8330078125,2997.9165649414062,-4233.3330078125,452.08331298828125,262.5,-2545.833251953125}, - ['micro'] = { - - }, - } - mapData[121] = { - ['floors'] = 0, ['name'] = "Feralas", ['rzti'] = 1, ['map_type'] = 0, ['continent'] = 2, ['transform'] = 0, - [1] = {6949.999755859375,4633.3330078125,-5441.66650390625,-2366.66650390625,1508.333251953125,-6999.99951171875}, - ['micro'] = { - - }, - } - mapData[141] = { - ['floors'] = 0, ['name'] = "Dustwallow", ['rzti'] = 1, ['map_type'] = 0, ['continent'] = 2, ['transform'] = 0, - [1] = {5250.0,3500.0,975.0,-2033.333984375,6225.0,-5533.333984375}, - ['micro'] = { - - }, - } - mapData[161] = { - ['floors'] = 0, ['name'] = "Tanaris", ['rzti'] = 1, ['map_type'] = 0, ['continent'] = 2, ['transform'] = 0, - [1] = {7212.499515533447,4808.3330078125,62.499996185302734,-5770.8330078125,7274.99951171875,-10579.166015625}, - ['micro'] = { - - }, - } - mapData[181] = { - ['floors'] = 0, ['name'] = "Aszhara", ['rzti'] = 1, ['map_type'] = 0, ['continent'] = 2, ['transform'] = 0, - [1] = {5514.58349609375,3677.0833740234375,3372.91650390625,5381.25,8887.5,1704.1666259765625}, - ['micro'] = { - - }, - } - mapData[182] = { - ['floors'] = 0, ['name'] = "Felwood", ['rzti'] = 1, ['map_type'] = 0, ['continent'] = 2, ['transform'] = 0, - [1] = {6062.4996337890625,4041.666259765625,-1797.9166259765625,7237.49951171875,4264.5830078125,3195.833251953125}, - ['micro'] = { - - }, - } - mapData[201] = { - ['floors'] = 0, ['name'] = "UngoroCrater", ['rzti'] = 1, ['map_type'] = 0, ['continent'] = 2, ['transform'] = 0, - [1] = {3699.9998168945312,2466.66650390625,-533.3333129882812,-5966.66650390625,3166.66650390625,-8433.3330078125}, - ['micro'] = { - - }, - } - mapData[241] = { - ['floors'] = 0, ['name'] = "Moonglade", ['rzti'] = 1, ['map_type'] = 0, ['continent'] = 2, ['transform'] = 0, - [1] = {2308.333251953125,1539.5830078125,1381.25,8491.666015625,3689.583251953125,6952.0830078125}, - ['micro'] = { - - }, - } - mapData[261] = { - ['floors'] = 0, ['name'] = "Silithus", ['rzti'] = 1, ['map_type'] = 0, ['continent'] = 2, ['transform'] = 0, - [1] = {4058.333251953125,2706.24951171875,-2983.333251953125,-5872.91650390625,1075.0,-8579.166015625}, - ['micro'] = { - - }, - } - mapData[281] = { - ['floors'] = 0, ['name'] = "Winterspring", ['rzti'] = 1, ['map_type'] = 0, ['continent'] = 2, ['transform'] = 0, - [1] = {6149.9998779296875,4100.0,991.6666259765625,8793.75,7141.66650390625,4693.75}, - ['micro'] = { - - }, - } - mapData[301] = { - ['floors'] = 0, ['name'] = "StormwindCity", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {1737.4999589920044,1158.3330078125,-1722.9166259765625,-7995.8330078125,14.583333015441895,-9154.166015625}, - ['micro'] = { - - }, - } - mapData[321] = { - ['floors'] = 1, ['name'] = "Orgrimmar", ['rzti'] = 1, ['map_type'] = 0, ['continent'] = 2, ['transform'] = 0, - [1] = {1739.375,1159.58349609375,3506.35400390625,2486.666748046875,5245.72900390625,1327.083251953125}, - ['micro'] = { - - }, - } - mapData[341] = { - ['floors'] = 0, ['name'] = "Ironforge", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {790.6250610351562,527.6044921875,713.5913696289062,-4569.2412109375,1504.2164306640625,-5096.845703125}, - ['micro'] = { - - }, - } - mapData[362] = { - ['floors'] = 0, ['name'] = "ThunderBluff", ['rzti'] = 1, ['map_type'] = 0, ['continent'] = 2, ['transform'] = 0, - [1] = {1043.7499389648438,695.8333129882812,-516.6666259765625,-849.9999389648438,527.0833129882812,-1545.833251953125}, - ['micro'] = { - - }, - } - mapData[381] = { - ['floors'] = 0, ['name'] = "Darnassus", ['rzti'] = 1, ['map_type'] = 0, ['continent'] = 2, ['transform'] = 0, - [1] = {1539.5833740234375,1027.0830078125,-3187.5,10464.5830078125,-1647.9166259765625,9437.5}, - ['micro'] = { - - }, - } - mapData[382] = { - ['floors'] = 0, ['name'] = "Undercity", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {959.3750305175781,640.1041259765625,-873.192626953125,1877.9453125,86.18240356445312,1237.8411865234375}, - ['micro'] = { - - }, - } - mapData[401] = { - ['floors'] = 0, ['name'] = "AlteracValley", ['rzti'] = 30, ['map_type'] = 3, ['continent'] = 0, ['transform'] = 0, - [1] = {4237.4998779296875,2824.9998779296875,-1781.2498779296875,1085.4166259765625,2456.25,-1739.583251953125}, - ['micro'] = { - - }, - } - mapData[443] = { - ['floors'] = 0, ['name'] = "WarsongGulch", ['rzti'] = 489, ['map_type'] = 3, ['continent'] = 0, ['transform'] = 0, - [1] = {1145.8333129882812,764.5833129882812,-2041.6666259765625,1627.083251953125,-895.8333129882812,862.4999389648438}, - ['micro'] = { - - }, - } - mapData[461] = { - ['floors'] = 0, ['name'] = "ArathiBasin", ['rzti'] = 529, ['map_type'] = 3, ['continent'] = 0, ['transform'] = 0, - [1] = {1756.2499237060547,1170.833251953125,-1858.333251953125,1508.333251953125,-102.08332824707031,337.5}, - ['micro'] = { - - }, - } - mapData[462] = { - ['floors'] = 0, ['name'] = "EversongWoods", ['rzti'] = 530, ['map_type'] = 0, ['continent'] = 2, ['transform'] = 1, - [1] = {4925.0,3283.3330078125,4487.5,11041.666015625,9412.5,7758.3330078125}, - ['micro'] = { - - }, - } - mapData[463] = { - ['floors'] = 0, ['name'] = "Ghostlands", ['rzti'] = 530, ['map_type'] = 0, ['continent'] = 2, ['transform'] = 1, - [1] = {3300.0,2199.99951171875,5283.3330078125,8266.666015625,8583.3330078125,6066.66650390625}, - ['micro'] = { - - }, - } - mapData[464] = { - ['floors'] = 0, ['name'] = "AzuremystIsle", ['rzti'] = 530, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 1, - [1] = {4070.8330078125,2714.5830078125,10500.0,-2793.75,14570.8330078125,-5508.3330078125}, - ['micro'] = { - - }, - } - mapData[465] = { - ['floors'] = 0, ['name'] = "Hellfire", ['rzti'] = 530, ['map_type'] = 0, ['continent'] = 3, ['transform'] = 1, - [1] = {5164.5830078125,3443.7498779296875,-5539.5830078125,1481.25,-375.0,-1962.4998779296875}, - ['micro'] = { - - }, - } - mapData[466] = { - ['floors'] = 0, ['name'] = "Expansion01", ['rzti'] = 530, ['map_type'] = 0, ['continent'] = 3, ['transform'] = 1, - [1] = {17464.078125,11642.71875,-12996.0390625,5821.359375,4468.0390625,-5821.359375}, - ['micro'] = { - - }, - } - mapData[467] = { - ['floors'] = 0, ['name'] = "Zangarmarsh", ['rzti'] = 530, ['map_type'] = 0, ['continent'] = 3, ['transform'] = 1, - [1] = {5027.08349609375,3352.083251953125,-9475.0,1935.4166259765625,-4447.91650390625,-1416.6666259765625}, - ['micro'] = { - - }, - } - mapData[471] = { - ['floors'] = 0, ['name'] = "TheExodar", ['rzti'] = 530, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 1, - [1] = {1056.7705078125,704.687744140625,11066.3671875,-3609.683349609375,12123.1376953125,-4314.37109375}, - ['micro'] = { - - }, - } - mapData[473] = { - ['floors'] = 0, ['name'] = "ShadowmoonValley", ['rzti'] = 530, ['map_type'] = 0, ['continent'] = 3, ['transform'] = 1, - [1] = {5500.0,3666.6663818359375,-4225.0,-1947.9166259765625,1275.0,-5614.5830078125}, - ['micro'] = { - - }, - } - mapData[475] = { - ['floors'] = 0, ['name'] = "BladesEdgeMountains", ['rzti'] = 530, ['map_type'] = 0, ['continent'] = 3, ['transform'] = 1, - [1] = {5424.999755859375,3616.6663818359375,-8845.8330078125,4408.3330078125,-3420.833251953125,791.6666259765625}, - ['micro'] = { - - }, - } - mapData[476] = { - ['floors'] = 0, ['name'] = "BloodmystIsle", ['rzti'] = 530, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 1, - [1] = {3262.4990234375,2174.9999389648438,10075.0,-758.3333129882812,13337.4990234375,-2933.333251953125}, - ['micro'] = { - - }, - } - mapData[477] = { - ['floors'] = 0, ['name'] = "Nagrand", ['rzti'] = 530, ['map_type'] = 0, ['continent'] = 3, ['transform'] = 1, - [1] = {5525.0,3683.333168029785,-10295.8330078125,41.666664123535156,-4770.8330078125,-3641.66650390625}, - ['micro'] = { - - }, - } - mapData[478] = { - ['floors'] = 0, ['name'] = "TerokkarForest", ['rzti'] = 530, ['map_type'] = 0, ['continent'] = 3, ['transform'] = 1, - [1] = {5399.999755859375,3600.0000610351562,-7083.3330078125,-999.9999389648438,-1683.333251953125,-4600.0}, - ['micro'] = { - - }, - } - mapData[479] = { - ['floors'] = 0, ['name'] = "Netherstorm", ['rzti'] = 530, ['map_type'] = 0, ['continent'] = 3, ['transform'] = 1, - [1] = {5574.999671936035,3716.666748046875,-5483.3330078125,5456.25,91.66666412353516,1739.583251953125}, - ['micro'] = { - - }, - } - mapData[480] = { - ['floors'] = 0, ['name'] = "SilvermoonCity", ['rzti'] = 530, ['map_type'] = 0, ['continent'] = 2, ['transform'] = 1, - [1] = {1211.45849609375,806.7705078125,6400.75,10153.708984375,7612.20849609375,9346.9384765625}, - ['micro'] = { - - }, - } - mapData[481] = { - ['floors'] = 0, ['name'] = "ShattrathCity", ['rzti'] = 530, ['map_type'] = 0, ['continent'] = 3, ['transform'] = 1, - [1] = {1306.25,870.8333740234375,-6135.2587890625,-1473.9544677734375,-4829.0087890625,-2344.787841796875}, - ['micro'] = { - - }, - } - mapData[482] = { - ['floors'] = 0, ['name'] = "NetherstormArena", ['rzti'] = 566, ['map_type'] = 3, ['continent'] = 0, ['transform'] = 0, - [1] = {2270.8331909179688,1514.5833740234375,-2660.41650390625,2918.75,-389.58331298828125,1404.1666259765625}, - ['micro'] = { - - }, - } - mapData[485] = { - ['floors'] = 0, ['name'] = "Northrend", ['rzti'] = 571, ['map_type'] = 0, ['continent'] = 4, ['transform'] = 0, - [1] = {17751.3984375,11834.265014648438,-9217.15234375,10593.375,8534.24609375,-1240.8900146484375}, - ['micro'] = { - - }, - } - mapData[486] = { - ['floors'] = 0, ['name'] = "BoreanTundra", ['rzti'] = 571, ['map_type'] = 0, ['continent'] = 4, ['transform'] = 0, - [1] = {5764.5830078125,3843.7498779296875,-8570.8330078125,4897.91650390625,-2806.25,1054.1666259765625}, - ['micro'] = { - - }, - } - mapData[488] = { - ['floors'] = 0, ['name'] = "Dragonblight", ['rzti'] = 571, ['map_type'] = 0, ['continent'] = 4, ['transform'] = 0, - [1] = {5608.3331298828125,3739.5833740234375,-3627.083251953125,5575.0,1981.2498779296875,1835.4166259765625}, - ['micro'] = { - - }, - } - mapData[490] = { - ['floors'] = 0, ['name'] = "GrizzlyHills", ['rzti'] = 571, ['map_type'] = 0, ['continent'] = 4, ['transform'] = 0, - [1] = {5249.9998779296875,3499.9998779296875,1110.4166259765625,5516.66650390625,6360.41650390625,2016.6666259765625}, - ['micro'] = { - - }, - } - mapData[491] = { - ['floors'] = 0, ['name'] = "HowlingFjord", ['rzti'] = 571, ['map_type'] = 0, ['continent'] = 4, ['transform'] = 0, - [1] = {6045.8328857421875,4031.2498168945312,1397.9166259765625,3116.66650390625,7443.74951171875,-914.5833129882812}, - ['micro'] = { - - }, - } - mapData[492] = { - ['floors'] = 0, ['name'] = "IcecrownGlacier", ['rzti'] = 571, ['map_type'] = 0, ['continent'] = 4, ['transform'] = 0, - [1] = {6270.833312988281,4181.25,-5443.75,9427.0830078125,827.0833129882812,5245.8330078125}, - ['micro'] = { - - }, - } - mapData[493] = { - ['floors'] = 0, ['name'] = "SholazarBasin", ['rzti'] = 571, ['map_type'] = 0, ['continent'] = 4, ['transform'] = 0, - [1] = {4356.25,2904.16650390625,-6929.16650390625,7287.49951171875,-2572.91650390625,4383.3330078125}, - ['micro'] = { - - }, - } - mapData[495] = { - ['floors'] = 0, ['name'] = "TheStormPeaks", ['rzti'] = 571, ['map_type'] = 0, ['continent'] = 4, ['transform'] = 0, - [1] = {7112.4996337890625,4741.666015625,-1841.6666259765625,10197.916015625,5270.8330078125,5456.25}, - ['micro'] = { - - }, - } - mapData[496] = { - ['floors'] = 0, ['name'] = "ZulDrak", ['rzti'] = 571, ['map_type'] = 0, ['continent'] = 4, ['transform'] = 0, - [1] = {4993.75,3329.16650390625,600.0,7668.74951171875,5593.75,4339.5830078125}, - ['micro'] = { - - }, - } - mapData[499] = { - ['floors'] = 0, ['name'] = "Sunwell", ['rzti'] = 530, ['map_type'] = 0, ['continent'] = 2, ['transform'] = 1, - [1] = {3327.0830078125,2218.7490234375,5302.0830078125,13568.7490234375,8629.166015625,11350.0}, - ['micro'] = { - - }, - } - mapData[501] = { - ['floors'] = 0, ['name'] = "LakeWintergrasp", ['rzti'] = 571, ['map_type'] = 0, ['continent'] = 4, ['transform'] = 0, - [1] = {2974.9998779296875,1983.333251953125,-4329.16650390625,5716.66650390625,-1354.1666259765625,3733.333251953125}, - ['micro'] = { - - }, - } - mapData[502] = { - ['floors'] = 0, ['name'] = "ScarletEnclave", ['rzti'] = 609, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {3162.5,2108.3333740234375,4047.91650390625,3087.5,7210.41650390625,979.1666259765625}, - ['micro'] = { - - }, - } - mapData[504] = { - ['floors'] = 2, ['name'] = "Dalaran", ['rzti'] = 571, ['map_type'] = 0, ['continent'] = 4, ['transform'] = 0, - [1] = { 830.0150146484375,553.33984375,-222.4949951171875,5513.330078125,-1052.510009765625,6066.669921875 }, - [2] = { 563.2239990234375,375.48974609375,-352.64599609375,5599.85009765625,-915.8699951171875,5975.33984375 }, - ['micro'] = { - - }, - } - mapData[510] = { - ['floors'] = 0, ['name'] = "CrystalsongForest", ['rzti'] = 571, ['map_type'] = 0, ['continent'] = 4, ['transform'] = 0, - [1] = {2722.9166259765625,1814.5830078125,-1443.75,6502.0830078125,1279.1666259765625,4687.5}, - ['micro'] = { - - }, - } - mapData[512] = { - ['floors'] = 0, ['name'] = "StrandoftheAncients", ['rzti'] = 607, ['map_type'] = 3, ['continent'] = 0, ['transform'] = 0, - [1] = {1743.7499389648438,1162.4999389648438,-787.5,1883.333251953125,956.2499389648438,720.8333129882812}, - ['micro'] = { - - }, - } - mapData[520] = { - ['floors'] = 1, ['name'] = "TheNexus", ['rzti'] = 576, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 1101.2809753417969,734.1875,708.0689697265625,64.07550048828125,-393.2120056152344,798.2630004882812 }, - ['micro'] = { - - }, - } - mapData[521] = { - ['floors'] = 2, ['name'] = "CoTStratholme", ['rzti'] = 595, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = {1824.9999389648438,1216.66650390625,-2152.083251953125,2297.91650390625,-327.08331298828125,1081.25}, - [2] = { 1125.2999877929688,750.199951171875,-731.0599975585938,1891.760009765625,-1856.3599853515625,2641.9599609375 }, - ['micro'] = { - - }, - } - mapData[522] = { - ['floors'] = 1, ['name'] = "Ahnkahet", ['rzti'] = 619, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 972.41796875,648.2790222167969,1205.719970703125,200.40499877929688,233.302001953125,848.6840209960938 }, - ['micro'] = { - - }, - } - mapData[523] = { - ['floors'] = 3, ['name'] = "UtgardeKeep", ['rzti'] = 574, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 734.5809936523438,489.7215003967285,310.406005859375,25.666500091552734,-424.17498779296875,515.3880004882812 }, - [2] = { 481.0810089111328,320.72029304504395,238.156005859375,-16.33329963684082,-242.9250030517578,304.3869934082031 }, - [3] = { 736.5810089111328,491.0545120239258,510.906005859375,-75.33350372314453,-225.6750030517578,415.72100830078125 }, - ['micro'] = { - - }, - } - mapData[524] = { - ['floors'] = 2, ['name'] = "UtgardePinnacle", ['rzti'] = 575, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 548.9360198974609,365.95701599121094,697.5590209960938,186.9199981689453,148.6230010986328,552.8770141601562 }, - [2] = { 756.1799430847168,504.11900329589844,747.5579833984375,157.83900451660156,-8.621959686279297,661.9580078125 }, - ['micro'] = { - - }, - } - mapData[525] = { - ['floors'] = 2, ['name'] = "HallsofLightning", ['rzti'] = 602, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 566.2350158691406,377.489990234375,282.54901123046875,1157.050048828125,-283.6860046386719,1534.5400390625 }, - [2] = { 708.2370147705078,472.1600341796875,538.5490112304688,959.719970703125,-169.68800354003906,1431.8800048828125 }, - ['micro'] = { - - }, - } - mapData[526] = { - ['floors'] = 1, ['name'] = "Ulduar77", ['rzti'] = 599, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 920.1960144042969,613.466064453125,-206.32400512695312,762.4439697265625,-1126.52001953125,1375.9100341796875 }, - ['micro'] = { - - }, - } - mapData[527] = { - ['floors'] = 1, ['name'] = "TheEyeofEternity", ['rzti'] = 616, ['map_type'] = 2, ['continent'] = 0, ['transform'] = 0, - [1] = { 430.070068359375,286.7130126953125,-1036.7099609375,611.1279907226562,-1466.780029296875,897.8410034179688 }, - ['micro'] = { - - }, - } - mapData[528] = { - ['floors'] = 4, ['name'] = "Nexus80", ['rzti'] = 578, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 514.7069702148438,343.13897705078125,-787.2529907226562,877.0709838867188,-1301.9599609375,1220.2099609375 }, - [2] = { 664.7069702148438,443.13897705078125,-712.2529907226562,927.0709838867188,-1376.9599609375,1370.2099609375 }, - [3] = { 514.7069702148438,343.13897705078125,-787.2529907226562,927.0709838867188,-1301.9599609375,1270.2099609375 }, - [4] = { 294.70098876953125,196.4639892578125,-897.2589721679688,990.406005859375,-1191.9599609375,1186.8699951171875 }, - ['micro'] = { - - }, - } - mapData[529] = { - ['floors'] = 6, ['name'] = "Ulduar", ['rzti'] = 603, ['map_type'] = 2, ['continent'] = 0, ['transform'] = 0, - [1] = {3287.4998779296875,2191.6666259765625,-1583.333251953125,1168.75,1704.1666259765625,-1022.9166259765625}, - [2] = { 669.4509887695312,446.300048828125,445.2349853515625,1392.7099609375,-224.21600341796875,1839.010009765625 }, - [3] = { 1328.4609985351562,885.639892578125,674.739990234375,1679.0400390625,-653.7210083007812,2564.679931640625 }, - [4] = { 910.5,607.0,315.75,1612.0,-594.75,2219.0 }, - [5] = { 1569.4599609375,1046.300048828125,-1684.989990234375,2122.530029296875,-3254.449951171875,3168.830078125 }, - [6] = { 619.468994140625,412.97998046875,310.0140075683594,1834.77001953125,-309.4549865722656,2247.75 }, - ['micro'] = { - - }, - } - mapData[530] = { - ['floors'] = 1, ['name'] = "Gundrak", ['rzti'] = 604, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 905.0330505371094,603.35009765625,-259.8869934082031,1465.52001953125,-1164.9200439453125,2068.8701171875 }, - ['micro'] = { - - }, - } - mapData[531] = { - ['floors'] = 0, ['name'] = "TheObsidianSanctum", ['rzti'] = 615, ['map_type'] = 2, ['continent'] = 0, ['transform'] = 0, - [1] = {1162.4999179840088,775.0,-1133.333251953125,3616.66650390625,29.16666603088379,2841.66650390625}, - ['micro'] = { - - }, - } - mapData[532] = { - ['floors'] = 1, ['name'] = "VaultofArchavon", ['rzti'] = 624, ['map_type'] = 2, ['continent'] = 0, ['transform'] = 0, - [1] = { 1398.2550048828125,932.1700134277344,812.5189819335938,-634.0800170898438,-585.7360229492188,298.0899963378906 }, - ['micro'] = { - - }, - } - mapData[533] = { - ['floors'] = 3, ['name'] = "AzjolNerub", ['rzti'] = 601, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 752.9739990234375,501.9830017089844,30.0,292.1419982910156,-722.9739990234375,794.125 }, - [2] = { 292.9739990234375,195.31597900390625,-400.0,450.4739990234375,-692.9739990234375,645.7899780273438 }, - [3] = { 367.5,245.0,-462.125,395.0,-829.625,640.0 }, - ['micro'] = { - - }, - } - mapData[534] = { - ['floors'] = 2, ['name'] = "DrakTharonKeep", ['rzti'] = 600, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 619.9410095214844,413.2939910888672,927.010009765625,-595.8599853515625,307.0690002441406,-182.5659942626953 }, - [2] = { 619.9410095214844,413.2939910888672,1002.010009765625,-595.8599853515625,382.0690002441406,-182.5659942626953 }, - ['micro'] = { - - }, - } - mapData[535] = { - ['floors'] = 6, ['name'] = "Naxxramas", ['rzti'] = 533, ['map_type'] = 2, ['continent'] = 0, ['transform'] = 0, - [1] = { 1093.830078125,729.219970703125,3734.10009765625,2886.610107421875,2640.27001953125,3615.830078125 }, - [2] = { 1093.830078125,729.219970703125,4234.10009765625,2886.610107421875,3140.27001953125,3615.830078125 }, - [3] = { 1200.0,800.0,3787.0,2336.0,2587.0,3136.0 }, - [4] = { 1200.330078125,800.219970703125,4287.35009765625,2336.610107421875,3087.02001953125,3136.830078125 }, - [5] = { 2069.809814453125,1379.8798828125,4400.08984375,2311.340087890625,2330.280029296875,3691.219970703125 }, - [6] = { 655.93994140625,437.2900390625,5522.2900390625,3379.25,4866.35009765625,3816.5400390625 }, - ['micro'] = { - - }, - } - mapData[536] = { - ['floors'] = 1, ['name'] = "VioletHold", ['rzti'] = 608, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 256.22900390625,170.820068359375,-665.3469848632812,1813.3499755859375,-921.5759887695312,1984.1700439453125 }, - ['micro'] = { - - }, - } - mapData[539] = { - ['floors'] = 0, ['name'] = "GilneasX", ['rzti'] = 638, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {3145.833251953125,2097.9166870117188,-3439.583251953125,-533.3333129882812,-293.75,-2631.25}, - ['micro'] = { - - }, - } - mapData[540] = { - ['floors'] = 0, ['name'] = "IsleofConquest", ['rzti'] = 628, ['map_type'] = 3, ['continent'] = 0, ['transform'] = 0, - [1] = {2650.0,1766.6665840148926,-525.0,1708.333251953125,2125.0,-58.33333206176758}, - ['micro'] = { - - }, - } - mapData[541] = { - ['floors'] = 0, ['name'] = "HrothgarsLanding", ['rzti'] = 571, ['map_type'] = 0, ['continent'] = 4, ['transform'] = 0, - [1] = {3677.0831298828125,2452.083984375,-2797.91650390625,10781.25,879.1666259765625,8329.166015625}, - ['micro'] = { - - }, - } - mapData[542] = { - ['floors'] = 1, ['name'] = "TheArgentColiseum", ['rzti'] = 650, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 369.9861869812012,246.65798950195312,41.25519943237305,446.3609924316406,-328.7309875488281,693.0189819335938 }, - ['micro'] = { - - }, - } - mapData[543] = { - ['floors'] = 2, ['name'] = "TheArgentColiseum", ['rzti'] = 649, ['map_type'] = 2, ['continent'] = 0, ['transform'] = 0, - [1] = { 369.9861869812012,246.65798950195312,41.25519943237305,446.3609924316406,-328.7309875488281,693.0189819335938 }, - [2] = { 739.9960174560547,493.33001708984375,211.25999450683594,433.02398681640625,-528.7360229492188,926.35400390625 }, - ['micro'] = { - - }, - } - mapData[544] = { - ['floors'] = 0, ['name'] = "TheLostIsles", ['rzti'] = 648, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {4514.5830078125,3010.4166564941406,-4383.3330078125,2881.25,131.25,-129.16665649414062}, - ['micro'] = { - - }, - } - mapData[545] = { - ['floors'] = 3, ['name'] = "Gilneas", ['rzti'] = 654, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = { 420.0,280.0,-720.0,-1260.0,-1140.0,-980.0 }, - [2] = { 250.4697265625,166.97998046875,-2459.76513671875,-1666.989990234375,-2710.23486328125,-1500.010009765625 }, - [3] = { 280.4697265625,186.97998046875,-2444.76513671875,-1666.989990234375,-2725.23486328125,-1480.010009765625 }, - ['micro'] = { - - }, - } - mapData[601] = { - ['floors'] = 1, ['name'] = "TheForgeofSouls", ['rzti'] = 632, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 1448.099853515625,965.400390625,-1686.030029296875,4814.52978515625,-3134.1298828125,5779.93017578125 }, - ['micro'] = { - - }, - } - mapData[602] = { - ['floors'] = 0, ['name'] = "PitofSaron", ['rzti'] = 658, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = {1533.3333129882812,1022.9166717529297,-839.5833129882812,1256.25,693.75,233.3333282470703}, - ['micro'] = { - - }, - } - mapData[603] = { - ['floors'] = 1, ['name'] = "HallsofReflection", ['rzti'] = 668, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 879.02001953125,586.01953125,-1469.989990234375,5126.990234375,-2349.010009765625,5713.009765625 }, - ['micro'] = { - - }, - } - mapData[604] = { - ['floors'] = 8, ['name'] = "IcecrownCitadel", ['rzti'] = 631, ['map_type'] = 2, ['continent'] = 0, ['transform'] = 0, - [1] = { 1355.4700927734375,903.6470336914062,-1384.3299560546875,-764.8400268554688,-2739.800048828125,138.8070068359375 }, - [2] = { 1067.0,711.3336906433105,-1631.0,-754.6669921875,-2698.0,-43.33330154418945 }, - [3] = { 195.469970703125,130.31500244140625,-2116.330078125,-580.31298828125,-2311.800048828125,-449.99798583984375 }, - [4] = { 773.7100830078125,515.810302734375,-1993.5699462890625,4012.409912109375,-2767.280029296875,4528.22021484375 }, - [5] = { 1148.739990234375,765.820068359375,-2216.06005859375,4002.409912109375,-3364.800048828125,4768.22998046875 }, - [6] = { 373.7099609375,249.1298828125,-2586.570068359375,4455.75,-2960.280029296875,4704.8798828125 }, - [7] = { 293.260009765625,195.50701904296875,2271.550048828125,410.2919921875,1978.2900390625,605.7990112304688 }, - [8] = { 247.929931640625,165.28799438476562,2648.260009765625,414.1080017089844,2400.330078125,579.39599609375 }, - ['micro'] = { - - }, - } - mapData[605] = { - ['floors'] = 0, ['name'] = "Kezan", ['rzti'] = 648, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {1352.0831909179688,900.00048828125,-2129.16650390625,-7731.24951171875,-777.0833129882812,-8631.25}, - ['micro'] = { - - }, - } - mapData[606] = { - ['floors'] = 0, ['name'] = "Hyjal", ['rzti'] = 1, ['map_type'] = 0, ['continent'] = 2, ['transform'] = 0, - [1] = {4245.8333740234375,2831.249755859375,929.1666259765625,6195.8330078125,5175.0,3364.583251953125}, - ['micro'] = { - - }, - } - mapData[607] = { - ['floors'] = 0, ['name'] = "SouthernBarrens", ['rzti'] = 1, ['map_type'] = 0, ['continent'] = 2, ['transform'] = 0, - [1] = {7412.5,4941.666656494141,-1356.25,204.16665649414062,6056.25,-4737.5}, - ['micro'] = { - - }, - } - mapData[609] = { - ['floors'] = 0, ['name'] = "TheRubySanctum", ['rzti'] = 724, ['map_type'] = 2, ['continent'] = 0, ['transform'] = 0, - [1] = {752.0833129882812,502.083251953125,-902.0833129882812,3429.16650390625,-150.0,2927.083251953125}, - ['micro'] = { - - }, - } - mapData[610] = { - ['floors'] = 0, ['name'] = "VashjirKelpForest", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {2802.0830078125,1868.750244140625,-5070.8330078125,-4018.749755859375,-2268.75,-5887.5}, - ['micro'] = { - - }, - } - mapData[611] = { - ['floors'] = 0, ['name'] = "GilneasCity", ['rzti'] = 654, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {889.583251953125,593.7498779296875,-1933.333251953125,-1306.25,-1043.75,-1899.9998779296875}, - ['micro'] = { - - }, - } - mapData[613] = { - ['floors'] = 0, ['name'] = "Vashjir", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {6945.832763671875,4631.249755859375,-8754.166015625,-3720.833251953125,-1808.333251953125,-8352.0830078125}, - ['micro'] = { - - }, - } - mapData[614] = { - ['floors'] = 0, ['name'] = "VashjirDepths", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {4075.0,2716.66650390625,-8233.3330078125,-4906.25,-4158.3330078125,-7622.91650390625}, - ['micro'] = { - - }, - } - mapData[615] = { - ['floors'] = 0, ['name'] = "VashjirRuins", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {4849.9996337890625,3233.3330078125,-6681.24951171875,-4756.25,-1831.2498779296875,-7989.5830078125}, - ['micro'] = { - - }, - } - mapData[626] = { - ['floors'] = 0, ['name'] = "TwinPeaks", ['rzti'] = 726, ['map_type'] = 3, ['continent'] = 0, ['transform'] = 0, - [1] = {1214.583251953125,810.41650390625,-931.2499389648438,2266.66650390625,283.33331298828125,1456.25}, - ['micro'] = { - - }, - } - mapData[640] = { - ['floors'] = 0, ['name'] = "Deepholm", ['rzti'] = 646, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {5099.9998779296875,3399.9998779296875,-3052.083251953125,2795.833251953125,2047.9166259765625,-604.1666259765625}, - ['micro'] = { - - }, - } - mapData[673] = { - ['floors'] = 0, ['name'] = "TheCapeOfStranglethorn", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {3945.8331298828125,2631.25,-2108.333251953125,-12516.666015625,1837.4998779296875,-15147.916015625}, - ['micro'] = { - - }, - } - mapData[677] = { - ['floors'] = 0, ['name'] = "BattleforGilneas", ['rzti'] = 728, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = {889.583251953125,593.7498779296875,-1933.333251953125,-1306.25,-1043.75,-1899.9998779296875}, - ['micro'] = { - - }, - } - mapData[678] = { - ['floors'] = 0, ['name'] = "Gilneas_terrain1", ['rzti'] = 654, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {3145.833251953125,2097.9166870117188,-3439.583251953125,-533.3333129882812,-293.75,-2631.25}, - ['micro'] = { - - }, - } - mapData[679] = { - ['floors'] = 0, ['name'] = "Gilneas_terrain2", ['rzti'] = 654, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {3145.833251953125,2097.9166870117188,-3439.583251953125,-533.3333129882812,-293.75,-2631.25}, - ['micro'] = { - - }, - } - mapData[680] = { - ['floors'] = 1, ['name'] = "Ragefire", ['rzti'] = 389, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 738.864013671875,492.5762023925781,285.9930114746094,-452.9530029296875,-452.8710021972656,39.623199462890625 }, - ['micro'] = { - - }, - } - mapData[681] = { - ['floors'] = 7, ['name'] = "TheLostIsles_terrain1", ['rzti'] = 648, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = { 274.0,182.6666259765625,-2815.0,514.1666870117188,-3089.0,696.8333129882812 }, - [2] = { 1012.5,675.0,-716.25,825.0,-1728.75,1500.0 }, - [3] = { 528.0001220703125,352.0001220703125,-1622.4998779296875,1716.5999755859375,-2150.5,2068.60009765625 }, - [4] = { 327.489990234375,218.32666015625,-1752.510009765625,1748.4366455078125,-2080.0,1966.7633056640625 }, - [5] = { 175.0,116.666015625,-1057.5,-8438.3330078125,-1232.5,-8321.6669921875 }, - [6] = { 175.0,116.666015625,-997.5,-8568.3330078125,-1172.5,-8451.6669921875 }, - [7] = { 330.0,220.0,-1130.0,-8700.0,-1460.0,-8480.0 }, - ['micro'] = { - - }, - } - mapData[682] = { - ['floors'] = 0, ['name'] = "TheLostIsles_terrain2", ['rzti'] = 648, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {4514.5830078125,3010.4166564941406,-4383.3330078125,2881.25,131.25,-129.16665649414062}, - ['micro'] = { - - }, - } - mapData[683] = { - ['floors'] = 0, ['name'] = "Hyjal_terrain1", ['rzti'] = 1, ['map_type'] = 0, ['continent'] = 2, ['transform'] = 0, - [1] = {4245.8333740234375,2831.249755859375,929.1666259765625,6195.8330078125,5175.0,3364.583251953125}, - ['micro'] = { - - }, - } - mapData[684] = { - ['floors'] = 0, ['name'] = "RuinsofGilneas", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {3145.833251953125,2097.9166870117188,-3439.583251953125,-533.3333129882812,-293.75,-2631.25}, - ['micro'] = { - - }, - } - mapData[685] = { - ['floors'] = 0, ['name'] = "RuinsofGilneasCity", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {889.583251953125,593.7498779296875,-1933.333251953125,-1306.25,-1043.75,-1899.9998779296875}, - ['micro'] = { - - }, - } - mapData[686] = { - ['floors'] = 0, ['name'] = "ZulFarrak", ['rzti'] = 209, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = {1383.3332214355469,922.9166259765625,-1624.9998779296875,2052.083251953125,-241.66665649414062,1129.1666259765625}, - ['micro'] = { - - }, - } - mapData[687] = { - ['floors'] = 1, ['name'] = "TheTempleOfAtalHakkar", ['rzti'] = 109, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 695.0289916992188,463.3529815673828,252.27099609375,-718.5189819335938,-442.75799560546875,-255.16600036621094 }, - ['micro'] = { - - }, - } - mapData[688] = { - ['floors'] = 3, ['name'] = "BlackfathomDeeps", ['rzti'] = 48, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 884.2200012207031,589.4799728393555,381.2959899902344,-677.14697265625,-502.92401123046875,-87.66699981689453 }, - [2] = { 884.2200317382812,589.4800109863281,581.2960205078125,-927.14697265625,-302.92401123046875,-337.6669616699219 }, - [3] = { 284.22400426864624,189.482666015625,281.2980041503906,-877.1483154296875,-2.9260001182556152,-687.6656494140625 }, - ['micro'] = { - - }, - } - mapData[689] = { - ['floors'] = 0, ['name'] = "StranglethornVale", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {6552.0830078125,4368.75,-2977.083251953125,-10964.5830078125,3574.999755859375,-15333.3330078125}, - ['micro'] = { - - }, - } - mapData[690] = { - ['floors'] = 1, ['name'] = "TheStockade", ['rzti'] = 34, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 378.1529998779297,252.10249519348145,188.33099365234375,-31.469499588012695,-189.82200622558594,220.63299560546875 }, - ['micro'] = { - - }, - } - mapData[691] = { - ['floors'] = 4, ['name'] = "Gnomeregan", ['rzti'] = 90, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 769.6679992675781,513.1119995117188,277.7720031738281,-694.0,-491.89599609375,-180.88800048828125 }, - [2] = { 769.6679992675781,513.1119995117188,77.77200317382812,-714.0,-691.89599609375,-200.88800048828125 }, - [3] = { 869.6679992675781,579.7780151367188,127.77200317382812,-967.3330078125,-741.89599609375,-387.55499267578125 }, - [4] = { 869.6697082519531,579.7799987792969,-72.99929809570312,-937.333984375,-942.6690063476562,-357.5539855957031 }, - ['micro'] = { - - }, - } - mapData[692] = { - ['floors'] = 2, ['name'] = "Uldaman", ['rzti'] = 70, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 893.6680145263672,595.7789916992188,248.5489959716797,-391.4729919433594,-645.1190185546875,204.30599975585938 }, - [2] = { 492.57041931152344,328.3804931640625,-52.54859924316406,-57.77349853515625,-545.1190185546875,270.60699462890625 }, - ['micro'] = { - - }, - } - mapData[696] = { - ['floors'] = 1, ['name'] = "MoltenCore", ['rzti'] = 409, ['map_type'] = 2, ['continent'] = 0, ['transform'] = 0, - [1] = { 1264.800064086914,843.1990661621094,1395.56005859375,459.8609924316406,130.75999450683594,1303.06005859375 }, - ['micro'] = { - - }, - } - mapData[697] = { - ['floors'] = 0, ['name'] = "ZulGurub", ['rzti'] = 309, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = {1877.083251953125,1252.0830078125,693.75,-11308.3330078125,2570.833251953125,-12560.416015625}, - ['micro'] = { - - }, - } - mapData[699] = { - ['floors'] = 6, ['name'] = "DireMaul", ['rzti'] = 429, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 1275.0,850.0,387.5,200.0,-887.5,1050.0 }, - [2] = { 525.0,350.0,-125.0,-150.0,-650.0,200.0 }, - [3] = { 487.5,325.0,-231.25,-150.0,-718.75,175.0 }, - [4] = { 750.0,500.0,-325.0,-250.0,-1075.0,250.0 }, - [5] = { 800.0008010864258,533.3339996337891,900.0,-281.6669921875,99.99919891357422,251.66700744628906 }, - [6] = { 975.0,650.0,862.5,-200.0,-112.5,450.0 }, - ['micro'] = { - - }, - } - mapData[700] = { - ['floors'] = 0, ['name'] = "TwilightHighlands", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {5270.8330078125,3514.5830078125,2437.5,-2156.25,7708.3330078125,-5670.8330078125}, - ['micro'] = { - - }, - } - mapData[704] = { - ['floors'] = 2, ['name'] = "BlackrockDepths", ['rzti'] = 230, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 1407.0609741210938,938.0407562255859,884.7239990234375,248.63966369628906,-522.3369750976562,1186.680419921875 }, - [2] = { 1507.0609741210938,1004.7074279785156,934.7239990234375,495.3028259277344,-572.3369750976562,1500.01025390625 }, - ['micro'] = { - - }, - } - mapData[708] = { - ['floors'] = 0, ['name'] = "TolBarad", ['rzti'] = 732, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {2014.5832924842834,1343.75,-2010.4166259765625,-560.4166259765625,4.166666507720947,-1904.1666259765625}, - ['micro'] = { - - }, - } - mapData[709] = { - ['floors'] = 0, ['name'] = "TolBaradDailyArea", ['rzti'] = 732, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {1837.5,1224.9999389648438,-2412.5,377.08331298828125,-575.0,-847.9166259765625}, - ['micro'] = { - - }, - } - mapData[710] = { - ['floors'] = 1, ['name'] = "TheShatteredHalls", ['rzti'] = 540, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 1063.7474670410156,709.1649932861328,432.6392517089844,-91.74800109863281,-631.1082153320312,617.4169921875 }, - ['micro'] = { - - }, - } - mapData[717] = { - ['floors'] = 0, ['name'] = "RuinsofAhnQiraj", ['rzti'] = 509, ['map_type'] = 2, ['continent'] = 0, ['transform'] = 0, - [1] = {2512.4998779296875,1675.0,-3035.41650390625,-8233.3330078125,-522.9166259765625,-9908.3330078125}, - ['micro'] = { - - }, - } - mapData[718] = { - ['floors'] = 1, ['name'] = "OnyxiasLair", ['rzti'] = 249, ['map_type'] = 2, ['continent'] = 0, ['transform'] = 0, - [1] = { 483.1179885864258,322.0787887573242,371.7349853515625,-223.83299255371094,-111.38300323486328,98.24579620361328 }, - ['micro'] = { - - }, - } - mapData[720] = { - ['floors'] = 0, ['name'] = "Uldum", ['rzti'] = 1, ['map_type'] = 0, ['continent'] = 2, ['transform'] = 0, - [1] = {6193.749755859375,4129.16650390625,-2441.66650390625,-8029.16650390625,3752.083251953125,-12158.3330078125}, - ['micro'] = { - - }, - } - mapData[721] = { - ['floors'] = 7, ['name'] = "BlackrockSpire", ['rzti'] = 229, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 886.8390140533447,591.2260131835938,876.2520141601562,-286.8280029296875,-10.586999893188477,304.39801025390625 }, - [2] = { 886.8390140533447,591.2260131835938,876.2520141601562,-286.8280029296875,-10.586999893188477,304.39801025390625 }, - [3] = { 886.8390140533447,591.2260131835938,876.2520141601562,-286.8280029296875,-10.586999893188477,304.39801025390625 }, - [4] = { 886.8390140533447,591.2260131835938,876.2520141601562,-286.8280029296875,-10.586999893188477,304.39801025390625 }, - [5] = { 886.8390140533447,591.2260131835938,876.2520141601562,-286.8280029296875,-10.586999893188477,304.39801025390625 }, - [6] = { 886.8390140533447,591.2260131835938,876.2520141601562,-286.8280029296875,-10.586999893188477,304.39801025390625 }, - [7] = { 886.8390140533447,591.2260131835938,876.2520141601562,-286.8280029296875,-10.586999893188477,304.39801025390625 }, - ['micro'] = { - - }, - } - mapData[722] = { - ['floors'] = 2, ['name'] = "AuchenaiCrypts", ['rzti'] = 558, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 742.5404357910156,495.02699279785156,414.98321533203125,-140.0760040283203,-327.5572204589844,354.95098876953125 }, - [2] = { 817.5404663085938,545.0269927978516,602.4832153320312,-210.0760040283203,-215.0572509765625,334.95098876953125 }, - ['micro'] = { - - }, - } - mapData[723] = { - ['floors'] = 2, ['name'] = "SethekkHalls", ['rzti'] = 556, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 703.4954833984375,468.9969940185547,187.6982421875,-295.3429870605469,-515.7972412109375,173.6540069580078 }, - [2] = { 703.4954833984375,468.9969940185547,187.6982421875,-295.3429870605469,-515.7972412109375,173.6540069580078 }, - ['micro'] = { - - }, - } - mapData[724] = { - ['floors'] = 1, ['name'] = "ShadowLabyrinth", ['rzti'] = 555, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 841.5223541259766,561.0148887634277,656.4431762695312,-498.2179870605469,-185.0791778564453,62.79690170288086 }, - ['micro'] = { - - }, - } - mapData[725] = { - ['floors'] = 1, ['name'] = "TheBloodFurnace", ['rzti'] = 542, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 1003.5190124511719,669.0126876831055,504.5299987792969,-65.87670135498047,-498.989013671875,603.135986328125 }, - ['micro'] = { - - }, - } - mapData[726] = { - ['floors'] = 1, ['name'] = "TheUnderbog", ['rzti'] = 546, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 894.9199981689453,596.6133575439453,653.9429931640625,-172.87818908691406,-240.9770050048828,423.73516845703125 }, - ['micro'] = { - - }, - } - mapData[727] = { - ['floors'] = 2, ['name'] = "TheSteamvault", ['rzti'] = 545, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 876.7640075683594,584.5094146728516,716.7420043945312,-425.94219970703125,-160.02200317382812,158.5672149658203 }, - [2] = { 876.7640075683594,584.5094146728516,716.7420043945312,-425.94219970703125,-160.02200317382812,158.5672149658203 }, - ['micro'] = { - - }, - } - mapData[728] = { - ['floors'] = 1, ['name'] = "TheSlavePens", ['rzti'] = 547, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 890.0581245422363,593.3720703125,836.1240234375,-391.65203857421875,-53.93410110473633,201.72003173828125 }, - ['micro'] = { - - }, - } - mapData[729] = { - ['floors'] = 1, ['name'] = "TheBotanica", ['rzti'] = 553, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 757.4024810791016,504.93499755859375,107.64924621582031,-256.9100036621094,-649.7532348632812,248.02499389648438 }, - ['micro'] = { - - }, - } - mapData[730] = { - ['floors'] = 2, ['name'] = "TheMechanar", ['rzti'] = 554, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 676.2380065917969,450.82540130615234,341.7799987792969,-100.83919525146484,-334.4580078125,349.9862060546875 }, - [2] = { 676.2380065917969,450.82536697387695,341.7799987792969,-37.8393440246582,-334.4580078125,412.98602294921875 }, - ['micro'] = { - - }, - } - mapData[731] = { - ['floors'] = 3, ['name'] = "TheArcatraz", ['rzti'] = 552, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 689.6840209960938,459.7893524169922,405.1050109863281,-75.42433166503906,-284.5790100097656,384.3650207519531 }, - [2] = { 546.0480499267578,364.0320129394531,245.2870330810547,44.0,-300.7610168457031,408.0320129394531 }, - [3] = { 636.6840057373047,424.4560241699219,422.6050109863281,150.83297729492188,-214.07899475097656,575.2890014648438 }, - ['micro'] = { - - }, - } - mapData[732] = { - ['floors'] = 1, ['name'] = "ManaTombs", ['rzti'] = 557, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 823.28515625,548.8568115234375,546.35107421875,-458.7860107421875,-276.93408203125,90.07080078125 }, - ['micro'] = { - - }, - } - mapData[733] = { - ['floors'] = 0, ['name'] = "CoTTheBlackMorass", ['rzti'] = 269, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = {1087.5,725.0,-7649.99951171875,-1500.0,-6562.49951171875,-2225.0}, - ['micro'] = { - - }, - } - mapData[734] = { - ['floors'] = 0, ['name'] = "CoTHillsbradFoothills", ['rzti'] = 560, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = {2331.2499389648438,1554.1666259765625,-1854.1666259765625,3127.083251953125,477.08331298828125,1572.9166259765625}, - ['micro'] = { - - }, - } - mapData[736] = { - ['floors'] = 0, ['name'] = "GilneasBattleground2", ['rzti'] = 761, ['map_type'] = 3, ['continent'] = 0, ['transform'] = 0, - [1] = {1302.0832824707031,868.75,-1745.833251953125,1604.1666259765625,-443.7499694824219,735.4166259765625}, - ['micro'] = { - - }, - } - mapData[737] = { - ['floors'] = 0, ['name'] = "TheMaelstrom", ['rzti'] = 730, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {1550.0,1033.333251953125,-1556.25,1370.833251953125,-6.25,337.5}, - ['micro'] = { - - }, - } - mapData[747] = { - ['floors'] = 0, ['name'] = "LostCityofTolvir", ['rzti'] = 755, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = {970.833251953125,647.9169921875,1004.1666259765625,-10591.666015625,1974.9998779296875,-11239.5830078125}, - ['micro'] = { - - }, - } - mapData[748] = { - ['floors'] = 0, ['name'] = "Uldum_terrain1", ['rzti'] = 1, ['map_type'] = 0, ['continent'] = 2, ['transform'] = 0, - [1] = {6193.749755859375,4129.16650390625,-2441.66650390625,-8029.16650390625,3752.083251953125,-12158.3330078125}, - ['micro'] = { - - }, - } - mapData[749] = { - ['floors'] = 1, ['name'] = "WailingCaverns", ['rzti'] = 43, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 936.4750061035156,624.3166656494141,375.9460144042969,-410.1463317871094,-560.5289916992188,214.1703338623047 }, - ['micro'] = { - - }, - } - mapData[750] = { - ['floors'] = 2, ['name'] = "Maraudon", ['rzti'] = 349, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 975.0,650.0,827.5,550.0,-147.5,1200.0 }, - [2] = { 1637.5,1091.666000366211,1158.75,-208.33299255371094,-478.75,883.3330078125 }, - ['micro'] = { - - }, - } - mapData[751] = { - ['floors'] = 0, ['name'] = "TheMaelstromContinent", ['rzti'] = 4294967295, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {0.0,0.0,-0.0,0.0,-0.0,0.0}, - ['micro'] = { - - }, - } - mapData[752] = { - ['floors'] = 1, ['name'] = "BaradinHold", ['rzti'] = 757, ['map_type'] = 2, ['continent'] = 0, ['transform'] = 0, - [1] = { 585.0,390.0,-1032.5,125.0,-1617.5,515.0 }, - ['micro'] = { - - }, - } - mapData[753] = { - ['floors'] = 2, ['name'] = "BlackrockCaverns", ['rzti'] = 645, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 1019.5079345703125,679.6723194122314,-439.9320068359375,6.666669845581055,-1459.43994140625,686.3389892578125 }, - [2] = { 1019.5079345703125,679.6723194122314,-239.9320068359375,6.666669845581055,-1259.43994140625,686.3389892578125 }, - ['micro'] = { - - }, - } - mapData[754] = { - ['floors'] = 2, ['name'] = "BlackwingDescent", ['rzti'] = 669, ['map_type'] = 2, ['continent'] = 0, ['transform'] = 0, - [1] = { 849.6940155029297,566.4623410701752,675.5850219726562,-567.4619750976562,-174.10899353027344,-0.9996340274810791 }, - [2] = { 999.6929779052734,666.4620056152344,750.583984375,-307.4620056152344,-249.10899353027344,359.0 }, - ['micro'] = { - - }, - } - mapData[755] = { - ['floors'] = 4, ['name'] = "BlackwingLair", ['rzti'] = 469, ['map_type'] = 2, ['continent'] = 0, ['transform'] = 0, - [1] = { 499.42803955078125,332.94970703125,1344.050048828125,-7727.06982421875,844.6220092773438,-7394.1201171875 }, - [2] = { 649.4270629882812,432.94970703125,1379.050048828125,-7777.06982421875,729.6229858398438,-7344.1201171875 }, - [3] = { 649.4270629882812,432.94970703125,1369.050048828125,-7757.06982421875,719.6229858398438,-7324.1201171875 }, - [4] = { 649.4270629882812,432.94970703125,1419.050048828125,-7637.06982421875,769.6229858398438,-7204.1201171875 }, - ['micro'] = { - - }, - } - mapData[756] = { - ['floors'] = 2, ['name'] = "TheDeadmines", ['rzti'] = 36, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 559.2640075683594,372.84250259399414,796.6220092773438,-337.5090026855469,237.35800170898438,35.333499908447266 }, - [2] = { 499.26300048828125,332.84230041503906,1016.6199951171875,-267.5090026855469,517.3569946289062,65.33329772949219 }, - ['micro'] = { - - }, - } - mapData[757] = { - ['floors'] = 1, ['name'] = "GrimBatol", ['rzti'] = 670, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 869.0474319458008,579.364990234375,952.780029296875,-880.9869995117188,83.73259735107422,-301.62200927734375 }, - ['micro'] = { - - }, - } - mapData[758] = { - ['floors'] = 3, ['name'] = "TheBastionofTwilight", ['rzti'] = 671, ['map_type'] = 2, ['continent'] = 0, ['transform'] = 0, - [1] = { 1078.3349990844727,718.8899841308594,1184.7705078125,-899.8469848632812,106.43550872802734,-180.95700073242188 }, - [2] = { 778.343017578125,518.8949584960938,1034.77001953125,-1289.8499755859375,256.427001953125,-770.9550170898438 }, - [3] = { 1042.342025756836,694.8949584960938,1267.27001953125,-1402.8499755859375,224.92799377441406,-707.9550170898438 }, - ['micro'] = { - - }, - } - mapData[759] = { - ['floors'] = 3, ['name'] = "HallsofOrigination", ['rzti'] = 644, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 1531.7509765625,1021.1673054695129,304.781005859375,-1018.1700439453125,-1226.969970703125,2.9972615242004395 }, - [2] = { 1272.7550354003906,848.5034255981445,1115.2900390625,-934.8350219726562,-157.46499633789062,-86.33159637451172 }, - [3] = { 1128.7689819335938,752.5126647949219,403.29400634765625,-884.84033203125,-725.4749755859375,-132.32766723632812 }, - ['micro'] = { - - }, - } - mapData[760] = { - ['floors'] = 1, ['name'] = "RazorfenDowns", ['rzti'] = 129, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 709.0489501953125,472.699951171875,-570.8909912109375,2209.85009765625,-1279.93994140625,2682.550048828125 }, - ['micro'] = { - - }, - } - mapData[761] = { - ['floors'] = 1, ['name'] = "RazorfenKraul", ['rzti'] = 47, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 736.449951171875,490.9598388671875,-1322.469970703125,1858.6800537109375,-2058.919921875,2349.639892578125 }, - ['micro'] = { - - }, - } - mapData[762] = { - ['floors'] = 4, ['name'] = "ScarletMonastery", ['rzti'] = 189, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 619.9839477539062,413.32275390625,-947.9860229492188,1616.858642578125,-1567.969970703125,2030.181396484375 }, - [2] = { 320.1909942626953,213.4604949951172,482.4639892578125,93.90550231933594,162.2729949951172,307.3659973144531 }, - [3] = { 612.6966094970703,408.4599609375,562.4240112304688,1600.6400146484375,-50.27259826660156,2009.0999755859375 }, - [4] = { 703.300048828125,468.86669921875,-1040.68994140625,812.4237060546875,-1743.989990234375,1281.2904052734375 }, - ['micro'] = { - - }, - } - mapData[763] = { - ['floors'] = 4, ['name'] = "Scholomance", ['rzti'] = 289, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 320.0489044189453,213.36499786376953,68.63890075683594,104.33300018310547,-251.41000366210938,317.697998046875 }, - [2] = { 440.04901123046875,293.36640548706055,128.63900756835938,44.33259963989258,-311.4100036621094,337.6990051269531 }, - [3] = { 410.07799530029297,273.385799407959,113.63899993896484,34.32120132446289,-296.4389953613281,307.7070007324219 }, - [4] = { 531.0420074462891,354.0281982421875,174.1219940185547,-66.32119750976562,-356.9200134277344,287.7070007324219 }, - ['micro'] = { - - }, - } - mapData[764] = { - ['floors'] = 7, ['name'] = "ShadowfangKeep", ['rzti'] = 33, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 352.4300537109375,234.9533920288086,-2003.7698974609375,-319.88299560546875,-2356.199951171875,-84.92960357666016 }, - [2] = { 212.4267578125,141.6179962158203,-2147.556640625,-303.2149963378906,-2359.9833984375,-161.5970001220703 }, - [3] = { 152.429931640625,101.61996459960938,-2103.77001953125,-193.21603393554688,-2256.199951171875,-91.5960693359375 }, - [4] = { 152.429931640625,101.62469482421875,-2103.77001953125,-193.21499633789062,-2256.199951171875,-91.59030151367188 }, - [5] = { 152.429931640625,101.62469482421875,-2103.77001953125,-193.21499633789062,-2256.199951171875,-91.59030151367188 }, - [6] = { 198.429931640625,132.28662872314453,-2080.77001953125,-182.5460205078125,-2279.199951171875,-50.25939178466797 }, - [7] = { 272.429931640625,181.61996459960938,-2023.77001953125,-278.2160339355469,-2296.199951171875,-96.5960693359375 }, - ['micro'] = { - - }, - } - mapData[765] = { - ['floors'] = 2, ['name'] = "Stratholme", ['rzti'] = 329, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 705.719970703125,470.47998046875,3617.679931640625,3338.969970703125,2911.9599609375,3809.449951171875 }, - [2] = { 1005.720458984375,670.480224609375,3967.68017578125,3498.969970703125,2961.959716796875,4169.4501953125 }, - ['micro'] = { - - }, - } - mapData[766] = { - ['floors'] = 3, ['name'] = "AhnQiraj", ['rzti'] = 531, ['map_type'] = 2, ['continent'] = 0, ['transform'] = 0, - [1] = { 2777.5441131591797,1851.6962890625,-138.0760040283203,-9510.9833984375,-2915.6201171875,-7659.287109375 }, - [2] = { 977.5599365234375,651.70654296875,-1538.0699462890625,-8703.5029296875,-2515.6298828125,-8051.79638671875 }, - [3] = { 577.56005859375,385.0400390625,-1738.06982421875,-8720.169921875,-2315.6298828125,-8335.1298828125 }, - ['micro'] = { - - }, - } - mapData[767] = { - ['floors'] = 2, ['name'] = "ThroneofTides", ['rzti'] = 643, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 998.1719360351562,665.447998046875,-308.89801025390625,-679.447998046875,-1307.0699462890625,-14.0 }, - [2] = { 998.1719360351562,665.447998046875,-308.89801025390625,-329.447998046875,-1307.0699462890625,336.0 }, - ['micro'] = { - - }, - } - mapData[768] = { - ['floors'] = 1, ['name'] = "TheStonecore", ['rzti'] = 725, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 1317.1289978027344,878.0869750976562,-384.1210021972656,797.4829711914062,-1701.25,1675.5699462890625 }, - ['micro'] = { - - }, - } - mapData[769] = { - ['floors'] = 1, ['name'] = "Skywall", ['rzti'] = 657, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 2018.7250366210938,1345.8180236816406,910.9349975585938,-1457.1500244140625,-1107.7900390625,-111.33200073242188 }, - ['micro'] = { - - }, - } - mapData[770] = { - ['floors'] = 0, ['name'] = "TwilightHighlands_terrain1", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {5270.8330078125,3514.5830078125,2437.5,-2156.25,7708.3330078125,-5670.8330078125}, - ['micro'] = { - - }, - } - mapData[772] = { - ['floors'] = 0, ['name'] = "AhnQirajTheFallenKingdom", ['rzti'] = 1, ['map_type'] = 0, ['continent'] = 2, ['transform'] = 0, - [1] = {4049.9998321533203,2700.0,-3891.66650390625,-8033.3330078125,158.3333282470703,-10733.3330078125}, - ['micro'] = { - - }, - } - mapData[773] = { - ['floors'] = 1, ['name'] = "ThroneoftheFourWinds", ['rzti'] = 754, ['map_type'] = 2, ['continent'] = 0, ['transform'] = 0, - [1] = { 1500.0,1000.0,-25.0,-550.0,-1525.0,450.0 }, - ['micro'] = { - - }, - } - mapData[775] = { - ['floors'] = 0, ['name'] = "CoTMountHyjal", ['rzti'] = 534, ['map_type'] = 2, ['continent'] = 0, ['transform'] = 0, - [1] = {2499.999755859375,1666.66650390625,1525.0,6145.8330078125,4024.999755859375,4479.16650390625}, - ['micro'] = { - - }, - } - mapData[776] = { - ['floors'] = 1, ['name'] = "GruulsLair", ['rzti'] = 565, ['map_type'] = 2, ['continent'] = 0, ['transform'] = 0, - [1] = { 525.0,350.0,50.0,-12.5,-475.0,337.5 }, - ['micro'] = { - - }, - } - mapData[779] = { - ['floors'] = 1, ['name'] = "MagtheridonsLair", ['rzti'] = 544, ['map_type'] = 2, ['continent'] = 0, ['transform'] = 0, - [1] = { 556.0,370.6666946411133,170.5,-115.3333511352539,-385.5,255.33334350585938 }, - ['micro'] = { - - }, - } - mapData[780] = { - ['floors'] = 1, ['name'] = "CoilfangReservoir", ['rzti'] = 548, ['map_type'] = 2, ['continent'] = 0, ['transform'] = 0, - [1] = { 1575.0029754638672,1050.0020141601562,1362.50048828125,-400.0,-212.5024871826172,650.0020141601562 }, - ['micro'] = { - - }, - } - mapData[781] = { - ['floors'] = 0, ['name'] = "ZulAman", ['rzti'] = 568, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = {1268.7499389648438,845.8333129882812,-1852.083251953125,568.75,-583.3333129882812,-277.08331298828125}, - ['micro'] = { - - }, - } - mapData[782] = { - ['floors'] = 1, ['name'] = "TempestKeep", ['rzti'] = 550, ['map_type'] = 2, ['continent'] = 0, ['transform'] = 0, - [1] = { 1575.0,1050.0,787.5,-100.0,-787.5,950.0 }, - ['micro'] = { - - }, - } - mapData[789] = { - ['floors'] = 2, ['name'] = "SunwellPlateau", ['rzti'] = 580, ['map_type'] = 2, ['continent'] = 0, ['transform'] = 0, - [1] = { 906.25,604.1666259765625,-1206.25,2012.4998779296875,-300.0,1408.333251953125 }, - [2] = { 465.0,310.0,-377.5,1580.0,-842.5,1890.0 }, - ['micro'] = { - - }, - } - mapData[793] = { - ['floors'] = 0, ['name'] = "ZulGurub", ['rzti'] = 859, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = {2120.833251953125,1414.5830078125,612.5,-11225.0,2733.333251953125,-12639.5830078125}, - ['micro'] = { - - }, - } - mapData[795] = { - ['floors'] = 0, ['name'] = "MoltenFront", ['rzti'] = 861, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {1189.5833129882812,793.7499389648438,-933.3333129882812,1702.083251953125,256.25,908.3333129882812}, - ['micro'] = { - - }, - } - mapData[796] = { - ['floors'] = 7, ['name'] = "BlackTemple", ['rzti'] = 564, ['map_type'] = 2, ['continent'] = 0, ['transform'] = 0, - [1] = { 1252.2495784759521,834.8330078125,-23.87053871154785,-240.0,-1276.1201171875,594.8330078125 }, - [2] = { 975.0,650.0,176.0,380.0,-799.0,1030.0 }, - [3] = { 1005.0,670.0,191.0,400.0,-814.0,1070.0 }, - [4] = { 440.0009765625,293.333984375,-134.99951171875,343.3330078125,-575.00048828125,636.6669921875 }, - [5] = { 670.0,446.66668701171875,70.0,664.1636352539062,-600.0,1110.830322265625 }, - [6] = { 705.0,470.0,67.5,450.0,-637.5,920.0 }, - [7] = { 355.0,236.6666259765625,-137.5,606.6666870117188,-492.5,843.3333129882812 }, - ['micro'] = { - - }, - } - mapData[797] = { - ['floors'] = 1, ['name'] = "HellfireRamparts", ['rzti'] = 543, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 694.56005859375,463.0400390625,-1294.719970703125,-1492.47998046875,-1989.280029296875,-1029.43994140625 }, - ['micro'] = { - - }, - } - mapData[798] = { - ['floors'] = 2, ['name'] = "MagistersTerrace", ['rzti'] = 585, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 530.3340148925781,353.55596923828125,304.22601318359375,-27.79583740234375,-226.10800170898438,325.7601318359375 }, - [2] = { 530.3340148925781,353.55599212646484,304.22601318359375,-27.79589080810547,-226.10800170898438,325.7601013183594 }, - ['micro'] = { - - }, - } - mapData[799] = { - ['floors'] = 17, ['name'] = "Karazhan", ['rzti'] = 532, ['map_type'] = 2, ['continent'] = 0, ['transform'] = 0, - [1] = { 550.048828125,366.69921875,2225.0244140625,-11189.599609375,1674.9755859375,-10822.900390625 }, - [2] = { 257.85986328125,171.90625,2081.419921875,-11189.0029296875,1823.56005859375,-11017.0966796875 }, - [3] = { 345.1494140625,230.099609375,2132.57470703125,-11066.2998046875,1787.42529296875,-10836.2001953125 }, - [4] = { 520.048828125,346.69921875,2190.0244140625,-11119.599609375,1669.9755859375,-10772.900390625 }, - [5] = { 234.14990234375,156.099609375,1932.5799560546875,-10969.2998046875,1698.4300537109375,-10813.2001953125 }, - [6] = { 581.548828125,387.69921875,2205.7744140625,-11190.599609375,1624.2255859375,-10802.900390625 }, - [7] = { 191.548828125,127.69921875,2066.7744140625,-11115.599609375,1875.2255859375,-10987.900390625 }, - [8] = { 139.3505859375,92.900390625,2037.6802978515625,-11105.2001953125,1898.3297119140625,-11012.2998046875 }, - [9] = { 760.048828125,506.69921875,2270.0244140625,-11459.599609375,1509.9755859375,-10952.900390625 }, - [10] = { 450.25,300.166015625,2040.1300048828125,-11386.3330078125,1589.8800048828125,-11086.1669921875 }, - [11] = { 271.050048828125,180.69921875,1825.530029296875,-11285.099609375,1554.47998046875,-11104.400390625 }, - [12] = { 595.048828125,396.69921875,2182.5244140625,-11444.599609375,1587.4755859375,-11047.900390625 }, - [13] = { 529.048828125,352.69921875,1963.0244140625,-11339.099609375,1433.9755859375,-10986.400390625 }, - [14] = { 245.25,163.5,2032.6300048828125,-11143.0,1787.3800048828125,-10979.5 }, - [15] = { 211.14990234375,140.765625,2025.0799560546875,-11113.6328125,1813.9300537109375,-10972.8671875 }, - [16] = { 101.25,67.5,2020.1300048828125,-11097.0,1918.8800048828125,-11029.5 }, - [17] = { 341.25,227.5,2155.1298828125,-11102.0,1813.8798828125,-10874.5 }, - ['micro'] = { - - }, - } - mapData[800] = { - ['floors'] = 3, ['name'] = "Firelands", ['rzti'] = 720, ['map_type'] = 2, ['continent'] = 0, ['transform'] = 0, - [1] = {1587.4999389648438,1058.3332824707031,-718.75,424.9999694824219,868.7499389648438,-633.3333129882812}, - [2] = { 375.0,250.0,-302.0830078125,343.75,-677.0830078125,593.75 }, - [3] = { 1440.0,960.0,770.0,265.0,-670.0,1225.0 }, - ['micro'] = { - - }, - } - mapData[803] = { - ['floors'] = 1, ['name'] = "TheNexusLegendary", ['rzti'] = 951, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 1101.2841796875,734.189697265625,-6656.60791015625,3626.820068359375,-7757.89208984375,4361.009765625 }, - ['micro'] = { - - }, - } - mapData[806] = { - ['floors'] = 0, ['name'] = "TheJadeForest", ['rzti'] = 870, ['map_type'] = 0, ['continent'] = 6, ['transform'] = 0, - [1] = {6983.3330078125,4654.1669921875,-1452.0830078125,3652.0830078125,5531.25,-1002.083984375}, - ['micro'] = { - - }, - } - mapData[807] = { - ['floors'] = 0, ['name'] = "ValleyoftheFourWinds", ['rzti'] = 870, ['map_type'] = 0, ['continent'] = 6, ['transform'] = 0, - [1] = {3925.0009765625,2616.6669921875,-2679.1669921875,1095.8330078125,1245.833984375,-1520.833984375}, - ['micro'] = { - - }, - } - mapData[808] = { - ['floors'] = 0, ['name'] = "TheWanderingIsle", ['rzti'] = 860, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {2670.8330078125,1779.1669921875,-4979.166015625,1785.4169921875,-2308.3330078125,6.25}, - ['micro'] = { - - }, - } - mapData[809] = { - ['floors'] = 0, ['name'] = "KunLaiSummit", ['rzti'] = 870, ['map_type'] = 0, ['continent'] = 6, ['transform'] = 0, - [1] = {6258.3330078125,4172.9169921875,-4839.5830078125,5618.75,1418.75,1445.8330078125}, - ['micro'] = { - - }, - } - mapData[810] = { - ['floors'] = 0, ['name'] = "TownlongWastes", ['rzti'] = 870, ['map_type'] = 0, ['continent'] = 6, ['transform'] = 0, - [1] = {5743.7490234375,3829.166015625,-7079.166015625,4558.3330078125,-1335.4169921875,729.1669921875}, - ['micro'] = { - - }, - } - mapData[811] = { - ['floors'] = 0, ['name'] = "ValeofEternalBlossoms", ['rzti'] = 870, ['map_type'] = 0, ['continent'] = 6, ['transform'] = 0, - [1] = {2533.333984375,1687.5009765625,-2481.25,1947.9169921875,52.083984375,260.416015625}, - ['micro'] = { - - }, - } - mapData[813] = { - ['floors'] = 0, ['name'] = "NetherstormArena", ['rzti'] = 968, ['map_type'] = 3, ['continent'] = 0, ['transform'] = 0, - [1] = {2270.8331909179688,1514.5833740234375,-2660.41650390625,2918.75,-389.58331298828125,1404.1666259765625}, - ['micro'] = { - - }, - } - mapData[816] = { - ['floors'] = 0, ['name'] = "WellofEternity", ['rzti'] = 939, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = {1252.0830078125,833.333251953125,4650.0,3766.66650390625,5902.0830078125,2933.333251953125}, - ['micro'] = { - - }, - } - mapData[819] = { - ['floors'] = 2, ['name'] = "HourofTwilight", ['rzti'] = 940, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 3043.7498779296875,2029.16650390625,-1791.6666259765625,5327.0830078125,1252.083251953125,3297.91650390625 }, - [2] = { 375.0,250.0,-75.0,3425.0,-450.0,3675.0 }, - ['micro'] = { - - }, - } - mapData[820] = { - ['floors'] = 5, ['name'] = "EndTime", ['rzti'] = 938, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 562.5,375.0,-231.25,2918.75,-793.75,3293.75 }, - [2] = { 865.6205444335938,577.080322265625,-534.8982543945312,3499.999755859375,-1400.518798828125,4077.080078125 }, - [3] = { 475.0,316.66650390625,-1181.25,4229.1650390625,-1656.25,4545.83154296875 }, - [4] = { 696.884765625,464.58984375,290.109375,2570.830078125,-406.775390625,3035.419921875 }, - [5] = { 453.135009765625,302.08984375,646.3590087890625,3970.830078125,193.2239990234375,4272.919921875 }, - ['micro'] = { - - }, - } - mapData[823] = { - ['floors'] = 0, ['name'] = "DarkmoonFaireIsland", ['rzti'] = 974, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {1858.3330078125,1239.58349609375,-7268.74951171875,-3322.91650390625,-5410.41650390625,-4562.5}, - ['micro'] = { - - }, - } - mapData[824] = { - ['floors'] = 7, ['name'] = "DragonSoul", ['rzti'] = 967, ['map_type'] = 2, ['continent'] = 0, ['transform'] = 0, - [1] = { 3106.70849609375,2063.065185546875,833.5927734375,-565.0927734375,3940.30126953125,-2628.157958984375 }, - [2] = { 397.5,265.0,2113.75,-1890.0,1716.25,-1625.0 }, - [3] = { 427.5,285.0,3262.0,-1910.0,2834.5,-1625.0 }, - [4] = { 185.19921875,123.466796875,-13523.900390625,13528.2666015625,-13709.099609375,13651.7333984375 }, - [5] = { 1.5,1.0,0.25,0.0,-1.25,1.0 }, - [6] = { 1.5,1.0,0.25,0.0,-1.25,1.0 }, - [7] = { 1108.3515625,738.900390625,-11427.07421875,-12254.900390625,-12535.42578125,-11516.0 }, - ['micro'] = { - - }, - } - mapData[851] = { - ['floors'] = 0, ['name'] = "DustwallowMarshScenario", ['rzti'] = 999, ['map_type'] = 5, ['continent'] = 0, ['transform'] = 0, - [1] = {1058.333984375,706.25,3979.166015625,-3468.75,5037.5,-4175.0}, - ['micro'] = { - - }, - } - mapData[856] = { - ['floors'] = 0, ['name'] = "TempleofKotmogu", ['rzti'] = 998, ['map_type'] = 3, ['continent'] = 0, ['transform'] = 0, - [1] = {839.5830078125,560.416015625,-1743.75,2083.3330078125,-904.1669921875,1522.9169921875}, - ['micro'] = { - - }, - } - mapData[857] = { - ['floors'] = 0, ['name'] = "Krasarang", ['rzti'] = 870, ['map_type'] = 0, ['continent'] = 6, ['transform'] = 0, - [1] = {4687.5009765625,3124.9999923706055,-2947.9169921875,-110.41602325439453,1739.583984375,-3235.416015625}, - ['micro'] = { - - }, - } - mapData[858] = { - ['floors'] = 0, ['name'] = "DreadWastes", ['rzti'] = 870, ['map_type'] = 0, ['continent'] = 6, ['transform'] = 0, - [1] = {5352.0830078125,3568.7509765625,-6139.5830078125,1416.6669921875,-787.5,-2152.083984375}, - ['micro'] = { - - }, - } - mapData[860] = { - ['floors'] = 1, ['name'] = "STVDiamondMineBG", ['rzti'] = 727, ['map_type'] = 3, ['continent'] = 0, ['transform'] = 0, - [1] = { 915.5059967041016,610.3373107910156,200.2530059814453,425.5828552246094,-715.2529907226562,1035.920166015625 }, - ['micro'] = { - - }, - } - mapData[862] = { - ['floors'] = 0, ['name'] = "Pandaria", ['rzti'] = 870, ['map_type'] = 0, ['continent'] = 6, ['transform'] = 0, - [1] = {15515.30029296875,10343.5400390625,-8752.8603515625,6679.16015625,6762.43994140625,-3664.3798828125}, - ['micro'] = { - - }, - } - mapData[864] = { - ['floors'] = 0, ['name'] = "Northshire", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {968.75,645.833984375,-187.5,-8570.83203125,781.25,-9216.666015625}, - ['micro'] = { - - }, - } - mapData[866] = { - ['floors'] = 0, ['name'] = "ColdridgeValley", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {964.5830078125,643.75,-979.1669921875,-5962.5,-14.583984375,-6606.25}, - ['micro'] = { - - }, - } - mapData[867] = { - ['floors'] = 2, ['name'] = "EastTemple", ['rzti'] = 960, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 550.0,366.66668701171875,2865.0,751.6636352539062,2315.0,1118.330322265625 }, - [2] = { 198.0,132.0,2576.5,788.5,2378.5,920.5 }, - ['micro'] = { - - }, - } - mapData[871] = { - ['floors'] = 2, ['name'] = "ScarletHalls", ['rzti'] = 1001, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 465.0,310.0,-302.5,790.0,-767.5,1100.0 }, - [2] = { 468.0,312.0,-265.0,1035.5,-733.0,1347.5 }, - ['micro'] = { - - }, - } - mapData[873] = { - ['floors'] = 0, ['name'] = "TheHiddenPass", ['rzti'] = 870, ['map_type'] = 0, ['continent'] = 6, ['transform'] = 0, - [1] = {1793.75,1195.8330078125,-812.5,1689.5830078125,981.25,493.75}, - ['micro'] = { - - }, - } - mapData[874] = { - ['floors'] = 2, ['name'] = "ScarletCathedral", ['rzti'] = 1004, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 343.02001953125,228.67999267578125,-428.989990234375,1000.6599731445312,-772.010009765625,1229.3399658203125 }, - [2] = { 600.0,400.0,-300.5,660.0,-900.5,1060.0 }, - ['micro'] = { - - }, - } - mapData[875] = { - ['floors'] = 2, ['name'] = "TheGreatWall", ['rzti'] = 962, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 1300.0,866.6666870117188,-1605.0,616.6636352539062,-2905.0,1483.330322265625 }, - [2] = { 222.52001953125,148.3466796875,-2191.239990234375,1123.32666015625,-2413.760009765625,1271.67333984375 }, - ['micro'] = { - - }, - } - mapData[876] = { - ['floors'] = 4, ['name'] = "StormstoutBrewery", ['rzti'] = 961, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 260.0009765625,173.333984375,-1212.49951171875,-836.6669921875,-1472.50048828125,-663.3330078125 }, - [2] = { 260.0009765625,173.333984375,-1212.49951171875,-836.6669921875,-1472.50048828125,-663.3330078125 }, - [3] = { 340.0,226.6666259765625,-1047.5,-818.3333129882812,-1387.5,-591.6666870117188 }, - [4] = { 230.0009765625,153.333984375,-1044.99951171875,-776.6669921875,-1275.00048828125,-623.3330078125 }, - ['micro'] = { - - }, - } - mapData[877] = { - ['floors'] = 3, ['name'] = "ShadowpanHideout", ['rzti'] = 959, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 310.0,206.66650390625,-2505.0,3566.666748046875,-2815.0,3773.333251953125 }, - [2] = { 210.0,140.0,-2932.5,3610.0,-3142.5,3750.0 }, - [3] = { 390.0,260.0,-2700.0,3895.0,-3090.0,4155.0 }, - ['micro'] = { - - }, - } - mapData[878] = { - ['floors'] = 0, ['name'] = "BrewmasterScenario01", ['rzti'] = 1005, ['map_type'] = 5, ['continent'] = 0, ['transform'] = 0, - [1] = {468.75,312.5,875.0,2389.5830078125,1343.75,2077.0830078125}, - ['micro'] = { - - }, - } - mapData[879] = { - ['floors'] = 0, ['name'] = "KunLaiSummitScenario", ['rzti'] = 1014, ['map_type'] = 5, ['continent'] = 0, ['transform'] = 0, - [1] = {729.166015625,485.4169921875,-2102.0830078125,4168.75,-1372.9169921875,3683.3330078125}, - ['micro'] = { - - }, - } - mapData[880] = { - ['floors'] = 0, ['name'] = "TheJadeForestScenario", ['rzti'] = 1024, ['map_type'] = 5, ['continent'] = 0, ['transform'] = 0, - [1] = {925.0,616.6669921875,1397.916015625,2372.9169921875,2322.916015625,1756.25}, - ['micro'] = { - - }, - } - mapData[881] = { - ['floors'] = 0, ['name'] = "ValleyOfPowerScenario", ['rzti'] = 1035, ['map_type'] = 5, ['continent'] = 0, ['transform'] = 0, - [1] = {839.5830078125,560.416015625,-1743.75,2083.3330078125,-904.1669921875,1522.9169921875}, - ['micro'] = { - - }, - } - mapData[882] = { - ['floors'] = 0, ['name'] = "BrewmasterScenario03", ['rzti'] = 1048, ['map_type'] = 5, ['continent'] = 0, ['transform'] = 0, - [1] = {906.2490234375,604.166015625,-1220.8330078125,-2564.583984375,-314.583984375,-3168.75}, - ['micro'] = { - - }, - } - mapData[883] = { - ['floors'] = 0, ['name'] = "Tyrivess", ['rzti'] = 1050, ['map_type'] = 5, ['continent'] = 0, ['transform'] = 0, - [1] = {2683.3330078125,1789.58203125,-5616.666015625,-252.083984375,-2933.3330078125,-2041.666015625}, - ['micro'] = { - - }, - } - mapData[884] = { - ['floors'] = 0, ['name'] = "KunLaiPassScenario", ['rzti'] = 1051, ['map_type'] = 5, ['continent'] = 0, ['transform'] = 0, - [1] = {970.8330078125,647.9169921875,-747.9169921875,2216.6669921875,222.916015625,1568.75}, - ['micro'] = { - - }, - } - mapData[885] = { - ['floors'] = 3, ['name'] = "MogushanPalace", ['rzti'] = 994, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 735.0,490.0,3052.5,-4360.0,2317.5,-3870.0 }, - [2] = { 540.0,360.0,2905.0,-4485.0,2365.0,-4125.0 }, - [3] = { 747.509765625,498.33984375,3058.7548828125,-4776.669921875,2311.2451171875,-4278.330078125 }, - ['micro'] = { - - }, - } - mapData[886] = { - ['floors'] = 0, ['name'] = "TerraceOfEndlessSpring", ['rzti'] = 996, ['map_type'] = 2, ['continent'] = 0, ['transform'] = 0, - [1] = {702.083984375,468.75,2497.916015625,-789.583984375,3200.0,-1258.333984375}, - ['micro'] = { - - }, - } - mapData[887] = { - ['floors'] = 2, ['name'] = "SiegeofNiuzaoTemple", ['rzti'] = 1011, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 290.009765625,193.340087890625,-5009.9951171875,1438.3299560546875,-5300.0048828125,1631.6700439453125 }, - [2] = { 290.009765625,193.340087890625,-5009.9951171875,1438.3299560546875,-5300.0048828125,1631.6700439453125 }, - ['micro'] = { - - }, - } - mapData[888] = { - ['floors'] = 0, ['name'] = "ShadowglenStart", ['rzti'] = 1, ['map_type'] = 0, ['continent'] = 2, ['transform'] = 0, - [1] = {1450.0009765625,966.6669921875,-1491.6669921875,11033.3330078125,-41.666015625,10066.666015625}, - ['micro'] = { - - }, - } - mapData[889] = { - ['floors'] = 0, ['name'] = "ValleyofTrialsStart", ['rzti'] = 1, ['map_type'] = 0, ['continent'] = 2, ['transform'] = 0, - [1] = {1350.0,900.0,3641.666015625,0.0,4991.666015625,-900.0}, - ['micro'] = { - - }, - } - mapData[890] = { - ['floors'] = 0, ['name'] = "CampNaracheStart", ['rzti'] = 1, ['map_type'] = 0, ['continent'] = 2, ['transform'] = 0, - [1] = {1766.66796875,1177.08203125,-233.333984375,-2577.083984375,1533.333984375,-3754.166015625}, - ['micro'] = { - - }, - } - mapData[891] = { - ['floors'] = 0, ['name'] = "EchoIslesStart", ['rzti'] = 1, ['map_type'] = 0, ['continent'] = 2, ['transform'] = 0, - [1] = {1806.25,1204.166015625,4491.666015625,-525.0,6297.916015625,-1729.166015625}, - ['micro'] = { - - }, - } - mapData[892] = { - ['floors'] = 0, ['name'] = "DeathknellStart", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {1089.583984375,727.0830078125,-2147.9169921875,2270.8330078125,-1058.3330078125,1543.75}, - ['micro'] = { - - }, - } - mapData[893] = { - ['floors'] = 0, ['name'] = "SunstriderIsleStart", ['rzti'] = 530, ['map_type'] = 0, ['continent'] = 3, ['transform'] = 1, - [1] = {1600.0,1066.6669921875,5383.333984375,10833.3330078125,6983.333984375,9766.666015625}, - ['micro'] = { - - }, - } - mapData[894] = { - ['floors'] = 0, ['name'] = "AmmenValeStart", ['rzti'] = 530, ['map_type'] = 0, ['continent'] = 3, ['transform'] = 1, - [1] = {1818.75,1212.5,12814.58203125,-3604.166015625,14633.33203125,-4816.666015625}, - ['micro'] = { - - }, - } - mapData[895] = { - ['floors'] = 0, ['name'] = "NewTinkertownStart", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {1850.0,1233.33203125,-1206.25,-4727.083984375,643.75,-5960.416015625}, - ['micro'] = { - - }, - } - mapData[896] = { - ['floors'] = 3, ['name'] = "MogushanVaults", ['rzti'] = 1008, ['map_type'] = 2, ['continent'] = 0, ['transform'] = 0, - [1] = { 687.509765625,458.33984375,-874.9906005859375,3735.830078125,-1562.5003662109375,4194.169921875 }, - [2] = { 432.509765625,288.33984375,-1244.9951171875,4088.330078125,-1677.5048828125,4376.669921875 }, - [3] = { 750.0,500.0,-1315.0,3780.0,-2065.0,4280.0 }, - ['micro'] = { - - }, - } - mapData[897] = { - ['floors'] = 2, ['name'] = "HeartofFear", ['rzti'] = 1009, ['map_type'] = 2, ['continent'] = 0, ['transform'] = 0, - [1] = { 700.0,466.666748046875,-0.0,-2433.33349609375,-700.0,-1966.666748046875 }, - [2] = { 1440.0043802261353,960.0029296875,9.994370460510254,-2730.00146484375,-1430.010009765625,-1769.99853515625 }, - ['micro'] = { - - }, - } - mapData[898] = { - ['floors'] = 4, ['name'] = "Scholomance", ['rzti'] = 1007, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 250.00200653076172,166.6680145263672,79.5009994506836,134.6649932861328,-170.50100708007812,301.3330078125 }, - [2] = { 445.0003662109375,296.66690826416016,130.00018310546875,43.666099548339844,-315.00018310546875,340.3330078125 }, - [3] = { 262.5,175.0,73.75,-87.5,-188.75,87.5 }, - [4] = { 262.5,175.0,73.75,-87.5,-188.75,87.5 }, - ['micro'] = { - - }, - } - mapData[899] = { - ['floors'] = 0, ['name'] = "ProvingGrounds", ['rzti'] = 1148, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = { 212.490234375,141.66015625,-418.7548828125,3726.669921875,-631.2451171875,3868.330078125 }, - ['micro'] = { - - }, - } - mapData[900] = { - ['floors'] = 2, ['name'] = "AncientMoguCrypt", ['rzti'] = 1030, ['map_type'] = 5, ['continent'] = 0, ['transform'] = 0, - [1] = { 645.0,430.0,-2122.5,540.0,-2767.5,970.0 }, - [2] = { 335.50048828125,223.6669921875,-2182.249755859375,606.3330078125,-2517.750244140625,830.0 }, - ['micro'] = { - - }, - } - mapData[903] = { - ['floors'] = 0, ['name'] = "ShrineofTwoMoons", ['rzti'] = 870, ['map_type'] = 0, ['continent'] = 6, ['transform'] = 0, - [1] = {0.0,0.0,-0.0,0.0,-0.0,0.0}, - ['micro'] = { - - }, - } - mapData[905] = { - ['floors'] = 0, ['name'] = "ShrineofSevenStars", ['rzti'] = 870, ['map_type'] = 0, ['continent'] = 6, ['transform'] = 0, - [1] = {0.0,0.0,-0.0,0.0,-0.0,0.0}, - ['micro'] = { - - }, - } - mapData[906] = { - ['floors'] = 0, ['name'] = "DustwallowMarshScenarioAlliance", ['rzti'] = 1000, ['map_type'] = 5, ['continent'] = 0, ['transform'] = 0, - [1] = {1058.333984375,706.25,3979.166015625,-3468.75,5037.5,-4175.0}, - ['micro'] = { - - }, - } - mapData[907] = { - ['floors'] = 0, ['name'] = "Dustwallow_terrain1", ['rzti'] = 1, ['map_type'] = 0, ['continent'] = 2, ['transform'] = 0, - [1] = {5250.0,3500.0,975.0,-2033.333984375,6225.0,-5533.333984375}, - ['micro'] = { - - }, - } - mapData[910] = { - ['floors'] = 0, ['name'] = "Krasarang_terrain1", ['rzti'] = 870, ['map_type'] = 0, ['continent'] = 6, ['transform'] = 0, - [1] = {4687.5009765625,3124.9999923706055,-2947.9169921875,-110.41602325439453,1739.583984375,-3235.416015625}, - ['micro'] = { - - }, - } - mapData[911] = { - ['floors'] = 0, ['name'] = "KrasarangAlliance", ['rzti'] = 1103, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {1118.75,745.833984375,314.583984375,-587.5,1433.333984375,-1333.333984375}, - ['micro'] = { - - }, - } - mapData[912] = { - ['floors'] = 0, ['name'] = "KrasarangPatience", ['rzti'] = 1104, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {1845.833984375,1229.16796875,-1931.25,-891.666015625,-85.416015625,-2120.833984375}, - ['micro'] = { - - }, - } - mapData[914] = { - ['floors'] = 0, ['name'] = "VoljinScenario", ['rzti'] = 1095, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = { 892.5,595.0,413.75,1140.0,-478.75,1735.0 }, - ['micro'] = { - - }, - } - mapData[919] = { - ['floors'] = 7, ['name'] = "BlackTempleScenario", ['rzti'] = 1112, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = { 1252.2494945526123,834.8330078125,-23.870500564575195,-240.0,-1276.1199951171875,594.8330078125 }, - [2] = { 975.0,650.0,176.0,380.0,-799.0,1030.0 }, - [3] = { 1005.0,670.0,191.0,400.0,-814.0,1070.0 }, - [4] = { 440.0009765625,293.333984375,-134.99951171875,343.3330078125,-575.00048828125,636.6669921875 }, - [5] = { 670.0,446.66668701171875,70.0,664.1636352539062,-600.0,1110.830322265625 }, - [6] = { 705.0,470.0,67.5,450.0,-637.5,920.0 }, - [7] = { 355.0,236.6666259765625,-137.5,606.6666870117188,-492.5,843.3333129882812 }, - ['micro'] = { - - }, - } - mapData[920] = { - ['floors'] = 0, ['name'] = "KrasarangHorde", ['rzti'] = 1102, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {2331.25,1554.166015625,-3125.0,-1352.083984375,-793.75,-2906.25}, - ['micro'] = { - - }, - } - mapData[922] = { - ['floors'] = 2, ['name'] = "DeeprunTram", ['rzti'] = 369, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = { 312.0,208.0,-2311.5,-112.5,-2623.5,95.5 }, - [2] = { 185.0,123.33332824707031,-2408.5,-172.9580078125,-2593.5,-49.62467956542969 }, - ['micro'] = { - - }, - } - mapData[924] = { - ['floors'] = 2, ['name'] = "DalaranCity", ['rzti'] = 1106, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = { 830.0150146484375,553.34375,-222.4949951171875,5513.328125,-1052.510009765625,6066.671875 }, - [2] = { 563.234619140625,375.48974609375,-352.64068603515625,5599.85009765625,-915.8753051757812,5975.33984375 }, - ['micro'] = { - - }, - } - mapData[925] = { - ['floors'] = 0, ['name'] = "BrawlgarArena", ['rzti'] = 1043, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = { 215.009765625,143.3399658203125,4857.5048828125,1958.3299560546875,4642.4951171875,2101.669921875 }, - ['micro'] = { - - }, - } - mapData[928] = { - ['floors'] = 2, ['name'] = "IsleoftheThunderKing", ['rzti'] = 1064, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = { 4135.416015625,2756.25,-7654.166015625,8147.916015625,-3518.75,5391.666015625 }, - [2] = { 362.0,241.3330078125,-4969.0,6999.99853515625,-5331.0,7241.33154296875 }, - ['micro'] = { - - }, - } - mapData[929] = { - ['floors'] = 0, ['name'] = "IsleOfGiants", ['rzti'] = 870, ['map_type'] = 0, ['continent'] = 6, ['transform'] = 0, - [1] = {1787.5009765625,1191.666015625,-2004.1669921875,6697.916015625,-216.666015625,5506.25}, - ['micro'] = { - - }, - } - mapData[930] = { - ['floors'] = 8, ['name'] = "ThunderKingRaid", ['rzti'] = 1098, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = { 1285.0,856.6669921875,-5742.5,5256.66650390625,-7027.5,6113.33349609375 }, - [2] = { 1550.009765625,1033.33984375,-4624.9951171875,5213.330078125,-6175.0048828125,6246.669921875 }, - [3] = { 1030.0,686.6669921875,-4215.0,5919.16650390625,-5245.0,6605.83349609375 }, - [4] = { 591.280029296875,394.18701171875,-4018.360107421875,5918.6865234375,-4609.64013671875,6312.87353515625 }, - [5] = { 1030.0,686.6669921875,-4215.0,5441.66650390625,-5245.0,6128.33349609375 }, - [6] = { 910.0,606.6669921875,-4040.0,5796.16650390625,-4950.0,6402.83349609375 }, - [7] = { 810.0,540.0,-3695.0,5445.0,-4505.0,5985.0 }, - [8] = { 617.5,411.6669921875,-4361.25,5321.66650390625,-4978.75,5733.33349609375 }, - ['micro'] = { - - }, - } - mapData[933] = { - ['floors'] = 0, ['name'] = "IsleoftheThunderKingScenario", ['rzti'] = 1126, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = { 480.0,320.0,-5292.5,7210.0,-5772.5,7530.0 }, - ['micro'] = { - - }, - } - mapData[934] = { - ['floors'] = 0, ['name'] = "ThunderKingLootRoom", ['rzti'] = 1135, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = { 1532.5,1021.6667175292969,-100.0,-665.8333740234375,-1632.5,355.8333435058594 }, - ['micro'] = { - - }, - } - mapData[935] = { - ['floors'] = 0, ['name'] = "GoldRush", ['rzti'] = 1105, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {1083.333984375,722.91796875,-1068.75,189.583984375,14.583984375,-533.333984375}, - ['micro'] = { - - }, - } - mapData[937] = { - ['floors'] = 0, ['name'] = "ValeOfEternalBlossomsScenario", ['rzti'] = 1144, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = { 570.0,380.0,-781.25,620.0,-1351.25,1000.0 }, - ['micro'] = { - - }, - } - mapData[938] = { - ['floors'] = 0, ['name'] = "EmberdeepScenario", ['rzti'] = 1131, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = { 540.0,360.0,-670.0,1243.0,-1210.0,1603.0 }, - ['micro'] = { - - }, - } - mapData[939] = { - ['floors'] = 0, ['name'] = "DunMoroghScenario", ['rzti'] = 1130, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {833.333984375,556.25,-145.833984375,-4904.166015625,687.5,-5460.416015625}, - ['micro'] = { - - }, - } - mapData[940] = { - ['floors'] = 0, ['name'] = "tempKrasarangHordeBase", ['rzti'] = 1099, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {697.916015625,464.583984375,3818.75,2560.4169921875,4516.666015625,2095.8330078125}, - ['micro'] = { - - }, - } - mapData[951] = { - ['floors'] = 0, ['name'] = "TimelessIsle", ['rzti'] = 870, ['map_type'] = 0, ['continent'] = 6, ['transform'] = 0, - [1] = {2400.0,1600.0,4083.333984375,233.333984375,6483.333984375,-1366.666015625}, - ['micro'] = { - - }, - } - mapData[953] = { - ['floors'] = 15, ['name'] = "OrgrimmarRaid", ['rzti'] = 1136, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = { 758.3330078125,504.1669921875,-1239.5830078125,1310.4169921875,-481.25,806.25 }, - [2] = { 950.0150146484375,633.34326171875,-199.9949951171875,1095.828369140625,-1150.010009765625,1729.171630859375 }, - [3] = { 562.5,375.0,-716.25,625.0,-1278.75,1000.0 }, - [4] = { 1141.669921875,761.1132202148438,5162.5,893.4033813476562,4020.830078125,1654.5166015625 }, - [5] = { 1210.416015625,806.25,5000.0,1318.75,3789.583984375,2125.0 }, - [6] = { 362.08984375,241.3931884765625,4526.06005859375,1690.87841796875,4163.97021484375,1932.2716064453125 }, - [7] = { 600.0,400.0,4837.5,1500.0,4237.5,1900.0 }, - [8] = { 885.0,590.0,5467.5,1575.0,4582.5,2165.0 }, - [9] = { 1210.0,806.666748046875,5700.0,1059.1666259765625,4490.0,1865.8333740234375 }, - [10] = { 645.0,430.0001220703125,5875.0,1727.0799560546875,5230.0,2157.080078125 }, - [11] = { 885.0,590.0,5967.5,1200.0,5082.5,1790.0 }, - [12] = { 472.5,315.0,5876.25,960.0,5403.75,1275.0 }, - [13] = { 830.005859375,553.3370361328125,6010.0029296875,650.8330078125,5179.9970703125,1204.1700439453125 }, - [14] = { 345.0,230.0,5567.5,985.0,5222.5,1215.0 }, - [15] = { 262.5,175.0,5971.6298828125,975.0,5709.1298828125,1150.0 }, - ['micro'] = { - - }, - } - mapData[955] = { - ['floors'] = 0, ['name'] = "CelestialChallenge", ['rzti'] = 1161, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {2400.0,1600.0,4083.333984375,233.333984375,6483.333984375,-1366.666015625}, - ['micro'] = { - - }, - } - --WoD -mapData[941] = { - ['floors'] = 21, ['name'] = "FrostfireRidge", ['rzti'] = 1116, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = { 725.009765625,483.33984375,-5437.4951171875,6523.330078125,-6162.5048828125,7006.669921875 }, - [2] = { 635.009765625,423.33984375,-5479.9951171875,6537.330078125,-6115.0048828125,6960.669921875 }, - [3] = { 360.0,240.0,-5645.0,6710.0,-6005.0,6950.0 }, - [4] = { 615.0,410.0,-5516.0,6540.0,-6131.0,6950.0 }, - [5] = { 277.5,185.0,-4298.75,5350.0,-4576.25,5535.0 }, - [6] = { 442.5,295.0,-3296.25,5475.0,-3738.75,5770.0 }, - [7] = { 825.0,550.0,-4147.5,6650.0,-4972.5,7200.0 }, - [8] = { 825.0,550.0,-4147.5,6650.0,-4972.5,7200.0 }, - [9] = { 375.0,250.0,-3237.5,7360.0,-3612.5,7610.0 }, - [10] = { 555.0,370.0,-3895.0,2510.0,-4450.0,2880.0 }, - [11] = { 368.759765625,245.83984375,-5181.2451171875,2989.580078125,-5550.0048828125,3235.419921875 }, - [12] = { 600.0,400.0,-6075.0,2322.5,-6675.0,2722.5 }, - [13] = { 525.0,350.0,-1962.5,1615.0,-2487.5,1965.0 }, - [14] = { 540.0,360.0,-3092.5,2005.0,-3632.5,2365.0 }, - [15] = { 346.5,231.0,-583.75,1030.75,-930.25,1261.75 }, - [16] = { 258.75,172.5,-1008.1300048828125,4326.25,-1266.8800048828125,4498.75 }, - [17] = { 247.5,165.0,-1013.75,4330.0,-1261.25,4495.0 }, - [18] = { 322.5,215.0,-1413.75,6950.0,-1736.25,7165.0 }, - [19] = { 397.5,265.0,-1375.75,6950.0,-1773.25,7215.0 }, - [20] = { 340.0,226.6669921875,-585.0,6499.16650390625,-925.0,6725.83349609375 }, - [21] = { 470.010009765625,313.33984375,-524.9949951171875,6470.830078125,-995.0050048828125,6784.169921875 }, - ['micro'] = { - - }, - } - mapData[945] = { - ['floors'] = 0, ['name'] = "TanaanJungle", ['rzti'] = 1116, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {5100.0,3400.0,-1600.0,5633.3330078125,3500.0,2233.3330078125}, - ['micro'] = { - - }, - } - mapData[946] = { - ['floors'] = 0, ['name'] = "Talador", ['rzti'] = 1116, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {5962.4990234375,3975.0,-5833.3330078125,4429.166015625,129.166015625,454.166015625}, - ['micro'] = { - - }, - } - mapData[947] = { - ['floors'] = 0, ['name'] = "ShadowmoonValleyDR", ['rzti'] = 1116, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {6700.0,4466.6669921875,-2268.75,2660.4169921875,4431.25,-1806.25}, - ['micro'] = { - - }, - } - mapData[948] = { - ['floors'] = 0, ['name'] = "SpiresOfArak", ['rzti'] = 1116, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {6060.416015625,4039.5830078125,-4681.25,1383.3330078125,1379.166015625,-2656.25}, - ['micro'] = { - - }, - } - mapData[949] = { - ['floors'] = 0, ['name'] = "Gorgrond", ['rzti'] = 1116, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {8177.08203125,5450.0,-5066.666015625,9589.5830078125,3110.416015625,4139.5830078125}, - ['micro'] = { - - }, - } - mapData[950] = { - ['floors'] = 0, ['name'] = "NagrandDraenor", ['rzti'] = 1116, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {5675.0,3783.3330078125,-9308.3330078125,4922.916015625,-3633.3330078125,1139.5830078125}, - ['micro'] = { - - }, - } - - mapData[951] = { - ['floors'] = 0, ['name'] = "TimelessIsle", ['rzti'] = 870, ['map_type'] = 0, ['continent'] = 6, ['transform'] = 0, - [1] = {2400.0,1600.0,4083.333984375,233.333984375,6483.333984375,-1366.666015625}, - ['micro'] = { - - }, - } - mapData[953] = { - ['floors'] = 15, ['name'] = "OrgrimmarRaid", ['rzti'] = 1136, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = { 758.3330078125,504.1669921875,-1239.5830078125,1310.4169921875,-481.25,806.25 }, - [2] = { 950.0150146484375,633.34326171875,-199.9949951171875,1095.828369140625,-1150.010009765625,1729.171630859375 }, - [3] = { 562.5,375.0,-716.25,625.0,-1278.75,1000.0 }, - [4] = { 1141.669921875,761.1132202148438,5162.5,893.4033813476562,4020.830078125,1654.5166015625 }, - [5] = { 1210.416015625,806.25,5000.0,1318.75,3789.583984375,2125.0 }, - [6] = { 362.08984375,241.3931884765625,4526.06005859375,1690.87841796875,4163.97021484375,1932.2716064453125 }, - [7] = { 600.0,400.0,4837.5,1500.0,4237.5,1900.0 }, - [8] = { 885.0,590.0,5467.5,1575.0,4582.5,2165.0 }, - [9] = { 1210.0,806.666748046875,5700.0,1059.1666259765625,4490.0,1865.8333740234375 }, - [10] = { 645.0,430.0001220703125,5875.0,1727.0799560546875,5230.0,2157.080078125 }, - [11] = { 885.0,590.0,5967.5,1200.0,5082.5,1790.0 }, - [12] = { 472.5,315.0,5876.25,960.0,5403.75,1275.0 }, - [13] = { 830.005859375,553.3370361328125,6010.0029296875,650.8330078125,5179.9970703125,1204.1700439453125 }, - [14] = { 345.0,230.0,5567.5,985.0,5222.5,1215.0 }, - [15] = { 262.5,175.0,5971.6298828125,975.0,5709.1298828125,1150.0 }, - ['micro'] = { - - }, - } - mapData[955] = { - ['floors'] = 0, ['name'] = "CelestialChallenge", ['rzti'] = 1161, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {2400.0,1600.0,4083.333984375,233.333984375,6483.333984375,-1366.666015625}, - ['micro'] = { - - }, - } ---Draenor Map info may not be 100% accurate - mapData[962] = { - ['floors'] = 0, ['name'] = "Draenor", ['rzti'] = 1116, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {22735.7822265625,15157.1875,-12242.34375,11193.0,10493.4384765625,-3964.1875}, - ['micro'] = { - - }, - } - mapData[964] = { - ['floors'] = 1, ['name'] = "OgreMines", ['rzti'] = 1175, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 1387.5,925.0,918.75,1675.0,-468.75,2600.0 }, - ['micro'] = { - - }, - } - mapData[969] = { - ['floors'] = 3, ['name'] = "ShadowmoonDungeon", ['rzti'] = 1176, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 658.75,439.166748046875,339.7560119628906,1580.4166259765625,-318.9939880371094,2019.5833740234375 }, - [2] = { 825.0,550.0,1025.0,1567.5,200.0,2117.5 }, - [3] = { 250.0,166.666748046875,950.0,1624.1666259765625,700.0,1790.8333740234375 }, - ['micro'] = { - - }, - } - mapData[970] = { - ['floors'] = 0, ['name'] = "TanaanJungleIntro", ['rzti'] = 1265, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = { 454.759765625,303.1728515625,2720.3798828125,4359.99853515625,2265.6201171875,4663.17138671875 }, - ['micro'] = { - - }, - } - mapData[971] = { - ['floors'] = 0, ['name'] = "garrisonsmvalliance", ['rzti'] = 1116, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {683.333984375,456.25,-545.833984375,2091.6669921875,137.5,1635.4169921875}, - ['micro'] = { - - }, - } - mapData[973] = { - ['floors'] = 0, ['name'] = "garrisonsmvalliance_tier1", ['rzti'] = 1116, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {683.333984375,456.25,-545.833984375,2091.6669921875,137.5,1635.4169921875}, - ['micro'] = { - - }, - } - mapData[974] = { - ['floors'] = 0, ['name'] = "garrisonsmvalliance_tier3", ['rzti'] = 1116, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {683.333984375,456.25,-545.833984375,2091.6669921875,137.5,1635.4169921875}, - ['micro'] = { - - }, - } - mapData[975] = { - ['floors'] = 0, ['name'] = "garrisonsmvalliance_tier4", ['rzti'] = 1116, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {683.333984375,456.25,-545.833984375,2091.6669921875,137.5,1635.4169921875}, - ['micro'] = { - - }, - } - mapData[976] = { - ['floors'] = 0, ['name'] = "garrisonffhorde", ['rzti'] = 1116, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {702.0830078125,468.75,-4885.416015625,5814.5830078125,-4183.3330078125,5345.8330078125}, - ['micro'] = { - - }, - } - mapData[978] = { - ['floors'] = 0, ['name'] = "Ashran", ['rzti'] = 1116, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {3122.91796875,2081.25,2672.916015625,5577.0830078125,5795.833984375,3495.8330078125}, - ['micro'] = { - - }, - } - mapData[980] = { - ['floors'] = 0, ['name'] = "garrisonffhorde_tier1", ['rzti'] = 1116, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {702.0830078125,468.75,-4885.416015625,5814.5830078125,-4183.3330078125,5345.8330078125}, - ['micro'] = { - - }, - } - mapData[981] = { - ['floors'] = 0, ['name'] = "garrisonffhorde_tier3", ['rzti'] = 1116, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {702.0830078125,468.75,-4885.416015625,5814.5830078125,-4183.3330078125,5345.8330078125}, - ['micro'] = { - - }, - } - mapData[982] = { - ['floors'] = 0, ['name'] = "garrisonffhorde_tier4", ['rzti'] = 1116, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {702.0830078125,468.75,-4885.416015625,5814.5830078125,-4183.3330078125,5345.8330078125}, - ['micro'] = { - - }, - } - mapData[983] = { - ['floors'] = 0, ['name'] = "DefenseofKarabor", ['rzti'] = 1277, ['map_type'] = 5, ['continent'] = 0, ['transform'] = 0, - [1] = {2031.25,1354.1669921875,1608.333984375,1264.5830078125,3639.583984375,-89.583984375}, - ['micro'] = { - - }, - } - mapData[984] = { - ['floors'] = 1, ['name'] = "DraenorAuchindoun", ['rzti'] = 1182, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 1102.5,735.0,-2398.75,1415.0,-3501.25,2150.0 }, - ['micro'] = { - - }, - } - mapData[986] = { - ['floors'] = 0, ['name'] = "TaladorScenario", ['rzti'] = 1207, ['map_type'] = 5, ['continent'] = 0, ['transform'] = 0, - [1] = {2599.9990234375,1733.3330078125,-4766.666015625,4333.3330078125,-2166.6669921875,2600.0}, - ['micro'] = { - - }, - } - mapData[987] = { - ['floors'] = 1, ['name'] = "IronDocks", ['rzti'] = 1195, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 1132.5,755.0,1332.5,6327.5,200.0,7082.5 }, - ['micro'] = { - - }, - } - mapData[988] = { - ['floors'] = 5, ['name'] = "FoundryRaid", ['rzti'] = 1205, ['map_type'] = 2, ['continent'] = 0, ['transform'] = 0, - [1] = { 937.75,625.1667213439941,-3001.0,-13.83359146118164,-3938.75,611.3331298828125 }, - [2] = { 802.5,535.0,-3098.75,-50.0,-3901.25,485.0 }, - [3] = { 562.5,375.0,-3097.25,80.0,-3659.75,455.0 }, - [4] = { 688.7607421875,459.1739807128906,-2939.36962890625,222.91299438476562,-3628.13037109375,682.0869750976562 }, - [5] = { 450.62109375,300.4139709472656,-3263.189453125,374.1679992675781,-3713.810546875,674.5819702148438 }, - ['micro'] = { - - }, - } - mapData[989] = { - ['floors'] = 2, ['name'] = "SpiresofArakDungeon", ['rzti'] = 1209, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 792.5054931640625,528.3370361328125,-1382.4971923828125,648.3330078125,-2175.002685546875,1176.6700439453125 }, - [2] = { 337.5,225.0,-1556.25,750.0,-1893.75,975.0 }, - ['micro'] = { - - }, - } - mapData[990] = { - ['floors'] = 0, ['name'] = "garrisonffhorde_tier2", ['rzti'] = 1116, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {702.0830078125,468.75,-4885.416015625,5814.5830078125,-4183.3330078125,5345.8330078125}, - ['micro'] = { - - }, - } - mapData[991] = { - ['floors'] = 0, ['name'] = "garrisonsmvalliance_tier2", ['rzti'] = 1116, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {683.333984375,456.25,-545.833984375,2091.6669921875,137.5,1635.4169921875}, - ['micro'] = { - - }, - } - mapData[992] = { - ['floors'] = 0, ['name'] = "BlastedLands_terrain1", ['rzti'] = 0, ['map_type'] = 0, ['continent'] = 1, ['transform'] = 0, - [1] = {3662.5,2441.66796875,1193.75,-10583.33203125,4856.25,-13025.0}, - ['micro'] = { - - }, - } - mapData[993] = { - ['floors'] = 4, ['name'] = "BlackrockTrainDepotDungeon", ['rzti'] = 1208, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 318.75,212.5,-1465.6300048828125,1593.75,-1784.3800048828125,1806.25 }, - [2] = { 318.75,212.5,-1465.6300048828125,1593.75,-1784.3800048828125,1806.25 }, - [3] = { 295.0,196.666748046875,-1740.0,1551.6666259765625,-2035.0,1748.3333740234375 }, - [4] = { 270.0,180.0,-1505.0,1560.0,-1775.0,1740.0 }, - ['micro'] = { - - }, - } - mapData[994] = { - ['floors'] = 5, ['name'] = "HighmaulRaid", ['rzti'] = 1228, ['map_type'] = 2, ['continent'] = 0, ['transform'] = 0, - [1] = { 247.5,165.0,-7446.25,3380.0,-7693.75,3545.0 }, - [2] = { 400.0,266.66650390625,-7375.0,3336.666748046875,-7775.0,3603.333251953125 }, - [3] = { 660.0,440.0,-8195.3095703125,3755.0,-8855.3095703125,4195.0 }, - [4] = { 937.5,625.0,-8056.25,3725.0,-8993.75,4350.0 }, - [5] = { 862.5,575.0,-8118.75,3775.0,-8981.25,4350.0 }, - ['micro'] = { - - }, - } - mapData[995] = { - ['floors'] = 3, ['name'] = "UpperBlackrockSpire", ['rzti'] = 1358, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = { 886.8390140533447,591.2260131835938,876.2520141601562,-286.8280029296875,-10.586999893188477,304.39801025390625 }, - [2] = { 886.8390140533447,591.2260131835938,876.2520141601562,-286.8280029296875,-10.586999893188477,304.39801025390625 }, - [3] = { 886.8390140533447,591.2260131835938,876.2520141601562,-286.8280029296875,-10.586999893188477,304.39801025390625 }, - ['micro'] = { - - }, - } - mapData[1008] = { - ['floors'] = 0, ['name'] = "OvergrownOutpost", ['rzti'] = 1279, ['map_type'] = 1, ['continent'] = 0, ['transform'] = 0, - [1] = {1418.75,945.833984375,-2354.1669921875,956.25,-935.4169921875,10.416015625}, - ['micro'] = { - - }, - } - mapData[1009] = { - ['floors'] = 0, ['name'] = "AshranAllianceFactionHub", ['rzti'] = 1116, ['map_type'] = 0, ['continent'] = 0, ['transform'] = 0, - [1] = {687.5,458.3330078125,3625.0,3908.3330078125,4312.5,3450.0}, - ['micro'] = { - - }, - } - -- Dustwallow Transition patch for client that havent been patched - SetMapByID(141) - local dwMap = GetMapInfo() - if dwMap == "DustwallowMarsh" then - mapData[141].name = "Dustwallow" - end - -- Create Reverse map - for k,v in pairs(mapData) do - idToMap[v['name']] = k - end - - -- Phasing Hacks - for k,v in pairs(idToMap) do - local m,e = string.find(k,"_terrain%d") - if m then - local rmap = k:sub(1,m-1) - idToMap[k] = idToMap[rmap] - end - end - -- non terrain style remap for battle of gilneas - idToMap["BattleforGilneas"] = idToMap["GilneasCity"] - - --Takes MapID and ZoneNames from GetMapZones() and returns them in a table of {[MapID]=ZoneName} - local function ZoneInfo(...) - local t = {} - for i=1, select("#", ...), 2 do - local MapID = select(i, ...) - local ZoneName = select(i+1, ...) - t[MapID] = ZoneName - end - return t - end - - -- Build the localized name list. - for cID_new, cname in next, {GetMapContinents()} do - if type(cname) == "string" then -- This table is 50% string and 50% number in Patch 6.0.2+ - local cID = cID_new / 2 -- Filtering to 'string' types and dividing the index by 2 fixes the issue - SetMapZoom(cID, 0) - local mapfile = GetMapInfo() - mapToLocal[mapfile] = cname - localToMap[cname] = mapfile - mapData[idToMap[mapfile]].continent = cID - for zID, zname in pairs(ZoneInfo(GetMapZones(cID))) do - SetMapByID(zID) - local mapfile = GetMapInfo() - -- L: X1, T: Y1, R: X2, B: Y2 New GetCurrentMapZone - mapToLocal[mapfile] = zname - localToMap[zname] = mapfile - mapData[idToMap[mapfile]].continent = cID - -- Phasing Hacks - local mstart,e = string.find(mapfile,"_terrain%d") - if mstart then - local rmap = mapfile:sub(1,mstart-1) - mapToLocal[rmap] = zname - mapData[idToMap[rmap]].continent = cID - end - end - end - end - - for k,v in pairs(mapData) do - local rName = rawget(mapToLocal,v.name) - if rName == nil and v.rzti then - mapToLocal[v.name] = GetRealZoneText(v.rzti) - end - SetMapByID(k) - local _,l,t,r,b = GetCurrentMapZone() - local floors = GetNumDungeonMapLevels(); - local width, height = 0,0 - width = math.abs((-l) - (-r)) - height = math.abs(t - b) - if l and l ~= 0 and t and t~= 0 and r and r ~= 0 and b and b ~= 0 and v.floors == 0 then - if v[1][1] ~= width then - v[1][1] = width - end - if v[1][2] ~= height then - v[1][2] = height - end - v[1][3] = -l - v[1][4] = t - v[1][5] = -r - v[1][6] = b - end - -- update floor data if we can - if v.floors > 0 and floors > 0 then - for f = 1, floors do - SetDungeonMapLevel(f) - local _, l, t, r, b = GetCurrentMapDungeonLevel() - if l and l ~= 0 and t and t~= 0 and r and r ~= 0 and b and b ~= 0 then - if v[f] == nil then - v[f] = {} - end - local width, height = 0,0 - width = math.abs((-l) - (-r)) - height = math.abs(t - b) - if v[f][3] ~= -l and v[f][4] ~= t and v[f][5] ~= -r and v[f][6] ~= b then - v[f][1] = width - v[f][2] = height - v[f][3] = -l - v[f][4] = t - v[f][5] = -r - v[f][6] = b - end - end - end - end - end -end - ---- API to encode a location in game --- @param x --- @param y --- @param mapLevel --- @return encoded location number -function lib:EncodeLoc(x,y,level) - local level = level or 0 - if x > 0.9999 then - x = 0.9999 - end - if y > 0.9999 then - y = 0.9999 - end - return floor( x * 10000 + 0.5 ) * 1000000 + floor( y * 10000 + 0.5 ) * 100 + level -end - ---- API to decode a location num --- @param location id --- @return x,y,level -function lib:DecodeLoc(id) - return floor(id/1000000)/10000, floor(id % 1000000 / 100)/10000, id % 100 -end - ---- API to list all zones --- @param (optional) table to store results in --- @return a table of zones -function lib:GetAllMapIDs(storage) - local t = storage or {} - local i = 1 - for k,v in pairs(mapData) do - t[i] = k - i= i + 1 - end - return t -end - ---- API to list raids --- @param (optional) table to store results in --- @return a table containing the raid area ids -function lib:GetRaids(storage) - local t = storage or {} - local i = 1 - for k,v in pairs(mapData) do - if v.map_type == 2 then - t[i] = k - i = i + 1 - end - end - return t -end - ---- API to list dungeons --- @param (optional) table to store results in --- @return a table containing the dungeon area ids -function lib:GetDungeons(storage) - local t = storage or {} - local i = 1 - for k,v in pairs(mapData) do - if v.map_type == 1 then - t[i] = k - i = i + 1 - end - end - return t -end - - ---- API to get the continent for a given map --- @param the map file or id to check --- @return the in-game continent index -function lib:GetContinentFromMap(mapfile) - if type(mapfile) == "string" then - mapfile = idToMap[mapfile] - end - if mapfile == WORLDMAP_COSMIC_ID then return -1 end - return mapData[mapfile].continent -end - ---- API to list zones by continent --- @param Continent index --- @param (optional) table to store results in --- @return a table containing the zone area ids -function lib:GetZonesForContinent(continent, storage) - local t = storage or {} - if continent < 1 then - return t - end - local i = 1 - for k,v in pairs(mapData) do - if v.continent == continent then - t[i] = k - i = i + 1 - end - end - return t -end ---- API to determine is a map is a continent --- @param mapfile or area id to check --- @return true if a continent -function lib:IsContinentMap(mapfile) - if type(mapfile) == "string" then - mapfile = idToMap[mapfile] - end - if mapfile == WORLDMAP_COSMIC_ID then return true end - if mapfile == 466 or mapfile == 485 or mapfile == 13 or mapfile == 14 or mapfile == 751 then - return true - end - return false -end - ---[[ - The upper lft, lower right coords are the position within the continent map - so to figure out location on a given continent, we need to upscale the x,y to the continent ---]] - ---- API to get distance and direction to a target in the same map --- @param mapfile to use --- @param targetX coords --- @param targetY coords --- @return distance,angle where distance is yards and angle is radians -function lib:DistanceAndDirection(mapfile,floor,targetX, targetY) - local srcX,srcY = GetPlayerMapPosition("player") - local distance,xd,yd = self:Distance(mapfile,floor,srcX,srcY,targetX,targetY) - local radians = atan2(xd,-yd) - if radians > 0 then - radians = PI2 - radians - else - radians = -radians - end - return distance,radians -end - ---- API to calc the distance between 2 locations within the same mapfile --- @param mapfile or area_id --- @param floor to use --- @param srcX starting x --- @param srcY starting y --- @param dstX destination x --- @param dstY destination y --- @return distance, xdelta, ydelta where distance is the total distance, xdelta is the delta of the x values and ydelta is the detla of y values all in yards -function lib:Distance(mapfile,floor, srcX,srcY,dstX,dstY) - assert(floor == nil or (type(floor) == "number" and floor)) - local width = 0 - local height = 0 - if type(mapfile) == "string" then - mapfile = idToMap[mapfile] - end - if mapfile == WORLDMAP_COSMIC_ID then return 0,0,0 end - local data = mapData[mapfile] - local fl = data[floor] - if floor and floor <= data['floors'] and floor > 0 then - width, height = fl[1],fl[2] - elseif floor and floor > 0 and data['micro'] and data['micro'][floor] then - width, height = data['micro'][floor][1],data['micro'][floor][2] - else - fl = data[1] - width,height = fl[1], fl[2] - end - local x = (dstX - srcX) * width - local y = (dstY - srcY) * height - return (x*x + y*y)^0.5,x,y -end - ---- API to convert an x,y (yards) in a given zone up to the world map --- @param mapfile --- @param x in yards --- @param y in yards --- @return the x,y point in world map yards -function lib:ConvertToWorldPoint(mapfile,x,y) - if type(mapfile) == "string" then - mapfile = idToMap[mapfile] - end - if mapfile == WORLDMAP_COSMIC_ID then return 0 end - local fl = mapData[mapfile] - -- Convert to continet data - local x1,y1 = self:ConvertToContinent(mapfile,0,x,y) - return x1 + contOffsets[fl.continent][1], y1 + contOffsets[fl.continent][2] -end - ---- API to convert from the world poistion in yars to the world map scale --- @param x the world map x point in yards --- @param y in the world map yard point --- @return x,y in world map frame scale -function lib:ConvertFromWorldPoint(x,y) - return x/worldMapWidth, y/worldMapHeight -end - --- API to convert from continent x,y (in yards) to zone x,y --- @param map the map to use --- @param floor the floor to use --- @param x in yards --- @param y in yards --- @return x,y in zone scale -function lib:ConvertFromContinent(map,floor,x,y) - if type(map) == "string" then - map = idToMap[map] - end - if map == WORLDMAP_COSMIC_ID then return 0,0 end - local zx1,zy1 = self:GetMapUpperLeft(map,floor) - local zx2,zy2 = self:GetMapLowerRight(map,floor) - local x,y = (x-zx1)/(zx1-zx2), (y-zy1)/(zy2-zy1) - if mapData[map].transform == 1 then - x = x - transforms_x[mapData[map].continent] - y = y - transforms_y[mapData[map].continent] - end - return x,y -end - --- API to convert to continent x,y (in yards) from zone x,y --- @param map the map to use --- @param floor the floor to use --- @param x in yards --- @param y in yards --- @return x,y in continent scale -function lib:ConvertToContinent(map,floor, x,y) - if type(map) == "string" then - map = idToMap[map] - end - if map == WORLDMAP_COSMIC_ID then return 0,0 end - local zx1,zy1 = self:GetMapUpperLeft(map,floor) - local zx2,zy2 = self:GetMapLowerRight(map,floor) - local x,y = zx1 + (zx2-zx1)*x,zy1 + (zy2-zy1)*y - if mapData[map].transform == 1 then - x = x + transforms_x[mapData[map].continent] - y = y + transforms_y[mapData[map].continent] - end - return x,-y -end - ---- API to calc the distance between 2 locations across map files --- @param srcMap or area_id --- @param srcFloor to use --- @param srcX starting x --- @param srcY starting y --- @param dstMap destination map file --- @param dstFloor destination floor --- @param dstX destination x --- @param dstY destination y --- @return distance, xdelta, ydelta where distance is the total distance, xdelta is the delta of the x values and ydelta is the detla of y values all in yards -function lib:DistanceWithinContinent(srcMap,srcFloor, srcX, srcY, dstMap, dstFloor, dstX, dstY) - assert(srcFloor == nil or (type(srcFloor) == "number" and srcFloor)) - assert(dstFloor == nil or (type(dstFloor) == "number" and dstFloor)) - if type(dstMap) == "string" then - dstMap = idToMap[dstMap] - end - if type(srcMap) == "string" then - srcMap = idToMap[srcMap] - end - - if srcMap == WORLDMAP_COSMIC_ID or dstMap == WORLDMAP_COSMIC_ID then - return 0,0,0 - end - - if mapData[srcMap].continent ~= mapData[dstMap].continent then - return 0,0,0 - end - local startX, startY = self:ConvertToContinent(srcMap,srcFloor, srcX, srcY) - local endX, endY = self:ConvertToContinent(dstMap,dstFloor, dstX, dstY) - local x = (endX - startX) - local y = (endY - startY) - return (x*x+y*y)^0.5,x,y -end - ---- API to convert coords to yards --- @param mapfile or area_id --- @param floor --- @param x coord --- @param y coord --- @return x,y as yards -function lib:PointToYards(mapfile,floor, x, y) - assert(floor == nil or (type(floor) == "number" and floor)) - local width = 0 - local height = 0 - if type(mapfile) == "string" then - mapfile = idToMap[mapfile] - end - if mapfile == WORLDMAP_COSMIC_ID then return 0,0 end - local data = mapData[mapfile] - local fl = data[floor] - if floor and floor <= data['floors'] and floor > 0 then - width, height = fl[1],fl[2] - elseif floor and floor > 0 and data['micro'] and data['micro'][floor] then - width, height = data['micro'][floor][1],data['micro'][floor][2] - else - fl = data[1] - width,height = fl[1], fl[2] - end - return x * width, y * height -end - ---- API to convert from yards to a point --- @param mapfile or area_id --- @param floor --- @param x coord in yards --- @param y coord in yards --- @return x,y as a fractional point -function lib:YardsToPoint(mapfile,floor,x,y) - assert(floor == nil or (type(floor) == "number" and floor)) - local width = 0 - local height = 0 - if type(mapfile) == "string" then - mapfile = idToMap[mapfile] - end - if mapfile == WORLDMAP_COSMIC_ID then return 0,0 end - local data = mapData[mapfile] - local fl = data[floor] - if floor and floor <= data['floors'] and floor > 0 then - width, height = fl[1],fl[2] - elseif floor and floor > 0 and data['micro'] and data['micro'][floor] then - width, height = data['micro'][floor][1],data['micro'][floor][floor][2] - else - fl = data[1] - width,height = fl[1], fl[2] - end - return x/width, y/height -end - - ---- API to get the number of floors of a given map --- @param mapfile the mapfile you wish to check or area id from GetCurrentMapAreaID() --- @return number of floors or 0 if no floors exist --- @usage floors = lib:MapFloors(GetMapInfo()) -function lib:MapFloors(mapfile) - if type(mapfile) == "string" then - mapfile = idToMap[mapfile] - end - if mapfile == WORLDMAP_COSMIC_ID then return 0 end - local fl = mapData[mapfile]['floors'] - if fl == 1 then - fl = 0 - end - return fl -end - ---- API to get area id for a given map file --- @param mapfile to check --- @return area_id or 0 if the map doesnt exist --- @usage aid = lib:MapAreaId(GetMapInfo()) -function lib:MapAreaId(mapfile) - assert(mapfile and type(mapfile) == "string") - return idToMap[mapfile] -end - ---- API to get localized name of a given map file --- @param mapfile or area id to check, note area id is more accurate --- @return the localized map name or nil --- @usage lname = lib:MapLocalized(GetMapInfo()) -function lib:MapLocalize(mapfile) - if type(mapfile) == "number" then - mapfile = mapData[mapfile]['name'] - end - if mapfile == WORLDMAP_COSMIC_ID then return WORLD_MAP end - return mapToLocal[mapfile] -end - ---- API to get the width,height of a given map --- @param mapfile you wish to interrogate or area id from GetCurrentMapAreaID() --- @param floor optional floor you wish to examine --- @return width,height in yards or 0,0 if no data exists. Will add a message to the DEFAULT_CHAT_FRAME --- @usage local w,h = lib:MapArea(GetMapInfo(),GetCurrentMapDungeonLevel()) -function lib:MapArea(mapfile,floor) - assert(floor == nil or (type(floor) == "number" and floor)) - if type(mapfile) == "string" then - mapfile = idToMap[mapfile] - end - if mapfile == WORLDMAP_COSMIC_ID then return 0,0 end - local data = mapData[mapfile] - local fl = data[floor] - if floor and floor <= data['floors'] and floor > 0 then - return fl[1],fl[2] - elseif floor and floor > 0 and data['micro'] and data['micro'][floor] then - return data['micro'][floor][1],data['micro'][floor][2] - else - if floor and floor > 0 then - return 0,0 - end - fl = data[1] - return fl[1], fl[2] - end -end - - ---- API to get the upper left x,y of a given map --- @param mapfile you wish to interrogate or area id from GetCurrentMapAreaID() --- @param floor optional floor you wish to examine --- @return x,y or the upper left corner or 0,0 if no data exists. Will add a message to the DEFAULT_CHAT_FRAME --- @usage local x,y = lib:MapUpperLeft(GetMapInfo(),GetCurrentMapDungeonLevel()) -function lib:GetMapUpperLeft(mapfile, floor) - assert(floor == nil or (floor and floor >= 0)) - if type(mapfile) == "string" then - mapfile = idToMap[mapfile] - end - if mapfile == WORLDMAP_COSMIC_ID then return 0,0 end - local data = mapData[mapfile] - local fl = data[floor + 1] - if floor and floor <= data['floors'] then - return fl[3],fl[4] - elseif floor and floor > 0 and data['micro'] and data['micro'][floor] then - return data['micro'][floor][3],data['micro'][floor][4] - else - if floor and floor > 0 then - return 0,0 - end - fl = data[1] - return fl[3],fl[4] - end -end - ---- API to get the lower right x,y of a given map --- @param mapfile you wish to interrogate or area id from GetCurrentMapAreaID() --- @param floor optional floor you wish to examine --- @return x,y or the lower right corner or 0,0 if no data exists. Will add a message to the DEFAULT_CHAT_FRAME --- @usage local x,y = lib:MapLowerRight(GetMapInfo(),GetCurrentMapDungeonLevel()) -function lib:GetMapLowerRight(mapfile, floor) - assert(floor == nil or (floor and floor >= 0)) - if type(mapfile) == "string" then - mapfile = idToMap[mapfile] - end - if mapfile == WORLDMAP_COSMIC_ID then return 0,0 end - local data = mapData[mapfile] - local fl = data[floor + 1] - if floor and floor <= data['floors'] then - return fl[5],fl[6] - elseif floor and floor > 0 and data['micro'] and data['micro'][floor] then - return data['micro'][floor][5],data['micro'][floor][6] - else - if floor and floor > 0 then - return 0,0 - end - fl = data[1] - return fl[5],fl[6] - end -end - ---- API to force a zone change check --- calling this method will fire a callback --- @param force, optional if you want to force a check even if data hasnt changed --- @return void -function lib:ZoneChanged(force) - if WorldMapFrame:IsVisible() then return end - SetMapToCurrentZone() - local x,y = GetPlayerMapPosition("player") - -- if the player is in an instance without a map then dont fire anything - if x == 0 and y == 0 then - return - end - local map = GetMapInfo() - if map == nil then - return - end - local floor = GetCurrentMapDungeonLevel() - if map ~= lastMap or floor ~= lastFloor or force then - local w,h = self:MapArea(map,floor) - self.callbacks:Fire("MapChanged",map,floor,w,h) - lastMap = map - lastFloor = floor - end -end - --- Turn on events on someone registers for them -function lib.callbacks:OnUsed() - watchFrame:RegisterEvent("PLAYER_ENTERING_WORLD") - watchFrame:RegisterEvent("ZONE_CHANGED") - watchFrame:RegisterEvent("ZONE_CHANGED_NEW_AREA") - watchFrame:RegisterEvent("ZONE_CHANGED_INDOORS") - lib:ZoneChanged(true) -end - --- turn off events once we no longer have listeners -function lib.callbacks:OnUnused() - watchFrame:UnregisterAllEvents() -end -watchFrame:SetScript("OnEvent", function(frame,event,...) - lib:ZoneChanged(false) -end) - ---@alpha@ -function lib:Test() - -- Validate map files are all present. - for cID_new, cname in next, {GetMapContinents()} do - if type(cname) == "string" then - local cID = cID_new / 2 - print("Continent "..cID) - for zID, zname in pairs(ZoneInfo(GetMapZones(cID))) do - SetMapByID(zID) - local mapFile = GetMapInfo() - local area_id = GetCurrentMapAreaID() - local w, h = self:MapArea(mapFile) - local aid = self:MapAreaId(mapFile) - if w == 0 and h == 0 then - error("Failed to find map "..mapFile) - end - if area_id ~= aid then - error(mapFile.." area id mismatch") - end - end - end - end - print("All Tests passed") -end \ No newline at end of file -- 1.7.9.5