|
|
|
|
local WIT, core = ...
|
|
|
|
|
|
|
|
|
|
local RoutesHelper = {}
|
|
|
|
|
local L = nil
|
|
|
|
|
|
|
|
|
|
core.RoutesHelper = RoutesHelper
|
|
|
|
|
|
|
|
|
|
local route_zone_args_desc_table = {
|
|
|
|
|
type = "description",
|
|
|
|
|
name = function(info)
|
|
|
|
|
local zone = tonumber(info[2])
|
|
|
|
|
local count = 0
|
|
|
|
|
|
|
|
|
|
for route_name, route_table in pairs(Routes.db.global.routes[zone]) do
|
|
|
|
|
if #route_table.route > 0 then
|
|
|
|
|
count = count + 1
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return L["You have |cffffd200%d|r route(s) in |cffffd200%s|r."]:format(count, C_Map.GetMapInfo(zone).name)
|
|
|
|
|
end,
|
|
|
|
|
order = 0,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
local function CheckIfRoutesIsEnabled()
|
|
|
|
|
if not RoutesHelper.IsRoutesAvailable() then
|
|
|
|
|
error("Routes addon not found")
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local function GetRoutesMapName(mapId)
|
|
|
|
|
for name, id in pairs(Routes.LZName) do
|
|
|
|
|
if id == mapId then
|
|
|
|
|
return name
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function RoutesHelper.IsRoutesAvailable()
|
|
|
|
|
return Routes and Routes.db and Routes.db.global
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function RoutesHelper.NormaliseRouteData(routeData)
|
|
|
|
|
routeData.hidden = false
|
|
|
|
|
routeData.looped = 1
|
|
|
|
|
routeData.visible = true
|
|
|
|
|
routeData.selection = {}
|
|
|
|
|
routeData.db_type = {}
|
|
|
|
|
routeData.taboos = {}
|
|
|
|
|
routeData.taboolist = {}
|
|
|
|
|
|
|
|
|
|
return routeData;
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local function importRoute(data)
|
|
|
|
|
if data and data.RouteZone and data.RouteKey and data.RouteName and data.RouteData then
|
|
|
|
|
local mapInfo = C_Map.GetMapInfo(data.RouteZone)
|
|
|
|
|
|
|
|
|
|
if not mapInfo then return end
|
|
|
|
|
|
|
|
|
|
L = L or LibStub("AceLocale-3.0"):GetLocale("Routes", false)
|
|
|
|
|
|
|
|
|
|
RoutesHelper.NormaliseRouteData(data.RouteData)
|
|
|
|
|
|
|
|
|
|
Routes.db.global.routes[data.RouteZone][data.RouteName] = nil
|
|
|
|
|
Routes.db.global.routes[data.RouteZone][data.RouteName] = data.RouteData
|
|
|
|
|
|
|
|
|
|
local opts = Routes.options.args.routes_group.args
|
|
|
|
|
local zoneKey = tostring(data.RouteZone)
|
|
|
|
|
|
|
|
|
|
if not opts[zoneKey] then
|
|
|
|
|
local mapName = mapInfo.name
|
|
|
|
|
|
|
|
|
|
opts[zoneKey] = {
|
|
|
|
|
type = "group",
|
|
|
|
|
name = mapName,
|
|
|
|
|
desc = L["Routes in %s"]:format(mapName),
|
|
|
|
|
args = {
|
|
|
|
|
desc = route_zone_args_desc_table,
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Routes.routekeys[data.RouteZone] = {}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
Routes.routekeys[data.RouteZone][data.RouteKey] = data.RouteName
|
|
|
|
|
opts[zoneKey].args[data.RouteKey] = Routes:GetAceOptRouteTable()
|
|
|
|
|
|
|
|
|
|
print("Route " .. data.RouteName .. " (" .. mapInfo.name .. ") imported succefully" )
|
|
|
|
|
|
|
|
|
|
LibStub("AceConfigDialog-3.0"):SelectGroup('Routes', 'routes_group', zoneKey, data.RouteKey)
|
|
|
|
|
|
|
|
|
|
local AutoShow = Routes:GetModule("AutoShow", true)
|
|
|
|
|
|
|
|
|
|
if AutoShow and Routes.db.defaults.use_auto_showhide then
|
|
|
|
|
AutoShow:ApplyVisibility()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
Routes:DrawWorldmapLines()
|
|
|
|
|
Routes:DrawMinimapLines(true)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function RoutesHelper.ImportRoute(route, name)
|
|
|
|
|
CheckIfRoutesIsEnabled()
|
|
|
|
|
|
|
|
|
|
local data = { RouteZone = route.RouteZone or route.MapId, RouteKey = name:gsub("%s", "\255"), RouteName = name, RouteData = route.RouteData or route.Data }
|
|
|
|
|
|
|
|
|
|
importRoute(data)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function RoutesHelper.GetRouteTree()
|
|
|
|
|
local zones = {}
|
|
|
|
|
|
|
|
|
|
for zone, routes in pairs(Routes.db.global.routes) do
|
|
|
|
|
local data = { Id = zone, Name = C_Map.GetMapInfo(zone).name, Routes = {} }
|
|
|
|
|
for k, v in pairs(routes) do
|
|
|
|
|
table.insert(data.Routes, { Name = k, Zone = data, Data = core.TableHelper.ShallowCopy(v) })
|
|
|
|
|
end
|
|
|
|
|
table.sort(data.Routes, function(a, b) return a.Name < b.Name end)
|
|
|
|
|
if #data.Routes > 0 then
|
|
|
|
|
table.insert(zones, data)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
table.sort(zones, function(a, b) return a.Name == b.Name and a.Id < b.Id or a.Name < b.Name end)
|
|
|
|
|
|
|
|
|
|
return zones
|
|
|
|
|
end
|