WoWInterface SVN EFM-KharthusUpdates

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 1 to Rev 2
    Reverse comparison

Rev 1 → Rev 2

trunk/readme.txt New file
0,0 → 1,78
Description
-----------
Enhancements to the flight system.
 
The addon:-
1) Adds an in-flight timer. This can be displayed as either text or a graphical bar.
2) Adds flight time estimates to the flight master screen.
3) Adds the ability to show a remote flight master screen.
This screen does not allow flight, but will display all flight paths that you have ever seen, not just the ones for this character.
4) Adds the flight master locations to your zone map.
5) Calculates flight times as the addon runs and you take flights.
Each additional flight over a specific path averages the flight times together to provide a median flight time estimate.
6) Adds a flight map overlay to your continent map window.
 
Note: For those who used the addon prior to version 2.0, this new version requires a complete rework of the data set.
The new data structure is such a change from the previous versions that it is necessary to erase all your previous data.
As before the addon will load new data on the fly, and any who supply me with any missing data will receive credits as appropriate.
 
 
Website
-------
EnhancedFlightMap's official website is at http://lysaddons.game-host.org
 
 
Usage
-----
Initially the addon is in a learning mode, meaning it has no knowledge of any flightpaths in the world, and you need to train it by visiting flight masters and looking at the screen.
As you learn new flight paths it will update it's data set automatically (this also means if blizzard adds new flightpaths you will show them automatically when you see them).
 
Data is updated all the time for the preloaded data set, so if you must use the preloaded data, please check back with the official website every so often for updates.
 
The program does have a few slash commands however, to view them, please use /efm or /efm help.
 
The configuration screen is accessible via /efm config.
 
Other than that, the addon operates all the time, so enjoy.
 
 
Bugs
----
Please read bugreport.txt, follow the instructions therein and provide the form details in your bug report post.
 
Even if you don't follow the format, I do need most of the information in that form...
 
 
Special Thanks
--------------
To send me a copy of your data set to add missing data to the preload data set, send the global EnhancedFlightMap.lua file from your SavedVariables directory to lysaddons@gmail.com, include EFM DATA (in all caps) or else your email will be ignored.
 
Special thanks go to the authors of the following addons as without their addon, this addon would not be possible in it's current form.
VisibleFlightMap - The original program I based my addon off, this is so modified and re-written that it is almost unrecognizable as having come from there, so I'm listing it here so the original author gets credit for their idea.
Kwarz's FlightPath - Kwarz appears to have stopped developing this one, so I've snaffled sections of his code for use in my addon, I had to re-write it to suit my data structures, and some sections I have just used his concepts, but the code concept for things like the flight timers are all taken from this addon.
 
Also, without the following people the addon would be missing a lot of it's features:-
 
Flight Data
Bam at Curse-gaming
jgleigh at Curse-gaming
zespri at EFM Forums
 
French Language Translation
Corwin Whitehorn at Curse-gaming
 
German Language Translation
Gazzis at Curse-Gaming
lapicidae at worldofwar.net
themicro at EFM Forums
Gollath from the realm of Taerar (de).
 
Russian Language Translation
Паладкобальт" on the realm "Ясеневый лес" (ru) (thank goodness my machine understands UTF-8 *grin*).
 
General Translation information
Khisanth at curse-gaming and worldofwar.net
 
--
Lysidia of Feathermoon (US)
 
Property changes : Added: svn:executable +
trunk/KnownPaths.lua New file
0,0 → 1,39
--[[
 
KnownPaths.lua
 
This segment deals with who knows what flight path.
 
]]
 
-- Function: Record that the player knows this flight master.
function EFM_KP_AddLocation(myContinent, myNode)
local continent = EFM_Shared_GetContinentName(myContinent);
 
if (EFM_KnownNodes == nil) then
EFM_KnownNodes = {};
end
 
if (EFM_KnownNodes[continent] == nil) then
EFM_KnownNodes[continent] = {};
end
 
if (not EFM_KP_CheckPaths(myContinent, myNode)) then
table.insert(EFM_KnownNodes[continent], myNode);
end
end
 
-- Function: Check if player knows the flight path, return true if known, false otherwise.
function EFM_KP_CheckPaths(myContinent, myNode)
if (EFM_KnownNodes ~= nil) then
local continent = EFM_Shared_GetContinentName(myContinent);
if (EFM_KnownNodes[continent] ~= nil) then
for key, val in pairs(EFM_KnownNodes[continent]) do
if (val == myNode) then
return true;
end
end
end
end
return false;
end
Property changes : Added: svn:executable +
trunk/shared_functions.lua New file
0,0 → 1,111
--[[
 
shared_functions.lua
 
Various functions used by EFM.
]]
 
-- Function: Return the string value for slash command options...
function EFM_SF_SlashClean(commandString, msgLine)
local tempValue;
 
tempValue = string.sub(msgLine, (string.len(commandString) + 2));
 
if (string.find(tempValue, "^\"") ~= nil) then
tempValue = string.sub(tempValue, 2);
end
 
if (string.find(tempValue, "\"$") ~= nil) then
tempValue = string.sub(tempValue, 1, (string.len(tempValue) - 1));
end
 
return tempValue;
end
 
-- Function: Check to see if a given string is in the table keys
function EFM_SF_StringInTableKeys(inputTable, inputString)
for key, val in pairs(inputTable) do
if (key == inputString) then
return true;
end
end
return false;
end
 
-- Function: Check to see if a given string is in the table.
function EFM_SF_StringInTable(inputTable, inputString)
for index = 1, table.getn(inputTable) do
if (inputTable[index] == inputString) then
return true;
end
end
return false;
end
 
-- Function: Merge two LUA tables
function EFM_SF_mergeTable(src,dest)
for key,val in pairs(src) do
local dval = dest[key];
if (type(val) == "table") then
if (dval == nil) then
dval = {};
dest[key] = dval;
end
EFM_SF_mergeTable(val, dval)
else
if ((dval == nil) and (dval ~= val)) then
dest[key] = val;
end
end
end
end
 
-- Function: Format an input number to return a human-readable time format.
function EFM_SF_FormatTime(duration)
local minutes = floor(duration / 60);
local seconds = duration - (minutes * 60);
local tens = floor(seconds/10);
local single = seconds - (tens * 10);
return minutes..":"..tens..single;
end
 
-- Function: Return the value to the given precision
function EFM_SF_ValueToPrecision(value, precision)
local precValue = 10 ^ precision;
 
value = floor(value * precValue) / precValue;
 
return value;
end
 
-- Function: Send a debug message out.
function EFM_Shared_DebugMessage(message, debug)
if (debug) then
DEFAULT_CHAT_FRAME:AddMessage("Debug: "..message, 0.8, 0.4, 0.4);
end
end
 
-- Function: Get "World Map" location
function EFM_Shared_GetWorldMapPosition()
SetMapZoom(GetCurrentMapContinent());
local mapX, mapY = GetPlayerMapPosition("player");
 
mapX = EFM_SF_ValueToPrecision(mapX, 2);
mapY = EFM_SF_ValueToPrecision(mapY, 2);
 
return mapX, mapY;
end
 
-- Function: Get continent name
function EFM_Shared_GetContinentName(continentNum)
local continentNames, key, val = { GetMapContinents() } ;
 
return continentNames[continentNum];
end
 
-- Function: Get zone name
function EFM_Shared_GetZoneName(continentNum, zoneNum)
local zoneNames = { GetMapZones(continentNum) } ;
 
return zoneNames[zoneNum];
end
Property changes : Added: svn:executable +
trunk/FlightStatus.xml New file
0,0 → 1,115
<Ui xmlns="http://www.blizzard.com/wow/ui" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Frame name="EFM_FlightStatus" parent="UIParent" frameStrata="LOW">
<Size>
<AbsDimension x="400" y="70" />
</Size>
<Anchors>
<Anchor point="CENTER" relativeTo="UIParent">
<Offset>
<AbsDimension x="0" y="0" />
</Offset>
</Anchor>
</Anchors>
<Frames>
<Frame name="EFM_FlightStatus_Timer">
<Size>
<AbsDimension x="380" y="17" />
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="10" y="-40" />
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer>
<FontString name="$parentLabel" setAllPoints="true" font="Fonts\FRIZQT__.TTF" text="Text Timer">
<FontHeight>
<AbsValue val="12" />
</FontHeight>
<Color r="1" g="1" b="0" />
<Shadow>
<Color r="0" g="0" b="0" />
<Offset>
<AbsDimension x="1" y="-1" />
</Offset>
</Shadow>
</FontString>
</Layer>
</Layers>
</Frame>
<Frame name="$parentPanel1" frameStrata="BACKGROUND">
<Size>
<AbsDimension x="380" y="25" />
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="10" y="-36" />
</Offset>
</Anchor>
</Anchors>
<Backdrop edgeFile="Interface\Tooltips\UI-Tooltip-Border" tile="true">
<BackgroundInsets>
<AbsInset left="5" right="5" top="5" bottom="5" />
</BackgroundInsets>
<TileSize>
<AbsValue val="16" />
</TileSize>
<EdgeSize>
<AbsValue val="16" />
</EdgeSize>
<Color r="1" g="1" b="1" a="0" />
</Backdrop>
<Frames>
<StatusBar name="EFM_FlightStatus_StatusBar" drawLayer="BACKGROUND" minValue="0" maxValue="1" defaultValue="0.5">
<Size>
<AbsDimension x="370" y="15" />
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="5" y="-5" />
</Offset>
</Anchor>
</Anchors>
<BarTexture file="Interface\TargetingFrame\UI-StatusBar">
<Color r="1" g="1" b="1" a="0" />
</BarTexture>
<BarColor r="0.5019608" g="1" b="0.5019608" />
</StatusBar>
</Frames>
</Frame>
<Frame name="$parent_Dest">
<Size>
<AbsDimension x="380" y="20" />
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="10" y="-10" />
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer>
<FontString name="$parentLabel" setAllPoints="true" font="Fonts\FRIZQT__.TTF" text="Flying To:">
<FontHeight>
<AbsValue val="12" />
</FontHeight>
<Color r="1" g="1" b="0" />
<Shadow>
<Color r="0" g="0" b="0" />
<Offset>
<AbsDimension x="1" y="-1" />
</Offset>
</Shadow>
</FontString>
</Layer>
</Layers>
</Frame>
</Frames>
</Frame>
</Ui>
 
Property changes : Added: svn:executable +
trunk/nodeinfo.lua New file
0,0 → 1,334
--[[
 
nodeinfo.lua
 
This file contains all the various information routines related to flight nodes.
 
]]
 
-- Function: Check if player is flagged to know a flight path.
function EFM_NI_CheckReachable(myContinent, myNode)
local myDebug = false;
local continentName = EFM_Shared_GetContinentName(myContinent);
 
if (EFM_ReachableNodes ~= nil) then
if (EFM_ReachableNodes[continentName] ~= nil) then
for key, val in pairs(EFM_ReachableNodes[continentName]) do
if (val == myNode) then
return true;
end
end
end
end
return false;
end
 
-- Function: Record that the player can reach this flight master.
function EFM_NI_Reachable(myContinent, myNode, status)
local continent = EFM_Shared_GetContinentName(myContinent);
 
if (EFM_ReachableNodes == nil) then
EFM_ReachableNodes = {};
end
 
if (EFM_ReachableNodes[continent] == nil) then
EFM_ReachableNodes[continent] = {};
end
 
if (not EFM_NI_CheckReachable(myContinent, myNode)) then
table.insert(EFM_ReachableNodes[continent], myNode);
--EFM_NI_AddFaction(myNode);
end
end
 
-- Function: Create a base node entry.
function EFM_NI_CreateNode(continent, nodeName, nodeStyle)
local myDebug = false;
local myNodes = EFM_Data;
 
SetMapToCurrentZone();
local myContinent = EFM_Shared_GetContinentName(continent);
local myZone = EFM_Shared_GetZoneName(continent, GetCurrentMapZone());
 
if (nodeStyle == 1) then
myNodes = EFM_WaterNodes;
EFM_Shared_DebugMessage("Adding Water Node.", Lys_Debug);
end
 
EFM_Shared_DebugMessage("Adding entry for "..nodeName, Lys_Debug);
 
if (myNodes == nil) then
myNodes = {};
end
 
if (myNodes[EFM_Global_Faction] == nil) then
myNodes[EFM_Global_Faction] = {};
end
 
if (myNodes[EFM_Global_Faction][myContinent] == nil) then
myNodes[EFM_Global_Faction][myContinent] = {};
end
 
if (myNodes[EFM_Global_Faction][myContinent][myZone] == nil) then
myNodes[EFM_Global_Faction][myContinent][myZone] = {};
end
 
if (myNodes[EFM_Global_Faction][myContinent][myZone][nodeName] == nil) then
myNodes[EFM_Global_Faction][myContinent][myZone][nodeName] = {};
end
 
myNodes[EFM_Global_Faction][myContinent][myZone][nodeName]["name"] = nodeName;
EFM_KP_AddLocation(continent, nodeName);
end
 
-- Function: Return the node entry for a given node name.
function EFM_NI_GetNodeByName(searchNodeName, nodeStyle)
local myDebug = false;
 
local myData;
 
if (nodeStyle == 1) then
myData = EFM_WaterNodes;
EFM_Shared_DebugMessage("Searching Water Nodes.", myDebug);
else
myData = EFM_Data;
EFM_Shared_DebugMessage("Searching Land Nodes.", myDebug);
end
 
if (myData ~= nil) then
if (myData[EFM_Global_Faction] ~= nil) then
for myContinent in pairs(myData[EFM_Global_Faction]) do
for myZone in pairs(myData[EFM_Global_Faction][myContinent]) do
for myNode in pairs(myData[EFM_Global_Faction][myContinent][myZone]) do
if (myNode == searchNodeName) then
EFM_Shared_DebugMessage("Found Node "..searchNodeName..".", myDebug);
return myData[EFM_Global_Faction][myContinent][myZone][myNode];
end
end
end
end
end
end
 
return nil;
end
 
-- Function: Add the flight map location to a node.
function EFM_NI_AddNode_fmLoc(nodeName, X, Y, nodeStyle)
local myNode = EFM_NI_GetNodeByName(nodeName, nodeStyle);
if (myNode ~= nil) then
myNode["fmLoc"] = {};
myNode["fmLoc"]["x"] = tostring(X);
myNode["fmLoc"]["y"] = tostring(Y);
end
end
 
-- Function: Add the zone map location to a node.
function EFM_NI_AddNode_zoneLoc(nodeName, X, Y, nodeStyle)
local myNode = EFM_NI_GetNodeByName(nodeName, nodeStyle);
if (myNode ~= nil) then
myNode["zmLoc"] = {};
myNode["zmLoc"]["x"] = tostring(X);
myNode["zmLoc"]["y"] = tostring(Y);
end
end
 
-- Function: Add the world map location to a node.
function EFM_NI_AddNode_wmLoc(nodeName, X, Y, nodeStyle)
local myNode = EFM_NI_GetNodeByName(nodeName, nodeStyle);
if (myNode ~= nil) then
myNode["wmLoc"] = {};
myNode["wmLoc"]["x"] = tostring(X);
myNode["wmLoc"]["y"] = tostring(Y);
end
end
 
-- Function: Add a list of routes to a node.
function EFM_NI_AddRoutes(nodeName, routeList, nodeStyle)
local myNode = EFM_NI_GetNodeByName(nodeName, nodeStyle);
if (myNode ~= nil) then
if (myNode["routes"] == nil) then
myNode["routes"] = {};
end
for index, route in pairs(routeList) do
if (not EFM_SF_StringInTable(myNode["routes"], route)) then
table.insert(myNode["routes"], route);
end
end
end
end
 
-- Function: Add the flight duration to a node.
function EFM_NI_AddNode_FlightDuration(nodeName, destNodeName, flightDuration, nodeStyle)
local myNode = EFM_NI_GetNodeByName(nodeName, nodeStyle);
 
if (myNode["timers"] == nil) then
myNode["timers"] = {};
end
 
-- If no timer set, add one, if one already set, average the two times.
if (myNode["timers"][destNodeName] == nil) then
myNode["timers"][destNodeName] = flightDuration;
else
myNode["timers"][destNodeName] = floor((myNode["timers"][destNodeName] + flightDuration) / 2);
end
end
 
-- Function: Return the flight duration.
function EFM_NI_GetNode_FlightDuration(nodeName, destNodeName, nodeStyle)
local myNode = EFM_NI_GetNodeByName(nodeName, nodeStyle);
 
if (myNode == nil) then
return nil;
end
 
if (myNode["timers"] == nil) then
return nil;
end
 
if (myNode["timers"][destNodeName] == nil) then
return nil;
end
 
return myNode["timers"][destNodeName];
end
 
-- Function: Return the node given by the flight master map x/y co-ordinates.
function EFM_NI_GetNode_fmLoc(X, Y, nodeStyle, myContinent)
local myNodeName;
local myDebug = false;
local myData = EFM_Data;
 
if (nodeStyle == 1) then
myData = EFM_WaterNodes;
end
 
EFM_Shared_DebugMessage("Searcing Continent : "..myContinent, myDebug);
 
if (myData[EFM_Global_Faction] ~= nil) then
if (myData[EFM_Global_Faction][myContinent] ~= nil) then
for myZone in pairs(myData[EFM_Global_Faction][myContinent]) do
for myNode in pairs(myData[EFM_Global_Faction][myContinent][myZone]) do
local nodeX = myData[EFM_Global_Faction][myContinent][myZone][myNode]["fmLoc"]["x"];
nodeX = tonumber(nodeX);
local nodeY = myData[EFM_Global_Faction][myContinent][myZone][myNode]["fmLoc"]["y"]
nodeY = tonumber(nodeY);
if ((nodeX == X) and (nodeY == Y)) then
myNodeName = myData[EFM_Global_Faction][myContinent][myZone][myNode]["name"];
end
end
end
else
EFM_Shared_DebugMessage("Faction: "..EFM_Global_Faction..", Continent: "..myContinent, myDebug);
end
end
 
return myNodeName;
end
 
-- Function: Return the list of nodes for a given continent number.
function EFM_NI_GetNode_List(continentNum)
local myDebug = false;
local nodeList = {};
local myContinent = EFM_Shared_GetContinentName(continentNum);
 
if (EFM_Data == nil) then
return nil;
end
 
if (EFM_Data[EFM_Global_Faction] == nil) then
return nil;
end
 
if (EFM_Data[EFM_Global_Faction][myContinent] == nil) then
return nil;
end
 
for myZone in pairs(EFM_Data[EFM_Global_Faction][myContinent]) do
for myNode in pairs(EFM_Data[EFM_Global_Faction][myContinent][myZone]) do
EFM_Shared_DebugMessage("Continent Node Added: "..EFM_Data[EFM_Global_Faction][myContinent][myZone][myNode]["name"], myDebug);
table.insert(nodeList, EFM_Data[EFM_Global_Faction][myContinent][myZone][myNode]["name"]);
end
end
 
return nodeList;
end
 
-- Function: Return the list of nodes in a given zone.
function EFM_NI_GetNodeListByZone(zoneName)
local myDebug = false;
local nodeList = {};
 
if (EFM_Data == nil) then
return nil;
end
 
if (EFM_Data[EFM_Global_Faction] == nil) then
return nil;
end
 
for myContinent in pairs(EFM_Data[EFM_Global_Faction]) do
if (EFM_Data[EFM_Global_Faction][myContinent][zoneName] ~= nil) then
for myNode in pairs(EFM_Data[EFM_Global_Faction][myContinent][zoneName]) do
EFM_Shared_DebugMessage("Zone Node Added: "..EFM_Data[EFM_Global_Faction][myContinent][zoneName][myNode]["name"], myDebug);
table.insert(nodeList, EFM_Data[EFM_Global_Faction][myContinent][zoneName][myNode]["name"]);
end
end
end
 
return nodeList;
end
 
-- Function: Return a flight node "fuzzily", as in, offset perhaps a little from where the flight master window lists it.
-- Blizzard often shoves nodes in the flight map in slightly different locations depending on if you are there or not.
-- Later patches sometimes fix these, but not always, and phasing also can affect this.
function EFM_NI_GetNode_fmLoc_Fuzzy(nodeX, nodeY, continent)
local myNode;
 
local myDebug = false;
 
local maxOffset = 1;
local offsetStep = 1;
 
-- Test the original co-ordinates.
myNode = EFM_NI_GetNode_fmLoc(nodeX, nodeY, 0, continent);
if (myNode ~= nil) then
EFM_Shared_DebugMessage("Found Node"..myNode);
return myNode;
end
 
-- Test new co-ordinates to a maximum of maxOffset from original
for offset = -maxOffset, maxOffset, offsetStep do
local roffset = offset/100;
EFM_Shared_DebugMessage("Testing with offset of "..roffset..".", myDebug);
 
-- Adjust X
myNode = EFM_NI_GetNode_fmLoc(nodeX + roffset, nodeY, 0, continent);
if (myNode ~= nil) then
EFM_Shared_DebugMessage("Found Node at "..(nodeX + roffset)..", "..nodeY..".", myDebug);
return myNode;
end
 
-- Adjust Y
myNode = EFM_NI_GetNode_fmLoc(nodeX, nodeY - roffset, 0, continent);
if (myNode ~= nil) then
EFM_Shared_DebugMessage("Found Node at "..nodeX..", "..(nodeY - roffset)..".", myDebug);
return myNode;
end
 
-- Adjust Both
myNode = EFM_NI_GetNode_fmLoc(nodeX + roffset, nodeY + roffset, 0, continent);
if (myNode ~= nil) then
EFM_Shared_DebugMessage("Found Node at "..(nodeX + roffset)..", "..(nodeY + roffset)..".", myDebug);
return myNode;
end
 
-- Adjust Both, reversing Y
-- This should deal with +X -Y OR -X +Y due to the values starting at a negative number
myNode = EFM_NI_GetNode_fmLoc(nodeX + roffset, nodeY - roffset, 0, continent);
if (myNode ~= nil) then
EFM_Shared_DebugMessage("Found Node at "..(nodeX + roffset)..", "..(nodeY - roffset)..".", myDebug);
return myNode;
end
end
end
Property changes : Added: svn:executable +
trunk/EnhancedFlightMap.lua New file
0,0 → 1,162
--[[
 
Main program function for Enhanced Flight Map.
 
Localisation of text should be done in localization.lua.
 
All other code in here should not be modified unless you know what you are doing,
and if you do modify something, please let me know.
 
]]
 
---------------------------------------------------------------------------
-- Functions to deal with the various methods the program can be called
---------------------------------------------------------------------------
EFM_LOADED = 0;
 
-- What to do when events are seen.
function EnhancedFlightMap_OnEvent( frame, event, ... )
if ((event == "ADDON_LOADED") and (select(1, ...) == "EnhancedFlightMap"))then
-- Register our slash commands
SLASH_EFM1 = EFM_SLASH1;
SLASH_EFM2 = EFM_SLASH2;
SlashCmdList["EFM"] = function(msg)
EFM_SlashCommandHandler(msg);
end
 
-- Define program Hooks
-- Hook DrawOneHopLines function.
-- We do this to find the direct flight paths from each node.
hooksecurefunc("DrawOneHopLines", EFM_FM_DrawOneHopLines);
 
-- Hook TaxiNodeOnButtonEnter function.
-- We do this to be able to display the additional data for the blizzard-defined nodes as well as our nodes.
hooksecurefunc("TaxiNodeOnButtonEnter", EFM_FM_TaxiNodeOnButtonEnter);
 
-- Hook the TakeTaxiNode function.
-- This is done as there is no way (currently) to determine what node we are flying to while in flight.
hooksecurefunc("TakeTaxiNode", EFM_Timer_TakeTaxiNode);
 
-- Hook the GossipTitleButton_OnClick function.
-- This is done due to 1.11 changes to druid flightpaths at nighthaven, might be needed elsewhere in the future also.
-- hooksecurefunc("GossipTitleButton_OnClick", EFM_GossipTitleButton_OnClick);
 
-- Call various init routines.
EFM_DefineData();
 
-- Register the events we want to listen for
frame:RegisterEvent("PLAYER_ENTERING_WORLD");
frame:RegisterEvent("PLAYER_LEAVING_WORLD");
 
-- Register new config screen
EnhancedFlightMap_RegConfig(); -- Register New Config
 
-- Additional GUI stuff
EnhancedFlightMap_GUIConfig();
 
-- Set up the new map window
EFM_MW_Setup();
 
-- Initial Setup complete, we're done now.
return;
 
elseif (event == "PLAYER_ENTERING_WORLD") then
--EFM_Message("announce", event);
frame:RegisterEvent("WORLD_MAP_UPDATE");
frame:RegisterEvent("TAXIMAP_OPENED");
--EFM_Data_NodeFixup();
return;
 
elseif (event == "PLAYER_LEAVING_WORLD") then
--EFM_Message("announce", event);
frame:UnregisterEvent("WORLD_MAP_UPDATE");
frame:UnregisterEvent("TAXIMAP_OPENED");
-- EFM_Timer_StartRecording = false;
-- EFM_Timer_Recording = false;
-- EFM_FlightStatus:Hide();
return;
 
elseif ((event == "WORLD_MAP_UPDATE") or (event == "WORLD_MAP_NAME_UPDATE"))then
--EFM_Message("announce", event);
EFM_Map_WorldMapEvent();
return;
 
elseif (event == "TAXIMAP_OPENED") then
--EFM_Message("announce", event);
EFM_FM_TaxiMapOpenEvent();
return;
end
end
 
-- Function: Slashcommand handler
function EFM_SlashCommandHandler(msg)
if (msg == '') then msg = nil end
 
if (msg) then
--msg = string.lower(msg);
local msgLower = string.lower(msg);
 
if (msgLower == EFM_CMD_CLEAR) then
EFM_Message("announce", EFM_CLEAR_HELP);
return;
 
elseif (msgLower == EFM_CMD_CLEAR_ALL) then
EFM_Data = nil;
EFM_Message("announce", EFM_MSG_CLEAR);
return;
 
elseif (string.find(msgLower, EFM_CMD_CLEAR) ~= nil) then
value = EFM_SF_SlashClean(EFM_CMD_CLEAR, msg);
value = string.lower(value);
if (value == string.lower(FACTION_ALLIANCE)) then
EFM_Data[FACTION_ALLIANCE] = nil;
EFM_Message("announce", format(EFM_MSG_CLEARFACTION, FACTION_ALLIANCE));
elseif (value == string.lower(FACTION_HORDE)) then
EFM_Data[FACTION_HORDE] = nil;
EFM_Message("announce", format(EFM_MSG_CLEARFACTION, FACTION_HORDE));
end
return;
 
-- Flight map when not at the flight master....
elseif (msgLower == EFM_CMD_MAP) then
EFM_MW_OpenMap();
return;
 
elseif (string.find(msgLower, EFM_CMD_MAP) ~= nil) then
value = EFM_SF_SlashClean(EFM_CMD_MAP, msg);
if (value == EFM_FMCMD_KALIMDOR) then
EFM_MW_OpenMap(1);
elseif (value == EFM_FMCMD_AZEROTH) then
EFM_MW_OpenMap(2);
elseif (value == EFM_FMCMD_OUTLAND) then
EFM_MW_OpenMap(3);
elseif (value == EFM_FMCMD_NORTHREND) then
EFM_MW_OpenMap(4);
else
EFM_MW_OpenMap();
end
return;
 
-- Options screen details
elseif (msgLower == EFM_CMD_GUI) then
InterfaceOptionsFrame_OpenToCategory(EFM_GUI);
return;
 
-- Report on flight times
elseif (string.find(msgLower, EFM_CMD_REPORT)) then
value = EFM_SF_SlashClean(EFM_CMD_REPORT, msg);
EFM_Report_Flight(value);
return;
 
end
end
 
-- Display help when all else fails...
local index = 0;
local value = getglobal("EFM_HELP_TEXT"..index);
while( value ) do
EFM_Message("announce", value);
index = index + 1;
value = getglobal("EFM_HELP_TEXT"..index);
end
end
Property changes : Added: svn:executable +
trunk/ConfigScreen.lua New file
0,0 → 1,556
--[[
 
Configuration Screen Functions
 
]]
 
-- Function: Configure the GUI
function EnhancedFlightMap_GUIConfig()
-- Config Screen Defaults
local EFM_GUI_Map_EFMToggle_Button = CreateFrame("Button", "EFM_GUI_Map_EFMToggle", WorldMapFrame, "UIPanelButtonTemplate");
 
EFM_GUI_Map_EFMToggle_Button:SetNormalFontObject(GameFontHighlightSmall);
EFM_GUI_Map_EFMToggle_Button:SetHighlightFontObject(GameFontHighlightSmall);
 
EFM_GUI_Map_EFMToggle_Button:SetWidth(75);
EFM_GUI_Map_EFMToggle_Button:SetHeight(18);
EFM_GUI_Map_EFMToggle_Button:SetText("Hide EFM");
EFM_GUI_Map_EFMToggle_Button:RegisterForClicks("LeftButtonUp");
EFM_GUI_Map_EFMToggle_Button:ClearAllPoints();
 
EFM_GUI_Map_EFMToggle_Button:SetFrameStrata("FULLSCREEN_DIALOG");
 
EFM_GUI_Map_EFMToggle_Button:SetPoint("TOPRIGHT", "WorldMapFrameCloseButton", "TOPRIGHT", -52, -7);
EFM_GUI_Map_EFMToggle_Button:SetScript("OnClick", EFM_GUI_Map_Toggle_OnClick);
end
 
-- Function: Handle the Map Window "Hide" Button
function EFM_GUI_Map_Toggle_OnClick()
EFM_Map_ClearPoints();
end
 
-- Function: Setup the GUI config screen.
function EnhancedFlightMap_RegConfig()
EFM_Message("announce", EFM_Version_String);
-- Create main frame for information text
local EFM_GUI = CreateFrame("FRAME", "EFM_GUI")
EFM_GUI.name = EFM_DESC
InterfaceOptions_AddCategory(EFM_GUI)
 
-- Options Header
local EFM_GUI_Header = EFM_GUI:CreateFontString(nil, "OVERLAY")
EFM_GUI_Header:SetFontObject(GameFontNormalLarge)
EFM_GUI_Header:SetJustifyH("LEFT")
EFM_GUI_Header:SetJustifyV("TOP")
EFM_GUI_Header:ClearAllPoints()
EFM_GUI_Header:SetPoint("TOPLEFT", 10, -10)
EFM_GUI_Header:SetText(EFM_GUITEXT_Header)
 
-- Version
local EFM_GUI_Version = EFM_GUI:CreateFontString(nil, "OVERLAY")
EFM_GUI_Version:SetFontObject(GameFontNormalLarge)
EFM_GUI_Version:SetJustifyH("LEFT")
EFM_GUI_Version:SetJustifyV("TOP")
EFM_GUI_Version:ClearAllPoints()
EFM_GUI_Version:SetPoint("TOPLEFT", EFM_GUI_Header,"BOTTOMLEFT", 0, 0)
EFM_GUI_Version:SetText("Version "..EFM_Version)
 
-- Scroll Frame + ScrollChild
local EFM_GUI_OPTIONS = CreateFrame("ScrollFrame", "EFM_GUI_OPTIONS", EFM_GUI, "UIPanelScrollFrameTemplate")
local EFM_GUI_OPTIONS_SC = CreateFrame("Frame", "TestScrollChild", EFM_GUI_OPTIONS)
EFM_GUI_OPTIONS:SetScrollChild(EFM_GUI_OPTIONS_SC)
EFM_GUI_OPTIONS:SetPoint("TOPLEFT", EFM_GUI, "TOPLEFT", 5, -45)
EFM_GUI_OPTIONS_SC:SetPoint("TOPLEFT", "EFM_GUI_OPTIONS", "TOPLEFT", 0, 0)
EFM_GUI_OPTIONS:SetWidth(520)
EFM_GUI_OPTIONS:SetHeight(510)
EFM_GUI_OPTIONS_SC:SetWidth(520)
EFM_GUI_OPTIONS_SC:SetHeight(500)
EFM_GUI_OPTIONS:SetHorizontalScroll(0)
EFM_GUI_OPTIONS:SetVerticalScroll(0)
EFM_GUI_OPTIONS:EnableMouse(true)
EFM_GUI_OPTIONS:Show()
EFM_GUI_OPTIONS_SC:Show()
 
-- Timer Options Frame
local EFM_GUI_Timer_Options = CreateFrame("FRAME", "EFM_GUI_Timer_Options", EFM_GUI_OPTIONS_SC)
EFM_GUI_Timer_Options:SetBackdrop({bgFile = "Interface/Tooltips/UI-Tooltip-Background",
edgeFile = "Interface/Tooltips/UI-Tooltip-Border",
tile = true, tileSize = 16, edgeSize = 16,
insets = { left = 4, right = 4, top = 4, bottom = 4 }})
EFM_GUI_Timer_Options:SetBackdropBorderColor(1, 1, 1, 1.0);
EFM_GUI_Timer_Options:SetBackdropColor(0, 0, 0, 0);
EFM_GUI_Timer_Options:SetWidth(380)
EFM_GUI_Timer_Options:SetHeight(220)
EFM_GUI_Timer_Options:ClearAllPoints()
EFM_GUI_Timer_Options:SetPoint("TOPLEFT", EFM_GUI_OPTIONS_SC, "TOPLEFT", 0, -10)
 
-- Timer Options Header
local EFM_GUI_Timer_Header = EFM_GUI_OPTIONS_SC:CreateFontString(nil, "OVERLAY")
EFM_GUI_Timer_Header:SetFontObject(GameFontNormalLarge)
EFM_GUI_Timer_Header:SetJustifyH("LEFT")
EFM_GUI_Timer_Header:SetJustifyV("TOP")
EFM_GUI_Timer_Header:ClearAllPoints()
EFM_GUI_Timer_Header:SetPoint("TOPLEFT", EFM_GUI_Timer_Options, "TOPLEFT", 110, -5)
EFM_GUI_Timer_Header:SetText("Flight Timer Options")
 
-- Timer CheckButton
local EFM_GUI_CS_ButtonTimer = CreateFrame("CheckButton", "EFM_GUI_CS_ButtonTimer", EFM_GUI_OPTIONS_SC, "UICheckButtonTemplate")
EFM_GUI_CS_ButtonTimer:ClearAllPoints()
EFM_GUI_CS_ButtonTimer:SetPoint("TOPLEFT", EFM_GUI_Timer_Options, "TOPLEFT", 2, -20)
if (EFM_MyConf.Timer == false) then
EFM_GUI_CS_ButtonTimer:SetChecked(false) else
EFM_GUI_CS_ButtonTimer:SetChecked(true) end
EFM_GUI_CS_ButtonTimer:SetScript("OnClick", EFM_CS_Button_Timer_OnClick)
EFM_GUI_CS_ButtonTimer:SetScript("OnMouseDown", EFM_CS_Button_OnMouseDownUP)
EFM_GUI_CS_ButtonTimer:SetScript("OnMouseUp", EFM_CS_Button_OnMouseDownUP)
EFM_GUI_CS_ButtonTimerText:SetText(EFM_GUITEXT_Timer);
 
-- Show Timer Bar CheckButton
local EFM_GUI_CS_Button_ShowTimerBar = CreateFrame("CheckButton", "EFM_GUI_CS_Button_ShowTimerBar", EFM_GUI_OPTIONS_SC, "UICheckButtonTemplate")
EFM_GUI_CS_Button_ShowTimerBar:ClearAllPoints()
EFM_GUI_CS_Button_ShowTimerBar:SetPoint("TOPLEFT", EFM_GUI_CS_ButtonTimer, "BOTTOMLEFT", 20, 5)
if (EFM_MyConf.ShowTimerBar == false) then
EFM_GUI_CS_Button_ShowTimerBar:SetChecked(false) else
EFM_GUI_CS_Button_ShowTimerBar:SetChecked(true) end
EFM_GUI_CS_Button_ShowTimerBar:SetScript("OnClick", EFM_CS_Button_ShowTimerBar_OnClick)
EFM_GUI_CS_Button_ShowTimerBar:SetScript("OnMouseDown", EFM_CS_Button_OnMouseDownUP)
EFM_GUI_CS_Button_ShowTimerBar:SetScript("OnMouseUp", EFM_CS_Button_OnMouseDownUP)
EFM_GUI_CS_Button_ShowTimerBarText:SetText(EFM_GUITEXT_ShowTimerBar);
-- Missing the background code (not functional right now, just a display)
 
-- Shrink Status Bar CheckButton
local EFM_GUI_CS_Button_ShrinkStatusBar = CreateFrame("CheckButton", "EFM_GUI_CS_Button_ShrinkStatusBar", EFM_GUI_OPTIONS_SC, "UICheckButtonTemplate")
EFM_GUI_CS_Button_ShrinkStatusBar:ClearAllPoints()
EFM_GUI_CS_Button_ShrinkStatusBar:SetPoint("TOPLEFT", EFM_GUI_CS_Button_ShowTimerBar, "BOTTOMLEFT", 0, 5)
if (EFM_MyConf.ShrinkStatusBar == false) then
EFM_GUI_CS_Button_ShrinkStatusBar:SetChecked(false) else
EFM_GUI_CS_Button_ShrinkStatusBar:SetChecked(true) end
EFM_GUI_CS_Button_ShrinkStatusBar:SetScript("OnClick", EFM_CS_Button_ShrinkStatusBar_OnClick)
EFM_GUI_CS_Button_ShrinkStatusBar:SetScript("OnMouseDown", EFM_CS_Button_OnMouseDownUP)
EFM_GUI_CS_Button_ShrinkStatusBar:SetScript("OnMouseUp", EFM_CS_Button_OnMouseDownUP)
EFM_GUI_CS_Button_ShrinkStatusBarText:SetText(EFM_GUITEXT_ShrinkStatusBar);
-- Missing the background code (not functional right now, just a display)
 
-- EFM_CS_Slider_TimerSizeSlider
EFM_GUI_CS_Slider_TimerSizeSlider = CreateFrame("Slider", "EFM_GUI_CS_Slider_TimerSizeSlider", EFM_GUI_OPTIONS_SC, "OptionsSliderTemplate")
EFM_GUI_CS_Slider_TimerSizeSlider:SetPoint("TOPLEFT", EFM_GUI_CS_Button_ShrinkStatusBar, "BOTTOMLEFT", 0, -25)
EFM_GUI_CS_Slider_TimerSizeSlider:SetWidth("320")
EFM_GUI_CS_Slider_TimerSizeSlider:SetMinMaxValues("0.1", "2")
EFM_GUI_CS_Slider_TimerSizeSlider:SetValueStep("0.05");
EFM_GUI_CS_Slider_TimerSizeSlider:SetValue(EFM_MyConf.TimerSize)
EFM_GUI_CS_Slider_TimerSizeSliderText:SetFontObject(GameFontNormal)
EFM_GUI_CS_Slider_TimerSizeSliderText:SetText(format(EFM_GUITEXT_SizeSlider, EFM_MyConf.TimerSize));
getglobal(EFM_GUI_CS_Slider_TimerSizeSlider:GetName().."Low"):SetText("0.1");
getglobal(EFM_GUI_CS_Slider_TimerSizeSlider:GetName().."High"):SetText("2.0");
 
-- EFM_GUI_CS_Slider_TimerLocSlider
EFM_GUI_CS_Slider_TimerLocSlider = CreateFrame("Slider", "EFM_GUI_CS_Slider_TimerLocSlider", EFM_GUI_OPTIONS_SC, "OptionsSliderTemplate")
EFM_GUI_CS_Slider_TimerLocSlider:SetPoint("TOPLEFT", EFM_GUI_CS_Slider_TimerSizeSlider, "BOTTOMLEFT", 0, -25)
EFM_GUI_CS_Slider_TimerLocSlider:SetWidth("320")
EFM_GUI_CS_Slider_TimerLocSlider:SetMinMaxValues("-500", "500")
EFM_GUI_CS_Slider_TimerLocSlider:SetValueStep("10");
EFM_GUI_CS_Slider_TimerLocSlider:SetValue(EFM_MyConf.TimerPosition)
EFM_GUI_CS_Slider_TimerLocSliderText:SetFontObject(GameFontNormal)
EFM_GUI_CS_Slider_TimerLocSliderText:SetText(format(EFM_GUITEXT_DisplaySlider, EFM_MyConf.TimerPosition));
getglobal(EFM_GUI_CS_Slider_TimerLocSlider:GetName().."Low"):SetText("-200");
getglobal(EFM_GUI_CS_Slider_TimerLocSlider:GetName().."High"):SetText("200");
 
-- Need to be placed after both sliders have been created or we'll get an error due to a call to the function before both sliders have been created
EFM_GUI_CS_Slider_TimerSizeSlider:SetScript("OnValueChanged", function(self, value) EFM_GUI_CS_Slider_Changed(); end)
EFM_GUI_CS_Slider_TimerLocSlider:SetScript("OnValueChanged", function(self, value) EFM_GUI_CS_Slider_Changed(); end)
 
-- Display Options Frame
local EFM_GUI_Display_Options = CreateFrame("FRAME", "EFM_GUI_Display_Options", EFM_GUI_OPTIONS_SC)
EFM_GUI_Display_Options:SetBackdrop({bgFile = "Interface/Tooltips/UI-Tooltip-Background",
edgeFile = "Interface/Tooltips/UI-Tooltip-Border",
tile = true, tileSize = 16, edgeSize = 16,
insets = { left = 4, right = 4, top = 4, bottom = 4 }})
EFM_GUI_Display_Options:SetBackdropBorderColor(1, 1, 1, 1.0);
EFM_GUI_Display_Options:SetBackdropColor(0, 0, 0, 0);
EFM_GUI_Display_Options:SetWidth(380)
EFM_GUI_Display_Options:SetHeight(150)
EFM_GUI_Display_Options:ClearAllPoints()
EFM_GUI_Display_Options:SetPoint("TOPLEFT", EFM_GUI_Timer_Options, "BOTTOMLEFT", 0, -5)
 
-- Display Options Header
local EFM_GUI_Display_Header = EFM_GUI_OPTIONS_SC:CreateFontString(nil, "OVERLAY")
EFM_GUI_Display_Header:SetFontObject(GameFontNormalLarge)
EFM_GUI_Display_Header:SetJustifyH("LEFT")
EFM_GUI_Display_Header:SetJustifyV("TOP")
EFM_GUI_Display_Header:ClearAllPoints()
EFM_GUI_Display_Header:SetPoint("TOPLEFT", EFM_GUI_Display_Options, "TOPLEFT", 125, -5)
EFM_GUI_Display_Header:SetText(DISPLAY_OPTIONS)
 
-- EFM_CS_Button_ZoneMarker
local EFM_GUI_CS_Button_ZoneMarker = CreateFrame("CheckButton", "EFM_GUI_CS_Button_ZoneMarker", EFM_GUI_OPTIONS_SC, "UICheckButtonTemplate")
EFM_GUI_CS_Button_ZoneMarker:ClearAllPoints()
EFM_GUI_CS_Button_ZoneMarker:SetPoint("TOPLEFT", EFM_GUI_Display_Options, "TOPLEFT", 2, -20)
if (EFM_MyConf.ZoneMarker == false) then
EFM_GUI_CS_Button_ZoneMarker:SetChecked(false) else
EFM_GUI_CS_Button_ZoneMarker:SetChecked(true) end
EFM_GUI_CS_Button_ZoneMarker:SetScript("OnClick", EFM_CS_Button_ZoneMarker_OnClick)
EFM_GUI_CS_Button_ZoneMarker:SetScript("OnMouseDown", EFM_CS_Button_OnMouseDownUP)
EFM_GUI_CS_Button_ZoneMarker:SetScript("OnMouseUp", EFM_CS_Button_OnMouseDownUP)
EFM_GUI_CS_Button_ZoneMarkerText:SetText(EFM_GUITEXT_ZoneMarker);
 
-- EFM_CS_Button_ContinentOverlay
local EFM_GUI_CS_Button_ContinentOverlay = CreateFrame("CheckButton", "EFM_GUI_CS_Button_ContinentOverlay", EFM_GUI_OPTIONS_SC, "UICheckButtonTemplate")
EFM_GUI_CS_Button_ContinentOverlay:ClearAllPoints()
EFM_GUI_CS_Button_ContinentOverlay:SetPoint("TOPLEFT", EFM_GUI_CS_Button_ZoneMarker, "BOTTOMLEFT", 0, 0)
if (EFM_MyConf.ContinentOverlay == false) then
EFM_GUI_CS_Button_ContinentOverlay:SetChecked(false) else
EFM_GUI_CS_Button_ContinentOverlay:SetChecked(true) end
EFM_GUI_CS_Button_ContinentOverlay:SetScript("OnClick", EFM_CS_Button_ContinentOverlay_OnClick)
EFM_GUI_CS_Button_ContinentOverlay:SetScript("OnMouseDown", EFM_CS_Button_OnMouseDownUP)
EFM_GUI_CS_Button_ContinentOverlay:SetScript("OnMouseUp", EFM_CS_Button_OnMouseDownUP)
EFM_GUI_CS_Button_ContinentOverlayText:SetText(EFM_GUITEXT_ContinentOverlay);
 
-- EFM_CS_Button_DruidPaths
local EFM_GUI_CS_Button_DruidPaths = CreateFrame("CheckButton", "EFM_GUI_CS_Button_DruidPaths", EFM_GUI_OPTIONS_SC, "UICheckButtonTemplate")
EFM_GUI_CS_Button_DruidPaths:ClearAllPoints()
EFM_GUI_CS_Button_DruidPaths:SetPoint("TOPLEFT", EFM_GUI_CS_Button_ContinentOverlay, "BOTTOMLEFT", 0, 0)
if (EFM_MyConf.DruidPaths == false) then
EFM_GUI_CS_Button_DruidPaths:SetChecked(false) else
EFM_GUI_CS_Button_DruidPaths:SetChecked(true) end
EFM_GUI_CS_Button_DruidPaths:SetScript("OnClick", EFM_CS_Button_DruidPaths_OnClick)
EFM_GUI_CS_Button_DruidPaths:SetScript("OnMouseDown", EFM_CS_Button_OnMouseDownUP)
EFM_GUI_CS_Button_DruidPaths:SetScript("OnMouseUp", EFM_CS_Button_OnMouseDownUP)
EFM_GUI_CS_Button_DruidPathsText:SetText(EFM_GUITEXT_DruidPaths);
 
-- EFM_CS_Button_UpdateRecorded
local EFM_GUI_CS_Button_UpdateRecorded = CreateFrame("CheckButton", "EFM_GUI_CS_Button_UpdateRecorded", EFM_GUI_OPTIONS_SC, "UICheckButtonTemplate")
EFM_GUI_CS_Button_UpdateRecorded:ClearAllPoints()
EFM_GUI_CS_Button_UpdateRecorded:SetPoint("TOPLEFT", EFM_GUI_CS_Button_DruidPaths, "BOTTOMLEFT", 0, 0)
if (EFM_MyConf.UpdateRecorded == false) then
EFM_GUI_CS_Button_UpdateRecorded:SetChecked(false) else
EFM_GUI_CS_Button_UpdateRecorded:SetChecked(true) end
EFM_GUI_CS_Button_UpdateRecorded:SetScript("OnClick", EFM_CS_Button_UpdateRecorded_OnClick)
EFM_GUI_CS_Button_UpdateRecorded:SetScript("OnMouseDown", EFM_CS_Button_OnMouseDownUP)
EFM_GUI_CS_Button_UpdateRecorded:SetScript("OnMouseUp", EFM_CS_Button_OnMouseDownUP)
EFM_GUI_CS_Button_UpdateRecordedText:SetText(EFM_GUITEXT_UpdateRecorded);
 
-- Preloaded Data Frame
local EFM_GUI_Preload_Data = CreateFrame("FRAME", "EFM_GUI_Preload_Data", EFM_GUI_OPTIONS_SC)
EFM_GUI_Preload_Data:SetBackdrop({bgFile = "Interface/Tooltips/UI-Tooltip-Background",
edgeFile = "Interface/Tooltips/UI-Tooltip-Border",
tile = true, tileSize = 16, edgeSize = 16,
insets = { left = 4, right = 4, top = 4, bottom = 4 }})
EFM_GUI_Preload_Data:SetBackdropBorderColor(1, 1, 1, 1.0);
EFM_GUI_Preload_Data:SetBackdropColor(0, 0, 0, 0);
EFM_GUI_Preload_Data:SetWidth(380)
EFM_GUI_Preload_Data:SetHeight(85)
EFM_GUI_Preload_Data:ClearAllPoints()
EFM_GUI_Preload_Data:SetPoint("TOPLEFT", EFM_GUI_Display_Options, "BOTTOMLEFT", 0, -5)
 
-- Display Options Header
local EFM_GUI_Preload_Data_Header = EFM_GUI_OPTIONS_SC:CreateFontString(nil, "OVERLAY")
EFM_GUI_Preload_Data_Header:SetFontObject(GameFontNormalLarge)
EFM_GUI_Preload_Data_Header:SetJustifyH("LEFT")
EFM_GUI_Preload_Data_Header:SetJustifyV("TOP")
EFM_GUI_Preload_Data_Header:ClearAllPoints()
EFM_GUI_Preload_Data_Header:SetPoint("TOPLEFT", EFM_GUI_Preload_Data, "TOPLEFT", 90, -5)
EFM_GUI_Preload_Data_Header:SetText("Pre-loaded Data Options")
 
-- EFM_CS_Button_LoadAll
local EFM_GUI_CS_Button_LoadAll = CreateFrame("CheckButton", "EFM_GUI_CS_Button_LoadAll", EFM_GUI_OPTIONS_SC, "UICheckButtonTemplate")
EFM_GUI_CS_Button_LoadAll:ClearAllPoints()
EFM_GUI_CS_Button_LoadAll:SetPoint("TOPLEFT", EFM_GUI_Preload_Data, "TOPLEFT", 2, -20)
if (EFM_MyConf.LoadAll == false) then
EFM_GUI_CS_Button_LoadAll:SetChecked(false) else
EFM_GUI_CS_Button_LoadAll:SetChecked(true) end
EFM_GUI_CS_Button_LoadAll:SetScript("OnClick", EFM_CS_Button_LoadAll_OnClick)
EFM_GUI_CS_Button_LoadAll:SetScript("OnMouseDown", EFM_CS_Button_OnMouseDownUP)
EFM_GUI_CS_Button_LoadAll:SetScript("OnMouseUp", EFM_CS_Button_OnMouseDownUP)
EFM_GUI_CS_Button_LoadAllText:SetText(EFM_GUITEXT_LoadAll);
 
-- EFM_CS_Button_LoadAlliance
local EFM_GUI_CS_Button_LoadAlliance = CreateFrame("Button", "EFM_GUI_CS_Button_LoadAlliance", EFM_GUI_OPTIONS_SC, "UIPanelButtonTemplate")
EFM_GUI_CS_Button_LoadAlliance:SetNormalFontObject(GameFontHighlightSmall)
EFM_GUI_CS_Button_LoadAlliance:SetHighlightFontObject(GameFontHighlightSmall)
EFM_GUI_CS_Button_LoadAlliance:SetWidth(100)
EFM_GUI_CS_Button_LoadAlliance:SetHeight(22)
EFM_GUI_CS_Button_LoadAlliance:SetText(FACTION_ALLIANCE)
EFM_GUI_CS_Button_LoadAlliance:RegisterForClicks("LeftButtonUp")
EFM_GUI_CS_Button_LoadAlliance:ClearAllPoints()
EFM_GUI_CS_Button_LoadAlliance:SetPoint("TOPLEFT", EFM_GUI_CS_Button_LoadAll, "BOTTOMLEFT", 45, -1)
EFM_GUI_CS_Button_LoadAlliance:SetScript("OnClick", EFM_CS_Button_LoadAlliance_OnClick)
EFM_GUI_CS_Button_LoadAlliance:SetScript("OnMouseDown", EFM_CS_Button_OnMouseDownUP)
EFM_GUI_CS_Button_LoadAlliance:SetScript("OnMouseUp", EFM_CS_Button_OnMouseDownUP)
 
-- EFM_CS_Button_LoadHorde
local EFM_GUI_CS_Button_LoadHorde = CreateFrame("Button", "EFM_GUI_CS_Button_LoadHorde", EFM_GUI_OPTIONS_SC, "UIPanelButtonTemplate")
EFM_GUI_CS_Button_LoadHorde:SetNormalFontObject(GameFontHighlightSmall)
EFM_GUI_CS_Button_LoadHorde:SetHighlightFontObject(GameFontHighlightSmall)
EFM_GUI_CS_Button_LoadHorde:SetWidth(100)
EFM_GUI_CS_Button_LoadHorde:SetHeight(22)
EFM_GUI_CS_Button_LoadHorde:SetText(FACTION_HORDE)
EFM_GUI_CS_Button_LoadHorde:RegisterForClicks("LeftButtonUp")
EFM_GUI_CS_Button_LoadHorde:ClearAllPoints()
EFM_GUI_CS_Button_LoadHorde:SetPoint("TOPLEFT", EFM_GUI_CS_Button_LoadAlliance, "TOPLEFT", 180, 0)
EFM_GUI_CS_Button_LoadHorde:SetScript("OnClick", EFM_CS_Button_LoadHorde_OnClick)
EFM_GUI_CS_Button_LoadHorde:SetScript("OnMouseDown", EFM_CS_Button_OnMouseDownUP)
EFM_GUI_CS_Button_LoadHorde:SetScript("OnMouseUp", EFM_CS_Button_OnMouseDownUP)
 
-- Config Screen Defaults
local EFM_GUI_CS_Button_DefaultConfig = CreateFrame("Button", "EFM_GUI_CS_Button_DefaultConfig", EFM_GUI_OPTIONS_SC, "UIPanelButtonTemplate")
EFM_GUI_CS_Button_DefaultConfig:SetNormalFontObject(GameFontHighlightSmall)
EFM_GUI_CS_Button_DefaultConfig:SetHighlightFontObject(GameFontHighlightSmall)
EFM_GUI_CS_Button_DefaultConfig:SetWidth(150)
EFM_GUI_CS_Button_DefaultConfig:SetHeight(22)
EFM_GUI_CS_Button_DefaultConfig:SetText(DEFAULTS)
EFM_GUI_CS_Button_DefaultConfig:RegisterForClicks("LeftButtonUp")
EFM_GUI_CS_Button_DefaultConfig:ClearAllPoints()
EFM_GUI_CS_Button_DefaultConfig:SetPoint("TOPLEFT", EFM_GUI_Preload_Data, "BOTTOMLEFT", 115, -5)
EFM_GUI_CS_Button_DefaultConfig:SetScript("OnClick", EFM_CS_Button_DefaultConfig_OnClick)
EFM_GUI_CS_Button_DefaultConfig:SetScript("OnMouseDown", EFM_CS_Button_OnMouseDownUP)
EFM_GUI_CS_Button_DefaultConfig:SetScript("OnMouseUp", EFM_CS_Button_OnMouseDownUP)
 
end
 
-- Function: Handle the timer button being clicked.
function EFM_CS_Button_Timer_OnClick()
if (EFM_MyConf["Timer"] == true) then
EFM_MyConf["Timer"] = false;
EFM_FlightStatus:Hide();
EFM_GUI_CS_Button_ShowTimerBar:Disable();
EFM_GUI_CS_Button_ShowTimerBarText:SetTextColor(0.5, 0.5, 0.5);
EFM_GUI_CS_Button_ShrinkStatusBar:Disable();
EFM_GUI_CS_Button_ShrinkStatusBarText:SetTextColor(0.5, 0.5, 0.5);
EFM_GUI_CS_DisableSlider(EFM_GUI_CS_Slider_TimerLocSlider);
EFM_GUI_CS_DisableSlider(EFM_GUI_CS_Slider_TimerSizeSlider);
else
EFM_MyConf["Timer"] = true;
EFM_GUI_CS_Button_ShowTimerBar:Enable();
EFM_GUI_CS_Button_ShowTimerBarText:SetTextColor(1, 0.82, 0);
EFM_GUI_CS_Button_ShrinkStatusBar:Enable();
EFM_GUI_CS_Button_ShrinkStatusBarText:SetTextColor(1, 0.82, 0);
EFM_GUI_CS_EnableSlider(EFM_GUI_CS_Slider_TimerLocSlider);
EFM_GUI_CS_EnableSlider(EFM_GUI_CS_Slider_TimerSizeSlider);
end
end
 
function EFM_CS_Button_ShowTimerBar_OnClick()
if (EFM_MyConf["ShowTimerBar"] == true) then
EFM_MyConf["ShowTimerBar"] = false;
else
EFM_MyConf["ShowTimerBar"] = true;
end
end
 
function EFM_CS_Button_ShrinkStatusBar_OnClick()
if (EFM_MyConf["ShrinkStatusBar"] == true) then
EFM_MyConf["ShrinkStatusBar"] = false;
else
EFM_MyConf["ShrinkStatusBar"] = true;
end
end
 
function EFM_CS_Button_ZoneMarker_OnClick()
if (EFM_MyConf["ZoneMarker"] == true) then
EFM_MyConf["ZoneMarker"] = false;
else
EFM_MyConf["ZoneMarker"] = true;
end
end
 
function EFM_CS_Button_ContinentOverlay_OnClick()
if (EFM_MyConf["ContinentOverlay"] == true) then
EFM_MyConf["ContinentOverlay"] = false;
else
EFM_MyConf["ContinentOverlay"] = true;
end
end
 
function EFM_CS_Button_DruidPaths_OnClick()
if (EFM_MyConf["DruidPaths"] == true) then
EFM_MyConf["DruidPaths"] = false;
else
EFM_MyConf["DruidPaths"] = true;
end
end
 
function EFM_CS_Button_UpdateRecorded_OnClick()
if (EFM_MyConf["UpdateRecorded"] == true) then
EFM_MyConf["UpdateRecorded"] = false;
else
EFM_MyConf["UpdateRecorded"] = true;
end
end
 
function EFM_CS_Button_LoadAll_OnClick()
if (EFM_MyConf["LoadAll"] == true) then
EFM_MyConf["LoadAll"] = false;
else
EFM_MyConf["LoadAll"] = true;
end
end
 
function EFM_CS_Button_LoadAlliance_OnClick()
if (EFM_MyConf["LoadAll"] == true) then
EFM_Data_Import(FACTION_ALLIANCE);
else
EFM_Data_ImportTimes(FACTION_ALLIANCE);
end
end
 
function EFM_CS_Button_LoadHorde_OnClick()
if (EFM_MyConf["LoadAll"] == true) then
EFM_Data_Import(FACTION_HORDE);
else
EFM_Data_ImportTimes(FACTION_HORDE);
end
end
 
function EFM_CS_Button_DefaultConfig_OnClick()
EFM_CS_SetDefaults();
end
 
function EFM_CS_Button_OnMouseDownUP()
-- Fix nil error, might not be needed
end
 
function EFM_GUI_CS_DisableSlider(slider)
local name = slider:GetName();
getglobal(name.."Thumb"):Hide();
getglobal(name.."Text"):SetVertexColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b);
getglobal(name.."Low"):SetVertexColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b);
getglobal(name.."High"):SetVertexColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b);
end
 
function EFM_CS_DisableSlider(slider)
local name = slider:GetName();
getglobal(name.."Thumb"):Hide();
getglobal(name.."Title"):SetVertexColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b);
getglobal(name.."Low"):SetVertexColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b);
getglobal(name.."High"):SetVertexColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b);
end
 
function EFM_GUI_CS_EnableSlider(slider)
local name = slider:GetName();
getglobal(name.."Thumb"):Show();
getglobal(name.."Text"):SetVertexColor(NORMAL_FONT_COLOR.r , NORMAL_FONT_COLOR.g , NORMAL_FONT_COLOR.b);
getglobal(name.."Low"):SetVertexColor(HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b);
getglobal(name.."High"):SetVertexColor(HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b);
end
 
function EFM_CS_EnableSlider(slider)
local name = slider:GetName();
getglobal(name.."Thumb"):Show();
getglobal(name.."Title"):SetVertexColor(NORMAL_FONT_COLOR.r , NORMAL_FONT_COLOR.g , NORMAL_FONT_COLOR.b);
getglobal(name.."Low"):SetVertexColor(HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b);
getglobal(name.."High"):SetVertexColor(HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b);
end
 
-- Function: Config Screen init routine.
function EFM_CS_Init()
EFM_CS_Button_TimerText:SetText(EFM_GUITEXT_Timer);
EFM_CS_Button_ShowTimerBarText:SetText(EFM_GUITEXT_ShowTimerBar);
EFM_CS_Button_ShrinkStatusBarText:SetText(EFM_GUITEXT_ShrinkStatusBar);
EFM_CS_Button_ZoneMarkerText:SetText(EFM_GUITEXT_ZoneMarker);
EFM_CS_Button_ContinentOverlayText:SetText(EFM_GUITEXT_ContinentOverlay);
EFM_CS_Button_DruidPathsText:SetText(EFM_GUITEXT_DruidPaths);
EFM_CS_Button_UpdateRecordedText:SetText(EFM_GUITEXT_UpdateRecorded);
EFM_CS_Button_LoadAllText:SetText(EFM_GUITEXT_LoadAll);
 
EFM_CS_Slider_TimerLocSliderHigh:SetText("200");
EFM_CS_Slider_TimerLocSliderLow:SetText("-200");
EFM_CS_Slider_TimerLocSlider:SetValueStep(10);
 
EFM_CS_Slider_TimerSizeSliderHigh:SetText("2.0");
EFM_CS_Slider_TimerSizeSliderLow:SetText("0.1");
EFM_CS_Slider_TimerSizeSlider:SetValueStep("0.05");
end
 
-- Function: Routine to update configuration options.
function EFM_CS_OnShow()
-- Set the check buttons to their defaults.
EFM_CS_Button_Timer:SetChecked(EFM_MyConf.Timer);
EFM_CS_Button_ShowTimerBar:SetChecked(EFM_MyConf.ShowTimerBar);
EFM_CS_Button_ShrinkStatusBar:SetChecked(EFM_MyConf.ShrinkStatusBar);
EFM_CS_Button_ZoneMarker:SetChecked(EFM_MyConf.ZoneMarker);
EFM_CS_Button_ContinentOverlay:SetChecked(EFM_MyConf.ContinentOverlay);
EFM_CS_Button_DruidPaths:SetChecked(EFM_MyConf.DruidPaths);
EFM_CS_Button_UpdateRecorded:SetChecked(EFM_MyConf.LoadAll);
EFM_CS_Button_LoadAll:SetChecked(EFM_MyConf.LoadAll);
 
-- Set the slider details.
EFM_CS_Slider_TimerLocSliderTitle:SetText(format(EFM_GUITEXT_DisplaySlider, EFM_MyConf.TimerPosition));
EFM_CS_Slider_TimerLocSlider:SetValue(EFM_MyConf.TimerPosition);
 
EFM_CS_Slider_TimerSizeSliderTitle:SetText(format(EFM_GUITEXT_SizeSlider, EFM_MyConf.TimerSize));
EFM_CS_Slider_TimerSizeSlider:SetValue(EFM_MyConf.TimerSize);
 
-- Set the Timer checkbox data.
if (EFM_MyConf.Timer == false) then
EFM_CS_Button_ShowTimerBar:Disable();
EFM_CS_Button_ShowTimerBarText:SetTextColor(0.5, 0.5, 0.5);
EFM_CS_Button_ShrinkStatusBar:Disable();
EFM_CS_Button_ShrinkStatusBarText:SetTextColor(0.5, 0.5, 0.5);
EFM_CS_DisableSlider(EFM_CS_Slider_TimerLocSlider);
EFM_CS_DisableSlider(EFM_CS_Slider_TimerSizeSlider);
else
EFM_CS_Button_ShowTimerBar:Enable();
EFM_CS_Button_ShowTimerBarText:SetTextColor(1, 0.82, 0);
EFM_CS_Button_ShrinkStatusBar:Enable();
EFM_CS_Button_ShrinkStatusBarText:SetTextColor(1, 0.82, 0);
EFM_CS_EnableSlider(EFM_CS_Slider_TimerLocSlider);
EFM_CS_EnableSlider(EFM_CS_Slider_TimerSizeSlider);
end
end
 
-- Function: Set the program defaults.
function EFM_CS_SetDefaults()
EFM_MyConf.Timer = true;
EFM_MyConf.ZoneMarker = true;
EFM_MyConf.DruidPaths = false;
EFM_MyConf.ShowTimerBar = true;
EFM_MyConf.ShrinkStatusBar = true;
EFM_MyConf.ShowLargeBar = false;
EFM_MyConf.TimerPosition = -150;
EFM_MyConf.TimerSize = 1.0;
EFM_MyConf.UpdateRecorded = false;
EFM_MyConf.LoadAll = true;
EFM_MyConf.ContinentOverlay = true;
--EFM_CS_OnShow();
end
 
-- Function: Routine to handle position slider.
function EFM_GUI_CS_Slider_Changed(Slider)
if (EFM_MyConf == nil) then
return;
end
 
if (EFM_MyConf.Timer == false) then
return;
end
 
local newValue = EFM_GUI_CS_Slider_TimerLocSlider:GetValue();
 
EFM_MyConf.TimerPosition = newValue;
EFM_GUI_CS_Slider_TimerLocSliderText:SetText(format(EFM_GUITEXT_DisplaySlider, newValue));
 
-- New for Size
EFM_MyConf.TimerSize = EFM_GUI_CS_Slider_TimerSizeSlider:GetValue();
EFM_GUI_CS_Slider_TimerSizeSliderText:SetText(format(EFM_GUITEXT_SizeSlider, EFM_MyConf.TimerSize));
end
 
-- Function: Routine to handle position slider.
function EFM_CS_Slider_Changed()
if (EFM_MyConf == nil) then
return;
end
 
if (EFM_MyConf.Timer == false) then
return;
end
 
local newValue = EFM_CS_Slider_TimerLocSlider:GetValue();
 
EFM_MyConf.TimerPosition = newValue;
EFM_CS_Slider_TimerLocSliderTitle:SetText(format(EFM_GUITEXT_DisplaySlider, newValue));
 
-- New for Size
EFM_MyConf.TimerSize = EFM_CS_Slider_TimerSizeSlider:GetValue();
EFM_CS_Slider_TimerSizeSliderTitle:SetText(format(EFM_GUITEXT_SizeSlider, EFM_MyConf.TimerSize));
end
 
Property changes : Added: svn:executable +
trunk/EnhancedFlightMap.toc New file
0,0 → 1,24
## Interface: 50001
## Title: Enhanced Flight Map
## Author: Lysidia of Feathermoon
## Version: 2.2.7
## Notes: Adds enhancements to the flight system!
## URL: http://lysaddons.game-host.org
## Website: http://lysaddons.game-host.org
## DefaultState: Enabled
## LoadOnDemand: 0
## SavedVariables: EFM_Data,EFM_WaterNodes,EFM_ImportData
## SavedVariablesPerCharacter: EFM_MyConf,EFM_KnownNodes,EFM_ReachableNodes
shared_functions.lua
 
globals.lua
 
localization.lua
localization-frFR.lua
localization-deDE.lua
localization-ruRU.lua
 
EnhancedFlightMap.xml
 
FlightMapData.lua
FlightStatus.xml
Property changes : Added: svn:executable +
trunk/FlightMapData.lua New file
0,0 → 1,7311
--[[
 
This file contains all the flightpaths I have discovered in game.
 
This file is where the data for specific factions is loaded from.
 
]]
 
Default_EFM_FlightData = {
 
-- Data is now locale-dependant due to other changes made by blizzard. So all data is to be prefixed with it's locale string.
["enUS"] = {
["Horde"] = {
["Outland"] = {
["Blade's Edge Mountains"] = {
["Thunderlord Stronghold, Blade's Edge Mountains"] = {
["fmLoc"] = {
["y"] = "0.67",
["x"] = "0.37",
},
["wmLoc"] = {
["y"] = "0.28",
["x"] = "0.39",
},
["name"] = "Thunderlord Stronghold, Blade's Edge Mountains",
["zmLoc"] = {
["y"] = "54.18",
["x"] = "52.05",
},
["routes"] = {
"Area 52, Netherstorm", -- [1]
"Evergrove, Blade's Edge Mountains", -- [2]
"Mok'Nathal Village, Blade's Edge Mountains", -- [3]
"Swamprat Post, Zangarmarsh", -- [4]
"The Stormspire, Netherstorm", -- [5]
"Zabra'jin, Zangarmarsh", -- [6]
},
["timers"] = {
["Swamprat Post, Zangarmarsh"] = 116,
["Garadar, Nagrand"] = 231,
["Cosmowrench, Netherstorm"] = 165,
["Stonebreaker Hold, Terokkar Forest"] = 271,
["The Stormspire, Netherstorm"] = 158,
["Shadowmoon Village, Shadowmoon Valley"] = 339,
["Falcon Watch, Hellfire Peninsula"] = 179,
["Evergrove, Blade's Edge Mountains"] = 27,
["Thrallmar, Hellfire Peninsula"] = 252,
["Mok'Nathal Village, Blade's Edge Mountains"] = 70,
["Area 52, Netherstorm"] = 98,
["Hellfire Peninsula, The Dark Portal, Horde"] = 325,
["Zabra'jin, Zangarmarsh"] = 149,
["Shattrath, Terokkar Forest"] = 203,
["Sanctum of the Stars, Shadowmoon Valley"] = 404,
["Spinebreaker Ridge, Hellfire Peninsula"] = 318,
},
},
["Evergrove, Blade's Edge Mountains"] = {
["fmLoc"] = {
["y"] = "0.72",
["x"] = "0.42",
},
["wmLoc"] = {
["y"] = "0.24",
["x"] = "0.42",
},
["name"] = "Evergrove, Blade's Edge Mountains",
["zmLoc"] = {
["y"] = "39.66",
["x"] = "61.64",
},
["timers"] = {
["Garadar, Nagrand"] = 260,
["Swamprat Post, Zangarmarsh"] = 145,
["Falcon Watch, Hellfire Peninsula"] = 208,
["Mok'Nathal Village, Blade's Edge Mountains"] = 98,
["Thunderlord Stronghold, Blade's Edge Mountains"] = 28,
["Thrallmar, Hellfire Peninsula"] = 281,
["Area 52, Netherstorm"] = 74,
["Hellfire Peninsula, The Dark Portal, Horde"] = 354,
["Zabra'jin, Zangarmarsh"] = 178,
["Stonebreaker Hold, Terokkar Forest"] = 301,
["Shattrath, Terokkar Forest"] = 232,
["Spinebreaker Ridge, Hellfire Peninsula"] = 347,
},
["routes"] = {
"Area 52, Netherstorm", -- [1]
"Thunderlord Stronghold, Blade's Edge Mountains", -- [2]
},
},
["Mok'Nathal Village, Blade's Edge Mountains"] = {
["fmLoc"] = {
["y"] = "0.64",
["x"] = "0.48",
},
["wmLoc"] = {
["y"] = "0.32",
["x"] = "0.47",
},
["name"] = "Mok'Nathal Village, Blade's Edge Mountains",
["zmLoc"] = {
["y"] = "65.89",
["x"] = "76.37",
},
["routes"] = {
"Area 52, Netherstorm", -- [1]
"Thunderlord Stronghold, Blade's Edge Mountains", -- [2]
},
["timers"] = {
["Thrallmar, Hellfire Peninsula"] = 323,
["Garadar, Nagrand"] = 302,
["Cosmowrench, Netherstorm"] = 134,
["Stonebreaker Hold, Terokkar Forest"] = 343,
["Swamprat Post, Zangarmarsh"] = 187,
["Shadowmoon Village, Shadowmoon Valley"] = 409,
["Spinebreaker Ridge, Hellfire Peninsula"] = 389,
["Sanctum of the Stars, Shadowmoon Valley"] = 474,
["Thunderlord Stronghold, Blade's Edge Mountains"] = 70,
["Zabra'jin, Zangarmarsh"] = 220,
["Evergrove, Blade's Edge Mountains"] = 98,
["Hellfire Peninsula, The Dark Portal, Horde"] = 396,
["Area 52, Netherstorm"] = 67,
["Shattrath, Terokkar Forest"] = 272,
["Falcon Watch, Hellfire Peninsula"] = 250,
["The Stormspire, Netherstorm"] = 115,
},
},
},
["Zangarmarsh"] = {
["Zabra'jin, Zangarmarsh"] = {
["fmLoc"] = {
["y"] = "0.49",
["x"] = "0.23",
},
["wmLoc"] = {
["y"] = "0.48",
["x"] = "0.29",
},
["name"] = "Zabra'jin, Zangarmarsh",
["zmLoc"] = {
["y"] = "51.1",
["x"] = "33",
},
["routes"] = {
"Falcon Watch, Hellfire Peninsula", -- [1]
"Garadar, Nagrand", -- [2]
"Shattrath, Terokkar Forest", -- [3]
"Swamprat Post, Zangarmarsh", -- [4]
"Thunderlord Stronghold, Blade's Edge Mountains", -- [5]
},
["timers"] = {
["Garadar, Nagrand"] = 82,
["Swamprat Post, Zangarmarsh"] = 112,
["Spinebreaker Ridge, Hellfire Peninsula"] = 293,
["Thrallmar, Hellfire Peninsula"] = 227,
["Shattrath, Terokkar Forest"] = 152,
["Falcon Watch, Hellfire Peninsula"] = 153,
["Mok'Nathal Village, Blade's Edge Mountains"] = 183,
["Thunderlord Stronghold, Blade's Edge Mountains"] = 113,
["Area 52, Netherstorm"] = 211,
["The Stormspire, Netherstorm"] = 259,
["Hellfire Peninsula, The Dark Portal, Horde"] = 300,
["Shadowmoon Village, Shadowmoon Valley"] = 288,
["Stonebreaker Hold, Terokkar Forest"] = 221,
["Cosmowrench, Netherstorm"] = 278,
["Evergrove, Blade's Edge Mountains"] = 140,
},
},
["Swamprat Post, Zangarmarsh"] = {
["fmLoc"] = {
["y"] = "0.48",
["x"] = "0.44",
},
["wmLoc"] = {
["y"] = "0.49",
["x"] = "0.44",
},
["name"] = "Swamprat Post, Zangarmarsh",
["zmLoc"] = {
["y"] = "55.08",
["x"] = "84.75",
},
["routes"] = {
"Falcon Watch, Hellfire Peninsula", -- [1]
"Shattrath, Terokkar Forest", -- [2]
"Thunderlord Stronghold, Blade's Edge Mountains", -- [3]
"Zabra'jin, Zangarmarsh", -- [4]
},
["timers"] = {
["Falcon Watch, Hellfire Peninsula"] = 63,
["Garadar, Nagrand"] = 170,
["Evergrove, Blade's Edge Mountains"] = 136,
["Stonebreaker Hold, Terokkar Forest"] = 156,
["Thrallmar, Hellfire Peninsula"] = 137,
["Zabra'jin, Zangarmarsh"] = 111,
["Spinebreaker Ridge, Hellfire Peninsula"] = 203,
["Sanctum of the Stars, Shadowmoon Valley"] = 288,
["Thunderlord Stronghold, Blade's Edge Mountains"] = 109,
["Mok'Nathal Village, Blade's Edge Mountains"] = 179,
["Shadowmoon Village, Shadowmoon Valley"] = 223,
["Hellfire Peninsula, The Dark Portal, Horde"] = 210,
["Area 52, Netherstorm"] = 207,
["Shattrath, Terokkar Forest"] = 87,
["Cosmowrench, Netherstorm"] = 274,
["The Stormspire, Netherstorm"] = 255,
},
},
},
["Netherstorm"] = {
["The Stormspire, Netherstorm"] = {
["fmLoc"] = {
["y"] = "0.81",
["x"] = "0.62",
},
["wmLoc"] = {
["y"] = "0.14",
["x"] = "0.57",
},
["name"] = "The Stormspire, Netherstorm",
["zmLoc"] = {
["y"] = "34.89",
["x"] = "45.29",
},
["timers"] = {
["Swamprat Post, Zangarmarsh"] = 273,
["Garadar, Nagrand"] = 388,
["Sanctum of the Stars, Shadowmoon Valley"] = 561,
["Stonebreaker Hold, Terokkar Forest"] = 429,
["Thrallmar, Hellfire Peninsula"] = 409,
["Zabra'jin, Zangarmarsh"] = 306,
["Falcon Watch, Hellfire Peninsula"] = 336,
["Cosmowrench, Netherstorm"] = 70,
["Thunderlord Stronghold, Blade's Edge Mountains"] = 157,
["Evergrove, Blade's Edge Mountains"] = 135,
["Area 52, Netherstorm"] = 59,
["Hellfire Peninsula, The Dark Portal, Horde"] = 482,
["Shadowmoon Village, Shadowmoon Valley"] = 496,
["Shattrath, Terokkar Forest"] = 359,
["Mok'Nathal Village, Blade's Edge Mountains"] = 132,
["Spinebreaker Ridge, Hellfire Peninsula"] = 475,
},
["routes"] = {
"Area 52, Netherstorm", -- [1]
"Cosmowrench, Netherstorm", -- [2]
"Thunderlord Stronghold, Blade's Edge Mountains", -- [3]
},
},
["Area 52, Netherstorm"] = {
["fmLoc"] = {
["y"] = "0.72",
["x"] = "0.57",
},
["wmLoc"] = {
["y"] = "0.23",
["x"] = "0.53",
},
["name"] = "Area 52, Netherstorm",
["zmLoc"] = {
["y"] = "64",
["x"] = "33.78",
},
["timers"] = {
["Swamprat Post, Zangarmarsh"] = 222,
["Garadar, Nagrand"] = 337,
["Cosmowrench, Netherstorm"] = 67,
["Stonebreaker Hold, Terokkar Forest"] = 378,
["The Stormspire, Netherstorm"] = 48,
["Shadowmoon Village, Shadowmoon Valley"] = 445,
["Spinebreaker Ridge, Hellfire Peninsula"] = 424,
["Sanctum of the Stars, Shadowmoon Valley"] = 510,
["Thunderlord Stronghold, Blade's Edge Mountains"] = 109,
["Evergrove, Blade's Edge Mountains"] = 78,
["Falcon Watch, Hellfire Peninsula"] = 285,
["Hellfire Peninsula, The Dark Portal, Horde"] = 431,
["Zabra'jin, Zangarmarsh"] = 255,
["Shattrath, Terokkar Forest"] = 309,
["Mok'Nathal Village, Blade's Edge Mountains"] = 72,
["Thrallmar, Hellfire Peninsula"] = 358,
},
["routes"] = {
"Cosmowrench, Netherstorm", -- [1]
"Evergrove, Blade's Edge Mountains", -- [2]
"Mok'Nathal Village, Blade's Edge Mountains", -- [3]
"The Stormspire, Netherstorm", -- [4]
"Thunderlord Stronghold, Blade's Edge Mountains", -- [5]
},
},
["Cosmowrench, Netherstorm"] = {
["fmLoc"] = {
["y"] = "0.72",
["x"] = "0.71",
},
["wmLoc"] = {
["y"] = "0.24",
["x"] = "0.63",
},
["name"] = "Cosmowrench, Netherstorm",
["zmLoc"] = {
["y"] = "66.77",
["x"] = "65.16",
},
["timers"] = {
["Garadar, Nagrand"] = 402,
["The Stormspire, Netherstorm"] = 62,
["Swamprat Post, Zangarmarsh"] = 287,
["Thrallmar, Hellfire Peninsula"] = 423,
["Spinebreaker Ridge, Hellfire Peninsula"] = 489,
["Evergrove, Blade's Edge Mountains"] = 143,
["Thunderlord Stronghold, Blade's Edge Mountains"] = 171,
["Stonebreaker Hold, Terokkar Forest"] = 443,
["Area 52, Netherstorm"] = 65,
["Hellfire Peninsula, The Dark Portal, Horde"] = 496,
["Zabra'jin, Zangarmarsh"] = 320,
["Shattrath, Terokkar Forest"] = 374,
["Mok'Nathal Village, Blade's Edge Mountains"] = 137,
["Falcon Watch, Hellfire Peninsula"] = 350,
},
["routes"] = {
"Area 52, Netherstorm", -- [1]
"The Stormspire, Netherstorm", -- [2]
},
},
},
["Shattrath City"] = {
["Shattrath, Terokkar Forest"] = {
["fmLoc"] = {
["y"] = "0.32",
["x"] = "0.43",
},
["wmLoc"] = {
["y"] = "0.65",
["x"] = "0.44",
},
["name"] = "Shattrath, Terokkar Forest",
["zmLoc"] = {
["y"] = "41.35",
["x"] = "63.89",
},
["timers"] = {
["Cosmowrench, Netherstorm"] = 353,
["Garadar, Nagrand"] = 82,
["Thrallmar, Hellfire Peninsula"] = 150,
["Mok'Nathal Village, Blade's Edge Mountains"] = 258,
["The Stormspire, Netherstorm"] = 334,
["Shadowmoon Village, Shadowmoon Valley"] = 136,
["Falcon Watch, Hellfire Peninsula"] = 77,
["Evergrove, Blade's Edge Mountains"] = 216,
["Thunderlord Stronghold, Blade's Edge Mountains"] = 188,
["Zabra'jin, Zangarmarsh"] = 137,
["Spinebreaker Ridge, Hellfire Peninsula"] = 215,
["Hellfire Peninsula, The Dark Portal, Horde"] = 221,
["Area 52, Netherstorm"] = 286,
["Stonebreaker Hold, Terokkar Forest"] = 69,
["Swamprat Post, Zangarmarsh"] = 79,
["Sanctum of the Stars, Shadowmoon Valley"] = 201,
},
["routes"] = {
"Falcon Watch, Hellfire Peninsula", -- [1]
"Garadar, Nagrand", -- [2]
"Stonebreaker Hold, Terokkar Forest", -- [3]
"Swamprat Post, Zangarmarsh", -- [4]
"Zabra'jin, Zangarmarsh", -- [5]
},
},
},
["Hellfire Peninsula"] = {
["Thrallmar, Hellfire Peninsula"] = {
["fmLoc"] = {
["y"] = "0.49",
["x"] = "0.65",
},
["wmLoc"] = {
["y"] = "0.48",
["x"] = "0.59",
},
["name"] = "Thrallmar, Hellfire Peninsula",
["zmLoc"] = {
["y"] = "36.32",
["x"] = "56.28",
},
["routes"] = {
"Falcon Watch, Hellfire Peninsula", -- [1]
"Hellfire Peninsula, The Dark Portal, Horde", -- [2]
"Spinebreaker Ridge, Hellfire Peninsula", -- [3]
"Stonebreaker Hold, Terokkar Forest", -- [4]
},
["timers"] = {
["Swamprat Post, Zangarmarsh"] = 136,
["Garadar, Nagrand"] = 200,
["Mok'Nathal Village, Blade's Edge Mountains"] = 316,
["Shattrath, Terokkar Forest"] = 138,
["The Stormspire, Netherstorm"] = 392,
["Area 52, Netherstorm"] = 344,
["Falcon Watch, Hellfire Peninsula"] = 67,
["Sanctum of the Stars, Shadowmoon Valley"] = 259,
["Thunderlord Stronghold, Blade's Edge Mountains"] = 246,
["Cosmowrench, Netherstorm"] = 411,
["Shadowmoon Village, Shadowmoon Valley"] = 194,
["Hellfire Peninsula, The Dark Portal, Horde"] = 73,
["Zabra'jin, Zangarmarsh"] = 218,
["Stonebreaker Hold, Terokkar Forest"] = 129,
["Evergrove, Blade's Edge Mountains"] = 273,
["Spinebreaker Ridge, Hellfire Peninsula"] = 66,
},
},
["Spinebreaker Ridge, Hellfire Peninsula"] = {
["fmLoc"] = {
["y"] = "0.37",
["x"] = "0.67",
},
["wmLoc"] = {
["y"] = "0.61",
["x"] = "0.6",
},
["name"] = "Spinebreaker Ridge, Hellfire Peninsula",
["zmLoc"] = {
["y"] = "81.26",
["x"] = "61.63",
},
["routes"] = {
"Thrallmar, Hellfire Peninsula", -- [1]
},
["timers"] = {
["Swamprat Post, Zangarmarsh"] = 200,
["Garadar, Nagrand"] = 263,
["Evergrove, Blade's Edge Mountains"] = 336,
["Shattrath, Terokkar Forest"] = 202,
["Thrallmar, Hellfire Peninsula"] = 63,
["Area 52, Netherstorm"] = 407,
["Falcon Watch, Hellfire Peninsula"] = 129,
["Mok'Nathal Village, Blade's Edge Mountains"] = 379,
["Thunderlord Stronghold, Blade's Edge Mountains"] = 309,
["Sanctum of the Stars, Shadowmoon Valley"] = 324,
["Shadowmoon Village, Shadowmoon Valley"] = 259,
["Hellfire Peninsula, The Dark Portal, Horde"] = 136,
["Zabra'jin, Zangarmarsh"] = 281,
["Stonebreaker Hold, Terokkar Forest"] = 192,
["Cosmowrench, Netherstorm"] = 474,
["The Stormspire, Netherstorm"] = 455,
},
},
["Falcon Watch, Hellfire Peninsula"] = {
["fmLoc"] = {
["y"] = "0.43",
["x"] = "0.53",
},
["wmLoc"] = {
["y"] = "0.55",
["x"] = "0.5",
},
["name"] = "Falcon Watch, Hellfire Peninsula",
["zmLoc"] = {
["y"] = "59.99",
["x"] = "27.79",
},
["routes"] = {
"Garadar, Nagrand", -- [1]
"Shattrath, Terokkar Forest", -- [2]
"Swamprat Post, Zangarmarsh", -- [3]
"Thrallmar, Hellfire Peninsula", -- [4]
"Zabra'jin, Zangarmarsh", -- [5]
},
["timers"] = {
["Garadar, Nagrand"] = 133,
["Thrallmar, Hellfire Peninsula"] = 73,
["Spinebreaker Ridge, Hellfire Peninsula"] = 139,
["Evergrove, Blade's Edge Mountains"] = 206,
["Thunderlord Stronghold, Blade's Edge Mountains"] = 179,
["Swamprat Post, Zangarmarsh"] = 70,
["Stonebreaker Hold, Terokkar Forest"] = 140,
["Hellfire Peninsula, The Dark Portal, Horde"] = 144,
["Area 52, Netherstorm"] = 277,
["Shattrath, Terokkar Forest"] = 72,
["Zabra'jin, Zangarmarsh"] = 151,
["The Stormspire, Netherstorm"] = 325,
},
},
["Hellfire Peninsula, The Dark Portal, Horde"] = {
["fmLoc"] = {
["y"] = "0.46",
["x"] = "0.78",
},
["wmLoc"] = {
["y"] = "0.51",
["x"] = "0.68",
},
["name"] = "Hellfire Peninsula, The Dark Portal, Horde",
["zmLoc"] = {
["y"] = "48.13",
["x"] = "87.34",
},
["timers"] = {
["Garadar, Nagrand"] = 257,
["Thrallmar, Hellfire Peninsula"] = 60,
["Falcon Watch, Hellfire Peninsula"] = 124,
["Evergrove, Blade's Edge Mountains"] = 330,
["Thunderlord Stronghold, Blade's Edge Mountains"] = 303,
["The Stormspire, Netherstorm"] = 449,
["Zabra'jin, Zangarmarsh"] = 275,
["Stonebreaker Hold, Terokkar Forest"] = 189,
["Area 52, Netherstorm"] = 401,
["Shattrath, Terokkar Forest"] = 196,
["Spinebreaker Ridge, Hellfire Peninsula"] = 126,
["Swamprat Post, Zangarmarsh"] = 194,
},
["routes"] = {
"Falcon Watch, Hellfire Peninsula", -- [1]
"Thrallmar, Hellfire Peninsula", -- [2]
},
},
},
["Terokkar Forest"] = {
["Stonebreaker Hold, Terokkar Forest"] = {
["fmLoc"] = {
["y"] = "0.26",
["x"] = "0.5",
},
["wmLoc"] = {
["y"] = "0.72",
["x"] = "0.49",
},
["name"] = "Stonebreaker Hold, Terokkar Forest",
["zmLoc"] = {
["y"] = "43.48",
["x"] = "49.18",
},
["routes"] = {
"Shadowmoon Village, Shadowmoon Valley", -- [1]
"Shattrath, Terokkar Forest", -- [2]
"Thrallmar, Hellfire Peninsula", -- [3]
},
["timers"] = {
["Evergrove, Blade's Edge Mountains"] = 272,
["Garadar, Nagrand"] = 138,
["Sanctum of the Stars, Shadowmoon Valley"] = 132,
["Mok'Nathal Village, Blade's Edge Mountains"] = 315,
["Swamprat Post, Zangarmarsh"] = 136,
["Shadowmoon Village, Shadowmoon Valley"] = 67,
["Falcon Watch, Hellfire Peninsula"] = 133,
["Cosmowrench, Netherstorm"] = 410,
["Thunderlord Stronghold, Blade's Edge Mountains"] = 245,
["Area 52, Netherstorm"] = 343,
["The Stormspire, Netherstorm"] = 391,
["Hellfire Peninsula, The Dark Portal, Horde"] = 203,
["Zabra'jin, Zangarmarsh"] = 194,
["Shattrath, Terokkar Forest"] = 57,
["Spinebreaker Ridge, Hellfire Peninsula"] = 196,
["Thrallmar, Hellfire Peninsula"] = 130,
},
},
},
["Shadowmoon Valley"] = {
["Shadowmoon Village, Shadowmoon Valley"] = {
["fmLoc"] = {
["y"] = "0.23",
["x"] = "0.66",
},
["wmLoc"] = {
["y"] = "0.75",
["x"] = "0.59",
},
["name"] = "Shadowmoon Village, Shadowmoon Valley",
["zmLoc"] = {
["y"] = "29.19",
["x"] = "30.32",
},
["timers"] = {
["The Stormspire, Netherstorm"] = 464,
["Garadar, Nagrand"] = 209,
["Mok'Nathal Village, Blade's Edge Mountains"] = 388,
["Stonebreaker Hold, Terokkar Forest"] = 73,
["Thrallmar, Hellfire Peninsula"] = 203,
["Zabra'jin, Zangarmarsh"] = 267,
["Falcon Watch, Hellfire Peninsula"] = 207,
["Cosmowrench, Netherstorm"] = 480,
["Thunderlord Stronghold, Blade's Edge Mountains"] = 318,
["Evergrove, Blade's Edge Mountains"] = 345,
["Swamprat Post, Zangarmarsh"] = 209,
["Hellfire Peninsula, The Dark Portal, Horde"] = 276,
["Area 52, Netherstorm"] = 416,
["Shattrath, Terokkar Forest"] = 130,
["Sanctum of the Stars, Shadowmoon Valley"] = 65,
["Spinebreaker Ridge, Hellfire Peninsula"] = 269,
},
["routes"] = {
"Sanctum of the Stars, Shadowmoon Valley", -- [1]
"Stonebreaker Hold, Terokkar Forest", -- [2]
},
},
["Sanctum of the Stars, Shadowmoon Valley"] = {
["fmLoc"] = {
["y"] = "0.14",
["x"] = "0.77",
},
["wmLoc"] = {
["y"] = "0.84",
["x"] = "0.67",
},
["name"] = "Sanctum of the Stars, Shadowmoon Valley",
["zmLoc"] = {
["y"] = "57.81",
["x"] = "56.33",
},
["timers"] = {
["Spinebreaker Ridge, Hellfire Peninsula"] = 330,
["Garadar, Nagrand"] = 273,
["Mok'Nathal Village, Blade's Edge Mountains"] = 449,
["Stonebreaker Hold, Terokkar Forest"] = 134,
["The Stormspire, Netherstorm"] = 525,
["Shadowmoon Village, Shadowmoon Valley"] = 61,
["Falcon Watch, Hellfire Peninsula"] = 268,
["Cosmowrench, Netherstorm"] = 544,
["Thunderlord Stronghold, Blade's Edge Mountains"] = 379,
["Zabra'jin, Zangarmarsh"] = 328,
["Swamprat Post, Zangarmarsh"] = 270,
["Hellfire Peninsula, The Dark Portal, Horde"] = 337,
["Area 52, Netherstorm"] = 477,
["Shattrath, Terokkar Forest"] = 188,
["Evergrove, Blade's Edge Mountains"] = 406,
["Thrallmar, Hellfire Peninsula"] = 264,
},
["routes"] = {
"Shadowmoon Village, Shadowmoon Valley", -- [1]
},
},
},
["Nagrand"] = {
["Garadar, Nagrand"] = {
["fmLoc"] = {
["y"] = "0.37",
["x"] = "0.28",
},
["wmLoc"] = {
["y"] = "0.6",
["x"] = "0.33",
},
["name"] = "Garadar, Nagrand",
["zmLoc"] = {
["y"] = "35.28",
["x"] = "57.21",
},
["routes"] = {
"Falcon Watch, Hellfire Peninsula", -- [1]
"Shattrath, Terokkar Forest", -- [2]
"Zabra'jin, Zangarmarsh", -- [3]
},
["timers"] = {
["Swamprat Post, Zangarmarsh"] = 156,
["Spinebreaker Ridge, Hellfire Peninsula"] = 265,
["Shattrath, Terokkar Forest"] = 77,
["Zabra'jin, Zangarmarsh"] = 67,
["The Stormspire, Netherstorm"] = 327,
["Mok'Nathal Village, Blade's Edge Mountains"] = 251,
["Falcon Watch, Hellfire Peninsula"] = 126,
["Cosmowrench, Netherstorm"] = 346,
["Thunderlord Stronghold, Blade's Edge Mountains"] = 180,
["Sanctum of the Stars, Shadowmoon Valley"] = 278,
["Shadowmoon Village, Shadowmoon Valley"] = 213,
["Hellfire Peninsula, The Dark Portal, Horde"] = 272,
["Area 52, Netherstorm"] = 279,
["Stonebreaker Hold, Terokkar Forest"] = 146,
["Evergrove, Blade's Edge Mountains"] = 208,
["Thrallmar, Hellfire Peninsula"] = 199,
},
},
},
},
},
["Alliance"] = {
["Northrend"] = {
["Icecrown"] = {
["Crusaders' Pinnacle, Icecrown"] = {
["fmLoc"] = {
["y"] = "0.65",
["x"] = "0.52",
},
["wmLoc"] = {
["y"] = "0.35",
["x"] = "0.49",
},
["name"] = "Crusaders' Pinnacle, Icecrown",
["zmLoc"] = {
["y"] = "72.33",
["x"] = "79.42",
},
["timers"] = {
["Wintergarde Keep, Dragonblight"] = 198,
["Valiance Landing Camp, Wintergrasp"] = 107,
["Frosthold, The Storm Peaks"] = 75,
["Westfall Brigade, Grizzly Hills"] = 287,
["Light's Breach, Zul'Drak"] = 194,
["Death's Rise, Icecrown"] = 169,
["Westguard Keep, Howling Fjord"] = 326,
["K3, The Storm Peaks"] = 122,
["Windrunner's Overlook, Crystalsong Forest"] = 121,
["Argent Tournament Grounds, Icecrown"] = 97,
["Bouldercrag's Refuge, The Storm Peaks"] = 140,
["Ulduar, The Storm Peaks"] = 172,
["Fort Wildervar, Howling Fjord"] = 373,
["The Argent Stand, Zul'Drak"] = 214,
["Dalaran"] = 72,
["Valgarde Port, Howling Fjord"] = 396,
["Wyrmrest Temple, Dragonblight"] = 176,
["The Shadow Vault, Icecrown"] = 124,
["The Argent Vanguard, Icecrown"] = 33,
["Zim'Torga, Zul'Drak"] = 256,
["Amberpine Lodge, Grizzly Hills"] = 276,
["Ebon Watch, Zul'Drak"] = 149,
["Fordragon Hold, Dragonblight"] = 157,
},
["routes"] = {
"Argent Tournament Grounds, Icecrown", -- [1]
"Dalaran", -- [2]
"Death's Rise, Icecrown", -- [3]
"The Argent Vanguard, Icecrown", -- [4]
"The Shadow Vault, Icecrown", -- [5]
"Valiance Landing Camp, Wintergrasp", -- [6]
},
["factions"] = {
"Alliance", -- [1]
},
},
["The Shadow Vault, Icecrown"] = {
["fmLoc"] = {
["y"] = "0.78",
["x"] = "0.37",
},
["wmLoc"] = {
["y"] = "0.18",
["x"] = "0.36",
},
["name"] = "The Shadow Vault, Icecrown",
["zmLoc"] = {
["y"] = "24.43",
["x"] = "43.75",
},
["routes"] = {
"Argent Tournament Grounds, Icecrown", -- [1]
"Bouldercrag's Refuge, The Storm Peaks", -- [2]
"Crusaders' Pinnacle, Icecrown", -- [3]
"Death's Rise, Icecrown", -- [4]
"The Argent Vanguard, Icecrown", -- [5]
"Valiance Landing Camp, Wintergrasp", -- [6]
},
["timers"] = {
["Kamagua, Howling Fjord"] = 459,
["Dun Niffelem, The Storm Peaks"] = 271,
["River's Heart, Sholazar Basin"] = 194,
["Moa'ki, Dragonblight"] = 294,
["Wintergarde Keep, Dragonblight"] = 279,
["Fordragon Hold, Dragonblight"] = 191,
["Crusaders' Pinnacle, Icecrown"] = 122,
["Ebon Watch, Zul'Drak"] = 251,
["Dalaran"] = 190,
["Frosthold, The Storm Peaks"] = 177,
["Westfall Brigade, Grizzly Hills"] = 378,
["Light's Breach, Zul'Drak"] = 296,
["Death's Rise, Icecrown"] = 78,
["Bouldercrag's Refuge, The Storm Peaks"] = 122,
["K3, The Storm Peaks"] = 224,
["Windrunner's Overlook, Crystalsong Forest"] = 223,
["Argent Tournament Grounds, Icecrown"] = 77,
["Gundrak, Zul'Drak"] = 375,
["Wyrmrest Temple, Dragonblight"] = 257,
["Fort Wildervar, Howling Fjord"] = 464,
["Nesingwary Base Camp, Sholazar Basin"] = 196,
["The Argent Stand, Zul'Drak"] = 316,
["Valgarde Port, Howling Fjord"] = 477,
["Zim'Torga, Zul'Drak"] = 321,
["Valiance Landing Camp, Wintergrasp"] = 141,
["The Argent Vanguard, Icecrown"] = 136,
["Fizzcrank Airstrip, Borean Tundra"] = 301,
["Stars' Rest, Dragonblight"] = 222,
["Amber Ledge, Borean Tundra"] = 368,
["Westguard Keep, Howling Fjord"] = 407,
},
["factions"] = {
"Alliance", -- [1]
},
},
["The Argent Vanguard, Icecrown"] = {
["fmLoc"] = {
["y"] = "0.63",
["x"] = "0.55",
},
["wmLoc"] = {
["y"] = "0.37",
["x"] = "0.52",
},
["name"] = "The Argent Vanguard, Icecrown",
["zmLoc"] = {
["y"] = "78",
["x"] = "87.78",
},
["timers"] = {
["K3, The Storm Peaks"] = 88,
["Windrunner's Overlook, Crystalsong Forest"] = 87,
["Argent Tournament Grounds, Icecrown"] = 156,
["Gundrak, Zul'Drak"] = 266,
["The Argent Stand, Zul'Drak"] = 180,
["Crusaders' Pinnacle, Icecrown"] = 29,
["Light's Breach, Zul'Drak"] = 160,
["Amberpine Lodge, Grizzly Hills"] = 242,
["Frosthold, The Storm Peaks"] = 41,
["Zim'Torga, Zul'Drak"] = 212,
["Dalaran"] = 33,
["Dun Niffelem, The Storm Peaks"] = 183,
["The Shadow Vault, Icecrown"] = 149,
},
["routes"] = {
"Crusaders' Pinnacle, Icecrown", -- [1]
"Dalaran", -- [2]
"Frosthold, The Storm Peaks", -- [3]
"The Shadow Vault, Icecrown", -- [4]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Death's Rise, Icecrown"] = {
["fmLoc"] = {
["y"] = "0.72",
["x"] = "0.27",
},
["wmLoc"] = {
["y"] = "0.26",
["x"] = "0.28",
},
["name"] = "Death's Rise, Icecrown",
["zmLoc"] = {
["y"] = "47.79",
["x"] = "19.41",
},
["routes"] = {
"Crusaders' Pinnacle, Icecrown", -- [1]
"Nesingwary Base Camp, Sholazar Basin", -- [2]
"River's Heart, Sholazar Basin", -- [3]
"The Shadow Vault, Icecrown", -- [4]
"Valiance Landing Camp, Wintergrasp", -- [5]
},
["timers"] = {
["River's Heart, Sholazar Basin"] = 118,
["Ebon Watch, Zul'Drak"] = 324,
["Fordragon Hold, Dragonblight"] = 504,
["Crusaders' Pinnacle, Icecrown"] = 175,
["Westfall Brigade, Grizzly Hills"] = 462,
["Light's Breach, Zul'Drak"] = 369,
["Windrunner's Overlook, Crystalsong Forest"] = 296,
["Argent Tournament Grounds, Icecrown"] = 170,
["Bouldercrag's Refuge, The Storm Peaks"] = 216,
["The Argent Stand, Zul'Drak"] = 389,
["Dalaran"] = 241,
["The Shadow Vault, Icecrown"] = 94,
["The Argent Vanguard, Icecrown"] = 208,
["Zim'Torga, Zul'Drak"] = 413,
["Gundrak, Zul'Drak"] = 469,
["Nesingwary Base Camp, Sholazar Basin"] = 118,
["Valiance Landing Camp, Wintergrasp"] = 172,
},
["factions"] = {
"Alliance", -- [1]
},
},
["Argent Tournament Grounds, Icecrown"] = {
["fmLoc"] = {
["y"] = "0.78",
["x"] = "0.49",
},
["wmLoc"] = {
["y"] = "0.17",
["x"] = "0.46",
},
["name"] = "Argent Tournament Grounds, Icecrown",
["zmLoc"] = {
["y"] = "22.64",
["x"] = "72.6",
},
["routes"] = {
"Bouldercrag's Refuge, The Storm Peaks", -- [1]
"Crusaders' Pinnacle, Icecrown", -- [2]
"Dalaran", -- [3]
"The Shadow Vault, Icecrown", -- [4]
},
["timers"] = {
["Kamagua, Howling Fjord"] = 452,
["Dun Niffelem, The Storm Peaks"] = 200,
["River's Heart, Sholazar Basin"] = 280,
["Moa'ki, Dragonblight"] = 294,
["Ebon Watch, Zul'Drak"] = 223,
["Valiance Landing Camp, Wintergrasp"] = 181,
["Crusaders' Pinnacle, Icecrown"] = 74,
["Frosthold, The Storm Peaks"] = 129,
["Westfall Brigade, Grizzly Hills"] = 306,
["Light's Breach, Zul'Drak"] = 268,
["Death's Rise, Icecrown"] = 243,
["Unu'pe, Borean Tundra"] = 360,
["K3, The Storm Peaks"] = 178,
["Windrunner's Overlook, Crystalsong Forest"] = 194,
["Stars' Rest, Dragonblight"] = 262,
["Gundrak, Zul'Drak"] = 303,
["Wintergarde Keep, Dragonblight"] = 271,
["Ulduar, The Storm Peaks"] = 95,
["The Argent Stand, Zul'Drak"] = 288,
["Valiance Keep, Borean Tundra"] = 393,
["Dalaran"] = 140,
["Zim'Torga, Zul'Drak"] = 249,
["The Shadow Vault, Icecrown"] = 87,
["Amberpine Lodge, Grizzly Hills"] = 349,
["Fizzcrank Airstrip, Borean Tundra"] = 387,
["Wyrmrest Temple, Dragonblight"] = 263,
["Fort Wildervar, Howling Fjord"] = 392,
["Bouldercrag's Refuge, The Storm Peaks"] = 50,
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Wintergrasp"] = {
["Valiance Landing Camp, Wintergrasp"] = {
["fmLoc"] = {
["y"] = "0.57",
["x"] = "0.41",
},
["wmLoc"] = {
["y"] = "0.46",
["x"] = "0.39",
},
["name"] = "Valiance Landing Camp, Wintergrasp",
["zmLoc"] = {
["y"] = "31.05",
["x"] = "72.05",
},
["routes"] = {
"Crusaders' Pinnacle, Icecrown", -- [1]
"Dalaran", -- [2]
"Death's Rise, Icecrown", -- [3]
"Fordragon Hold, Dragonblight", -- [4]
"River's Heart, Sholazar Basin", -- [5]
"Stars' Rest, Dragonblight", -- [6]
"The Shadow Vault, Icecrown", -- [7]
},
["timers"] = {
["Kamagua, Howling Fjord"] = 318,
["Dun Niffelem, The Storm Peaks"] = 249,
["River's Heart, Sholazar Basin"] = 121,
["Moa'ki, Dragonblight"] = 153,
["Ebon Watch, Zul'Drak"] = 169,
["Fordragon Hold, Dragonblight"] = 50,
["Crusaders' Pinnacle, Icecrown"] = 111,
["Frosthold, The Storm Peaks"] = 166,
["Westfall Brigade, Grizzly Hills"] = 300,
["Light's Breach, Zul'Drak"] = 214,
["Death's Rise, Icecrown"] = 166,
["Unu'pe, Borean Tundra"] = 179,
["K3, The Storm Peaks"] = 146,
["Stars' Rest, Dragonblight"] = 81,
["Argent Tournament Grounds, Icecrown"] = 207,
["Gundrak, Zul'Drak"] = 327,
["Ulduar, The Storm Peaks"] = 263,
["Bouldercrag's Refuge, The Storm Peaks"] = 231,
["Windrunner's Overlook, Crystalsong Forest"] = 145,
["Dalaran"] = 92,
["Wyrmrest Temple, Dragonblight"] = 115,
["The Shadow Vault, Icecrown"] = 161,
["The Argent Vanguard, Icecrown"] = 124,
["Zim'Torga, Zul'Drak"] = 276,
["Amberpine Lodge, Grizzly Hills"] = 216,
["Wintergarde Keep, Dragonblight"] = 205,
["Westguard Keep, Howling Fjord"] = 261,
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Crystalsong Forest"] = {
["Windrunner's Overlook, Crystalsong Forest"] = {
["fmLoc"] = {
["y"] = "0.56",
["x"] = "0.58",
},
["wmLoc"] = {
["y"] = "0.46",
["x"] = "0.54",
},
["name"] = "Windrunner's Overlook, Crystalsong Forest",
["zmLoc"] = {
["y"] = "80.82",
["x"] = "72.16",
},
["routes"] = {
"Dalaran", -- [1]
"Ebon Watch, Zul'Drak", -- [2]
"K3, The Storm Peaks", -- [3]
"Wintergarde Keep, Dragonblight", -- [4]
},
["timers"] = {
["K3, The Storm Peaks"] = 47,
["Stars' Rest, Dragonblight"] = 188,
["Wintergarde Keep, Dragonblight"] = 77,
["The Argent Stand, Zul'Drak"] = 112,
["Zim'Torga, Zul'Drak"] = 154,
["Amberpine Lodge, Grizzly Hills"] = 154,
["Dalaran"] = 49,
["Wyrmrest Temple, Dragonblight"] = 132,
["Light's Breach, Zul'Drak"] = 92,
["Westfall Brigade, Grizzly Hills"] = 185,
["Ebon Watch, Zul'Drak"] = 47,
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Zul'Drak"] = {
["Gundrak, Zul'Drak"] = {
["fmLoc"] = {
["y"] = "0.68",
["x"] = "0.81",
},
["wmLoc"] = {
["y"] = "0.31",
["x"] = "0.75",
},
["name"] = "Gundrak, Zul'Drak",
["zmLoc"] = {
["y"] = "23.21",
["x"] = "70.48",
},
["timers"] = {
["K3, The Storm Peaks"] = 204,
["Windrunner's Overlook, Crystalsong Forest"] = 198,
["Bouldercrag's Refuge, The Storm Peaks"] = 258,
["Fort Wildervar, Howling Fjord"] = 199,
["Ebon Watch, Zul'Drak"] = 163,
["Dun Niffelem, The Storm Peaks"] = 142,
["Ulduar, The Storm Peaks"] = 211,
["Light's Breach, Zul'Drak"] = 135,
["Frosthold, The Storm Peaks"] = 247,
["Zim'Torga, Zul'Drak"] = 56,
["Dalaran"] = 231,
["The Argent Vanguard, Icecrown"] = 256,
["The Argent Stand, Zul'Drak"] = 110,
},
["routes"] = {
"Zim'Torga, Zul'Drak", -- [1]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Zim'Torga, Zul'Drak"] = {
["fmLoc"] = {
["y"] = "0.61",
["x"] = "0.78",
},
["wmLoc"] = {
["y"] = "0.4",
["x"] = "0.72",
},
["name"] = "Zim'Torga, Zul'Drak",
["zmLoc"] = {
["y"] = "56.72",
["x"] = "59.99",
},
["routes"] = {
"Dun Niffelem, The Storm Peaks", -- [1]
"Gundrak, Zul'Drak", -- [2]
"The Argent Stand, Zul'Drak", -- [3]
"Ulduar, The Storm Peaks", -- [4]
"Westfall Brigade, Grizzly Hills", -- [5]
},
["timers"] = {
["Gundrak, Zul'Drak"] = 54,
["Ulduar, The Storm Peaks"] = 155,
["The Argent Stand, Zul'Drak"] = 53,
["Valgarde Port, Howling Fjord"] = 216,
["Dun Niffelem, The Storm Peaks"] = 86,
["Fizzcrank Airstrip, Borean Tundra"] = 379,
["Dalaran"] = 174,
["Light's Breach, Zul'Drak"] = 79,
["Westfall Brigade, Grizzly Hills"] = 57,
},
["factions"] = {
"Alliance", -- [1]
},
},
["Light's Breach, Zul'Drak"] = {
["fmLoc"] = {
["y"] = "0.57",
["x"] = "0.69",
},
["wmLoc"] = {
["y"] = "0.45",
["x"] = "0.64",
},
["name"] = "Light's Breach, Zul'Drak",
["zmLoc"] = {
["y"] = "74.44",
["x"] = "32.15",
},
["routes"] = {
"Amberpine Lodge, Grizzly Hills", -- [1]
"Ebon Watch, Zul'Drak", -- [2]
"The Argent Stand, Zul'Drak", -- [3]
"Wintergarde Keep, Dragonblight", -- [4]
},
["timers"] = {
["Westfall Brigade, Grizzly Hills"] = 118,
["Wintergarde Keep, Dragonblight"] = 84,
["Amberpine Lodge, Grizzly Hills"] = 84,
["Gundrak, Zul'Drak"] = 139,
["Zim'Torga, Zul'Drak"] = 86,
["Fort Wildervar, Howling Fjord"] = 204,
["The Argent Stand, Zul'Drak"] = 44,
["Ebon Watch, Zul'Drak"] = 41,
},
["factions"] = {
"Alliance", -- [1]
},
},
["The Argent Stand, Zul'Drak"] = {
["fmLoc"] = {
["y"] = "0.59",
["x"] = "0.72",
},
["wmLoc"] = {
["y"] = "0.42",
["x"] = "0.67",
},
["name"] = "The Argent Stand, Zul'Drak",
["zmLoc"] = {
["y"] = "64.45",
["x"] = "41.62",
},
["routes"] = {
"Ebon Watch, Zul'Drak", -- [1]
"Light's Breach, Zul'Drak", -- [2]
"Westfall Brigade, Grizzly Hills", -- [3]
"Zim'Torga, Zul'Drak", -- [4]
},
["timers"] = {
["K3, The Storm Peaks"] = 94,
["Windrunner's Overlook, Crystalsong Forest"] = 88,
["Bouldercrag's Refuge, The Storm Peaks"] = 204,
["Ulduar, The Storm Peaks"] = 197,
["Ebon Watch, Zul'Drak"] = 53,
["Valgarde Port, Howling Fjord"] = 233,
["The Argent Vanguard, Icecrown"] = 145,
["Frosthold, The Storm Peaks"] = 138,
["Westfall Brigade, Grizzly Hills"] = 73,
["Dalaran"] = 120,
["Zim'Torga, Zul'Drak"] = 42,
["Light's Breach, Zul'Drak"] = 25,
},
["factions"] = {
"Alliance", -- [1]
},
},
["Ebon Watch, Zul'Drak"] = {
["fmLoc"] = {
["y"] = "0.57",
["x"] = "0.63",
},
["wmLoc"] = {
["y"] = "0.45",
["x"] = "0.59",
},
["name"] = "Ebon Watch, Zul'Drak",
["zmLoc"] = {
["y"] = "73.63",
["x"] = "14.04",
},
["timers"] = {
["K3, The Storm Peaks"] = 41,
["Windrunner's Overlook, Crystalsong Forest"] = 35,
["Wintergarde Keep, Dragonblight"] = 63,
["Fordragon Hold, Dragonblight"] = 112,
["Zim'Torga, Zul'Drak"] = 107,
["Amberpine Lodge, Grizzly Hills"] = 129,
["Wyrmrest Temple, Dragonblight"] = 92,
["Westfall Brigade, Grizzly Hills"] = 138,
["Dalaran"] = 68,
["Light's Breach, Zul'Drak"] = 45,
["The Argent Stand, Zul'Drak"] = 65,
},
["routes"] = {
"Dalaran", -- [1]
"Fordragon Hold, Dragonblight", -- [2]
"K3, The Storm Peaks", -- [3]
"Light's Breach, Zul'Drak", -- [4]
"The Argent Stand, Zul'Drak", -- [5]
"Windrunner's Overlook, Crystalsong Forest", -- [6]
"Wintergarde Keep, Dragonblight", -- [7]
"Wyrmrest Temple, Dragonblight", -- [8]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Howling Fjord"] = {
["Valgarde Port, Howling Fjord"] = {
["fmLoc"] = {
["y"] = "0.27",
["x"] = "0.87",
},
["wmLoc"] = {
["y"] = "0.84",
["x"] = "0.8",
},
["name"] = "Valgarde Port, Howling Fjord",
["zmLoc"] = {
["y"] = "63.2",
["x"] = "59.77",
},
["routes"] = {
"Dalaran", -- [1]
"Fort Wildervar, Howling Fjord", -- [2]
"Kamagua, Howling Fjord", -- [3]
"Westguard Keep, Howling Fjord", -- [4]
},
["timers"] = {
["Kamagua, Howling Fjord"] = 96,
["Argent Tournament Grounds, Icecrown"] = 466,
["Moa'ki, Dragonblight"] = 291,
["Ebon Watch, Zul'Drak"] = 252,
["Fordragon Hold, Dragonblight"] = 319,
["Fort Wildervar, Howling Fjord"] = 71,
["Westguard Keep, Howling Fjord"] = 70,
["Amberpine Lodge, Grizzly Hills"] = 146,
["Westfall Brigade, Grizzly Hills"] = 170,
["Zim'Torga, Zul'Drak"] = 242,
["Dalaran"] = 352,
["Wyrmrest Temple, Dragonblight"] = 277,
["Unu'pe, Borean Tundra"] = 422,
},
["factions"] = {
"Alliance", -- [1]
},
},
["Westguard Keep, Howling Fjord"] = {
["fmLoc"] = {
["y"] = "0.32",
["x"] = "0.76",
},
["wmLoc"] = {
["y"] = "0.78",
["x"] = "0.7",
},
["name"] = "Westguard Keep, Howling Fjord",
["zmLoc"] = {
["y"] = "44",
["x"] = "31.25",
},
["routes"] = {
"Amberpine Lodge, Grizzly Hills", -- [1]
"Fort Wildervar, Howling Fjord", -- [2]
"Kamagua, Howling Fjord", -- [3]
"Valgarde Port, Howling Fjord", -- [4]
"Wintergarde Keep, Dragonblight", -- [5]
},
["timers"] = {
["Kamagua, Howling Fjord"] = 52,
["Moa'ki, Dragonblight"] = 247,
["Ebon Watch, Zul'Drak"] = 186,
["Valiance Landing Camp, Wintergrasp"] = 310,
["Crusaders' Pinnacle, Icecrown"] = 294,
["Frosthold, The Storm Peaks"] = 271,
["Westfall Brigade, Grizzly Hills"] = 163,
["Dalaran"] = 249,
["K3, The Storm Peaks"] = 227,
["Windrunner's Overlook, Crystalsong Forest"] = 221,
["Fort Wildervar, Howling Fjord"] = 86,
["The Argent Stand, Zul'Drak"] = 189,
["Valgarde Port, Howling Fjord"] = 70,
["Amberpine Lodge, Grizzly Hills"] = 77,
["The Argent Vanguard, Icecrown"] = 287,
["Wyrmrest Temple, Dragonblight"] = 207,
["Wintergarde Keep, Dragonblight"] = 152,
["Zim'Torga, Zul'Drak"] = 231,
},
["factions"] = {
"Alliance", -- [1]
},
},
["Kamagua, Howling Fjord"] = {
["fmLoc"] = {
["y"] = "0.29",
["x"] = "0.73",
},
["wmLoc"] = {
["y"] = "0.82",
["x"] = "0.68",
},
["name"] = "Kamagua, Howling Fjord",
["zmLoc"] = {
["y"] = "57.8",
["x"] = "24.68",
},
["routes"] = {
"Moa'ki, Dragonblight", -- [1]
"Valgarde Port, Howling Fjord", -- [2]
"Westguard Keep, Howling Fjord", -- [3]
},
["timers"] = {
["Valgarde Port, Howling Fjord"] = 81,
["Stars' Rest, Dragonblight"] = 250,
["Dalaran"] = 317,
["Westguard Keep, Howling Fjord"] = 37,
["Moa'ki, Dragonblight"] = 195,
["Fort Wildervar, Howling Fjord"] = 124,
["Unu'pe, Borean Tundra"] = 327,
},
["factions"] = {
"Alliance", -- [1]
},
},
["Fort Wildervar, Howling Fjord"] = {
["fmLoc"] = {
["y"] = "0.4",
["x"] = "0.87",
},
["wmLoc"] = {
["y"] = "0.68",
["x"] = "0.8",
},
["name"] = "Fort Wildervar, Howling Fjord",
["zmLoc"] = {
["y"] = "16.08",
["x"] = "60.1",
},
["timers"] = {
["Valgarde Port, Howling Fjord"] = 74,
["Valiance Keep, Borean Tundra"] = 419,
["Kamagua, Howling Fjord"] = 133,
["Amberpine Lodge, Grizzly Hills"] = 97,
["Westfall Brigade, Grizzly Hills"] = 99,
["Westguard Keep, Howling Fjord"] = 81,
["Wintergarde Keep, Dragonblight"] = 178,
["Unu'pe, Borean Tundra"] = 395,
},
["routes"] = {
"Amberpine Lodge, Grizzly Hills", -- [1]
"Valgarde Port, Howling Fjord", -- [2]
"Westfall Brigade, Grizzly Hills", -- [3]
"Westguard Keep, Howling Fjord", -- [4]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Borean Tundra"] = {
["Transitus Shield, Coldarra"] = {
["fmLoc"] = {
["y"] = "0.47",
["x"] = "0.12",
},
["wmLoc"] = {
["y"] = "0.59",
["x"] = "0.14",
},
["name"] = "Transitus Shield, Coldarra",
["zmLoc"] = {
["y"] = "34.39",
["x"] = "33.13",
},
["timers"] = {
["Stars' Rest, Dragonblight"] = 254,
["River's Heart, Sholazar Basin"] = 122,
["Moa'ki, Dragonblight"] = 222,
["Wintergarde Keep, Dragonblight"] = 343,
["Fordragon Hold, Dragonblight"] = 335,
["Ebon Watch, Zul'Drak"] = 443,
["Valiance Keep, Borean Tundra"] = 75,
["Amberpine Lodge, Grizzly Hills"] = 362,
["Fizzcrank Airstrip, Borean Tundra"] = 55,
["Wyrmrest Temple, Dragonblight"] = 271,
["Dalaran"] = 286,
["Amber Ledge, Borean Tundra"] = 30,
["Unu'pe, Borean Tundra"] = 152,
},
["routes"] = {
"Amber Ledge, Borean Tundra", -- [1]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Fizzcrank Airstrip, Borean Tundra"] = {
["fmLoc"] = {
["y"] = "0.5",
["x"] = "0.2",
},
["wmLoc"] = {
["y"] = "0.54",
["x"] = "0.22",
},
["name"] = "Fizzcrank Airstrip, Borean Tundra",
["zmLoc"] = {
["y"] = "20.02",
["x"] = "56.53",
},
["routes"] = {
"Amber Ledge, Borean Tundra", -- [1]
"Nesingwary Base Camp, Sholazar Basin", -- [2]
"River's Heart, Sholazar Basin", -- [3]
"Stars' Rest, Dragonblight", -- [4]
"Unu'pe, Borean Tundra", -- [5]
"Valiance Keep, Borean Tundra", -- [6]
},
["timers"] = {
["Transitus Shield, Coldarra"] = 93,
["Kamagua, Howling Fjord"] = 401,
["River's Heart, Sholazar Basin"] = 96,
["Moa'ki, Dragonblight"] = 216,
["Ebon Watch, Zul'Drak"] = 389,
["Fordragon Hold, Dragonblight"] = 281,
["Westfall Brigade, Grizzly Hills"] = 487,
["Westguard Keep, Howling Fjord"] = 413,
["Unu'pe, Borean Tundra"] = 81,
["Dalaran"] = 380,
["Stars' Rest, Dragonblight"] = 200,
["Argent Tournament Grounds, Icecrown"] = 408,
["Bouldercrag's Refuge, The Storm Peaks"] = 453,
["Fort Wildervar, Howling Fjord"] = 519,
["Ulduar, The Storm Peaks"] = 453,
["Nesingwary Base Camp, Sholazar Basin"] = 116,
["Valiance Keep, Borean Tundra"] = 106,
["Valgarde Port, Howling Fjord"] = 482,
["Wintergarde Keep, Dragonblight"] = 324,
["Amberpine Lodge, Grizzly Hills"] = 402,
["Windrunner's Overlook, Crystalsong Forest"] = 396,
["Wyrmrest Temple, Dragonblight"] = 236,
["Light's Breach, Zul'Drak"] = 414,
["Amber Ledge, Borean Tundra"] = 55,
["Valiance Landing Camp, Wintergrasp"] = 267,
},
["factions"] = {
"Alliance", -- [1]
},
},
["Unu'pe, Borean Tundra"] = {
["fmLoc"] = {
["y"] = "0.43",
["x"] = "0.29",
},
["wmLoc"] = {
["y"] = "0.64",
["x"] = "0.29",
},
["name"] = "Unu'pe, Borean Tundra",
["zmLoc"] = {
["y"] = "51.49",
["x"] = "78.5",
},
["routes"] = {
"Fizzcrank Airstrip, Borean Tundra", -- [1]
"Moa'ki, Dragonblight", -- [2]
"Stars' Rest, Dragonblight", -- [3]
"Valiance Keep, Borean Tundra", -- [4]
},
["timers"] = {
["Stars' Rest, Dragonblight"] = 98,
["Kamagua, Howling Fjord"] = 302,
["Fort Wildervar, Howling Fjord"] = 399,
["Moa'ki, Dragonblight"] = 118,
["Ebon Watch, Zul'Drak"] = 269,
["Valiance Keep, Borean Tundra"] = 60,
["Valgarde Port, Howling Fjord"] = 384,
["Fizzcrank Airstrip, Borean Tundra"] = 79,
["Amberpine Lodge, Grizzly Hills"] = 278,
["Westguard Keep, Howling Fjord"] = 331,
["Wyrmrest Temple, Dragonblight"] = 167,
["Dalaran"] = 240,
["Windrunner's Overlook, Crystalsong Forest"] = 276,
["Wintergarde Keep, Dragonblight"] = 204,
},
["factions"] = {
"Alliance", -- [1]
},
},
["Amber Ledge, Borean Tundra"] = {
["fmLoc"] = {
["y"] = "0.47",
["x"] = "0.16",
},
["wmLoc"] = {
["y"] = "0.59",
["x"] = "0.18",
},
["name"] = "Amber Ledge, Borean Tundra",
["zmLoc"] = {
["y"] = "34.21",
["x"] = "45.16",
},
["timers"] = {
["Transitus Shield, Coldarra"] = 26,
["Stars' Rest, Dragonblight"] = 224,
["Kamagua, Howling Fjord"] = 408,
["River's Heart, Sholazar Basin"] = 120,
["Moa'ki, Dragonblight"] = 223,
["Valiance Landing Camp, Wintergrasp"] = 291,
["Fizzcrank Airstrip, Borean Tundra"] = 24,
["Dalaran"] = 428,
["Valiance Keep, Borean Tundra"] = 45,
},
["routes"] = {
"Fizzcrank Airstrip, Borean Tundra", -- [1]
"Transitus Shield, Coldarra", -- [2]
"Valiance Keep, Borean Tundra", -- [3]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Valiance Keep, Borean Tundra"] = {
["fmLoc"] = {
["y"] = "0.38",
["x"] = "0.21",
},
["wmLoc"] = {
["y"] = "0.7",
["x"] = "0.22",
},
["name"] = "Valiance Keep, Borean Tundra",
["zmLoc"] = {
["y"] = "68.39",
["x"] = "58.96",
},
["timers"] = {
["Transitus Shield, Coldarra"] = 95,
["Stars' Rest, Dragonblight"] = 146,
["Moa'ki, Dragonblight"] = 182,
["Wintergarde Keep, Dragonblight"] = 269,
["Ebon Watch, Zul'Drak"] = 333,
["Valgarde Port, Howling Fjord"] = 448,
["Fort Wildervar, Howling Fjord"] = 454,
["Wyrmrest Temple, Dragonblight"] = 231,
["Fizzcrank Airstrip, Borean Tundra"] = 76,
["Zim'Torga, Zul'Drak"] = 434,
["Dalaran"] = 283,
["Amber Ledge, Borean Tundra"] = 64,
["Unu'pe, Borean Tundra"] = 64,
},
["routes"] = {
"Amber Ledge, Borean Tundra", -- [1]
"Dalaran", -- [2]
"Fizzcrank Airstrip, Borean Tundra", -- [3]
"Stars' Rest, Dragonblight", -- [4]
"Unu'pe, Borean Tundra", -- [5]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["The Storm Peaks"] = {
["K3, The Storm Peaks"] = {
["fmLoc"] = {
["y"] = "0.64",
["x"] = "0.61",
},
["wmLoc"] = {
["y"] = "0.37",
["x"] = "0.57",
},
["name"] = "K3, The Storm Peaks",
["zmLoc"] = {
["y"] = "84.52",
["x"] = "40.73",
},
["timers"] = {
["Windrunner's Overlook, Crystalsong Forest"] = 54,
["Dun Niffelem, The Storm Peaks"] = 102,
["Ebon Watch, Zul'Drak"] = 44,
["Dalaran"] = 71,
["Frosthold, The Storm Peaks"] = 44,
["Zim'Torga, Zul'Drak"] = 151,
["Light's Breach, Zul'Drak"] = 89,
["Westfall Brigade, Grizzly Hills"] = 182,
["The Argent Stand, Zul'Drak"] = 109,
},
["routes"] = {
"Dalaran", -- [1]
"Dun Niffelem, The Storm Peaks", -- [2]
"Ebon Watch, Zul'Drak", -- [3]
"Frosthold, The Storm Peaks", -- [4]
"Windrunner's Overlook, Crystalsong Forest", -- [5]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Dun Niffelem, The Storm Peaks"] = {
["fmLoc"] = {
["y"] = "0.71",
["x"] = "0.72",
},
["wmLoc"] = {
["y"] = "0.27",
["x"] = "0.66",
},
["name"] = "Dun Niffelem, The Storm Peaks",
["zmLoc"] = {
["y"] = "60.93",
["x"] = "62.65",
},
["routes"] = {
"K3, The Storm Peaks", -- [1]
"Ulduar, The Storm Peaks", -- [2]
"Zim'Torga, Zul'Drak", -- [3]
},
["timers"] = {
["Kamagua, Howling Fjord"] = 362,
["River's Heart, Sholazar Basin"] = 390,
["Moa'ki, Dragonblight"] = 260,
["Ebon Watch, Zul'Drak"] = 132,
["Fordragon Hold, Dragonblight"] = 244,
["Crusaders' Pinnacle, Icecrown"] = 195,
["Frosthold, The Storm Peaks"] = 133,
["Westguard Keep, Howling Fjord"] = 310,
["Death's Rise, Icecrown"] = 324,
["K3, The Storm Peaks"] = 88,
["Stars' Rest, Dragonblight"] = 269,
["Argent Tournament Grounds, Icecrown"] = 195,
["Bouldercrag's Refuge, The Storm Peaks"] = 134,
["Gundrak, Zul'Drak"] = 144,
["Ulduar, The Storm Peaks"] = 86,
["The Argent Stand, Zul'Drak"] = 144,
["Dalaran"] = 159,
["Valgarde Port, Howling Fjord"] = 307,
["Windrunner's Overlook, Crystalsong Forest"] = 142,
["The Shadow Vault, Icecrown"] = 245,
["Fizzcrank Airstrip, Borean Tundra"] = 398,
["Zim'Torga, Zul'Drak"] = 89,
["Nesingwary Base Camp, Sholazar Basin"] = 455,
["Amber Ledge, Borean Tundra"] = 465,
["Light's Breach, Zul'Drak"] = 177,
},
["factions"] = {
"Alliance", -- [1]
},
},
["Ulduar, The Storm Peaks"] = {
["fmLoc"] = {
["y"] = "0.81",
["x"] = "0.63",
},
["wmLoc"] = {
["y"] = "0.14",
["x"] = "0.59",
},
["name"] = "Ulduar, The Storm Peaks",
["zmLoc"] = {
["y"] = "28.15",
["x"] = "44.48",
},
["timers"] = {
["K3, The Storm Peaks"] = 152,
["Stars' Rest, Dragonblight"] = 329,
["Bouldercrag's Refuge, The Storm Peaks"] = 49,
["Fort Wildervar, Howling Fjord"] = 297,
["Dun Niffelem, The Storm Peaks"] = 104,
["Zim'Torga, Zul'Drak"] = 154,
["Amberpine Lodge, Grizzly Hills"] = 290,
["Frosthold, The Storm Peaks"] = 103,
["Wyrmrest Temple, Dragonblight"] = 288,
["Light's Breach, Zul'Drak"] = 232,
["Westfall Brigade, Grizzly Hills"] = 210,
["Gundrak, Zul'Drak"] = 208,
},
["routes"] = {
"Bouldercrag's Refuge, The Storm Peaks", -- [1]
"Dun Niffelem, The Storm Peaks", -- [2]
"Frosthold, The Storm Peaks", -- [3]
"Zim'Torga, Zul'Drak", -- [4]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Bouldercrag's Refuge, The Storm Peaks"] = {
["fmLoc"] = {
["y"] = "0.78",
["x"] = "0.57",
},
["wmLoc"] = {
["y"] = "0.17",
["x"] = "0.53",
},
["name"] = "Bouldercrag's Refuge, The Storm Peaks",
["zmLoc"] = {
["y"] = "36.4",
["x"] = "30.63",
},
["timers"] = {
["Argent Tournament Grounds, Icecrown"] = 61,
["Dun Niffelem, The Storm Peaks"] = 149,
["Ulduar, The Storm Peaks"] = 45,
["Fordragon Hold, Dragonblight"] = 247,
["The Shadow Vault, Icecrown"] = 112,
["Frosthold, The Storm Peaks"] = 79,
["Zim'Torga, Zul'Drak"] = 199,
["Dalaran"] = 146,
["Gundrak, Zul'Drak"] = 253,
},
["routes"] = {
"Argent Tournament Grounds, Icecrown", -- [1]
"Frosthold, The Storm Peaks", -- [2]
"The Shadow Vault, Icecrown", -- [3]
"Ulduar, The Storm Peaks", -- [4]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Frosthold, The Storm Peaks"] = {
["fmLoc"] = {
["y"] = "0.67",
["x"] = "0.56",
},
["wmLoc"] = {
["y"] = "0.33",
["x"] = "0.53",
},
["name"] = "Frosthold, The Storm Peaks",
["zmLoc"] = {
["y"] = "74.37",
["x"] = "29.51",
},
["timers"] = {
["K3, The Storm Peaks"] = 49,
["Windrunner's Overlook, Crystalsong Forest"] = 103,
["Wintergarde Keep, Dragonblight"] = 156,
["Bouldercrag's Refuge, The Storm Peaks"] = 65,
["The Argent Stand, Zul'Drak"] = 158,
["Fort Wildervar, Howling Fjord"] = 339,
["Ebon Watch, Zul'Drak"] = 93,
["Light's Breach, Zul'Drak"] = 138,
["Wyrmrest Temple, Dragonblight"] = 185,
["Westfall Brigade, Grizzly Hills"] = 231,
["Amberpine Lodge, Grizzly Hills"] = 222,
["The Argent Vanguard, Icecrown"] = 34,
["Zim'Torga, Zul'Drak"] = 200,
["Dalaran"] = 64,
["Ulduar, The Storm Peaks"] = 98,
["Moa'ki, Dragonblight"] = 208,
},
["routes"] = {
"Bouldercrag's Refuge, The Storm Peaks", -- [1]
"K3, The Storm Peaks", -- [2]
"The Argent Vanguard, Icecrown", -- [3]
"Ulduar, The Storm Peaks", -- [4]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Sholazar Basin"] = {
["Nesingwary Base Camp, Sholazar Basin"] = {
["fmLoc"] = {
["y"] = "0.6",
["x"] = "0.17",
},
["wmLoc"] = {
["y"] = "0.42",
["x"] = "0.19",
},
["name"] = "Nesingwary Base Camp, Sholazar Basin",
["zmLoc"] = {
["y"] = "58.35",
["x"] = "25.3",
},
["timers"] = {
["Transitus Shield, Coldarra"] = 210,
["River's Heart, Sholazar Basin"] = 77,
["Ebon Watch, Zul'Drak"] = 506,
["Fordragon Hold, Dragonblight"] = 398,
["Dalaran"] = 369,
["Death's Rise, Icecrown"] = 137,
["Unu'pe, Borean Tundra"] = 198,
["K3, The Storm Peaks"] = 519,
["Windrunner's Overlook, Crystalsong Forest"] = 513,
["Argent Tournament Grounds, Icecrown"] = 514,
["Fort Wildervar, Howling Fjord"] = 636,
["The Argent Stand, Zul'Drak"] = 571,
["Valiance Keep, Borean Tundra"] = 223,
["Valiance Landing Camp, Wintergrasp"] = 302,
["Light's Breach, Zul'Drak"] = 531,
["Amberpine Lodge, Grizzly Hills"] = 519,
["Fizzcrank Airstrip, Borean Tundra"] = 117,
["Wyrmrest Temple, Dragonblight"] = 407,
["Wintergarde Keep, Dragonblight"] = 441,
["Amber Ledge, Borean Tundra"] = 184,
["Stars' Rest, Dragonblight"] = 317,
},
["routes"] = {
"Death's Rise, Icecrown", -- [1]
"Fizzcrank Airstrip, Borean Tundra", -- [2]
"River's Heart, Sholazar Basin", -- [3]
},
["factions"] = {
"Alliance", -- [1]
},
},
["River's Heart, Sholazar Basin"] = {
["fmLoc"] = {
["y"] = "0.59",
["x"] = "0.24",
},
["wmLoc"] = {
["y"] = "0.43",
["x"] = "0.25",
},
["name"] = "River's Heart, Sholazar Basin",
["zmLoc"] = {
["y"] = "61.48",
["x"] = "50.11",
},
["timers"] = {
["Transitus Shield, Coldarra"] = 174,
["Kamagua, Howling Fjord"] = 506,
["Moa'ki, Dragonblight"] = 362,
["Ebon Watch, Zul'Drak"] = 494,
["Fordragon Hold, Dragonblight"] = 386,
["Westfall Brigade, Grizzly Hills"] = 592,
["Dalaran"] = 308,
["Death's Rise, Icecrown"] = 141,
["Unu'pe, Borean Tundra"] = 200,
["Windrunner's Overlook, Crystalsong Forest"] = 501,
["Wintergarde Keep, Dragonblight"] = 363,
["Nesingwary Base Camp, Sholazar Basin"] = 65,
["Valiance Keep, Borean Tundra"] = 211,
["Stars' Rest, Dragonblight"] = 305,
["Valiance Landing Camp, Wintergrasp"] = 225,
["Amberpine Lodge, Grizzly Hills"] = 441,
["Wyrmrest Temple, Dragonblight"] = 368,
["Fizzcrank Airstrip, Borean Tundra"] = 105,
["Westguard Keep, Howling Fjord"] = 491,
["Amber Ledge, Borean Tundra"] = 172,
["Light's Breach, Zul'Drak"] = 519,
},
["routes"] = {
"Dalaran", -- [1]
"Death's Rise, Icecrown", -- [2]
"Fizzcrank Airstrip, Borean Tundra", -- [3]
"Nesingwary Base Camp, Sholazar Basin", -- [4]
"Valiance Landing Camp, Wintergrasp", -- [5]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Dalaran"] = {
["Dalaran"] = {
["fmLoc"] = {
["y"] = "0.61",
["x"] = "0.52",
},
["wmLoc"] = {
["y"] = "0.4",
["x"] = "0.49",
},
["name"] = "Dalaran",
["zmLoc"] = {
["y"] = "45.62",
["x"] = "72.21",
},
["timers"] = {
["Transitus Shield, Coldarra"] = 354,
["Kamagua, Howling Fjord"] = 309,
["Dun Niffelem, The Storm Peaks"] = 155,
["Moa'ki, Dragonblight"] = 160,
["Wintergarde Keep, Dragonblight"] = 246,
["Valiance Landing Camp, Wintergrasp"] = 116,
["Westguard Keep, Howling Fjord"] = 248,
["Death's Rise, Icecrown"] = 208,
["Unu'pe, Borean Tundra"] = 274,
["K3, The Storm Peaks"] = 55,
["Stars' Rest, Dragonblight"] = 183,
["Argent Tournament Grounds, Icecrown"] = 123,
["Bouldercrag's Refuge, The Storm Peaks"] = 138,
["The Argent Stand, Zul'Drak"] = 147,
["Valgarde Port, Howling Fjord"] = 287,
["The Shadow Vault, Icecrown"] = 170,
["Wyrmrest Temple, Dragonblight"] = 121,
["Amber Ledge, Borean Tundra"] = 402,
["River's Heart, Sholazar Basin"] = 211,
["Ebon Watch, Zul'Drak"] = 82,
["Fordragon Hold, Dragonblight"] = 101,
["Crusaders' Pinnacle, Icecrown"] = 40,
["Frosthold, The Storm Peaks"] = 72,
["Westfall Brigade, Grizzly Hills"] = 220,
["Light's Breach, Zul'Drak"] = 127,
["Windrunner's Overlook, Crystalsong Forest"] = 54,
["Gundrak, Zul'Drak"] = 239,
["Fort Wildervar, Howling Fjord"] = 306,
["Valiance Keep, Borean Tundra"] = 272,
["Amberpine Lodge, Grizzly Hills"] = 201,
["The Argent Vanguard, Icecrown"] = 33,
["Fizzcrank Airstrip, Borean Tundra"] = 277,
["Nesingwary Base Camp, Sholazar Basin"] = 397,
["Ulduar, The Storm Peaks"] = 168,
["Zim'Torga, Zul'Drak"] = 187,
},
["routes"] = {
"Argent Tournament Grounds, Icecrown", -- [1]
"Crusaders' Pinnacle, Icecrown", -- [2]
"Ebon Watch, Zul'Drak", -- [3]
"Fordragon Hold, Dragonblight", -- [4]
"K3, The Storm Peaks", -- [5]
"Moa'ki, Dragonblight", -- [6]
"River's Heart, Sholazar Basin", -- [7]
"The Argent Vanguard, Icecrown", -- [8]
"Valgarde Port, Howling Fjord", -- [9]
"Valiance Keep, Borean Tundra", -- [10]
"Valiance Landing Camp, Wintergrasp", -- [11]
"Windrunner's Overlook, Crystalsong Forest", -- [12]
"Wyrmrest Temple, Dragonblight", -- [13]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Grizzly Hills"] = {
["Amberpine Lodge, Grizzly Hills"] = {
["fmLoc"] = {
["y"] = "0.46",
["x"] = "0.72",
},
["wmLoc"] = {
["y"] = "0.6",
["x"] = "0.67",
},
["name"] = "Amberpine Lodge, Grizzly Hills",
["zmLoc"] = {
["y"] = "59.19",
["x"] = "31.33",
},
["timers"] = {
["Transitus Shield, Coldarra"] = 407,
["Kamagua, Howling Fjord"] = 136,
["Moa'ki, Dragonblight"] = 182,
["Wintergarde Keep, Dragonblight"] = 82,
["Westfall Brigade, Grizzly Hills"] = 84,
["Light's Breach, Zul'Drak"] = 67,
["Unu'pe, Borean Tundra"] = 290,
["Stars' Rest, Dragonblight"] = 197,
["Fort Wildervar, Howling Fjord"] = 117,
["The Argent Stand, Zul'Drak"] = 112,
["Valiance Keep, Borean Tundra"] = 323,
["Valgarde Port, Howling Fjord"] = 153,
["Westguard Keep, Howling Fjord"] = 84,
["Windrunner's Overlook, Crystalsong Forest"] = 154,
["Wyrmrest Temple, Dragonblight"] = 138,
["Ebon Watch, Zul'Drak"] = 148,
["Amber Ledge, Borean Tundra"] = 393,
["Dalaran"] = 216,
},
["routes"] = {
"Fort Wildervar, Howling Fjord", -- [1]
"Light's Breach, Zul'Drak", -- [2]
"Westfall Brigade, Grizzly Hills", -- [3]
"Westguard Keep, Howling Fjord", -- [4]
"Wintergarde Keep, Dragonblight", -- [5]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Westfall Brigade, Grizzly Hills"] = {
["fmLoc"] = {
["y"] = "0.53",
["x"] = "0.82",
},
["wmLoc"] = {
["y"] = "0.5",
["x"] = "0.75",
},
["name"] = "Westfall Brigade, Grizzly Hills",
["zmLoc"] = {
["y"] = "26.66",
["x"] = "59.85",
},
["routes"] = {
"Amberpine Lodge, Grizzly Hills", -- [1]
"Fort Wildervar, Howling Fjord", -- [2]
"The Argent Stand, Zul'Drak", -- [3]
"Zim'Torga, Zul'Drak", -- [4]
},
["timers"] = {
["Transitus Shield, Coldarra"] = 485,
["Windrunner's Overlook, Crystalsong Forest"] = 171,
["Fort Wildervar, Howling Fjord"] = 86,
["Ebon Watch, Zul'Drak"] = 136,
["The Argent Stand, Zul'Drak"] = 83,
["Stars' Rest, Dragonblight"] = 276,
["Light's Breach, Zul'Drak"] = 108,
["Amberpine Lodge, Grizzly Hills"] = 79,
["Wyrmrest Temple, Dragonblight"] = 216,
["Zim'Torga, Zul'Drak"] = 74,
["Dalaran"] = 202,
["Wintergarde Keep, Dragonblight"] = 161,
["Unu'pe, Borean Tundra"] = 377,
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Dragonblight"] = {
["Stars' Rest, Dragonblight"] = {
["fmLoc"] = {
["y"] = "0.46",
["x"] = "0.42",
},
["wmLoc"] = {
["y"] = "0.59",
["x"] = "0.4",
},
["name"] = "Stars' Rest, Dragonblight",
["zmLoc"] = {
["y"] = "55.31",
["x"] = "29.14",
},
["timers"] = {
["Transitus Shield, Coldarra"] = 210,
["Moa'ki, Dragonblight"] = 72,
["Ebon Watch, Zul'Drak"] = 189,
["Fordragon Hold, Dragonblight"] = 81,
["Light's Breach, Zul'Drak"] = 214,
["Unu'pe, Borean Tundra"] = 101,
["K3, The Storm Peaks"] = 195,
["Windrunner's Overlook, Crystalsong Forest"] = 196,
["Fort Wildervar, Howling Fjord"] = 319,
["Valiance Keep, Borean Tundra"] = 131,
["Dalaran"] = 147,
["Amberpine Lodge, Grizzly Hills"] = 202,
["Wyrmrest Temple, Dragonblight"] = 90,
["Fizzcrank Airstrip, Borean Tundra"] = 129,
["Wintergarde Keep, Dragonblight"] = 124,
["Amber Ledge, Borean Tundra"] = 184,
["Valiance Landing Camp, Wintergrasp"] = 67,
},
["routes"] = {
"Fizzcrank Airstrip, Borean Tundra", -- [1]
"Fordragon Hold, Dragonblight", -- [2]
"Moa'ki, Dragonblight", -- [3]
"Unu'pe, Borean Tundra", -- [4]
"Valiance Keep, Borean Tundra", -- [5]
"Valiance Landing Camp, Wintergrasp", -- [6]
"Wintergarde Keep, Dragonblight", -- [7]
"Wyrmrest Temple, Dragonblight", -- [8]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Wyrmrest Temple, Dragonblight"] = {
["fmLoc"] = {
["y"] = "0.47",
["x"] = "0.53",
},
["wmLoc"] = {
["y"] = "0.58",
["x"] = "0.5",
},
["name"] = "Wyrmrest Temple, Dragonblight",
["zmLoc"] = {
["y"] = "51.5",
["x"] = "60.36",
},
["routes"] = {
"Dalaran", -- [1]
"Ebon Watch, Zul'Drak", -- [2]
"Fordragon Hold, Dragonblight", -- [3]
"Moa'ki, Dragonblight", -- [4]
"Stars' Rest, Dragonblight", -- [5]
"Wintergarde Keep, Dragonblight", -- [6]
},
["timers"] = {
["Transitus Shield, Coldarra"] = 225,
["Kamagua, Howling Fjord"] = 215,
["River's Heart, Sholazar Basin"] = 203,
["Moa'ki, Dragonblight"] = 36,
["Wintergarde Keep, Dragonblight"] = 35,
["Valiance Landing Camp, Wintergrasp"] = 112,
["Dalaran"] = 65,
["Unu'pe, Borean Tundra"] = 146,
["Stars' Rest, Dragonblight"] = 45,
["Argent Tournament Grounds, Icecrown"] = 188,
["Light's Breach, Zul'Drak"] = 125,
["Westguard Keep, Howling Fjord"] = 163,
["Windrunner's Overlook, Crystalsong Forest"] = 107,
["Nesingwary Base Camp, Sholazar Basin"] = 234,
["Valiance Keep, Borean Tundra"] = 153,
["Valgarde Port, Howling Fjord"] = 233,
["Zim'Torga, Zul'Drak"] = 178,
["Amberpine Lodge, Grizzly Hills"] = 97,
["The Argent Vanguard, Icecrown"] = 98,
["Fizzcrank Airstrip, Borean Tundra"] = 151,
["Ebon Watch, Zul'Drak"] = 71,
["Amber Ledge, Borean Tundra"] = 199,
["Fordragon Hold, Dragonblight"] = 39,
},
["factions"] = {
"Alliance", -- [1]
},
},
["Moa'ki, Dragonblight"] = {
["fmLoc"] = {
["y"] = "0.42",
["x"] = "0.49",
},
["wmLoc"] = {
["y"] = "0.65",
["x"] = "0.46",
},
["name"] = "Moa'ki, Dragonblight",
["zmLoc"] = {
["y"] = "74.4",
["x"] = "48.48",
},
["routes"] = {
"Dalaran", -- [1]
"Kamagua, Howling Fjord", -- [2]
"Stars' Rest, Dragonblight", -- [3]
"Unu'pe, Borean Tundra", -- [4]
"Wintergarde Keep, Dragonblight", -- [5]
"Wyrmrest Temple, Dragonblight", -- [6]
},
["timers"] = {
["Transitus Shield, Coldarra"] = 277,
["Kamagua, Howling Fjord"] = 185,
["River's Heart, Sholazar Basin"] = 261,
["Wintergarde Keep, Dragonblight"] = 86,
["Fordragon Hold, Dragonblight"] = 88,
["Frosthold, The Storm Peaks"] = 197,
["Westfall Brigade, Grizzly Hills"] = 249,
["Dalaran"] = 123,
["Stars' Rest, Dragonblight"] = 55,
["Unu'pe, Borean Tundra"] = 132,
["K3, The Storm Peaks"] = 172,
["Windrunner's Overlook, Crystalsong Forest"] = 158,
["Argent Tournament Grounds, Icecrown"] = 246,
["Bouldercrag's Refuge, The Storm Peaks"] = 263,
["Ebon Watch, Zul'Drak"] = 151,
["Fort Wildervar, Howling Fjord"] = 281,
["Westguard Keep, Howling Fjord"] = 214,
["Valiance Keep, Borean Tundra"] = 186,
["Valgarde Port, Howling Fjord"] = 265,
["Fizzcrank Airstrip, Borean Tundra"] = 184,
["Amberpine Lodge, Grizzly Hills"] = 164,
["The Argent Vanguard, Icecrown"] = 156,
["Wyrmrest Temple, Dragonblight"] = 49,
["Light's Breach, Zul'Drak"] = 176,
["Amber Ledge, Borean Tundra"] = 251,
["Valiance Landing Camp, Wintergrasp"] = 122,
},
["factions"] = {
"Alliance", -- [1]
},
},
["Wintergarde Keep, Dragonblight"] = {
["fmLoc"] = {
["y"] = "0.48",
["x"] = "0.59",
},
["wmLoc"] = {
["y"] = "0.58",
["x"] = "0.55",
},
["name"] = "Wintergarde Keep, Dragonblight",
["zmLoc"] = {
["y"] = "49.83",
["x"] = "77.01",
},
["timers"] = {
["Kamagua, Howling Fjord"] = 180,
["Moa'ki, Dragonblight"] = 100,
["Ebon Watch, Zul'Drak"] = 65,
["Fordragon Hold, Dragonblight"] = 97,
["Westfall Brigade, Grizzly Hills"] = 163,
["Dalaran"] = 122,
["Unu'pe, Borean Tundra"] = 216,
["Windrunner's Overlook, Crystalsong Forest"] = 72,
["Fort Wildervar, Howling Fjord"] = 195,
["Valiance Keep, Borean Tundra"] = 246,
["Valgarde Port, Howling Fjord"] = 196,
["Amberpine Lodge, Grizzly Hills"] = 77,
["Light's Breach, Zul'Drak"] = 90,
["Wyrmrest Temple, Dragonblight"] = 55,
["Westguard Keep, Howling Fjord"] = 128,
["Stars' Rest, Dragonblight"] = 115,
["Valiance Landing Camp, Wintergrasp"] = 157,
},
["routes"] = {
"Amberpine Lodge, Grizzly Hills", -- [1]
"Ebon Watch, Zul'Drak", -- [2]
"Fordragon Hold, Dragonblight", -- [3]
"Light's Breach, Zul'Drak", -- [4]
"Moa'ki, Dragonblight", -- [5]
"Stars' Rest, Dragonblight", -- [6]
"Westguard Keep, Howling Fjord", -- [7]
"Windrunner's Overlook, Crystalsong Forest", -- [8]
"Wyrmrest Temple, Dragonblight", -- [9]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Fordragon Hold, Dragonblight"] = {
["fmLoc"] = {
["y"] = "0.53",
["x"] = "0.46",
},
["wmLoc"] = {
["y"] = "0.5",
["x"] = "0.43",
},
["name"] = "Fordragon Hold, Dragonblight",
["zmLoc"] = {
["y"] = "25.8",
["x"] = "39.52",
},
["routes"] = {
"Dalaran", -- [1]
"Ebon Watch, Zul'Drak", -- [2]
"Stars' Rest, Dragonblight", -- [3]
"Valiance Landing Camp, Wintergrasp", -- [4]
"Wintergarde Keep, Dragonblight", -- [5]
"Wyrmrest Temple, Dragonblight", -- [6]
},
["timers"] = {
["Windrunner's Overlook, Crystalsong Forest"] = 120,
["Fort Wildervar, Howling Fjord"] = 283,
["Wintergarde Keep, Dragonblight"] = 88,
["Valiance Landing Camp, Wintergrasp"] = 61,
["Moa'ki, Dragonblight"] = 102,
["Stars' Rest, Dragonblight"] = 74,
["Amberpine Lodge, Grizzly Hills"] = 166,
["Light's Breach, Zul'Drak"] = 164,
["Wyrmrest Temple, Dragonblight"] = 66,
["Dalaran"] = 66,
["Westfall Brigade, Grizzly Hills"] = 251,
["Ebon Watch, Zul'Drak"] = 119,
},
["factions"] = {
"Alliance", -- [1]
},
},
},
},
["Eastern Kingdoms"] = {
["The Hinterlands"] = {
["Stormfeather Outpost, The Hinterlands"] = {
["fmLoc"] = {
["y"] = "0.58",
["x"] = "0.56",
},
["wmLoc"] = {
["y"] = "0.4",
["x"] = "0.54",
},
["name"] = "Stormfeather Outpost, The Hinterlands",
["zmLoc"] = {
["y"] = "44.91",
["x"] = "65.8",
},
["timers"] = {
["Crown Guard Tower, Eastern Plaguelands"] = 152,
["Slabchisel's Survey, Wetlands"] = 229,
["Thorium Point, Searing Gorge"] = 349,
["Dragon's Mouth, Badlands"] = 354,
["Thelsamar, Loch Modan"] = 271,
["Dustwind Dig, Badlands"] = 315,
["Thondroril River, Eastern Plaguelands"] = 120,
["Greenwarden's Grove, Wetlands"] = 196,
["Light's Hope Chapel, Eastern Plaguelands"] = 88,
["Aerie Peak, The Hinterlands"] = 84,
["Dun Modr, Wetlands"] = 159,
["Refuge Pointe, Arathi"] = 100,
},
["routes"] = {
"Aerie Peak, The Hinterlands", -- [1]
"Light's Hope Chapel, Eastern Plaguelands", -- [2]
"Refuge Pointe, Arathi", -- [3]
"Thondroril River, Eastern Plaguelands", -- [4]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Aerie Peak, The Hinterlands"] = {
["fmLoc"] = {
["y"] = "0.58",
["x"] = "0.49",
},
["wmLoc"] = {
["y"] = "0.4",
["x"] = "0.49",
},
["name"] = "Aerie Peak, The Hinterlands",
["zmLoc"] = {
["y"] = "46.08",
["x"] = "11.11",
},
["timers"] = {
["Chillwind Camp, Western Plaguelands"] = 57,
["Andorhal, Western Plaguelands"] = 71,
["Thorium Point, Searing Gorge"] = 336,
["Darkshire, Duskwood"] = 516,
["Ironforge, Dun Morogh"] = 259,
["Rebel Camp, Stranglethorn Vale"] = 557,
["Light's Hope Chapel, Eastern Plaguelands"] = 168,
["Refuge Pointe, Arathi"] = 82,
["Stormfeather Outpost, The Hinterlands"] = 80,
["Stormwind, Elwynn"] = 459,
},
["routes"] = {
"Andorhal, Western Plaguelands", -- [1]
"Chillwind Camp, Western Plaguelands", -- [2]
"Ironforge, Dun Morogh", -- [3]
"Light's Hope Chapel, Eastern Plaguelands", -- [4]
"Refuge Pointe, Arathi", -- [5]
"Stormfeather Outpost, The Hinterlands", -- [6]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Eastern Plaguelands"] = {
["Northpass Tower, Eastern Plaguelands"] = {
["fmLoc"] = {
["y"] = "0.68",
["x"] = "0.57",
},
["wmLoc"] = {
["y"] = "0.29",
["x"] = "0.55",
},
["name"] = "Northpass Tower, Eastern Plaguelands",
["zmLoc"] = {
["y"] = "21.35",
["x"] = "51.3",
},
["timers"] = {
["Stormfeather Outpost, The Hinterlands"] = 147,
["Crown Guard Tower, Eastern Plaguelands"] = 52,
["Plaguewood Tower, Eastern Plaguelands"] = 51,
["Light's Shield Tower, Eastern Plaguelands"] = 48,
["The Menders' Stead, Western Plaguelands"] = 129,
["Thundermar, Twilight Highlands"] = 430,
["Eastwall Tower, Eastern Plaguelands"] = 30,
},
["routes"] = {
"Crown Guard Tower, Eastern Plaguelands", -- [1]
"Eastwall Tower, Eastern Plaguelands", -- [2]
"Plaguewood Tower, Eastern Plaguelands", -- [3]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Acherus: The Ebon Hold"] = {
["fmLoc"] = {
["y"] = "0.65",
["x"] = "0.62",
},
["wmLoc"] = {
["y"] = "0.32",
["x"] = "0.58",
},
["name"] = "Acherus: The Ebon Hold",
["zmLoc"] = {
["y"] = "50.37",
["x"] = "83.84",
},
["timers"] = {
["Light's Hope Chapel, Eastern Plaguelands"] = 53,
},
["routes"] = {
"Light's Hope Chapel, Eastern Plaguelands", -- [1]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Crown Guard Tower, Eastern Plaguelands"] = {
["fmLoc"] = {
["y"] = "0.63",
["x"] = "0.55",
},
["wmLoc"] = {
["y"] = "0.34",
["x"] = "0.53",
},
["name"] = "Crown Guard Tower, Eastern Plaguelands",
["zmLoc"] = {
["y"] = "67.78",
["x"] = "34.85",
},
["timers"] = {
["Northpass Tower, Eastern Plaguelands"] = 62,
["Light's Hope Chapel, Eastern Plaguelands"] = 76,
["Thondroril River, Eastern Plaguelands"] = 39,
["Plaguewood Tower, Eastern Plaguelands"] = 52,
["Light's Shield Tower, Eastern Plaguelands"] = 36,
["Aerie Peak, The Hinterlands"] = 164,
["Thundermar, Twilight Highlands"] = 420,
["Eastwall Tower, Eastern Plaguelands"] = 56,
},
["routes"] = {
"Light's Shield Tower, Eastern Plaguelands", -- [1]
"Northpass Tower, Eastern Plaguelands", -- [2]
"Plaguewood Tower, Eastern Plaguelands", -- [3]
"Thondroril River, Eastern Plaguelands", -- [4]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Plaguewood Tower, Eastern Plaguelands"] = {
["fmLoc"] = {
["y"] = "0.67",
["x"] = "0.53",
},
["wmLoc"] = {
["y"] = "0.3",
["x"] = "0.52",
},
["name"] = "Plaguewood Tower, Eastern Plaguelands",
["zmLoc"] = {
["y"] = "27.35",
["x"] = "18.54",
},
["timers"] = {
["Vermillion Redoubt, Twilight Highlands"] = 439,
["Crown Guard Tower, Eastern Plaguelands"] = 53,
["Thundermar, Twilight Highlands"] = 467,
["Light's Shield Tower, Eastern Plaguelands"] = 60,
["High Bank, Twilight Highlands"] = 579,
["Eastwall Tower, Eastern Plaguelands"] = 67,
["Hearthglen, Western Plaguelands"] = 62,
["Northpass Tower, Eastern Plaguelands"] = 56,
["Fuselight, Badlands"] = 422,
["Farstrider Lodge, Loch Modan"] = 465,
["Dustwind Dig, Badlands"] = 441,
["Dun Modr, Wetlands"] = 352,
["Refuge Pointe, Arathi"] = 293,
},
["routes"] = {
"Crown Guard Tower, Eastern Plaguelands", -- [1]
"Eastwall Tower, Eastern Plaguelands", -- [2]
"Hearthglen, Western Plaguelands", -- [3]
"Light's Shield Tower, Eastern Plaguelands", -- [4]
"Northpass Tower, Eastern Plaguelands", -- [5]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Light's Shield Tower, Eastern Plaguelands"] = {
["fmLoc"] = {
["y"] = "0.65",
["x"] = "0.57",
},
["wmLoc"] = {
["y"] = "0.32",
["x"] = "0.55",
},
["name"] = "Light's Shield Tower, Eastern Plaguelands",
["zmLoc"] = {
["y"] = "53.58",
["x"] = "52.67",
},
["timers"] = {
["Crown Guard Tower, Eastern Plaguelands"] = 29,
["Plaguewood Tower, Eastern Plaguelands"] = 61,
["Light's Hope Chapel, Eastern Plaguelands"] = 40,
["Thondroril River, Eastern Plaguelands"] = 68,
["Dun Modr, Wetlands"] = 282,
["Eastwall Tower, Eastern Plaguelands"] = 20,
},
["routes"] = {
"Crown Guard Tower, Eastern Plaguelands", -- [1]
"Eastwall Tower, Eastern Plaguelands", -- [2]
"Light's Hope Chapel, Eastern Plaguelands", -- [3]
"Plaguewood Tower, Eastern Plaguelands", -- [4]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Thondroril River, Eastern Plaguelands"] = {
["fmLoc"] = {
["y"] = "0.64",
["x"] = "0.51",
},
["wmLoc"] = {
["y"] = "0.34",
["x"] = "0.51",
},
["name"] = "Thondroril River, Eastern Plaguelands",
["zmLoc"] = {
["y"] = "65.79",
["x"] = "10.09",
},
["timers"] = {
["Farstrider Lodge, Loch Modan"] = 425,
["Crown Guard Tower, Eastern Plaguelands"] = 46,
["Bogpaddle, Swamp of Sorrows"] = 561,
["Chillwind Camp, Western Plaguelands"] = 58,
["Fuselight, Badlands"] = 425,
["High Bank, Twilight Highlands"] = 492,
["Victor's Point, Twilight Highlands"] = 433,
["Aerie Peak, The Hinterlands"] = 124,
["Firebeard's Patrol, Twilight Highlands"] = 438,
["Vermillion Redoubt, Twilight Highlands"] = 352,
["Light's Hope Chapel, Eastern Plaguelands"] = 101,
["The Menders' Stead, Western Plaguelands"] = 40,
["Dun Modr, Wetlands"] = 265,
["Stormfeather Outpost, The Hinterlands"] = 109,
},
["routes"] = {
"Chillwind Camp, Western Plaguelands", -- [1]
"Crown Guard Tower, Eastern Plaguelands", -- [2]
"Light's Hope Chapel, Eastern Plaguelands", -- [3]
"Stormfeather Outpost, The Hinterlands", -- [4]
"The Menders' Stead, Western Plaguelands", -- [5]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Light's Hope Chapel, Eastern Plaguelands"] = {
["fmLoc"] = {
["y"] = "0.65",
["x"] = "0.61",
},
["wmLoc"] = {
["y"] = "0.32",
["x"] = "0.57",
},
["name"] = "Light's Hope Chapel, Eastern Plaguelands",
["zmLoc"] = {
["y"] = "53.32",
["x"] = "75.74",
},
["timers"] = {
["Chillwind Camp, Western Plaguelands"] = 149,
["Shattered Sun Staging Area"] = 343,
["Crown Guard Tower, Eastern Plaguelands"] = 64,
["Acherus: The Ebon Hold"] = 70,
["Light's Shield Tower, Eastern Plaguelands"] = 35,
["High Bank, Twilight Highlands"] = 481,
["Stormfeather Outpost, The Hinterlands"] = 95,
["Fuselight, Badlands"] = 324,
["Thondroril River, Eastern Plaguelands"] = 97,
["Zul'Aman, Ghostlands"] = 115,
["Northpass Tower, Eastern Plaguelands"] = 54,
["Aerie Peak, The Hinterlands"] = 168,
["Ironforge, Dun Morogh"] = 370,
["Eastwall Tower, Eastern Plaguelands"] = 24,
},
["routes"] = {
"Acherus: The Ebon Hold", -- [1]
"Aerie Peak, The Hinterlands", -- [2]
"Chillwind Camp, Western Plaguelands", -- [3]
"Eastwall Tower, Eastern Plaguelands", -- [4]
"Fuselight, Badlands", -- [5]
"Ironforge, Dun Morogh", -- [6]
"Light's Shield Tower, Eastern Plaguelands", -- [7]
"Shattered Sun Staging Area", -- [8]
"Stormfeather Outpost, The Hinterlands", -- [9]
"Thondroril River, Eastern Plaguelands", -- [10]
"Zul'Aman, Ghostlands", -- [11]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Eastwall Tower, Eastern Plaguelands"] = {
["fmLoc"] = {
["y"] = "0.66",
["x"] = "0.59",
},
["wmLoc"] = {
["y"] = "0.31",
["x"] = "0.56",
},
["name"] = "Eastwall Tower, Eastern Plaguelands",
["zmLoc"] = {
["y"] = "43.8",
["x"] = "61.62",
},
["timers"] = {
["Light's Hope Chapel, Eastern Plaguelands"] = 31,
["Light's Shield Tower, Eastern Plaguelands"] = 18,
["Northpass Tower, Eastern Plaguelands"] = 33,
["Plaguewood Tower, Eastern Plaguelands"] = 66,
},
["routes"] = {
"Light's Hope Chapel, Eastern Plaguelands", -- [1]
"Light's Shield Tower, Eastern Plaguelands", -- [2]
"Northpass Tower, Eastern Plaguelands", -- [3]
"Plaguewood Tower, Eastern Plaguelands", -- [4]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Duskwood"] = {
["Darkshire, Duskwood"] = {
["fmLoc"] = {
["y"] = "0.2",
["x"] = "0.46",
},
["wmLoc"] = {
["y"] = "0.79",
["x"] = "0.47",
},
["name"] = "Darkshire, Duskwood",
["zmLoc"] = {
["y"] = "44.37",
["x"] = "77.59",
},
["timers"] = {
["Vermillion Redoubt, Twilight Highlands"] = 426,
["Sentinel Hill, Westfall"] = 88,
["Raven Hill, Duskwood"] = 64,
["Thelsamar, Loch Modan"] = 263,
["Dustwind Dig, Badlands"] = 209,
["Chiselgrip, Burning Steppes"] = 161,
["Booty Bay, Stranglethorn"] = 172,
["Slabchisel's Survey, Wetlands"] = 324,
["Stormwind, Elwynn"] = 89,
["Furlbrow's Pumpkin Farm, Westfall"] = 120,
["Morgan's Vigil, Burning Steppes"] = 117,
["Lakeshire, Redridge"] = 60,
["Aerie Peak, The Hinterlands"] = 492,
["Nethergarde Keep, Blasted Lands"] = 98,
["Rebel Camp, Stranglethorn Vale"] = 49,
["Whelgar's Retreat, Wetlands"] = 384,
["Greenwarden's Grove, Wetlands"] = 357,
["Goldshire, Elwynn"] = 69,
["The Harborage, Swamp of Sorrows"] = 107,
["Dun Modr, Wetlands"] = 386,
["Refuge Pointe, Arathi"] = 428,
},
["routes"] = {
"Booty Bay, Stranglethorn", -- [1]
"Goldshire, Elwynn", -- [2]
"Lakeshire, Redridge", -- [3]
"Nethergarde Keep, Blasted Lands", -- [4]
"Raven Hill, Duskwood", -- [5]
"Rebel Camp, Stranglethorn Vale", -- [6]
"Sentinel Hill, Westfall", -- [7]
"Stormwind, Elwynn", -- [8]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Raven Hill, Duskwood"] = {
["fmLoc"] = {
["y"] = "0.2",
["x"] = "0.41",
},
["wmLoc"] = {
["y"] = "0.8",
["x"] = "0.43",
},
["name"] = "Raven Hill, Duskwood",
["zmLoc"] = {
["y"] = "56.63",
["x"] = "21",
},
["timers"] = {
["Darkshire, Duskwood"] = 63,
["Sentinel Hill, Westfall"] = 43,
["Rebel Camp, Stranglethorn Vale"] = 41,
["Morgan's Vigil, Burning Steppes"] = 180,
["The Harborage, Swamp of Sorrows"] = 170,
["Fort Livingston, Stranglethorn"] = 96,
},
["routes"] = {
"Darkshire, Duskwood", -- [1]
"Rebel Camp, Stranglethorn Vale", -- [2]
"Sentinel Hill, Westfall", -- [3]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["The Cape of Stranglethorn"] = {
["Booty Bay, Stranglethorn"] = {
["fmLoc"] = {
["y"] = "0.07",
["x"] = "0.4",
},
["wmLoc"] = {
["y"] = "0.94",
["x"] = "0.43",
},
["name"] = "Booty Bay, Stranglethorn",
["zmLoc"] = {
["y"] = "74.34",
["x"] = "41.66",
},
["timers"] = {
["Eastvale Logging Camp, Elwynn"] = 268,
["Sentinel Hill, Westfall"] = 152,
["Surwich, Blasted Lands"] = 145,
["Morgan's Vigil, Burning Steppes"] = 285,
["Fuselight, Badlands"] = 396,
["Fort Livingston, Stranglethorn"] = 96,
["Darkshire, Duskwood"] = 168,
["Explorers' League Digsite, Stranglethorn"] = 50,
["Rebel Camp, Stranglethorn Vale"] = 119,
["Dustwind Dig, Badlands"] = 377,
["The Harborage, Swamp of Sorrows"] = 275,
["Nethergarde Keep, Blasted Lands"] = 218,
["Stormwind, Elwynn"] = 200,
},
["routes"] = {
"Darkshire, Duskwood", -- [1]
"Explorers' League Digsite, Stranglethorn", -- [2]
"Rebel Camp, Stranglethorn Vale", -- [3]
"Sentinel Hill, Westfall", -- [4]
"Stormwind, Elwynn", -- [5]
"Surwich, Blasted Lands", -- [6]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Explorers' League Digsite, Stranglethorn"] = {
["fmLoc"] = {
["y"] = "0.1",
["x"] = "0.42",
},
["wmLoc"] = {
["y"] = "0.91",
["x"] = "0.44",
},
["name"] = "Explorers' League Digsite, Stranglethorn",
["zmLoc"] = {
["y"] = "41.19",
["x"] = "55.64",
},
["timers"] = {
["Booty Bay, Stranglethorn"] = 54,
["Morgan's Vigil, Burning Steppes"] = 266,
["Lakeshire, Redridge"] = 209,
["Dragon's Mouth, Badlands"] = 322,
["Nethergarde Keep, Blasted Lands"] = 238,
["Thelsamar, Loch Modan"] = 412,
["Rebel Camp, Stranglethorn Vale"] = 100,
["Fort Livingston, Stranglethorn"] = 45,
["Dustwind Dig, Badlands"] = 345,
["Darkshire, Duskwood"] = 148,
["Chiselgrip, Burning Steppes"] = 297,
},
["routes"] = {
"Booty Bay, Stranglethorn", -- [1]
"Fort Livingston, Stranglethorn", -- [2]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Blasted Lands"] = {
["Nethergarde Keep, Blasted Lands"] = {
["fmLoc"] = {
["y"] = "0.18",
["x"] = "0.54",
},
["wmLoc"] = {
["y"] = "0.82",
["x"] = "0.53",
},
["name"] = "Nethergarde Keep, Blasted Lands",
["zmLoc"] = {
["y"] = "21.68",
["x"] = "61.19",
},
["timers"] = {
["Flamestar Post, Burning Steppes"] = 231,
["Sentinel Hill, Westfall"] = 180,
["Kharanos, Dun Morogh"] = 386,
["Bogpaddle, Swamp of Sorrows"] = 71,
["Thelsamar, Loch Modan"] = 299,
["Dustwind Dig, Badlands"] = 245,
["Chiselgrip, Burning Steppes"] = 188,
["Farstrider Lodge, Loch Modan"] = 313,
["Marshtide Watch, Swamp of Sorrows"] = 40,
["Surwich, Blasted Lands"] = 92,
["Morgan's Vigil, Burning Steppes"] = 202,
["Thorium Point, Searing Gorge"] = 265,
["Dragon's Mouth, Badlands"] = 209,
["Explorers' League Digsite, Stranglethorn"] = 241,
["Ironforge, Dun Morogh"] = 331,
["Iron Summit, Searing Gorge"] = 275,
["Stormwind, Elwynn"] = 190,
["Darkshire, Duskwood"] = 92,
["Goldshire, Elwynn"] = 161,
},
["routes"] = {
"Darkshire, Duskwood", -- [1]
"Marshtide Watch, Swamp of Sorrows", -- [2]
"Morgan's Vigil, Burning Steppes", -- [3]
"Stormwind, Elwynn", -- [4]
"Surwich, Blasted Lands", -- [5]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Surwich, Blasted Lands"] = {
["fmLoc"] = {
["y"] = "0.13",
["x"] = "0.52",
},
["wmLoc"] = {
["y"] = "0.88",
["x"] = "0.51",
},
["name"] = "Surwich, Blasted Lands",
["zmLoc"] = {
["y"] = "89.27",
["x"] = "47.12",
},
["timers"] = {
["Nethergarde Keep, Blasted Lands"] = 73,
["Whelgar's Retreat, Wetlands"] = 493,
["Thundermar, Twilight Highlands"] = 563,
["Booty Bay, Stranglethorn"] = 153,
["Victor's Point, Twilight Highlands"] = 616,
["Dun Modr, Wetlands"] = 481,
["Greenwarden's Grove, Wetlands"] = 466,
},
["routes"] = {
"Booty Bay, Stranglethorn", -- [1]
"Nethergarde Keep, Blasted Lands", -- [2]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Redridge Mountains"] = {
["Camp Everstill, Redridge"] = {
["fmLoc"] = {
["y"] = "0.24",
["x"] = "0.52",
},
["wmLoc"] = {
["y"] = "0.75",
["x"] = "0.51",
},
["name"] = "Camp Everstill, Redridge",
["zmLoc"] = {
["y"] = "54.42",
["x"] = "52.85",
},
["timers"] = {
["Darkshire, Duskwood"] = 86,
["Morgan's Vigil, Burning Steppes"] = 81,
["Dustwind Dig, Badlands"] = 162,
["Shalewind Canyon, Redridge"] = 34,
["Lakeshire, Redridge"] = 24,
["Booty Bay, Stranglethorn"] = 252,
},
["routes"] = {
"Lakeshire, Redridge", -- [1]
"Shalewind Canyon, Redridge", -- [2]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Shalewind Canyon, Redridge"] = {
["fmLoc"] = {
["y"] = "0.23",
["x"] = "0.54",
},
["wmLoc"] = {
["y"] = "0.76",
["x"] = "0.53",
},
["name"] = "Shalewind Canyon, Redridge",
["zmLoc"] = {
["y"] = "65.79",
["x"] = "77.91",
},
["timers"] = {
["Bogpaddle, Swamp of Sorrows"] = 34,
["Camp Everstill, Redridge"] = 25,
["Marshtide Watch, Swamp of Sorrows"] = 57,
["Nethergarde Keep, Blasted Lands"] = 103,
},
["routes"] = {
"Bogpaddle, Swamp of Sorrows", -- [1]
"Camp Everstill, Redridge", -- [2]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Lakeshire, Redridge"] = {
["fmLoc"] = {
["y"] = "0.24",
["x"] = "0.5",
},
["wmLoc"] = {
["y"] = "0.75",
["x"] = "0.5",
},
["name"] = "Lakeshire, Redridge",
["zmLoc"] = {
["y"] = "53.64",
["x"] = "29.32",
},
["timers"] = {
["Farstrider Lodge, Loch Modan"] = 217,
["Sentinel Hill, Westfall"] = 129,
["Chiselgrip, Burning Steppes"] = 96,
["Thundermar, Twilight Highlands"] = 394,
["The Harborage, Swamp of Sorrows"] = 47,
["Morgan's Vigil, Burning Steppes"] = 57,
["Dustwind Dig, Badlands"] = 144,
["Dragon's Mouth, Badlands"] = 113,
["Nethergarde Keep, Blasted Lands"] = 161,
["Camp Everstill, Redridge"] = 22,
["Shalewind Canyon, Redridge"] = 56,
["Darkshire, Duskwood"] = 62,
["Stormwind, Elwynn"] = 113,
["Victor's Point, Twilight Highlands"] = 447,
["Eastvale Logging Camp, Elwynn"] = 40,
["Goldshire, Elwynn"] = 93,
},
["routes"] = {
"Camp Everstill, Redridge", -- [1]
"Darkshire, Duskwood", -- [2]
"Eastvale Logging Camp, Elwynn", -- [3]
"Morgan's Vigil, Burning Steppes", -- [4]
"Sentinel Hill, Westfall", -- [5]
"Stormwind, Elwynn", -- [6]
"The Harborage, Swamp of Sorrows", -- [7]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Arathi Highlands"] = {
["Refuge Pointe, Arathi"] = {
["fmLoc"] = {
["y"] = "0.53",
["x"] = "0.51",
},
["wmLoc"] = {
["y"] = "0.45",
["x"] = "0.5",
},
["name"] = "Refuge Pointe, Arathi",
["zmLoc"] = {
["y"] = "47.33",
["x"] = "39.85",
},
["timers"] = {
["Vermillion Redoubt, Twilight Highlands"] = 146,
["Sentinel Hill, Westfall"] = 437,
["Bogpaddle, Swamp of Sorrows"] = 388,
["Raven Hill, Duskwood"] = 476,
["Thelsamar, Loch Modan"] = 171,
["Aerie Peak, The Hinterlands"] = 72,
["Chillwind Camp, Western Plaguelands"] = 129,
["Marshtide Watch, Swamp of Sorrows"] = 405,
["High Bank, Twilight Highlands"] = 286,
["Nethergarde Keep, Blasted Lands"] = 457,
["Stormfeather Outpost, The Hinterlands"] = 84,
["Ironforge, Dun Morogh"] = 272,
["Greenwarden's Grove, Wetlands"] = 95,
["Menethil Harbor, Wetlands"] = 127,
["Darkshire, Duskwood"] = 434,
["Dun Modr, Wetlands"] = 59,
["Slabchisel's Survey, Wetlands"] = 129,
},
["routes"] = {
"Aerie Peak, The Hinterlands", -- [1]
"Dun Modr, Wetlands", -- [2]
"Ironforge, Dun Morogh", -- [3]
"Menethil Harbor, Wetlands", -- [4]
"Stormfeather Outpost, The Hinterlands", -- [5]
"Thelsamar, Loch Modan", -- [6]
"Vermillion Redoubt, Twilight Highlands", -- [7]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Ironforge"] = {
["Ironforge, Dun Morogh"] = {
["fmLoc"] = {
["y"] = "0.4",
["x"] = "0.46",
},
["wmLoc"] = {
["y"] = "0.58",
["x"] = "0.47",
},
["name"] = "Ironforge, Dun Morogh",
["zmLoc"] = {
["y"] = "47.82",
["x"] = "55.22",
},
["timers"] = {
["Vermillion Redoubt, Twilight Highlands"] = 228,
["Sentinel Hill, Westfall"] = 273,
["Kharanos, Dun Morogh"] = 46,
["Gol'Bolar Quarry, Dun Morogh"] = 57,
["Refuge Pointe, Arathi"] = 205,
["Darkshire, Duskwood"] = 287,
["Thelsamar, Loch Modan"] = 102,
["Stormwind, Elwynn"] = 211,
["Farstrider Lodge, Loch Modan"] = 150,
["Thundermar, Twilight Highlands"] = 256,
["Light's Hope Chapel, Eastern Plaguelands"] = 352,
["Dustwind Dig, Badlands"] = 149,
["Fuselight, Badlands"] = 179,
["Goldshire, Elwynn"] = 238,
["Chillwind Camp, Western Plaguelands"] = 261,
["Shattered Sun Staging Area"] = 109,
["Marshtide Watch, Swamp of Sorrows"] = 270,
["Surwich, Blasted Lands"] = 406,
["Sandy Beach, Vashj'ir"] = 191,
["Morgan's Vigil, Burning Steppes"] = 167,
["Lakeshire, Redridge"] = 229,
["Dragon's Mouth, Badlands"] = 185,
["Menethil Harbor, Wetlands"] = 117,
["Nethergarde Keep, Blasted Lands"] = 314,
["Thorium Point, Searing Gorge"] = 79,
["Greenwarden's Grove, Wetlands"] = 194,
["Voldrin's Hold, Vashj'ir"] = 257,
["The Harborage, Swamp of Sorrows"] = 276,
["Aerie Peak, The Hinterlands"] = 241,
["Slabchisel's Survey, Wetlands"] = 163,
},
["routes"] = {
"Aerie Peak, The Hinterlands", -- [1]
"Chillwind Camp, Western Plaguelands", -- [2]
"Gol'Bolar Quarry, Dun Morogh", -- [3]
"Kharanos, Dun Morogh", -- [4]
"Light's Hope Chapel, Eastern Plaguelands", -- [5]
"Menethil Harbor, Wetlands", -- [6]
"Refuge Pointe, Arathi", -- [7]
"Sandy Beach, Vashj'ir", -- [8]
"Shattered Sun Staging Area", -- [9]
"Stormwind, Elwynn", -- [10]
"Thelsamar, Loch Modan", -- [11]
"Thorium Point, Searing Gorge", -- [12]
"Vermillion Redoubt, Twilight Highlands", -- [13]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Badlands"] = {
["Dustwind Dig, Badlands"] = {
["fmLoc"] = {
["y"] = "0.34",
["x"] = "0.54",
},
["wmLoc"] = {
["y"] = "0.65",
["x"] = "0.52",
},
["name"] = "Dustwind Dig, Badlands",
["zmLoc"] = {
["y"] = "36.3",
["x"] = "48.92",
},
["timers"] = {
["Thundermar, Twilight Highlands"] = 248,
["Bogpaddle, Swamp of Sorrows"] = 170,
["Morgan's Vigil, Burning Steppes"] = 92,
["Lakeshire, Redridge"] = 154,
["Dragon's Mouth, Badlands"] = 36,
["Darkshire, Duskwood"] = 212,
["Victor's Point, Twilight Highlands"] = 298,
["Fuselight, Badlands"] = 30,
["Thelsamar, Loch Modan"] = 54,
},
["routes"] = {
"Dragon's Mouth, Badlands", -- [1]
"Fuselight, Badlands", -- [2]
"Thelsamar, Loch Modan", -- [3]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Fuselight, Badlands"] = {
["fmLoc"] = {
["y"] = "0.34",
["x"] = "0.56",
},
["wmLoc"] = {
["y"] = "0.65",
["x"] = "0.54",
},
["name"] = "Fuselight, Badlands",
["zmLoc"] = {
["y"] = "35.23",
["x"] = "64.25",
},
["timers"] = {
["Farstrider Lodge, Loch Modan"] = 49,
["Ironforge, Dun Morogh"] = 182,
["Light's Hope Chapel, Eastern Plaguelands"] = 358,
["Dustwind Dig, Badlands"] = 19,
["Thelsamar, Loch Modan"] = 73,
["Dragon's Mouth, Badlands"] = 52,
},
["routes"] = {
"Dragon's Mouth, Badlands", -- [1]
"Dustwind Dig, Badlands", -- [2]
"Farstrider Lodge, Loch Modan", -- [3]
"Light's Hope Chapel, Eastern Plaguelands", -- [4]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Dragon's Mouth, Badlands"] = {
["fmLoc"] = {
["y"] = "0.32",
["x"] = "0.51",
},
["wmLoc"] = {
["y"] = "0.67",
["x"] = "0.5",
},
["name"] = "Dragon's Mouth, Badlands",
["zmLoc"] = {
["y"] = "57.72",
["x"] = "21.69",
},
["timers"] = {
["Farstrider Lodge, Loch Modan"] = 104,
["Kharanos, Dun Morogh"] = 302,
["Morgan's Vigil, Burning Steppes"] = 56,
["Lakeshire, Redridge"] = 118,
["Fuselight, Badlands"] = 55,
["Thelsamar, Loch Modan"] = 90,
["Chiselgrip, Burning Steppes"] = 95,
["Ironforge, Dun Morogh"] = 201,
["The Harborage, Swamp of Sorrows"] = 165,
["Iron Summit, Searing Gorge"] = 178,
["Dustwind Dig, Badlands"] = 36,
["Stormwind, Elwynn"] = 210,
["Goldshire, Elwynn"] = 211,
},
["routes"] = {
"Dustwind Dig, Badlands", -- [1]
"Fuselight, Badlands", -- [2]
"Morgan's Vigil, Burning Steppes", -- [3]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Searing Gorge"] = {
["Thorium Point, Searing Gorge"] = {
["fmLoc"] = {
["y"] = "0.34",
["x"] = "0.46",
},
["wmLoc"] = {
["y"] = "0.65",
["x"] = "0.47",
},
["name"] = "Thorium Point, Searing Gorge",
["zmLoc"] = {
["y"] = "30.73",
["x"] = "37.92",
},
["timers"] = {
["Chillwind Camp, Western Plaguelands"] = 307,
["Whelgar's Retreat, Wetlands"] = 210,
["Morgan's Vigil, Burning Steppes"] = 88,
["Lakeshire, Redridge"] = 150,
["Menethil Harbor, Wetlands"] = 208,
["Stormwind, Elwynn"] = 127,
["Ironforge, Dun Morogh"] = 91,
["Greenwarden's Grove, Wetlands"] = 183,
["Iron Summit, Searing Gorge"] = 26,
["Aerie Peak, The Hinterlands"] = 326,
["Thelsamar, Loch Modan"] = 89,
["Stormfeather Outpost, The Hinterlands"] = 336,
},
["routes"] = {
"Iron Summit, Searing Gorge", -- [1]
"Ironforge, Dun Morogh", -- [2]
"Morgan's Vigil, Burning Steppes", -- [3]
"Stormwind, Elwynn", -- [4]
"Thelsamar, Loch Modan", -- [5]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Iron Summit, Searing Gorge"] = {
["fmLoc"] = {
["y"] = "0.32",
["x"] = "0.46",
},
["wmLoc"] = {
["y"] = "0.67",
["x"] = "0.47",
},
["name"] = "Iron Summit, Searing Gorge",
["zmLoc"] = {
["y"] = "68.75",
["x"] = "40.85",
},
["timers"] = {
["Flamestar Post, Burning Steppes"] = 47,
["Morgan's Vigil, Burning Steppes"] = 114,
["Thorium Point, Searing Gorge"] = 26,
["Ironforge, Dun Morogh"] = 116,
},
["routes"] = {
"Flamestar Post, Burning Steppes", -- [1]
"Thorium Point, Searing Gorge", -- [2]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Loch Modan"] = {
["Thelsamar, Loch Modan"] = {
["fmLoc"] = {
["y"] = "0.38",
["x"] = "0.52",
},
["wmLoc"] = {
["y"] = "0.61",
["x"] = "0.51",
},
["name"] = "Thelsamar, Loch Modan",
["zmLoc"] = {
["y"] = "50.88",
["x"] = "33.86",
},
["timers"] = {
["Farstrider Lodge, Loch Modan"] = 48,
["Whelgar's Retreat, Wetlands"] = 121,
["Slabchisel's Survey, Wetlands"] = 61,
["High Bank, Twilight Highlands"] = 181,
["Gol'Bolar Quarry, Dun Morogh"] = 168,
["Dustwind Dig, Badlands"] = 47,
["Thorium Point, Searing Gorge"] = 83,
["Dragon's Mouth, Badlands"] = 83,
["Menethil Harbor, Wetlands"] = 154,
["Refuge Pointe, Arathi"] = 165,
["Ironforge, Dun Morogh"] = 111,
["Greenwarden's Grove, Wetlands"] = 94,
["Iron Summit, Searing Gorge"] = 106,
["Victor's Point, Twilight Highlands"] = 244,
["Firebeard's Patrol, Twilight Highlands"] = 232,
["Chiselgrip, Burning Steppes"] = 182,
},
["routes"] = {
"Dustwind Dig, Badlands", -- [1]
"Farstrider Lodge, Loch Modan", -- [2]
"High Bank, Twilight Highlands", -- [3]
"Ironforge, Dun Morogh", -- [4]
"Menethil Harbor, Wetlands", -- [5]
"Refuge Pointe, Arathi", -- [6]
"Slabchisel's Survey, Wetlands", -- [7]
"Thorium Point, Searing Gorge", -- [8]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Farstrider Lodge, Loch Modan"] = {
["fmLoc"] = {
["y"] = "0.37",
["x"] = "0.57",
},
["wmLoc"] = {
["y"] = "0.62",
["x"] = "0.55",
},
["name"] = "Farstrider Lodge, Loch Modan",
["zmLoc"] = {
["y"] = "64.18",
["x"] = "81.92",
},
["timers"] = {
["Thelsamar, Loch Modan"] = 47,
["Ironforge, Dun Morogh"] = 158,
["Thorium Point, Searing Gorge"] = 129,
["Fuselight, Badlands"] = 48,
},
["routes"] = {
"Fuselight, Badlands", -- [1]
"Thelsamar, Loch Modan", -- [2]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Burning Steppes"] = {
["Flamestar Post, Burning Steppes"] = {
["fmLoc"] = {
["y"] = "0.29",
["x"] = "0.46",
},
["wmLoc"] = {
["y"] = "0.7",
["x"] = "0.47",
},
["name"] = "Flamestar Post, Burning Steppes",
["zmLoc"] = {
["y"] = "52.7",
["x"] = "17.8",
},
["timers"] = {
["Iron Summit, Searing Gorge"] = 46,
["Morgan's Vigil, Burning Steppes"] = 75,
["Lakeshire, Redridge"] = 138,
["Chiselgrip, Burning Steppes"] = 37,
},
["routes"] = {
"Chiselgrip, Burning Steppes", -- [1]
"Iron Summit, Searing Gorge", -- [2]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Morgan's Vigil, Burning Steppes"] = {
["fmLoc"] = {
["y"] = "0.28",
["x"] = "0.52",
},
["wmLoc"] = {
["y"] = "0.71",
["x"] = "0.51",
},
["name"] = "Morgan's Vigil, Burning Steppes",
["zmLoc"] = {
["y"] = "65.73",
["x"] = "72.19",
},
["timers"] = {
["Flamestar Post, Burning Steppes"] = 78,
["Sentinel Hill, Westfall"] = 191,
["Marshtide Watch, Swamp of Sorrows"] = 103,
["Bogpaddle, Swamp of Sorrows"] = 78,
["Lakeshire, Redridge"] = 62,
["Dragon's Mouth, Badlands"] = 56,
["Nethergarde Keep, Blasted Lands"] = 182,
["Chiselgrip, Burning Steppes"] = 43,
["Thorium Point, Searing Gorge"] = 96,
["Iron Summit, Searing Gorge"] = 122,
["The Harborage, Swamp of Sorrows"] = 109,
["Camp Everstill, Redridge"] = 84,
["Stormwind, Elwynn"] = 157,
},
["routes"] = {
"Bogpaddle, Swamp of Sorrows", -- [1]
"Chiselgrip, Burning Steppes", -- [2]
"Dragon's Mouth, Badlands", -- [3]
"Lakeshire, Redridge", -- [4]
"Nethergarde Keep, Blasted Lands", -- [5]
"Stormwind, Elwynn", -- [6]
"Thorium Point, Searing Gorge", -- [7]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Chiselgrip, Burning Steppes"] = {
["fmLoc"] = {
["y"] = "0.3",
["x"] = "0.49",
},
["wmLoc"] = {
["y"] = "0.7",
["x"] = "0.49",
},
["name"] = "Chiselgrip, Burning Steppes",
["zmLoc"] = {
["y"] = "41.88",
["x"] = "46.23",
},
["timers"] = {
["Flamestar Post, Burning Steppes"] = 35,
["Bogpaddle, Swamp of Sorrows"] = 117,
["Thelsamar, Loch Modan"] = 185,
["Dustwind Dig, Badlands"] = 126,
["Kirthaven, Twilight Highlands"] = 400,
["Slabchisel's Survey, Wetlands"] = 246,
["Marshtide Watch, Swamp of Sorrows"] = 136,
["Surwich, Blasted Lands"] = 278,
["Vermillion Redoubt, Twilight Highlands"] = 348,
["Morgan's Vigil, Burning Steppes"] = 39,
["Thundermar, Twilight Highlands"] = 376,
["Dragon's Mouth, Badlands"] = 95,
["Nethergarde Keep, Blasted Lands"] = 186,
["Fort Livingston, Stranglethorn"] = 267,
["Greenwarden's Grove, Wetlands"] = 279,
["Rebel Camp, Stranglethorn Vale"] = 201,
["Iron Summit, Searing Gorge"] = 80,
["The Harborage, Swamp of Sorrows"] = 148,
["Dun Modr, Wetlands"] = 300,
["Refuge Pointe, Arathi"] = 343,
},
["routes"] = {
"Flamestar Post, Burning Steppes", -- [1]
"Morgan's Vigil, Burning Steppes", -- [2]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Shimmering Expanse"] = {
["Sandy Beach, Vashj'ir"] = {
["fmLoc"] = {
["y"] = "0.38",
["x"] = "0.29",
},
["wmLoc"] = {
["y"] = "0.6",
["x"] = "0.34",
},
["name"] = "Sandy Beach, Vashj'ir",
["zmLoc"] = {
["y"] = "17.01",
["x"] = "57.04",
},
["timers"] = {
["Vermillion Redoubt, Twilight Highlands"] = 421,
["Kharanos, Dun Morogh"] = 239,
["Firebeard's Patrol, Twilight Highlands"] = 507,
["Thelsamar, Loch Modan"] = 295,
["Light's Hope Chapel, Eastern Plaguelands"] = 545,
["Dustwind Dig, Badlands"] = 342,
["Goldshire, Elwynn"] = 431,
["Kirthaven, Twilight Highlands"] = 473,
["Farstrider Lodge, Loch Modan"] = 343,
["Booty Bay, Stranglethorn"] = 598,
["Crown Guard Tower, Eastern Plaguelands"] = 559,
["Gol'Bolar Quarry, Dun Morogh"] = 250,
["Voldrin's Hold, Vashj'ir"] = 66,
["Nethergarde Keep, Blasted Lands"] = 507,
["Lakeshire, Redridge"] = 422,
["Fuselight, Badlands"] = 372,
["Menethil Harbor, Wetlands"] = 310,
["Thorium Point, Searing Gorge"] = 272,
["Ironforge, Dun Morogh"] = 193,
["Greenwarden's Grove, Wetlands"] = 387,
["Iron Summit, Searing Gorge"] = 298,
["The Harborage, Swamp of Sorrows"] = 469,
["Dun Modr, Wetlands"] = 387,
["Slabchisel's Survey, Wetlands"] = 356,
},
["routes"] = {
"Ironforge, Dun Morogh", -- [1]
"Voldrin's Hold, Vashj'ir", -- [2]
},
},
},
["Wetlands"] = {
["Menethil Harbor, Wetlands"] = {
["fmLoc"] = {
["y"] = "0.44",
["x"] = "0.45",
},
["wmLoc"] = {
["y"] = "0.55",
["x"] = "0.46",
},
["name"] = "Menethil Harbor, Wetlands",
["zmLoc"] = {
["y"] = "59.49",
["x"] = "9.38",
},
["timers"] = {
["Chillwind Camp, Western Plaguelands"] = 241,
["Whelgar's Retreat, Wetlands"] = 47,
["Thorium Point, Searing Gorge"] = 170,
["High Bank, Twilight Highlands"] = 286,
["Thelsamar, Loch Modan"] = 165,
["Ironforge, Dun Morogh"] = 91,
["Stormwind, Elwynn"] = 264,
["Darkshire, Duskwood"] = 382,
["Refuge Pointe, Arathi"] = 115,
},
["routes"] = {
"Ironforge, Dun Morogh", -- [1]
"Refuge Pointe, Arathi", -- [2]
"Thelsamar, Loch Modan", -- [3]
"Whelgar's Retreat, Wetlands", -- [4]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Whelgar's Retreat, Wetlands"] = {
["fmLoc"] = {
["y"] = "0.46",
["x"] = "0.49",
},
["wmLoc"] = {
["y"] = "0.53",
["x"] = "0.49",
},
["name"] = "Whelgar's Retreat, Wetlands",
["zmLoc"] = {
["y"] = "39",
["x"] = "38.68",
},
["timers"] = {
["Vermillion Redoubt, Twilight Highlands"] = 99,
["Greenwarden's Grove, Wetlands"] = 30,
["Slabchisel's Survey, Wetlands"] = 63,
["Menethil Harbor, Wetlands"] = 54,
["Dun Modr, Wetlands"] = 30,
["Kirthaven, Twilight Highlands"] = 151,
},
["routes"] = {
"Dun Modr, Wetlands", -- [1]
"Greenwarden's Grove, Wetlands", -- [2]
"Menethil Harbor, Wetlands", -- [3]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Greenwarden's Grove, Wetlands"] = {
["fmLoc"] = {
["y"] = "0.45",
["x"] = "0.52",
},
["wmLoc"] = {
["y"] = "0.53",
["x"] = "0.51",
},
["name"] = "Greenwarden's Grove, Wetlands",
["zmLoc"] = {
["y"] = "42.04",
["x"] = "56.32",
},
["timers"] = {
["Vermillion Redoubt, Twilight Highlands"] = 69,
["Whelgar's Retreat, Wetlands"] = 27,
["Marshtide Watch, Swamp of Sorrows"] = 334,
["Slabchisel's Survey, Wetlands"] = 33,
["Bogpaddle, Swamp of Sorrows"] = 309,
["Morgan's Vigil, Burning Steppes"] = 231,
["Thorium Point, Searing Gorge"] = 175,
["Dragon's Mouth, Badlands"] = 175,
["Thelsamar, Loch Modan"] = 92,
["Lakeshire, Redridge"] = 293,
["The Harborage, Swamp of Sorrows"] = 340,
["Stormwind, Elwynn"] = 300,
["Chiselgrip, Burning Steppes"] = 274,
["Dustwind Dig, Badlands"] = 139,
["Dun Modr, Wetlands"] = 29,
["Refuge Pointe, Arathi"] = 80,
},
["routes"] = {
"Dun Modr, Wetlands", -- [1]
"Slabchisel's Survey, Wetlands", -- [2]
"Vermillion Redoubt, Twilight Highlands", -- [3]
"Whelgar's Retreat, Wetlands", -- [4]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Dun Modr, Wetlands"] = {
["fmLoc"] = {
["y"] = "0.48",
["x"] = "0.51",
},
["wmLoc"] = {
["y"] = "0.5",
["x"] = "0.5",
},
["name"] = "Dun Modr, Wetlands",
["zmLoc"] = {
["y"] = "18.48",
["x"] = "49.99",
},
["timers"] = {
["Vermillion Redoubt, Twilight Highlands"] = 106,
["Whelgar's Retreat, Wetlands"] = 32,
["Thundermar, Twilight Highlands"] = 134,
["Menethil Harbor, Wetlands"] = 85,
["Ironforge, Dun Morogh"] = 177,
["Greenwarden's Grove, Wetlands"] = 37,
["Stormfeather Outpost, The Hinterlands"] = 134,
["Aerie Peak, The Hinterlands"] = 123,
["Refuge Pointe, Arathi"] = 51,
["Kirthaven, Twilight Highlands"] = 158,
},
["routes"] = {
"Greenwarden's Grove, Wetlands", -- [1]
"Refuge Pointe, Arathi", -- [2]
"Whelgar's Retreat, Wetlands", -- [3]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Slabchisel's Survey, Wetlands"] = {
["fmLoc"] = {
["y"] = "0.43",
["x"] = "0.52",
},
["wmLoc"] = {
["y"] = "0.56",
["x"] = "0.51",
},
["name"] = "Slabchisel's Survey, Wetlands",
["zmLoc"] = {
["y"] = "71.24",
["x"] = "56.88",
},
["timers"] = {
["Whelgar's Retreat, Wetlands"] = 59,
["Firebeard's Patrol, Twilight Highlands"] = 188,
["High Bank, Twilight Highlands"] = 240,
["Thelsamar, Loch Modan"] = 59,
["Ironforge, Dun Morogh"] = 170,
["Greenwarden's Grove, Wetlands"] = 33,
["Victor's Point, Twilight Highlands"] = 183,
["Dun Modr, Wetlands"] = 62,
["Stormfeather Outpost, The Hinterlands"] = 197,
},
["routes"] = {
"Greenwarden's Grove, Wetlands", -- [1]
"Thelsamar, Loch Modan", -- [2]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Northern Stranglethorn"] = {
["Fort Livingston, Stranglethorn"] = {
["fmLoc"] = {
["y"] = "0.12",
["x"] = "0.44",
},
["wmLoc"] = {
["y"] = "0.88",
["x"] = "0.45",
},
["name"] = "Fort Livingston, Stranglethorn",
["zmLoc"] = {
["y"] = "66.15",
["x"] = "52.67",
},
["timers"] = {
["Flamestar Post, Burning Steppes"] = 299,
["Morgan's Vigil, Burning Steppes"] = 221,
["Lakeshire, Redridge"] = 164,
["Dragon's Mouth, Badlands"] = 277,
["Nethergarde Keep, Blasted Lands"] = 201,
["Slabchisel's Survey, Wetlands"] = 428,
["Booty Bay, Stranglethorn"] = 132,
["Rebel Camp, Stranglethorn Vale"] = 55,
["Darkshire, Duskwood"] = 103,
["Greenwarden's Grove, Wetlands"] = 461,
["Explorers' League Digsite, Stranglethorn"] = 45,
["Chiselgrip, Burning Steppes"] = 254,
},
["routes"] = {
"Explorers' League Digsite, Stranglethorn", -- [1]
"Rebel Camp, Stranglethorn Vale", -- [2]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Rebel Camp, Stranglethorn Vale"] = {
["fmLoc"] = {
["y"] = "0.18",
["x"] = "0.43",
},
["wmLoc"] = {
["y"] = "0.82",
["x"] = "0.45",
},
["name"] = "Rebel Camp, Stranglethorn Vale",
["zmLoc"] = {
["y"] = "11.95",
["x"] = "47.82",
},
["timers"] = {
["Sentinel Hill, Westfall"] = 69,
["Raven Hill, Duskwood"] = 40,
["Darkshire, Duskwood"] = 49,
["Dustwind Dig, Badlands"] = 249,
["Shalewind Canyon, Redridge"] = 165,
["Chiselgrip, Burning Steppes"] = 210,
["Booty Bay, Stranglethorn"] = 116,
["Menethil Harbor, Wetlands"] = 433,
["Marshtide Watch, Swamp of Sorrows"] = 183,
["Surwich, Blasted Lands"] = 239,
["Nethergarde Keep, Blasted Lands"] = 147,
["Morgan's Vigil, Burning Steppes"] = 166,
["Lakeshire, Redridge"] = 109,
["Dragon's Mouth, Badlands"] = 222,
["Explorers' League Digsite, Stranglethorn"] = 100,
["Moonbrook, Westfall"] = 94,
["Ironforge, Dun Morogh"] = 316,
["Thorium Point, Searing Gorge"] = 236,
["Fort Livingston, Stranglethorn"] = 55,
["The Harborage, Swamp of Sorrows"] = 156,
["Stormwind, Elwynn"] = 99,
["Refuge Pointe, Arathi"] = 455,
},
["routes"] = {
"Booty Bay, Stranglethorn", -- [1]
"Darkshire, Duskwood", -- [2]
"Fort Livingston, Stranglethorn", -- [3]
"Raven Hill, Duskwood", -- [4]
"Sentinel Hill, Westfall", -- [5]
"Stormwind, Elwynn", -- [6]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Stormwind City"] = {
["Stormwind, Elwynn"] = {
["fmLoc"] = {
["y"] = "0.26",
["x"] = "0.4",
},
["wmLoc"] = {
["y"] = "0.73",
["x"] = "0.43",
},
["name"] = "Stormwind, Elwynn",
["zmLoc"] = {
["y"] = "72.79",
["x"] = "70.87",
},
["timers"] = {
["Flamestar Post, Burning Steppes"] = 210,
["Sentinel Hill, Westfall"] = 74,
["Kharanos, Dun Morogh"] = 263,
["Fort Livingston, Stranglethorn"] = 147,
["Victor's Point, Twilight Highlands"] = 470,
["Booty Bay, Stranglethorn"] = 199,
["Thundermar, Twilight Highlands"] = 417,
["Thorium Point, Searing Gorge"] = 137,
["High Bank, Twilight Highlands"] = 407,
["Nethergarde Keep, Blasted Lands"] = 177,
["Moonbrook, Westfall"] = 99,
["Ironforge, Dun Morogh"] = 217,
["Rebel Camp, Stranglethorn Vale"] = 93,
["Voldrin's Hold, Vashj'ir"] = 476,
["The Menders' Stead, Western Plaguelands"] = 469,
["Dun Modr, Wetlands"] = 349,
["Slabchisel's Survey, Wetlands"] = 287,
["Whelgar's Retreat, Wetlands"] = 347,
["Menethil Harbor, Wetlands"] = 294,
["Bogpaddle, Swamp of Sorrows"] = 203,
["Raven Hill, Duskwood"] = 105,
["Furlbrow's Pumpkin Farm, Westfall"] = 50,
["Darkshire, Duskwood"] = 116,
["Explorers' League Digsite, Stranglethorn"] = 186,
["Surwich, Blasted Lands"] = 269,
["Thondroril River, Eastern Plaguelands"] = 536,
["Thelsamar, Loch Modan"] = 226,
["Dustwind Dig, Badlands"] = 242,
["Aerie Peak, The Hinterlands"] = 458,
["Sandy Beach, Vashj'ir"] = 363,
["Chiselgrip, Burning Steppes"] = 186,
["Farstrider Lodge, Loch Modan"] = 274,
["Iron Summit, Searing Gorge"] = 163,
["Marshtide Watch, Swamp of Sorrows"] = 198,
["Goldshire, Elwynn"] = 32,
["Stormfeather Outpost, The Hinterlands"] = 475,
["Morgan's Vigil, Burning Steppes"] = 150,
["Lakeshire, Redridge"] = 113,
["Eastvale Logging Camp, Elwynn"] = 89,
["Camp Everstill, Redridge"] = 135,
["Shalewind Canyon, Redridge"] = 169,
["Refuge Pointe, Arathi"] = 389,
["Greenwarden's Grove, Wetlands"] = 320,
["Gol'Bolar Quarry, Dun Morogh"] = 274,
["The Harborage, Swamp of Sorrows"] = 160,
["Dragon's Mouth, Badlands"] = 206,
["Fuselight, Badlands"] = 261,
},
["routes"] = {
"Booty Bay, Stranglethorn", -- [1]
"Darkshire, Duskwood", -- [2]
"Furlbrow's Pumpkin Farm, Westfall", -- [3]
"Goldshire, Elwynn", -- [4]
"Ironforge, Dun Morogh", -- [5]
"Lakeshire, Redridge", -- [6]
"Morgan's Vigil, Burning Steppes", -- [7]
"Nethergarde Keep, Blasted Lands", -- [8]
"Rebel Camp, Stranglethorn Vale", -- [9]
"Sentinel Hill, Westfall", -- [10]
"Thorium Point, Searing Gorge", -- [11]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Twilight Highlands"] = {
["Vermillion Redoubt, Twilight Highlands"] = {
["fmLoc"] = {
["y"] = "0.46",
["x"] = "0.56",
},
["wmLoc"] = {
["y"] = "0.52",
["x"] = "0.54",
},
["name"] = "Vermillion Redoubt, Twilight Highlands",
["zmLoc"] = {
["y"] = "24.93",
["x"] = "28.52",
},
["timers"] = {
["Farstrider Lodge, Loch Modan"] = 184,
["Ironforge, Dun Morogh"] = 152,
["Greenwarden's Grove, Wetlands"] = 44,
["Firebeard's Patrol, Twilight Highlands"] = 86,
["Thundermar, Twilight Highlands"] = 28,
["Dun Modr, Wetlands"] = 73,
["Refuge Pointe, Arathi"] = 92,
},
["routes"] = {
"Greenwarden's Grove, Wetlands", -- [1]
"Ironforge, Dun Morogh", -- [2]
"Refuge Pointe, Arathi", -- [3]
"Thundermar, Twilight Highlands", -- [4]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Thundermar, Twilight Highlands"] = {
["fmLoc"] = {
["y"] = "0.46",
["x"] = "0.59",
},
["wmLoc"] = {
["y"] = "0.52",
["x"] = "0.56",
},
["name"] = "Thundermar, Twilight Highlands",
["zmLoc"] = {
["y"] = "28.23",
["x"] = "48.52",
},
["timers"] = {
["Vermillion Redoubt, Twilight Highlands"] = 43,
["Bogpaddle, Swamp of Sorrows"] = 396,
["Raven Hill, Duskwood"] = 494,
["Thelsamar, Loch Modan"] = 179,
["Dustwind Dig, Badlands"] = 226,
["Chiselgrip, Burning Steppes"] = 364,
["Farstrider Lodge, Loch Modan"] = 227,
["Firebeard's Patrol, Twilight Highlands"] = 58,
["Marshtide Watch, Swamp of Sorrows"] = 421,
["Surwich, Blasted Lands"] = 557,
["Kirthaven, Twilight Highlands"] = 24,
["Morgan's Vigil, Burning Steppes"] = 324,
["Lakeshire, Redridge"] = 380,
["High Bank, Twilight Highlands"] = 111,
["Nethergarde Keep, Blasted Lands"] = 465,
["Darkshire, Duskwood"] = 442,
["Stormwind, Elwynn"] = 389,
["Dragon's Mouth, Badlands"] = 262,
["Iron Summit, Searing Gorge"] = 288,
["The Harborage, Swamp of Sorrows"] = 427,
["Victor's Point, Twilight Highlands"] = 53,
["Stormfeather Outpost, The Hinterlands"] = 219,
},
["routes"] = {
"Firebeard's Patrol, Twilight Highlands", -- [1]
"Kirthaven, Twilight Highlands", -- [2]
"Vermillion Redoubt, Twilight Highlands", -- [3]
"Victor's Point, Twilight Highlands", -- [4]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Firebeard's Patrol, Twilight Highlands"] = {
["fmLoc"] = {
["y"] = "0.42",
["x"] = "0.62",
},
["wmLoc"] = {
["y"] = "0.56",
["x"] = "0.58",
},
["name"] = "Firebeard's Patrol, Twilight Highlands",
["zmLoc"] = {
["y"] = "57.69",
["x"] = "60.38",
},
["timers"] = {
["High Bank, Twilight Highlands"] = 54,
["Victor's Point, Twilight Highlands"] = 42,
["Thundermar, Twilight Highlands"] = 57,
["Kirthaven, Twilight Highlands"] = 74,
},
["routes"] = {
"High Bank, Twilight Highlands", -- [1]
"Kirthaven, Twilight Highlands", -- [2]
"Thundermar, Twilight Highlands", -- [3]
"Victor's Point, Twilight Highlands", -- [4]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Victor's Point, Twilight Highlands"] = {
["fmLoc"] = {
["y"] = "0.42",
["x"] = "0.59",
},
["wmLoc"] = {
["y"] = "0.56",
["x"] = "0.56",
},
["name"] = "Victor's Point, Twilight Highlands",
["zmLoc"] = {
["y"] = "57.31",
["x"] = "43.85",
},
["timers"] = {
["Firebeard's Patrol, Twilight Highlands"] = 40,
["High Bank, Twilight Highlands"] = 93,
["Kirthaven, Twilight Highlands"] = 67,
["Thundermar, Twilight Highlands"] = 43,
},
["routes"] = {
"Firebeard's Patrol, Twilight Highlands", -- [1]
"Thundermar, Twilight Highlands", -- [2]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Kirthaven, Twilight Highlands"] = {
["fmLoc"] = {
["y"] = "0.48",
["x"] = "0.61",
},
["wmLoc"] = {
["y"] = "0.51",
["x"] = "0.57",
},
["name"] = "Kirthaven, Twilight Highlands",
["zmLoc"] = {
["y"] = "15.17",
["x"] = "56.72",
},
["timers"] = {
["Firebeard's Patrol, Twilight Highlands"] = 67,
["Thundermar, Twilight Highlands"] = 30,
["High Bank, Twilight Highlands"] = 100,
},
["routes"] = {
"Firebeard's Patrol, Twilight Highlands", -- [1]
"High Bank, Twilight Highlands", -- [2]
"Thundermar, Twilight Highlands", -- [3]
},
["factions"] = {
"Alliance", -- [1]
},
},
["High Bank, Twilight Highlands"] = {
["fmLoc"] = {
["y"] = "0.4",
["x"] = "0.66",
},
["wmLoc"] = {
["y"] = "0.59",
["x"] = "0.61",
},
["name"] = "High Bank, Twilight Highlands",
["zmLoc"] = {
["y"] = "77.03",
["x"] = "81.59",
},
["timers"] = {
["Vermillion Redoubt, Twilight Highlands"] = 151,
["Thundermar, Twilight Highlands"] = 106,
["Firebeard's Patrol, Twilight Highlands"] = 51,
["Victor's Point, Twilight Highlands"] = 93,
["Thelsamar, Loch Modan"] = 172,
["Kirthaven, Twilight Highlands"] = 93,
},
["routes"] = {
"Firebeard's Patrol, Twilight Highlands", -- [1]
"Kirthaven, Twilight Highlands", -- [2]
"Thelsamar, Loch Modan", -- [3]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Westfall"] = {
["Furlbrow's Pumpkin Farm, Westfall"] = {
["fmLoc"] = {
["y"] = "0.23",
["x"] = "0.38",
},
["wmLoc"] = {
["y"] = "0.77",
["x"] = "0.41",
},
["name"] = "Furlbrow's Pumpkin Farm, Westfall",
["zmLoc"] = {
["y"] = "18.79",
["x"] = "49.79",
},
["timers"] = {
["Sentinel Hill, Westfall"] = 28,
["Stormwind, Elwynn"] = 59,
["Rebel Camp, Stranglethorn Vale"] = 93,
},
["routes"] = {
"Sentinel Hill, Westfall", -- [1]
"Stormwind, Elwynn", -- [2]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Sentinel Hill, Westfall"] = {
["fmLoc"] = {
["y"] = "0.2",
["x"] = "0.39",
},
["wmLoc"] = {
["y"] = "0.8",
["x"] = "0.42",
},
["name"] = "Sentinel Hill, Westfall",
["zmLoc"] = {
["y"] = "49.31",
["x"] = "56.61",
},
["timers"] = {
["Vermillion Redoubt, Twilight Highlands"] = 474,
["Firebeard's Patrol, Twilight Highlands"] = 543,
["Raven Hill, Duskwood"] = 31,
["Thelsamar, Loch Modan"] = 311,
["Goldshire, Elwynn"] = 117,
["Eastvale Logging Camp, Elwynn"] = 174,
["Darkshire, Duskwood"] = 92,
["Stormwind, Elwynn"] = 85,
["Furlbrow's Pumpkin Farm, Westfall"] = 32,
["Lakeshire, Redridge"] = 134,
["Menethil Harbor, Wetlands"] = 419,
["Thorium Point, Searing Gorge"] = 222,
["Nethergarde Keep, Blasted Lands"] = 184,
["Camp Everstill, Redridge"] = 156,
["Moonbrook, Westfall"] = 25,
["Ironforge, Dun Morogh"] = 290,
["Rebel Camp, Stranglethorn Vale"] = 65,
["Iron Summit, Searing Gorge"] = 248,
["The Harborage, Swamp of Sorrows"] = 181,
["Booty Bay, Stranglethorn"] = 183,
["Refuge Pointe, Arathi"] = 476,
},
["routes"] = {
"Booty Bay, Stranglethorn", -- [1]
"Darkshire, Duskwood", -- [2]
"Furlbrow's Pumpkin Farm, Westfall", -- [3]
"Lakeshire, Redridge", -- [4]
"Moonbrook, Westfall", -- [5]
"Raven Hill, Duskwood", -- [6]
"Rebel Camp, Stranglethorn Vale", -- [7]
"Stormwind, Elwynn", -- [8]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Moonbrook, Westfall"] = {
["fmLoc"] = {
["y"] = "0.19",
["x"] = "0.37",
},
["wmLoc"] = {
["y"] = "0.81",
["x"] = "0.4",
},
["name"] = "Moonbrook, Westfall",
["zmLoc"] = {
["y"] = "63.29",
["x"] = "42.1",
},
["timers"] = {
["Sentinel Hill, Westfall"] = 27,
},
["routes"] = {
"Sentinel Hill, Westfall", -- [1]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Isle of Quel'Danas"] = {
["Shattered Sun Staging Area"] = {
["fmLoc"] = {
["y"] = "0.94",
["x"] = "0.58",
},
["wmLoc"] = {
["y"] = "0.02",
["x"] = "0.55",
},
["name"] = "Shattered Sun Staging Area",
["zmLoc"] = {
["y"] = "25.06",
["x"] = "48.27",
},
["timers"] = {
["Light's Hope Chapel, Eastern Plaguelands"] = 333,
["Zul'Aman, Ghostlands"] = 233,
},
["routes"] = {
"Light's Hope Chapel, Eastern Plaguelands", -- [1]
"Zul'Aman, Ghostlands", -- [2]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Elwynn Forest"] = {
["Eastvale Logging Camp, Elwynn"] = {
["fmLoc"] = {
["y"] = "0.24",
["x"] = "0.47",
},
["wmLoc"] = {
["y"] = "0.76",
["x"] = "0.47",
},
["name"] = "Eastvale Logging Camp, Elwynn",
["zmLoc"] = {
["y"] = "66.36",
["x"] = "81.88",
},
["timers"] = {
["Darkshire, Duskwood"] = 103,
["Goldshire, Elwynn"] = 53,
["Flamestar Post, Burning Steppes"] = 176,
["Surwich, Blasted Lands"] = 263,
["Iron Summit, Searing Gorge"] = 220,
["Morgan's Vigil, Burning Steppes"] = 98,
["Lakeshire, Redridge"] = 41,
["Chiselgrip, Burning Steppes"] = 141,
},
["routes"] = {
"Goldshire, Elwynn", -- [1]
"Lakeshire, Redridge", -- [2]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Goldshire, Elwynn"] = {
["fmLoc"] = {
["y"] = "0.24",
["x"] = "0.42",
},
["wmLoc"] = {
["y"] = "0.75",
["x"] = "0.44",
},
["name"] = "Goldshire, Elwynn",
["zmLoc"] = {
["y"] = "64.69",
["x"] = "41.8",
},
["timers"] = {
["Eastvale Logging Camp, Elwynn"] = 57,
["Sentinel Hill, Westfall"] = 96,
["Chiselgrip, Burning Steppes"] = 198,
["Lakeshire, Redridge"] = 98,
["Morgan's Vigil, Burning Steppes"] = 155,
["Thorium Point, Searing Gorge"] = 163,
["Fuselight, Badlands"] = 266,
["Darkshire, Duskwood"] = 68,
["Moonbrook, Westfall"] = 125,
["Flamestar Post, Burning Steppes"] = 233,
["Rebel Camp, Stranglethorn Vale"] = 117,
["Camp Everstill, Redridge"] = 120,
["The Harborage, Swamp of Sorrows"] = 145,
["Furlbrow's Pumpkin Farm, Westfall"] = 76,
["Stormwind, Elwynn"] = 26,
},
["routes"] = {
"Darkshire, Duskwood", -- [1]
"Eastvale Logging Camp, Elwynn", -- [2]
"Stormwind, Elwynn", -- [3]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Ghostlands"] = {
["Zul'Aman, Ghostlands"] = {
["fmLoc"] = {
["y"] = "0.72",
["x"] = "0.61",
},
["wmLoc"] = {
["y"] = "0.24",
["x"] = "0.57",
},
["name"] = "Zul'Aman, Ghostlands",
["zmLoc"] = {
["y"] = "67.13",
["x"] = "74.67",
},
["timers"] = {
["Light's Hope Chapel, Eastern Plaguelands"] = 122,
["Shattered Sun Staging Area"] = 252,
},
["routes"] = {
"Light's Hope Chapel, Eastern Plaguelands", -- [1]
"Shattered Sun Staging Area", -- [2]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Western Plaguelands"] = {
["Chillwind Camp, Western Plaguelands"] = {
["fmLoc"] = {
["y"] = "0.6",
["x"] = "0.47",
},
["wmLoc"] = {
["y"] = "0.37",
["x"] = "0.48",
},
["name"] = "Chillwind Camp, Western Plaguelands",
["zmLoc"] = {
["y"] = "84.95",
["x"] = "42.94",
},
["timers"] = {
["Thondroril River, Eastern Plaguelands"] = 59,
["Ironforge, Dun Morogh"] = 258,
["Light's Hope Chapel, Eastern Plaguelands"] = 148,
["Aerie Peak, The Hinterlands"] = 66,
["The Menders' Stead, Western Plaguelands"] = 43,
["Andorhal, Western Plaguelands"] = 28,
},
["routes"] = {
"Aerie Peak, The Hinterlands", -- [1]
"Andorhal, Western Plaguelands", -- [2]
"Ironforge, Dun Morogh", -- [3]
"Light's Hope Chapel, Eastern Plaguelands", -- [4]
"The Menders' Stead, Western Plaguelands", -- [5]
"Thondroril River, Eastern Plaguelands", -- [6]
},
["factions"] = {
"Alliance", -- [1]
},
},
["The Menders' Stead, Western Plaguelands"] = {
["fmLoc"] = {
["y"] = "0.63",
["x"] = "0.48",
},
["wmLoc"] = {
["y"] = "0.34",
["x"] = "0.48",
},
["name"] = "The Menders' Stead, Western Plaguelands",
["zmLoc"] = {
["y"] = "52.4",
["x"] = "50.52",
},
["timers"] = {
["Chillwind Camp, Western Plaguelands"] = 44,
["Hearthglen, Western Plaguelands"] = 45,
["Thondroril River, Eastern Plaguelands"] = 37,
["Plaguewood Tower, Eastern Plaguelands"] = 106,
["Crown Guard Tower, Eastern Plaguelands"] = 83,
["Andorhal, Western Plaguelands"] = 30,
["Dun Modr, Wetlands"] = 246,
["Stormfeather Outpost, The Hinterlands"] = 146,
},
["routes"] = {
"Andorhal, Western Plaguelands", -- [1]
"Chillwind Camp, Western Plaguelands", -- [2]
"Hearthglen, Western Plaguelands", -- [3]
"Thondroril River, Eastern Plaguelands", -- [4]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Andorhal, Western Plaguelands"] = {
["fmLoc"] = {
["y"] = "0.62",
["x"] = "0.47",
},
["wmLoc"] = {
["y"] = "0.36",
["x"] = "0.47",
},
["name"] = "Andorhal, Western Plaguelands",
["zmLoc"] = {
["y"] = "69.57",
["x"] = "39.44",
},
["timers"] = {
["Chillwind Camp, Western Plaguelands"] = 19,
["Crown Guard Tower, Eastern Plaguelands"] = 108,
["Morgan's Vigil, Burning Steppes"] = 444,
["Thelsamar, Loch Modan"] = 329,
["Hearthglen, Western Plaguelands"] = 70,
["Northpass Tower, Eastern Plaguelands"] = 165,
["Plaguewood Tower, Eastern Plaguelands"] = 132,
["Dustwind Dig, Badlands"] = 380,
["Aerie Peak, The Hinterlands"] = 80,
["The Menders' Stead, Western Plaguelands"] = 25,
["Thondroril River, Eastern Plaguelands"] = 61,
},
["routes"] = {
"Aerie Peak, The Hinterlands", -- [1]
"Chillwind Camp, Western Plaguelands", -- [2]
"The Menders' Stead, Western Plaguelands", -- [3]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Hearthglen, Western Plaguelands"] = {
["fmLoc"] = {
["y"] = "0.67",
["x"] = "0.47",
},
["wmLoc"] = {
["y"] = "0.3",
["x"] = "0.48",
},
["name"] = "Hearthglen, Western Plaguelands",
["zmLoc"] = {
["y"] = "18.37",
["x"] = "44.58",
},
["timers"] = {
["Chillwind Camp, Western Plaguelands"] = 89,
["Thondroril River, Eastern Plaguelands"] = 82,
["Plaguewood Tower, Eastern Plaguelands"] = 62,
["The Menders' Stead, Western Plaguelands"] = 45,
["Stormfeather Outpost, The Hinterlands"] = 191,
},
["routes"] = {
"Plaguewood Tower, Eastern Plaguelands", -- [1]
"The Menders' Stead, Western Plaguelands", -- [2]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Swamp of Sorrows"] = {
["Bogpaddle, Swamp of Sorrows"] = {
["fmLoc"] = {
["y"] = "0.23",
["x"] = "0.56",
},
["wmLoc"] = {
["y"] = "0.77",
["x"] = "0.54",
},
["name"] = "Bogpaddle, Swamp of Sorrows",
["zmLoc"] = {
["y"] = "12.05",
["x"] = "72.13",
},
["timers"] = {
["Thelsamar, Loch Modan"] = 222,
["Marshtide Watch, Swamp of Sorrows"] = 25,
["Thundermar, Twilight Highlands"] = 419,
["Shalewind Canyon, Redridge"] = 34,
["Morgan's Vigil, Burning Steppes"] = 82,
["Dustwind Dig, Badlands"] = 174,
["Victor's Point, Twilight Highlands"] = 472,
},
["routes"] = {
"Marshtide Watch, Swamp of Sorrows", -- [1]
"Morgan's Vigil, Burning Steppes", -- [2]
"Shalewind Canyon, Redridge", -- [3]
},
["factions"] = {
"Alliance", -- [1]
},
},
["The Harborage, Swamp of Sorrows"] = {
["fmLoc"] = {
["y"] = "0.22",
["x"] = "0.52",
},
["wmLoc"] = {
["y"] = "0.78",
["x"] = "0.51",
},
["name"] = "The Harborage, Swamp of Sorrows",
["zmLoc"] = {
["y"] = "34.86",
["x"] = "30.74",
},
["timers"] = {
["Bogpaddle, Swamp of Sorrows"] = 68,
["Marshtide Watch, Swamp of Sorrows"] = 39,
["Lakeshire, Redridge"] = 47,
},
["routes"] = {
"Lakeshire, Redridge", -- [1]
"Marshtide Watch, Swamp of Sorrows", -- [2]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Marshtide Watch, Swamp of Sorrows"] = {
["fmLoc"] = {
["y"] = "0.22",
["x"] = "0.55",
},
["wmLoc"] = {
["y"] = "0.78",
["x"] = "0.54",
},
["name"] = "Marshtide Watch, Swamp of Sorrows",
["zmLoc"] = {
["y"] = "38.37",
["x"] = "70",
},
["timers"] = {
["Sentinel Hill, Westfall"] = 216,
["Bogpaddle, Swamp of Sorrows"] = 31,
["Shalewind Canyon, Redridge"] = 65,
["Thelsamar, Loch Modan"] = 259,
["Dustwind Dig, Badlands"] = 205,
["Chiselgrip, Burning Steppes"] = 150,
["Eastvale Logging Camp, Elwynn"] = 127,
["Goldshire, Elwynn"] = 205,
["Nethergarde Keep, Blasted Lands"] = 44,
["Morgan's Vigil, Burning Steppes"] = 113,
["Lakeshire, Redridge"] = 87,
["Dragon's Mouth, Badlands"] = 169,
["Camp Everstill, Redridge"] = 90,
["Darkshire, Duskwood"] = 136,
["Greenwarden's Grove, Wetlands"] = 343,
["Rebel Camp, Stranglethorn Vale"] = 182,
["Iron Summit, Searing Gorge"] = 368,
["The Harborage, Swamp of Sorrows"] = 40,
["Stormwind, Elwynn"] = 225,
["Slabchisel's Survey, Wetlands"] = 320,
},
["routes"] = {
"Bogpaddle, Swamp of Sorrows", -- [1]
"Nethergarde Keep, Blasted Lands", -- [2]
"The Harborage, Swamp of Sorrows", -- [3]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Dun Morogh"] = {
["Kharanos, Dun Morogh"] = {
["fmLoc"] = {
["y"] = "0.37",
["x"] = "0.44",
},
["wmLoc"] = {
["y"] = "0.62",
["x"] = "0.45",
},
["name"] = "Kharanos, Dun Morogh",
["zmLoc"] = {
["y"] = "52.69",
["x"] = "53.75",
},
["timers"] = {
["Darkshire, Duskwood"] = 336,
["Ironforge, Dun Morogh"] = 45,
["Thelsamar, Loch Modan"] = 114,
["Gol'Bolar Quarry, Dun Morogh"] = 48,
["Menethil Harbor, Wetlands"] = 162,
["Thorium Point, Searing Gorge"] = 124,
["High Bank, Twilight Highlands"] = 328,
},
["routes"] = {
"Gol'Bolar Quarry, Dun Morogh", -- [1]
"Ironforge, Dun Morogh", -- [2]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Gol'Bolar Quarry, Dun Morogh"] = {
["fmLoc"] = {
["y"] = "0.37",
["x"] = "0.48",
},
["wmLoc"] = {
["y"] = "0.62",
["x"] = "0.48",
},
["name"] = "Gol'Bolar Quarry, Dun Morogh",
["zmLoc"] = {
["y"] = "54.29",
["x"] = "75.87",
},
["timers"] = {
["Thelsamar, Loch Modan"] = 172,
["Ironforge, Dun Morogh"] = 70,
["Firebeard's Patrol, Twilight Highlands"] = 384,
["Victor's Point, Twilight Highlands"] = 379,
["Kharanos, Dun Morogh"] = 44,
["High Bank, Twilight Highlands"] = 353,
},
["routes"] = {
"Ironforge, Dun Morogh", -- [1]
"Kharanos, Dun Morogh", -- [2]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Vashj'ir"] = {
["Voldrin's Hold, Vashj'ir"] = {
["fmLoc"] = {
["y"] = "0.32",
["x"] = "0.28",
},
["wmLoc"] = {
["y"] = "0.67",
["x"] = "0.34",
},
["name"] = "Voldrin's Hold, Vashj'ir",
["zmLoc"] = {
["y"] = "75.33",
["x"] = "69.51",
},
["routes"] = {
"Sandy Beach, Vashj'ir", -- [1]
},
["timers"] = {
["Sandy Beach, Vashj'ir"] = 70,
["Ironforge, Dun Morogh"] = 263,
["Kharanos, Dun Morogh"] = 309,
["High Bank, Twilight Highlands"] = 546,
},
},
},
},
["Outland"] = {
["Blade's Edge Mountains"] = {
["Sylvanaar, Blade's Edge Mountains"] = {
["fmLoc"] = {
["y"] = "0.65",
["x"] = "0.31",
},
["wmLoc"] = {
["y"] = "0.31",
["x"] = "0.35",
},
["name"] = "Sylvanaar, Blade's Edge Mountains",
["zmLoc"] = {
["y"] = "61.49",
["x"] = "37.8",
},
["timers"] = {
["Temple of Telhamat, Hellfire Peninsula"] = 164,
["Telaar, Nagrand"] = 207,
["Shatter Point, Hellfire Peninsula"] = 308,
["The Stormspire, Netherstorm"] = 162,
["Toshley's Station, Blade's Edge Mountains"] = 58,
["Orebor Harborage, Zangarmarsh"] = 66,
["Evergrove, Blade's Edge Mountains"] = 53,
["Hellfire Peninsula, The Dark Portal, Alliance"] = 316,
["Wildhammer Stronghold, Shadowmoon Valley"] = 333,
["Honor Hold, Hellfire Peninsula"] = 251,
["Telredor, Zangarmarsh"] = 82,
["Area 52, Netherstorm"] = 120,
["Shattrath, Terokkar Forest"] = 179,
["Cosmowrench, Netherstorm"] = 186,
["Allerian Stronghold, Terokkar Forest"] = 255,
},
["routes"] = {
"Area 52, Netherstorm", -- [1]
"Evergrove, Blade's Edge Mountains", -- [2]
"Orebor Harborage, Zangarmarsh", -- [3]
"Telredor, Zangarmarsh", -- [4]
"The Stormspire, Netherstorm", -- [5]
"Toshley's Station, Blade's Edge Mountains", -- [6]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Toshley's Station, Blade's Edge Mountains"] = {
["fmLoc"] = {
["y"] = "0.62",
["x"] = "0.41",
},
["wmLoc"] = {
["y"] = "0.34",
["x"] = "0.42",
},
["name"] = "Toshley's Station, Blade's Edge Mountains",
["zmLoc"] = {
["y"] = "70.4",
["x"] = "61.13",
},
["timers"] = {
["Temple of Telhamat, Hellfire Peninsula"] = 223,
["Shatter Point, Hellfire Peninsula"] = 368,
["Evergrove, Blade's Edge Mountains"] = 69,
["Honor Hold, Hellfire Peninsula"] = 276,
["Sylvanaar, Blade's Edge Mountains"] = 60,
["Area 52, Netherstorm"] = 84,
["Shattrath, Terokkar Forest"] = 205,
["Hellfire Peninsula, The Dark Portal, Alliance"] = 376,
["Telredor, Zangarmarsh"] = 107,
},
["routes"] = {
"Area 52, Netherstorm", -- [1]
"Evergrove, Blade's Edge Mountains", -- [2]
"Sylvanaar, Blade's Edge Mountains", -- [3]
"Telredor, Zangarmarsh", -- [4]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Evergrove, Blade's Edge Mountains"] = {
["fmLoc"] = {
["y"] = "0.72",
["x"] = "0.42",
},
["wmLoc"] = {
["y"] = "0.24",
["x"] = "0.42",
},
["name"] = "Evergrove, Blade's Edge Mountains",
["zmLoc"] = {
["y"] = "39.6",
["x"] = "61.69",
},
["timers"] = {
["Temple of Telhamat, Hellfire Peninsula"] = 267,
["Shatter Point, Hellfire Peninsula"] = 362,
["Allerian Stronghold, Terokkar Forest"] = 323,
["Toshley's Station, Blade's Edge Mountains"] = 78,
["Hellfire Peninsula, The Dark Portal, Alliance"] = 370,
["Sylvanaar, Blade's Edge Mountains"] = 54,
["Telredor, Zangarmarsh"] = 126,
["Shattrath, Terokkar Forest"] = 231,
["Area 52, Netherstorm"] = 77,
["Honor Hold, Hellfire Peninsula"] = 305,
},
["routes"] = {
"Area 52, Netherstorm", -- [1]
"Sylvanaar, Blade's Edge Mountains", -- [2]
"Toshley's Station, Blade's Edge Mountains", -- [3]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Zangarmarsh"] = {
["Telredor, Zangarmarsh"] = {
["fmLoc"] = {
["y"] = "0.49",
["x"] = "0.37",
},
["wmLoc"] = {
["y"] = "0.48",
["x"] = "0.39",
},
["name"] = "Telredor, Zangarmarsh",
["zmLoc"] = {
["y"] = "51.37",
["x"] = "67.81",
},
["timers"] = {
["Temple of Telhamat, Hellfire Peninsula"] = 82,
["Shatter Point, Hellfire Peninsula"] = 226,
["Allerian Stronghold, Terokkar Forest"] = 98,
["Toshley's Station, Blade's Edge Mountains"] = 69,
["Cosmowrench, Netherstorm"] = 220,
["Evergrove, Blade's Edge Mountains"] = 145,
["Orebor Harborage, Zangarmarsh"] = 62,
["Sylvanaar, Blade's Edge Mountains"] = 92,
["Honor Hold, Hellfire Peninsula"] = 169,
["Hellfire Peninsula, The Dark Portal, Alliance"] = 149,
["Area 52, Netherstorm"] = 168,
["Shattrath, Terokkar Forest"] = 98,
["Telaar, Nagrand"] = 125,
["The Stormspire, Netherstorm"] = 230,
},
["routes"] = {
"Orebor Harborage, Zangarmarsh", -- [1]
"Shattrath, Terokkar Forest", -- [2]
"Sylvanaar, Blade's Edge Mountains", -- [3]
"Telaar, Nagrand", -- [4]
"Temple of Telhamat, Hellfire Peninsula", -- [5]
"Toshley's Station, Blade's Edge Mountains", -- [6]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Orebor Harborage, Zangarmarsh"] = {
["fmLoc"] = {
["y"] = "0.55",
["x"] = "0.26",
},
["wmLoc"] = {
["y"] = "0.41",
["x"] = "0.32",
},
["name"] = "Orebor Harborage, Zangarmarsh",
["zmLoc"] = {
["y"] = "28.94",
["x"] = "41.29",
},
["timers"] = {
["Telaar, Nagrand"] = 179,
["The Stormspire, Netherstorm"] = 234,
["Cosmowrench, Netherstorm"] = 251,
["Honor Hold, Hellfire Peninsula"] = 223,
["Sylvanaar, Blade's Edge Mountains"] = 66,
["Allerian Stronghold, Terokkar Forest"] = 229,
["Telredor, Zangarmarsh"] = 54,
["Shattrath, Terokkar Forest"] = 150,
["Temple of Telhamat, Hellfire Peninsula"] = 137,
["Hellfire Peninsula, The Dark Portal, Alliance"] = 65,
},
["routes"] = {
"Sylvanaar, Blade's Edge Mountains", -- [1]
"Telredor, Zangarmarsh", -- [2]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Netherstorm"] = {
["Area 52, Netherstorm"] = {
["fmLoc"] = {
["y"] = "0.72",
["x"] = "0.57",
},
["wmLoc"] = {
["y"] = "0.23",
["x"] = "0.53",
},
["name"] = "Area 52, Netherstorm",
["zmLoc"] = {
["y"] = "63.99",
["x"] = "33.81",
},
["routes"] = {
"Cosmowrench, Netherstorm", -- [1]
"Evergrove, Blade's Edge Mountains", -- [2]
"Sylvanaar, Blade's Edge Mountains", -- [3]
"The Stormspire, Netherstorm", -- [4]
"Toshley's Station, Blade's Edge Mountains", -- [5]
},
["timers"] = {
["Allerian Stronghold, Terokkar Forest"] = 359,
["Toshley's Station, Blade's Edge Mountains"] = 93,
["Cosmowrench, Netherstorm"] = 67,
["Honor Hold, Hellfire Peninsula"] = 345,
["Sylvanaar, Blade's Edge Mountains"] = 128,
["The Stormspire, Netherstorm"] = 49,
["Telredor, Zangarmarsh"] = 210,
["Shattrath, Terokkar Forest"] = 268,
["Wildhammer Stronghold, Shadowmoon Valley"] = 464,
["Evergrove, Blade's Edge Mountains"] = 80,
},
["factions"] = {
"Alliance", -- [1]
},
},
["The Stormspire, Netherstorm"] = {
["fmLoc"] = {
["y"] = "0.81",
["x"] = "0.62",
},
["wmLoc"] = {
["y"] = "0.14",
["x"] = "0.57",
},
["name"] = "The Stormspire, Netherstorm",
["zmLoc"] = {
["y"] = "34.92",
["x"] = "45.26",
},
["routes"] = {
"Area 52, Netherstorm", -- [1]
"Cosmowrench, Netherstorm", -- [2]
"Sylvanaar, Blade's Edge Mountains", -- [3]
},
["timers"] = {
["Telaar, Nagrand"] = 362,
["Toshley's Station, Blade's Edge Mountains"] = 152,
["Evergrove, Blade's Edge Mountains"] = 135,
["Orebor Harborage, Zangarmarsh"] = 233,
["Wildhammer Stronghold, Shadowmoon Valley"] = 500,
["Sylvanaar, Blade's Edge Mountains"] = 167,
["Telredor, Zangarmarsh"] = 257,
["Area 52, Netherstorm"] = 55,
["Shattrath, Terokkar Forest"] = 319,
["Altar of Sha'tar, Shadowmoon Valley"] = 583,
["Cosmowrench, Netherstorm"] = 69,
},
["factions"] = {
"Alliance", -- [1]
},
},
["Cosmowrench, Netherstorm"] = {
["fmLoc"] = {
["y"] = "0.72",
["x"] = "0.71",
},
["wmLoc"] = {
["y"] = "0.24",
["x"] = "0.63",
},
["name"] = "Cosmowrench, Netherstorm",
["zmLoc"] = {
["y"] = "66.74",
["x"] = "65.21",
},
["timers"] = {
["Orebor Harborage, Zangarmarsh"] = 258,
["Sylvanaar, Blade's Edge Mountains"] = 192,
["Area 52, Netherstorm"] = 64,
["Allerian Stronghold, Terokkar Forest"] = 448,
["The Stormspire, Netherstorm"] = 62,
["Shattrath, Terokkar Forest"] = 365,
["Toshley's Station, Blade's Edge Mountains"] = 157,
["Telredor, Zangarmarsh"] = 272,
},
["routes"] = {
"Area 52, Netherstorm", -- [1]
"The Stormspire, Netherstorm", -- [2]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Shattrath City"] = {
["Shattrath, Terokkar Forest"] = {
["fmLoc"] = {
["y"] = "0.32",
["x"] = "0.43",
},
["wmLoc"] = {
["y"] = "0.65",
["x"] = "0.44",
},
["name"] = "Shattrath, Terokkar Forest",
["zmLoc"] = {
["y"] = "41.04",
["x"] = "63.9",
},
["timers"] = {
["Telaar, Nagrand"] = 89,
["Temple of Telhamat, Hellfire Peninsula"] = 172,
["Cosmowrench, Netherstorm"] = 293,
["Shatter Point, Hellfire Peninsula"] = 227,
["Allerian Stronghold, Terokkar Forest"] = 75,
["Toshley's Station, Blade's Edge Mountains"] = 235,
["Honor Hold, Hellfire Peninsula"] = 111,
["Evergrove, Blade's Edge Mountains"] = 198,
["Orebor Harborage, Zangarmarsh"] = 147,
["Wildhammer Stronghold, Shadowmoon Valley"] = 153,
["Telredor, Zangarmarsh"] = 85,
["Hellfire Peninsula, The Dark Portal, Alliance"] = 173,
["Area 52, Netherstorm"] = 240,
["Sylvanaar, Blade's Edge Mountains"] = 175,
["Altar of Sha'tar, Shadowmoon Valley"] = 235,
["The Stormspire, Netherstorm"] = 342,
},
["routes"] = {
"Allerian Stronghold, Terokkar Forest", -- [1]
"Honor Hold, Hellfire Peninsula", -- [2]
"Telaar, Nagrand", -- [3]
"Telredor, Zangarmarsh", -- [4]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Nagrand"] = {
["Telaar, Nagrand"] = {
["fmLoc"] = {
["y"] = "0.25",
["x"] = "0.27",
},
["wmLoc"] = {
["y"] = "0.73",
["x"] = "0.32",
},
["name"] = "Telaar, Nagrand",
["zmLoc"] = {
["y"] = "74.99",
["x"] = "54.23",
},
["routes"] = {
"Allerian Stronghold, Terokkar Forest", -- [1]
"Shattrath, Terokkar Forest", -- [2]
"Telredor, Zangarmarsh", -- [3]
},
["timers"] = {
["Temple of Telhamat, Hellfire Peninsula"] = 222,
["Shatter Point, Hellfire Peninsula"] = 256,
["Allerian Stronghold, Terokkar Forest"] = 122,
["Honor Hold, Hellfire Peninsula"] = 201,
["Sylvanaar, Blade's Edge Mountains"] = 232,
["Wildhammer Stronghold, Shadowmoon Valley"] = 201,
["Orebor Harborage, Zangarmarsh"] = 192,
["Telredor, Zangarmarsh"] = 130,
["Shattrath, Terokkar Forest"] = 88,
["Area 52, Netherstorm"] = 281,
["Hellfire Peninsula, The Dark Portal, Alliance"] = 262,
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Hellfire Peninsula"] = {
["Honor Hold, Hellfire Peninsula"] = {
["fmLoc"] = {
["y"] = "0.42",
["x"] = "0.64",
},
["wmLoc"] = {
["y"] = "0.55",
["x"] = "0.58",
},
["name"] = "Honor Hold, Hellfire Peninsula",
["zmLoc"] = {
["y"] = "62.46",
["x"] = "54.69",
},
["timers"] = {
["The Stormspire, Netherstorm"] = 418,
["Temple of Telhamat, Hellfire Peninsula"] = 76,
["Evergrove, Blade's Edge Mountains"] = 258,
["Shatter Point, Hellfire Peninsula"] = 57,
["Allerian Stronghold, Terokkar Forest"] = 118,
["Toshley's Station, Blade's Edge Mountains"] = 265,
["Wildhammer Stronghold, Shadowmoon Valley"] = 197,
["Cosmowrench, Netherstorm"] = 436,
["Orebor Harborage, Zangarmarsh"] = 216,
["Sylvanaar, Blade's Edge Mountains"] = 248,
["Area 52, Netherstorm"] = 316,
["Hellfire Peninsula, The Dark Portal, Alliance"] = 64,
["Telredor, Zangarmarsh"] = 157,
["Shattrath, Terokkar Forest"] = 120,
["Altar of Sha'tar, Shadowmoon Valley"] = 279,
["Telaar, Nagrand"] = 239,
},
["routes"] = {
"Allerian Stronghold, Terokkar Forest", -- [1]
"Hellfire Peninsula, The Dark Portal, Alliance", -- [2]
"Shatter Point, Hellfire Peninsula", -- [3]
"Shattrath, Terokkar Forest", -- [4]
"Temple of Telhamat, Hellfire Peninsula", -- [5]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Temple of Telhamat, Hellfire Peninsula"] = {
["fmLoc"] = {
["y"] = "0.49",
["x"] = "0.52",
},
["wmLoc"] = {
["y"] = "0.48",
["x"] = "0.5",
},
["name"] = "Temple of Telhamat, Hellfire Peninsula",
["zmLoc"] = {
["y"] = "37.2",
["x"] = "25.18",
},
["timers"] = {
["Telaar, Nagrand"] = 206,
["Shatter Point, Hellfire Peninsula"] = 143,
["Allerian Stronghold, Terokkar Forest"] = 206,
["Toshley's Station, Blade's Edge Mountains"] = 231,
["Hellfire Peninsula, The Dark Portal, Alliance"] = 107,
["Honor Hold, Hellfire Peninsula"] = 88,
["Telredor, Zangarmarsh"] = 81,
["Shattrath, Terokkar Forest"] = 192,
["Orebor Harborage, Zangarmarsh"] = 136,
["Area 52, Netherstorm"] = 293,
},
["routes"] = {
"Honor Hold, Hellfire Peninsula", -- [1]
"Telredor, Zangarmarsh", -- [2]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Hellfire Peninsula, The Dark Portal, Alliance"] = {
["fmLoc"] = {
["y"] = "0.45",
["x"] = "0.78",
},
["wmLoc"] = {
["y"] = "0.52",
["x"] = "0.68",
},
["name"] = "Hellfire Peninsula, The Dark Portal, Alliance",
["zmLoc"] = {
["y"] = "52.44",
["x"] = "87.39",
},
["routes"] = {
"Honor Hold, Hellfire Peninsula", -- [1]
"Shatter Point, Hellfire Peninsula", -- [2]
"Temple of Telhamat, Hellfire Peninsula", -- [3]
},
["timers"] = {
["Temple of Telhamat, Hellfire Peninsula"] = 129,
["Evergrove, Blade's Edge Mountains"] = 376,
["Shatter Point, Hellfire Peninsula"] = 28,
["Allerian Stronghold, Terokkar Forest"] = 188,
["Toshley's Station, Blade's Edge Mountains"] = 272,
["Wildhammer Stronghold, Shadowmoon Valley"] = 268,
["Cosmowrench, Netherstorm"] = 443,
["Orebor Harborage, Zangarmarsh"] = 278,
["Sylvanaar, Blade's Edge Mountains"] = 294,
["Honor Hold, Hellfire Peninsula"] = 73,
["Telredor, Zangarmarsh"] = 223,
["Area 52, Netherstorm"] = 376,
["Shattrath, Terokkar Forest"] = 193,
["Altar of Sha'tar, Shadowmoon Valley"] = 351,
["Telaar, Nagrand"] = 283,
},
["factions"] = {
"Alliance", -- [1]
},
},
["Shatter Point, Hellfire Peninsula"] = {
["fmLoc"] = {
["y"] = "0.5",
["x"] = "0.74",
},
["wmLoc"] = {
["y"] = "0.47",
["x"] = "0.65",
},
["name"] = "Shatter Point, Hellfire Peninsula",
["zmLoc"] = {
["y"] = "34.99",
["x"] = "78.47",
},
["timers"] = {
["Honor Hold, Hellfire Peninsula"] = 57,
["Temple of Telhamat, Hellfire Peninsula"] = 133,
["Hellfire Peninsula, The Dark Portal, Alliance"] = 33,
["Shattrath, Terokkar Forest"] = 177,
},
["routes"] = {
"Hellfire Peninsula, The Dark Portal, Alliance", -- [1]
"Honor Hold, Hellfire Peninsula", -- [2]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Shadowmoon Valley"] = {
["Wildhammer Stronghold, Shadowmoon Valley"] = {
["fmLoc"] = {
["y"] = "0.15",
["x"] = "0.69",
},
["wmLoc"] = {
["y"] = "0.84",
["x"] = "0.62",
},
["name"] = "Wildhammer Stronghold, Shadowmoon Valley",
["zmLoc"] = {
["y"] = "55.5",
["x"] = "37.59",
},
["routes"] = {
"Allerian Stronghold, Terokkar Forest", -- [1]
"Altar of Sha'tar, Shadowmoon Valley", -- [2]
"Sanctum of the Stars, Shadowmoon Valley", -- [3]
},
["timers"] = {
["The Stormspire, Netherstorm"] = 522,
["Telaar, Nagrand"] = 250,
["Cosmowrench, Netherstorm"] = 536,
["Shatter Point, Hellfire Peninsula"] = 256,
["Allerian Stronghold, Terokkar Forest"] = 102,
["Toshley's Station, Blade's Edge Mountains"] = 413,
["Orebor Harborage, Zangarmarsh"] = 318,
["Sanctum of the Stars, Shadowmoon Valley"] = 42,
["Honor Hold, Hellfire Peninsula"] = 198,
["Sylvanaar, Blade's Edge Mountains"] = 352,
["Area 52, Netherstorm"] = 412,
["Evergrove, Blade's Edge Mountains"] = 414,
["Telredor, Zangarmarsh"] = 262,
["Shattrath, Terokkar Forest"] = 174,
["Altar of Sha'tar, Shadowmoon Valley"] = 84,
["Hellfire Peninsula, The Dark Portal, Alliance"] = 264,
},
["factions"] = {
"Alliance", -- [1]
},
},
["Altar of Sha'tar, Shadowmoon Valley"] = {
["fmLoc"] = {
["y"] = "0.22",
["x"] = "0.8",
},
["wmLoc"] = {
["y"] = "0.76",
["x"] = "0.7",
},
["name"] = "Altar of Sha'tar, Shadowmoon Valley",
["zmLoc"] = {
["y"] = "30.46",
["x"] = "63.3",
},
["timers"] = {
["Temple of Telhamat, Hellfire Peninsula"] = 356,
["Allerian Stronghold, Terokkar Forest"] = 183,
["Toshley's Station, Blade's Edge Mountains"] = 494,
["Evergrove, Blade's Edge Mountains"] = 486,
["Honor Hold, Hellfire Peninsula"] = 277,
["Wildhammer Stronghold, Shadowmoon Valley"] = 81,
["Orebor Harborage, Zangarmarsh"] = 397,
["Sylvanaar, Blade's Edge Mountains"] = 436,
["Telredor, Zangarmarsh"] = 344,
["Shattrath, Terokkar Forest"] = 255,
["The Stormspire, Netherstorm"] = 605,
["Telaar, Nagrand"] = 330,
},
["routes"] = {
"Wildhammer Stronghold, Shadowmoon Valley", -- [1]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Sanctum of the Stars, Shadowmoon Valley"] = {
["fmLoc"] = {
["y"] = "0.14",
["x"] = "0.77",
},
["wmLoc"] = {
["y"] = "0.84",
["x"] = "0.67",
},
["name"] = "Sanctum of the Stars, Shadowmoon Valley",
["zmLoc"] = {
["y"] = "57.86",
["x"] = "56.3",
},
["timers"] = {
["Hellfire Peninsula, The Dark Portal, Alliance"] = 305,
["Wildhammer Stronghold, Shadowmoon Valley"] = 42,
["Honor Hold, Hellfire Peninsula"] = 239,
},
["routes"] = {
"Wildhammer Stronghold, Shadowmoon Valley", -- [1]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Terokkar Forest"] = {
["Allerian Stronghold, Terokkar Forest"] = {
["fmLoc"] = {
["y"] = "0.23",
["x"] = "0.55",
},
["wmLoc"] = {
["y"] = "0.75",
["x"] = "0.52",
},
["name"] = "Allerian Stronghold, Terokkar Forest",
["zmLoc"] = {
["y"] = "55.38",
["x"] = "59.45",
},
["timers"] = {
["Telaar, Nagrand"] = 150,
["The Stormspire, Netherstorm"] = 361,
["Evergrove, Blade's Edge Mountains"] = 307,
["Honor Hold, Hellfire Peninsula"] = 97,
["Wildhammer Stronghold, Shadowmoon Valley"] = 80,
["Temple of Telhamat, Hellfire Peninsula"] = 173,
["Telredor, Zangarmarsh"] = 158,
["Shattrath, Terokkar Forest"] = 75,
["Sylvanaar, Blade's Edge Mountains"] = 251,
["Orebor Harborage, Zangarmarsh"] = 214,
},
["routes"] = {
"Honor Hold, Hellfire Peninsula", -- [1]
"Shattrath, Terokkar Forest", -- [2]
"Telaar, Nagrand", -- [3]
"Wildhammer Stronghold, Shadowmoon Valley", -- [4]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
},
["Kalimdor"] = {
["Azuremyst Isle"] = {
["Azure Watch, Azuremyst Isle"] = {
["fmLoc"] = {
["y"] = "0.73",
["x"] = "0.24",
},
["wmLoc"] = {
["y"] = "0.27",
["x"] = "0.32",
},
["name"] = "Azure Watch, Azuremyst Isle",
["zmLoc"] = {
["y"] = "49.12",
["x"] = "49.65",
},
["timers"] = {
["Dolanaar, Teldrassil"] = 304,
["Moonglade"] = 300,
["Everlook, Winterspring"] = 414,
["Lor'danel, Darkshore"] = 190,
["The Exodar"] = 41,
},
["routes"] = {
"The Exodar", -- [1]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Moonglade"] = {
["Moonglade"] = {
["fmLoc"] = {
["y"] = "0.79",
["x"] = "0.55",
},
["wmLoc"] = {
["y"] = "0.21",
["x"] = "0.53",
},
["name"] = "Moonglade",
["zmLoc"] = {
["y"] = "67.17",
["x"] = "48.01",
},
["timers"] = {
["Rut'theran Village, Teldrassil"] = 146,
["Everlook, Winterspring"] = 120,
["Nordrassil, Hyjal"] = 141,
["Talonbranch Glade, Felwood"] = 65,
["Lor'danel, Darkshore"] = 85,
},
["routes"] = {
"Everlook, Winterspring", -- [1]
"Lor'danel, Darkshore", -- [2]
"Nordrassil, Hyjal", -- [3]
"Talonbranch Glade, Felwood", -- [4]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Thousand Needles"] = {
["Fizzle & Pozzik's Speedbarge, Thousand Needles"] = {
["fmLoc"] = {
["y"] = "0.23",
["x"] = "0.61",
},
["wmLoc"] = {
["y"] = "0.76",
["x"] = "0.57",
},
["name"] = "Fizzle & Pozzik's Speedbarge, Thousand Needles",
["zmLoc"] = {
["y"] = "71.88",
["x"] = "79.09",
},
["timers"] = {
["Shadebough, Feralas"] = 181,
["Gunstan's Dig, Tanaris"] = 132,
["Theramore, Dustwallow Marsh"] = 126,
["Gadgetzan, Tanaris"] = 43,
["Marshal's Stand, Un'Goro Crater"] = 141,
["Bootlegger Outpost, Tanaris"] = 97,
["Mudsprocket, Dustwallow Marsh"] = 73,
["Cenarion Hold, Silithus"] = 229,
["Ramkahen, Uldum"] = 218,
},
["routes"] = {
"Gadgetzan, Tanaris", -- [1]
"Mudsprocket, Dustwallow Marsh", -- [2]
"Shadebough, Feralas", -- [3]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Winterspring"] = {
["Everlook, Winterspring"] = {
["fmLoc"] = {
["y"] = "0.76",
["x"] = "0.64",
},
["wmLoc"] = {
["y"] = "0.24",
["x"] = "0.59",
},
["name"] = "Everlook, Winterspring",
["zmLoc"] = {
["y"] = "48.68",
["x"] = "60.98",
},
["timers"] = {
["Rut'theran Village, Teldrassil"] = 257,
["Moonglade"] = 114,
["Lor'danel, Darkshore"] = 199,
["Whisperwind Grove, Felwood"] = 164,
["Talonbranch Glade, Felwood"] = 111,
["Grove of the Ancients, Darkshore"] = 232,
["Astranaar, Ashenvale"] = 316,
["Stardust Spire, Ashenvale"] = 360,
["Nordrassil, Hyjal"] = 130,
["Wildheart Point, Felwood"] = 218,
},
["routes"] = {
"Moonglade", -- [1]
"Nordrassil, Hyjal", -- [2]
"Talonbranch Glade, Felwood", -- [3]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Bloodmyst Isle"] = {
["Blood Watch, Bloodmyst Isle"] = {
["fmLoc"] = {
["y"] = "0.82",
["x"] = "0.21",
},
["wmLoc"] = {
["y"] = "0.18",
["x"] = "0.31",
},
["name"] = "Blood Watch, Bloodmyst Isle",
["zmLoc"] = {
["y"] = "54.02",
["x"] = "57.61",
},
["timers"] = {
["The Exodar"] = 101,
},
["routes"] = {
"The Exodar", -- [1]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Teldrassil"] = {
["Rut'theran Village, Teldrassil"] = {
["fmLoc"] = {
["y"] = "0.83",
["x"] = "0.41",
},
["wmLoc"] = {
["y"] = "0.18",
["x"] = "0.43",
},
["name"] = "Rut'theran Village, Teldrassil",
["zmLoc"] = {
["y"] = "88.44",
["x"] = "55.39",
},
["timers"] = {
["Lor'danel, Darkshore"] = 61,
["Darnassus, Teldrassil"] = 112,
["Blood Watch, Bloodmyst Isle"] = 190,
["The Exodar"] = 103,
},
["routes"] = {
"Darnassus, Teldrassil", -- [1]
"Lor'danel, Darkshore", -- [2]
"The Exodar", -- [3]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Dolanaar, Teldrassil"] = {
["fmLoc"] = {
["y"] = "0.89",
["x"] = "0.41",
},
["wmLoc"] = {
["y"] = "0.11",
["x"] = "0.43",
},
["name"] = "Dolanaar, Teldrassil",
["zmLoc"] = {
["y"] = "50.45",
["x"] = "55.48",
},
["timers"] = {
["Rut'theran Village, Teldrassil"] = 171,
["Blood Watch, Bloodmyst Isle"] = 363,
["Darnassus, Teldrassil"] = 61,
["Lor'danel, Darkshore"] = 231,
["The Exodar"] = 272,
},
["routes"] = {
"Darnassus, Teldrassil", -- [1]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Un'Goro Crater"] = {
["Marshal's Stand, Un'Goro Crater"] = {
["fmLoc"] = {
["y"] = "0.17",
["x"] = "0.51",
},
["wmLoc"] = {
["y"] = "0.82",
["x"] = "0.5",
},
["name"] = "Marshal's Stand, Un'Goro Crater",
["zmLoc"] = {
["y"] = "64.26",
["x"] = "55.9",
},
["timers"] = {
["Dreamer's Rest, Feralas"] = 293,
["Cenarion Hold, Silithus"] = 121,
["Gadgetzan, Tanaris"] = 91,
["Mossy Pile, Un'Goro Crater"] = 39,
["Tower of Estulan, Feralas"] = 271,
["Feathermoon, Feralas"] = 240,
},
["routes"] = {
"Cenarion Hold, Silithus", -- [1]
"Gadgetzan, Tanaris", -- [2]
"Mossy Pile, Un'Goro Crater", -- [3]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Mossy Pile, Un'Goro Crater"] = {
["fmLoc"] = {
["y"] = "0.2",
["x"] = "0.49",
},
["wmLoc"] = {
["y"] = "0.8",
["x"] = "0.49",
},
["name"] = "Mossy Pile, Un'Goro Crater",
["zmLoc"] = {
["y"] = "40.26",
["x"] = "44.05",
},
["timers"] = {
["Gadgetzan, Tanaris"] = 98,
["Cenarion Hold, Silithus"] = 82,
["Marshal's Stand, Un'Goro Crater"] = 29,
["Nijel's Point, Desolace"] = 394,
},
["routes"] = {
"Cenarion Hold, Silithus", -- [1]
"Gadgetzan, Tanaris", -- [2]
"Marshal's Stand, Un'Goro Crater", -- [3]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Southern Barrens"] = {
["Northwatch Hold, Southern Barrens"] = {
["fmLoc"] = {
["y"] = "0.4",
["x"] = "0.59",
},
["wmLoc"] = {
["y"] = "0.6",
["x"] = "0.56",
},
["name"] = "Northwatch Hold, Southern Barrens",
["zmLoc"] = {
["y"] = "47.11",
["x"] = "66.34",
},
["timers"] = {
["Ratchet, The Barrens"] = 46,
["Theramore, Dustwallow Marsh"] = 73,
["Stardust Spire, Ashenvale"] = 217,
["Honor's Stand, Southern Barrens"] = 104,
["Fort Triumph, Southern Barrens"] = 77,
},
["routes"] = {
"Fort Triumph, Southern Barrens", -- [1]
"Honor's Stand, Southern Barrens", -- [2]
"Ratchet, The Barrens", -- [3]
"Theramore, Dustwallow Marsh", -- [4]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Honor's Stand, Southern Barrens"] = {
["fmLoc"] = {
["y"] = "0.47",
["x"] = "0.51",
},
["wmLoc"] = {
["y"] = "0.53",
["x"] = "0.5",
},
["name"] = "Honor's Stand, Southern Barrens",
["zmLoc"] = {
["y"] = "10.91",
["x"] = "38.97",
},
["timers"] = {
["Ratchet, The Barrens"] = 86,
["Stardust Spire, Ashenvale"] = 113,
["Northwatch Expedition Base Camp, Stonetalon Mountains"] = 58,
["Fort Triumph, Southern Barrens"] = 103,
["Northwatch Hold, Southern Barrens"] = 101,
},
["routes"] = {
"Fort Triumph, Southern Barrens", -- [1]
"Northwatch Expedition Base Camp, Stonetalon Mountains", -- [2]
"Northwatch Hold, Southern Barrens", -- [3]
"Ratchet, The Barrens", -- [4]
"Stardust Spire, Ashenvale", -- [5]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Fort Triumph, Southern Barrens"] = {
["fmLoc"] = {
["y"] = "0.35",
["x"] = "0.54",
},
["wmLoc"] = {
["y"] = "0.65",
["x"] = "0.52",
},
["name"] = "Fort Triumph, Southern Barrens",
["zmLoc"] = {
["y"] = "67.84",
["x"] = "49.17",
},
["timers"] = {
["Northwatch Hold, Southern Barrens"] = 76,
["Mudsprocket, Dustwallow Marsh"] = 66,
["Honor's Stand, Southern Barrens"] = 104,
["Marshal's Stand, Un'Goro Crater"] = 265,
["Bootlegger Outpost, Tanaris"] = 225,
},
["routes"] = {
"Honor's Stand, Southern Barrens", -- [1]
"Mudsprocket, Dustwallow Marsh", -- [2]
"Northwatch Hold, Southern Barrens", -- [3]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Dustwallow Marsh"] = {
["Theramore, Dustwallow Marsh"] = {
["fmLoc"] = {
["y"] = "0.33",
["x"] = "0.63",
},
["wmLoc"] = {
["y"] = "0.67",
["x"] = "0.58",
},
["name"] = "Theramore, Dustwallow Marsh",
["zmLoc"] = {
["y"] = "51.38",
["x"] = "67.49",
},
["timers"] = {
["Shadebough, Feralas"] = 202,
["Gunstan's Dig, Tanaris"] = 242,
["Northwatch Hold, Southern Barrens"] = 81,
["Lor'danel, Darkshore"] = 500,
["Gadgetzan, Tanaris"] = 154,
["Bootlegger Outpost, Tanaris"] = 208,
["Fizzle & Pozzik's Speedbarge, Thousand Needles"] = 126,
["Thunk's Abode, Desolace"] = 341,
["Ratchet, The Barrens"] = 115,
["Astranaar, Ashenvale"] = 370,
["Nijel's Point, Desolace"] = 332,
["Mudsprocket, Dustwallow Marsh"] = 64,
["Northwatch Expedition Base Camp, Stonetalon Mountains"] = 243,
["Honor's Stand, Southern Barrens"] = 185,
["Fort Triumph, Southern Barrens"] = 131,
["Ramkahen, Uldum"] = 327,
},
["routes"] = {
"Astranaar, Ashenvale", -- [1]
"Gadgetzan, Tanaris", -- [2]
"Lor'danel, Darkshore", -- [3]
"Mudsprocket, Dustwallow Marsh", -- [4]
"Nijel's Point, Desolace", -- [5]
"Northwatch Hold, Southern Barrens", -- [6]
"Ratchet, The Barrens", -- [7]
"Shadebough, Feralas", -- [8]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Mudsprocket, Dustwallow Marsh"] = {
["fmLoc"] = {
["y"] = "0.3",
["x"] = "0.58",
},
["wmLoc"] = {
["y"] = "0.7",
["x"] = "0.55",
},
["name"] = "Mudsprocket, Dustwallow Marsh",
["zmLoc"] = {
["y"] = "72.36",
["x"] = "42.87",
},
["timers"] = {
["Shadebough, Feralas"] = 144,
["Theramore, Dustwallow Marsh"] = 53,
["Bootlegger Outpost, Tanaris"] = 159,
["Gadgetzan, Tanaris"] = 104,
["Honor's Stand, Southern Barrens"] = 170,
["Fort Triumph, Southern Barrens"] = 67,
["Fizzle & Pozzik's Speedbarge, Thousand Needles"] = 62,
},
["routes"] = {
"Fizzle & Pozzik's Speedbarge, Thousand Needles", -- [1]
"Fort Triumph, Southern Barrens", -- [2]
"Shadebough, Feralas", -- [3]
"Theramore, Dustwallow Marsh", -- [4]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Felwood"] = {
["Talonbranch Glade, Felwood"] = {
["fmLoc"] = {
["y"] = "0.74",
["x"] = "0.52",
},
["wmLoc"] = {
["y"] = "0.26",
["x"] = "0.51",
},
["name"] = "Talonbranch Glade, Felwood",
["zmLoc"] = {
["y"] = "25.31",
["x"] = "60.57",
},
["timers"] = {
["Shrine of Aessina, Hyjal"] = 289,
["Moonglade"] = 71,
["Lor'danel, Darkshore"] = 116,
["Whisperwind Grove, Felwood"] = 51,
["Grove of the Ancients, Darkshore"] = 121,
["Emerald Sanctuary, Felwood"] = 128,
["Shrine of Aviana, Hyjal"] = 260,
["Nordrassil, Hyjal"] = 212,
["Wildheart Point, Felwood"] = 112,
["Everlook, Winterspring"] = 110,
},
["routes"] = {
"Emerald Sanctuary, Felwood", -- [1]
"Everlook, Winterspring", -- [2]
"Grove of the Ancients, Darkshore", -- [3]
"Lor'danel, Darkshore", -- [4]
"Moonglade", -- [5]
"Whisperwind Grove, Felwood", -- [6]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Whisperwind Grove, Felwood"] = {
["fmLoc"] = {
["y"] = "0.73",
["x"] = "0.48",
},
["wmLoc"] = {
["y"] = "0.27",
["x"] = "0.48",
},
["name"] = "Whisperwind Grove, Felwood",
["zmLoc"] = {
["y"] = "28.67",
["x"] = "43.59",
},
["timers"] = {
["Wildheart Point, Felwood"] = 60,
["Lor'danel, Darkshore"] = 172,
["Nordrassil, Hyjal"] = 271,
["Talonbranch Glade, Felwood"] = 59,
["Emerald Sanctuary, Felwood"] = 90,
},
["routes"] = {
"Emerald Sanctuary, Felwood", -- [1]
"Talonbranch Glade, Felwood", -- [2]
"Wildheart Point, Felwood", -- [3]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Wildheart Point, Felwood"] = {
["fmLoc"] = {
["y"] = "0.68",
["x"] = "0.48",
},
["wmLoc"] = {
["y"] = "0.32",
["x"] = "0.48",
},
["name"] = "Wildheart Point, Felwood",
["zmLoc"] = {
["y"] = "61.9",
["x"] = "44.25",
},
["timers"] = {
["Shrine of Aessina, Hyjal"] = 307,
["Gates of Sothann, Hyjal"] = 224,
["Whisperwind Grove, Felwood"] = 68,
["Grove of the Ancients, Darkshore"] = 52,
["Astranaar, Ashenvale"] = 119,
["Forest Song, Ashenvale"] = 141,
["Stardust Spire, Ashenvale"] = 162,
["Shrine of Aviana, Hyjal"] = 269,
["Mossy Pile, Un'Goro Crater"] = 630,
["Emerald Sanctuary, Felwood"] = 35,
["Mudsprocket, Dustwallow Marsh"] = 435,
},
["routes"] = {
"Emerald Sanctuary, Felwood", -- [1]
"Grove of the Ancients, Darkshore", -- [2]
"Whisperwind Grove, Felwood", -- [3]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Emerald Sanctuary, Felwood"] = {
["fmLoc"] = {
["y"] = "0.65",
["x"] = "0.5",
},
["wmLoc"] = {
["y"] = "0.35",
["x"] = "0.49",
},
["name"] = "Emerald Sanctuary, Felwood",
["zmLoc"] = {
["y"] = "80.77",
["x"] = "51.5",
},
["timers"] = {
["Whisperwind Grove, Felwood"] = 98,
["Oasis of Vir'sar, Uldum"] = 590,
["Grove of the Ancients, Darkshore"] = 78,
["Astranaar, Ashenvale"] = 84,
["Forest Song, Ashenvale"] = 107,
["Talonbranch Glade, Felwood"] = 136,
["Shrine of Aviana, Hyjal"] = 234,
["Blackfathom Camp, Ashenvale"] = 96,
["Wildheart Point, Felwood"] = 43,
["Marshal's Stand, Un'Goro Crater"] = 601,
},
["routes"] = {
"Astranaar, Ashenvale", -- [1]
"Blackfathom Camp, Ashenvale", -- [2]
"Forest Song, Ashenvale", -- [3]
"Grove of the Ancients, Darkshore", -- [4]
"Talonbranch Glade, Felwood", -- [5]
"Whisperwind Grove, Felwood", -- [6]
"Wildheart Point, Felwood", -- [7]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Darkshore"] = {
["Lor'danel, Darkshore"] = {
["fmLoc"] = {
["y"] = "0.79",
["x"] = "0.46",
},
["wmLoc"] = {
["y"] = "0.21",
["x"] = "0.47",
},
["name"] = "Lor'danel, Darkshore",
["zmLoc"] = {
["y"] = "17.7",
["x"] = "51.71",
},
["timers"] = {
["Theramore, Dustwallow Marsh"] = 502,
["Moonglade"] = 92,
["Grove of the Ancients, Darkshore"] = 93,
["Astranaar, Ashenvale"] = 226,
["Nijel's Point, Desolace"] = 348,
["Everlook, Winterspring"] = 203,
["Thal'darah Overlook, Stonetalon Mountains"] = 268,
["Wildheart Point, Felwood"] = 151,
["Azure Watch, Azuremyst Isle"] = 187,
["Rut'theran Village, Teldrassil"] = 60,
["Emerald Sanctuary, Felwood"] = 174,
["Thunk's Abode, Desolace"] = 345,
["The Exodar"] = 163,
["Ratchet, The Barrens"] = 371,
["Whisperwind Grove, Felwood"] = 148,
["Mirkfallon Post, Stonetalon Mountains"] = 297,
["Feathermoon, Feralas"] = 495,
["Dreamer's Rest, Feralas"] = 450,
["Farwatcher's Glen, Stonetalon Mountains"] = 319,
["Blood Watch, Bloodmyst Isle"] = 252,
["Shrine of Aessina, Hyjal"] = 310,
["Shrine of Aviana, Hyjal"] = 281,
["Karnum's Glade, Desolace"] = 364,
["Blackfathom Camp, Ashenvale"] = 158,
["Talonbranch Glade, Felwood"] = 96,
},
["routes"] = {
"Astranaar, Ashenvale", -- [1]
"Feathermoon, Feralas", -- [2]
"Grove of the Ancients, Darkshore", -- [3]
"Moonglade", -- [4]
"Nijel's Point, Desolace", -- [5]
"Rut'theran Village, Teldrassil", -- [6]
"Talonbranch Glade, Felwood", -- [7]
"Thal'darah Overlook, Stonetalon Mountains", -- [8]
"Theramore, Dustwallow Marsh", -- [9]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Grove of the Ancients, Darkshore"] = {
["fmLoc"] = {
["y"] = "0.69",
["x"] = "0.44",
},
["wmLoc"] = {
["y"] = "0.31",
["x"] = "0.45",
},
["name"] = "Grove of the Ancients, Darkshore",
["zmLoc"] = {
["y"] = "75.45",
["x"] = "44.38",
},
["timers"] = {
["Shrine of Aessina, Hyjal"] = 353,
["Gates of Sothann, Hyjal"] = 270,
["Lor'danel, Darkshore"] = 93,
["Whisperwind Grove, Felwood"] = 124,
["Talonbranch Glade, Felwood"] = 136,
["Thal'darah Overlook, Stonetalon Mountains"] = 163,
["Blackfathom Camp, Ashenvale"] = 65,
["Astranaar, Ashenvale"] = 84,
["Forest Song, Ashenvale"] = 188,
["Mudsprocket, Dustwallow Marsh"] = 400,
["Emerald Sanctuary, Felwood"] = 81,
["Honor's Stand, Southern Barrens"] = 229,
["Wildheart Point, Felwood"] = 58,
["Stardust Spire, Ashenvale"] = 128,
},
["routes"] = {
"Astranaar, Ashenvale", -- [1]
"Blackfathom Camp, Ashenvale", -- [2]
"Emerald Sanctuary, Felwood", -- [3]
"Lor'danel, Darkshore", -- [4]
"Talonbranch Glade, Felwood", -- [5]
"Thal'darah Overlook, Stonetalon Mountains", -- [6]
"Wildheart Point, Felwood", -- [7]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Desolace"] = {
["Nijel's Point, Desolace"] = {
["fmLoc"] = {
["y"] = "0.49",
["x"] = "0.39",
},
["wmLoc"] = {
["y"] = "0.51",
["x"] = "0.42",
},
["name"] = "Nijel's Point, Desolace",
["zmLoc"] = {
["y"] = "10.43",
["x"] = "64.67",
},
["timers"] = {
["Theramore, Dustwallow Marsh"] = 309,
["Ethel Rethor, Desolace"] = 48,
["Thal'darah Overlook, Stonetalon Mountains"] = 101,
["Astranaar, Ashenvale"] = 144,
["Stardust Spire, Ashenvale"] = 105,
["Northwatch Expedition Base Camp, Stonetalon Mountains"] = 82,
["Honor's Stand, Southern Barrens"] = 132,
["Thargad's Camp, Desolace"] = 82,
["Lor'danel, Darkshore"] = 337,
["Mirkfallon Post, Stonetalon Mountains"] = 97,
["Thunk's Abode, Desolace"] = 31,
["Dreamer's Rest, Feralas"] = 136,
["Farwatcher's Glen, Stonetalon Mountains"] = 52,
["Feathermoon, Feralas"] = 201,
["Windshear Hold, Stonetalon Mountains"] = 74,
["Karnum's Glade, Desolace"] = 50,
["Nordrassil, Hyjal"] = 558,
["Fizzle & Pozzik's Speedbarge, Thousand Needles"] = 363,
["Ratchet, The Barrens"] = 218,
},
["routes"] = {
"Ethel Rethor, Desolace", -- [1]
"Farwatcher's Glen, Stonetalon Mountains", -- [2]
"Feathermoon, Feralas", -- [3]
"Karnum's Glade, Desolace", -- [4]
"Lor'danel, Darkshore", -- [5]
"Northwatch Expedition Base Camp, Stonetalon Mountains", -- [6]
"Stardust Spire, Ashenvale", -- [7]
"Thal'darah Overlook, Stonetalon Mountains", -- [8]
"Thargad's Camp, Desolace", -- [9]
"Theramore, Dustwallow Marsh", -- [10]
"Thunk's Abode, Desolace", -- [11]
"Windshear Hold, Stonetalon Mountains", -- [12]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Ethel Rethor, Desolace"] = {
["fmLoc"] = {
["y"] = "0.47",
["x"] = "0.34",
},
["wmLoc"] = {
["y"] = "0.53",
["x"] = "0.39",
},
["name"] = "Ethel Rethor, Desolace",
["zmLoc"] = {
["y"] = "26.98",
["x"] = "39.04",
},
["timers"] = {
["Gates of Sothann, Hyjal"] = 423,
["Thunk's Abode, Desolace"] = 52,
["Astranaar, Ashenvale"] = 211,
["Nijel's Point, Desolace"] = 67,
["Stardust Spire, Ashenvale"] = 172,
["Forest Song, Ashenvale"] = 345,
["Karnum's Glade, Desolace"] = 40,
["Thargad's Camp, Desolace"] = 52,
["Honor's Stand, Southern Barrens"] = 199,
},
["routes"] = {
"Karnum's Glade, Desolace", -- [1]
"Nijel's Point, Desolace", -- [2]
"Thargad's Camp, Desolace", -- [3]
"Thunk's Abode, Desolace", -- [4]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Karnum's Glade, Desolace"] = {
["fmLoc"] = {
["y"] = "0.44",
["x"] = "0.38",
},
["wmLoc"] = {
["y"] = "0.56",
["x"] = "0.41",
},
["name"] = "Karnum's Glade, Desolace",
["zmLoc"] = {
["y"] = "49.61",
["x"] = "57.72",
},
["timers"] = {
["Ethel Rethor, Desolace"] = 41,
["Tower of Estulan, Feralas"] = 190,
["Thunk's Abode, Desolace"] = 29,
["Dreamer's Rest, Feralas"] = 103,
["Astranaar, Ashenvale"] = 201,
["Nijel's Point, Desolace"] = 57,
["Gates of Sothann, Hyjal"] = 413,
["Feathermoon, Feralas"] = 159,
["Thargad's Camp, Desolace"] = 49,
["Thal'darah Overlook, Stonetalon Mountains"] = 121,
},
["routes"] = {
"Ethel Rethor, Desolace", -- [1]
"Nijel's Point, Desolace", -- [2]
"Thal'darah Overlook, Stonetalon Mountains", -- [3]
"Thargad's Camp, Desolace", -- [4]
"Thunk's Abode, Desolace", -- [5]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Thargad's Camp, Desolace"] = {
["fmLoc"] = {
["y"] = "0.41",
["x"] = "0.34",
},
["wmLoc"] = {
["y"] = "0.59",
["x"] = "0.39",
},
["name"] = "Thargad's Camp, Desolace",
["zmLoc"] = {
["y"] = "71.6",
["x"] = "36.82",
},
["timers"] = {
["Shadebough, Feralas"] = 202,
["Ethel Rethor, Desolace"] = 65,
["Tower of Estulan, Feralas"] = 142,
["Thal'darah Overlook, Stonetalon Mountains"] = 158,
["Dreamer's Rest, Feralas"] = 54,
["Nijel's Point, Desolace"] = 102,
["Northwatch Expedition Base Camp, Stonetalon Mountains"] = 185,
["Karnum's Glade, Desolace"] = 58,
["Thunk's Abode, Desolace"] = 87,
["Feathermoon, Feralas"] = 126,
},
["routes"] = {
"Dreamer's Rest, Feralas", -- [1]
"Ethel Rethor, Desolace", -- [2]
"Feathermoon, Feralas", -- [3]
"Karnum's Glade, Desolace", -- [4]
"Nijel's Point, Desolace", -- [5]
"Thal'darah Overlook, Stonetalon Mountains", -- [6]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Thunk's Abode, Desolace"] = {
["fmLoc"] = {
["y"] = "0.46",
["x"] = "0.4",
},
["wmLoc"] = {
["y"] = "0.54",
["x"] = "0.43",
},
["name"] = "Thunk's Abode, Desolace",
["zmLoc"] = {
["y"] = "32.89",
["x"] = "70.65",
},
["timers"] = {
["Honor's Stand, Southern Barrens"] = 166,
["Karnum's Glade, Desolace"] = 56,
["Nijel's Point, Desolace"] = 34,
["Ethel Rethor, Desolace"] = 62,
},
["routes"] = {
"Ethel Rethor, Desolace", -- [1]
"Karnum's Glade, Desolace", -- [2]
"Nijel's Point, Desolace", -- [3]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["The Exodar"] = {
["The Exodar"] = {
["fmLoc"] = {
["y"] = "0.74",
["x"] = "0.2",
},
["wmLoc"] = {
["y"] = "0.26",
["x"] = "0.3",
},
["name"] = "The Exodar",
["zmLoc"] = {
["y"] = "36.59",
["x"] = "54.38",
},
["timers"] = {
["Rut'theran Village, Teldrassil"] = 106,
["Lor'danel, Darkshore"] = 163,
["Blood Watch, Bloodmyst Isle"] = 89,
["Azure Watch, Azuremyst Isle"] = 40,
},
["routes"] = {
"Azure Watch, Azuremyst Isle", -- [1]
"Blood Watch, Bloodmyst Isle", -- [2]
"Rut'theran Village, Teldrassil", -- [3]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Tanaris"] = {
["Gadgetzan, Tanaris"] = {
["fmLoc"] = {
["y"] = "0.19",
["x"] = "0.6",
},
["wmLoc"] = {
["y"] = "0.81",
["x"] = "0.56",
},
["name"] = "Gadgetzan, Tanaris",
["zmLoc"] = {
["y"] = "29.43",
["x"] = "51.37",
},
["timers"] = {
["Shadebough, Feralas"] = 214,
["Cenarion Hold, Silithus"] = 207,
["Theramore, Dustwallow Marsh"] = 153,
["Marshal's Stand, Un'Goro Crater"] = 96,
["Bootlegger Outpost, Tanaris"] = 54,
["Ratchet, The Barrens"] = 248,
["Fizzle & Pozzik's Speedbarge, Thousand Needles"] = 50,
["Forest Song, Ashenvale"] = 581,
["Mudsprocket, Dustwallow Marsh"] = 217,
["Gunstan's Dig, Tanaris"] = 89,
["Mossy Pile, Un'Goro Crater"] = 105,
["Fort Triumph, Southern Barrens"] = 188,
["Ramkahen, Uldum"] = 175,
},
["routes"] = {
"Bootlegger Outpost, Tanaris", -- [1]
"Cenarion Hold, Silithus", -- [2]
"Fizzle & Pozzik's Speedbarge, Thousand Needles", -- [3]
"Gunstan's Dig, Tanaris", -- [4]
"Marshal's Stand, Un'Goro Crater", -- [5]
"Mossy Pile, Un'Goro Crater", -- [6]
"Ratchet, The Barrens", -- [7]
"Shadebough, Feralas", -- [8]
"Theramore, Dustwallow Marsh", -- [9]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Gunstan's Dig, Tanaris"] = {
["fmLoc"] = {
["y"] = "0.09",
["x"] = "0.57",
},
["wmLoc"] = {
["y"] = "0.9",
["x"] = "0.54",
},
["name"] = "Gunstan's Dig, Tanaris",
["zmLoc"] = {
["y"] = "77.46",
["x"] = "40.02",
},
["timers"] = {
["Fizzle & Pozzik's Speedbarge, Thousand Needles"] = 137,
["Bootlegger Outpost, Tanaris"] = 51,
["Schnottz's Landing, Uldum"] = 180,
["Gadgetzan, Tanaris"] = 87,
["Mossy Pile, Un'Goro Crater"] = 192,
["Marshal's Stand, Un'Goro Crater"] = 182,
["Ramkahen, Uldum"] = 86,
},
["routes"] = {
"Bootlegger Outpost, Tanaris", -- [1]
"Gadgetzan, Tanaris", -- [2]
"Ramkahen, Uldum", -- [3]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Bootlegger Outpost, Tanaris"] = {
["fmLoc"] = {
["y"] = "0.13",
["x"] = "0.61",
},
["wmLoc"] = {
["y"] = "0.87",
["x"] = "0.57",
},
["name"] = "Bootlegger Outpost, Tanaris",
["zmLoc"] = {
["y"] = "60.61",
["x"] = "55.81",
},
["timers"] = {
["Ratchet, The Barrens"] = 309,
["Gunstan's Dig, Tanaris"] = 51,
["Theramore, Dustwallow Marsh"] = 214,
["Mudsprocket, Dustwallow Marsh"] = 184,
["Gadgetzan, Tanaris"] = 61,
["Fizzle & Pozzik's Speedbarge, Thousand Needles"] = 109,
["Ramkahen, Uldum"] = 136,
},
["routes"] = {
"Gadgetzan, Tanaris", -- [1]
"Gunstan's Dig, Tanaris", -- [2]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Mount Hyjal"] = {
["Shrine of Aviana, Hyjal"] = {
["fmLoc"] = {
["y"] = "0.69",
["x"] = "0.56",
},
["wmLoc"] = {
["y"] = "0.31",
["x"] = "0.53",
},
["name"] = "Shrine of Aviana, Hyjal",
["zmLoc"] = {
["y"] = "42.68",
["x"] = "41.12",
},
["timers"] = {
["Gates of Sothann, Hyjal"] = 65,
["Nordrassil, Hyjal"] = 66,
["Shrine of Aessina, Hyjal"] = 38,
},
["routes"] = {
"Gates of Sothann, Hyjal", -- [1]
"Nordrassil, Hyjal", -- [2]
"Shrine of Aessina, Hyjal", -- [3]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Nordrassil, Hyjal"] = {
["fmLoc"] = {
["y"] = "0.71",
["x"] = "0.59",
},
["wmLoc"] = {
["y"] = "0.29",
["x"] = "0.56",
},
["name"] = "Nordrassil, Hyjal",
["zmLoc"] = {
["y"] = "21.63",
["x"] = "62.22",
},
["timers"] = {
["Rut'theran Village, Teldrassil"] = 264,
["Shrine of Aessina, Hyjal"] = 77,
["Moonglade"] = 117,
["Everlook, Winterspring"] = 128,
["Lor'danel, Darkshore"] = 201,
["Talonbranch Glade, Felwood"] = 181,
["Shrine of Aviana, Hyjal"] = 48,
},
["routes"] = {
"Everlook, Winterspring", -- [1]
"Moonglade", -- [2]
"Shrine of Aessina, Hyjal", -- [3]
"Shrine of Aviana, Hyjal", -- [4]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Shrine of Aessina, Hyjal"] = {
["fmLoc"] = {
["y"] = "0.69",
["x"] = "0.52",
},
["wmLoc"] = {
["y"] = "0.31",
["x"] = "0.51",
},
["name"] = "Shrine of Aessina, Hyjal",
["zmLoc"] = {
["y"] = "36.4",
["x"] = "19.63",
},
["timers"] = {
["Dreamer's Rest, Feralas"] = 571,
["Gates of Sothann, Hyjal"] = 108,
["Nordrassil, Hyjal"] = 82,
["Shrine of Aviana, Hyjal"] = 44,
["Feathermoon, Feralas"] = 623,
},
["routes"] = {
"Nordrassil, Hyjal", -- [1]
"Shrine of Aviana, Hyjal", -- [2]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Gates of Sothann, Hyjal"] = {
["fmLoc"] = {
["y"] = "0.65",
["x"] = "0.61",
},
["wmLoc"] = {
["y"] = "0.35",
["x"] = "0.57",
},
["name"] = "Gates of Sothann, Hyjal",
["zmLoc"] = {
["y"] = "75.14",
["x"] = "71.55",
},
["timers"] = {
["Dreamer's Rest, Feralas"] = 458,
["Astranaar, Ashenvale"] = 160,
["Forest Song, Ashenvale"] = 43,
["Shrine of Aviana, Hyjal"] = 45,
["Wildheart Point, Felwood"] = 197,
["Emerald Sanctuary, Felwood"] = 154,
["Feathermoon, Feralas"] = 432,
},
["routes"] = {
"Forest Song, Ashenvale", -- [1]
"Shrine of Aviana, Hyjal", -- [2]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Feralas"] = {
["Shadebough, Feralas"] = {
["fmLoc"] = {
["y"] = "0.28",
["x"] = "0.44",
},
["wmLoc"] = {
["y"] = "0.72",
["x"] = "0.46",
},
["name"] = "Shadebough, Feralas",
["zmLoc"] = {
["y"] = "56.74",
["x"] = "77.28",
},
["timers"] = {
["Theramore, Dustwallow Marsh"] = 207,
["Mudsprocket, Dustwallow Marsh"] = 133,
["Tower of Estulan, Feralas"] = 60,
["Feathermoon, Feralas"] = 84,
["Gadgetzan, Tanaris"] = 215,
["Fizzle & Pozzik's Speedbarge, Thousand Needles"] = 178,
},
["routes"] = {
"Feathermoon, Feralas", -- [1]
"Fizzle & Pozzik's Speedbarge, Thousand Needles", -- [2]
"Gadgetzan, Tanaris", -- [3]
"Mudsprocket, Dustwallow Marsh", -- [4]
"Theramore, Dustwallow Marsh", -- [5]
"Tower of Estulan, Feralas", -- [6]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Tower of Estulan, Feralas"] = {
["fmLoc"] = {
["y"] = "0.28",
["x"] = "0.38",
},
["wmLoc"] = {
["y"] = "0.72",
["x"] = "0.42",
},
["name"] = "Tower of Estulan, Feralas",
["zmLoc"] = {
["y"] = "53.96",
["x"] = "57.04",
},
["timers"] = {
["Shadebough, Feralas"] = 61,
["Ramkahen, Uldum"] = 316,
["Feathermoon, Feralas"] = 35,
},
["routes"] = {
"Feathermoon, Feralas", -- [1]
"Shadebough, Feralas", -- [2]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Dreamer's Rest, Feralas"] = {
["fmLoc"] = {
["y"] = "0.35",
["x"] = "0.37",
},
["wmLoc"] = {
["y"] = "0.64",
["x"] = "0.41",
},
["name"] = "Dreamer's Rest, Feralas",
["zmLoc"] = {
["y"] = "16.68",
["x"] = "50.23",
},
["timers"] = {
["Shadebough, Feralas"] = 147,
["Cenarion Hold, Silithus"] = 173,
["Shrine of Aessina, Hyjal"] = 615,
["Tower of Estulan, Feralas"] = 88,
["Marshal's Stand, Un'Goro Crater"] = 274,
["Bootlegger Outpost, Tanaris"] = 397,
["Astranaar, Ashenvale"] = 315,
["Forest Song, Ashenvale"] = 450,
["Stardust Spire, Ashenvale"] = 275,
["Northwatch Expedition Base Camp, Stonetalon Mountains"] = 253,
["Thargad's Camp, Desolace"] = 68,
["Gadgetzan, Tanaris"] = 343,
["Oasis of Vir'sar, Uldum"] = 236,
["Feathermoon, Feralas"] = 56,
["Mudsprocket, Dustwallow Marsh"] = 282,
["Wildheart Point, Felwood"] = 441,
["Shrine of Aviana, Hyjal"] = 577,
["Mossy Pile, Un'Goro Crater"] = 245,
["Emerald Sanctuary, Felwood"] = 398,
["Ramkahen, Uldum"] = 337,
},
["routes"] = {
"Feathermoon, Feralas", -- [1]
"Thargad's Camp, Desolace", -- [2]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Feathermoon, Feralas"] = {
["fmLoc"] = {
["y"] = "0.3",
["x"] = "0.36",
},
["wmLoc"] = {
["y"] = "0.7",
["x"] = "0.4",
},
["name"] = "Feathermoon, Feralas",
["zmLoc"] = {
["y"] = "45.29",
["x"] = "46.8",
},
["timers"] = {
["Shadebough, Feralas"] = 92,
["Cenarion Hold, Silithus"] = 117,
["Ethel Rethor, Desolace"] = 188,
["Tower of Estulan, Feralas"] = 31,
["Nijel's Point, Desolace"] = 194,
["Stardust Spire, Ashenvale"] = 298,
["Northwatch Expedition Base Camp, Stonetalon Mountains"] = 276,
["Thargad's Camp, Desolace"] = 148,
["Azure Watch, Azuremyst Isle"] = 698,
["The Exodar"] = 658,
["Lor'danel, Darkshore"] = 495,
["Mirkfallon Post, Stonetalon Mountains"] = 250,
["Thunk's Abode, Desolace"] = 211,
["Ratchet, The Barrens"] = 393,
["Farwatcher's Glen, Stonetalon Mountains"] = 205,
["Gadgetzan, Tanaris"] = 285,
["Fizzle & Pozzik's Speedbarge, Thousand Needles"] = 270,
["Karnum's Glade, Desolace"] = 182,
["Windshear Hold, Stonetalon Mountains"] = 267,
["Dreamer's Rest, Feralas"] = 56,
},
["routes"] = {
"Cenarion Hold, Silithus", -- [1]
"Dreamer's Rest, Feralas", -- [2]
"Farwatcher's Glen, Stonetalon Mountains", -- [3]
"Lor'danel, Darkshore", -- [4]
"Nijel's Point, Desolace", -- [5]
"Shadebough, Feralas", -- [6]
"Thargad's Camp, Desolace", -- [7]
"Tower of Estulan, Feralas", -- [8]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Silithus"] = {
["Cenarion Hold, Silithus"] = {
["fmLoc"] = {
["y"] = "0.2",
["x"] = "0.41",
},
["wmLoc"] = {
["y"] = "0.79",
["x"] = "0.44",
},
["name"] = "Cenarion Hold, Silithus",
["zmLoc"] = {
["y"] = "32.84",
["x"] = "54.48",
},
["timers"] = {
["Theramore, Dustwallow Marsh"] = 320,
["Gadgetzan, Tanaris"] = 189,
["Marshal's Stand, Un'Goro Crater"] = 114,
["Feathermoon, Feralas"] = 119,
["Dreamer's Rest, Feralas"] = 174,
["Nijel's Point, Desolace"] = 313,
["Tower of Estulan, Feralas"] = 151,
["Mossy Pile, Un'Goro Crater"] = 72,
["Thargad's Camp, Desolace"] = 243,
["Oasis of Vir'sar, Uldum"] = 65,
},
["routes"] = {
"Feathermoon, Feralas", -- [1]
"Gadgetzan, Tanaris", -- [2]
"Marshal's Stand, Un'Goro Crater", -- [3]
"Mossy Pile, Un'Goro Crater", -- [4]
"Oasis of Vir'sar, Uldum", -- [5]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Uldum"] = {
["Ramkahen, Uldum"] = {
["fmLoc"] = {
["y"] = "0.1",
["x"] = "0.49",
},
["wmLoc"] = {
["y"] = "0.9",
["x"] = "0.49",
},
["name"] = "Ramkahen, Uldum",
["zmLoc"] = {
["y"] = "33.63",
["x"] = "56.23",
},
["timers"] = {
["Shadebough, Feralas"] = 397,
["Gunstan's Dig, Tanaris"] = 80,
["Schnottz's Landing, Uldum"] = 94,
["Gadgetzan, Tanaris"] = 167,
["Oasis of Vir'sar, Uldum"] = 84,
["Feathermoon, Feralas"] = 284,
["Dreamer's Rest, Feralas"] = 339,
["Cenarion Hold, Silithus"] = 186,
["Mudsprocket, Dustwallow Marsh"] = 288,
["Fort Triumph, Southern Barrens"] = 354,
["Tower of Estulan, Feralas"] = 336,
["Thargad's Camp, Desolace"] = 428,
["Ratchet, The Barrens"] = 414,
},
["routes"] = {
"Gunstan's Dig, Tanaris", -- [1]
"Oasis of Vir'sar, Uldum", -- [2]
"Schnottz's Landing, Uldum", -- [3]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Oasis of Vir'sar, Uldum"] = {
["fmLoc"] = {
["y"] = "0.14",
["x"] = "0.41",
},
["wmLoc"] = {
["y"] = "0.86",
["x"] = "0.44",
},
["name"] = "Oasis of Vir'sar, Uldum",
["zmLoc"] = {
["y"] = "8.34",
["x"] = "26.57",
},
["timers"] = {
["Feathermoon, Feralas"] = 250,
["Cenarion Hold, Silithus"] = 102,
["Ramkahen, Uldum"] = 122,
["Schnottz's Landing, Uldum"] = 129,
},
["routes"] = {
"Cenarion Hold, Silithus", -- [1]
"Ramkahen, Uldum", -- [2]
"Schnottz's Landing, Uldum", -- [3]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Schnottz's Landing, Uldum"] = {
["fmLoc"] = {
["y"] = "0.04",
["x"] = "0.4",
},
["wmLoc"] = {
["y"] = "0.95",
["x"] = "0.43",
},
["name"] = "Schnottz's Landing, Uldum",
["zmLoc"] = {
["y"] = "64.97",
["x"] = "22.31",
},
["timers"] = {
["Gadgetzan, Tanaris"] = 256,
["Oasis of Vir'sar, Uldum"] = 88,
["Ramkahen, Uldum"] = 89,
},
["routes"] = {
"Oasis of Vir'sar, Uldum", -- [1]
"Ramkahen, Uldum", -- [2]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Northern Barrens"] = {
["Ratchet, The Barrens"] = {
["fmLoc"] = {
["y"] = "0.45",
["x"] = "0.6",
},
["wmLoc"] = {
["y"] = "0.55",
["x"] = "0.56",
},
["name"] = "Ratchet, The Barrens",
["zmLoc"] = {
["y"] = "70.6",
["x"] = "69.18",
},
["routes"] = {
"Astranaar, Ashenvale", -- [1]
"Gadgetzan, Tanaris", -- [2]
"Honor's Stand, Southern Barrens", -- [3]
"Northwatch Hold, Southern Barrens", -- [4]
"Theramore, Dustwallow Marsh", -- [5]
},
["timers"] = {
["Northwatch Hold, Southern Barrens"] = 54,
["Astranaar, Ashenvale"] = 198,
["Theramore, Dustwallow Marsh"] = 106,
["Gadgetzan, Tanaris"] = 245,
["Honor's Stand, Southern Barrens"] = 91,
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Ashenvale"] = {
["Forest Song, Ashenvale"] = {
["fmLoc"] = {
["y"] = "0.61",
["x"] = "0.58",
},
["wmLoc"] = {
["y"] = "0.39",
["x"] = "0.55",
},
["name"] = "Forest Song, Ashenvale",
["zmLoc"] = {
["y"] = "43.55",
["x"] = "85.04",
},
["timers"] = {
["Shadebough, Feralas"] = 563,
["Tower of Estulan, Feralas"] = 502,
["Marshal's Stand, Un'Goro Crater"] = 653,
["Feathermoon, Feralas"] = 469,
["Dreamer's Rest, Feralas"] = 415,
["Astranaar, Ashenvale"] = 142,
["Gates of Sothann, Hyjal"] = 82,
["Stardust Spire, Ashenvale"] = 186,
["Wildheart Point, Felwood"] = 153,
["Honor's Stand, Southern Barrens"] = 287,
["Emerald Sanctuary, Felwood"] = 111,
["Mudsprocket, Dustwallow Marsh"] = 458,
},
["routes"] = {
"Astranaar, Ashenvale", -- [1]
"Emerald Sanctuary, Felwood", -- [2]
"Gates of Sothann, Hyjal", -- [3]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Astranaar, Ashenvale"] = {
["fmLoc"] = {
["y"] = "0.6",
["x"] = "0.46",
},
["wmLoc"] = {
["y"] = "0.4",
["x"] = "0.47",
},
["name"] = "Astranaar, Ashenvale",
["zmLoc"] = {
["y"] = "48.01",
["x"] = "34.49",
},
["timers"] = {
["Thal'darah Overlook, Stonetalon Mountains"] = 175,
["Theramore, Dustwallow Marsh"] = 389,
["Emerald Sanctuary, Felwood"] = 83,
["Lor'danel, Darkshore"] = 206,
["Grove of the Ancients, Darkshore"] = 88,
["Mudsprocket, Dustwallow Marsh"] = 316,
["Fizzle & Pozzik's Speedbarge, Thousand Needles"] = 378,
["Ratchet, The Barrens"] = 194,
["Astranaar, Ashenvale"] = 215,
["Forest Song, Ashenvale"] = 135,
["Stardust Spire, Ashenvale"] = 44,
["Northwatch Expedition Base Camp, Stonetalon Mountains"] = 110,
["Nijel's Point, Desolace"] = 137,
["Blackfathom Camp, Ashenvale"] = 53,
["Gadgetzan, Tanaris"] = 421,
},
["routes"] = {
"Blackfathom Camp, Ashenvale", -- [1]
"Emerald Sanctuary, Felwood", -- [2]
"Forest Song, Ashenvale", -- [3]
"Grove of the Ancients, Darkshore", -- [4]
"Lor'danel, Darkshore", -- [5]
"Ratchet, The Barrens", -- [6]
"Stardust Spire, Ashenvale", -- [7]
"Thal'darah Overlook, Stonetalon Mountains", -- [8]
"Theramore, Dustwallow Marsh", -- [9]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Blackfathom Camp, Ashenvale"] = {
["fmLoc"] = {
["y"] = "0.64",
["x"] = "0.42",
},
["wmLoc"] = {
["y"] = "0.36",
["x"] = "0.44",
},
["name"] = "Blackfathom Camp, Ashenvale",
["zmLoc"] = {
["y"] = "20.61",
["x"] = "18.13",
},
["timers"] = {
["Grove of the Ancients, Darkshore"] = 69,
["Astranaar, Ashenvale"] = 61,
["Emerald Sanctuary, Felwood"] = 111,
["Thal'darah Overlook, Stonetalon Mountains"] = 137,
},
["routes"] = {
"Astranaar, Ashenvale", -- [1]
"Emerald Sanctuary, Felwood", -- [2]
"Grove of the Ancients, Darkshore", -- [3]
"Thal'darah Overlook, Stonetalon Mountains", -- [4]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Stardust Spire, Ashenvale"] = {
["fmLoc"] = {
["y"] = "0.56",
["x"] = "0.46",
},
["wmLoc"] = {
["y"] = "0.44",
["x"] = "0.47",
},
["name"] = "Stardust Spire, Ashenvale",
["zmLoc"] = {
["y"] = "72",
["x"] = "35.06",
},
["timers"] = {
["Shadebough, Feralas"] = 377,
["Tower of Estulan, Feralas"] = 316,
["Feathermoon, Feralas"] = 285,
["Thal'darah Overlook, Stonetalon Mountains"] = 96,
["Wildheart Point, Felwood"] = 165,
["Astranaar, Ashenvale"] = 39,
["Forest Song, Ashenvale"] = 173,
["Honor's Stand, Southern Barrens"] = 103,
["Northwatch Expedition Base Camp, Stonetalon Mountains"] = 66,
["Windshear Hold, Stonetalon Mountains"] = 65,
["Emerald Sanctuary, Felwood"] = 121,
["Nijel's Point, Desolace"] = 93,
},
["routes"] = {
"Astranaar, Ashenvale", -- [1]
"Honor's Stand, Southern Barrens", -- [2]
"Nijel's Point, Desolace", -- [3]
"Northwatch Expedition Base Camp, Stonetalon Mountains", -- [4]
"Thal'darah Overlook, Stonetalon Mountains", -- [5]
"Windshear Hold, Stonetalon Mountains", -- [6]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Stonetalon Mountains"] = {
["Farwatcher's Glen, Stonetalon Mountains"] = {
["fmLoc"] = {
["y"] = "0.52",
["x"] = "0.36",
},
["wmLoc"] = {
["y"] = "0.48",
["x"] = "0.4",
},
["name"] = "Farwatcher's Glen, Stonetalon Mountains",
["zmLoc"] = {
["y"] = "61.78",
["x"] = "32.01",
},
["timers"] = {
["Theramore, Dustwallow Marsh"] = 340,
["Ethel Rethor, Desolace"] = 112,
["Mirkfallon Post, Stonetalon Mountains"] = 45,
["Thal'darah Overlook, Stonetalon Mountains"] = 53,
["Astranaar, Ashenvale"] = 167,
["Nijel's Point, Desolace"] = 64,
["Feathermoon, Feralas"] = 219,
["Northwatch Expedition Base Camp, Stonetalon Mountains"] = 116,
["Windshear Hold, Stonetalon Mountains"] = 76,
["Thargad's Camp, Desolace"] = 146,
["Forest Song, Ashenvale"] = 302,
},
["routes"] = {
"Feathermoon, Feralas", -- [1]
"Mirkfallon Post, Stonetalon Mountains", -- [2]
"Nijel's Point, Desolace", -- [3]
"Northwatch Expedition Base Camp, Stonetalon Mountains", -- [4]
"Thal'darah Overlook, Stonetalon Mountains", -- [5]
"Windshear Hold, Stonetalon Mountains", -- [6]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Northwatch Expedition Base Camp, Stonetalon Mountains"] = {
["fmLoc"] = {
["y"] = "0.49",
["x"] = "0.46",
},
["wmLoc"] = {
["y"] = "0.51",
["x"] = "0.47",
},
["name"] = "Northwatch Expedition Base Camp, Stonetalon Mountains",
["zmLoc"] = {
["y"] = "80.52",
["x"] = "70.94",
},
["timers"] = {
["Northwatch Hold, Southern Barrens"] = 151,
["Shrine of Aessina, Hyjal"] = 427,
["Tower of Estulan, Feralas"] = 288,
["Nijel's Point, Desolace"] = 67,
["Thal'darah Overlook, Stonetalon Mountains"] = 114,
["Ratchet, The Barrens"] = 135,
["Farwatcher's Glen, Stonetalon Mountains"] = 121,
["Forest Song, Ashenvale"] = 258,
["Stardust Spire, Ashenvale"] = 84,
["Dreamer's Rest, Feralas"] = 203,
["Windshear Hold, Stonetalon Mountains"] = 61,
["Honor's Stand, Southern Barrens"] = 50,
["Feathermoon, Feralas"] = 259,
},
["routes"] = {
"Farwatcher's Glen, Stonetalon Mountains", -- [1]
"Honor's Stand, Southern Barrens", -- [2]
"Nijel's Point, Desolace", -- [3]
"Stardust Spire, Ashenvale", -- [4]
"Thal'darah Overlook, Stonetalon Mountains", -- [5]
"Windshear Hold, Stonetalon Mountains", -- [6]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Windshear Hold, Stonetalon Mountains"] = {
["fmLoc"] = {
["y"] = "0.53",
["x"] = "0.43",
},
["wmLoc"] = {
["y"] = "0.47",
["x"] = "0.45",
},
["name"] = "Windshear Hold, Stonetalon Mountains",
["zmLoc"] = {
["y"] = "54.29",
["x"] = "58.8",
},
["routes"] = {
"Farwatcher's Glen, Stonetalon Mountains", -- [1]
"Mirkfallon Post, Stonetalon Mountains", -- [2]
"Nijel's Point, Desolace", -- [3]
"Northwatch Expedition Base Camp, Stonetalon Mountains", -- [4]
"Stardust Spire, Ashenvale", -- [5]
"Thal'darah Overlook, Stonetalon Mountains", -- [6]
},
["timers"] = {
["Northwatch Hold, Southern Barrens"] = 209,
["Farwatcher's Glen, Stonetalon Mountains"] = 93,
["Nijel's Point, Desolace"] = 64,
["Stardust Spire, Ashenvale"] = 54,
["Northwatch Expedition Base Camp, Stonetalon Mountains"] = 58,
["Mirkfallon Post, Stonetalon Mountains"] = 31,
["Thal'darah Overlook, Stonetalon Mountains"] = 65,
},
},
["Mirkfallon Post, Stonetalon Mountains"] = {
["fmLoc"] = {
["y"] = "0.54",
["x"] = "0.4",
},
["wmLoc"] = {
["y"] = "0.46",
["x"] = "0.43",
},
["name"] = "Mirkfallon Post, Stonetalon Mountains",
["zmLoc"] = {
["y"] = "51.47",
["x"] = "48.59",
},
["timers"] = {
["Windshear Hold, Stonetalon Mountains"] = 29,
["Farwatcher's Glen, Stonetalon Mountains"] = 53,
["Thal'darah Overlook, Stonetalon Mountains"] = 39,
},
["routes"] = {
"Farwatcher's Glen, Stonetalon Mountains", -- [1]
"Thal'darah Overlook, Stonetalon Mountains", -- [2]
"Windshear Hold, Stonetalon Mountains", -- [3]
},
["factions"] = {
"Alliance", -- [1]
},
},
["Thal'darah Overlook, Stonetalon Mountains"] = {
["fmLoc"] = {
["y"] = "0.57",
["x"] = "0.38",
},
["wmLoc"] = {
["y"] = "0.43",
["x"] = "0.42",
},
["name"] = "Thal'darah Overlook, Stonetalon Mountains",
["zmLoc"] = {
["y"] = "31.95",
["x"] = "40.07",
},
["timers"] = {
["Farwatcher's Glen, Stonetalon Mountains"] = 63,
["Ethel Rethor, Desolace"] = 157,
["Lor'danel, Darkshore"] = 254,
["Thargad's Camp, Desolace"] = 143,
["Mirkfallon Post, Stonetalon Mountains"] = 41,
["Grove of the Ancients, Darkshore"] = 169,
["Karnum's Glade, Desolace"] = 122,
["Astranaar, Ashenvale"] = 171,
["Nijel's Point, Desolace"] = 109,
["Stardust Spire, Ashenvale"] = 87,
["Northwatch Expedition Base Camp, Stonetalon Mountains"] = 103,
["Windshear Hold, Stonetalon Mountains"] = 84,
["Blackfathom Camp, Ashenvale"] = 127,
["Honor's Stand, Southern Barrens"] = 153,
},
["routes"] = {
"Astranaar, Ashenvale", -- [1]
"Blackfathom Camp, Ashenvale", -- [2]
"Farwatcher's Glen, Stonetalon Mountains", -- [3]
"Grove of the Ancients, Darkshore", -- [4]
"Karnum's Glade, Desolace", -- [5]
"Lor'danel, Darkshore", -- [6]
"Mirkfallon Post, Stonetalon Mountains", -- [7]
"Nijel's Point, Desolace", -- [8]
"Northwatch Expedition Base Camp, Stonetalon Mountains", -- [9]
"Stardust Spire, Ashenvale", -- [10]
"Thargad's Camp, Desolace", -- [11]
"Windshear Hold, Stonetalon Mountains", -- [12]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
["Darnassus"] = {
["Darnassus, Teldrassil"] = {
["fmLoc"] = {
["y"] = "0.89",
["x"] = "0.34",
},
["wmLoc"] = {
["y"] = "0.11",
["x"] = "0.39",
},
["name"] = "Darnassus, Teldrassil",
["zmLoc"] = {
["y"] = "47.94",
["x"] = "36.66",
},
["timers"] = {
["Lor'danel, Darkshore"] = 170,
["Rut'theran Village, Teldrassil"] = 110,
["Dolanaar, Teldrassil"] = 62,
["Moonglade"] = 263,
},
["routes"] = {
"Dolanaar, Teldrassil", -- [1]
"Rut'theran Village, Teldrassil", -- [2]
},
["factions"] = {
"Alliance", -- [1]
},
},
},
},
},
},
};
 
Default_EFM_WaterNodeData = {
["Alliance"] = {
["Eastern Kingdoms"] = {
["Kelp'thar Forest"] = {
["Sandy Beach, Vashj'ir"] = {
["fmLoc"] = {
["y"] = "0.39",
["x"] = "0.29",
},
["wmLoc"] = {
["y"] = "0.6",
["x"] = "0.35",
},
["name"] = "Sandy Beach, Vashj'ir",
["zmLoc"] = {
["y"] = "66.08",
["x"] = "42.32",
},
["timers"] = {
["Voldrin's Hold, Vashj'ir"] = 68,
["Silver Tide Hollow, Vashj'ir"] = 61,
["Tranquil Wash, Vashj'ir"] = 103,
["Smuggler's Scar, Vashj'ir"] = 31,
},
["routes"] = {
"Smuggler's Scar, Vashj'ir", -- [1]
"Silver Tide Hollow, Vashj'ir", -- [2]
},
},
["Smuggler's Scar, Vashj'ir"] = {
["fmLoc"] = {
["y"] = "0.41",
["x"] = "0.3",
},
["wmLoc"] = {
["y"] = "0.58",
["x"] = "0.36",
},
["name"] = "Smuggler's Scar, Vashj'ir",
["zmLoc"] = {
["y"] = "31.04",
["x"] = "56.24",
},
["timers"] = {
["Sandy Beach, Vashj'ir"] = 34,
["Silver Tide Hollow, Vashj'ir"] = 85,
},
["routes"] = {
"Silver Tide Hollow, Vashj'ir", -- [1]
"Sandy Beach, Vashj'ir", -- [2]
},
},
},
["Abyssal Depths"] = {
["Darkbreak Cove, Vashj'ir"] = {
["fmLoc"] = {
["y"] = "0.33",
["x"] = "0.21",
},
["wmLoc"] = {
["y"] = "0.66",
["x"] = "0.3",
},
["name"] = "Darkbreak Cove, Vashj'ir",
["zmLoc"] = {
["y"] = "75.52",
["x"] = "56.91",
},
["timers"] = {
["Voldrin's Hold, Vashj'ir"] = 80,
["Tranquil Wash, Vashj'ir"] = 64,
},
["routes"] = {
"Tranquil Wash, Vashj'ir", -- [1]
"Voldrin's Hold, Vashj'ir", -- [2]
},
},
},
["Shimmering Expanse"] = {
["Voldrin's Hold, Vashj'ir"] = {
["fmLoc"] = {
["y"] = "0.32",
["x"] = "0.29",
},
["wmLoc"] = {
["y"] = "0.67",
["x"] = "0.35",
},
["name"] = "Voldrin's Hold, Vashj'ir",
["zmLoc"] = {
["y"] = "75.22",
["x"] = "57.09",
},
["routes"] = {
"Tranquil Wash, Vashj'ir", -- [1]
"Darkbreak Cove, Vashj'ir", -- [2]
},
["timers"] = {
["Tranquil Wash, Vashj'ir"] = 47,
["Darkbreak Cove, Vashj'ir"] = 81,
},
},
["Silver Tide Hollow, Vashj'ir"] = {
["fmLoc"] = {
["y"] = "0.36",
["x"] = "0.27",
},
["wmLoc"] = {
["y"] = "0.63",
["x"] = "0.34",
},
["name"] = "Silver Tide Hollow, Vashj'ir",
["zmLoc"] = {
["y"] = "41.21",
["x"] = "49.52",
},
["routes"] = {
"Smuggler's Scar, Vashj'ir", -- [1]
"Sandy Beach, Vashj'ir", -- [2]
"Tranquil Wash, Vashj'ir", -- [3]
},
["timers"] = {
["Sandy Beach, Vashj'ir"] = 58,
["Tranquil Wash, Vashj'ir"] = 44,
["Smuggler's Scar, Vashj'ir"] = 73,
},
},
["Tranquil Wash, Vashj'ir"] = {
["fmLoc"] = {
["y"] = "0.34",
["x"] = "0.27",
},
["wmLoc"] = {
["y"] = "0.65",
["x"] = "0.33",
},
["name"] = "Tranquil Wash, Vashj'ir",
["zmLoc"] = {
["y"] = "57.38",
["x"] = "48.54",
},
["routes"] = {
"Silver Tide Hollow, Vashj'ir", -- [1]
"Darkbreak Cove, Vashj'ir", -- [2]
"Voldrin's Hold, Vashj'ir", -- [3]
},
["timers"] = {
["Voldrin's Hold, Vashj'ir"] = 61,
["Silver Tide Hollow, Vashj'ir"] = 44,
["Darkbreak Cove, Vashj'ir"] = 68,
["Sandy Beach, Vashj'ir"] = 99,
},
},
},
},
},
};
 
--
-- /script EFM_SF_mergeTable(EFM_ImportData, EFM_Data);
EFM_ImportData = {
};
Property changes : Added: svn:executable +
trunk/MapWindow.lua New file
0,0 → 1,353
--[[
 
Routines to handle the display of the remote map window.
 
]]
 
-- Function: Clears the POI location and other data.
local function EFM_MW_POIClear(POI)
POI:ClearAllPoints();
POI.Location = nil;
POI:Hide();
end
 
-- Function: Clear old map node references.
local function EFM_MW_ClearPoints()
local index;
 
-- Clear flight node points.
index = 1;
while (getglobal("EFM_MW_Node"..index) ~= nil) do
EFM_Shared_DebugMessage("Clearing Map Window Node Point "..index, Lys_Debug);
 
POI = getglobal("EFM_MW_Node"..index);
EFM_MW_POIClear(POI);
index = index + 1;
end
 
-- Clear flight route lines.
index = 1;
while (getglobal("EFM_MW_Route"..index) ~= nil) do
EFM_Shared_DebugMessage("Clearing Map Window Node Lines "..index, Lys_Debug);
 
POI = getglobal("EFM_MW_Route"..index);
POI:SetTexture("Invalid");
EFM_MW_POIClear(POI);
index = index + 1;
end
end
 
-- Function: Display the flight map details.
local function EFM_MW_DisplayFlightMap(continentNum)
local Texture_AltKnown = "Interface\\TaxiFrame\\UI-Taxi-Icon-Gray";
local Texture_CurKnown = "Interface\\TaxiFrame\\UI-Taxi-Icon-Yellow";
 
local numLines = 0;
local displayNode = true;
local routepoi = 0;
local numNodes = 0;
 
-- Set variables that get used a lot...
local w = 816;
local h = 752;
 
-- Clear the seenRoutes variable.
seenRoutes = {};
 
-- Add all distant taxi buttons.
EFM_TaxiDistantButtonData = {};
 
local nodeList = EFM_NI_GetNode_List(continentNum);
if (nodeList == nil) then
return;
end
 
-- Display only "Land" Nodes at this time
local nodeStyle = 0;
 
-- Display nodes
for key, zone in pairs(nodeList) do
numNodes = numNodes + 1;
displayNode = true; -- Default to not displaying the flight node.
myNode = EFM_NI_GetNodeByName(zone, nodeStyle);
 
if (myNode ~= nil)then
if (myNode["fmLoc"] ~= nil) then
 
if (string.find(zone, "Nighthaven, Moonglade") ~= nil) then
-- Are we allowed to show the druid flight paths
if (EFM_MyConf.DruidPaths == false) then
numNodes = numNodes - 1;
displayNode = false;
end
end
 
-- If the node is not already drawn, and we are allowed to display it, then draw it...
if (displayNode)then
-- Set the texture for the flight path
local myTexture = Texture_AltKnown;
if (EFM_NI_CheckReachable(continentNum, zone)) then
myTexture = Texture_CurKnown;
end
 
-- Create a button for the flight node if needed
button = getglobal("EFM_MW_Node"..numNodes);
if (button == nil) then
button = CreateFrame("Button", "EFM_MW_Node"..numNodes, EFM_MapWindowNew_Map, "EFM_POI_Template");
end
button:SetID(numNodes);
button.Location = zone;
button.Continent = continentNum;
 
-- Save the data for this button along with the zone name.
EFM_TaxiDistantButtonData[numNodes] = {};
EFM_SF_mergeTable(myNode, EFM_TaxiDistantButtonData[numNodes]);
 
-- Get the x and y co-ords for the node.
sX = w * tonumber(myNode["fmLoc"]["x"]);
sY = h * tonumber(myNode["fmLoc"]["y"]);
 
-- Display it.
button:ClearAllPoints();
button:SetPoint("CENTER", "EFM_MapWindowNew_Map", "BOTTOMLEFT", sX, sY);
button:SetNormalTexture(myTexture);
button:Show();
 
-- Draw Routes on map
if (myNode.routes ~= nil) then
local flightDuration = "";
 
table.sort(myNode.routes);
 
for key, routeName in pairs(myNode.routes) do
local endNode = EFM_NI_GetNodeByName(routeName, nodeStyle);
if (endNode ~= nil) then
if (endNode["fmLoc"] ~= nil) then
-- Create a new texture for the route line if needed
routepoi = routepoi + 1;
line = getglobal("EFM_MW_Route"..routepoi);
if (line == nil) then
line = EFM_MapWindowNew_Map:CreateTexture("EFM_MW_Route"..routepoi, "OVERLAY");
end
line:SetTexture("Interface\\TaxiFrame\\UI-Taxi-Line");
 
dX = w * tonumber(endNode["fmLoc"]["x"]);
dY = h * tonumber(endNode["fmLoc"]["y"]);
DrawRouteLine(line, "EFM_MapWindowNew_Map", sX, sY, dX, dY, 32);
line:Show();
end
end
end
table.insert(seenRoutes, zone);
end
end
end
end
end
end
 
-- Function: Change to the new map display.
function EFM_MW_ChangeMap(newMap)
local continentMap;
 
if (newMap == 2) then
continentMap = "Interface\\TaxiFrame\\TAXIMAP0";
elseif (newMap == 3) then
continentMap = "Interface\\TaxiFrame\\TAXIMAP530";
elseif (newMap == 4) then
continentMap = "Interface\\TaxiFrame\\TAXIMAP571";
elseif (newMap == 5) then
continentMap = "Interface\\TaxiFrame\\TAXIMAP870";
elseif (newMap == 6) then
continentMap = "Interface\\TaxiFrame\\TAXIMAP870";
else
continentMap = "Interface\\TaxiFrame\\TAXIMAP1";
newMap = 1;
end
 
-- New Window Button Colours
for index = 1, 6 do
local myButton = getglobal("EFM_MapWindowNew_Con"..index.."Text");
if (myButton) then
if (index == newMap) then
myButton:SetTextColor(1.0, 1.0, 0.0);
else
myButton:SetTextColor(0.5, 0.5, 0.5);
end
end
end
 
-- New Window Map
EFM_MapWindowNew_MapTexture:SetTexture(continentMap);
 
-- Clear the old waypoints, then draw for the new map.
EFM_MW_ClearPoints();
EFM_MW_DisplayFlightMap(newMap);
end
 
-- Function: Routine to handle opening the map screen.
function EFM_MW_OpenMap(mapNum)
if (EFM_MapWindowNew:IsVisible()) then
EFM_MapWindowNew:Hide();
return;
end
 
if (mapNum == nil) then
mapNum = GetCurrentMapContinent();
end
 
if ((mapNum < 1) or (mapNum > 6)) then
mapNum = GetCurrentMapContinent();
end
 
EFM_MW_ChangeMap(mapNum);
EFM_MapWindowNew:Show();
end
 
-- Function: Handle new map window OnShow Event
function EFM_MW_OnShow()
PlaySound("igMainMenuOpen");
end
 
-- Function: Handle new map window OnShow Event
function EFM_MW_OnHide()
PlaySound("igMainMenuClose");
end
 
-- Function: Draw the "Offline" Map Window
function EFM_MW_Setup()
local continentNames = { GetMapContinents() } ;
 
local EFM_MapWindowNew = CreateFrame("FRAME", "EFM_MapWindowNew", UIParent);
 
-- Set special details of Frame
EFM_MapWindowNew:SetFrameStrata("DIALOG");
 
-- Start Hidden
EFM_MapWindowNew:Hide();
 
-- Set Window Size
EFM_MapWindowNew:SetWidth(1000);
EFM_MapWindowNew:SetHeight(810);
 
-- Set Window Location
EFM_MapWindowNew:ClearAllPoints();
EFM_MapWindowNew:SetPoint("CENTER", UIParent);
 
-- Set Window background
EFM_MapWindowNew:SetBackdrop({
bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background",
edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border", tile = true, tileSize = 32, edgeSize = 32,
insets = { left = 11, right = 12, top = 12, bottom = 11 }
});
 
-- Set Sound Effects
EFM_MapWindowNew:SetScript("OnShow", EFM_MW_OnShow);
EFM_MapWindowNew:SetScript("OnHide", EFM_MW_OnHide);
 
-- Header
local EFM_MapWindowNewLabel = EFM_MapWindowNew:CreateFontString("EFM_MapWindowNewLabel");
EFM_MapWindowNewLabel:SetWidth(960);
EFM_MapWindowNewLabel:SetHeight(20);
EFM_MapWindowNewLabel:ClearAllPoints();
EFM_MapWindowNewLabel:SetPoint("TOPLEFT", EFM_MapWindowNew, "TOPLEFT", 20, -15);
EFM_MapWindowNewLabel:SetFont("Fonts\\FRIZQT__.TTF", 14);
EFM_MapWindowNewLabel:SetText(EFM_Version_String);
 
-- Config Button
local EFM_MW_ConfigButton = CreateFrame("Button", "EFM_MW_ConfigButton", EFM_MapWindowNew, "UIPanelButtonTemplate");
EFM_MW_ConfigButton:SetWidth(138);
EFM_MW_ConfigButton:SetHeight(22);
EFM_MW_ConfigButton:SetText(OPTIONS_MENU);
EFM_MW_ConfigButton:RegisterForClicks("LeftButtonUp");
EFM_MW_ConfigButton:ClearAllPoints();
EFM_MW_ConfigButton:SetPoint("TOPLEFT", EFM_MapWindowNew, "BOTTOMLEFT", 20, 66);
EFM_MW_ConfigButton:SetScript("OnClick", function() EFM_MapWindowNew:Hide(); InterfaceOptionsFrame_OpenToCategory(EFM_GUI); end );
 
-- Quit Button
local EFM_MW_QuitButton = CreateFrame("Button", "EFM_MW_QuitButton", EFM_MapWindowNew, "UIPanelButtonTemplate");
EFM_MW_QuitButton:SetWidth(138);
EFM_MW_QuitButton:SetHeight(22);
EFM_MW_QuitButton:SetText(QUIT);
EFM_MW_QuitButton:RegisterForClicks("LeftButtonUp");
EFM_MW_QuitButton:ClearAllPoints();
EFM_MW_QuitButton:SetPoint("TOPLEFT", EFM_MapWindowNew, "BOTTOMLEFT", 20, 40);
EFM_MW_QuitButton:SetScript("OnClick", function() EFM_MapWindowNew:Hide(); end );
 
 
-- Map Display Pane
EFM_MapWindowNew_Map = CreateFrame("Frame", "EFM_MapWindowNew_Map", EFM_MapWindowNew);
EFM_MapWindowNew_Map:SetWidth(816);
EFM_MapWindowNew_Map:SetHeight(752);
EFM_MapWindowNew_Map:ClearAllPoints();
EFM_MapWindowNew_Map:SetPoint("TOPLEFT", EFM_MapWindowNew, "TOPLEFT", 165, -40);
 
EFM_MapWindowNew_MapTexture = EFM_MapWindowNew_Map:CreateTexture();
EFM_MapWindowNew_MapTexture:SetTexture("interface\\taxiframe\\taximap0");
EFM_MapWindowNew_MapTexture:SetAllPoints(EFM_MapWindowNew_Map);
 
 
-- The Various Continent Buttons
-- Eastern Kingdoms - Continent 1
local EFM_MapWindowNew_Con1 = CreateFrame("Button", "EFM_MapWindowNew_Con1", EFM_MapWindowNew, "UIPanelButtonTemplate");
EFM_MapWindowNew_Con1:SetWidth(138);
EFM_MapWindowNew_Con1:SetHeight(22);
EFM_MapWindowNew_Con1:SetText(continentNames[1]);
EFM_MapWindowNew_Con1:RegisterForClicks("LeftButtonUp");
EFM_MapWindowNew_Con1:ClearAllPoints();
EFM_MapWindowNew_Con1:SetPoint("TOPLEFT", EFM_MapWindowNew, "TOPLEFT", 20, -45);
EFM_MapWindowNew_Con1:SetScript("OnClick", function() EFM_MW_ChangeMap(1); end );
 
-- Kalimdor - Continent 2
local EFM_MapWindowNew_Con2 = CreateFrame("Button", "EFM_MapWindowNew_Con2", EFM_MapWindowNew, "UIPanelButtonTemplate");
EFM_MapWindowNew_Con2:SetWidth(138);
EFM_MapWindowNew_Con2:SetHeight(22);
EFM_MapWindowNew_Con2:SetText(continentNames[2]);
EFM_MapWindowNew_Con2:RegisterForClicks("LeftButtonUp");
EFM_MapWindowNew_Con2:ClearAllPoints();
EFM_MapWindowNew_Con2:SetPoint("TOPLEFT", EFM_MapWindowNew_Con1, "BOTTOMLEFT", 0, -2);
EFM_MapWindowNew_Con2:SetScript("OnClick", function() EFM_MW_ChangeMap(2); end );
 
-- Outland - Continent 3
local EFM_MapWindowNew_Con3 = CreateFrame("Button", "EFM_MapWindowNew_Con3", EFM_MapWindowNew, "UIPanelButtonTemplate");
EFM_MapWindowNew_Con3:SetWidth(138);
EFM_MapWindowNew_Con3:SetHeight(22);
EFM_MapWindowNew_Con3:SetText(continentNames[3]);
EFM_MapWindowNew_Con3:RegisterForClicks("LeftButtonUp");
EFM_MapWindowNew_Con3:ClearAllPoints();
EFM_MapWindowNew_Con3:SetPoint("TOPLEFT", EFM_MapWindowNew_Con2, "BOTTOMLEFT", 0, -2);
EFM_MapWindowNew_Con3:SetScript("OnClick", function() EFM_MW_ChangeMap(3); end );
 
-- Northrend - Continent 4
local EFM_MapWindowNew_Con4 = CreateFrame("Button", "EFM_MapWindowNew_Con4", EFM_MapWindowNew, "UIPanelButtonTemplate");
EFM_MapWindowNew_Con4:SetWidth(138);
EFM_MapWindowNew_Con4:SetHeight(22);
EFM_MapWindowNew_Con4:SetText(continentNames[4]);
EFM_MapWindowNew_Con4:RegisterForClicks("LeftButtonUp");
EFM_MapWindowNew_Con4:ClearAllPoints();
EFM_MapWindowNew_Con4:SetPoint("TOPLEFT", EFM_MapWindowNew_Con3, "BOTTOMLEFT", 0, -2);
EFM_MapWindowNew_Con4:SetScript("OnClick", function() EFM_MW_ChangeMap(4); end );
 
--[[
-- DO NOT REMOVE THIS CODEBLOCK! --
-- The Maelstrom - Continent 5
local EFM_MapWindowNew_Con5 = CreateFrame("Button", "EFM_MapWindowNew_Con5", EFM_MapWindowNew, "UIPanelButtonTemplate");
EFM_MapWindowNew_Con5:SetWidth(138);
EFM_MapWindowNew_Con5:SetHeight(22);
EFM_MapWindowNew_Con5:SetText(continentNames[5]);
EFM_MapWindowNew_Con5:RegisterForClicks("LeftButtonUp");
EFM_MapWindowNew_Con5:ClearAllPoints();
EFM_MapWindowNew_Con5:SetPoint("TOPLEFT", EFM_MapWindowNew_Con4, "BOTTOMLEFT", 0, -2);
EFM_MapWindowNew_Con5:SetScript("OnClick", function() EFM_MW_ChangeMap(5); end );
-- DO NOT REMOVE THIS CODEBLOCK! --
]]
-- Pandaria - Continent 6
local EFM_MapWindowNew_Con6 = CreateFrame("Button", "EFM_MapWindowNew_Con6", EFM_MapWindowNew, "UIPanelButtonTemplate");
EFM_MapWindowNew_Con6:SetWidth(138);
EFM_MapWindowNew_Con6:SetHeight(22);
EFM_MapWindowNew_Con6:SetText(continentNames[6]);
EFM_MapWindowNew_Con6:RegisterForClicks("LeftButtonUp");
EFM_MapWindowNew_Con6:ClearAllPoints();
EFM_MapWindowNew_Con6:SetPoint("TOPLEFT", EFM_MapWindowNew_Con4, "BOTTOMLEFT", 0, -2);
EFM_MapWindowNew_Con6:SetScript("OnClick", function() EFM_MW_ChangeMap(6); end );
end
Property changes : Added: svn:executable +
trunk/bugreport.txt New file
0,0 → 1,63
Bug Reports
-----------
These are the requirements for posting bugs, any bug report that does not follow these rules will be handled only AFTER all other bug reports are filed.
Use of the form given at the end is optional, but prefered as it means it is simpler for me to track down bugs.
 
Please also remember, the addon works 100% for me, otherwise I would not have released it.
If you see something, it is because of something that you do differently from me, either running different addons,
or even visiting the battlegrounds (I PvP only in defense at this time).
Also note that the following rules are in place to cut-down on the user arguements in the forums.
I won't discuss these rules, nor will I discuss the way I handle each rule item.
The various forums I use as a method for users who wish to improve my addons to contact me with their suggestions, and their likes/dislikes.
 
ALL bug reports MUST contain the following information:-
1) The EXACT error message from World of Warcraft.
2) What you where doing that caused the error to occour.
3) If you are using the supplied data, or if you are learning the flight paths yourself.
 
 
Before reporting any bugs make sure of the following:-
1) It is an actual error, with a blizzard supplied error message.
Without that, the issue is either due a conflict with another addon (such as graphics glitches), or it is a feature not working the way you expect.
Both of these should be reported so I can see if I can figure out why, or explain why the feature works the way it does.
 
2) You are running the latest version of the addon.
If you have a version even one release old, I may have fixed your bug already, please read the release notes to see if it is listed,
if not please upgrade but still file the bug report providing also the information that you are running an earlier release, and give me the version number so I can track down the bug.
 
3) If you run other addons, I need to be sure it is _my_ addon that is causing the issue.
If it is something that happens often (as in you can easily repeat it), please disable all other addons and see if it still occours,
if so, then it is definately my addon doing something strange. If not, then enable the addons you have until you see it re-occour.
Once you have found the other addon(s) that cause the problem, please tell me that information in your bug report.
Telling me you have a huge pile of addons so can't validate it is my addon specifically, will just result in me placing your message in my trash folder,
as I will assume you have no interest in seeing this addon working as it should.
If you are using this addon, and do not know how to enable/disable addons, then I recommend reading the World of Warcraft user manual before using any further addons.
 
4) Issues related to using this addon with other addon packs/suites (for example, Cosmos), or using this addon when other libraries are installed,
will only be corrected by me if the code is definately my addon that is causing the problem.
I cannot be responsible for fixing the other addon(s), and I will not write code that kicks in only if another addon is installed,
unless I am already supporting that addon. For example, addons (of mine) with a GUI options screen that have errors with myAddons will be fixed,
as I support the use of that with those addons. On the other hand errors caused by sea will not be corrected as I do not support the use of sea with any addon.
If an addon library/suite brings out a valid error with my code, I will correct my code to work as it was intended, I will consider each report on a case-by-case basis however.
 
 
Please cut and paste the sections between the "Bug Report Form" lines into your bug report. Fill in all possible information.
-------------- Bug Report Form -----------------
Addon Name : ____________________
Addon Version : _________
Downloaded From: ______________________________
Blizzard error message:
________________________________________________
________________________________________________
________________________________________________
________________________________________________
Cause:
________________________________________________
________________________________________________
________________________________________________
Repeatable: Yes/No
Conflicting Addon(s):
________________________________________________
________________________________________________
________________________________________________
-------------- Bug Report Form -----------------
Property changes : Added: svn:executable +
trunk/data.lua New file
0,0 → 1,261
--[[
 
data.lua
 
Various data load functions.
 
]]
 
-- Function: Define the EFM data variable(s)
function EFM_DefineData()
---------------------------------
-- Global options data definition
if (EFM_MyConf == nil) then
EFM_MyConf = {};
end
 
if (EFM_MyConf.Timer == nil) then
EFM_MyConf.Timer = true;
end
 
if (EFM_MyConf.ZoneMarker == nil) then
EFM_MyConf.ZoneMarker = true;
end
 
if (EFM_MyConf.DruidPaths == nil) then
EFM_MyConf.DruidPaths = true;
end
 
if (EFM_MyConf.ShowTimerBar == nil) then
EFM_MyConf.ShowTimerBar = false;
end
 
if (EFM_MyConf.ShrinkStatusBar == nil) then
EFM_MyConf.ShrinkStatusBar = true;
end
 
if (EFM_MyConf.TimerPosition == nil) then
EFM_MyConf.TimerPosition = -150;
end
 
if (EFM_MyConf.LoadAll == nil) then
EFM_MyConf.LoadAll = true;
end
 
if (EFM_MyConf.ContinentOverlay == nil) then
EFM_MyConf.ContinentOverlay = true;
end
 
if (EFM_MyConf.UpdateRecorded == nil) then
EFM_MyConf.UpdateRecorded = false;
end
 
if (EFM_MyConf.ShowLargeBar ~= nil) then
if (EFM_MyConf.TimerSize ~= nil) then
if (EFM_MyConf.ShowLargeBar == true) then
EFM_MyConf.TimerSize = 1.5;
else
EFM_MyConf.TimerSize = 1.0;
end
end
end
EFM_MyConf.ShowLargeBar = nil;
 
if (EFM_MyConf.TimerSize == nil) then
EFM_MyConf.TimerSize = 1.0;
end
 
if (EFM_Data == nil) then
EFM_Data = {};
end
 
if (EFM_WaterNodes == nil) then
EFM_WaterNodes = {};
end
 
end
 
-- Function: Import preloaded data into "live" EFM data
function EFM_Data_Import(faction)
local myLocale = GetLocale();
 
if (EFM_Data == nil) then
EFM_Data = {};
end
 
if (faction == FACTION_ALLIANCE) then
if (Default_EFM_FlightData[myLocale] ~= nil) then
if (Default_EFM_FlightData[myLocale][FACTION_ALLIANCE] ~= nil) then
if (EFM_Data[FACTION_ALLIANCE] == nil) then
EFM_Data[FACTION_ALLIANCE] = {};
end
EFM_SF_mergeTable(Default_EFM_FlightData[myLocale][FACTION_ALLIANCE], EFM_Data[FACTION_ALLIANCE]);
EFM_Message("announce", format(EFM_MSG_DATALOAD, FACTION_ALLIANCE));
return;
end
end
elseif (faction == FACTION_HORDE) then
if (Default_EFM_FlightData[myLocale] ~= nil) then
if (Default_EFM_FlightData[myLocale][FACTION_HORDE] ~= nil) then
if (EFM_Data[FACTION_HORDE] == nil) then
EFM_Data[FACTION_HORDE] = {};
end
EFM_SF_mergeTable(Default_EFM_FlightData[myLocale][FACTION_HORDE], EFM_Data[FACTION_HORDE]);
EFM_Message("announce", format(EFM_MSG_DATALOAD, FACTION_HORDE));
return;
end
end
else
if (Default_EFM_FlightData[myLocale] ~= nil) then
EFM_SF_mergeTable(Default_EFM_FlightData[myLocale], EFM_Data);
EFM_Message("announce", format(EFM_MSG_DATALOAD, "All Factions"));
return;
end
end
 
EFM_Shared_DebugMessage("EFM: No data available for locale "..myLocale.."!", Lys_Debug);
end
 
-- Function: Load times for known flight points from provided data set.
function EFM_Data_ImportTimes(faction)
local myLocale = GetLocale();
 
if (myLocale == "enGB") then
myLocale = "enUS";
end
 
if (faction == nil) then
EFM_Shared_DebugMessage("EFM: Faction not given for timers import!", Lys_Debug);
return;
end
 
if ((faction ~= FACTION_ALLIANCE) and (faction ~= FACTION_HORDE)) then
EFM_Shared_DebugMessage("EFM: Invalid faction given for timers import!", Lys_Debug);
return;
end
 
if (Default_EFM_FlightData[myLocale] ~= nil) then
for myContinent in pairs(EFM_Data[faction]) do
for myZone in pairs(EFM_Data[faction][myContinent]) do
for myNode in pairs(EFM_Data[faction][myContinent][myZone]) do
if (Default_EFM_FlightData[myLocale][faction] ~= nil) then
if (Default_EFM_FlightData[myLocale][faction][myContinent] ~= nil) then
if (Default_EFM_FlightData[myLocale][faction][myContinent][myZone] ~= nil) then
if (Default_EFM_FlightData[myLocale][faction][myContinent][myZone][myNode] ~= nil) then
if (Default_EFM_FlightData[myLocale][faction][myContinent][myZone][myNode]["timers"] ~= nil) then
if (EFM_Data[faction][myContinent][myZone][myNode]["timers"] == nil) then
EFM_Data[faction][myContinent][myZone][myNode]["timers"] = {};
end
EFM_SF_mergeTable(Default_EFM_FlightData[myLocale][faction][myContinent][myZone][myNode]["timers"], EFM_Data[faction][myContinent][myZone][myNode]["timers"]);
end
end
end
end
end
end
end
end
EFM_Message("announce", format(EFM_MSG_DATALOADTIMERS, faction));
return;
end
 
EFM_Shared_DebugMessage("EFM: No data available for locale "..myLocale.."!", Lys_Debug);
end
 
-- Function: Fixup for special blizzard nodes.
function EFM_Data_NodeFixup()
for orgZone, newZone in pairs (EFM_SearchZones) do
EFM_Shared_DebugMessage("EFM: orgZone="..orgZone, Lys_Debug);
EFM_Shared_DebugMessage("EFM: newZone="..newZone, Lys_Debug);
 
local continentNames, key, val = { GetMapContinents() } ;
 
for myContinent = 1, table.getn(continentNames) do
local continentName = EFM_Shared_GetContinentName(myContinent);
if (EFM_Data ~= nil) then
-- Fixup Alliance Nodes
if (EFM_Data[FACTION_ALLIANCE] ~= nil) then
if (EFM_Data[FACTION_ALLIANCE][continentName] ~= nil) then
if (EFM_Data[FACTION_ALLIANCE][continentName][orgZone] ~= nil) then
EFM_Data[FACTION_ALLIANCE][continentName][orgZone] = nil;
end
for myZone,myValue in pairs(EFM_Data[FACTION_ALLIANCE][continentName]) do
for mySubZone,mySubValue in pairs(EFM_Data[FACTION_ALLIANCE][continentName][myZone]) do
if (mySubZone == orgZone) then
if (myZone == newZone) then
EFM_Shared_DebugMessage("EFM: Correct Zone!", Lys_Debug);
else
EFM_Shared_DebugMessage("EFM: Incorrect Zone!!!! Deleting invalid entry!", Lys_Debug);
EFM_Data[FACTION_ALLIANCE][continentName][myZone][mySubZone] = nil;
end
end
end
end
end
end
-- Fixup Horde Nodes
if (EFM_Data[FACTION_HORDE] ~= nil) then
if (EFM_Data[FACTION_HORDE][continentName] ~= nil) then
if (EFM_Data[FACTION_HORDE][continentName][orgZone] ~= nil) then
EFM_Data[FACTION_HORDE][continentName][orgZone] = nil;
end
 
for myZone,myValue in pairs(EFM_Data[FACTION_HORDE][continentName]) do
for mySubZone,mySubValue in pairs(EFM_Data[FACTION_HORDE][continentName][myZone]) do
if (mySubZone == orgZone) then
if (myZone == newZone) then
EFM_Shared_DebugMessage("EFM: Correct Zone!", Lys_Debug);
else
EFM_Shared_DebugMessage("EFM: Incorrect Zone!!!! Deleting invalid entry!", Lys_Debug);
EFM_Data[FACTION_HORDE][continentName][myZone][mySubZone] = nil;
end
end
end
end
end
end
end
end
end
end
 
-- Function: This function removes invalid nodes from the flight map data entirely.
-- Not sure why this function was removed at one time, but probably because I don't like dangling code... but it needs to stick around *sigh*
function EFM_RemoveInvalidNode(nodeName)
local faction = UnitFactionGroup("player");
 
for myContinent in pairs(EFM_Data[faction]) do
for myZone in pairs(EFM_Data[faction][myContinent]) do
for myNode in pairs(EFM_Data[faction][myContinent][myZone]) do
if (myNode == nodeName) then
-- Woah, we found the node, delete it! DIE DIE DIE!!!!!
EFM_Data[faction][myContinent][myZone][myNode] = nil;
else
-- Clean the route list
local tempRoutes = {};
local routeList = EFM_Data[faction][myContinent][myZone][myNode]["routes"];
if (routeList) then
for index,value in pairs(routeList) do
if (value ~= nodeName) then
tinsert(tempRoutes, value);
end
end
end
EFM_Data[faction][myContinent][myZone][myNode]["routes"] = tempRoutes;
 
-- Clean the timer list
if (EFM_Data[faction][myContinent][myZone][myNode]["timers"]) then
for index,value in pairs(EFM_Data[faction][myContinent][myZone][myNode]["timers"]) do
if (value == nodeName) then
EFM_Data[faction][myContinent][myZone][myNode]["timers"][value] = nil;
end
end
end
 
end
end
end
end
 
EFM_Shared_DebugMessage(format(EFM_MSG_DELETENODE, nodeName));
end
Property changes : Added: svn:executable +
trunk/Bindings.xml New file
0,0 → 1,31
<Bindings>
<Binding name="EFM_OPTIONS" runOnUp="false" header="EFM">
InterfaceOptionsFrame_OpenToCategory(EFM_GUI);
</Binding>
<Binding name="EFM_MAP1" runOnUp="false">
EFM_MW_OpenMap();
</Binding>
<Binding name="EFM_MAP2" runOnUp="false">
EFM_MW_OpenMap(1);
</Binding>
<Binding name="EFM_MAP3" runOnUp="false">
EFM_MW_OpenMap(2);
</Binding>
<Binding name="EFM_MAP4" runOnUp="false">
EFM_MW_OpenMap(3);
</Binding>
<!-- Report to Party -->
<Binding name="EFM_REPORT1" runOnUp="false">
EFM_Report_Flight("party");
</Binding>
<!-- Report to Raid -->
<Binding name="EFM_REPORT2" runOnUp="false">
EFM_Report_Flight("raid");
</Binding>
<!-- Report to Guild -->
<Binding name="EFM_REPORT3" runOnUp="false">
EFM_Report_Flight("guild");
</Binding>
 
</Bindings>
 
Property changes : Added: svn:executable +
trunk/Map.lua New file
0,0 → 1,287
--[[
 
Map modifications
 
]]
 
-- Function: Completely clear a POI
local function EFM_Map_POIClear(POI)
POI:ClearAllPoints();
POI.Location = nil;
POI:Hide();
end
 
-- Function: Clear old map node references.
function EFM_Map_ClearPoints()
if (EFM_MyConf == nil) then
return;
end
 
local index;
 
index = 1;
while (getglobal("EFM_MAP_POI"..index) ~= nil) do
POI = getglobal("EFM_MAP_POI"..index);
EFM_Map_POIClear(POI);
index = index + 1;
end
 
index = 1;
while (getglobal("EFM_WM_Route"..index) ~= nil) do
POI = getglobal("EFM_WM_Route"..index);
EFM_Map_POIClear(POI);
index = index + 1;
end
end
 
-- Function: World Map Update thingy.
function EFM_Map_WorldMapEvent()
if (EFM_MyConf == nil) then
return;
end
 
local index;
 
index = 1;
while (getglobal("EFM_MAP_POI"..index) ~= nil) do
POI = getglobal("EFM_MAP_POI"..index);
EFM_Map_POIClear(POI);
index = index + 1;
end
 
index = 1;
while (getglobal("EFM_WM_Route"..index) ~= nil) do
POI = getglobal("EFM_WM_Route"..index);
EFM_Map_POIClear(POI);
index = index + 1;
end
 
local myFaction = UnitFactionGroup("player");
local myContinent = GetCurrentMapContinent();
local myZone = GetCurrentMapZone();
 
if (WorldMapDetailFrame:IsVisible()) then
if (myContinent == 0) then
return;
else
if (myZone == 0) then
if (EFM_MyConf.ContinentOverlay == true) then
EFM_Map_WorldMapDisplay(myContinent);
return;
end
else
if (EFM_MyConf.ZoneMarker == true) then
EFM_Map_ZoneMapDisplay(myContinent, myZone);
return;
end
end
end
end
end
 
-- Function: POI On Enter
function EFM_MAP_POIOnEnter(frame)
local displayRoutes = {};
local px, py = frame:GetCenter();
local align = "ANCHOR_LEFT";
local wx;
local wy;
if (WorldMapButton:IsVisible()) then
wx, wy = WorldMapButton:GetCenter();
else
wx, wy = UIParent:GetCenter();
end
if (px <= wx) then
align = "ANCHOR_RIGHT";
end
 
EFM_ToolTip:SetOwner(frame, align);
EFM_ToolTip:AddLine(frame.Location);
 
-- Flight path display stuff...
local myNode = EFM_NI_GetNodeByName(frame.Location, frame.nodeStyle);
 
if (myNode ~= nil) then
local flightDuration = "";
local routeList = myNode["routes"];
if (routeList ~= nil) then
EFM_ToolTip:AddLine(EFM_MAP_PATHLIST, 1.0, 1.0, 1.0);
table.sort(routeList);
for index, routeName in pairs(routeList) do
if (not EFM_SF_StringInTable(displayRoutes, routeName)) then
table.insert(displayRoutes, routeName);
flightDuration = EFM_NI_GetNode_FlightDuration(frame.Location, routeName);
if (EFM_NI_CheckReachable(frame.Continent, routeName)) then
flightColour = "|c0000FF00";
else
flightColour = "|c00909090";
end
if (flightDuration) then
EFM_ToolTip:AddDoubleLine(flightColour..routeName, EFM_SF_FormatTime(flightDuration));
else
EFM_ToolTip:AddLine(flightColour..routeName);
end
end
end
end
end
 
-- Match the tooltip scale to the UIParent Scaling factor
local myScale = UIParent:GetScale() ;
myScale = EFM_SF_ValueToPrecision(myScale, 2);
EFM_ToolTip:SetScale(myScale);
 
-- Show the Tooltip
EFM_ToolTip:Show();
end
 
-- Function: Display some EFM data on the world map... *EXPERIMENTAL*
function EFM_Map_WorldMapDisplay(myContinent)
local myDebug = false;
local myFaction = UnitFactionGroup("player");
local w = WorldMapButton:GetWidth();
local h = WorldMapButton:GetHeight();
local zoneList = {};
local zoneName = "";
knownPoints = {};
local buttonCount = 0;
EFM_Shared_DebugMessage("EFM_Map_WorldMapDisplay: Getting data for knownPoints!", myDebug);
knownPoints = EFM_NI_GetNode_List(myContinent);
if (knownPoints ~= nil) then
EFM_Shared_DebugMessage("EFM_Map_WorldMapDisplay: knownPoints has data!", myDebug);
local POI;
local POITexture;
 
-- Clear the seenRoutes variable.
local seenRoutes = {};
local routepoi = 0;
 
-- Currently we only want to display "land" flight nodes, will expand later, this is only temporary.
local nodeStyle = 0;
 
-- Show the flight nodes
for index, flightNode in pairs(knownPoints) do
EFM_Shared_DebugMessage("EFM_Map_WorldMapDisplay Node Name: "..flightNode, myDebug);
 
local myNode = EFM_NI_GetNodeByName(flightNode, nodeStyle);
local nodeName = myNode["name"];
if (myNode["wmLoc"] ~= nil) then
EFM_Shared_DebugMessage("EFM_Map_WorldMapDisplay Node Name: wmLoc is NOT nil." , myDebug);
local mapX = tonumber(myNode["wmLoc"]["x"]);
local mapY = tonumber(myNode["wmLoc"]["y"]);
if ((mapX ~= nil) and (mapY ~= nil)) then
buttonCount = buttonCount + 1;
POI = getglobal("EFM_MAP_POI"..buttonCount);
if (POI == nil) then
POI = CreateFrame("Button", "EFM_MAP_POI"..buttonCount, WorldMapDetailFrame, "EFM_POI_Template");
end
POITexture = getglobal("EFM_MAP_POI"..buttonCount.."Icon");
 
-- Display the actual POI Button
if (EFM_NI_CheckReachable(myContinent, nodeName)) then
POITexture:SetTexture("Interface\\TaxiFrame\\UI-Taxi-Icon-Yellow");
else
POITexture:SetTexture("Interface\\TaxiFrame\\UI-Taxi-Icon-Gray");
end
POI:ClearAllPoints();
POI:SetPoint("CENTER", "WorldMapDetailFrame", "TOPLEFT", mapX * w, -(mapY) * h);
POI:SetAlpha(0.5);
POI:Show();
 
-- Set the Location & Continent Fields.
POI.Location = nodeName;
POI.Continent = myContinent;
POI.nodeStyle = 0;
 
-- Draw Routes on map
if (myNode.routes ~= nil) then
local flightDuration = "";
WorldMapTooltip:AddLine(EFM_MAP_PATHLIST, 1.0, 1.0, 1.0);
for key, routeName in pairs(myNode.routes) do
if ((routeName ~= nil) and (not EFM_SF_StringInTable(seenRoutes, routeName))) then
local endNode = EFM_NI_GetNodeByName(routeName, nodeStyle);
if (endNode ~= nil) then
if (endNode["wmLoc"] ~= nil) then
-- Create a new texture for the route line if needed
routepoi = routepoi + 1;
line = getglobal("EFM_WM_Route"..routepoi);
if (line == nil) then
line = WorldMapDetailFrame:CreateTexture("EFM_WM_Route"..routepoi, "TOP");
end
line:SetTexture("Interface\\TaxiFrame\\UI-Taxi-Line");
if (line) then
local destX = tonumber(endNode["wmLoc"]["x"]);
local destY = tonumber(endNode["wmLoc"]["y"]);
if ((destX ~= nil) and (destY ~= nil)) then
DrawRouteLine(line, "WorldMapDetailFrame", mapX * w, (h - (mapY * h)), destX * w, (h - (destY * h)), 32);
line:SetAlpha(0.5);
line:Show();
end
end
end
end
end
end
table.insert(seenRoutes, zone);
end
end
end
end
end
end
 
-- Function: Display the zone map.
function EFM_Map_ZoneMapDisplay(myContinent, myZone)
local myFaction = UnitFactionGroup("player");
local w = WorldMapButton:GetWidth();
local h = WorldMapButton:GetHeight();
local zoneList = {};
local zoneName = "";
knownPoints = {};
local buttonCount = 0;
 
if ((myZone == 0) or (myFaction == nil) or (myContinent == 0)) then
return nil;
end
 
knownPoints = EFM_NI_GetNodeListByZone(EFM_Shared_GetZoneName(myContinent, myZone));
 
-- TODO: Display only "Land" nodes at this time
local nodeStyle = 0;
 
if (knownPoints ~= nil) then
local POI;
local POITexture;
for index, flightNode in pairs(knownPoints) do
local myNode = EFM_NI_GetNodeByName(flightNode, nodeStyle);
local nodeName = myNode["name"];
if (myNode["zmLoc"] ~= nil) then
local mapX = tonumber(myNode["zmLoc"]["x"]);
local mapY = tonumber(myNode["zmLoc"]["y"]);
if ((mapX ~= nil) and (mapY ~= nil)) then
buttonCount = buttonCount + 1;
POI = getglobal("EFM_MAP_POI"..buttonCount);
if (POI == nil) then
POI = CreateFrame("Button", "EFM_MAP_POI"..buttonCount, WorldMapDetailFrame, "EFM_POI_Template");
end
POITexture = getglobal("EFM_MAP_POI"..buttonCount.."Icon");
 
-- Display the actual POI Button
if (EFM_NI_CheckReachable(myContinent, nodeName)) then
POITexture:SetTexture("Interface\\TaxiFrame\\UI-Taxi-Icon-Yellow");
else
POITexture:SetTexture("Interface\\TaxiFrame\\UI-Taxi-Icon-Gray");
end
POI:ClearAllPoints();
POI:SetPoint("CENTER", "WorldMapDetailFrame", "TOPLEFT", (mapX/100) * w, -((mapY/100) * h));
POI:SetAlpha(1);
POI:Show();
 
-- Set the Location & Continent Fields.
POI.Location = nodeName;
POI.Continent = myContinent;
end
end
end
end
end
Property changes : Added: svn:executable +
trunk/Timer.lua New file
0,0 → 1,212
--[[
 
Timer routines for flight timers.
 
Code inspired by Kwarz's flightpath.
 
]]
 
-- Function: Update
function EFM_Timer_EventFrame_OnUpdate()
if (EFM_MyConf ~= nil) then
local ctime;
EFM_Timer_CheckInFlightStatus();
 
if (EFM_MyConf.Timer == true) then
if (UnitOnTaxi("player")) then
ctime = time();
if(ctime ~= EFM_Timer_LastTime) then
-- Calculate elapsed time.
local timeElapsed = ctime - EFM_Timer_LastTime;
 
-- Decrease in flight time remaining.
EFM_Timer_TimeRemaining = EFM_Timer_TimeRemaining - timeElapsed;
 
-- Show timer window.
EFM_Timer_ShowInFlightTimer(EFM_Timer_TimeRemaining);
 
-- Set the last time to the current time.
EFM_Timer_LastTime = ctime;
end
else
EFM_FlightStatus:Hide();
end
else
EFM_FlightStatus:Hide();
end
end
end
 
-- Function: Check the in flight status
function EFM_Timer_CheckInFlightStatus()
if (UnitOnTaxi("player") == 1) then
if (EFM_Timer_StartRecording == true) then
EFM_Timer_StartRecording = false;
EFM_Timer_Recording = true;
SetMapToCurrentZone();
EFM_Timer_OrigContinent = GetCurrentMapContinent();
end
else
-- Hide timers
EFM_FlightStatus:Hide();
 
if (EFM_Timer_Recording == true) then
-- End of the road, stop recording
EFM_NI_AddNode_FlightDuration(EFM_TaxiOrigin, EFM_TaxiDestination, (time() - EFM_Timer_StartTime), EFM_Timer_NodeStyle);
EFM_Timer_Recording = false;
EFM_Timer_StartRecording = false;
EFM_TaxiDestination = nil;
end
end
end
 
-- Function: Determine remote location from taxi node
function EFM_Timer_TakeTaxiNode(nodeID)
EFM_TaxiDestination = TaxiNodeName(nodeID);
EFM_Timer_TimeRemaining = 0;
EFM_Timer_StartTime = time();
EFM_Timer_LastTime = EFM_Timer_StartTime;
 
-- Check if swimming, if so, set node style to match
if (IsSwimming() == 1) then
EFM_Timer_NodeStyle = 1;
end
 
local flightTime = EFM_NI_GetNode_FlightDuration(EFM_TaxiOrigin, EFM_TaxiDestination, EFM_Timer_NodeStyle);
 
-- If there is a known flight time, calculate the duration estimate
if (flightTime ~= nil) then
EFM_Timer_TimeRemaining = flightTime;
EFM_Timer_FlightTime = flightTime;
EFM_Timer_TimeKnown = true;
else
EFM_Timer_TimeKnown = false;
EFM_Timer_FlightTime = 0;
end
 
EFM_Timer_StartRecording = true;
end
 
-- Function: In flight timer
function EFM_Timer_ShowInFlightTimer(timeLeft)
if (EFM_TaxiDestination ~= nil) then
EFM_FlightStatus_DestLabel:SetText(EFM_FT_DESTINATION..EFM_TaxiDestination);
else
EFM_FlightStatus:Hide();
return;
end
 
-- Position the destination line of the timer frame as per the configuration.
EFM_FlightStatus:ClearAllPoints();
EFM_FlightStatus:SetPoint("CENTER", UIParent, "CENTER", 0, EFM_MyConf.TimerPosition);
EFM_FlightStatus:Show();
 
-- Hide the Status Bar as we might not wish to be displaying it all the time.
EFM_FlightStatusPanel1:Hide();
 
-- Reset the timer window scaling, as this can easily change.
EFM_FlightStatus_TimerLabel:SetText("");
EFM_FlightStatus_Timer:SetScale(EFM_MyConf.TimerSize);
EFM_FlightStatusPanel1:SetScale(EFM_MyConf.TimerSize);
 
-- Unfortunately WoW UI Designer does not let me set a panel location relative to another frame/panel, this corrects that oversight.
EFM_FlightStatus_Timer:ClearAllPoints();
EFM_FlightStatus_Timer:SetPoint("CENTER", EFM_FlightStatus, "CENTER", 0, -10);
EFM_FlightStatusPanel1:ClearAllPoints();
EFM_FlightStatusPanel1:SetPoint("CENTER", EFM_FlightStatus, "CENTER", 0, -10);
 
if(EFM_Timer_TimeRemaining > 0) then
-- Show text status
EFM_FlightStatus_TimerLabel:SetText(EFM_FT_ARRIVAL_TIME..EFM_SF_FormatTime(timeLeft));
 
-- Handle the Status Bar
if (EFM_MyConf.ShowTimerBar) then
EFM_FlightStatus_StatusBar:SetMinMaxValues(0, EFM_Timer_FlightTime);
 
-- Handle the grow right/left option.
if (EFM_MyConf.ShrinkStatusBar == true) then
EFM_FlightStatus_StatusBar:SetValue(timeLeft);
else
EFM_FlightStatus_StatusBar:SetValue(EFM_Timer_FlightTime - timeLeft);
end
 
-- Show the status bar if we are showing it.
EFM_FlightStatusPanel1:Show();
end
else
if (not EFM_Timer_TimeKnown) then
-- Display the flight timer screen if the time to destination is unknown as that way people will see it is online.
EFM_FlightStatus_TimerLabel:SetText(EFM_FT_ARRIVAL_TIME..UNKNOWN);
else
-- Display the flight timer as incorrect
EFM_FlightStatus_TimerLabel:SetText(EFM_FT_INCORRECT);
end
end
end
 
--[[
-- DO NOTE REMOVE, WE MIGHT HANDLE THESE ONCE AGAIN IN THE FUTURE! --
 
-- Function: Replacement GossipTitleButton_OnClick to check for flightpath options.
function EFM_GossipTitleButton_OnClick()
if ( this.type == "Available" ) then
SelectGossipAvailableQuest(self:GetID());
elseif ( this.type == "Active" ) then
SelectGossipActiveQuest(self:GetID());
else
local button_text = self:GetText();
-- DEFAULT_CHAT_FRAME:AddMessage(button_text);
-- DEFAULT_CHAT_FRAME:AddMessage(EFM_TEST_NIGHTHAVEN);
 
if (string.find(button_text, EFM_TEST_NIGHTHAVEN) ~= nil) then
-- DEFAULT_CHAT_FRAME:AddMessage("EFM: Nighthaven Flight Path option");
 
local orig = EFM_NIGHTHAVEN;
local destNode = nil;
local routeList = {};
 
EFM_FN_AddNode(orig, "0.549", "0.807", "44.34", "45.91");
SetMapToCurrentZone();
EFM_KP_AddLocation(GetCurrentMapContinent(), orig);
 
if (UnitFactionGroup("player") == FACTION_HORDE) then
destNode = EFM_FN_GetNodeByName("Thunder Bluff, Mulgore", "enUS");
local _, _, tempRouteData = string.find(EFM_FN_GetRouteDataByName("Thunder Bluff, Mulgore"), ".*~(.*)");
routeList["Thunder Bluff, Mulgore"] = tempRouteData;
elseif (UnitFactionGroup("player") == FACTION_ALLIANCE) then
destNode = EFM_FN_GetNodeByName("Rut'theran Village, Teldrassil", "enUS");
local _, _, tempRouteData = string.find(EFM_FN_GetRouteDataByName("Rut'theran Village, Teldrassil"), ".*~(.*)");
routeList["Rut'theran Village, Teldrassil"] = tempRouteData;
end
EFM_FN_AddRoutes(orig, routeList);
 
if (destNode ~= nil) then
-- DEFAULT_CHAT_FRAME:AddMessage("EFM: Destination node known.");
EFM_TaxiDestination = destNode[GetLocale()];
EFM_TaxiOrigin = orig;
 
EFM_Timer_TimeRemaining = 0;
EFM_Timer_StartTime = time();
EFM_Timer_LastTime = EFM_Timer_StartTime;
 
local flightTime = EFM_FN_GetFlightDuration(EFM_TaxiOrigin, EFM_TaxiDestination);
 
-- If there is a known flight time, calculate the duration estimate
if (flightTime ~= nil) then
EFM_Timer_TimeRemaining = flightTime;
EFM_Timer_FlightTime = flightTime;
EFM_Timer_TimeKnown = true;
else
EFM_Timer_TimeKnown = false;
EFM_Timer_FlightTime = 0;
end
 
EFM_Timer_StartRecording = true;
end
end
 
SelectGossipOption(self:GetID());
end
end
]]
 
Property changes : Added: svn:executable +
trunk/EnhancedFlightMap.xml New file
0,0 → 1,70
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
..\FrameXML\UI.xsd">
 
<!-- Scripts -->
<Script file="EnhancedFlightMap.lua"></Script>
<Script file="data.lua"></Script>
<Script file="FlightMaster.lua"></Script>
<Script file="nodeinfo.lua" ></Script>
<Script file="KnownPaths.lua"></Script>
<Script file="Timer.lua"></Script>
<Script file="map.lua"></Script>
<Script file="ConfigScreen.lua"></Script>
<Script file="message.lua"></Script>
<Script file="MapWindow.lua"></Script>
 
<!-- Template for the map points of interests -->
<Button name="EFM_POI_Template" virtual="true">
<Size>
<AbsDimension x="16" y="16"/>
</Size>
<Anchors>
<Anchor point="CENTER"/>
</Anchors>
<Layers>
<Layer level="ARTWORK">
<Texture name="$parentIcon" setAllPoints="true"/>
</Layer>
</Layers>
<Scripts>
<OnLoad>
<!-- self:SetFrameStrata("TOOLTIP"); -->
self:SetFrameLevel(self:GetFrameLevel() + 10);
</OnLoad>
<OnEnter>
EFM_MAP_POIOnEnter(self);
</OnEnter>
<OnLeave>
EFM_ToolTip:Hide();
</OnLeave>
</Scripts>
<HighlightTexture file="Interface\TaxiFrame\UI-Taxi-Icon-Highlight">
<Size x="32" y="32"/>
<Anchors>
<Anchor point="CENTER">
<Offset>
<AbsDimension x="0" y="0"/>
</Offset>
</Anchor>
</Anchors>
</HighlightTexture>
</Button>
 
<!-- The scripts that run for the program -->
<Frame name="EnhancedFlightMapFrame">
<Scripts>
<OnLoad>
self:RegisterEvent("ADDON_LOADED");
</OnLoad>
<OnEvent>
EnhancedFlightMap_OnEvent(self, event, ...);
</OnEvent>
<OnUpdate>
EFM_Timer_EventFrame_OnUpdate(self);
</OnUpdate>
</Scripts>
</Frame>
 
<!-- Tooltip reference, this is the EFM tooltip used for all EFM tooltip displays -->
<GameToolTip name="EFM_ToolTip" inherits="GameToolTipTemplate"/>
</Ui>
Property changes : Added: svn:executable +
trunk/globals.lua New file
0,0 → 1,36
--[[
 
globals.lua
 
This file contains all globally defined data strings.
 
These strings are not to be localised, so they are here, and not in any of the locale files.
 
]]
 
-- Global define
EFM_Version = "2.2.7";
 
-- Define some stuff here to handle global stuff...
EFM_Global_Faction = UnitFactionGroup("player");
 
-- Timer variables (see timer.lua)
EFM_Timer_StartRecording = false;
EFM_Timer_Recording = false;
EFM_Timer_LastTime = time();
EFM_Timer_TimeRemaining = 0;
EFM_Timer_TimeKnown = false;
EFM_Timer_FlightTime = 0;
EFM_Timer_NodeStyle = 0;
 
-- For the map updates (see map.lua)
knownPoints = {};
 
-- Flightmaster defines (see flightmaster.lua)
EFM_TaxiOrigin = "";
EFM_TaxiDistantButtonData = {};
 
-- Special strings. These strings do not get modified for locale-specificness...
EFM_HELPCMD_STRING = "|c00FFFFFF%s|r";
 
EFM_ShowUnknownTimes = false;
Property changes : Added: svn:executable +
trunk/localization-ruRu.lua New file
0,0 → 1,98
--[[
 
Русская локализация
Создана Cobalt747 aka Паладкобальт@Ясеневый лес
 
]]
 
-- Begin Russian Localization --
if ( GetLocale() == "ruRU" ) then
 
--EFM_DESC = "Enhanced Flight Map";
--EFM_Version_String = format("%s - Version %s", EFM_DESC, EFM_Version);
 
-- Slash Commands
--EFM_CMD_HELP = "help";
--EFM_CMD_CLEAR = "clear";
--EFM_CMD_CLEAR_ALL = "clear all";
--EFM_CMD_GUI = "config";
--EFM_CMD_MAP = "open";
--EFM_CMD_REPORT = "report";
 
--EFM_SLASH1 = "/enhancedflightmap";
--EFM_SLASH2 = "/efm";
 
-- Help Text
EFM_HELP_TEXT0 = "---";
EFM_HELP_TEXT1 = format("%s Справка по командам:", EFM_Version_String);
EFM_HELP_TEXT2 = format("Наберите %s или %s для следующих команд:-", format(EFM_HELPCMD_STRING, EFM_SLASH1.." <command>"), format(EFM_HELPCMD_STRING, EFM_SLASH2.." <command>"));
EFM_HELP_TEXT3 = format("%s: Показывает это сообщение.", format(EFM_HELPCMD_STRING, EFM_CMD_HELP));
EFM_HELP_TEXT4 = format("%s: Отображает меню настроек.", format(EFM_HELPCMD_STRING, EFM_CMD_GUI));
EFM_HELP_TEXT5 = format("%s: Очищает список известных путей и точек полёта.", format(EFM_HELPCMD_STRING, EFM_CMD_CLEAR));
EFM_HELP_TEXT6 = format("%s: Очищает список известных путей и точек полёта для %s.", format(EFM_HELPCMD_STRING, EFM_CMD_CLEAR.." <faction>"), format(EFM_HELPCMD_STRING, "<faction>"));
EFM_HELP_TEXT7 = format("%s: Отображает карту, подобную карте мастера полётов для текущего континента.", format(EFM_HELPCMD_STRING, EFM_CMD_MAP));
EFM_HELP_TEXT8 = format("%s: Отображает карту, подобную карте мастера полётов для континента <continent>, где <continent> - Калимдор или Азерот.", format(EFM_HELPCMD_STRING, EFM_CMD_MAP.." <continent>"));
EFM_HELP_TEXT9 = format("%s: Сообщает вашу текущую точку назначения и время прибытия в <channel>, <channel> может быть гильдией, партией или номером существующего канала.", format(EFM_HELPCMD_STRING, EFM_CMD_REPORT.." <channel>"));
 
-- Other messages
EFM_CLEAR_HELP = format("%s: Для того, чтобы по-настоящему очистить лист, наберите %s . Это для безопасности.", EFM_DESC, format(EFM_HELPCMD_STRING, EFM_CMD_CLEAR_ALL));
EFM_MSG_CLEAR = format("%s: Все данные о путях полета очищены.", EFM_DESC);
EFM_MSG_CLEARFACTION = format("%s: Все данные о путях полета для %%s очищены.", EFM_DESC);
EFM_MSG_DATALOAD = format("%s: Все данные о путях полета для %%s загружены.", EFM_DESC);
--EFM_MSG_DATALOADTIMERS = format("%s: Flight path data for %%s loaded. Data only loaded for known flight points.", EFM_DESC);
EFM_NEW_NODE = format("%s: %s %%s для %%s.", EFM_DESC, ERR_NEWTAXIPATH);
EFM_MSG_DELETENODE = format("%s: Узел полёта %%s и все ссылающиеся данные удалены!", EFM_DESC);
EFM_MSG_MOVENODE = format("%s: Перемещение узла %%s что бы исправить карту.", EFM_DESC);
 
-- Remote flight path messages
--EFM_FMCMD_KALIMDOR = "kalimdor";
--EFM_FMCMD_AZEROTH = "azeroth";
--EFM_FMCMD_OUTLAND = "outland";
 
-- Flight time messages
EFM_FT_FLIGHT_TIME = "Записанное время полёта: ";
EFM_FT_FLIGHT_TIME_CALC = "Вычисленное время полёта: ";
EFM_FT_DESTINATION = "Полёт в ";
EFM_FT_ARRIVAL_TIME = "Рассчётное время прибытия через: ";
EFM_FT_INCORRECT = "Время полёта неверно, таймер будет обновлён по приземлении.";
 
-- Flight time report messages
EFM_MSG_REPORT = "EFM: Направляемся в %s, рассчёт прибытия в %s.";
EFM_MSG_REPORTERROR = "EFM: Ошибка: Не в полёте, или точка назначения неизвестна!";
 
-- Map screen messages
EFM_MAP_PATHLIST = "Доступные пути полёта";
 
-- GUI Options Screen
EFM_GUITEXT_Header = format("Настройки: %s", EFM_DESC);
EFM_GUITEXT_Timer = "Показать время полёта";
EFM_GUITEXT_ShowTimerBar = "Показать панель состояния времени полёта";
EFM_GUITEXT_ShrinkStatusBar = "Панель состояния сокращается соответственно оставшемуся времени полёта.";
EFM_GUITEXT_ShowLargeBar = "Показать широкую панель состояния полёта";
EFM_GUITEXT_ZoneMarker = "Показать расположение мастеров полёта на карте";
EFM_GUITEXT_DruidPaths = "Показать пути полёта друидов";
EFM_GUITEXT_DisplaySlider = "Отображать позиция в полёте. Смещение: %s.";
EFM_GUITEXT_LoadHeader = "Загрузка даных";
--EFM_GUITEXT_LoadAlliance = FACTION_ALLIANCE; -- Should not need localization as this is the official blizzard locale-string.
EFM_GUITEXT_LoadDruid = "Друид";
--EFM_GUITEXT_LoadHorde = FACTION_HORDE; -- Should not need localization as this is the official blizzard locale-string.
EFM_GUITEXT_LoadAll = "Загрузка всех данных";
EFM_GUITEXT_ContinentOverlay = "Continent Map Overlay";
EFM_GUITEXT_UpdateRecorded = "Update Recorded data with Calculated";
 
-- Key Binding Strings
--BINDING_HEADER_EFM = "Enhanced Flight Map";
BINDING_NAME_EFM_OPTIONS = "[Вкл/Выкл]- Настройки экрана";
BINDING_NAME_EFM_MAP1 = "Toggle map - Текущий континент";
BINDING_NAME_EFM_MAP2 = "Toggle map - Калимдор";
BINDING_NAME_EFM_MAP3 = "Toggle map - Азерот";
BINDING_NAME_EFM_MAP4 = "Toggle map - Запределье";
BINDING_NAME_EFM_REPORT1 = "Сообщить Партии";
BINDING_NAME_EFM_REPORT2 = "Сообщить Рейду";
BINDING_NAME_EFM_REPORT3 = "Сообщить Гильдии";
-- Debug Strings
EFM_DEBUG_HEADER_MT = format("%s: Пути полёта с пропущенным временем:-", EFM_DESC);
EFM_DEBUG_MT = format("%s: Время полёта потеряно для %%s для %%s. %%s Hop(s).", EFM_DESC);
 
-- End Russian Localization --
end
Property changes : Added: svn:executable +
trunk/message.lua New file
0,0 → 1,77
--[[
 
messages.lua
 
EFM output message handling routines.
 
]]
 
-- Function: Output an EFM message. style is announce/error
function EFM_Message(style, message)
if (style == nil) then
EFM_Shared_DebugMessage("EFM: Style not set!", Lys_Debug);
return;
end
 
style = string.lower(style);
 
if (message == nil) then
EFM_Shared_DebugMessage("EFM: Message not set!", Lys_Debug);
return;
end
 
if (style == "announce") then
DEFAULT_CHAT_FRAME:AddMessage(message, 0.2, 1.0, 0.2);
return;
elseif (style == "error") then
DEFAULT_CHAT_FRAME:AddMessage(message, 1.0, 0.1, 0.1);
return;
end
 
EFM_Shared_DebugMessage("EFM: Message style unknown!", Lys_Debug);
end
 
-- Function: Send out flight report text.
function EFM_Report_Flight(reportTo)
local messageDest = string.lower(reportTo);
 
if (EFM_TaxiDestination ~= nil) then
local myReport;
if (EFM_Timer_TimeKnown) then
myReport = format(EFM_MSG_REPORT, EFM_TaxiDestination, EFM_SF_FormatTime(EFM_Timer_TimeRemaining));
else
myReport = format(EFM_MSG_REPORT, EFM_TaxiDestination, UNKNOWN);
end
 
if (messageDest == "guild") then
SendChatMessage(myReport, "GUILD");
return;
 
elseif (messageDest== "party") then
SendChatMessage(myReport, "PARTY");
return;
 
elseif (messageDest == "raid") then
SendChatMessage(myReport, "RAID");
return;
 
elseif (messageDest ~= nil) then
local chanNum = tonumber(reportTo);
if (chanNum ~= nil) then
if ((chanNum > 0) and (chanNum < 10)) then
SendChatMessage(myReport, "CHANNEL", GetDefaultLanguage("player"), chanNum);
return;
end
else
SendChatMessage(myReport, "WHISPER", GetDefaultLanguage("player"), reportTo);
return;
end
else
DEFAULT_CHAT_FRAME:AddMessage(myReport, 0.5, 1.0, 0.5);
return;
end
end
 
-- Error if we get to here.
DEFAULT_CHAT_FRAME:AddMessage(EFM_MSG_REPORTERROR, 1.0, 0.2, 0.2);
end
Property changes : Added: svn:executable +
trunk/changelog.txt New file
0,0 → 1,863
2012-10-22 Version 2.2.7
-------------------------
- Added code to fix issue where code was assuming a flight node a specific location could only occur in one continent, now we validate continent on node lookup.
- Code cleanup, remove commented code blocks that where legacy for bug fixes, and add some missing comments, still more need adding.
- Re-added function to delete all data related to a node.
 
 
2012-10-19 Version 2.2.6
-------------------------
- Fix errors in FrameXML Log (Binding Header).
- Add support for Pandaria to "offline" window.
- Remove old configuration screen code.
- Imported new code from Google Code issue #17.
- Program-generated "offline" map window.
 
 
2012-09-09 Version 2.2.5
-------------------------
- Update .toc for 5.0.4
 
 
2011-08-12 Version 2.2.4
-------------------------
- Add flight node "hide" button to world map, solves google code issue# 13.
- Codebase fixes for water "flight" nodes, thanks to goahead.hansen via google code site. Still need to add support to display nodes, but data collection now working as intended.
- Google Code Issue #12 fixed.
- Imported new Alliance node data (Google Code issue #6, and half of #9).
 
 
2011-07-23 Version 2.2.3
-------------------------
- Another code cleanup and work on doing water and land flight nodes differently.
- Expect I need to do a complete code rewrite soon.
 
 
2011-01-13 Version 2.2.2
-------------------------
- Rewrote code that adds flight nodes to the database. The new code requires user to visit each flight node before it adds it, and it adds them into the current zone.
- Larger EFM flight display window (Google Code issue #11).
- Correct route line display issue that crops up while generating new data sets.
- Added water-node handling, this code won't clean up h0rked flight nodes, so manual cleanup (or complete node data wipe) will be needed for this.
 
 
2010-10-12 Version 2.2.1
-------------------------
- Fixes for WoW 4.0.
- Initial version of new config screen, will need to import as appropriate shortly.
 
 
2010-01-17 Version 2.2.0a
--------------------------
- The release is for another (hopefully better) fix for some of the other flight node "fixes" implemented previously. This is the initial alpha of this fix, so it'll need a lot more work.
- Fix for google code issue#5 PTR not instantiating variables correctly, code check to validate that EFM_Data exists in one core module.
 
 
2009-03-22 Version 2.1.2
-------------------------
- Fix EFM config setup, if you previously had a timer size set it should not reset the size.
- Fix for "phantom" or "moving" flight nodes, this issue is where flight node data corrupts your EFM savedvariables due to Blizzard using different names for the zone the node in in the flight master window from where the real zone is in. This doesn't "magically" catch those nodes and put them in the right place, but it does stop the phantom nodes from appearing in another zones. The real node still needs to be added to the EFM_SearchZones fixup array in the your locale's localization file.
- Updated localization files for deDE and enUS for above issue.
- Random minor code cleanup in flight master code, was needed to discover cause of the "phantom" node issue.
- Fix for issue display flight nodes on the EFM Map Window on the PTR.
- Reverse DK "hack".
- Implement correct fix for DK flight path issues. This fix should also clean up invalid data, however some flight data could have already been corrupted, and cannot be fixed automatically.
 
 
2009-01-01 Version 2.1.1
-------------------------
- "Fix" for DK flight path information... Flight points not valid for your faction should no longer show on the EFM version of the map windows.
- Hack to Argent Vanguard flight point for horde, needs to be tested alliance side, but at this time, appears functional.
 
 
2008-11-30 Version 2.1.0
-------------------------
- More minor code cleanup.
- Fixed the "Fixup" routine to correctly erase invalid flight nodes.
 
 
2008-11-27 Version 2.0.10
--------------------------
- Code refactoring of the config and map screens. More work still needed.
- Added additional missing Fixups for new Northrend flight nodes. Only enUS/enGB and deDE confirmed fully working with these fixups, data missing for ruRU and frFr.
- Cleanup of Config and Map screens.
- Minor change to the Fixup code.
- Added Northrend to the Map screen.
- General code-cleanup and minor fixes throughout code, more work is expected over the next few days.
 
 
2008-10-24 Version 2.0.9
-------------------------
- Added ruRU locale, thanks to "Паладкобальт" on realm "Ясеневый лес" (thank goodness my machine understands UTF-8 *grin*).
- Added scaling to in-flight timer bar, thanks to Gollath on realm Taerar (de).
- Also updates to deDE locale, again thanks to Gollath.
 
 
2008-09-20 Version 2.0.8
-------------------------
- Updates for 3.0
- Fixed button text
 
 
2008-04-20 Version 2.0.7
-------------------------
- Corrected bug with config screen.
- Corrected in-game version numbers.
 
 
2007-10-16 Version 2.0.6
-------------------------
- Correct button level on world map. Icon no longer is "higher" than the tooltip.
- Add option to set flight times to calculated when the time difference is greater than 30 seconds. Before this was automatic at 2 minutes.
- Update .toc version.
- Added user-supplied patch for Quel'Danos flight path issue.
 
 
2007-09-30 Version 2.0.5
-------------------------
- Update .toc version.
- Quick fix for Map Window errors.
 
 
2007-09-02 Version 2.0.4
-------------------------
- Minor improvements to the flight node markers on the world map (Should be easier to select them to see details now).
 
 
2007-09-01 Version 2.0.3
-------------------------
- Update .toc version.
- Update flight data (minor time and path improvements).
 
 
2007-04-03 Version 2.0.2
-------------------------
- Increase the maximum offset from screen centre for the tracking window.
- Add keybindings for reporting to party/raid/guild.
 
 
2007-03-13 Version 2.0.1
-------------------------
- Update tooltip code to calculate tooltip scale rather than setting it's parent due to tooltip issues.
 
 
2007-03-08 Version 2.0
-----------------------
- Beta tested and no reports filed for over a week, beta now stable and called live.
- Added in additional Horde data.
- Provided data for Alliance still has major holes, collection will occur as time and interest permits, though any data given will be imported for the next release.
- Added new flight status window, this should allow for easier movement of the flight status window.
- New status bar can be selected to grow or shrink to reflect time remaining.
- Update configuration frame to reflect new options.
- Link the EFM tooltip to the UIParent, this means global UI scaling will affect the EFM tooltip as well.
- German and French clients, the standard (as in non Burning Crusade) areas should work flawlessly, however there is a known issue with the Silvermoon City flight master.
- Localization for languages other than English need overhauling. Also the exact names as given by blizzard for the zones of Eversong Woods and Silvermoon City are needed for each non-English locale.
- Also there is NO data for any locale other than enUS and enGB. Please send me data if you use EFM and you are in a different locale.
 
 
2007-02-22 Version 2.0b10
--------------------------
- Add back in zone recognition strings for deDE and frFR locales. Information still missing for Silvermoon City/Eversong Woods.
- Zone name matching is now done in lowercase, this should fix the deDE zone matching issue.
 
 
2007-02-13 Version 2.0b9
-------------------------
- Fix issue with AddRoutes function.
 
 
2007-02-12 Version 2.0b8
-------------------------
- Remove debug messages for Fixup code.
- Shorten missing flight route display message.
- Fix bug where flight routes would be erased or reduced if the flight master was visited by a different character that did not know of the flight route.
- Fix data import bug for Horde.
- Additional data added to the preloaded enUS/enGB data set.
 
 
2007-02-05 Version 2.0b7
-------------------------
- Fix remote display issue with known routes displaying in incorrect colours.
- Modify tooltip reference, perhaps this will fix the reported (but unable to be validated) issue with the tooltip not showing up for some users all the time.
 
 
2007-02-04 Version 2.0b6
-------------------------
- Fix EFM_Data_NodeFixup code fubar.
- Fix issue with flight node tooltips on remote map if flight node has not actually been visited.
 
 
2007-02-03 Version 2.0b5
-------------------------
- Update flight node zone location marker position for Silvermoon City, unfortunately this does need localization :-(.
- Fix the "/efm report" code.
- Add flight routes to the efm remote map tooltip, the remote map tooltips and the zone/world map tooltips are now identical.
 
 
2007-02-01 Version 2.0b4
-------------------------
- Update precision for continent map locations, minor cosmetic fix to allow for data sharing improvements.
 
 
2007-02-01 Version 2.0b3
-------------------------
- Fixed issue where taking a "special" flight (such as an outland bombing run) would use the destination of a previous flight path.
- Cleanup of globals.lua removing unused variables.
- Cleanup of localization files removing unused strings.
- Re-enabled the "unknown flight times" special feature. Uses the same variable defined in globals.lua as before.
- enGB and enUS use the same flight data so the import code reflects this. Any other matchups like this just notify me of them and I'll do it.
 
 
2007-01-31 Version 2.0b2
-------------------------
- Fix multi-hop flight time issue where unknown flight times for entire route could be used as the actual flight time.
- Update flight master map location precision.
- Data clearing routines re-written and re-implemented. It is now possible to clear single faction or all data.
- Data load routines re-written and re-implemented. Currently the only provided data is for the enUS locale.
 
 
2007-01-28 Version 2.0b1
-------------------------
- Update flight timer averaging code to handle whole numbers only.
- Correct issue with /efm config not working.
 
 
2007-01-22 Version 2.0a5
-------------------------
- Background of config screen sections darkened.
- Disable extra timer bar options when timer is disabled.
 
 
2007-01-22 Version 2.0a4
-------------------------
- Rewrite remote map window.
- Rewrite configuration screen.
- Correct continent map display issues.
 
 
2007-01-17 Version 2.0a3
-------------------------
- Fix issues with no flight nodes known and displaying the map screen.
 
 
2007-01-17 Version 2.0a2
-------------------------
- Fix for multiple flight nodes showing up in the available routes display.
- Fix for displaying data for nodes you don't (yet) know the location of.
 
 
2007-01-17 Version 2.0a1
-------------------------
- Major EFM code rewrite to handle blizzard breaking the LUA saved variables concept.
- EFM data is now locale-specific, therefore data cannot be shared between locales.
 
 
2006-12-28 Version 1.6.1
-------------------------
- Fix display issue with EFM config screen.
- Fix loading error when data is clear.
 
 
2006-12-28 Version 1.6
-----------------------
- Beta test phase over, so far a week with no bug reports, so 1.6 is now live.
- Add some data for Alliance for BC, data supplied from BC closed beta realm, so may not be valid for BC live.
- Add option to "overlay" flight map onto continent map...
- Cleanup of node checking code, split into seperate function for reliability and future improvements.
- Move EFM statusbar away from the toplevel, this should allow it to hide under other windows while in flight.
- Flight Master zone/continent markers now display flight nodes alphabetically sorted.
- Updates to the handling of the zone map display code, the new code should be more robust than the old code.
 
 
2006-12-14 Version 1.6b5
-------------------------
- Add German language updates. This should hopefully provide deDE support.
 
 
2006-12-08 Version 1.6b4
-------------------------
- Special flight node naming for BC fix implemented.
- Add additional non-BC Alliance data - data appears to have been lost in beta 3 for Kalimdor.
 
 
2006-12-03 Version 1.6b3
-------------------------
- Remote flight display and configuration screen are now closable with the escape key.
- If the Blizzard TaxiFrame or Blizzard GossipFrame are open, the EFM remote display frame will be shown to it's right.
- Split Remote Taxi Frame functions to a seperate file from the Blizzard taxi frame data collection routines.
- Horde data is complete for the non-expansion content.
- Alliance data is complete for the non-expansion content.
- Data for the expansion still needed.
- Translations still needed.
- Silithus now referenced by a global variable so the Blizzard multi-flight-path data bug can be caught even if zone numbers change (again).
 
 
2006-11-24 Version 1.6b2
-------------------------
- Update continent reference checks to use a global variable for the maximum continent number.
- Update remote flight map display code to not reuse blizzard code for it's display, this means blizzard can do what they want to their flight map and it won't break the remote display functions.
- Gather some basic data for the preload sets.
 
 
2006-11-15 Version 1.6b1
-------------------------
- *NOTE* Due to the major land form changes with 2.0, all previous data is no longer viable, and will be deleted upon addon load.
- Update .toc for 2.0
- Update for loops for LUA 5.1 (backwards compatible to 5.0)
- Update hooking routines
- Update i18n file for new zone and continent numbering
- Update timer and routing data collection to handle lua 5.1 compliance.
 
 
2006-10-03 Version 1.5.1
-------------------------
- Update route validation routines to hide nodes from the other faction.
- Make sure where GetCurrentMapZone() is used that SetMapToCurrentZone() is used first.
- Modify status bar frame to use own status bar, and not the Blizzard CastingBarFrame, this makes the bar movable by EFM once more.
- Modify EFM_FM_TaxiNodeOnButtonEnter function to only update the tooltip, but let all other work be done by Blizzard.
- Add routine to clear up data that might cause EFM errors from issues fixed above.
- Duplicate flight entries should no longer display in world map tooltips.
 
 
2006-08-29 Version 1.5
-----------------------
- Official release of 1.5.
- Still missing french translations for new text, but this can be updated later.
- .toc is matched to 1.12.
 
 
2006-08-17 Version 1.5b7
-------------------------
- Update to deDE locale details for Un'Goro Crater.
- Generic updates to deDE locale file. Many thanks to those have supplied the necessary updates.
- Increase the allowed time difference between calculate time and recorded time, as some flight paths just seem to run a little strange...
 
 
2006-08-16 Version 1.5b6
-------------------------
- Correct issues the /efm clear all command, this new implementation should speed up processing time in various situations and also remove all bugs I saw of the other methods.
 
 
2006-08-14 Version 1.5b5
-------------------------
- Fix empty data set bug relating to data updating for the alliance moonglade flight node.
- Add function to load times for known flights only. Current incarnation only adds single-hop flight data.
- Update configuration screen to toggle loading of known flight times or all data.
 
 
2006-08-14 Version 1.5b4b
--------------------------
- Quickie Fix for Crash when displaying remote flight map after talking to a flight master, this fix is only needed for 1.11, but it is programatically more correct, so it's staying :-)
 
 
2006-08-14 Version 1.5b4
-------------------------
- Remove Debug line from remote display.
- Fix Alliance Druid flight point display.
- Add function to move flight nodes around, this function will be called by EFM programatically in future versions as Blizzard moves flightpaths around.
- The above routine allows for moving of old Alliance Moonglade flight path to new location, this will update all references to the old flightnode to point to the new flightnode, and delete any duplicate entries.
- Update to flightpath data.
 
 
2006-08-13 Version 1.5b3
-------------------------
- Fix issue with remote flight display. Blizzard modified the return value of certain functions and so the new method will result in extra processing due to this.
- Fix CastingBarFrame resize issue.
- Fix issue when attempting to display the remote flight display when in an instance, if no continent to display is given.
- Modify line and node drawing routines to line up with 1.12 styling, this makes the load-time memory usage a little less, and also means the node numbers and flight line numbers are no longer static.
 
 
2006-08-09 Version 1.5b2
-------------------------
- Update flightpath handling for druid flight paths. System now hooks the gossip functions to figure out when flying from moonglade. Currently all locales will have the druid flightpath listed as "Nighthaven, Moonglade".
- /efm clear all now clears ALL saved EFM data. This includes known paths for the character as well as any settings the character has set. This returns all EFM global data to defaults as EFM will have errors if it is attempted to be used after a complete clear.
- Added additional flight data, hopefully the preloaded data set now includes a complete 1.11 for Horde, and a complete 1.11 for Alliance (the latter is untested).
 
 
2006-08-08 Version 1.5b1
-------------------------
- Calculated flight time only displays if it is a multi-hop flight.
- Modify calc/recorded settings so that if the calculated flight time is more than 30 seconds different than recorded time replace the recorded flight time with the calculated time.
- If there are missing single-hop flights in a multi-hop flight path it will display a * beside the calculated flight time and not record the flight time.
- Fix nodeinfo file bug.
- Add keybindings for map display options.
- Remote map display now lists the name of the continent.
- Modify status bar display to attach text to the top of the standard casting bar, this means that I no longer need to care where the castingbarframe resides anymore, this also means it is unmovable from it's default location by EFM...
- Updates to German Locale in i18n.lua.
 
 
2006-06-22 Version 1.4.7
-------------------------
- Added a calculated duration line to the flight display. Also use the calculated value if flying a multi-hop route of unknown time.
- Updated toc for 1.11
 
 
2006-05-08 Version 1.4.6
-------------------------
- Correct map line 91 error for non-enUS clients.
- Update Horde Data.
 
 
2006-04-26 Version 1.4.5
-------------------------
- Fixed zone map location display issues for displaying flight nodes with the preload data set.
- Add additional Horde Data.
- Fixed i18n issue with the German client version of Elwynn Forest.
- Update french translations.
 
 
2006-04-24 Version 1.4.4b
--------------------------
- German fixes to the i18n data.
- Additional Horde flight data added to preloade set.
 
 
2006-04-19 Version 1.4.4
-------------------------
- Update i18n zone match error string to list the string we are trying to match using as well as the flight node.
- Add additional flight time data for horde to the preload data set.
- Update zone not found handling to be a little clearer.
- Update i18n zone matching to be a "plain" match and not accept magic characters.
 
 
2006-04-18 Version 1.4.3
-------------------------
- Modify event registration/unregistration to not even bother dealing with events between the PLAYER_LEAVING_WORLD and PLAYER_ENTERING_WORLD events.
- Add timer hide to the PLAYER_LEAVING_WORLD event, this should catch any timers hanging around when you get portalled out while in flight.
- Modify EFM_FN_GetNodeByName function to look for bad data, and ignore if data bad.
- Additional changes to i18n coding.
 
 
2006-04-10 Version 1.4.2
-------------------------
- Fix error on login caused by misentered entry for missing zone mapping error message.
- Fix error at Flightmaster caused by the EFM_FN_GetNodeByName function.
- Minor code complexity reduction in the i18n code.
 
 
2006-04-10 Version 1.4.1
-------------------------
- Modify locale code to reference zone data from my own reference map, this should solve the zone name->number issue.
- Flight nodes that cannot be matched to known data will display an error message in the chat window to be reported for inclusion in the zone mapping table.
- Locale table converted to UTF-8 Decimal version strings.
- Add extra alliance data.
 
 
2006-04-04 Version 1.4
-----------------------
- Official 1.4 release
- Fix line clearing bug, blizzard flight lines where not previously being cleared from the efm remote display screen
 
 
2006-04-01 Version 1.4 Beta 11
-------------------------------
- BETA RELEASE FOR WOW 1.10 RELEASE.
- Add option to clear data for a single faction, this way users can erase a faulty horde/alliance data set and not lose any data from the other faction. Mostly added for testing, but I'm sure some will find this handy.
- Add hidden data precision conversion routine - this should only be used as directed by myself, or automatically used for those who have run a beta version of EFM 1.4 before.
- Data precisions are now defined globally, this allows users who need less precision in the map collection to adjust automatically.
- Hack CastingBarFrame modification routines to handle some CT_MasterMod weirdness, the progress bar location will not be movable, it will be stuck where the CT_Mod team has decided to place it.
- Fix bug with druid flight path showing when option disabled, and being hidden when enabled.
- Add additional Horde flight path data.
- Alliance data cleanup, data was being duplicated, this has been fixed.
 
 
2006-03-30 Version 1.4 Beta 10
-------------------------------
- BETA RELEASE FOR WOW 1.10 RELEASE.
- Modify CastingBarFrame data collection settings.
- Fix flightpath collection for Nighthave, Moonglade, same issue as with Silithus.
- Fix map data collection for Orgrimmar.
- Add some additional Horde and Alliance data.
 
 
2006-03-28 Version 1.4 Beta 9
------------------------------
- BETA RELEASE FOR WOW 1.10 RELEASE.
- Correct issue with CastingBarFrame disappearing after taking a flight.
- Clean up remaining Lys_Library function call.
 
 
2006-03-28 Version 1.4 Beta 8
------------------------------
- BETA RELEASE FOR WOW 1.10 RELEASE.
- Correct data load bug.
- Move timer init into main init routine.
- Move init routines to ADDON_LOADED event handler.
 
 
2006-03-28 Version 1.4 Beta 7
------------------------------
- BETA RELEASE FOR WOW 1.10 RELEASE.
- Correct colour code bug. This bug was due to removing the pre-dependance upon Lys_Library (Which will soon go out of development, and has not been updated for 1.10 anyhow).
 
 
2006-03-28 Version 1.4 Beta 6
------------------------------
- BETA RELEASE FOR WOW 1.10 RELEASE.
- Fix configuration import bug.
 
 
2006-03-23 Version 1.4 Beta 5
------------------------------
- BETA RELEASE FOR WOW 1.10 RELEASE.
- Remove all but the basic command line options. All config is now handled via the GUI menu.
- Clean up of unused display strings.
- Update so the changes Blizzard made to test realm do not break the remote report screen.
- Shared functions have been cleaned up (unused functions removed) and addon no longer depends (even suggested) upon Lys_Library which is soon do be removed.
- In-flight timer bar is now built using the blizzard CastingBarFrame. I can think of no time while in flight the CastingBarFrame will be possible to get used while in flight, hence the change.
- Added tooltips to the configuration screen.
- Added an option to shift the in-flight display up or down on the screen.
- Updated frFR and deDE locale files. These files now match lines almost exactly with the english locale file, lines not translated have been commented out but left in the files.
- Update to flight averaging code. If flight time difference is more than 10 seconds we reset to the new time. Either Blizzard updated the flight time, or else this is a multi-hop route and we went a different way this time.
 
 
2006-03-14 Version 1.4 Beta 4
------------------------------
- BETA RELEASE FOR WOW 1.10 RELEASE.
- Add flight time averaging. Each repeat flight time calculation for a flight point will be averaged against the previous time if it's length is within 10 seconds of a previous flight along this route.
 
 
2006-03-13 Version 1.4 Beta 3
------------------------------
- BETA RELEASE FOR WOW 1.10 RELEASE.
- Taxi Data is now referenced in a locale-independant manner. All previous data will need to be erased to handle the change.
- Taxi Data is now much more accessible for other functions due to the various routines created to access that data.
- Major overhaul to taxi data structure. This should store the flight data in a language-independant system, meaning everyone who runs this addon should be able to share the data pool, rather than needing seperate data sets as before.
 
 
2006-03-10 Version 1.4 Beta 2
------------------------------
- BETA RELEASE FOR WOW 1.10 RELEASE.
- Update remote map display to use blizzard's new line draw function.
- Fix zone map markers not displaying issue.
- Remove unused options from options screen and data related to those options.
 
 
2006-02-27 Version 1.4 Beta 1
------------------------------
- BETA RELEASE FOR WOW 1.10 RELEASE.
- Many changes to support WoW 1.10.
- Disable flight cost data collection and display.
- Remove most changes to blizzard flight display, default display now only adds the flight time for a particular flight route.
 
 
2006-02-21 Version 1.3.3
-------------------------
- Check for PLAYER_LEAVING_WORLD event and suspend all activities until we see the PLAYER_ENTERING_WORLD event.
- Add globals.lua to centralise global variables.
 
 
2006-01-31 Version 1.3.2
-------------------------
- Updates to German Translations.
- Updates for Alliance flight data.
 
 
2006-01-21 Version 1.3.1
-------------------------
- Fix bug with new report function erroring if the flight time is unknown.
 
 
2006-01-13 Version 1.3
-----------------------
- 1.3 Release
- Still includes small bug related to extra lines displaying on the remote flight path display at times.
- Updated for 1.9 patch.
 
 
2005-12-11 Version 1.3-beta9
-----------------------------
- BETA release
- Fix flight map display issues.
- Modify init routine calls, all calls should now be done via main program.
 
 
2005-12-04 Version 1.3-beta8
-----------------------------
- BETA release
- Add raid channel for efm flight reporting
 
 
2005-11-30 Version 1.3-beta7
-----------------------------
- BETA release
- Correct linewidth bug
- Moved certain values to per-character variables, this change was done to reduce the amount of data stored globally.
 
 
2005-11-29 Version 1.3-beta6
-----------------------------
- BETA release
- Add check to see if the "arrival" continent is the same as the source continent. This should never differ for a real flight.
- When in flight, if a summon dialogue (warlock only I think) is shown, flight time recording will cease immediately.
 
 
2005-11-05 Version 1.3-beta5
-----------------------------
- BETA release
- Add flight report option. Detailed in help text
 
 
2005-10-25 Version 1.3-beta4
-----------------------------
- BETA release
- Change to 1.3 beta, as this will be a minor revision number change.
- Updates to horde data set. Due to a minor issue the Valor's Rest flight path was still in the data set.
 
 
2005-10-23 Version 1.2.7-beta3
-------------------------------
- BETA release
- Add option to choose a specific continent when showing map screen. /efm open kalimdor for kalimdor, and /efm open azeroth for azeroth/eastern kingdoms.
- Issue with display of blizzard flight node data... might need a rebuild of the blizzard taxiframe just to handle this issue...
 
 
2005-10-22 Version 1.2.7-beta2
-------------------------------
- BETA release
- Modify flight node display code. If show alt paths are enabled the remote flight master display shows the nodes the current character knows as yellow, grey for nodes not known.
- WorldMap update routine modified to correct bug where the update routine might be called before the loading of data.
 
 
2005-10-21 Version 1.2.7-beta
------------------------------
- BETA release
- Add non-flight master flight map display. To view, use /efm open. This acts like the flightmaster map with all nodes showing grey. The same config as the normal flight master display applies, so if you have disabled remote flight nodes known by alts, then you won't see them on this map.
 
 
2005-10-18 Version 1.2.6
-------------------------
- Add slash command to remove a single flight node. This should cover for the times when blizzard renames a flight node, just delete the old entry by it's name and then you will no longer have that data cluttering your display.
- Add keybinding for options screen.
 
 
2005-10-14 Version 1.2.5
--------------------------
- Patch 1.8 updates
- Alliance data for enUS submitted by jgleigh from curse-gaming.com.
- Horde data for silithus flight path updated.
- Remove unneeded section from xml file.
 
 
2005-09-27 Version 1.2.4b
--------------------------
- Correct LYS_LOADED library issue
 
 
2005-09-27 Version 1.2.4
-------------------------
- Update base library code. The new library code should resolve the issue with the latest release of myAddOns, and also allow the options screen to be available once more.
- Include French flight-data supplied by Corwin. At this time not all flight paths are in the default load for french, nor do all paths have times/costs, this will be corrected as I have time.
- Correct slashcommand issue. Only one of the two slash commands was active.
- Cleanup of localization files. All translators who have assisted with this, the new format should make translations easier, please look over this and re-do any translations that are wrong.
- Remove loading message enable/disable. This feature is now handled in the library code.
 
 
2005-09-17 Version 1.2.3
-------------------------
- Update french translations
- Move translations off to seperate files for each locale. enUS is the "default" locale as that is the locale I code with.
- Move localizations off to their own segments in the toc, this moves all static definitions out of the xml file.
 
 
2005-09-16 Version 1.2.2
-------------------------
- Modified taxiframe handling to operate via event handler and not hook the event function.
- Changed the logic behind the function that adds flight node information.
- Generate max POI numbers on the fly. This allows for just updating the xml, or for blizzard to modify the max POI's in the main taxiframe xml.
- Using some blizzard defined strings for output rather than my own. This allows for easier translation efforts.
- Modify known paths code to not require initialising.
- Cleanup of the FlightMapData.lua file. Data will need to be erased on the client-side to cover for the update.
- Modification of init functions to be more localised for the various program segments.
 
 
2005-09-14 Version 1.2.1
-------------------------
- Correct issue with unknown flight times and the new remote flight timer code (Error in timer.lua).
- Correct issue where a route might be known, but not the flight time. This removes unknown flight routes from the remote flight path code until the user learns the route.
 
 
2005-09-12 Version 1.2
-----------------------
- When a flight node is "reachable" add to known flightpaths... this might break things, I haven't tested this extensively.
- Position change of the in-flight timer to not obscure the zone name displays.
- Initial test setup for allowing for size change of the in-flight progress bar.
- Add option to display remote flight path times and costs. Also display the path needed to fly there for that cost and time.
- Add size toggle for in-flight status bar large or a smaller bar.
- Update toc to 1700.
 
 
2005-09-09 Version 1.1
-------------------------
- Minor update to Localisations.
- Add myAddons to the optional dependancy list, just in case it was not loading after it, or the details where not working for it.
- Add status bar for in-flight timer, can be toggled off and on from the config menu.
- Modify zone map routine to write only when the zone map is opened, this should reduce the amount of processing the addon does.
- Random code-cleanup.
- Set load message to being active/not active by a variable... will add config option to modify variable in later releases.
- Translations cleanup - removed large chunks of the help message now the GUI config screen is here.
 
 
2005-09-05 Version 1.0
-----------------------
- Add in the missing data for Chillwind Camp and Light's Hope Chapel for the map translation data.
- Add in the GUI options screen. Access via /efm config.
- Add per-character flight map display.
- Split flightmaster display functions off to FlightMaster.lua to finalise segmentation effort for program.
- French and German translations lacking at this time. Hopefully the data can be brought up to date before the next release.
 
 
2005-09-05 Version 0.9.8
-------------------------
- Data definitions now locale-specific. Until naming data and the EFM_MapTranslation data are provided to me, those on locales other than enUS will not be able to load any base data.
- Update zone map tooltip so the timers align under each other (approximately, the proportional font makes that a touch difficult).
- Alliance data for Kalimdor on enUS completed.
- Horde data for Azeroth on enUS completed.
- Horde data for Kalimdor on enUS completed.
- Alliance data for Azeroth on enUS completed.
- Alliance data for Kalimdor on enUS completed.
- Druid data on enUS completed.
- Add MapNotes to optional dependancy to attempt to force EFM to load after MapNotes so the worldmapbutton_onupdate routine is not overwritten.
- Added option to force data clearing on load. This is to allow me to correct for bad data in the base data store.
- Corrected Data handling routine definition issue.
 
 
2005-09-04 Version 0.9.7
-------------------------
- German translation updated by Elkano at curse-gaming.
- Additional data for US horde data set.
- Discovered issue with duration and cost not aligning correctly. Blizzard uses a proportional font for the tooltip text, so alignment of multiple lines of differents chars is difficult. Text alignment is now as close as can be done without modifying the tooltip font.
- Modified layer alignment for the zone marker buttons. This appears to have resolved the mapnotes gathering issue.
- Moved the data handling routines (clearing/loading/validating/definining) off to a seperate file for tracking ease.
 
 
2005-09-01 Version 0.9.6
-------------------------
- Correct init routine to call "define" for options, not defaults.
- Hide timer display if disabled in flight.
- Corrected german slash commands (maybe...), replaced uppercase characters with lowercase characters.
- Move to newer library standard.
- Correct issue with ui reload causing zone marker to disappear.
 
 
2005-08-31 Version 0.9.5
-------------------------
- Configuration variables are now saved between sessions. Variables are global, not per-character.
- Add option to hide the druid flight paths if not desired to be shown.
 
 
2005-08-30 Version 0.9.4
-------------------------
- Correct Data loading issue.
- Add option to enable/disable flight master positions on zone map.
- Add option to enable/disable in-flight timers.
- Moved options handling to a seperate lua file.
- Convert colour codes in help to use the library defined codes.
 
 
2005-08-28 Version 0.9.3
-------------------------
- Correct correction for flight master mouse-over bug... next time I should check what was working previously...
 
 
2005-08-28 Version 0.9.2
-------------------------
- Correct issue with visiting a flight master but not "mousing over" any of the flight paths.
- Clean up issues with localisation.
 
 
2005-08-28 Version 0.9.1
-------------------------
- Add German translations, thanks to Gazzis from curse-gaming.
- Clean up money->text function.
- Added some default data for various functions - not used at present though.
- Updated data load routine to add all available data.
 
 
2005-08-27 Version 0.9
-----------------------
- Correct code issue with addon under 1.7.
- Remove deprecated RegisterForSave command.
- Move to new library system.
 
 
2005-08-27 Version 0.9 Beta 5
------------------------------
- Clean up some function calls, removal of old code.
 
 
2005-08-26 Version 0.9 Beta 4
------------------------------
- Undid change to data generation system that was put in place by previous betas. All variables are now checked and pre-built in their respective init routines.
 
 
2005-08-26 Version 0.9 Beta 3
------------------------------
- Add available flight paths, with duration and cost to the map tooltip.
- Correct clearing issue with new variables.
 
 
2005-08-26 Version 0.9 Beta 2
------------------------------
- Correct incorrect naming of icon for grey flight master image.
- Correct issue with logging in in the middle of a flight.
 
 
2005-08-25 Version 0.9 Beta
----------------------------
- Add flight path timers. Due to the change to the blizzard code in 1.7, split timers from base path to make the code simpler and the data easier to update.
- Added recording of flight costs.
- Added recording of flight master positions.
- Added zone to flight master translations (Yellow = Known by player, Grey = not known by player. Addon collect this data after install, so you need to visit for it to show yellow).
- Added display of the flight master location to the map screen.
- Added some french translation data, thanks to corwin from curse-gaming.
- Added recording of known flight masters on a per-player basis.
 
 
2005-08-22 Version 0.8
-----------------------
- Correct issue with data update routines.
- Update alliance flight paths with additional data, thanks to those that supplied the additional data.
 
 
2005-08-11 Version 0.7
-----------------------
- Correct line drawing when the line was less than a pixel wide, this was evident from the splintertree to crossroads flightpath and others.
- Increase number of possible flightpath lines to 100, this should never need to get changed as the maximum number I have seen so far is 28.
- Correct data loading issue for horde/alliance/druid flightpath data.
 
 
2005-07-29 Version 0.6
-----------------------
- Code cleanup
- Correct line drawing display. Blizzard appears to have changed the texture levels of various frames between 1.5 and 1.6...
 
 
2005-07-12 Version 0.5
-----------------------
- Update to new Blizzard LUA revision
- Add "easter-egg"... If you have the right things, you'll see it :-)
 
 
2005-06-29 Version 0.4
-----------------------
- Correct oops with data load names and variable naming.
 
 
2005-06-29 Version 0.3
-----------------------
- Corrected issue with new flight nodes not showing that you have found new routes.
- Modified data import routines to only import the data segments you desires, eg. horde/alliance/druid.
 
 
2005-06-28 Version 0.2
-----------------------
- Added the "learning" features for flight paths.
- Made the dataset be a loadable set, and not force loading of the data.
- Data loading from the provided data is a merge process (thanks Iriel).
 
 
2005-06-27 Version 0.1
-----------------------
- Initial Public Release
- Addon has most of the features I hope to include, hopefully only bug fixes will need to be done in the future
Property changes : Added: svn:executable +
trunk/localization-frFR.lua New file
0,0 → 1,102
--[[
 
French localization file.
Initial Unicode update by Khisanth.
 
Special thanks go to :-
Initial French Translation: Corwin Whitehorn
Updated by Sasmira
 
]]
 
-- Begin French Localization --
if ( GetLocale() == "frFR" ) then
 
--EFM_DESC = "Enhanced Flight Map";
--EFM_Version_String = format("%s - Version %s", EFM_DESC, EFM_Version);
 
-- Slash Commands
--EFM_CMD_HELP = "help";
--EFM_CMD_CLEAR = "clear";
--EFM_CMD_CLEAR_ALL = "clear all";
--EFM_CMD_GUI = "config";
--EFM_CMD_MAP = "open";
--EFM_CMD_REPORT = "report";
 
--EFM_SLASH1 = "/enhancedflightmap";
--EFM_SLASH2 = "/efm";
 
-- Help Text
EFM_HELP_TEXT0 = "---";
EFM_HELP_TEXT1 = format("%s Aide aux commandes:", EFM_Version_String);
EFM_HELP_TEXT2 = format("Taper %s ou %s pour effectuer les commandes suivantes:-", format(EFM_HELPCMD_STRING, EFM_SLASH1.." <command>"), format(EFM_HELPCMD_STRING, EFM_SLASH2.." <command>"));
EFM_HELP_TEXT3 = format("%s: Affiche ce message.", format(EFM_HELPCMD_STRING, EFM_CMD_HELP));
EFM_HELP_TEXT4 = format("%s: Affiche le menu d\'options.", format(EFM_HELPCMD_STRING, EFM_CMD_GUI));
EFM_HELP_TEXT5 = format("%s: Efface la liste des voies a\195\169riennes connues.", format(EFM_HELPCMD_STRING, EFM_CMD_CLEAR));
EFM_HELP_TEXT6 = format("%s: Efface la liste des voies a\195\169riennes et des points de vols connus pour: %s.", format(EFM_HELPCMD_STRING, EFM_CMD_CLEAR.." <faction>"), format(EFM_HELPCMD_STRING, "<faction>"));
EFM_HELP_TEXT7 = format("%s: Affiche une carte semblable \195\160 la carte de maitre de vol pour le continent courant.", format(EFM_HELPCMD_STRING, EFM_CMD_MAP));
EFM_HELP_TEXT8 = format("%s: Affiche une carte semblable \195\160 la carte de maitre de vol pour le continent <continent>, \195\160 l\'endroit ou <continent> est sur Kalimdor or Azeroth.", format(EFM_HELPCMD_STRING, EFM_CMD_MAP.." <continent>"));
EFM_HELP_TEXT9 = format("%s: Affiche votre temps moyen de destination et d\'arriv\195\169e sur le canal <channel>, <channel> peut \195\170tre guilde, groupe ou un nombre appartenant \195\160 un canal existant.", format(EFM_HELPCMD_STRING, EFM_CMD_REPORT.." <channel>"));
 
-- Other messages
EFM_CLEAR_HELP = format("%s: Afin de pouvoir effacer la liste, vous devez taper %s . Ceci est une s\195\169curit\195\169.", EFM_DESC, format(EFM_HELPCMD_STRING, EFM_CMD_CLEAR_ALL));
EFM_MSG_CLEAR = format("%s: Voies a\195\169riennes effac\195\169es.", EFM_DESC);
EFM_MSG_CLEARFACTION = format("%s: Voies a\195\169riennes %%s effac\195\169es.", EFM_DESC);
EFM_MSG_DATALOAD = format("%s: Voies a\195\169riennes %%s charg\195\169es.", EFM_DESC);
--EFM_MSG_DATALOADTIMERS = format("%s: Flight path data for %%s loaded. Data only loaded for known flight points.", EFM_DESC);
EFM_NEW_NODE = format("%s: %s %%s vers %%s.", EFM_DESC, ERR_NEWTAXIPATH);
EFM_MSG_DELETENODE = format("%s: Les correspondances %%s et toutes donn\195\169es sont effac\195\169es!", EFM_DESC);
EFM_MSG_MOVENODE = format("%s: Moving node %%s to correct map location.", EFM_DESC);
 
-- Remote flight path messages
--EFM_FMCMD_KALIMDOR = "kalimdor";
--EFM_FMCMD_AZEROTH = "azeroth";
--EFM_FMCMD_OUTLAND = "outland";
 
-- Flight time messages
EFM_FT_FLIGHT_TIME = "Temps de vol: ";
--EFM_FT_FLIGHT_TIME_CALC = "Calculated flight time: ";
EFM_FT_DESTINATION = "Vol vers ";
EFM_FT_ARRIVAL_TIME = "Atterissage dans: ";
EFM_FT_INCORRECT = "Chronom\195\170trage incorrect, les temps de vol seront mis \195\160 jour \195\160 l\'atterissage.";
 
-- Flight time report messages
EFM_MSG_REPORT = "EFM: En direction de %s, atterrissage estim\195\169 \195\160 %s.";
EFM_MSG_REPORTERROR = "EFM: Erreur: Pas en vol ou destination inconnue!";
 
-- Map screen messages
EFM_MAP_PATHLIST = "Destinations disponibles";
 
-- GUI Options Screen
EFM_GUITEXT_Header = format("Options: %s", EFM_DESC);
EFM_GUITEXT_Timer = "Afficher la dur\195\169e du temps de vol";
EFM_GUITEXT_ShowTimerBar = "Afficher la barre de d\195\169compte de temps";
--EFM_GUITEXT_ShrinkStatusBar = "Status bar shrinks in relation to time left in flight.";
EFM_GUITEXT_ShowLargeBar = "Afficher une grande barre";
EFM_GUITEXT_ZoneMarker = "Afficher les marqueurs de zone";
EFM_GUITEXT_DruidPaths = "Afficher les trajets a\195\169riens pour druides";
EFM_GUITEXT_DisplaySlider = "Position d\'Affichage en vol. Position: %s.";
EFM_GUITEXT_LoadHeader = "Chargement BDD";
--EFM_GUITEXT_LoadAlliance = FACTION_ALLIANCE; -- Should not need localization as this is the official blizzard locale-string.
EFM_GUITEXT_LoadDruid = "Druide";
--EFM_GUITEXT_LoadHorde = FACTION_HORDE; -- Should not need localization as this is the official blizzard locale-string.
--EFM_GUITEXT_LoadAll = "Load all pre-load data";
 
-- Key Binding Strings
--BINDING_HEADER_EFM = "Enhanced Flight Map";
BINDING_NAME_EFM_OPTIONS = "[ON/OFF]- Menu d\'options";
--BINDING_NAME_EFM_MAP1 = "Toggle map - Current Continent";
--BINDING_NAME_EFM_MAP2 = "Toggle map - Kalimdor";
--BINDING_NAME_EFM_MAP3 = "Toggle map - Azeroth";
--BINDING_NAME_EFM_MAP4 = "Toggle map - Outland";
 
-- Debug Strings
EFM_DEBUG_HEADER_MT = format("%s: Voies a\195\169riennes sans dur\195\169e connue:-", EFM_DESC);
EFM_DEBUG_MT = format("%s: Vol sans dur\195\169e connue pour %%s vers %%s. %%s Hop(s).", EFM_DESC);
 
EFM_SearchZones = {
["Pins argent\195\169s"] = "For\195\170t des Pins argent\195\169s (Silverpine Forest)",
}
 
-- End French Localization --
end
\ No newline at end of file Property changes : Added: svn:executable +
trunk/localization-deDE.lua New file
0,0 → 1,112
--[[
German Localization file
 
Special thanks go to
Gazzis who did the initial german localisation.
Elkano for updating the german translation.
themicro for updating this once more.
 
Initial Unicode update by Khisanth.
]]
 
-- Begin German Localization --
if ( GetLocale() == "deDE" ) then
 
--EFM_DESC = "Enhanced Flight Map";
--EFM_Version_String = format("%s - Version %s", EFM_DESC, EFM_Version);
 
-- Slash Commands
EFM_CMD_HELP = "hilfe";
EFM_CMD_CLEAR = "l\195\182schen";
EFM_CMD_CLEAR_ALL = "alle l\195\182schen";
--EFM_CMD_GUI = "config";
EFM_CMD_MAP = "karte";
EFM_CMD_REPORT = "melden";
 
--EFM_SLASH1 = "/enhancedflightmap";
--EFM_SLASH2 = "/efm";
 
-- Help Text
EFM_HELP_TEXT0 = "---";
EFM_HELP_TEXT1 = format("%s Hilfe / Beschreibung der Befehle:", EFM_Version_String);
EFM_HELP_TEXT2 = format("Benutze %s oder %s um die folgenden Befehle auszuf\195\188hren:-", format(EFM_HELPCMD_STRING, EFM_SLASH1.." <befehl>"), format(EFM_HELPCMD_STRING, EFM_SLASH2.." <befehl>"));
EFM_HELP_TEXT3 = format("%s: Zeigt diese Hilfe an.", format(EFM_HELPCMD_STRING, EFM_CMD_HELP));
EFM_HELP_TEXT4 = format("%s: Zeigt das Optionsfenster.", format(EFM_HELPCMD_STRING, EFM_CMD_GUI));
EFM_HELP_TEXT5 = format("%s: L\195\182scht die Liste der bekannten Flugpunkte und -routen.", format(EFM_HELPCMD_STRING, EFM_CMD_CLEAR));
EFM_HELP_TEXT6 = format("%s: L\195\182scht die bekannten Flugpunkte und -routen f\195\188r %s.", format(EFM_HELPCMD_STRING, EFM_CMD_CLEAR.." <fraktion>"), format(EFM_HELPCMD_STRING, "<fraktion>"));
EFM_HELP_TEXT7 = format("%s: Zeigt eine Karte \195\164hnlich der des Flugmeisters f\195\188r den aktuellen Kontinent.", format(EFM_HELPCMD_STRING, EFM_CMD_MAP));
EFM_HELP_TEXT8 = format("%s: Zeigt eine Karte \195\164hnlich der des Flugmeisters f\195\188r den Kontinent <kontinent>, wobei <kontinent> gleich kalimdor, azeroth oder scherbenwelt ist.", format(EFM_HELPCMD_STRING, EFM_CMD_MAP.." <kontinent>"));
EFM_HELP_TEXT9 = format("%s: Meldet das aktuelle Flugziel sowie Ankunftszeit in <channel>, <channel> kann enweder guild, party oder eine Nummer, welche f\195\188r einen aktiven Channel steht, sein.", format(EFM_HELPCMD_STRING, EFM_CMD_REPORT.." <channel>"));
 
-- Other messages
EFM_CLEAR_HELP = format("%s: Um die Liste wirklich zu l\195\182schen %s eintippen. Dies ist ein Sicherheitsfeature.", EFM_DESC, format(EFM_HELPCMD_STRING, EFM_CMD_CLEAR_ALL));
EFM_MSG_CLEAR = format("%s: Alle Flugdaten gel\195\182scht.", EFM_DESC);
EFM_MSG_CLEARFACTION = format("%s: Flugdaten f\195\188r %%s gel\195\182scht.", EFM_DESC);
EFM_MSG_DATALOAD = format("%s: Flugdaten f\195\188r %%s geladen.", EFM_DESC);
EFM_MSG_DATALOADTIMERS = format("%s: Flugdaten f\195\188r %%s geladen. Es wurden nur Daten bekannter Flugpunkte geladen.", EFM_DESC);
EFM_NEW_NODE = format("%s: %s %%s nach %%s.", EFM_DESC, ERR_NEWTAXIPATH);
EFM_MSG_DELETENODE = format("%s: Flugdaten f\195\188r %%s und alle zugeh\195\182rigen Daten gel\195\182scht!", EFM_DESC);
EFM_MSG_MOVENODE = format("%s: Bewege Flugpunkt %%s an die richtige Kartenposition.", EFM_DESC);
 
-- Remote flight path messages
--EFM_FMCMD_KALIMDOR = "kalimdor";
--EFM_FMCMD_AZEROTH = "azeroth";
EFM_FMCMD_OUTLAND = "scherbenwelt";
EFM_FMCMD_NORTHREND = "nordend";
 
-- Flight time messages
EFM_FT_FLIGHT_TIME = "Flugzeit: ";
EFM_FT_FLIGHT_TIME_CALC = "Berechnete Flugzeit: ";
EFM_FT_DESTINATION = "Ziel: ";
EFM_FT_ARRIVAL_TIME = "Ankunft in: ";
EFM_FT_INCORRECT = "Flugzeit inkorrekt, Zeit wird bei der Landung aktualisiert.";
 
-- Flight time report messages
EFM_MSG_REPORT = "EFM: Reise nach %s, voraussichtliche Ankunft in %s.";
EFM_MSG_REPORTERROR = "EFM: Fehler: Nicht am fliegen oder Flugziel unbekannt!";
 
-- Map screen messages
EFM_MAP_PATHLIST = "Verf\195\188gbare Flugrouten";
 
-- GUI Options Screen
EFM_GUITEXT_Header = format("%s Einstellungen", EFM_DESC);
EFM_GUITEXT_Timer = "Zeige Timer w\195\164hrend des Fluges";
EFM_GUITEXT_ShowTimerBar = "Zeige Timer Statusleiste w\195\164hrend des Fluges";
--EFM_GUITEXT_ShrinkStatusBar = "Status bar shrinks in relation to time left in flight.";
--EFM_GUITEXT_ShowLargeBar = "Gro\195\159e Timer Statusleiste w\195\164hrend dem Flug";
EFM_GUITEXT_ZoneMarker = "Zeige Flugmeister Standorte auf der Karte";
EFM_GUITEXT_DruidPaths = "Zeige Druiden Flugrouten";
--EFM_GUITEXT_DisplaySlider = "Timer Position. Offset: %s.";
EFM_GUITEXT_SizeSlider = "Timergr\195\182\195\159e. Prozentsatz: %3.2f.";
EFM_GUITEXT_LoadHeader = "Lade Daten";
--EFM_GUITEXT_LoadAlliance = FACTION_ALLIANCE; -- Should not need localization as this is the official blizzard locale-string.
EFM_GUITEXT_LoadDruid = "Druide";
--EFM_GUITEXT_LoadHorde = FACTION_HORDE; -- Should not need localization as this is the official blizzard locale-string.
EFM_GUITEXT_LoadAll = "Alle vorbereiteten Daten laden.";
 
-- Key Binding Strings
--BINDING_HEADER_EFM = "Enhanced Flight Map";
BINDING_NAME_EFM_OPTIONS = "Optionsfenster anzeigen";
BINDING_NAME_EFM_MAP1 = "Karte wechseln - Aktueller Kontinent";
BINDING_NAME_EFM_MAP2 = "Karte wechseln - Kalimdor";
BINDING_NAME_EFM_MAP3 = "Karte wechseln - \195\150stliche K\195\182nigreiche";
BINDING_NAME_EFM_MAP4 = "Karte wechseln - Scherbenwelt";
 
-- Debug Strings
EFM_DEBUG_HEADER_MT = format("%s: Flugrouten ohne Flugzeiten:-", EFM_DESC);
EFM_DEBUG_MT = format("%s: Flugzeit von %%s nach %%s fehlt. %%s Hop(s).", EFM_DESC);
 
EFM_SearchZones = {
["\195\182stliche Pestl\195\164nder"] = "Die \195\182stlichen Pestl\195\164nder",
["sengende Schlucht"] = "Die sengende Schlucht",
["westliche Pestl\195\164nder"] = "Die westlichen Pestl\195\164nder",
["Verw\195\188stete Lande"] = "Die verw\195\188steten Lande",
["Sammelpunkt der Zerschmetterten Sonne"] = "Insel von Quel'Danas",
["Die boreanische Tundra"] = "Boreanische Tundra",
["Transitusschild, Kaltarra"] = "Boreanische Tundra",
["Heulender Fjord"] = "Der heulende Fjord",
["Acherus: Die Schwarze Festung"] = "Östliche Pestländer",
};
 
-- End German Localization --
end
Property changes : Added: svn:executable +
trunk/localization.lua New file
0,0 → 1,123
--[[
Localization.lua
 
Mostly this is to allow some kind soul to assist with a future internationalisation effort...
But it won't be me as English is the only language I know :-)
 
For those who would like to assist with localising this, just remember,
if you are not modifying a variable, please don't include it in your localization,
commenting it out so it can be localised it needed in the future is recommended.
 
Please see localization-frFR.lua and localization-deDE.lua for example internationalisations.
]]
 
-- Begin English Localization --
EFM_DESC = "Enhanced Flight Map";
EFM_Version_String = format("%s - Version %s", EFM_DESC, EFM_Version);
 
-- Slash Commands
EFM_CMD_HELP = "help";
EFM_CMD_CLEAR = "clear";
EFM_CMD_CLEAR_ALL = "clear all";
EFM_CMD_GUI = "config";
EFM_CMD_MAP = "open";
EFM_CMD_REPORT = "report";
 
EFM_SLASH1 = "/enhancedflightmap";
EFM_SLASH2 = "/efm";
 
-- Help Text
EFM_HELP_TEXT0 = "---";
EFM_HELP_TEXT1 = format("%s command help:", EFM_Version_String);
EFM_HELP_TEXT2 = format("Use %s or %s to perform the following commands:-", format(EFM_HELPCMD_STRING, EFM_SLASH1.." <command>"), format(EFM_HELPCMD_STRING, EFM_SLASH2.." <command>"));
EFM_HELP_TEXT3 = format("%s: Displays this message.", format(EFM_HELPCMD_STRING, EFM_CMD_HELP));
EFM_HELP_TEXT4 = format("%s: Displays the options menu.", format(EFM_HELPCMD_STRING, EFM_CMD_GUI));
EFM_HELP_TEXT5 = format("%s: Clears the list of known routes and flight points.", format(EFM_HELPCMD_STRING, EFM_CMD_CLEAR));
EFM_HELP_TEXT6 = format("%s: Clears the list of known routes and flight points for %s.", format(EFM_HELPCMD_STRING, EFM_CMD_CLEAR.." <faction>"), format(EFM_HELPCMD_STRING, "<faction>"));
EFM_HELP_TEXT7 = format("%s: Displays a map similar to the flight master map for the current continent.", format(EFM_HELPCMD_STRING, EFM_CMD_MAP));
EFM_HELP_TEXT8 = format("%s: Displays a map similar to the flight master map for the continent <continent>, where <continent> is kalimdor or azeroth.", format(EFM_HELPCMD_STRING, EFM_CMD_MAP.." <continent>"));
EFM_HELP_TEXT9 = format("%s: Reports your current destination and arrival time to <channel>, <channel> can be guild, party or a number that reflects a real channel.", format(EFM_HELPCMD_STRING, EFM_CMD_REPORT.." <channel>"));
 
-- Other messages
EFM_CLEAR_HELP = format("%s: To truly clear the list, you need to type %s this is a safety feature.", EFM_DESC, format(EFM_HELPCMD_STRING, EFM_CMD_CLEAR_ALL));
EFM_MSG_CLEAR = format("%s: Entire flight path data cleared.", EFM_DESC);
EFM_MSG_CLEARFACTION = format("%s: Entire flight path data for %%s cleared.", EFM_DESC);
EFM_MSG_DATALOAD = format("%s: Entire flight path data for %%s loaded.", EFM_DESC);
EFM_MSG_DATALOADTIMERS = format("%s: Flight path data for %%s loaded. Data only loaded for known flight points.", EFM_DESC);
EFM_NEW_NODE = format("%s: %s %%s to %%s.", EFM_DESC, ERR_NEWTAXIPATH);
EFM_MSG_DELETENODE = format("%s: Flight Node %%s and all referencing data deleted!", EFM_DESC);
EFM_MSG_MOVENODE = format("%s: Moving node %%s to correct map location.", EFM_DESC);
 
-- Remote flight path messages
EFM_FMCMD_KALIMDOR = "kalimdor";
EFM_FMCMD_AZEROTH = "azeroth";
EFM_FMCMD_OUTLAND = "outland";
EFM_FMCMD_NORTHREND = "northrend";
 
-- Flight time messages
EFM_FT_FLIGHT_TIME = "Recorded flight time: ";
EFM_FT_FLIGHT_TIME_CALC = "Calculated flight time: ";
EFM_FT_DESTINATION = "Flying To ";
EFM_FT_ARRIVAL_TIME = "Estimated arrival in: ";
EFM_FT_INCORRECT = "Flight time incorrect, timers will be updated upon landing.";
 
-- Flight time report messages
EFM_MSG_REPORT = "EFM: Heading to %s, estimated to arrive in %s.";
EFM_MSG_REPORTERROR = "EFM: Error: Not in flight or destination unknown!";
 
-- Map screen messages
EFM_MAP_PATHLIST = "Available Flight Paths";
 
-- GUI Options Screen
EFM_GUITEXT_Header = format("%s Options", EFM_DESC);
EFM_GUITEXT_Timer = "Show In-Flight timers";
EFM_GUITEXT_ShowTimerBar = "Show In-Flight timer status bar";
EFM_GUITEXT_ShrinkStatusBar = "Status bar shrinks in relation to time left in flight.";
EFM_GUITEXT_ZoneMarker = "Show Flightmaster locations on Zone Map";
EFM_GUITEXT_DruidPaths = "Show the Druid-only flight paths";
EFM_GUITEXT_DisplaySlider = "In-Flight Display Position. Offset: %s.";
EFM_GUITEXT_SizeSlider = "In-Flight Timer Bar Size. Percentage: %3.2f.";
EFM_GUITEXT_LoadHeader = "Data Loading";
EFM_GUITEXT_LoadAlliance = FACTION_ALLIANCE; -- Should not need localization as this is the official blizzard locale-string.
EFM_GUITEXT_LoadDruid = "Druid";
EFM_GUITEXT_LoadHorde = FACTION_HORDE; -- Should not need localization as this is the official blizzard locale-string.
EFM_GUITEXT_LoadAll = "Load all pre-load data";
EFM_GUITEXT_ContinentOverlay = "Continent Map Overlay";
EFM_GUITEXT_UpdateRecorded = "Update Recorded data with Calculated";
 
-- Key Binding Strings
BINDING_HEADER_EFM = "Enhanced Flight Map";
BINDING_NAME_EFM_OPTIONS = "Toggle options screen";
BINDING_NAME_EFM_MAP1 = "Toggle map - Current Continent";
BINDING_NAME_EFM_MAP2 = "Toggle map - Kalimdor";
BINDING_NAME_EFM_MAP3 = "Toggle map - Azeroth";
BINDING_NAME_EFM_MAP4 = "Toggle map - Outland";
BINDING_NAME_EFM_REPORT1 = "Report to Party";
BINDING_NAME_EFM_REPORT2 = "Report to Raid";
BINDING_NAME_EFM_REPORT3 = "Report to Guild";
 
-- Debug Strings
EFM_DEBUG_HEADER_MT = format("%s: Flight Paths with Missing Times:-", EFM_DESC);
EFM_DEBUG_MT = format("%s: Flight time missing for %%s to %%s. %%s Hop(s).", EFM_DESC);
 
-- Blizzard fixup strings.
EFM_SearchZones = {
["Silvermoon City"] = "Eversong Woods",
["Shattered Sun Staging Area"] = "Isle of Quel'Danas",
["Transitus Shield, Coldarra"] = "Borean Tundra",
["Acherus: The Ebon Hold"] = "Eastern Plaguelands",
["Ratchet, The Barrens"] = "Northern Barrens",
["Rebel Camp, Stranglethorn Vale"] = "Northern Stranglethorn",
["Fort Livingston, Stranglethorn"] = "Northern Stranglethorn",
-- ["Sandy Beach, Vashj'ir"] = "Shimmering Expanse", -- Flight
-- ["Sandy Beach, Vashj'ir"] = "Kelp'thar Forest", -- Water
["Silver Tide Hollow, Vashj'ir"] = "Shimmering Expanse",
["Smuggler's Scar, Vashj'ir"] = "Kelp'thar Forest",
["Legion's Rest, Vashj'ir"] = "Shimmering Expanse",
-- ["Stygian Bounty, Vashj'ir"] = "Vashj'ir", -- Flight
-- ["Stygian Bounty, Vashj'ir"] = "Shimmering Expanse", -- Water
["Tenebrous Cavern, Vashj'ir"] = "Abyssal Depths",
}
 
 
-- End English Localization --
Property changes : Added: svn:executable +
trunk/FlightMaster.lua New file
0,0 → 1,236
--[[
 
FlightMaster.lua
 
The various routines for handling the flight master displays
 
]]
 
-- Function: Replacement for blizzard function...
function EFM_FM_DrawOneHopLines()
-- Check to see if we are displaying the remote flight path display.
-- If so we don't want to do anything as we could be modifying our data and not knowing it.
-- Also the blizzard functions error if you attempt to show flight path details when you aren't at the flight master...
 
-- The following code adds in the single-hop routes so the remote flight path display can show the correct flight paths...
local nodeTargets = {};
local routeList = {};
SetMapToCurrentZone();
local continent = GetCurrentMapContinent();
 
local usableNodes = {};
local deadNodes = {};
 
local nodeStyle = 0;
if (IsSwimming() == 1) then
nodeStyle = 1;
EFM_Shared_DebugMessage("Player is Swimming.", Lys_Debug);
end
 
for i=1, NumTaxiNodes() do
local nodeName = TaxiNodeName(i);
local fmX, fmY = TaxiNodePosition(i);
 
fmX = EFM_SF_ValueToPrecision(fmX, 2);
fmY = EFM_SF_ValueToPrecision(fmY, 2);
 
local nodeType = TaxiNodeGetType(i);
if (nodeType == "CURRENT") then
EFM_TaxiOrigin = nodeName;
-- Add the current node, if it doesn't already exist
-- We can only "create" the current flight node, due to the new flight node changes.
if (EFM_NI_GetNodeByName(nodeName, nodeStyle) == nil) then
EFM_NI_CreateNode(continent, nodeName, nodeStyle);
end
 
-- Set the Co-ordinates of the flight node.
local mapX, mapY = GetPlayerMapPosition("player");
mapX = floor(mapX * 10000) / 100;
mapY = floor(mapY * 10000) / 100;
local wMapX, wMapY = EFM_Shared_GetWorldMapPosition();
 
EFM_NI_AddNode_zoneLoc(nodeName, mapX, mapY, nodeStyle);
EFM_NI_AddNode_wmLoc(nodeName, wMapX, wMapY, nodeStyle);
EFM_NI_AddNode_fmLoc(nodeName, fmX, fmY, nodeStyle);
table.insert(usableNodes, nodeName);
 
EFM_NI_Reachable(continent, nodeName, true);
elseif (nodeType == "REACHABLE") then
 
EFM_NI_AddNode_fmLoc(nodeName, fmX, fmY, nodeStyle);
 
-- Add the node to the routelist table
if (GetNumRoutes(i) == 1) then
table.insert(routeList, nodeName);
EFM_KP_AddLocation(continent, nodeName);
end
 
EFM_NI_Reachable(continent, nodeName, true);
end
end
 
-- Add the node route data (new method)
EFM_NI_AddRoutes(EFM_TaxiOrigin, routeList, nodeStyle);
end
 
-- Function: Commands to run when we get the TAXIMAP_OPEN event
function EFM_FM_TaxiMapOpenEvent()
local nodeStyle = 0;
if (IsSwimming() == 1) then
nodeStyle = 1;
end
 
if (EFM_ShowUnknownTimes == true) then
local missingList = {};
if (EFM_TaxiOrigin ~= nil) then
local seenNodes = {};
local seenHops = false;
table.insert(seenNodes, EFM_TaxiOrigin);
local nodes = NumTaxiNodes();
local myHops = 1;
while (myHops ~= 0) do
for i = 1, nodes, 1 do
local destNode = TaxiNodeName(i);
if (not EFM_SF_StringInTable(seenNodes, destNode)) then
if (GetNumRoutes(i) == myHops) then
local flightTime = EFM_NI_GetNode_FlightDuration(EFM_TaxiOrigin, destNode, nodeStyle);
if (flightTime == nil) then
table.insert(missingList, destNode);
seenHops = true;
end
table.insert(seenNodes, destNode);
end
end
end
-- Exit if we have shown a route, or we have gotten to > 3 hops as all hops get displayed by > 6 no matter what.
if (seenHops == true) then
EFM_Message("error", EFM_DEBUG_HEADER_MT);
EFM_Message("error", format("%s: Displaying routes with missing times that are %s hop(s) away.", EFM_DESC, myHops));
for index, hopName in pairs(missingList) do
EFM_Message("error", format(EFM_DEBUG_MT, EFM_TaxiOrigin, hopName, myHops));
end
myHops = 0;
elseif (myHops > 8) then
EFM_Message("error", EFM_DEBUG_HEADER_MT);
EFM_Message("error", format("%s: none", EFM_DESC));
myHops = 0;
else
myHops = myHops + 1;
end
end
end
end
end
 
-- Function: Add flight times to the blizzard flight display.
function EFM_FM_TaxiNodeOnButtonEnter(button)
local myDebug = false;
 
local index = button:GetID();
 
-- Make sure we get which continent we are on, and as we can't open the real flight master elsewhere, this isn't a big deal.
SetMapToCurrentZone();
local continent = EFM_Shared_GetContinentName(GetCurrentMapContinent());
 
-- "Own" the GameTooltip
GameTooltip:SetOwner(button, "ANCHOR_RIGHT");
 
local recordedDuration = 0;
local calcDuration = 0;
local hopCount = 0;
local missingHop = false;
local nodeStyle = 0;
 
if (IsSwimming() == 1) then
nodeStyle = 1;
end
 
GameTooltip:AddLine(TaxiNodeName(index), "", 1.0, 1.0, 1.0);
 
-- Set up variables
local numRoutes = GetNumRoutes(index);
 
local type = TaxiNodeGetType(index);
if ( type == "REACHABLE" ) then
-- This next bit is for the duration data.
if (EFM_NI_GetNode_FlightDuration(EFM_TaxiOrigin, TaxiNodeName(index), nodeStyle) ~= nil) then
recordedDuration = EFM_NI_GetNode_FlightDuration(EFM_TaxiOrigin, TaxiNodeName(index), nodeStyle);
end
 
-- Original Blizzard Stuff
TaxiNodeSetCurrent(index);
 
for i=1, numRoutes do
local sX = EFM_SF_ValueToPrecision(TaxiGetSrcX(index, i), 2);
local sY = EFM_SF_ValueToPrecision(TaxiGetSrcY(index, i), 2);
local dX = EFM_SF_ValueToPrecision(TaxiGetDestX(index, i), 2);
local dY = EFM_SF_ValueToPrecision(TaxiGetDestY(index, i), 2);
 
-- Code to "fuzzy" the location matching... this helps with weird node placement sometimes...
local mySNode = EFM_NI_GetNode_fmLoc_Fuzzy(sX, sY, continent);
local myDNode = EFM_NI_GetNode_fmLoc_Fuzzy(dX, dY, continent);
 
hopCount = hopCount + 1;
 
if ((mySNode ~= nil) and (myDNode ~= nil)) then
EFM_Shared_DebugMessage("Source Node: "..mySNode..", Dest Node: "..myDNode, myDebug);
 
if (EFM_NI_GetNode_FlightDuration(mySNode, myDNode, nodeStyle) ~= nil) then
calcDuration = calcDuration + EFM_NI_GetNode_FlightDuration(mySNode, myDNode, nodeStyle);
else
missingHop = true;
end
else
EFM_Shared_DebugMessage("sX: "..sX.." sY: "..sY, myDebug);
EFM_Shared_DebugMessage("dX: "..dX.." dY: "..dY, myDebug);
missingHop = true;
end
end
 
-- Check to see if there is a missing single-hop in calculated flights, if so, do not update recorded times
if ((missingHop == false) and (calcDuration ~= 0)) then
-- If Duration unknown set duration to calculated duration.
if (recordedDuration == 0) then
EFM_NI_AddNode_FlightDuration(EFM_TaxiOrigin, TaxiNodeName(index), calcDuration, nodeStyle);
end
 
-- If the calculated duration is different by more than 30 seconds to the recorded duration,
-- replace recorded duration with calculated duration.
if (EFM_MyConf.UpdateRecorded == true) then
if (abs(calcDuration - recordedDuration) > 30) then
EFM_NI_AddNode_FlightDuration(EFM_TaxiOrigin, TaxiNodeName(index), calcDuration, nodeStyle);
end
end
end
 
-- Add Durations
if (recordedDuration ~= 0) then
GameTooltip:AddLine(EFM_FT_FLIGHT_TIME..EFM_SF_FormatTime(recordedDuration), "", 0.5, 1.0, 0.5);
else
GameTooltip:AddLine(EFM_FT_FLIGHT_TIME..UNKNOWN, "", 0.5, 1.0, 0.5);
end
if (hopCount > 1) then
if (calcDuration ~= 0) then
if (missingHop == false) then
GameTooltip:AddLine(EFM_FT_FLIGHT_TIME_CALC..EFM_SF_FormatTime(calcDuration), "", 0.5, 1.0, 0.5);
else
GameTooltip:AddLine(EFM_FT_FLIGHT_TIME_CALC..EFM_SF_FormatTime(calcDuration).." *", "", 0.5, 1.0, 0.5);
end
else
if (missingHop == false) then
GameTooltip:AddLine(EFM_FT_FLIGHT_TIME_CALC..UNKNOWN, "", 0.5, 1.0, 0.5);
else
GameTooltip:AddLine(EFM_FT_FLIGHT_TIME_CALC..UNKNOWN.." *", "", 0.5, 1.0, 0.5);
end
end
end
 
-- Moved money line here so it will show after the flight time display information
SetTooltipMoney(GameTooltip, TaxiNodeCost(button:GetID()));
 
elseif ( type == "CURRENT" ) then
GameTooltip:AddLine(TEXT(TAXINODEYOUAREHERE), "", 0.5, 1.0, 0.5);
end
 
GameTooltip:Show();
end
Property changes : Added: svn:executable +