diff --git a/AscensionExporter/AscensionExporter.toc b/AscensionExporter/AscensionExporter.toc
index ae95a85..13300b2 100644
--- a/AscensionExporter/AscensionExporter.toc
+++ b/AscensionExporter/AscensionExporter.toc
@@ -5,11 +5,9 @@
## Version: 0.1.0
## SavedVariables: AscensionExporterSaved, AscensionExporterConfig
-Core.lua
Util\Json.lua
-Util\TalentEncoder.lua
-Util\AscensionTalentMapper.lua
-UI\ExportFrame.lua
Collectors\Talents.lua
Collectors\Gear.lua
Collectors\Enchants.lua
+UI\ExportFrame.lua
+Core.lua
diff --git a/AscensionExporter/Core.lua b/AscensionExporter/Core.lua
index f116457..feacb14 100644
--- a/AscensionExporter/Core.lua
+++ b/AscensionExporter/Core.lua
@@ -337,84 +337,8 @@ function AE:GenerateMarkdownEnchants()
return table.concat(lines, "\n")
end
--- Markdown talents export generator
-function AE:GenerateMarkdownTalents()
- local talents = self.CollectTalents and self.CollectTalents() or {}
- local _, class = UnitClass("player")
-
- local lines = {}
- table.insert(lines, "## Talents\n")
-
- -- 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")
-
- -- Debug output
- table.insert(lines, string.format("*Debug: Class=%s, TalentIDs=%d*\n", tostring(class), #ascensionIds))
- table.insert(lines, string.format("*Debug: Mapper loaded=%s, Function type=%s*\n",
- tostring(self._loadedAscensionTalentMapper or false),
- tostring(type(self.ConvertAscensionTalentsToCalcFormat))))
-
- if not self.ConvertAscensionTalentsToCalcFormat then
- table.insert(lines, "*Error: ConvertAscensionTalentsToCalcFormat function not available.*\n")
- return table.concat(lines, "\n")
- end
-
- local buildString, err = self.ConvertAscensionTalentsToCalcFormat(ascensionIds, class)
-
- if err then
- table.insert(lines, string.format("*Conversion error: %s*\n", tostring(err)))
- end
-
- 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 (no build string returned).*\n")
- return table.concat(lines, "\n")
- end
- end
-
- -- Fallback: show build string if talent list not available
- if talents.buildString and talents.buildString ~= "" then
- table.insert(lines, "*Talent data available but could not be parsed.*\n")
- return table.concat(lines, "\n")
- end
-
- -- Fallback: check for old-style selected talents
- local count = #(talents.selected or {})
- if count == 0 then
- table.insert(lines, "*No talents selected. Make sure you have spent talent points on your character.*\n")
- return table.concat(lines, "\n")
- end
-
- -- Generate the talent calc URL (old format)
- local url = self.GenerateTalentCalcURL and self.GenerateTalentCalcURL(talents, class)
- if url then
- table.insert(lines, string.format("[View in Talent Calculator](%s)\n", url))
- end
-
- -- Optional: embed iframe for Wiki.js
- local build = self.EncodeTalentsToURL and self.EncodeTalentsToURL(talents, class)
- if build then
- table.insert(lines, string.format('\n', build))
- end
-
- return table.concat(lines, "\n")
-end
+-- Markdown talents export generator - REMOVED
+-- Talent export is not supported due to technical limitations
-- Slash command handling
SLASH_ASCX1 = "/ascx"
@@ -427,7 +351,7 @@ SlashCmdList["ASCX"] = function(msg)
-- avoid referencing buttons that won't be present in the fallback window.
local hasButtons = type(_G.AscensionExporter_ShowExportFrame) == "function"
local prefix = hasButtons and "Use the buttons above or type:" or "Type one of the commands:"
- local help = prefix .. "\n/ascx export all|talents|gear|enchants|mdgear|mdtalents\n/ascx sv on|off (SavedVariables is currently " .. (AscensionExporterConfig.enableSavedVariables and "ON" or "OFF") .. ")\n/ascx debug (show collector status)\n"
+ local help = prefix .. "\n/ascx export all|talents|gear|enchants|mdgear|mdenchants\n/ascx sv on|off (SavedVariables is currently " .. (AscensionExporterConfig.enableSavedVariables and "ON" or "OFF") .. ")\n/ascx debug (show collector status)\n"
AE:ShowExport(help, "Ascension Export - Tools & Help")
return
end
@@ -438,9 +362,6 @@ SlashCmdList["ASCX"] = function(msg)
if rest == "mdgear" or rest == "md" then
local md = AE:GenerateMarkdownGear()
AE:ShowExport(md, "Ascension Export - Markdown Gear - Copy All (Ctrl+C)")
- elseif rest == "mdtalents" then
- local md = AE:GenerateMarkdownTalents()
- AE:ShowExport(md, "Ascension Export - Markdown Talents - Copy All (Ctrl+C)")
elseif rest == "all" or rest == "talents" or rest == "gear" or rest == "enchants" then
AE:Export(rest)
else
diff --git a/AscensionExporter/UI/ExportFrame.lua b/AscensionExporter/UI/ExportFrame.lua
index bed3f3e..a8c3976 100644
--- a/AscensionExporter/UI/ExportFrame.lua
+++ b/AscensionExporter/UI/ExportFrame.lua
@@ -66,22 +66,10 @@ local function CreateOrGetFrame()
end
end)
- -- Second row for additional buttons
- local x2 = 0
- makeBtn("MD Talents", x2, function()
- if AscensionExporter and AscensionExporter.GenerateMarkdownTalents then
- local md = AscensionExporter:GenerateMarkdownTalents() or ""
- if AscensionExporter.ShowExport then
- AscensionExporter:ShowExport(md, "Ascension Export - Markdown Talents - Copy All (Ctrl+C)")
- else
- AscensionExporter_ShowExportFrame(md, "Ascension Export - Markdown Talents - Copy All (Ctrl+C)")
- end
- end
- end):SetPoint("TOPLEFT", 16 + x2, -62)
-- ScrollFrame + EditBox
local scrollFrame = CreateFrame("ScrollFrame", "AscensionExporterScrollFrame", frame, "UIPanelScrollFrameTemplate")
- scrollFrame:SetPoint("TOPLEFT", 16, -90)
+ scrollFrame:SetPoint("TOPLEFT", 16, -64)
scrollFrame:SetPoint("BOTTOMRIGHT", -32, 16)
local editBox = CreateFrame("EditBox", "AscensionExporterEditBox", scrollFrame)
diff --git a/AscensionExporter/Util/AscensionTalentMapper.lua b/AscensionExporter/Util/AscensionTalentMapper.lua
deleted file mode 100644
index aec6654..0000000
--- a/AscensionExporter/Util/AscensionTalentMapper.lua
+++ /dev/null
@@ -1,892 +0,0 @@
--- 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
diff --git a/AscensionExporter/Util/TalentEncoder.lua b/AscensionExporter/Util/TalentEncoder.lua
deleted file mode 100644
index 3883636..0000000
--- a/AscensionExporter/Util/TalentEncoder.lua
+++ /dev/null
@@ -1,93 +0,0 @@
--- AscensionExporter - Talent URL Encoder
--- Encodes talents into URL format for https://exil.es/en/wow/talent-calc?build=...
-
-AscensionExporter = _G.AscensionExporter or {}
-_G.AscensionExporter = AscensionExporter
-local AE = AscensionExporter
-
-local BASE36_CHARS = "0123456789abcdefghijklmnopqrstuvwxyz"
-
-local function encodeRank(rank)
- if rank < 10 then
- return tostring(rank)
- end
- -- For ranks >= 10, use base36 (a=10, b=11, etc)
- 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
-
--- Encode talents to URL format
--- Format: `${class}.${tree0}.${tree1}.${tree2}`
--- Each tree is encoded as "index_rank" pairs separated by underscores
--- Example: "0_3_b_5" means slot 0 has rank 3, slot 11 (b in base36) has rank 5
-function AE.EncodeTalentsToURL(talentsData, className)
- if not talentsData or not className then
- return nil
- end
-
- -- Normalize class name to lowercase
- className = className:lower()
-
- -- Build a structure: 3 talent trees with slots
- -- Each WoW class has 3 talent trees
- local trees = {{}, {}, {}}
-
- -- Group talents by their tabIndex (1-based in Lua, but we want 0-based for array)
- for _, t in ipairs(talentsData.selected or {}) do
- local tabIndex = t.tabIndex or 1
- local talentIndex = (t.talentIndex or 1) - 1 -- Convert to 0-based index
- local rank = t.rank or 0
-
- if rank > 0 and tabIndex >= 1 and tabIndex <= 3 then
- table.insert(trees[tabIndex], {
- index = talentIndex,
- rank = rank
- })
- end
- end
-
- -- Sort each tree by index for consistent encoding
- for _, tree in ipairs(trees) do
- table.sort(tree, function(a, b) return a.index < b.index end)
- end
-
- -- Encode each tree
- local treeParts = {}
- for _, tree in ipairs(trees) do
- local pairs = {}
- for _, talent in ipairs(tree) do
- local idxStr = toBase36(talent.index)
- local rankStr = encodeRank(talent.rank)
- table.insert(pairs, idxStr .. rankStr)
- end
- table.insert(treeParts, table.concat(pairs, "_"))
- end
-
- -- Build final URL format: class.tree0.tree1.tree2
- return className .. "." .. table.concat(treeParts, ".")
-end
-
--- Generate full talent calc URL
-function AE.GenerateTalentCalcURL(talentsData, className)
- local build = AE.EncodeTalentsToURL(talentsData, className)
- if not build then
- return nil
- end
- return "https://exil.es/en/wow/talent-calc?build=" .. build
-end
-
--- Mark module as loaded
-AE._loadedTalentEncoder = true