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.

129 lines
3.6 KiB

local _, addon = ...
local DataProvider = {};
addon.TalentTreeDataProvider = DataProvider;
local C_ClassTalents = C_ClassTalents;
local C_Traits = C_Traits;
local GetSpecialization = GetSpecialization;
local GetSpecializationInfo = GetSpecializationInfo;
-- Should use C_Traits.GetConditionInfo, conditionInfo.ranksGranted and conditionInfo.isMet to check if the talent is granted for free
-- But the API returns a table so I'd like to use this fast but less adaptive approach.
local AUTO_GRANTED_NODES = {
--[specID] = {[nodeID] = true},
--https://wowpedia.fandom.com/wiki/SpecializationID
--/dump GetMouseFocus().nodeID
[250] = {76071}, --Blood
[251] = {76081}, --Frost
[252] = {76072}, --Unholy
[577] = {90942}, --Havoc
[581] = {90943}, --Vengeance
[102] = {82201, 82202}, --Balance
[103] = {82199, 82223}, --Feral
[104] = {82220, 82223}, --Guardian
[105] = {82217, 82216}, --Restoration
[1467] = {68681}, --Devastation
[1468] = {68689}, --Preservation
[253] = {79935}, --Beast Mastery
[254] = {79834}, --Marksmanship
[255] = {79839}, --Survival
[62] = {62121}, --Arcane
[63] = {62119}, --Fire
[64] = {62117}, --Frost
[268] = {80689}, --Brewmaster
[270] = {80691}, --Mistweaver
[269] = {80690}, --Windwalker
[65] = {81597, 81599}, --Holy
[66] = {81597, 81599}, --Protection
[70] = {81510, 81601}, --Retribution
[256] = {82717, 82713}, --Discipline
[257] = {82717, 82718}, --Holy
[258] = {82713, 82712}, --Shadow
[259] = {90740}, --Assassination
[260] = {90684}, --Outlaw
[261] = {90685}, --Subtlety
[262] = {81061, 81062}, --Elemental
[263] = {81060, 81061}, --Enhancement
[264] = {81062, 81063}, --Restoration
[265] = {71933}, --Affliction All The Same?
[266] = {71933}, --Demonology
[267] = {71933}, --Destruction
[71] = {90327}, --Arms
[72] = {90325}, --Fury
[73] = {90261, 90330}, --Protection
};
do
local total;
for specID, grantedNodeIDs in pairs(AUTO_GRANTED_NODES) do
total = #grantedNodeIDs;
for i = 1, total do
AUTO_GRANTED_NODES[specID][grantedNodeIDs[i]] = true;
AUTO_GRANTED_NODES[specID][i] = nil;
end
end
end
function DataProvider:IsAutoGrantedTalent(nodeID)
return self.autoGrantedNodes[nodeID]
end
function DataProvider:UpdateSpecInfo()
local specIndex = GetSpecialization() or 1;
local specID, specName = GetSpecializationInfo(specIndex);
self.specID = specID;
self.specName = specName;
self.autoGrantedNodes = AUTO_GRANTED_NODES[specID] or {};
end
function DataProvider:GetCurrentSpecID()
if not self.specID then
self:UpdateSpecInfo();
end
return self.specID
end
function DataProvider:GetActiveLoadoutName()
local specID = self:GetCurrentSpecID();
local configs = C_ClassTalents.GetConfigIDsBySpecID(specID);
local total = #configs;
if total == 0 then
return self.specName
else
local selectedID = C_ClassTalents.GetLastSelectedSavedConfigID(specID);
local name;
if selectedID then
local info = C_Traits.GetConfigInfo(selectedID);
name = info and info.name;
end
return name or self.specName
end
end
function DataProvider:GetSelecetdConfigID()
local specID = self:GetCurrentSpecID();
local selectedID = C_ClassTalents.GetLastSelectedSavedConfigID(specID);
return selectedID
end