Added the ability to dump the trainers for a given profession via addon:DumpTrainers("tailoring") (for example).
James D. Callahan III [03-13-11 - 20:38]
Added the ability to dump the trainers for a given profession via addon:DumpTrainers("tailoring") (for example).
diff --git a/Recipe.lua b/Recipe.lua
index 17305fb..a623ef6 100644
--- a/Recipe.lua
+++ b/Recipe.lua
@@ -627,6 +627,18 @@ function recipe_prototype:Dump(output)
table.insert(output, "")
end
+function recipe_prototype:DumpTrainers(registry)
+ local trainer_data = self.acquire_data[A.TRAINER]
+
+ if not trainer_data then
+ return
+ end
+
+ for identifier in pairs(trainer_data) do
+ registry[identifier] = true
+ end
+end
+
--- Public API function for retrieving specific information about a recipe.
-- @name AckisRecipeList:GetRecipeData
-- @usage AckisRecipeList:GetRecipeData(28972, "profession")
diff --git a/Scanner.lua b/Scanner.lua
index c6d1ffe..9d0e7d6 100644
--- a/Scanner.lua
+++ b/Scanner.lua
@@ -372,9 +372,6 @@ function addon:GenerateLinks()
end
--------------------------------------------------------------------------------
---- Scans the items in the specified profession
--------------------------------------------------------------------------------
do
local ORDERED_PROFESSIONS = private.ordered_professions
@@ -397,6 +394,9 @@ do
table.sort(sorted_recipes, Sort_AscID)
end
+ -------------------------------------------------------------------------------
+ --- Scans the items in the specified profession
+ -------------------------------------------------------------------------------
local function ProfessionScan(prof_name)
local master_list = LoadRecipe()
@@ -482,6 +482,9 @@ do
recipe:Dump(output)
end
+ -------------------------------------------------------------------------------
+ --- Dumps the items in the specified profession
+ -------------------------------------------------------------------------------
local function ProfessionDump(prof_name)
local master_list = LoadRecipe()
@@ -545,6 +548,88 @@ do
end
end
end
+
+ -------------------------------------------------------------------------------
+ --- Dumps the trainers for the specified recipe/profession
+ -------------------------------------------------------------------------------
+ local trainer_registry = {}
+ local sorted_data = {}
+
+ local function ProfessionTrainerDump(prof_name)
+ local master_list = LoadRecipe()
+
+ if not master_list then
+ addon:Print(L["DATAMINE_NODB_ERROR"])
+ return
+ end
+ table.wipe(recipe_list)
+
+ if prof_name == private.professions["Smelting"]:lower() then
+ prof_name = private.mining_name:lower()
+ end
+ for i in pairs(master_list) do
+ local prof = master_list[i].profession:lower()
+
+ if prof and prof == prof_name then
+ recipe_list[i] = master_list[i]
+ end
+ end
+ SortRecipesByID()
+ table.wipe(output)
+ table.wipe(trainer_registry)
+ table.wipe(sorted_data)
+
+ for index, spell_id in ipairs(addon.sorted_recipes) do
+ private.recipe_list[spell_id]:DumpTrainers(trainer_registry)
+ end
+
+ for identifier in pairs(trainer_registry) do
+ table.insert(sorted_data, identifier)
+ end
+ table.sort(sorted_data)
+
+ for index, identifier in ipairs(sorted_data) do
+ local trainer = private.trainer_list[identifier]
+ local trainer_name
+
+ if trainer.spell_id then
+ table.insert(output, ("AddTrainer(%s, %s, \"%s\", %s, %s, \"%s\")"):format(identifier, trainer.spell_id, trainer.location, trainer.coord_x, trainer.coord_y, trainer.faction))
+ else
+ table.insert(output, ("AddTrainer(%s, \"%s\", \"%s\", %s, %s, \"%s\")"):format(identifier, trainer.name, trainer.location, trainer.coord_x, trainer.coord_y, trainer.faction))
+ end
+ end
+ addon:DisplayTextDump(nil, nil, table.concat(output, "\n"))
+ end
+
+ function addon:DumpTrainers(prof_name)
+ if type(prof_name) == "number" then
+ prof_name = _G.GetSpellInfo(prof_name)
+ end
+
+ local found = false
+ prof_name = string.lower(prof_name)
+
+ local scan_all = prof_name == "all"
+
+ if not scan_all then
+ for idx, name in ipairs(ORDERED_PROFESSIONS) do
+ if prof_name == name:lower() then
+ found = true
+ break
+ end
+ end
+
+ if not found then
+ self:Print(L["DATAMINER_NODB_ERROR"])
+ return
+ end
+ ProfessionTrainerDump(prof_name)
+ else
+ for idx, name in ipairs(ORDERED_PROFESSIONS) do
+ ProfessionTrainerDump(name:lower())
+ end
+ end
+ end
end -- do
local RECIPE_TYPES = {
diff --git a/Utilities.lua b/Utilities.lua
index 4e80573..826c1c9 100644
--- a/Utilities.lua
+++ b/Utilities.lua
@@ -38,7 +38,11 @@ do
lookup_list[identifier] = entry
if faction then
- entry.faction = FACTION_NAMES[faction + 1]
+ if _G.type(faction) == "string" then
+ entry.faction = faction
+ else
+ entry.faction = FACTION_NAMES[faction + 1]
+ end
end
if coord_x and coord_y then
@@ -54,7 +58,8 @@ do
if faction and lookup_list == private.mob_list then
addon:Debug("Mob %d (%s) has been assigned to faction %s.", identifier, name, lookup_list[identifier].faction)
end
- --@end-alpha@
+ --@end-alpha@
+ return entry
end
end -- do