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.

3537 lines
72 KiB

--[[
Character data handling
]]
local _, Internal = ...;
local UnitSex = UnitSex
local UnitRace = UnitRace
local UnitClass = UnitClass
local UnitFullName = UnitFullName
local GetRealmName = GetRealmName
local GetClassInfo = GetClassInfo
local GetNumClasses = GetNumClasses
local GetTalentInfoByID = GetTalentInfoByID
local GetSpecialization = GetSpecialization
local GetPvpTalentSlotInfo = C_SpecializationInfo.GetPvpTalentSlotInfo;
local GetNumSpecializations = GetNumSpecializations
local GetSpecializationInfo = GetSpecializationInfo
local GetTalentInfoBySpecialization = GetTalentInfoBySpecialization
local GetNumSpecializationsForClassID = GetNumSpecializationsForClassID
local GetSpecializationInfoForClassID = GetSpecializationInfoForClassID
local GetEssenceInfo = C_AzeriteEssence.GetEssenceInfo;
if select(4, GetBuildInfo()) >= 100000 then
function Internal.IsDragonflight()
return true
end
else
function Internal.IsDragonflight()
return false
end
end
if select(4, GetBuildInfo()) == 100000 then
function Internal.IsDragonflightPrepatch()
return true
end
else
function Internal.IsDragonflightPrepatch()
return false
end
end
local roles = {"TANK", "HEALER", "DAMAGER"};
local roleIndexes = {["TANK"] = 1, ["HEALER"] = 2, ["DAMAGER"] = 3};
local classInfo = {};
function Internal.Roles()
return ipairs(roles)
end
function Internal.IsClassRoleValid(classFile, role)
return classInfo[classFile][role] and true or false;
end
function Internal.UpdateClassInfo()
for classIndex=1,GetNumClasses() do
if GetNumSpecializationsForClassID(classIndex) > 0 then
local className, classFile, classID = GetClassInfo(classIndex);
classInfo[classFile] = {};
for specIndex=1,GetNumSpecializationsForClassID(classID) do
local role = select(5, GetSpecializationInfoForClassID(classID, specIndex));
classInfo[classFile][role] = true;
end
end
end
end
-- In very niche situations UnitFullName will not correctly respond with the realm
-- but since player realm cant change while logged in we can just reuse the previous value
local playerNameCache, playerRealmCache
function Internal.GetCharacterSlug()
local name, realm = UnitFullName("player");
playerNameCache = name or playerNameCache
playerRealmCache = realm or playerRealmCache
return playerRealmCache .. "-" .. playerNameCache
end
local GetSpecInfoVersion;
local VerifyTalentForSpec;
local VerifyPvPTalentForSpec;
local GetTalentInfoForSpecID;
local GetPvpTalentSlotInfoForSpecID;
do
local specInfo
if Internal.IsDragonflight() then
specInfo = {
version = 5,
-- Warrior
[71] = { -- Arms
talents = {
{22624, 22360, 22371},
{19676, 22372, 22789},
{22380, 22489, 19138},
{15757, 22627, 22628},
{22392, 22391, 22362},
{22394, 22397, 22399},
{21204, 22407, 21667},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
28, 29, 31,
32, 33, 34,
3522, 3534, 5372,
5376, 5547,
}
},
{
level = 30,
availableTalentIDs = {
28, 29, 31,
32, 33, 34,
3522, 3534, 5372,
5376, 5547,
}
},
{
level = 40,
availableTalentIDs = {
28, 29, 31,
32, 33, 34,
3522, 3534, 5372,
5376, 5547,
}
},
},
},
[72] = { -- Fury
talents = {
{22632, 22633, 22491},
{19676, 22625, 23093},
{22379, 22381, 23372},
{23097, 22627, 22382},
{22383, 22393, 19140},
{22396, 22398, 22400},
{22405, 22402, 16037},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
25, 166, 170,
172, 177, 179,
3528, 3533, 3735,
5373, 5431, 5548,
}
},
{
level = 30,
availableTalentIDs = {
25, 166, 170,
172, 177, 179,
3528, 3533, 3735,
5373, 5431, 5548,
}
},
{
level = 40,
availableTalentIDs = {
25, 166, 170,
172, 177, 179,
3528, 3533, 3735,
5373, 5431, 5548,
}
},
},
},
[73] = { -- Protection
talents = {
{15760, 15759, 15774},
{19676, 22629, 22409},
{22378, 22626, 23260},
{23096, 22627, 22488},
{22384, 22631, 22800},
{22395, 22544, 22401},
{23455, 22406, 23099},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
24, 167, 168,
171, 173, 175,
178, 831, 833,
845, 5374, 5432,
}
},
{
level = 30,
availableTalentIDs = {
24, 167, 168,
171, 173, 175,
178, 831, 833,
845, 5374, 5432,
}
},
{
level = 40,
availableTalentIDs = {
24, 167, 168,
171, 173, 175,
178, 831, 833,
845, 5374, 5432,
}
},
},
},
-- Paladin
[65] = { -- Holy
talents = {
{17565, 17567, 17569},
{22176, 17575, 17577},
{22179, 22180, 21811},
{22433, 22434, 17593},
{17597, 17599, 17601},
{23191, 23680, 22484},
{21201, 21671, 0},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
82, 85, 86,
87, 88, 640,
642, 859, 3618,
5421, 5501, 5537,
5553,
}
},
{
level = 30,
availableTalentIDs = {
82, 85, 86,
87, 88, 640,
642, 859, 3618,
5421, 5501, 5537,
5553,
}
},
{
level = 40,
availableTalentIDs = {
82, 85, 86,
87, 88, 640,
642, 859, 3618,
5421, 5501, 5537,
5553,
}
},
},
},
[66] = { -- Protection
talents = {
{22428, 22558, 23469},
{22431, 22604, 23468},
{22179, 22180, 21811},
{22433, 22434, 22435},
{17597, 17599, 17601},
{22189, 22438, 23087},
{23457, 21202, 22645},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
90, 91, 92,
93, 94, 97,
844, 860, 861,
3474, 3475, 5536,
5554,
}
},
{
level = 30,
availableTalentIDs = {
90, 91, 92,
93, 94, 97,
844, 860, 861,
3474, 3475, 5536,
5554,
}
},
{
level = 40,
availableTalentIDs = {
90, 91, 92,
93, 94, 97,
844, 860, 861,
3474, 3475, 5536,
5554,
}
},
},
},
[70] = { -- Retribution
talents = {
{22590, 22557, 23467},
{22319, 22592, 23466},
{22179, 22180, 21811},
{22433, 22434, 22183},
{17597, 17599, 17601},
{23167, 22483, 23086},
{23456, 22215, 22634},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
81, 641, 751,
752, 753, 754,
755, 756, 757,
858, 5422, 5535,
}
},
{
level = 30,
availableTalentIDs = {
81, 641, 751,
752, 753, 754,
755, 756, 757,
858, 5422, 5535,
}
},
{
level = 40,
availableTalentIDs = {
81, 641, 751,
752, 753, 754,
755, 756, 757,
858, 5422, 5535,
}
},
},
},
-- Hunter
[253] = { -- Beast Mastery
talents = {
{22291, 22280, 22282},
{22500, 22266, 22290},
{19347, 19348, 23100},
{22441, 22347, 22269},
{22268, 22276, 22499},
{19357, 22002, 23044},
{22273, 21986, 22295},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
693, 824, 825,
1214, 3599, 3600,
3604, 3612, 3730,
5418, 5441, 5444,
5534,
}
},
{
level = 30,
availableTalentIDs = {
693, 824, 825,
1214, 3599, 3600,
3604, 3612, 3730,
5418, 5441, 5444,
5534,
}
},
{
level = 40,
availableTalentIDs = {
693, 824, 825,
1214, 3599, 3600,
3604, 3612, 3730,
5418, 5441, 5444,
5534,
}
},
},
},
[254] = { -- Marksmanship
talents = {
{22279, 22501, 22289},
{22495, 22497, 22498},
{19347, 19348, 23100},
{22267, 22286, 21998},
{22268, 22276, 23463},
{23063, 23104, 22287},
{22274, 22308, 22288},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
649, 651, 653,
658, 659, 660,
3614, 3729, 5419,
5440, 5442, 5531,
5533,
}
},
{
level = 30,
availableTalentIDs = {
649, 651, 653,
658, 659, 660,
3614, 3729, 5419,
5440, 5442, 5531,
5533,
}
},
{
level = 40,
availableTalentIDs = {
649, 651, 653,
658, 659, 660,
3614, 3729, 5419,
5440, 5442, 5531,
5533,
}
},
},
},
[255] = { -- Survival
talents = {
{22275, 22283, 22296},
{21997, 22769, 22297},
{19347, 19348, 23100},
{22277, 19361, 22299},
{22268, 22276, 22499},
{22300, 22278, 22271},
{22272, 22301, 23105},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
661, 662, 663,
664, 665, 686,
3607, 3609, 3610,
5420, 5443, 5532,
}
},
{
level = 30,
availableTalentIDs = {
661, 662, 663,
664, 665, 686,
3607, 3609, 3610,
5420, 5443, 5532,
}
},
{
level = 40,
availableTalentIDs = {
661, 662, 663,
664, 665, 686,
3607, 3609, 3610,
5420, 5443, 5532,
}
},
},
},
-- Rogue
[259] = { -- Assassination
talents = {
{22337, 22338, 22339},
{22331, 22332, 23022},
{19239, 19240, 19241},
{22340, 22122, 22123},
{19245, 23037, 22115},
{22343, 23015, 22344},
{21186, 22133, 23174},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
141, 147, 830,
3448, 3479, 3480,
5405, 5408, 5517,
5530, 5550,
}
},
{
level = 30,
availableTalentIDs = {
141, 147, 830,
3448, 3479, 3480,
5405, 5408, 5517,
5530, 5550,
}
},
{
level = 40,
availableTalentIDs = {
141, 147, 830,
3448, 3479, 3480,
5405, 5408, 5517,
5530, 5550,
}
},
},
},
[260] = { -- Outlaw
talents = {
{22118, 22119, 22120},
{23470, 19237, 19238},
{19239, 19240, 19241},
{22121, 22122, 22123},
{23077, 22114, 22115},
{21990, 23128, 19250},
{22125, 23075, 23175},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
129, 135, 138,
139, 145, 853,
1208, 3421, 3483,
3619, 5412, 5516,
5549,
}
},
{
level = 30,
availableTalentIDs = {
129, 135, 138,
139, 145, 853,
1208, 3421, 3483,
3619, 5412, 5516,
5549,
}
},
{
level = 40,
availableTalentIDs = {
129, 135, 138,
139, 145, 853,
1208, 3421, 3483,
3619, 5412, 5516,
5549,
}
},
},
},
[261] = { -- Subtlety
talents = {
{19233, 19234, 19235},
{22331, 22332, 22333},
{19239, 19240, 19241},
{22128, 22122, 22123},
{23078, 23036, 22115},
{22335, 19249, 22336},
{22132, 23183, 21188},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
136, 146, 153,
846, 856, 1209,
3447, 3462, 5406,
5409, 5411, 5529,
}
},
{
level = 30,
availableTalentIDs = {
136, 146, 153,
846, 856, 1209,
3447, 3462, 5406,
5409, 5411, 5529,
}
},
{
level = 40,
availableTalentIDs = {
136, 146, 153,
846, 856, 1209,
3447, 3462, 5406,
5409, 5411, 5529,
}
},
},
},
-- Priest
[256] = { -- Discipline
talents = {
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
98, 100, 109,
111, 114, 117,
123, 126, 855,
1244, 5416, 5475,
5480, 5483, 5487,
5498,
}
},
{
level = 30,
availableTalentIDs = {
98, 100, 109,
111, 114, 117,
123, 126, 855,
1244, 5416, 5475,
5480, 5483, 5487,
5498,
}
},
{
level = 40,
availableTalentIDs = {
98, 100, 109,
111, 114, 117,
123, 126, 855,
1244, 5416, 5475,
5480, 5483, 5487,
5498,
}
},
},
},
[257] = { -- Holy
talents = {
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
101, 108, 112,
115, 124, 127,
1927, 5365, 5366,
5476, 5478, 5479,
5482, 5485, 5499,
}
},
{
level = 30,
availableTalentIDs = {
101, 108, 112,
115, 124, 127,
1927, 5365, 5366,
5476, 5478, 5479,
5482, 5485, 5499,
}
},
{
level = 40,
availableTalentIDs = {
101, 108, 112,
115, 124, 127,
1927, 5365, 5366,
5476, 5478, 5479,
5482, 5485, 5499,
}
},
},
},
[258] = { -- Shadow
talents = {
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
106, 113, 739,
763, 5381, 5447,
5474, 5477, 5481,
5484, 5486, 5500,
}
},
{
level = 30,
availableTalentIDs = {
106, 113, 739,
763, 5381, 5447,
5474, 5477, 5481,
5484, 5486, 5500,
}
},
{
level = 40,
availableTalentIDs = {
106, 113, 739,
763, 5381, 5447,
5474, 5477, 5481,
5484, 5486, 5500,
}
},
},
},
-- Death Knight
[250] = { -- Blood
talents = {
{19165, 19166, 23454},
{19218, 19219, 19220},
{19221, 22134, 22135},
{22013, 22014, 22015},
{19227, 19226, 19228},
{19230, 19231, 19232},
{21207, 21208, 21209},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
204, 205, 206,
607, 608, 609,
841, 3441, 3511,
5425, 5426,
}
},
{
level = 30,
availableTalentIDs = {
204, 205, 206,
607, 608, 609,
841, 3441, 3511,
5425, 5426,
}
},
{
level = 40,
availableTalentIDs = {
204, 205, 206,
607, 608, 609,
841, 3441, 3511,
5425, 5426,
}
},
},
},
[251] = { -- Frost
talents = {
{22016, 22017, 22018},
{22019, 22020, 22021},
{22515, 22517, 22519},
{22521, 22523, 22525},
{22527, 22530, 23373},
{22531, 22533, 22535},
{22023, 22109, 22537},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
701, 702, 706,
3439, 3512, 3743,
5424, 5427, 5429,
5435,
}
},
{
level = 30,
availableTalentIDs = {
701, 702, 706,
3439, 3512, 3743,
5424, 5427, 5429,
5435,
}
},
{
level = 40,
availableTalentIDs = {
701, 702, 706,
3439, 3512, 3743,
5424, 5427, 5429,
5435,
}
},
},
},
[252] = { -- Unholy
talents = {
{22024, 22025, 22026},
{22027, 22028, 22029},
{22516, 22518, 22520},
{22522, 22524, 22526},
{22528, 22529, 23373},
{22532, 22534, 22536},
{22030, 22110, 22538},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
40, 41, 149,
152, 3437, 3746,
3747, 5423, 5428,
5430, 5436,
}
},
{
level = 30,
availableTalentIDs = {
40, 41, 149,
152, 3437, 3746,
3747, 5423, 5428,
5430, 5436,
}
},
{
level = 40,
availableTalentIDs = {
40, 41, 149,
152, 3437, 3746,
3747, 5423, 5428,
5430, 5436,
}
},
},
},
-- Shaman
[262] = { -- Elemental
talents = {
{22356, 22357, 22358},
{23108, 23460, 23190},
{23162, 23163, 23164},
{19271, 19272, 19273},
{22144, 22172, 21966},
{22145, 19266, 23111},
{21198, 22153, 21675},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
727, 728, 730,
3062, 3488, 3490,
3491, 3620, 3621,
5415, 5457, 5519,
}
},
{
level = 30,
availableTalentIDs = {
727, 728, 730,
3062, 3488, 3490,
3491, 3620, 3621,
5415, 5457, 5519,
}
},
{
level = 40,
availableTalentIDs = {
727, 728, 730,
3062, 3488, 3490,
3491, 3620, 3621,
5415, 5457, 5519,
}
},
},
},
[263] = { -- Enhancement
talents = {
{22354, 22355, 22353},
{22636, 23462, 23109},
{23165, 19260, 23166},
{23089, 23090, 22171},
{22144, 22149, 21966},
{21973, 22352, 22351},
{21970, 22977, 21972},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
721, 722, 725,
1944, 3487, 3489,
3492, 3519, 3622,
3623, 5414, 5438,
5518, 5527,
}
},
{
level = 30,
availableTalentIDs = {
721, 722, 725,
1944, 3487, 3489,
3492, 3519, 3622,
3623, 5414, 5438,
5518, 5527,
}
},
{
level = 40,
availableTalentIDs = {
721, 722, 725,
1944, 3487, 3489,
3492, 3519, 3622,
3623, 5414, 5438,
5518, 5527,
}
},
},
},
[264] = { -- Restoration
talents = {
{19262, 19263, 19264},
{19259, 23461, 21963},
{19275, 23110, 22127},
{22152, 22322, 22323},
{22144, 19269, 21966},
{19265, 21971, 21968},
{21969, 21199, 22359},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
707, 708, 712,
714, 715, 1930,
3520, 3755, 3756,
5388, 5437, 5458,
5528,
}
},
{
level = 30,
availableTalentIDs = {
707, 708, 712,
714, 715, 1930,
3520, 3755, 3756,
5388, 5437, 5458,
5528,
}
},
{
level = 40,
availableTalentIDs = {
707, 708, 712,
714, 715, 1930,
3520, 3755, 3756,
5388, 5437, 5458,
5528,
}
},
},
},
-- Mage
[62] = { -- Arcane
talents = {
{22458, 22461, 22464},
{23072, 22443, 16025},
{22444, 22445, 22447},
{22453, 22467, 22470},
{22907, 22448, 22471},
{22455, 22449, 22474},
{21630, 21144, 21145},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
61, 635, 637,
3442, 3517, 3529,
3531, 5397, 5488,
5491, 5492,
}
},
{
level = 30,
availableTalentIDs = {
61, 635, 637,
3442, 3517, 3529,
3531, 5397, 5488,
5491, 5492,
}
},
{
level = 40,
availableTalentIDs = {
61, 635, 637,
3442, 3517, 3529,
3531, 5397, 5488,
5491, 5492,
}
},
},
},
[63] = { -- Fire
talents = {
{22456, 22459, 22462},
{23071, 22443, 23074},
{22444, 22445, 22447},
{22450, 22465, 22468},
{22904, 22448, 22471},
{22451, 23362, 22472},
{21631, 22220, 21633},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
53, 644, 646,
647, 648, 828,
5389, 5489, 5493,
5495,
}
},
{
level = 30,
availableTalentIDs = {
53, 644, 646,
647, 648, 828,
5389, 5489, 5493,
5495,
}
},
{
level = 40,
availableTalentIDs = {
53, 644, 646,
647, 648, 828,
5389, 5489, 5493,
5495,
}
},
},
},
[64] = { -- Frost
talents = {
{22457, 22460, 22463},
{22442, 22443, 23073},
{22444, 22445, 22447},
{22452, 22466, 22469},
{22446, 22448, 22471},
{22454, 23176, 22473},
{21632, 22309, 21634},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
66, 632, 634,
3443, 3532, 5390,
5490, 5494, 5496,
5497,
}
},
{
level = 30,
availableTalentIDs = {
66, 632, 634,
3443, 3532, 5390,
5490, 5494, 5496,
5497,
}
},
{
level = 40,
availableTalentIDs = {
66, 632, 634,
3443, 3532, 5390,
5490, 5494, 5496,
5497,
}
},
},
},
-- Warlock
[265] = { -- Affliction
talents = {
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
11, 12, 15,
16, 17, 18,
19, 20, 5379,
5386, 5392, 5506,
5543, 5546,
}
},
{
level = 30,
availableTalentIDs = {
11, 12, 15,
16, 17, 18,
19, 20, 5379,
5386, 5392, 5506,
5543, 5546,
}
},
{
level = 40,
availableTalentIDs = {
11, 12, 15,
16, 17, 18,
19, 20, 5379,
5386, 5392, 5506,
5543, 5546,
}
},
},
},
[266] = { -- Demonology
talents = {
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
156, 158, 162,
165, 1213, 3505,
3506, 3624, 3625,
3626, 5394, 5400,
5505, 5545,
}
},
{
level = 30,
availableTalentIDs = {
156, 158, 162,
165, 1213, 3505,
3506, 3624, 3625,
3626, 5394, 5400,
5505, 5545,
}
},
{
level = 40,
availableTalentIDs = {
156, 158, 162,
165, 1213, 3505,
3506, 3624, 3625,
3626, 5394, 5400,
5505, 5545,
}
},
},
},
[267] = { -- Destruction
talents = {
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
157, 159, 164,
3502, 3504, 3508,
3509, 3510, 5382,
5393, 5401,
}
},
{
level = 30,
availableTalentIDs = {
157, 159, 164,
3502, 3504, 3508,
3509, 3510, 5382,
5393, 5401,
}
},
{
level = 40,
availableTalentIDs = {
157, 159, 164,
3502, 3504, 3508,
3509, 3510, 5382,
5393, 5401,
}
},
},
},
-- Monk
[268] = { -- Brewmaster
talents = {
{23106, 19820, 20185},
{19304, 19818, 19302},
{22099, 22097, 19992},
{19993, 19994, 19995},
{20174, 23363, 20175},
{19819, 20184, 22103},
{22106, 22104, 22108},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
666, 667, 668,
669, 670, 671,
672, 673, 765,
843, 1958, 5417,
5538, 5541, 5542,
5552,
}
},
{
level = 30,
availableTalentIDs = {
666, 667, 668,
669, 670, 671,
672, 673, 765,
843, 1958, 5417,
5538, 5541, 5542,
5552,
}
},
{
level = 40,
availableTalentIDs = {
666, 667, 668,
669, 670, 671,
672, 673, 765,
843, 1958, 5417,
5538, 5541, 5542,
5552,
}
},
},
},
[270] = { -- Mistweaver
talents = {
{19823, 19820, 20185},
{19304, 19818, 19302},
{22168, 22167, 22166},
{19993, 22219, 19995},
{23371, 20173, 20175},
{23107, 22101, 0},
{22218, 22169, 22170},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
70, 678, 679,
680, 682, 683,
1928, 3732, 5395,
5398, 5402, 5508,
5539, 5551,
}
},
{
level = 30,
availableTalentIDs = {
70, 678, 679,
680, 682, 683,
1928, 3732, 5395,
5398, 5402, 5508,
5539, 5551,
}
},
{
level = 40,
availableTalentIDs = {
70, 678, 679,
680, 682, 683,
1928, 3732, 5395,
5398, 5402, 5508,
5539, 5551,
}
},
},
},
[269] = { -- Windwalker
talents = {
{23106, 19820, 20185},
{19304, 19818, 19302},
{22098, 19771, 22096},
{19993, 23364, 19995},
{23258, 20173, 20175},
{22093, 23122, 22102},
{22107, 22105, 21191},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
77, 675, 852,
3050, 3052, 3734,
3737, 3744, 3745,
5448, 5540,
}
},
{
level = 30,
availableTalentIDs = {
77, 675, 852,
3050, 3052, 3734,
3737, 3744, 3745,
5448, 5540,
}
},
{
level = 40,
availableTalentIDs = {
77, 675, 852,
3050, 3052, 3734,
3737, 3744, 3745,
5448, 5540,
}
},
},
},
-- Druid
[102] = { -- Balance
talents = {
{22385, 22386, 22387},
{19283, 18570, 18571},
{22155, 22157, 22159},
{21778, 18576, 18577},
{18580, 21706, 21702},
{22389, 21712, 22165},
{21648, 21193, 21655},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
180, 182, 184,
185, 822, 834,
836, 3058, 3728,
3731, 5383, 5407,
5503, 5515, 5526,
}
},
{
level = 30,
availableTalentIDs = {
180, 182, 184,
185, 822, 834,
836, 3058, 3728,
3731, 5383, 5407,
5503, 5515, 5526,
}
},
{
level = 40,
availableTalentIDs = {
180, 182, 184,
185, 822, 834,
836, 3058, 3728,
3731, 5383, 5407,
5503, 5515, 5526,
}
},
},
},
[103] = { -- Feral
talents = {
{22363, 22364, 22365},
{19283, 18570, 18571},
{22163, 22158, 22159},
{21778, 18576, 18577},
{21708, 18579, 21704},
{21714, 21711, 22370},
{21646, 21649, 21653},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
201, 203, 601,
602, 611, 612,
620, 820, 3053,
3751, 5384, 5525,
}
},
{
level = 30,
availableTalentIDs = {
201, 203, 601,
602, 611, 612,
620, 820, 3053,
3751, 5384, 5525,
}
},
{
level = 40,
availableTalentIDs = {
201, 203, 601,
602, 611, 612,
620, 820, 3053,
3751, 5384, 5525,
}
},
},
},
[104] = { -- Guardian
talents = {
{22419, 22418, 22420},
{19283, 18570, 18571},
{22163, 22156, 22159},
{21778, 18576, 18577},
{21709, 21707, 22388},
{22423, 21713, 22390},
{22426, 22427, 22425},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
49, 50, 51,
52, 192, 193,
194, 195, 196,
197, 842, 1237,
3750, 5410, 5524,
}
},
{
level = 30,
availableTalentIDs = {
49, 50, 51,
52, 192, 193,
194, 195, 196,
197, 842, 1237,
3750, 5410, 5524,
}
},
{
level = 40,
availableTalentIDs = {
49, 50, 51,
52, 192, 193,
194, 195, 196,
197, 842, 1237,
3750, 5410, 5524,
}
},
},
},
[105] = { -- Restoration
talents = {
{18569, 18574, 18572},
{19283, 18570, 18571},
{22366, 22367, 22160},
{21778, 18576, 18577},
{21710, 21705, 22421},
{21716, 18585, 22422},
{22403, 21651, 22404},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
59, 691, 692,
697, 700, 835,
838, 1215, 3048,
5387, 5504, 5514,
}
},
{
level = 30,
availableTalentIDs = {
59, 691, 692,
697, 700, 835,
838, 1215, 3048,
5387, 5504, 5514,
}
},
{
level = 40,
availableTalentIDs = {
59, 691, 692,
697, 700, 835,
838, 1215, 3048,
5387, 5504, 5514,
}
},
},
},
-- Demon Hunter
[577] = { -- Havoc
talents = {
{21854, 22493, 22416},
{21857, 22765, 22799},
{22909, 22494, 21862},
{21863, 21864, 21865},
{21866, 21867, 21868},
{21869, 21870, 22767},
{21900, 21901, 22547},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
805, 806, 809,
810, 811, 812,
813, 1204, 1206,
1218, 5433, 5523,
}
},
{
level = 30,
availableTalentIDs = {
805, 806, 809,
810, 811, 812,
813, 1204, 1206,
1218, 5433, 5523,
}
},
{
level = 40,
availableTalentIDs = {
805, 806, 809,
810, 811, 812,
813, 1204, 1206,
1218, 5433, 5523,
}
},
},
},
[581] = { -- Vengeance
talents = {
{22502, 22503, 22504},
{22505, 22766, 22507},
{22324, 22541, 22540},
{22508, 22509, 22770},
{22546, 22510, 22511},
{22512, 22513, 22768},
{22543, 23464, 21902},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
814, 815, 816,
819, 1220, 1948,
3423, 3429, 3430,
3727, 5434, 5439,
5520, 5521, 5522,
}
},
{
level = 30,
availableTalentIDs = {
814, 815, 816,
819, 1220, 1948,
3423, 3429, 3430,
3727, 5434, 5439,
5520, 5521, 5522,
}
},
{
level = 40,
availableTalentIDs = {
814, 815, 816,
819, 1220, 1948,
3423, 3429, 3430,
3727, 5434, 5439,
5520, 5521, 5522,
}
},
},
},
-- Evoker
[1467] = { -- Devastation
talents = {
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
5456, 5460, 5462,
5464, 5466, 5467,
5469, 5471, 5473,
5509,
}
},
{
level = 30,
availableTalentIDs = {
5456, 5460, 5462,
5464, 5466, 5467,
5469, 5471, 5473,
5509,
}
},
{
level = 40,
availableTalentIDs = {
5456, 5460, 5462,
5464, 5466, 5467,
5469, 5471, 5473,
5509,
}
},
},
},
[1468] = { -- Preservation
talents = {
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
5454, 5455, 5459,
5461, 5463, 5465,
5468, 5470, 5472,
5502,
}
},
{
level = 30,
availableTalentIDs = {
5454, 5455, 5459,
5461, 5463, 5465,
5468, 5470, 5472,
5502,
}
},
{
level = 40,
availableTalentIDs = {
5454, 5455, 5459,
5461, 5463, 5465,
5468, 5470, 5472,
5502,
}
},
},
},
}
else
specInfo = {
version = 4,
-- Warrior
[71] = { -- Arms
talents = {
{22624, 22360, 22371},
{19676, 22372, 22789},
{22380, 22489, 19138},
{15757, 22627, 22628},
{22392, 22391, 22362},
{22394, 22397, 22399},
{21204, 22407, 21667},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
28, 29, 31,
32, 33, 34,
3522, 3534, 5372,
5376,
}
},
{
level = 30,
availableTalentIDs = {
28, 29, 31,
32, 33, 34,
3522, 3534, 5372,
5376,
}
},
{
level = 40,
availableTalentIDs = {
28, 29, 31,
32, 33, 34,
3522, 3534, 5372,
5376,
}
},
},
},
[72] = { -- Fury
talents = {
{22632, 22633, 22491},
{19676, 22625, 23093},
{22379, 22381, 23372},
{23097, 22627, 22382},
{22383, 22393, 19140},
{22396, 22398, 22400},
{22405, 22402, 16037},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
25, 166, 170,
172, 177, 179,
3528, 3533, 3735,
5373, 5431,
}
},
{
level = 30,
availableTalentIDs = {
25, 166, 170,
172, 177, 179,
3528, 3533, 3735,
5373, 5431,
}
},
{
level = 40,
availableTalentIDs = {
25, 166, 170,
172, 177, 179,
3528, 3533, 3735,
5373, 5431,
}
},
},
},
[73] = { -- Protection
talents = {
{15760, 15759, 15774},
{19676, 22629, 22409},
{22378, 22626, 23260},
{23096, 22627, 22488},
{22384, 22631, 22800},
{22395, 22544, 22401},
{23455, 22406, 23099},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
24, 167, 168,
171, 173, 175,
178, 831, 833,
845, 5374, 5432,
}
},
{
level = 30,
availableTalentIDs = {
24, 167, 168,
171, 173, 175,
178, 831, 833,
845, 5374, 5432,
}
},
{
level = 40,
availableTalentIDs = {
24, 167, 168,
171, 173, 175,
178, 831, 833,
845, 5374, 5432,
}
},
},
},
-- Paladin
[65] = { -- Holy
talents = {
{17565, 17567, 17569},
{22176, 17575, 17577},
{22179, 22180, 21811},
{22433, 22434, 17593},
{17597, 17599, 17601},
{23191, 22190, 22484},
{21201, 21671, 21203},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
82, 85, 86,
87, 88, 640,
642, 689, 859,
3618, 5421,
}
},
{
level = 30,
availableTalentIDs = {
82, 85, 86,
87, 88, 640,
642, 689, 859,
3618, 5421,
}
},
{
level = 40,
availableTalentIDs = {
82, 85, 86,
87, 88, 640,
642, 689, 859,
3618, 5421,
}
},
},
},
[66] = { -- Protection
talents = {
{22428, 22558, 23469},
{22431, 22604, 23468},
{22179, 22180, 21811},
{22433, 22434, 22435},
{17597, 17599, 17601},
{22189, 22438, 23087},
{23457, 21202, 22645},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
90, 91, 92,
93, 94, 97,
844, 860, 861,
3474, 3475,
}
},
{
level = 30,
availableTalentIDs = {
90, 91, 92,
93, 94, 97,
844, 860, 861,
3474, 3475,
}
},
{
level = 40,
availableTalentIDs = {
90, 91, 92,
93, 94, 97,
844, 860, 861,
3474, 3475,
}
},
},
},
[70] = { -- Retribution
talents = {
{22590, 22557, 23467},
{22319, 22592, 23466},
{22179, 22180, 21811},
{22433, 22434, 22183},
{17597, 17599, 17601},
{23167, 22483, 23086},
{23456, 22215, 22634},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
81, 641, 751,
752, 753, 754,
755, 756, 757,
858, 5422,
}
},
{
level = 30,
availableTalentIDs = {
81, 641, 751,
752, 753, 754,
755, 756, 757,
858, 5422,
}
},
{
level = 40,
availableTalentIDs = {
81, 641, 751,
752, 753, 754,
755, 756, 757,
858, 5422,
}
},
},
},
-- Hunter
[253] = { -- Beast Mastery
talents = {
{22291, 22280, 22282},
{22500, 22266, 22290},
{19347, 19348, 23100},
{22441, 22347, 22269},
{22268, 22276, 22499},
{19357, 22002, 23044},
{22273, 21986, 22295},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
693, 824, 825,
1214, 3599, 3600,
3604, 3605, 3612,
3730, 5418, 5441,
5444,
}
},
{
level = 30,
availableTalentIDs = {
693, 824, 825,
1214, 3599, 3600,
3604, 3605, 3612,
3730, 5418, 5441,
5444,
}
},
{
level = 40,
availableTalentIDs = {
693, 824, 825,
1214, 3599, 3600,
3604, 3605, 3612,
3730, 5418, 5441,
5444,
}
},
},
},
[254] = { -- Marksmanship
talents = {
{22279, 22501, 22289},
{22495, 22497, 22498},
{19347, 19348, 23100},
{22267, 22286, 21998},
{22268, 22276, 23463},
{23063, 23104, 22287},
{22274, 22308, 22288},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
649, 651, 653,
656, 657, 658,
659, 660, 3614,
3729, 5419, 5440,
5442,
}
},
{
level = 30,
availableTalentIDs = {
649, 651, 653,
656, 657, 658,
659, 660, 3614,
3729, 5419, 5440,
5442,
}
},
{
level = 40,
availableTalentIDs = {
649, 651, 653,
656, 657, 658,
659, 660, 3614,
3729, 5419, 5440,
5442,
}
},
},
},
[255] = { -- Survival
talents = {
{22275, 22283, 22296},
{21997, 22769, 22297},
{19347, 19348, 23100},
{22277, 19361, 22299},
{22268, 22276, 22499},
{22300, 22278, 22271},
{22272, 22301, 23105},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
661, 662, 663,
664, 665, 686,
3606, 3607, 3609,
3610, 5420, 5443,
}
},
{
level = 30,
availableTalentIDs = {
661, 662, 663,
664, 665, 686,
3606, 3607, 3609,
3610, 5420, 5443,
}
},
{
level = 40,
availableTalentIDs = {
661, 662, 663,
664, 665, 686,
3606, 3607, 3609,
3610, 5420, 5443,
}
},
},
},
-- Rogue
[259] = { -- Assassination
talents = {
{22337, 22338, 22339},
{22331, 22332, 23022},
{19239, 19240, 19241},
{22340, 22122, 22123},
{19245, 23037, 22115},
{22343, 23015, 22344},
{21186, 22133, 23174},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
130, 141, 144,
147, 830, 3448,
3479, 3480, 5405,
5408,
}
},
{
level = 30,
availableTalentIDs = {
130, 141, 144,
147, 830, 3448,
3479, 3480, 5405,
5408,
}
},
{
level = 40,
availableTalentIDs = {
130, 141, 144,
147, 830, 3448,
3479, 3480, 5405,
5408,
}
},
},
},
[260] = { -- Outlaw
talents = {
{22118, 22119, 22120},
{23470, 19237, 19238},
{19239, 19240, 19241},
{22121, 22122, 22123},
{23077, 22114, 22115},
{21990, 23128, 19250},
{22125, 23075, 23175},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
129, 135, 138,
139, 145, 853,
1208, 3421, 3483,
3619, 5412, 5413,
}
},
{
level = 30,
availableTalentIDs = {
129, 135, 138,
139, 145, 853,
1208, 3421, 3483,
3619, 5412, 5413,
}
},
{
level = 40,
availableTalentIDs = {
129, 135, 138,
139, 145, 853,
1208, 3421, 3483,
3619, 5412, 5413,
}
},
},
},
[261] = { -- Subtlety
talents = {
{19233, 19234, 19235},
{22331, 22332, 22333},
{19239, 19240, 19241},
{22128, 22122, 22123},
{23078, 23036, 22115},
{22335, 19249, 22336},
{22132, 23183, 21188},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
136, 146, 153,
846, 856, 1209,
3447, 3462, 5406,
5409, 5411,
}
},
{
level = 30,
availableTalentIDs = {
136, 146, 153,
846, 856, 1209,
3447, 3462, 5406,
5409, 5411,
}
},
{
level = 40,
availableTalentIDs = {
136, 146, 153,
846, 856, 1209,
3447, 3462, 5406,
5409, 5411,
}
},
},
},
-- Priest
[256] = { -- Discipline
talents = {
{19752, 22313, 22329},
{22315, 22316, 19758},
{22440, 22094, 19755},
{19759, 19769, 19761},
{22330, 19765, 19766},
{22161, 19760, 19763},
{21183, 21184, 22976},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
98, 100, 109,
111, 114, 117,
123, 126, 855,
1244, 5403, 5416,
}
},
{
level = 30,
availableTalentIDs = {
98, 100, 109,
111, 114, 117,
123, 126, 855,
1244, 5403, 5416,
}
},
{
level = 40,
availableTalentIDs = {
98, 100, 109,
111, 114, 117,
123, 126, 855,
1244, 5403, 5416,
}
},
},
},
[257] = { -- Holy
talents = {
{22312, 19753, 19754},
{22325, 22326, 19758},
{22487, 22095, 22562},
{21750, 21977, 19761},
{19764, 22327, 21754},
{19767, 19760, 19763},
{21636, 21644, 23145},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
101, 108, 112,
115, 118, 124,
127, 1242, 1927,
5365, 5366, 5404,
}
},
{
level = 30,
availableTalentIDs = {
101, 108, 112,
115, 118, 124,
127, 1242, 1927,
5365, 5366, 5404,
}
},
{
level = 40,
availableTalentIDs = {
101, 108, 112,
115, 118, 124,
127, 1242, 1927,
5365, 5366, 5404,
}
},
},
},
[258] = { -- Shadow
talents = {
{22328, 22136, 22314},
{22315, 23374, 21976},
{23125, 23126, 23127},
{23137, 23375, 21752},
{22310, 22311, 21755},
{21718, 21719, 21720},
{21637, 21978, 21979},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
102, 106, 113,
128, 739, 763,
3753, 5380, 5381,
5446, 5447,
}
},
{
level = 30,
availableTalentIDs = {
102, 106, 113,
128, 739, 763,
3753, 5380, 5381,
5446, 5447,
}
},
{
level = 40,
availableTalentIDs = {
102, 106, 113,
128, 739, 763,
3753, 5380, 5381,
5446, 5447,
}
},
},
},
-- Death Knight
[250] = { -- Blood
talents = {
{19165, 19166, 23454},
{19218, 19219, 19220},
{19221, 22134, 22135},
{22013, 22014, 22015},
{19227, 19226, 19228},
{19230, 19231, 19232},
{21207, 21208, 21209},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
204, 205, 206,
607, 608, 609,
841, 3441, 3511,
5425, 5426,
}
},
{
level = 30,
availableTalentIDs = {
204, 205, 206,
607, 608, 609,
841, 3441, 3511,
5425, 5426,
}
},
{
level = 40,
availableTalentIDs = {
204, 205, 206,
607, 608, 609,
841, 3441, 3511,
5425, 5426,
}
},
},
},
[251] = { -- Frost
talents = {
{22016, 22017, 22018},
{22019, 22020, 22021},
{22515, 22517, 22519},
{22521, 22523, 22525},
{22527, 22530, 23373},
{22531, 22533, 22535},
{22023, 22109, 22537},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
701, 702, 706,
3439, 3512, 3743,
5424, 5427, 5429,
5435,
}
},
{
level = 30,
availableTalentIDs = {
701, 702, 706,
3439, 3512, 3743,
5424, 5427, 5429,
5435,
}
},
{
level = 40,
availableTalentIDs = {
701, 702, 706,
3439, 3512, 3743,
5424, 5427, 5429,
5435,
}
},
},
},
[252] = { -- Unholy
talents = {
{22024, 22025, 22026},
{22027, 22028, 22029},
{22516, 22518, 22520},
{22522, 22524, 22526},
{22528, 22529, 23373},
{22532, 22534, 22536},
{22030, 22110, 22538},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
40, 41, 149,
152, 3437, 3746,
3747, 5423, 5428,
5430, 5436,
}
},
{
level = 30,
availableTalentIDs = {
40, 41, 149,
152, 3437, 3746,
3747, 5423, 5428,
5430, 5436,
}
},
{
level = 40,
availableTalentIDs = {
40, 41, 149,
152, 3437, 3746,
3747, 5423, 5428,
5430, 5436,
}
},
},
},
-- Shaman
[262] = { -- Elemental
talents = {
{22356, 22357, 22358},
{23108, 23460, 23190},
{23162, 23163, 23164},
{19271, 19272, 19273},
{22144, 22172, 21966},
{22145, 19266, 23111},
{21198, 22153, 21675},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
727, 728, 730,
731, 3062, 3488,
3490, 3491, 3620,
3621, 5415,
}
},
{
level = 30,
availableTalentIDs = {
727, 728, 730,
731, 3062, 3488,
3490, 3491, 3620,
3621, 5415,
}
},
{
level = 40,
availableTalentIDs = {
727, 728, 730,
731, 3062, 3488,
3490, 3491, 3620,
3621, 5415,
}
},
},
},
[263] = { -- Enhancement
talents = {
{22354, 22355, 22353},
{22636, 23462, 23109},
{23165, 19260, 23166},
{23089, 23090, 22171},
{22144, 22149, 21966},
{21973, 22352, 22351},
{21970, 22977, 21972},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
721, 722, 725,
1944, 3487, 3489,
3492, 3519, 3622,
3623, 5414, 5438,
}
},
{
level = 30,
availableTalentIDs = {
721, 722, 725,
1944, 3487, 3489,
3492, 3519, 3622,
3623, 5414, 5438,
}
},
{
level = 40,
availableTalentIDs = {
721, 722, 725,
1944, 3487, 3489,
3492, 3519, 3622,
3623, 5414, 5438,
}
},
},
},
[264] = { -- Restoration
talents = {
{19262, 19263, 19264},
{19259, 23461, 21963},
{19275, 23110, 22127},
{22152, 22322, 22323},
{22144, 19269, 21966},
{19265, 21971, 21968},
{21969, 21199, 22359},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
707, 708, 712,
713, 714, 715,
1930, 3520, 3755,
3756, 5388, 5437,
}
},
{
level = 30,
availableTalentIDs = {
707, 708, 712,
713, 714, 715,
1930, 3520, 3755,
3756, 5388, 5437,
}
},
{
level = 40,
availableTalentIDs = {
707, 708, 712,
713, 714, 715,
1930, 3520, 3755,
3756, 5388, 5437,
}
},
},
},
-- Mage
[62] = { -- Arcane
talents = {
{22458, 22461, 22464},
{23072, 22443, 16025},
{22444, 22445, 22447},
{22453, 22467, 22470},
{22907, 22448, 22471},
{22455, 22449, 22474},
{21630, 21144, 21145},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
61, 62, 635,
637, 3442, 3517,
3529, 3531, 5397,
}
},
{
level = 30,
availableTalentIDs = {
61, 62, 635,
637, 3442, 3517,
3529, 3531, 5397,
}
},
{
level = 40,
availableTalentIDs = {
61, 62, 635,
637, 3442, 3517,
3529, 3531, 5397,
}
},
},
},
[63] = { -- Fire
talents = {
{22456, 22459, 22462},
{23071, 22443, 23074},
{22444, 22445, 22447},
{22450, 22465, 22468},
{22904, 22448, 22471},
{22451, 23362, 22472},
{21631, 22220, 21633},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
53, 643, 644,
645, 646, 647,
648, 828, 5389,
}
},
{
level = 30,
availableTalentIDs = {
53, 643, 644,
645, 646, 647,
648, 828, 5389,
}
},
{
level = 40,
availableTalentIDs = {
53, 643, 644,
645, 646, 647,
648, 828, 5389,
}
},
},
},
[64] = { -- Frost
talents = {
{22457, 22460, 22463},
{22442, 22443, 23073},
{22444, 22445, 22447},
{22452, 22466, 22469},
{22446, 22448, 22471},
{22454, 23176, 22473},
{21632, 22309, 21634},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
66, 67, 68,
632, 633, 634,
3443, 3532, 5390,
}
},
{
level = 30,
availableTalentIDs = {
66, 67, 68,
632, 633, 634,
3443, 3532, 5390,
}
},
{
level = 40,
availableTalentIDs = {
66, 67, 68,
632, 633, 634,
3443, 3532, 5390,
}
},
},
},
-- Warlock
[265] = { -- Affliction
talents = {
{22039, 23140, 23141},
{22044, 21180, 22089},
{19280, 19285, 19286},
{19279, 19292, 22046},
{22047, 19291, 23465},
{23139, 23159, 19295},
{19284, 19281, 19293},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
11, 12, 15,
16, 17, 18,
19, 20, 3740,
5370, 5379, 5386,
5392,
}
},
{
level = 30,
availableTalentIDs = {
11, 12, 15,
16, 17, 18,
19, 20, 3740,
5370, 5379, 5386,
5392,
}
},
{
level = 40,
availableTalentIDs = {
11, 12, 15,
16, 17, 18,
19, 20, 3740,
5370, 5379, 5386,
5392,
}
},
},
},
[266] = { -- Demonology
talents = {
{19290, 22048, 23138},
{22045, 21694, 23158},
{19280, 19285, 19286},
{22477, 22042, 23160},
{22047, 19291, 23465},
{23147, 23146, 21717},
{23161, 22479, 23091},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
156, 158, 162,
165, 1213, 3505,
3506, 3507, 3624,
3625, 3626, 5394,
5400,
}
},
{
level = 30,
availableTalentIDs = {
156, 158, 162,
165, 1213, 3505,
3506, 3507, 3624,
3625, 3626, 5394,
5400,
}
},
{
level = 40,
availableTalentIDs = {
156, 158, 162,
165, 1213, 3505,
3506, 3507, 3624,
3625, 3626, 5394,
5400,
}
},
},
},
[267] = { -- Destruction
talents = {
{22038, 22090, 22040},
{23148, 21695, 23157},
{19280, 19285, 19286},
{22480, 22043, 23143},
{22047, 19291, 23465},
{23155, 23156, 19295},
{19284, 23144, 23092},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
157, 159, 164,
3502, 3504, 3508,
3509, 3510, 5382,
5393, 5401,
}
},
{
level = 30,
availableTalentIDs = {
157, 159, 164,
3502, 3504, 3508,
3509, 3510, 5382,
5393, 5401,
}
},
{
level = 40,
availableTalentIDs = {
157, 159, 164,
3502, 3504, 3508,
3509, 3510, 5382,
5393, 5401,
}
},
},
},
-- Monk
[268] = { -- Brewmaster
talents = {
{23106, 19820, 20185},
{19304, 19818, 19302},
{22099, 22097, 19992},
{19993, 19994, 19995},
{20174, 23363, 20175},
{19819, 20184, 22103},
{22106, 22104, 22108},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
666, 667, 668,
669, 670, 671,
672, 673, 765,
843, 1958, 5417,
}
},
{
level = 30,
availableTalentIDs = {
666, 667, 668,
669, 670, 671,
672, 673, 765,
843, 1958, 5417,
}
},
{
level = 40,
availableTalentIDs = {
666, 667, 668,
669, 670, 671,
672, 673, 765,
843, 1958, 5417,
}
},
},
},
[270] = { -- Mistweaver
talents = {
{19823, 19820, 20185},
{19304, 19818, 19302},
{22168, 22167, 22166},
{19993, 22219, 19995},
{23371, 20173, 20175},
{23107, 22101, 22214},
{22218, 22169, 22170},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
70, 678, 679,
680, 682, 683,
1928, 3732, 5395,
5398, 5402,
}
},
{
level = 30,
availableTalentIDs = {
70, 678, 679,
680, 682, 683,
1928, 3732, 5395,
5398, 5402,
}
},
{
level = 40,
availableTalentIDs = {
70, 678, 679,
680, 682, 683,
1928, 3732, 5395,
5398, 5402,
}
},
},
},
[269] = { -- Windwalker
talents = {
{23106, 19820, 20185},
{19304, 19818, 19302},
{22098, 19771, 22096},
{19993, 23364, 19995},
{23258, 20173, 20175},
{22093, 23122, 22102},
{22107, 22105, 21191},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
77, 675, 852,
3050, 3052, 3734,
3737, 3744, 3745,
5448,
}
},
{
level = 30,
availableTalentIDs = {
77, 675, 852,
3050, 3052, 3734,
3737, 3744, 3745,
5448,
}
},
{
level = 40,
availableTalentIDs = {
77, 675, 852,
3050, 3052, 3734,
3737, 3744, 3745,
5448,
}
},
},
},
-- Druid
[102] = { -- Balance
talents = {
{22385, 22386, 22387},
{19283, 18570, 18571},
{22155, 22157, 22159},
{21778, 18576, 18577},
{18580, 21706, 21702},
{22389, 21712, 22165},
{21648, 21193, 21655},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
180, 182, 184,
185, 822, 834,
836, 3058, 3728,
3731, 5383, 5407,
}
},
{
level = 30,
availableTalentIDs = {
180, 182, 184,
185, 822, 834,
836, 3058, 3728,
3731, 5383, 5407,
}
},
{
level = 40,
availableTalentIDs = {
180, 182, 184,
185, 822, 834,
836, 3058, 3728,
3731, 5383, 5407,
}
},
},
},
[103] = { -- Feral
talents = {
{22363, 22364, 22365},
{19283, 18570, 18571},
{22163, 22158, 22159},
{21778, 18576, 18577},
{21708, 18579, 21704},
{21714, 21711, 22370},
{21646, 21649, 21653},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
201, 203, 601,
602, 611, 612,
620, 820, 3053,
3751, 5384,
}
},
{
level = 30,
availableTalentIDs = {
201, 203, 601,
602, 611, 612,
620, 820, 3053,
3751, 5384,
}
},
{
level = 40,
availableTalentIDs = {
201, 203, 601,
602, 611, 612,
620, 820, 3053,
3751, 5384,
}
},
},
},
[104] = { -- Guardian
talents = {
{22419, 22418, 22420},
{19283, 18570, 18571},
{22163, 22156, 22159},
{21778, 18576, 18577},
{21709, 21707, 22388},
{22423, 21713, 22390},
{22426, 22427, 22425},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
49, 50, 51,
52, 192, 193,
194, 195, 196,
197, 842, 1237,
3750, 5410,
}
},
{
level = 30,
availableTalentIDs = {
49, 50, 51,
52, 192, 193,
194, 195, 196,
197, 842, 1237,
3750, 5410,
}
},
{
level = 40,
availableTalentIDs = {
49, 50, 51,
52, 192, 193,
194, 195, 196,
197, 842, 1237,
3750, 5410,
}
},
},
},
[105] = { -- Restoration
talents = {
{18569, 18574, 18572},
{19283, 18570, 18571},
{22366, 22367, 22160},
{21778, 18576, 18577},
{21710, 21705, 22421},
{21716, 18585, 22422},
{22403, 21651, 22404},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
59, 691, 692,
697, 700, 835,
838, 1215, 3048,
3752, 5387,
}
},
{
level = 30,
availableTalentIDs = {
59, 691, 692,
697, 700, 835,
838, 1215, 3048,
3752, 5387,
}
},
{
level = 40,
availableTalentIDs = {
59, 691, 692,
697, 700, 835,
838, 1215, 3048,
3752, 5387,
}
},
},
},
-- Demon Hunter
[577] = { -- Havoc
talents = {
{21854, 22493, 22416},
{21857, 22765, 22799},
{22909, 22494, 21862},
{21863, 21864, 21865},
{21866, 21867, 21868},
{21869, 21870, 22767},
{21900, 21901, 22547},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
805, 806, 809,
810, 811, 812,
813, 1204, 1206,
1218, 5433, 5445,
}
},
{
level = 30,
availableTalentIDs = {
805, 806, 809,
810, 811, 812,
813, 1204, 1206,
1218, 5433, 5445,
}
},
{
level = 40,
availableTalentIDs = {
805, 806, 809,
810, 811, 812,
813, 1204, 1206,
1218, 5433, 5445,
}
},
},
},
[581] = { -- Vengeance
talents = {
{22502, 22503, 22504},
{22505, 22766, 22507},
{22324, 22541, 22540},
{22508, 22509, 22770},
{22546, 22510, 22511},
{22512, 22513, 22768},
{22543, 23464, 21902},
},
pvptalentslots = {
{
level = 20,
availableTalentIDs = {
814, 815, 816,
819, 1220, 1948,
3423, 3429, 3430,
3727, 5434, 5439,
}
},
{
level = 30,
availableTalentIDs = {
814, 815, 816,
819, 1220, 1948,
3423, 3429, 3430,
3727, 5434, 5439,
}
},
{
level = 40,
availableTalentIDs = {
814, 815, 816,
819, 1220, 1948,
3423, 3429, 3430,
3727, 5434, 5439,
}
},
},
},
}
end
if type(specInfo.version) ~= "number" then
error("MISSING SPEC INFO VERSION NUMBER")
end
function GetSpecInfoVersion()
return specInfo.version
end
function VerifyTalentForSpec(specID, talentID)
if specInfo[specID] then
for tier,talents in ipairs(specInfo[specID].talents) do
for column,talent in ipairs(talents) do
if talent == talentID then
return tier, column
end
end
end
end
end
function VerifyPvPTalentForSpec(specID, talentID)
if specInfo[specID] then
for _,slot in ipairs(specInfo[specID].pvptalentslots) do
for _,talent in ipairs(slot.availableTalentIDs) do
if talent == talentID then
return true
end
end
end
end
end
function GetTalentInfoForSpecID(specID, tier, column)
for specIndex=1,GetNumSpecializations() do
local playerSpecID = GetSpecializationInfo(specIndex);
if playerSpecID == specID then
return GetTalentInfoBySpecialization(specIndex, tier, column);
end
end
if BtWLoadoutsSpecInfo[specID] then
return GetTalentInfoByID(BtWLoadoutsSpecInfo[specID].talents[tier][column]);
end
if specInfo[specID] then
return GetTalentInfoByID(specInfo[specID].talents[tier][column]);
end
end
function GetPvpTalentSlotInfoForSpecID(specID, index)
local playerSpecID = GetSpecializationInfo(GetSpecialization());
if playerSpecID == specID then
local slotInfo = GetPvpTalentSlotInfo(index);
return slotInfo
end
if BtWLoadoutsSpecInfo[specID] and BtWLoadoutsSpecInfo[specID].pvptalentslots and BtWLoadoutsSpecInfo[specID].pvptalentslots[index] then
return BtWLoadoutsSpecInfo[specID].pvptalentslots[index];
end
if specInfo[specID] and specInfo[specID].pvptalentslots and specInfo[specID].pvptalentslots[index] then
return specInfo[specID].pvptalentslots[index];
end
end
Internal.GetSpecInfoVersion = GetSpecInfoVersion
Internal.VerifyTalentForSpec = VerifyTalentForSpec
Internal.VerifyPvPTalentForSpec = VerifyPvPTalentForSpec
Internal.GetTalentInfoForSpecID = GetTalentInfoForSpecID
Internal.GetPvpTalentSlotInfoForSpecID = GetPvpTalentSlotInfoForSpecID
end
local GetEssenceInfoByID, GetEssenceInfoForRole;
do
local essenceInfo = {
nil, -- [1]
{
["ID"] = 2,
["name"] = "Azeroth's Undying Gift",
["icon"] = 2967107,
}, -- [2]
{
["ID"] = 3,
["name"] = "Sphere of Suppression",
["icon"] = 2065602,
}, -- [3]
{
["ID"] = 4,
["name"] = "Worldvein Resonance",
["icon"] = 1830317,
}, -- [4]
{
["ID"] = 5,
["name"] = "Essence of the Focusing Iris",
["icon"] = 2967111,
}, -- [5]
{
["ID"] = 6,
["name"] = "Purification Protocol",
["icon"] = 2967103,
}, -- [6]
{
["ID"] = 7,
["name"] = "Anima of Life and Death",
["icon"] = 2967105,
}, -- [7]
nil, -- [8]
nil, -- [9]
nil, -- [10]
nil, -- [11]
{
["ID"] = 12,
["name"] = "The Crucible of Flame",
["icon"] = 3015740,
}, -- [12]
{
["ID"] = 13,
["name"] = "Nullification Dynamo",
["icon"] = 3015741,
}, -- [13]
{
["ID"] = 14,
["name"] = "Condensed Life-Force",
["icon"] = 2967113,
}, -- [14]
{
["ID"] = 15,
["name"] = "Ripple in Space",
["icon"] = 2967109,
}, -- [15]
{
["ID"] = 16,
["name"] = "Unwavering Ward",
["icon"] = 3193842,
}, -- [16]
{
["ID"] = 17,
["name"] = "The Ever-Rising Tide",
["icon"] = 2967108,
}, -- [17]
{
["ID"] = 18,
["name"] = "Artifice of Time",
["icon"] = 2967112,
}, -- [18]
{
["ID"] = 19,
["name"] = "The Well of Existence",
["icon"] = 516796,
}, -- [19]
{
["ID"] = 20,
["name"] = "Life-Binder's Invocation",
["icon"] = 2967106,
}, -- [20]
{
["ID"] = 21,
["name"] = "Vitality Conduit",
["icon"] = 2967100,
}, -- [21]
{
["ID"] = 22,
["name"] = "Vision of Perfection",
["icon"] = 3015743,
}, -- [22]
{
["ID"] = 23,
["name"] = "Blood of the Enemy",
["icon"] = 2032580,
}, -- [23]
{
["ID"] = 24,
["name"] = "Spirit of Preservation",
["icon"] = 2967101,
}, -- [24]
{
["ID"] = 25,
["name"] = "Aegis of the Deep",
["icon"] = 2967110,
}, -- [25]
nil, -- [26]
{
["ID"] = 27,
["name"] = "Memory of Lucid Dreams",
["icon"] = 2967104,
}, -- [27]
{
["ID"] = 28,
["name"] = "The Unbound Force",
["icon"] = 2967102,
}, -- [28]
nil, -- [29]
nil, -- [30]
nil, -- [31]
{
["ID"] = 32,
["name"] = "Conflict and Strife",
["icon"] = 3015742,
}, -- [32]
{
["ID"] = 33,
["name"] = "Touch of the Everlasting",
["icon"] = 3193847,
}, -- [33]
{
["ID"] = 34,
["name"] = "Strength of the Warden",
["icon"] = 3193846,
}, -- [34]
{
["ID"] = 35,
["name"] = "Breath of the Dying",
["icon"] = 3193844,
}, -- [35]
{
["ID"] = 36,
["name"] = "Spark of Inspiration",
["icon"] = 3193843,
}, -- [36]
{
["ID"] = 37,
["name"] = "The Formless Void",
["icon"] = 3193845,
}, -- [37]
}
local roleInfo = {
["DAMAGER"] = {
["essences"] = {
23, -- [1]
35, -- [2]
14, -- [3]
32, -- [4]
5, -- [5]
27, -- [6]
6, -- [7]
15, -- [8]
36, -- [9]
12, -- [10]
37, -- [11]
28, -- [12]
22, -- [13]
4, -- [14]
},
},
["TANK"] = {
["essences"] = {
25, -- [1]
7, -- [2]
2, -- [3]
32, -- [4]
27, -- [5]
13, -- [6]
15, -- [7]
3, -- [8]
34, -- [9]
12, -- [10]
37, -- [11]
33, -- [12]
22, -- [13]
4, -- [14]
},
},
["HEALER"] = {
["essences"] = {
18, -- [1]
32, -- [2]
20, -- [3]
27, -- [4]
15, -- [5]
24, -- [6]
12, -- [7]
17, -- [8]
37, -- [9]
19, -- [10]
16, -- [11]
22, -- [12]
21, -- [13]
4, -- [14]
},
},
};
function GetEssenceInfoByID(essenceID)
local essence = GetEssenceInfo(essenceID);
if not essence then
essence = BtWLoadoutsEssenceInfo and BtWLoadoutsEssenceInfo[essenceID] or essenceInfo[essenceID];
end
return essence;
end
function GetEssenceInfoForRole(role, index)
if BtWLoadoutsRoleInfo[role] and BtWLoadoutsRoleInfo[role].essences and BtWLoadoutsRoleInfo[role].essences[index] then
return GetEssenceInfoByID(BtWLoadoutsRoleInfo[role].essences[index]);
end
if roleInfo[role] and roleInfo[role].essences and roleInfo[role].essences[index] then
return GetEssenceInfoByID(roleInfo[role].essences[index]);
end
end
Internal.GetEssenceInfoByID = GetEssenceInfoByID
Internal.GetEssenceInfoForRole = GetEssenceInfoForRole
end
function Internal.GetCharacterInfo(character)
return BtWLoadoutsCharacterInfo and BtWLoadoutsCharacterInfo[character];
end
function Internal.GetFormattedCharacterName(slug, includeRealm)
local characterInfo = Internal.GetCharacterInfo(slug)
if characterInfo then
local classColor = C_ClassColor.GetClassColor(characterInfo.class)
if includeRealm then
return format("%s - %s", classColor:WrapTextInColorCode(characterInfo.name), characterInfo.realm)
else
return classColor:WrapTextInColorCode(characterInfo.name)
end
end
return slug
end
local characterIteratorTemp = {}
function Internal.CharacterIterator()
wipe(characterIteratorTemp);
for character in pairs(BtWLoadoutsCharacterInfo or {}) do
characterIteratorTemp[#characterIteratorTemp+1] = character
end
table.sort(characterIteratorTemp, function (a, b)
return a < b
end)
return ipairs(characterIteratorTemp)
end
-- EnumerateRealms
do
local unique, list = {}, {}
function Internal.EnumerateRealms()
wipe(unique)
wipe(list)
for _,character in pairs(BtWLoadoutsCharacterInfo or {}) do
unique[character.realm] = true
end
for realm in pairs(unique) do
list[#list+1] = realm
end
table.sort(list, function (a, b)
return a < b
end)
return ipairs(list)
end
end
-- EnumerateCharactersForRealm
do
local list = {}
function Internal.EnumerateCharactersForRealm(realm)
wipe(list)
for slug,character in pairs(BtWLoadoutsCharacterInfo or {}) do
if character.realm == realm then
list[#list+1] = slug
end
end
table.sort(list, function (a, b)
return a < b
end)
return ipairs(list)
end
end
function Internal.DeleteCharacter(slug)
if Internal.Call("CHARACTER_DELETE", slug) then
BtWLoadoutsCharacterInfo[slug] = nil
end
BtWLoadoutsFrame:Update();
end
function Internal.UpdatePlayerInfo()
local name, realm = UnitFullName("player");
local class = select(2, UnitClass("player"));
local race = select(3, UnitRace("player"));
local sex = UnitSex("player") - 2;
BtWLoadoutsCharacterInfo[realm .. "-" .. name] = {name = name, realm = GetRealmName(), class = class, race = race, sex = sex};
end
-- Checks if the player can switch to specID, used to check if loadouts are valid
function Internal.CanSwitchToSpecialization(specID)
local playerClass = select(2, UnitClass("player"));
local specClass = select(6, GetSpecializationInfoByID(specID));
if playerClass ~= specClass then
return false
end
local specIndex = GetSpecialization()
if specIndex == nil then
return false
end
if select(2, GetInstanceInfo()) == "arena" then
-- Can not switch specs in arena
return GetSpecializationInfo(specIndex) == specID
elseif select(2, GetInstanceInfo()) == "battleground" then
-- You can only switch specs in bgs unless you go from or to healer
local currentRole = GetSpecializationRole(specIndex)
local targetRole = GetSpecializationRoleByID(specID)
return (currentRole == targetRole) or not (currentRole == "HEALER" or targetRole == "HEALER")
end
return true
end
function Internal.HasJailersChains()
return GetPlayerAuraBySpellID(338906) ~= nil
end