From 52621faa5e186bb69577fa0bd9e8580159c370e1 Mon Sep 17 00:00:00 2001 From: Florian Berthold Date: Mon, 8 Dec 2025 19:01:28 +0100 Subject: [PATCH] Add Ascension talent ID to calculator position mapping - Introduced `AscensionTalentMapper.lua` to provide mapping between Ascension talent IDs and calculator positions. - Auto-generated mapping table includes talent tabs, slots, and rank data for supported classes. --- AscensionExporter/AscensionExporter.toc | 1 + AscensionExporter/Collectors/Talents.lua | 15 + AscensionExporter/Core.lua | 39 +- .../Util/AscensionTalentMapper.lua | 892 ++++++++++++++++++ 4 files changed, 937 insertions(+), 10 deletions(-) create mode 100644 AscensionExporter/Util/AscensionTalentMapper.lua diff --git a/AscensionExporter/AscensionExporter.toc b/AscensionExporter/AscensionExporter.toc index d55109e..ae95a85 100644 --- a/AscensionExporter/AscensionExporter.toc +++ b/AscensionExporter/AscensionExporter.toc @@ -8,6 +8,7 @@ Core.lua Util\Json.lua Util\TalentEncoder.lua +Util\AscensionTalentMapper.lua UI\ExportFrame.lua Collectors\Talents.lua Collectors\Gear.lua diff --git a/AscensionExporter/Collectors/Talents.lua b/AscensionExporter/Collectors/Talents.lua index 83eead8..eaa9da0 100644 --- a/AscensionExporter/Collectors/Talents.lua +++ b/AscensionExporter/Collectors/Talents.lua @@ -77,6 +77,7 @@ function AE.CollectTalents() selected = {}, debug = {}, buildString = nil, + talents = {}, } -- Use Ascension's native talent export API @@ -85,6 +86,20 @@ function AE.CollectTalents() out.buildString = buildString table.insert(out.debug, "Ascension API: C_CharacterAdvancement.ExportBuild() = " .. tostring(buildString)) + -- Get individual talent entries + if C_CharacterAdvancement.GetKnownTalentEntries then + local entries = C_CharacterAdvancement.GetKnownTalentEntries() + table.insert(out.debug, string.format("Found %d known talent entries", #entries)) + + for _, entry in ipairs(entries) do + table.insert(out.talents, { + id = entry.ID or 0, + name = entry.name or "", + icon = entry.icon or "", + }) + end + end + -- For now, we'll store the build string and parse it later -- The build string format is Ascension's native format if buildString and buildString ~= "" then diff --git a/AscensionExporter/Core.lua b/AscensionExporter/Core.lua index 38af7e2..b867708 100644 --- a/AscensionExporter/Core.lua +++ b/AscensionExporter/Core.lua @@ -345,17 +345,36 @@ function AE:GenerateMarkdownTalents() local lines = {} table.insert(lines, "## Talents\n") - -- Check if we have Ascension build string + -- Check if we have Ascension talent data + if talents.talents and #talents.talents > 0 then + -- Extract Ascension talent IDs + local ascensionIds = {} + for _, tal in ipairs(talents.talents) do + table.insert(ascensionIds, tal.id or 0) + end + + -- Convert to calculator format using the mapper + local _, class = UnitClass("player") + local buildString = self.ConvertAscensionTalentsToCalcFormat and self.ConvertAscensionTalentsToCalcFormat(ascensionIds, class) + + if buildString then + -- Generate URL for talent calculator + local url = string.format("https://exil.es/en/wow/talent-calc?build=%s", buildString) + table.insert(lines, string.format("[View in Talent Calculator](%s)\n", url)) + + -- Embed iframe for Wiki.js + table.insert(lines, string.format('\n", buildString)) + + return table.concat(lines, "\n") + else + table.insert(lines, "*Could not convert talents to calculator format. Only mage class is currently supported.*\n") + return table.concat(lines, "\n") + end + end + + -- Fallback: show build string if talent list not available if talents.buildString and talents.buildString ~= "" then - -- Use Ascension's native build string format - local buildString = talents.buildString - - -- TODO: Need to convert Ascension format to exiles calculator format - -- For now, just output the build string for manual conversion - table.insert(lines, string.format("**Build String (Ascension format):**\n```\n%s\n```\n", buildString)) - table.insert(lines, "*Note: Automatic conversion to Exiles talent calculator format is not yet implemented.*\n") - table.insert(lines, "*You can manually import this build in-game or use Ascension's talent calculator.*\n") - + table.insert(lines, "*Talent data available but could not be parsed.*\n") return table.concat(lines, "\n") end diff --git a/AscensionExporter/Util/AscensionTalentMapper.lua b/AscensionExporter/Util/AscensionTalentMapper.lua new file mode 100644 index 0000000..aec6654 --- /dev/null +++ b/AscensionExporter/Util/AscensionTalentMapper.lua @@ -0,0 +1,892 @@ +-- AscensionExporter - Ascension Talent ID to Calculator Position Mapper +-- Auto-generated from talent calculator JSON files + +AscensionExporter = _G.AscensionExporter or {} +_G.AscensionExporter = AscensionExporter +local AE = AscensionExporter + +-- Auto-generated mapping table +local CLASS_TALENT_MAPS = { + DRUID = { + [13121] = {tab=1, slot=0, maxRank=5}, -- Ferocity + [1360] = {tab=1, slot=3, maxRank=2}, -- Savage Defense + [13126] = {tab=1, slot=4, maxRank=5}, -- Feral Aggression + [13131] = {tab=1, slot=5, maxRank=3}, -- Feral Instinct + [13134] = {tab=1, slot=6, maxRank=2}, -- Savage Fury + [13136] = {tab=1, slot=7, maxRank=3}, -- Thick Hide + [13139] = {tab=1, slot=8, maxRank=2}, -- Feral Swiftness + [13141] = {tab=1, slot=9, maxRank=1}, -- Survival Instincts + [13142] = {tab=1, slot=10, maxRank=3}, -- Sharpened Claws + [13145] = {tab=1, slot=11, maxRank=2}, -- Shredding Attacks + [13147] = {tab=1, slot=12, maxRank=3}, -- Predatory Strikes + [13150] = {tab=1, slot=13, maxRank=2}, -- Primal Fury + [13152] = {tab=1, slot=14, maxRank=2}, -- Primal Precision + [13154] = {tab=1, slot=15, maxRank=2}, -- Brutal Impact + [13156] = {tab=1, slot=16, maxRank=1}, -- Feral Charge + [13157] = {tab=1, slot=17, maxRank=2}, -- Nurturing Instinct + [13159] = {tab=1, slot=18, maxRank=3}, -- Natural Reaction + [13162] = {tab=1, slot=19, maxRank=5}, -- Heart of the Wild + [13167] = {tab=1, slot=20, maxRank=3}, -- Survival of the Fittest + [13170] = {tab=1, slot=21, maxRank=1}, -- Leader of the Pack + [13171] = {tab=1, slot=22, maxRank=2}, -- Improved Leader of the Pack + [13173] = {tab=1, slot=23, maxRank=3}, -- Primal Tenacity + [13176] = {tab=1, slot=24, maxRank=3}, -- Protector of the Pack + [13179] = {tab=1, slot=25, maxRank=3}, -- Predatory Instincts + [13182] = {tab=1, slot=26, maxRank=3}, -- Infected Wounds + [13185] = {tab=1, slot=27, maxRank=3}, -- King of the Jungle + [13188] = {tab=1, slot=28, maxRank=1}, -- Mangle + [13189] = {tab=1, slot=29, maxRank=2}, -- Improved Mangle + [13192] = {tab=1, slot=30, maxRank=3}, -- Rend and Tear + [13197] = {tab=1, slot=31, maxRank=1}, -- Primal Gore + [13198] = {tab=1, slot=32, maxRank=1}, -- Berserk + [13199] = {tab=2, slot=0, maxRank=2}, -- Improved Mark of the Wild + [13201] = {tab=2, slot=1, maxRank=3}, -- Nature's Focus + [13204] = {tab=2, slot=2, maxRank=5}, -- Furor + [13209] = {tab=2, slot=3, maxRank=5}, -- Naturalist + [13214] = {tab=2, slot=4, maxRank=3}, -- Subtlety + [13217] = {tab=2, slot=5, maxRank=3}, -- Natural Shapeshifter + [13220] = {tab=2, slot=6, maxRank=3}, -- Intensity + [13223] = {tab=2, slot=7, maxRank=1}, -- Omen of Clarity + [13224] = {tab=2, slot=8, maxRank=2}, -- Master Shapeshifter + [13226] = {tab=2, slot=9, maxRank=5}, -- Tranquil Spirit + [13231] = {tab=2, slot=10, maxRank=3}, -- Improved Rejuvenation + [13234] = {tab=2, slot=11, maxRank=1}, -- Nature's Swiftness + [13235] = {tab=2, slot=12, maxRank=5}, -- Gift of Nature + [13240] = {tab=2, slot=13, maxRank=2}, -- Improved Tranquility + [13242] = {tab=2, slot=14, maxRank=2}, -- Empowered Touch + [13244] = {tab=2, slot=15, maxRank=5}, -- Nature's Bounty + [13249] = {tab=2, slot=16, maxRank=3}, -- Living Spirit + [13252] = {tab=2, slot=17, maxRank=1}, -- Swiftmend + [13253] = {tab=2, slot=18, maxRank=3}, -- Natural Perfection + [13256] = {tab=2, slot=19, maxRank=3}, -- Empowered Rejuvenation + [13261] = {tab=2, slot=20, maxRank=3}, -- Living Seed + [13264] = {tab=2, slot=21, maxRank=3}, -- Revitalize + [13267] = {tab=2, slot=22, maxRank=1}, -- Tree of Life + [13268] = {tab=2, slot=23, maxRank=3}, -- Improved Tree of Life + [13271] = {tab=2, slot=24, maxRank=2}, -- Improved Barkskin + [13273] = {tab=2, slot=25, maxRank=3}, -- Gift of the Earthmother + [13278] = {tab=2, slot=26, maxRank=1}, -- Wild Growth + [13279] = {tab=3, slot=0, maxRank=5}, -- Starlight Wrath + [13284] = {tab=3, slot=1, maxRank=5}, -- Genesis + [13289] = {tab=3, slot=3, maxRank=3}, -- Moonglow + [13292] = {tab=3, slot=4, maxRank=2}, -- Nature's Majesty + [13294] = {tab=3, slot=5, maxRank=2}, -- Improved Moonfire + [13296] = {tab=3, slot=6, maxRank=3}, -- Brambles + [13299] = {tab=3, slot=7, maxRank=3}, -- Nature's Grace + [13302] = {tab=3, slot=8, maxRank=1}, -- Nature's Splendor + [13303] = {tab=3, slot=9, maxRank=2}, -- Nature's Reach + [13305] = {tab=3, slot=10, maxRank=3}, -- Vengeance + [13310] = {tab=3, slot=11, maxRank=3}, -- Celestial Focus + [13313] = {tab=3, slot=12, maxRank=3}, -- Lunar Guidance + [13316] = {tab=3, slot=13, maxRank=1}, -- Insect Swarm + [13317] = {tab=3, slot=14, maxRank=3}, -- Improved Insect Swarm + [13320] = {tab=3, slot=15, maxRank=3}, -- Dreamstate + [13323] = {tab=3, slot=16, maxRank=3}, -- Moonfury + [13326] = {tab=3, slot=17, maxRank=2}, -- Balance of Power + [13328] = {tab=3, slot=18, maxRank=1}, -- Moonkin Form + [13329] = {tab=3, slot=19, maxRank=3}, -- Improved Moonkin Form + [13332] = {tab=3, slot=20, maxRank=3}, -- Improved Faerie Fire + [13335] = {tab=3, slot=21, maxRank=3}, -- Owlkin Frenzy + [13338] = {tab=3, slot=22, maxRank=3}, -- Wrath of Cenarius + [13343] = {tab=3, slot=23, maxRank=3}, -- Eclipse + [13346] = {tab=3, slot=24, maxRank=1}, -- Typhoon + [13347] = {tab=3, slot=25, maxRank=1}, -- Force of Nature + [13348] = {tab=3, slot=26, maxRank=2}, -- Gale Winds + [13350] = {tab=3, slot=27, maxRank=3}, -- Earth and Moon + [13353] = {tab=3, slot=28, maxRank=1}, -- Starfall + }, + + HUNTER = { + [13570] = {tab=1, slot=0, maxRank=5}, -- Improved Aspect of the Hawk + [13575] = {tab=1, slot=1, maxRank=5}, -- Endurance Training + [13580] = {tab=1, slot=2, maxRank=2}, -- Focused Fire + [13582] = {tab=1, slot=3, maxRank=3}, -- Improved Aspect of the Monkey + [13585] = {tab=1, slot=4, maxRank=3}, -- Thick Hide + [13588] = {tab=1, slot=5, maxRank=2}, -- Improved Revive Pet + [13590] = {tab=1, slot=6, maxRank=2}, -- Pathfinding + [13592] = {tab=1, slot=7, maxRank=1}, -- Aspect Mastery + [13593] = {tab=1, slot=8, maxRank=5}, -- Unleashed Fury + [13598] = {tab=1, slot=9, maxRank=2}, -- Improved Mend Pet + [13600] = {tab=1, slot=10, maxRank=5}, -- Ferocity + [13605] = {tab=1, slot=11, maxRank=2}, -- Spirit Bond + [13607] = {tab=1, slot=12, maxRank=1}, -- Intimidation + [13608] = {tab=1, slot=13, maxRank=2}, -- Bestial Discipline + [13610] = {tab=1, slot=14, maxRank=2}, -- Animal Handler + [13612] = {tab=1, slot=15, maxRank=5}, -- Frenzy + [13617] = {tab=1, slot=16, maxRank=3}, -- Ferocious Inspiration + [13620] = {tab=1, slot=17, maxRank=1}, -- Bestial Wrath + [13621] = {tab=1, slot=18, maxRank=3}, -- Catlike Reflexes + [13624] = {tab=1, slot=19, maxRank=2}, -- Invigoration + [13626] = {tab=1, slot=20, maxRank=3}, -- Serpent's Swiftness + [13631] = {tab=1, slot=21, maxRank=3}, -- Longevity + [13634] = {tab=1, slot=22, maxRank=1}, -- The Beast Within + [13635] = {tab=1, slot=23, maxRank=3}, -- Cobra Strikes + [13638] = {tab=1, slot=24, maxRank=3}, -- Kindred Spirits + [13643] = {tab=1, slot=25, maxRank=1}, -- Beast Mastery + [769] = {tab=2, slot=0, maxRank=2}, -- Lone Wolf + [13644] = {tab=2, slot=1, maxRank=5}, -- Improved Tracking + [13649] = {tab=2, slot=2, maxRank=3}, -- Hawk Eye + [13652] = {tab=2, slot=3, maxRank=3}, -- Savage Strikes + [13654] = {tab=2, slot=4, maxRank=3}, -- Surefooted + [13657] = {tab=2, slot=5, maxRank=3}, -- Entrapment + [13660] = {tab=2, slot=6, maxRank=3}, -- Trap Mastery + [13663] = {tab=2, slot=7, maxRank=2}, -- Survival Instincts + [13665] = {tab=2, slot=8, maxRank=5}, -- Survivalist + [13668] = {tab=2, slot=9, maxRank=1}, -- Scatter Shot + [13669] = {tab=2, slot=10, maxRank=3}, -- Deflection + [13672] = {tab=2, slot=11, maxRank=2}, -- Survival Tactics + [13674] = {tab=2, slot=12, maxRank=3}, -- T.N.T. + [13677] = {tab=2, slot=13, maxRank=3}, -- Lock and Load + [13680] = {tab=2, slot=14, maxRank=3}, -- Hunter vs. Wild + [13683] = {tab=2, slot=15, maxRank=3}, -- Killer Instinct + [13686] = {tab=2, slot=16, maxRank=1}, -- Counterattack + [13687] = {tab=2, slot=17, maxRank=5}, -- Lightning Reflexes + [13692] = {tab=2, slot=18, maxRank=3}, -- Resourcefulness + [13695] = {tab=2, slot=19, maxRank=3}, -- Expose Weakness + [13698] = {tab=2, slot=20, maxRank=1}, -- Wyvern Sting + [13699] = {tab=2, slot=21, maxRank=2}, -- Thrill of the Hunt + [13702] = {tab=2, slot=22, maxRank=3}, -- Master Tactician + [13707] = {tab=2, slot=23, maxRank=3}, -- Noxious Stings + [13710] = {tab=2, slot=24, maxRank=2}, -- Point of No Escape + [13712] = {tab=2, slot=25, maxRank=1}, -- Black Arrow + [13713] = {tab=2, slot=26, maxRank=3}, -- Sniper Training + [13716] = {tab=2, slot=27, maxRank=3}, -- Hunting Party + [13719] = {tab=2, slot=28, maxRank=1}, -- Explosive Shot + [13720] = {tab=3, slot=0, maxRank=2}, -- Improved Concussive Shot + [13722] = {tab=3, slot=1, maxRank=3}, -- Focused Aim + [13725] = {tab=3, slot=2, maxRank=5}, -- Lethal Shots + [13730] = {tab=3, slot=3, maxRank=3}, -- Careful Aim + [13733] = {tab=3, slot=4, maxRank=3}, -- Improved Hunter's Mark + [13736] = {tab=3, slot=5, maxRank=5}, -- Mortal Shots + [13741] = {tab=3, slot=6, maxRank=2}, -- Go for the Throat + [13743] = {tab=3, slot=7, maxRank=3}, -- Improved Arcane Shot + [13746] = {tab=3, slot=8, maxRank=1}, -- Aimed Shot + [13747] = {tab=3, slot=9, maxRank=2}, -- Rapid Killing + [13749] = {tab=3, slot=10, maxRank=3}, -- Improved Stings + [13752] = {tab=3, slot=11, maxRank=5}, -- Efficiency + [13757] = {tab=3, slot=12, maxRank=2}, -- Concussive Barrage + [13759] = {tab=3, slot=13, maxRank=1}, -- Readiness + [13760] = {tab=3, slot=14, maxRank=3}, -- Barrage + [13763] = {tab=3, slot=15, maxRank=2}, -- Combat Experience + [13765] = {tab=3, slot=16, maxRank=3}, -- Ranged Weapon Specialization + [13768] = {tab=3, slot=17, maxRank=3}, -- Piercing Shots + [13771] = {tab=3, slot=18, maxRank=1}, -- Trueshot Aura + [13772] = {tab=3, slot=19, maxRank=3}, -- Improved Barrage + [13775] = {tab=3, slot=20, maxRank=3}, -- Master Marksman + [13780] = {tab=3, slot=21, maxRank=2}, -- Rapid Recuperation + [13782] = {tab=3, slot=22, maxRank=3}, -- Wild Quiver + [13785] = {tab=3, slot=23, maxRank=1}, -- Silencing Shot + [13786] = {tab=3, slot=24, maxRank=3}, -- Improved Steady Shot + [13789] = {tab=3, slot=25, maxRank=3}, -- Marked for Death + [13794] = {tab=3, slot=26, maxRank=1}, -- Chimera Shot + }, + + MAGE = { + [12001] = {tab=1, slot=0, maxRank=2}, -- Improved Fire Blast + [12003] = {tab=1, slot=1, maxRank=3}, -- Incineration + [12006] = {tab=1, slot=2, maxRank=5}, -- Improved Fireball + [12011] = {tab=1, slot=3, maxRank=5}, -- Ignite + [12016] = {tab=1, slot=4, maxRank=2}, -- Burning Determination + [12018] = {tab=1, slot=5, maxRank=3}, -- World in Flames + [12021] = {tab=1, slot=6, maxRank=2}, -- Flame Throwing + [12023] = {tab=1, slot=7, maxRank=3}, -- Impact + [12026] = {tab=1, slot=8, maxRank=1}, -- Pyroblast + [12027] = {tab=1, slot=9, maxRank=2}, -- Burning Soul + [12029] = {tab=1, slot=10, maxRank=3}, -- Improved Scorch + [12032] = {tab=1, slot=11, maxRank=2}, -- Molten Shields + [12034] = {tab=1, slot=12, maxRank=3}, -- Master of Elements + [12037] = {tab=1, slot=13, maxRank=3}, -- Playing with Fire + [12039] = {tab=1, slot=14, maxRank=3}, -- Critical Mass + [12042] = {tab=1, slot=15, maxRank=1}, -- Blast Wave + [12043] = {tab=1, slot=16, maxRank=2}, -- Blazing Speed + [12045] = {tab=1, slot=17, maxRank=3}, -- Fire Power + [12050] = {tab=1, slot=18, maxRank=3}, -- Pyromaniac + [12053] = {tab=1, slot=19, maxRank=1}, -- Combustion + [12054] = {tab=1, slot=20, maxRank=2}, -- Molten Fury + [12056] = {tab=1, slot=21, maxRank=2}, -- Fiery Payback + [12058] = {tab=1, slot=22, maxRank=3}, -- Empowered Fire + [12061] = {tab=1, slot=23, maxRank=2}, -- Firestarter + [12063] = {tab=1, slot=24, maxRank=1}, -- Dragon's Breath + [12064] = {tab=1, slot=25, maxRank=3}, -- Hot Streak + [12067] = {tab=1, slot=26, maxRank=3}, -- Burnout + [12072] = {tab=1, slot=27, maxRank=1}, -- Living Bomb + [12073] = {tab=2, slot=0, maxRank=3}, -- Frostbite + [12076] = {tab=2, slot=1, maxRank=5}, -- Improved Frostbolt + [12081] = {tab=2, slot=2, maxRank=3}, -- Ice Floes + [12084] = {tab=2, slot=3, maxRank=3}, -- Ice Shards + [12087] = {tab=2, slot=4, maxRank=2}, -- Frost Warding + [12089] = {tab=2, slot=5, maxRank=3}, -- Precision + [12092] = {tab=2, slot=6, maxRank=3}, -- Permafrost + [12095] = {tab=2, slot=7, maxRank=3}, -- Piercing Ice + [12098] = {tab=2, slot=8, maxRank=1}, -- Icy Veins + [12099] = {tab=2, slot=9, maxRank=3}, -- Improved Blizzard + [12102] = {tab=2, slot=10, maxRank=2}, -- Arctic Reach + [12104] = {tab=2, slot=11, maxRank=3}, -- Frost Channeling + [12107] = {tab=2, slot=12, maxRank=3}, -- Shatter + [12110] = {tab=2, slot=13, maxRank=1}, -- Cold Snap + [12111] = {tab=2, slot=14, maxRank=3}, -- Improved Cone of Cold + [12114] = {tab=2, slot=15, maxRank=3}, -- Frozen Core + [12117] = {tab=2, slot=16, maxRank=2}, -- Cold as Ice + [12119] = {tab=2, slot=17, maxRank=3}, -- Winter's Chill + [12122] = {tab=2, slot=18, maxRank=2}, -- Shattered Barrier + [12124] = {tab=2, slot=19, maxRank=1}, -- Ice Barrier + [12125] = {tab=2, slot=20, maxRank=3}, -- Arctic Winds + [12130] = {tab=2, slot=21, maxRank=2}, -- Empowered Frostbolt + [12132] = {tab=2, slot=22, maxRank=2}, -- Fingers of Frost + [12134] = {tab=2, slot=23, maxRank=3}, -- Brain Freeze + [12137] = {tab=2, slot=24, maxRank=1}, -- Summon Water Elemental + [12138] = {tab=2, slot=25, maxRank=3}, -- Enduring Winter + [12141] = {tab=2, slot=26, maxRank=3}, -- Chilled to the Bone + [12146] = {tab=2, slot=27, maxRank=1}, -- Deep Freeze + [12147] = {tab=3, slot=0, maxRank=2}, -- Arcane Subtlety + [426] = {tab=3, slot=1, maxRank=3}, -- Alacrity + [12149] = {tab=3, slot=2, maxRank=3}, -- Arcane Focus + [12152] = {tab=3, slot=3, maxRank=5}, -- Arcane Stability + [12157] = {tab=3, slot=4, maxRank=3}, -- Arcane Fortitude + [12160] = {tab=3, slot=5, maxRank=2}, -- Magic Absorption + [12162] = {tab=3, slot=6, maxRank=5}, -- Arcane Concentration + [12167] = {tab=3, slot=7, maxRank=2}, -- Magic Attunement + [12169] = {tab=3, slot=8, maxRank=3}, -- Spell Impact + [12172] = {tab=3, slot=9, maxRank=3}, -- Student of the Mind + [12175] = {tab=3, slot=10, maxRank=1}, -- Focus Magic + [12176] = {tab=3, slot=11, maxRank=2}, -- Arcane Shielding + [12178] = {tab=3, slot=12, maxRank=2}, -- Improved Counterspell + [12180] = {tab=3, slot=13, maxRank=3}, -- Arcane Meditation + [12183] = {tab=3, slot=14, maxRank=3}, -- Torment the Weak + [12186] = {tab=3, slot=15, maxRank=2}, -- Improved Blink + [12188] = {tab=3, slot=16, maxRank=1}, -- Presence of Mind + [12189] = {tab=3, slot=17, maxRank=5}, -- Arcane Mind + [12194] = {tab=3, slot=18, maxRank=3}, -- Prismatic Cloak + [12197] = {tab=3, slot=19, maxRank=3}, -- Arcane Instability + [12200] = {tab=3, slot=20, maxRank=2}, -- Arcane Potency + [12202] = {tab=3, slot=21, maxRank=3}, -- Arcane Empowerment + [12205] = {tab=3, slot=22, maxRank=1}, -- Arcane Power + [12206] = {tab=3, slot=23, maxRank=3}, -- Incanter's Absorption + [12209] = {tab=3, slot=24, maxRank=2}, -- Arcane Flows + [12211] = {tab=3, slot=25, maxRank=3}, -- Mind Mastery + [12216] = {tab=3, slot=26, maxRank=1}, -- Slow + [12217] = {tab=3, slot=27, maxRank=3}, -- Missile Barrage + [12222] = {tab=3, slot=28, maxRank=3}, -- Netherwind Presence + [12225] = {tab=3, slot=29, maxRank=2}, -- Spell Power + [12227] = {tab=3, slot=31, maxRank=1}, -- Arcane Barrage + }, + + PALADIN = { + [731] = {tab=1, slot=0, maxRank=3}, -- Light's Vengeance + [13795] = {tab=1, slot=1, maxRank=5}, -- Deflection + [13800] = {tab=1, slot=2, maxRank=5}, -- Benediction + [13805] = {tab=1, slot=3, maxRank=2}, -- Improved Judgements + [13807] = {tab=1, slot=4, maxRank=3}, -- Heart of the Crusader + [13810] = {tab=1, slot=5, maxRank=2}, -- Improved Blessing of Might + [13812] = {tab=1, slot=6, maxRank=2}, -- Vindication + [13814] = {tab=1, slot=7, maxRank=3}, -- Conviction + [13819] = {tab=1, slot=8, maxRank=1}, -- Seal of Command + [13820] = {tab=1, slot=9, maxRank=2}, -- Pursuit of Justice + [13822] = {tab=1, slot=10, maxRank=2}, -- Eye for an Eye + [13824] = {tab=1, slot=11, maxRank=3}, -- Sanctity of Battle + [13827] = {tab=1, slot=12, maxRank=3}, -- Crusade + [13830] = {tab=1, slot=13, maxRank=3}, -- Two-Handed Weapon Specialization + [13833] = {tab=1, slot=14, maxRank=1}, -- Sanctified Retribution + [13834] = {tab=1, slot=15, maxRank=3}, -- Vengeance + [13837] = {tab=1, slot=16, maxRank=2}, -- Divine Purpose + [13839] = {tab=1, slot=17, maxRank=2}, -- The Art of War + [13841] = {tab=1, slot=18, maxRank=1}, -- Repentance + [13842] = {tab=1, slot=19, maxRank=2}, -- Judgements of the Wise + [13845] = {tab=1, slot=20, maxRank=3}, -- Fanaticism + [13848] = {tab=1, slot=21, maxRank=2}, -- Sanctified Wrath + [13850] = {tab=1, slot=22, maxRank=3}, -- Swift Retribution + [18455] = {tab=1, slot=23, maxRank=1}, -- Crusader Strike + [13854] = {tab=1, slot=24, maxRank=3}, -- Sheath of Light + [13857] = {tab=1, slot=25, maxRank=3}, -- Righteous Vengeance + [13860] = {tab=1, slot=26, maxRank=1}, -- Divine Storm + [13861] = {tab=2, slot=0, maxRank=5}, -- Spiritual Focus + [13866] = {tab=2, slot=1, maxRank=5}, -- Seals of the Pure + [13871] = {tab=2, slot=2, maxRank=3}, -- Healing Light + [13874] = {tab=2, slot=3, maxRank=5}, -- Divine Intellect + [13879] = {tab=2, slot=4, maxRank=2}, -- Unyielding Faith + [13881] = {tab=2, slot=5, maxRank=1}, -- Aura Mastery + [13882] = {tab=2, slot=6, maxRank=5}, -- Illumination + [13887] = {tab=2, slot=7, maxRank=2}, -- Improved Lay on Hands + [13889] = {tab=2, slot=8, maxRank=3}, -- Improved Concentration Aura + [13892] = {tab=2, slot=9, maxRank=2}, -- Improved Blessing of Wisdom + [13894] = {tab=2, slot=10, maxRank=2}, -- Blessed Hands + [13896] = {tab=2, slot=11, maxRank=2}, -- Pure of Heart + [13898] = {tab=2, slot=12, maxRank=1}, -- Divine Favor + [13899] = {tab=2, slot=13, maxRank=3}, -- Sanctified Light + [13902] = {tab=2, slot=14, maxRank=2}, -- Purifying Power + [13904] = {tab=2, slot=15, maxRank=5}, -- Holy Power + [13909] = {tab=2, slot=16, maxRank=3}, -- Light's Grace + [13912] = {tab=2, slot=17, maxRank=1}, -- Holy Shock + [13913] = {tab=2, slot=18, maxRank=3}, -- Blessed Life + [13916] = {tab=2, slot=19, maxRank=3}, -- Sacred Cleansing + [13919] = {tab=2, slot=20, maxRank=3}, -- Holy Guidance + [13924] = {tab=2, slot=21, maxRank=1}, -- Divine Illumination + [13925] = {tab=2, slot=22, maxRank=3}, -- Judgements of the Pure + [13930] = {tab=2, slot=23, maxRank=2}, -- Infusion of Light + [13932] = {tab=2, slot=24, maxRank=2}, -- Enlightened Judgements + [13934] = {tab=2, slot=25, maxRank=1}, -- Beacon of Light + [5960] = {tab=3, slot=0, maxRank=3}, -- Inner Light + [5950] = {tab=3, slot=1, maxRank=3}, -- Improved Consecration + [13935] = {tab=3, slot=2, maxRank=5}, -- Divinity + [13940] = {tab=3, slot=3, maxRank=5}, -- Divine Strength + [13945] = {tab=3, slot=4, maxRank=3}, -- Stoicism + [13948] = {tab=3, slot=5, maxRank=2}, -- Guardian's Favor + [13950] = {tab=3, slot=6, maxRank=5}, -- Anticipation + [13955] = {tab=3, slot=7, maxRank=1}, -- Divine Sacrifice + [13956] = {tab=3, slot=8, maxRank=3}, -- Improved Righteous Fury + [13959] = {tab=3, slot=9, maxRank=5}, -- Toughness + [13964] = {tab=3, slot=10, maxRank=2}, -- Divine Guardian + [13966] = {tab=3, slot=11, maxRank=2}, -- Improved Hammer of Justice + [13968] = {tab=3, slot=12, maxRank=3}, -- Improved Devotion Aura + [13971] = {tab=3, slot=13, maxRank=1}, -- Blessing of Sanctuary + [13972] = {tab=3, slot=14, maxRank=5}, -- Reckoning + [13977] = {tab=3, slot=15, maxRank=2}, -- Sacred Duty + [13979] = {tab=3, slot=16, maxRank=3}, -- One-Handed Weapon Specialization + [13982] = {tab=3, slot=17, maxRank=2}, -- Spiritual Attunement + [13984] = {tab=3, slot=18, maxRank=1}, -- Holy Shield + [13985] = {tab=3, slot=19, maxRank=3}, -- Ardent Defender + [13988] = {tab=3, slot=20, maxRank=2}, -- Redoubt + [13991] = {tab=3, slot=21, maxRank=3}, -- Combat Expertise + [13994] = {tab=3, slot=22, maxRank=2}, -- Touched by the Light + [13997] = {tab=3, slot=23, maxRank=1}, -- Avenger's Shield + [13998] = {tab=3, slot=24, maxRank=2}, -- Guarded by the Light + [14000] = {tab=3, slot=25, maxRank=3}, -- Shield of the Templar + [14003] = {tab=3, slot=26, maxRank=2}, -- Judgements of the Just + [14005] = {tab=3, slot=27, maxRank=1}, -- Hammer of the Righteous + }, + + PRIEST = { + [12678] = {tab=1, slot=0, maxRank=5}, -- Unbreakable Will + [12683] = {tab=1, slot=1, maxRank=5}, -- Twin Disciplines + [12688] = {tab=1, slot=2, maxRank=3}, -- Silent Resolve + [12691] = {tab=1, slot=3, maxRank=3}, -- Improved Inner Fire + [12694] = {tab=1, slot=4, maxRank=2}, -- Improved Power Word: Fortitude + [12696] = {tab=1, slot=5, maxRank=2}, -- Martyrdom + [12698] = {tab=1, slot=6, maxRank=3}, -- Meditation + [12701] = {tab=1, slot=7, maxRank=1}, -- Inner Focus + [12702] = {tab=1, slot=8, maxRank=3}, -- Improved Power Word: Shield + [12705] = {tab=1, slot=9, maxRank=3}, -- Absolution + [12708] = {tab=1, slot=10, maxRank=3}, -- Mental Agility + [12711] = {tab=1, slot=11, maxRank=2}, -- Improved Mana Burn + [12713] = {tab=1, slot=12, maxRank=2}, -- Reflective Shield + [12715] = {tab=1, slot=13, maxRank=5}, -- Mental Strength + [12720] = {tab=1, slot=14, maxRank=1}, -- Soul Warding + [12721] = {tab=1, slot=15, maxRank=2}, -- Focused Power + [12723] = {tab=1, slot=16, maxRank=3}, -- Enlightenment + [12726] = {tab=1, slot=17, maxRank=3}, -- Focused Will + [12729] = {tab=1, slot=18, maxRank=1}, -- Power Infusion + [12730] = {tab=1, slot=19, maxRank=3}, -- Improved Flash Heal + [12733] = {tab=1, slot=20, maxRank=2}, -- Renewed Hope + [12735] = {tab=1, slot=21, maxRank=3}, -- Rapture + [12738] = {tab=1, slot=22, maxRank=2}, -- Aspiration + [12740] = {tab=1, slot=23, maxRank=2}, -- Divine Aegis + [12743] = {tab=1, slot=24, maxRank=1}, -- Pain Suppression + [12744] = {tab=1, slot=25, maxRank=2}, -- Grace + [12746] = {tab=1, slot=26, maxRank=3}, -- Borrowed Time + [12751] = {tab=1, slot=27, maxRank=1}, -- Penance + [12752] = {tab=2, slot=0, maxRank=2}, -- Healing Focus + [12754] = {tab=2, slot=1, maxRank=3}, -- Improved Renew + [12757] = {tab=2, slot=2, maxRank=5}, -- Holy Specialization + [527] = {tab=2, slot=3, maxRank=3}, -- Inspiration + [12762] = {tab=2, slot=4, maxRank=5}, -- Spell Warding + [12767] = {tab=2, slot=5, maxRank=5}, -- Divine Fury + [12772] = {tab=2, slot=6, maxRank=1}, -- Desperate Prayer + [12773] = {tab=2, slot=7, maxRank=3}, -- Blessed Recovery + [12779] = {tab=2, slot=8, maxRank=2}, -- Holy Reach + [12781] = {tab=2, slot=9, maxRank=3}, -- Improved Healing + [12784] = {tab=2, slot=10, maxRank=2}, -- Searing Light + [12786] = {tab=2, slot=11, maxRank=2}, -- Healing Prayers + [12788] = {tab=2, slot=12, maxRank=1}, -- Spirit of Redemption + [12789] = {tab=2, slot=13, maxRank=5}, -- Spiritual Guidance + [12794] = {tab=2, slot=14, maxRank=2}, -- Surge of Light + [12796] = {tab=2, slot=15, maxRank=3}, -- Spiritual Healing + [12797] = {tab=2, slot=16, maxRank=5}, -- Blessed Vengeance + [12801] = {tab=2, slot=17, maxRank=3}, -- Holy Concentration + [12804] = {tab=2, slot=18, maxRank=1}, -- Lightwell + [12805] = {tab=2, slot=19, maxRank=3}, -- Blessed Resilience + [12798] = {tab=2, slot=20, maxRank=5}, -- Radiant Fury + [12808] = {tab=2, slot=21, maxRank=2}, -- Body and Soul + [12810] = {tab=2, slot=22, maxRank=5}, -- Empowered Healing + [12815] = {tab=2, slot=23, maxRank=3}, -- Serendipity + [12818] = {tab=2, slot=24, maxRank=3}, -- Empowered Renew + [12821] = {tab=2, slot=25, maxRank=1}, -- Circle of Healing + [12822] = {tab=2, slot=26, maxRank=3}, -- Test of Faith + [12825] = {tab=2, slot=27, maxRank=3}, -- Divine Providence + [13825] = {tab=2, slot=28, maxRank=3}, -- Epiphany of Light + [12830] = {tab=2, slot=29, maxRank=1}, -- Guardian Spirit + [12831] = {tab=3, slot=0, maxRank=3}, -- Spirit Tap + [12834] = {tab=3, slot=1, maxRank=2}, -- Improved Spirit Tap + [12836] = {tab=3, slot=2, maxRank=5}, -- Darkness + [12841] = {tab=3, slot=3, maxRank=3}, -- Shadow Affinity + [12844] = {tab=3, slot=4, maxRank=2}, -- Improved Shadow Word: Pain + [12846] = {tab=3, slot=5, maxRank=3}, -- Shadow Focus + [12849] = {tab=3, slot=6, maxRank=2}, -- Improved Psychic Scream + [12851] = {tab=3, slot=7, maxRank=5}, -- Improved Mind Blast + [12856] = {tab=3, slot=8, maxRank=1}, -- Mind Flay + [12857] = {tab=3, slot=9, maxRank=2}, -- Veiled Shadows + [12859] = {tab=3, slot=10, maxRank=2}, -- Shadow Reach + [12861] = {tab=3, slot=11, maxRank=3}, -- Shadow Weaving + [12864] = {tab=3, slot=12, maxRank=1}, -- Silence + [12865] = {tab=3, slot=13, maxRank=1}, -- Vampiric Embrace + [12866] = {tab=3, slot=14, maxRank=2}, -- Improved Vampiric Embrace + [12868] = {tab=3, slot=15, maxRank=3}, -- Focused Mind + [12871] = {tab=3, slot=16, maxRank=2}, -- Mind Melt + [12873] = {tab=3, slot=17, maxRank=3}, -- Improved Devouring Plague + [12876] = {tab=3, slot=18, maxRank=1}, -- Shadowform + [12877] = {tab=3, slot=19, maxRank=3}, -- Shadow Power + [12882] = {tab=3, slot=20, maxRank=2}, -- Improved Shadowform + [12884] = {tab=3, slot=21, maxRank=3}, -- Misery + [12887] = {tab=3, slot=22, maxRank=1}, -- Psychic Horror + [12888] = {tab=3, slot=23, maxRank=1}, -- Vampiric Touch + [12889] = {tab=3, slot=24, maxRank=3}, -- Pain and Suffering + [12892] = {tab=3, slot=25, maxRank=3}, -- Twisted Faith + [12897] = {tab=3, slot=26, maxRank=1}, -- Dispersion + }, + + ROGUE = { + [12456] = {tab=1, slot=0, maxRank=3}, -- Improved Gouge + [12459] = {tab=1, slot=1, maxRank=2}, -- Improved Sinister Strike + [12461] = {tab=1, slot=3, maxRank=5}, -- Dual Wield Specialization + [12466] = {tab=1, slot=5, maxRank=2}, -- Improved Slice and Dice + [12468] = {tab=1, slot=6, maxRank=3}, -- Deflection + [12471] = {tab=1, slot=7, maxRank=5}, -- Precision + [12476] = {tab=1, slot=8, maxRank=2}, -- Endurance + [12478] = {tab=1, slot=9, maxRank=1}, -- Riposte + [12479] = {tab=1, slot=10, maxRank=5}, -- Close Quarters Combat + [12484] = {tab=1, slot=11, maxRank=2}, -- Improved Kick + [12486] = {tab=1, slot=12, maxRank=2}, -- Improved Sprint + [12488] = {tab=1, slot=13, maxRank=3}, -- Lightning Reflexes + [12491] = {tab=1, slot=14, maxRank=5}, -- Aggression + [12496] = {tab=1, slot=15, maxRank=5}, -- Mace Specialization + [12501] = {tab=1, slot=16, maxRank=1}, -- Blade Flurry + [12502] = {tab=1, slot=17, maxRank=5}, -- Hack and Slash + [12507] = {tab=1, slot=18, maxRank=2}, -- Weapon Expertise + [12509] = {tab=1, slot=19, maxRank=2}, -- Blade Twisting + [12511] = {tab=1, slot=20, maxRank=3}, -- Vitality + [12514] = {tab=1, slot=21, maxRank=1}, -- Adrenaline Rush + [12515] = {tab=1, slot=22, maxRank=2}, -- Nerves of Steel + [12517] = {tab=1, slot=23, maxRank=2}, -- Throwing Specialization + [12519] = {tab=1, slot=24, maxRank=3}, -- Combat Potency + [12524] = {tab=1, slot=25, maxRank=2}, -- Unfair Advantage + [12526] = {tab=1, slot=26, maxRank=1}, -- Surprise Attacks + [12527] = {tab=1, slot=27, maxRank=2}, -- Savage Combat + [12529] = {tab=1, slot=28, maxRank=3}, -- Prey on the Weak + [12534] = {tab=1, slot=29, maxRank=1}, -- Killing Spree + [12535] = {tab=2, slot=0, maxRank=3}, -- Improved Eviscerate + [12538] = {tab=2, slot=1, maxRank=2}, -- Remorseless Attacks + [12540] = {tab=2, slot=2, maxRank=5}, -- Malice + [12545] = {tab=2, slot=3, maxRank=3}, -- Ruthlessness + [12548] = {tab=2, slot=4, maxRank=2}, -- Blood Spatter + [12550] = {tab=2, slot=5, maxRank=3}, -- Puncturing Wounds + [12553] = {tab=2, slot=6, maxRank=1}, -- Vigor + [12554] = {tab=2, slot=7, maxRank=2}, -- Improved Expose Armor + [12556] = {tab=2, slot=8, maxRank=5}, -- Lethality + [12561] = {tab=2, slot=9, maxRank=3}, -- Vile Poisons + [12564] = {tab=2, slot=10, maxRank=5}, -- Improved Poisons + [12569] = {tab=2, slot=11, maxRank=2}, -- Fleet Footed + [12571] = {tab=2, slot=12, maxRank=1}, -- Cold Blood + [12572] = {tab=2, slot=13, maxRank=3}, -- Improved Kidney Shot + [12575] = {tab=2, slot=14, maxRank=2}, -- Quick Recovery + [12577] = {tab=2, slot=15, maxRank=3}, -- Seal Fate + [12582] = {tab=2, slot=16, maxRank=2}, -- Murder + [12584] = {tab=2, slot=17, maxRank=2}, -- Deadly Brew + [12586] = {tab=2, slot=18, maxRank=1}, -- Overkill + [12587] = {tab=2, slot=19, maxRank=3}, -- Deadened Nerves + [12590] = {tab=2, slot=20, maxRank=3}, -- Focused Attacks + [12593] = {tab=2, slot=21, maxRank=3}, -- Find Weakness + [12596] = {tab=2, slot=22, maxRank=3}, -- Master Poisoner + [12599] = {tab=2, slot=23, maxRank=1}, -- Mutilate + [12600] = {tab=2, slot=24, maxRank=3}, -- Turn the Tables + [12603] = {tab=2, slot=25, maxRank=3}, -- Cut to the Chase + [12608] = {tab=2, slot=26, maxRank=1}, -- Hunger For Blood + [12609] = {tab=3, slot=0, maxRank=5}, -- Relentless Strikes + [12612] = {tab=3, slot=1, maxRank=3}, -- Master of Deception + [12615] = {tab=3, slot=2, maxRank=2}, -- Opportunity + [12617] = {tab=3, slot=3, maxRank=2}, -- Sleight of Hand + [12619] = {tab=3, slot=4, maxRank=2}, -- Dirty Tricks + [12621] = {tab=3, slot=5, maxRank=3}, -- Camouflage + [12624] = {tab=3, slot=6, maxRank=2}, -- Elusiveness + [12626] = {tab=3, slot=7, maxRank=1}, -- Ghostly Strike + [12627] = {tab=3, slot=8, maxRank=3}, -- Serrated Blades + [12630] = {tab=3, slot=9, maxRank=3}, -- Setup + [12633] = {tab=3, slot=10, maxRank=3}, -- Initiative + [12636] = {tab=3, slot=11, maxRank=2}, -- Improved Ambush + [12638] = {tab=3, slot=12, maxRank=2}, -- Heightened Senses + [12640] = {tab=3, slot=13, maxRank=1}, -- Preparation + [12641] = {tab=3, slot=14, maxRank=2}, -- Dirty Deeds + [12643] = {tab=3, slot=15, maxRank=1}, -- Hemorrhage + [12644] = {tab=3, slot=16, maxRank=3}, -- Master of Subtlety + [12647] = {tab=3, slot=17, maxRank=5}, -- Deadliness + [12652] = {tab=3, slot=18, maxRank=3}, -- Enveloping Shadows + [12655] = {tab=3, slot=19, maxRank=1}, -- Premeditation + [12656] = {tab=3, slot=20, maxRank=3}, -- Cheat Death + [12659] = {tab=3, slot=21, maxRank=3}, -- Sinister Calling + [12664] = {tab=3, slot=22, maxRank=2}, -- Waylay + [12666] = {tab=3, slot=23, maxRank=3}, -- Honor Among Thieves + [12670] = {tab=3, slot=24, maxRank=2}, -- Filthy Tricks + [12672] = {tab=3, slot=25, maxRank=3}, -- Slaughter from the Shadows + [12677] = {tab=3, slot=26, maxRank=1}, -- Shadow Dance + }, + + SHAMAN = { + [1148] = {tab=1, slot=0, maxRank=3}, -- Raze + [557] = {tab=1, slot=1, maxRank=5}, -- Convection + [12898] = {tab=1, slot=2, maxRank=5}, -- Convection + [556] = {tab=1, slot=3, maxRank=5}, -- Concussion + [12903] = {tab=1, slot=5, maxRank=5}, -- Concussion + [12908] = {tab=1, slot=6, maxRank=3}, -- Call of Flame + [12911] = {tab=1, slot=7, maxRank=3}, -- Elemental Warding + [12914] = {tab=1, slot=8, maxRank=3}, -- Elemental Devastation + [12917] = {tab=1, slot=9, maxRank=5}, -- Reverberation + [12922] = {tab=1, slot=10, maxRank=1}, -- Elemental Focus + [12923] = {tab=1, slot=11, maxRank=3}, -- Elemental Fury + [12928] = {tab=1, slot=12, maxRank=2}, -- Improved Fire Nova + [12930] = {tab=1, slot=13, maxRank=3}, -- Eye of the Storm + [12933] = {tab=1, slot=14, maxRank=2}, -- Elemental Reach + [12935] = {tab=1, slot=15, maxRank=1}, -- Call of Thunder + [12936] = {tab=1, slot=16, maxRank=3}, -- Unrelenting Storm + [12939] = {tab=1, slot=17, maxRank=3}, -- Elemental Precision + [12942] = {tab=1, slot=18, maxRank=5}, -- Lightning Mastery + [12947] = {tab=1, slot=19, maxRank=1}, -- Elemental Mastery + [12948] = {tab=1, slot=20, maxRank=3}, -- Storm, Earth and Fire + [12951] = {tab=1, slot=21, maxRank=2}, -- Booming Echoes + [12953] = {tab=1, slot=22, maxRank=2}, -- Elemental Oath + [12955] = {tab=1, slot=23, maxRank=3}, -- Lightning Overload + [12958] = {tab=1, slot=24, maxRank=3}, -- Astral Shift + [12961] = {tab=1, slot=25, maxRank=1}, -- Totem of Wrath + [12962] = {tab=1, slot=26, maxRank=3}, -- Lava Flows + [12965] = {tab=1, slot=27, maxRank=3}, -- Shamanism + [12968] = {tab=1, slot=28, maxRank=1}, -- Thunderstorm + [566] = {tab=2, slot=0, maxRank=3}, -- Improved Healing Wave + [12969] = {tab=2, slot=1, maxRank=5}, -- Improved Healing Wave + [575] = {tab=2, slot=2, maxRank=5}, -- Totemic Focus + [12974] = {tab=2, slot=3, maxRank=5}, -- Totemic Focus + [12979] = {tab=2, slot=4, maxRank=2}, -- Improved Reincarnation + [12981] = {tab=2, slot=5, maxRank=3}, -- Healing Grace + [12984] = {tab=2, slot=6, maxRank=5}, -- Tidal Focus + [12989] = {tab=2, slot=7, maxRank=3}, -- Improved Water Shield + [12992] = {tab=2, slot=8, maxRank=3}, -- Healing Focus + [12995] = {tab=2, slot=9, maxRank=1}, -- Tidal Force + [12996] = {tab=2, slot=10, maxRank=3}, -- Ancestral Healing + [12999] = {tab=2, slot=11, maxRank=3}, -- Restorative Totems + [13002] = {tab=2, slot=12, maxRank=5}, -- Tidal Mastery + [13007] = {tab=2, slot=13, maxRank=3}, -- Healing Way + [13010] = {tab=2, slot=14, maxRank=1}, -- Nature's Swiftness + [13011] = {tab=2, slot=15, maxRank=3}, -- Focused Mind + [13014] = {tab=2, slot=16, maxRank=3}, -- Purification + [13019] = {tab=2, slot=17, maxRank=5}, -- Nature's Guardian + [13024] = {tab=2, slot=18, maxRank=1}, -- Mana Tide Totem + [13025] = {tab=2, slot=19, maxRank=1}, -- Cleanse Spirit + [13026] = {tab=2, slot=20, maxRank=2}, -- Blessing of the Eternals + [13028] = {tab=2, slot=21, maxRank=2}, -- Improved Chain Heal + [13030] = {tab=2, slot=22, maxRank=2}, -- Nature's Blessing + [13033] = {tab=2, slot=23, maxRank=3}, -- Ancestral Awakening + [13036] = {tab=2, slot=24, maxRank=1}, -- Earth Shield + [13037] = {tab=2, slot=25, maxRank=2}, -- Improved Earth Shield + [13039] = {tab=2, slot=26, maxRank=3}, -- Tidal Waves + [13044] = {tab=2, slot=27, maxRank=1}, -- Riptide + [581] = {tab=3, slot=0, maxRank=3}, -- Enhancing Totems + [13045] = {tab=3, slot=1, maxRank=3}, -- Enhancing Totems + [1062] = {tab=3, slot=2, maxRank=2}, -- Earth's Grasp + [13048] = {tab=3, slot=3, maxRank=2}, -- Earth's Grasp + [584] = {tab=3, slot=4, maxRank=3}, -- Ancestral Knowledge + [13050] = {tab=3, slot=5, maxRank=5}, -- Ancestral Knowledge + [13400] = {tab=3, slot=6, maxRank=3}, -- Totemic Bond + [13055] = {tab=3, slot=7, maxRank=2}, -- Guardian Totems + [13057] = {tab=3, slot=8, maxRank=5}, -- Thundering Strikes + [13062] = {tab=3, slot=9, maxRank=2}, -- Improved Ghost Wolf + [13064] = {tab=3, slot=10, maxRank=3}, -- Improved Shields + [13067] = {tab=3, slot=11, maxRank=3}, -- Elemental Weapons + [13070] = {tab=3, slot=13, maxRank=1}, -- Shamanistic Focus + [13071] = {tab=3, slot=14, maxRank=3}, -- Anticipation + [13074] = {tab=3, slot=15, maxRank=3}, -- Flurry + [13079] = {tab=3, slot=16, maxRank=5}, -- Toughness + [13084] = {tab=3, slot=17, maxRank=2}, -- Improved Windfury Totem + [13086] = {tab=3, slot=18, maxRank=1}, -- Spirit Weapons + [13087] = {tab=3, slot=19, maxRank=3}, -- Mental Dexterity + [13401] = {tab=3, slot=20, maxRank=3}, -- Earthen Attunement + [13090] = {tab=3, slot=21, maxRank=3}, -- Unleashed Rage + [13093] = {tab=3, slot=22, maxRank=3}, -- Weapon Mastery + [13096] = {tab=3, slot=23, maxRank=2}, -- Frozen Power + [13098] = {tab=3, slot=24, maxRank=3}, -- Dual Wield Specialization + [13102] = {tab=3, slot=26, maxRank=1}, -- Stormstrike + [13399] = {tab=3, slot=27, maxRank=3}, -- Shield Specialization + [13103] = {tab=3, slot=28, maxRank=3}, -- Static Shock + [13701] = {tab=3, slot=29, maxRank=3}, -- Spirit Guard + [13107] = {tab=3, slot=30, maxRank=2}, -- Improved Stormstrike + [13109] = {tab=3, slot=31, maxRank=3}, -- Mental Quickness + [13112] = {tab=3, slot=32, maxRank=1}, -- Shamanistic Rage + [13113] = {tab=3, slot=33, maxRank=2}, -- Earthen Power + [13115] = {tab=3, slot=34, maxRank=3}, -- Maelstrom Weapon + [13120] = {tab=3, slot=35, maxRank=1}, -- Feral Spirit + }, + + WARLOCK = { + [640] = {tab=1, slot=0, maxRank=5}, -- Improved Shadow Bolt + [13354] = {tab=1, slot=1, maxRank=5}, -- Improved Shadow Bolt + [639] = {tab=1, slot=2, maxRank=3}, -- Bane + [13359] = {tab=1, slot=3, maxRank=5}, -- Bane + [13364] = {tab=1, slot=4, maxRank=2}, -- Aftermath + [13366] = {tab=1, slot=5, maxRank=3}, -- Molten Skin + [13369] = {tab=1, slot=6, maxRank=3}, -- Cataclysm + [13372] = {tab=1, slot=7, maxRank=2}, -- Demonic Power + [13374] = {tab=1, slot=8, maxRank=1}, -- Shadowburn + [13375] = {tab=1, slot=9, maxRank=5}, -- Ruin + [13380] = {tab=1, slot=10, maxRank=2}, -- Intensity + [13382] = {tab=1, slot=11, maxRank=2}, -- Destructive Reach + [13384] = {tab=1, slot=12, maxRank=3}, -- Improved Searing Pain + [13387] = {tab=1, slot=13, maxRank=3}, -- Backlash + [13390] = {tab=1, slot=14, maxRank=3}, -- Improved Immolate + [13393] = {tab=1, slot=15, maxRank=1}, -- Devastation + [13394] = {tab=1, slot=16, maxRank=3}, -- Nether Protection + [13397] = {tab=1, slot=17, maxRank=5}, -- Emberstorm + [13402] = {tab=1, slot=18, maxRank=1}, -- Conflagrate + [13403] = {tab=1, slot=19, maxRank=3}, -- Soul Leech + [13406] = {tab=1, slot=20, maxRank=3}, -- Pyroclasm + [13409] = {tab=1, slot=21, maxRank=3}, -- Shadow and Flame + [13414] = {tab=1, slot=22, maxRank=2}, -- Improved Soul Leech + [13416] = {tab=1, slot=23, maxRank=3}, -- Backdraft + [13419] = {tab=1, slot=24, maxRank=1}, -- Shadowfury + [13420] = {tab=1, slot=25, maxRank=3}, -- Empowered Imp + [13423] = {tab=1, slot=26, maxRank=3}, -- Fire and Brimstone + [13428] = {tab=1, slot=27, maxRank=1}, -- Chaos Bolt + [691] = {tab=2, slot=0, maxRank=3}, -- Improved Curse of Agony + [13429] = {tab=2, slot=1, maxRank=2}, -- Improved Curse of Agony + [657] = {tab=2, slot=2, maxRank=3}, -- Death's Grasp + [13431] = {tab=2, slot=3, maxRank=3}, -- Suppression + [655] = {tab=2, slot=4, maxRank=3}, -- Improved Corruption + [13434] = {tab=2, slot=5, maxRank=5}, -- Improved Corruption + [13439] = {tab=2, slot=6, maxRank=2}, -- Improved Curse of Weakness + [13441] = {tab=2, slot=7, maxRank=2}, -- Improved Drain Soul + [13443] = {tab=2, slot=8, maxRank=2}, -- Improved Life Tap + [13445] = {tab=2, slot=9, maxRank=2}, -- Soul Siphon + [13447] = {tab=2, slot=10, maxRank=2}, -- Improved Fear + [13449] = {tab=2, slot=11, maxRank=3}, -- Fel Concentration + [13452] = {tab=2, slot=12, maxRank=1}, -- Amplify Curse + [13453] = {tab=2, slot=13, maxRank=2}, -- Grim Reach + [13455] = {tab=2, slot=14, maxRank=2}, -- Nightfall + [13457] = {tab=2, slot=15, maxRank=3}, -- Empowered Corruption + [13460] = {tab=2, slot=16, maxRank=5}, -- Shadow Embrace + [13465] = {tab=2, slot=17, maxRank=1}, -- Siphon Life + [13466] = {tab=2, slot=18, maxRank=1}, -- Curse of Exhaustion + [13467] = {tab=2, slot=19, maxRank=2}, -- Improved Felhunter + [13469] = {tab=2, slot=20, maxRank=5}, -- Shadow Mastery + [13474] = {tab=2, slot=21, maxRank=3}, -- Eradication + [13477] = {tab=2, slot=22, maxRank=3}, -- Contagion + [13482] = {tab=2, slot=23, maxRank=1}, -- Dark Pact + [13483] = {tab=2, slot=24, maxRank=2}, -- Improved Howl of Terror + [13485] = {tab=2, slot=25, maxRank=3}, -- Malediction + [13488] = {tab=2, slot=26, maxRank=3}, -- Death's Embrace + [13491] = {tab=2, slot=27, maxRank=1}, -- Unstable Affliction + [13492] = {tab=2, slot=28, maxRank=1}, -- Pandemic + [13493] = {tab=2, slot=29, maxRank=3}, -- Everlasting Affliction + [13498] = {tab=2, slot=30, maxRank=1}, -- Haunt + [675] = {tab=3, slot=0, maxRank=2}, -- Improved Healthstone + [13499] = {tab=3, slot=1, maxRank=2}, -- Improved Healthstone + [676] = {tab=3, slot=2, maxRank=3}, -- Improved Imp + [13501] = {tab=3, slot=3, maxRank=3}, -- Improved Imp + [677] = {tab=3, slot=4, maxRank=3}, -- Demonic Embrace + [13504] = {tab=3, slot=5, maxRank=3}, -- Demonic Embrace + [981] = {tab=3, slot=6, maxRank=2}, -- Fel Synergy + [13507] = {tab=3, slot=8, maxRank=2}, -- Fel Synergy + [13509] = {tab=3, slot=10, maxRank=2}, -- Improved Health Funnel + [13511] = {tab=3, slot=11, maxRank=3}, -- Demonic Brutality + [13514] = {tab=3, slot=12, maxRank=3}, -- Fel Vitality + [13517] = {tab=3, slot=13, maxRank=3}, -- Improved Succubus + [13520] = {tab=3, slot=14, maxRank=1}, -- Soul Link + [13521] = {tab=3, slot=15, maxRank=1}, -- Fel Domination + [13522] = {tab=3, slot=16, maxRank=3}, -- Demonic Aegis + [13525] = {tab=3, slot=17, maxRank=5}, -- Unholy Power + [13530] = {tab=3, slot=18, maxRank=2}, -- Master Summoner + [13532] = {tab=3, slot=19, maxRank=1}, -- Mana Feed + [13533] = {tab=3, slot=20, maxRank=2}, -- Master Conjuror + [13535] = {tab=3, slot=21, maxRank=5}, -- Master Demonologist + [13540] = {tab=3, slot=22, maxRank=3}, -- Molten Core + [13543] = {tab=3, slot=23, maxRank=3}, -- Demonic Resilience + [13546] = {tab=3, slot=24, maxRank=1}, -- Demonic Empowerment + [13547] = {tab=3, slot=25, maxRank=3}, -- Demonic Knowledge + [13550] = {tab=3, slot=26, maxRank=3}, -- Demonic Tactics + [13555] = {tab=3, slot=27, maxRank=2}, -- Decimation + [13557] = {tab=3, slot=28, maxRank=3}, -- Improved Demonic Tactics + [13560] = {tab=3, slot=29, maxRank=1}, -- Summon Felguard + [13561] = {tab=3, slot=30, maxRank=3}, -- Nemesis + [13564] = {tab=3, slot=31, maxRank=3}, -- Demonic Pact + [13569] = {tab=3, slot=32, maxRank=1}, -- Metamorphosis + }, + + WARRIOR = { + [438] = {tab=1, slot=0, maxRank=3}, -- Improved Heroic Strike + [12228] = {tab=1, slot=1, maxRank=3}, -- Improved Heroic Strike + [444] = {tab=1, slot=2, maxRank=3}, -- Deflection + [12231] = {tab=1, slot=3, maxRank=5}, -- Deflection + [441] = {tab=1, slot=4, maxRank=2}, -- Improved Rend + [12236] = {tab=1, slot=5, maxRank=2}, -- Improved Rend + [12238] = {tab=1, slot=6, maxRank=2}, -- Improved Charge + [12240] = {tab=1, slot=7, maxRank=3}, -- Iron Will + [12243] = {tab=1, slot=8, maxRank=3}, -- Tactical Mastery + [12246] = {tab=1, slot=9, maxRank=2}, -- Improved Overpower + [12248] = {tab=1, slot=10, maxRank=1}, -- Anger Management + [12249] = {tab=1, slot=11, maxRank=2}, -- Impale + [12251] = {tab=1, slot=12, maxRank=3}, -- Deep Wounds + [12254] = {tab=1, slot=13, maxRank=3}, -- Two-Handed Weapon Specialization + [12257] = {tab=1, slot=14, maxRank=3}, -- Taste for Blood + [12260] = {tab=1, slot=15, maxRank=5}, -- Poleaxe Specialization + [12265] = {tab=1, slot=16, maxRank=1}, -- Sweeping Strikes + [12266] = {tab=1, slot=17, maxRank=5}, -- Mace Specialization + [12271] = {tab=1, slot=18, maxRank=5}, -- Sword Specialization + [12276] = {tab=1, slot=19, maxRank=2}, -- Weapon Mastery + [12278] = {tab=1, slot=20, maxRank=3}, -- Improved Hamstring + [12281] = {tab=1, slot=21, maxRank=2}, -- Trauma + [12283] = {tab=1, slot=22, maxRank=2}, -- Second Wind + [12285] = {tab=1, slot=23, maxRank=1}, -- Mortal Strike + [12286] = {tab=1, slot=24, maxRank=2}, -- Strength of Arms + [12288] = {tab=1, slot=25, maxRank=2}, -- Improved Slam + [12290] = {tab=1, slot=26, maxRank=1}, -- Juggernaut + [12291] = {tab=1, slot=27, maxRank=2}, -- Improved Mortal Strike + [12294] = {tab=1, slot=28, maxRank=2}, -- Unrelenting Assault + [12296] = {tab=1, slot=29, maxRank=3}, -- Sudden Death + [12299] = {tab=1, slot=30, maxRank=1}, -- Endless Rage + [12300] = {tab=1, slot=31, maxRank=2}, -- Blood Frenzy + [12302] = {tab=1, slot=32, maxRank=3}, -- Wrecking Crew + [12307] = {tab=1, slot=33, maxRank=1}, -- Bladestorm + [455] = {tab=2, slot=0, maxRank=2}, -- Improved Bloodrage + [12308] = {tab=2, slot=1, maxRank=2}, -- Improved Bloodrage + [766] = {tab=2, slot=2, maxRank=3}, -- Shield Specialization + [12310] = {tab=2, slot=3, maxRank=5}, -- Shield Specialization + [454] = {tab=2, slot=4, maxRank=3}, -- Improved Thunder Clap + [12315] = {tab=2, slot=5, maxRank=3}, -- Improved Thunder Clap + [12318] = {tab=2, slot=6, maxRank=3}, -- Incite + [12321] = {tab=2, slot=7, maxRank=5}, -- Anticipation + [12326] = {tab=2, slot=8, maxRank=1}, -- Last Stand + [12327] = {tab=2, slot=9, maxRank=2}, -- Improved Revenge + [12329] = {tab=2, slot=10, maxRank=2}, -- Shield Mastery + [12331] = {tab=2, slot=11, maxRank=3}, -- Toughness + [12336] = {tab=2, slot=12, maxRank=2}, -- Improved Spell Reflection + [12338] = {tab=2, slot=13, maxRank=2}, -- Improved Disarm + [12340] = {tab=2, slot=14, maxRank=3}, -- Puncture + [12343] = {tab=2, slot=15, maxRank=2}, -- Improved Disciplines + [12345] = {tab=2, slot=16, maxRank=1}, -- Concussion Blow + [12346] = {tab=2, slot=17, maxRank=2}, -- Gag Order + [12348] = {tab=2, slot=18, maxRank=5}, -- One-Handed Weapon Specialization + [12353] = {tab=2, slot=19, maxRank=2}, -- Improved Defensive Stance + [12355] = {tab=2, slot=20, maxRank=1}, -- Vigilance + [12356] = {tab=2, slot=21, maxRank=3}, -- Focused Rage + [12359] = {tab=2, slot=22, maxRank=3}, -- Vitality + [12362] = {tab=2, slot=23, maxRank=2}, -- Safeguard + [12364] = {tab=2, slot=24, maxRank=1}, -- Warbringer + [12366] = {tab=2, slot=25, maxRank=3}, -- Critical Block + [12369] = {tab=2, slot=26, maxRank=3}, -- Sword and Board + [12372] = {tab=2, slot=27, maxRank=2}, -- Damage Shield + [12374] = {tab=2, slot=28, maxRank=1}, -- Shockwave + [12375] = {tab=3, slot=0, maxRank=3}, -- Armored to the Teeth + [1123] = {tab=3, slot=1, maxRank=3}, -- Armored to the Teeth + [469] = {tab=3, slot=2, maxRank=2}, -- Booming Voice + [12378] = {tab=3, slot=3, maxRank=2}, -- Booming Voice + [468] = {tab=3, slot=4, maxRank=5}, -- Cruelty + [28968] = {tab=3, slot=5, maxRank=5}, -- Dual Wield Mastery + [12380] = {tab=3, slot=6, maxRank=5}, -- Cruelty + [12385] = {tab=3, slot=7, maxRank=5}, -- Improved Demoralizing Shout + [12390] = {tab=3, slot=8, maxRank=5}, -- Unbridled Wrath + [12395] = {tab=3, slot=9, maxRank=3}, -- Improved Cleave + [12398] = {tab=3, slot=10, maxRank=1}, -- Piercing Howl + [12399] = {tab=3, slot=11, maxRank=3}, -- Blood Craze + [12402] = {tab=3, slot=12, maxRank=5}, -- Commanding Presence + [12407] = {tab=3, slot=13, maxRank=5}, -- Dual Wield Specialization + [12412] = {tab=3, slot=14, maxRank=2}, -- Improved Execute + [12414] = {tab=3, slot=15, maxRank=5}, -- Enrage + [12419] = {tab=3, slot=16, maxRank=3}, -- Precision + [12422] = {tab=3, slot=17, maxRank=1}, -- Death Wish + [12423] = {tab=3, slot=18, maxRank=2}, -- Improved Intercept + [12425] = {tab=3, slot=19, maxRank=2}, -- Improved Berserker Rage + [12427] = {tab=3, slot=20, maxRank=3}, -- Flurry + [12432] = {tab=3, slot=21, maxRank=3}, -- Intensify Rage + [12435] = {tab=3, slot=22, maxRank=1}, -- Bloodthirst + [12436] = {tab=3, slot=23, maxRank=2}, -- Improved Whirlwind + [12438] = {tab=3, slot=24, maxRank=2}, -- Furious Attacks + [12440] = {tab=3, slot=25, maxRank=5}, -- Improved Berserker Stance + [12445] = {tab=3, slot=26, maxRank=1}, -- Heroic Fury + [12446] = {tab=3, slot=27, maxRank=1}, -- Rampage + [12447] = {tab=3, slot=28, maxRank=3}, -- Bloodsurge + [12450] = {tab=3, slot=29, maxRank=3}, -- Unending Fury + [12455] = {tab=3, slot=30, maxRank=1}, -- Titan's Grip + }, + +} + + + +local BASE36_CHARS = "0123456789abcdefghijklmnopqrstuvwxyz" + +local function encodeRank(rank) + if rank < 10 then + return tostring(rank) + end + if rank <= 35 then + return BASE36_CHARS:sub(rank + 1, rank + 1) + end + return "0" +end + +local function toBase36(num) + if num == 0 then return "0" end + local result = "" + while num > 0 do + local remainder = num % 36 + result = BASE36_CHARS:sub(remainder + 1, remainder + 1) .. result + num = math.floor(num / 36) + end + return result +end + +-- Convert list of Ascension talent IDs to calculator format +-- Returns: "class.tree1.tree2.tree3" format +function AE.ConvertAscensionTalentsToCalcFormat(ascensionTalentIds, class) + class = (class or ""):upper() + + -- Get the talent map for this class + local talentMap = CLASS_TALENT_MAPS[class] + if not talentMap then + return nil, "Class " .. class .. " not supported" + end + + -- Build talent data by tree + local trees = {{}, {}, {}} -- 3 trees + + for _, ascId in ipairs(ascensionTalentIds) do + local mapping = talentMap[ascId] + if mapping then + local tab = mapping.tab + local slot = mapping.slot + local maxRank = mapping.maxRank + + -- Store talent in the appropriate tree + table.insert(trees[tab], { + slot = slot, + rank = maxRank -- Assume max rank (we don't have rank info from GetKnownTalentEntries) + }) + end + end + + -- Sort each tree by slot + for _, tree in ipairs(trees) do + table.sort(tree, function(a, b) return a.slot < b.slot end) + end + + -- Encode each tree to base36 format + local treeParts = {} + for _, tree in ipairs(trees) do + local pairs = {} + for _, talent in ipairs(tree) do + local idxStr = toBase36(talent.slot) + local rankStr = encodeRank(talent.rank) + table.insert(pairs, idxStr .. rankStr) + end + table.insert(treeParts, table.concat(pairs, "_")) + end + + -- Build final format: class.tree0.tree1.tree2 + return class:lower() .. "." .. table.concat(treeParts, ".") +end + +-- Mark module as loaded +AE._loadedAscensionTalentMapper = true