You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
4.3 KiB
128 lines
4.3 KiB
local Routes = LibStub("AceAddon-3.0"):GetAddon("Routes", 1)
|
|
if not Routes then return end
|
|
|
|
local SourceName = "GatherMate2"
|
|
local L = LibStub("AceLocale-3.0"):GetLocale("Routes")
|
|
local LN = LibStub("AceLocale-3.0"):GetLocale("GatherMate2Nodes", true)
|
|
|
|
------------------------------------------
|
|
-- setup
|
|
Routes.plugins[SourceName] = {}
|
|
local source = Routes.plugins[SourceName]
|
|
|
|
do
|
|
local loaded = true
|
|
local function IsActive() -- Can we gather data?
|
|
return GatherMate2 and loaded
|
|
end
|
|
source.IsActive = IsActive
|
|
|
|
-- stop loading if the addon is not enabled, or
|
|
-- stop loading if there is a reason why it can't be loaded ("MISSING" or "DISABLED")
|
|
local enabled = GetAddOnEnableState(UnitName("player"), SourceName)
|
|
local name, title, notes, loadable, reason, security = GetAddOnInfo(SourceName)
|
|
if not enabled or (reason ~= nil and reason ~= "DEMAND_LOADED") then
|
|
loaded = false
|
|
return
|
|
end
|
|
end
|
|
|
|
------------------------------------------
|
|
-- functions
|
|
|
|
local amount_of = {}
|
|
local function Summarize(data, zone)
|
|
LN = LibStub("AceLocale-3.0"):GetLocale("GatherMate2Nodes", true) -- Workaround LoD of GatherMate2 if AddonLoader is used.
|
|
for db_type, db_data in pairs(GatherMate2.gmdbs) do
|
|
-- reuse table
|
|
wipe(amount_of)
|
|
-- only look for data for this currentzone
|
|
local zoneID = Routes.LZName[zone]
|
|
if db_data[zoneID] then
|
|
-- count the unique values (structure is: location => itemID)
|
|
for _,node in pairs(db_data[zoneID]) do
|
|
amount_of[node] = (amount_of[node] or 0) + 1
|
|
end
|
|
-- XXX Localize these strings
|
|
-- store combinations with all information we have
|
|
for node,count in pairs(amount_of) do
|
|
local translatednode = GatherMate2:GetNameForNode(db_type, node)
|
|
if translatednode then
|
|
data[ ("%s;%s;%s;%s"):format(SourceName, db_type, node, count) ] = ("%s - %s (%d)"):format(L[SourceName..db_type], translatednode, count)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return data
|
|
end
|
|
source.Summarize = Summarize
|
|
|
|
-- returns the english name, translated name for the node so we can store it was being requested
|
|
-- also returns the type of db for use with auto show/hide route
|
|
local translate_db_type = {
|
|
["Herb Gathering"] = "Herbalism",
|
|
["Mining"] = "Mining",
|
|
["Fishing"] = "Fishing",
|
|
["Extract Gas"] = "ExtractGas",
|
|
["Treasure"] = "Treasure",
|
|
["Archaeology"] = "Archaeology",
|
|
["Logging"] = "Logging",
|
|
}
|
|
local function AppendNodes(node_list, zone, db_type, node_type)
|
|
if type(GatherMate2.gmdbs[db_type]) == "table" then
|
|
node_type = tonumber(node_type)
|
|
|
|
-- Find all of the notes
|
|
local zoneID = Routes.LZName[zone]
|
|
for loc, t in pairs(GatherMate2.gmdbs[db_type][zoneID]) do
|
|
-- And are of a selected type - store
|
|
if t == node_type then
|
|
-- Convert GM2 location to our format
|
|
local x, y, l = GatherMate2:DecodeLoc(loc) -- ignore level for now
|
|
local newLoc = Routes:getID(x, y)
|
|
tinsert( node_list, newLoc )
|
|
end
|
|
end
|
|
|
|
-- return the node_type for auto-adding
|
|
local translatednode = GatherMate2:GetNameForNode(db_type, node_type)
|
|
for k, v in pairs(LN) do
|
|
if v == translatednode then -- get the english name
|
|
return k, v, translate_db_type[db_type]
|
|
end
|
|
end
|
|
end
|
|
end
|
|
source.AppendNodes = AppendNodes
|
|
|
|
local function InsertNode(event, zone, nodeType, coord, node_name)
|
|
-- Convert coords
|
|
local x, y, l = GatherMate2:DecodeLoc(coord) -- ignore level for now
|
|
local newCoord = Routes:getID(x, y)
|
|
-- Convert zone
|
|
local zoneLocalized = GatherMate2:MapLocalize(zone)
|
|
Routes:InsertNode(zoneLocalized, newCoord, node_name)
|
|
end
|
|
|
|
local function DeleteNode(event, zone, nodeType, coord, node_name)
|
|
-- Convert coords
|
|
local x, y, l = GatherMate2:DecodeLoc(coord) -- ignore level for now
|
|
local newCoord = Routes:getID(x, y)
|
|
-- Convert zone
|
|
local zoneLocalized = GatherMate2:MapLocalize(zone)
|
|
Routes:DeleteNode(zoneLocalized, newCoord, node_name)
|
|
end
|
|
|
|
local function AddCallbacks()
|
|
Routes:RegisterMessage("GatherMate2NodeAdded", InsertNode)
|
|
Routes:RegisterMessage("GatherMate2NodeDeleted", DeleteNode)
|
|
end
|
|
source.AddCallbacks = AddCallbacks
|
|
|
|
local function RemoveCallbacks()
|
|
Routes:UnregisterMessage("GatherMate2NodeAdded")
|
|
Routes:UnregisterMessage("GatherMate2NodeDeleted")
|
|
end
|
|
source.RemoveCallbacks = RemoveCallbacks
|
|
|
|
-- vim: ts=4 noexpandtab
|
|
|