-- UI Mod Declaration |
PT = LibStub("AceAddon-3.0"):NewAddon("PersonalTrainer", "AceConsole-3.0", "AceEvent-3.0"); |
|
-- Ace Components |
local AceDB = LibStub("AceDB-3.0"); |
local AceConfig = LibStub("AceConfigDialog-3.0"); |
|
-- Core Functions |
function PT:OnInitialize() |
-- Generics |
PT.Version = GetAddOnMetadata("PersonalTrainer", "Version"); |
|
PT.db = AceDB:New("PT_Vars"); |
PT.db:RegisterDefaults({ |
global = { |
debug = false; |
}, |
class = { |
Skills = {} |
} |
}); |
|
PT.IsScanning = false |
PT.OldFilter = { Avail = 0, Unavail = 0, Used = 0 } |
|
self:RegisterEvent("TRAINER_SHOW"); |
self:RegisterEvent("TRAINER_UPDATE"); |
end |
|
function PT:OnEnable() |
self:Print("Loaded [ "..PT.Version.." ]"); |
end |
|
function PT:OnDisable() |
|
end |
|
-- Skill Parsing & Storing |
function PT:TRAINER_SHOW() |
if (not IsTradeskillTrainer()) then |
self:Print("DEBUG: Trainer was a skill trainer."); |
PT:ScanSkillTrees(); |
else |
self:Print("DEBUG: Trainer was a tradeskill trainer."); |
end |
end |
|
function PT:TRAINER_UPDATE() |
--PT:UpdateSkillTrees(); |
end |
|
function PT:ScanSkillTrees() |
-- Save Old Filter Settings |
local set = {} |
|
-- Turn All On |
SetTrainerServiceTypeFilter("available", 1); |
SetTrainerServiceTypeFilter("unavailable", 1); |
SetTrainerServiceTypeFilter("used", 1); |
|
-- Expand All Categories |
for i = 1,GetNumTrainerServices() do |
_,_, category = GetTrainerServiceInfo(i); |
|
if (category == nil) then |
break; |
end |
|
if (category == "header") then |
ExpandTrainerSkillLine(i); |
end |
end |
|
-- Scan |
PT.db.class.Skills = {} |
for i = 1,GetNumTrainerServices() do |
local Service = PT:GetServiceInfo(i); |
|
if (Service.Name == nil) then |
break; |
end |
|
local Entry = {} |
Entry.ID = Service.SpellID; |
Entry.Cost = Service.Cost; |
Entry.Level = Service.Level; |
Entry.Icon = Service.Icon; |
|
table.insert(PT.db.class.Skills, Entry); |
end |
|
-- Sort By Level |
table.sort(PT.db.class.Skills, PT_SortSkillsByLevel); |
|
-- Reset Filter Options |
SetTrainerServiceTypeFilter("available", 1); |
SetTrainerServiceTypeFilter("unavailable", 1); |
SetTrainerServiceTypeFilter("used", 0); |
end |
|
function PT_SortSkillsByLevel(a,b) |
if (a.Level ~= nil and b.Level ~= nil) then |
return a.Level<b.Level; |
else |
return a==b; |
end |
end |
|
function PT:UpdateSkillTrees() |
--[[local numServices = GetNumTrainerServices(); |
|
for i = 1,numServices do |
local Service = PT:GetServiceInfo(i); |
|
if (Service.Name == nil) then |
break; |
end |
|
self:Print(Service.LongName..", "..Service.Category..", "..Service.Expanded..", "..Service.Link); |
end]] |
|
for i = 1,GetNumSkillLines() do |
|
end |
end |
|
function PT:GetServiceInfo(index) |
local Service = {} |
|
local nm, rnk, cat, ex = GetTrainerServiceInfo(index); |
|
if (rnk ~= "") then |
Service.LongName = nm.." ("..rnk..")" |
else |
Service.LongName = nm; |
end |
|
-- Trainer Info |
Service.Name = nm; |
Service.Rank = rnk; |
Service.Category = cat |
Service.Expanded = ex |
|
-- Cost |
local cst, tcst, _ = GetTrainerServiceCost(index); |
Service.Cost = cst; |
Service.CostText = ""..cst..""; --TODO: Update |
|
-- Level |
Service.Level = GetTrainerServiceLevelReq(index); |
|
-- Spell Info |
local lnk = GetSpellLink(Service.Name, Service.Rank); |
Service.Link = lnk |
if(lnk ~= nil) then |
Service.SpellID = lnk:match("spell:(%d+)"); |
local _,_,ico = GetSpellInfo(Service.SpellID); |
Service.Icon = ico |
else |
Service.Icon = GetSpellTexture(Service.Name); |
end |
|
return Service; |
end |