local _, private = ... DBMExtraGlobal = {} local isRetail = WOW_PROJECT_ID == (WOW_PROJECT_MAINLINE or 1) --[[local specFlags ={ ["Tank"] = true, ["Dps"] = true, ["Healer"] = true, ["Melee"] = true,--ANY melee, including tanks or healers that are 100% excempt from healer/ranged mechanics (like mistweaver monks) ["MeleeDps"] = true, ["Physical"] = true, ["Ranged"] = true,--ANY ranged, healer and dps included ["RangedDps"] = true,--Only ranged dps ["ManaUser"] = true,--Affected by things like mana drains, or mana detonation, etc ["SpellCaster"] = true,--Has channeled casts, can be interrupted/spell locked by roars, etc, include healers. Use CasterDps if dealing with reflect ["CasterDps"] = true,--Ranged dps that uses spells, relevant for spell reflect type abilities that only reflect spells but not ranged physical such as hunters ["RaidCooldown"] = true, ["RemovePoison"] = true,--from ally ["RemoveDisease"] = true,--from ally ["RemoveCurse"] = true,--from ally ["RemoveMagic"] = true,--from ally ["RemoveEnrage"] = true,--Can remove enemy enrage. returned in 8.x+! ["MagicDispeller"] = true,--from ENEMY, not debuffs on players. use "Healer" or "RemoveMagic" for ally magic dispels. ALL healers can do that on retail, and warlock Imps ["ImmunityDispeller"] = true,--Priest mass dispel or Warrior Shattering Throw (shadowlands) ["HasInterrupt"] = true,--Has an interrupt that is 24 seconds or less CD that is BASELINE (not a talent) ["HasImmunity"] = true,--Has an immunity that can prevent or remove a spell effect (not just one that reduces damage like turtle or dispursion) }]] local specRoleTable function DBMExtraGlobal:rebuildSpecTable() -- Retail if isRetail then specRoleTable = { [62] = { --Arcane Mage ["Dps"] = true, ["Ranged"] = true, ["RangedDps"] = true, ["ManaUser"] = true, ["SpellCaster"] = true, ["CasterDps"] = true, ["MagicDispeller"] = true, ["HasInterrupt"] = true, ["HasImmunity"] = true, ["RemoveCurse"] = true, }, [1449] = { --Initial Mage (used in exiles reach tutorial mode). Treated as hybrid. Utility disabled because that'd require checking tutorial progress ["Dps"] = true, ["Ranged"] = true, ["RangedDps"] = true, ["ManaUser"] = true, ["SpellCaster"] = true, ["CasterDps"] = true, }, [65] = { --Holy Paladin ["Healer"] = true, ["Ranged"] = true, ["ManaUser"] = true, ["SpellCaster"] = true, ["RaidCooldown"] = true,--Devotion Aura ["RemovePoison"] = true, ["RemoveDisease"] = true, ["RemoveMagic"] = true, ["HasImmunity"] = true, }, [66] = { --Protection Paladin ["Tank"] = true, ["Melee"] = true, ["ManaUser"] = true, ["Physical"] = true, ["RemovePoison"] = true, ["RemoveDisease"] = true, ["HasInterrupt"] = true, ["HasImmunity"] = true, }, [70] = { --Retribution Paladin ["Dps"] = true, ["Melee"] = true, ["MeleeDps"] = true, ["ManaUser"] = true, ["Physical"] = true, ["RemovePoison"] = true, ["RemoveDisease"] = true, ["HasInterrupt"] = true, ["HasImmunity"] = true, }, [1451] = { --Initial Paladin (used in exiles reach tutorial mode). Treated as hybrid. Utility disabled because that'd require checking tutorial progress ["Healer"] = true, ["Tank"] = true, ["Dps"] = true, ["Melee"] = true, ["MeleeDps"] = true, ["ManaUser"] = true, ["Physical"] = true, ["SpellCaster"] = true, }, [71] = { --Arms Warrior ["Dps"] = true, ["Melee"] = true, ["MeleeDps"] = true, ["RaidCooldown"] = true,--Rallying Cry ["Physical"] = true, ["HasInterrupt"] = true, ["ImmunityDispeller"] = IsSpellKnown(64382), }, [73] = { --Protection Warrior ["Tank"] = true, ["Melee"] = true, ["Physical"] = true, ["HasInterrupt"] = true, ["RaidCooldown"] = true,--Rallying Cry ["ImmunityDispeller"] = IsSpellKnown(64382), }, [1446] = { --Initial Warrior (used in exiles reach tutorial mode). Treated as hybrid. Utility disabled because that'd require checking tutorial progress ["Tank"] = true, ["Dps"] = true, ["Melee"] = true, ["MeleeDps"] = true, ["Physical"] = true, }, [102] = { --Balance Druid ["Dps"] = true, ["Ranged"] = true, ["RangedDps"] = true, ["ManaUser"] = true, ["SpellCaster"] = true, ["CasterDps"] = true, ["RemoveCurse"] = true, ["RemovePoison"] = true, ["RemoveEnrage"] = true, }, [103] = { --Feral Druid ["Dps"] = true, ["Melee"] = true, ["MeleeDps"] = true, ["Physical"] = true, ["RemoveCurse"] = true, ["RemovePoison"] = true, ["HasInterrupt"] = true, ["RemoveEnrage"] = true, }, [104] = { --Guardian Druid ["Tank"] = true, ["Melee"] = true, ["Physical"] = true, ["RemoveCurse"] = true, ["RemovePoison"] = true, ["HasInterrupt"] = true, ["RemoveEnrage"] = true, }, [105] = { -- Restoration Druid ["Healer"] = true, ["Ranged"] = true, ["ManaUser"] = true, ["SpellCaster"] = true, ["RaidCooldown"] = true,--Tranquility ["RemoveCurse"] = true, ["RemovePoison"] = true, ["RemoveEnrage"] = true, ["RemoveMagic"] = true, }, [1447] = { -- Initial Druid (used in exiles reach tutorial mode). Treated as hybrid. Utility disabled because that'd require checking tutorial progress ["Tank"] = true, ["Melee"] = true, ["MeleeDps"] = true, ["Physical"] = true, ["Healer"] = true, ["Ranged"] = true, ["RangedDps"] = true, ["ManaUser"] = true, ["SpellCaster"] = true, }, [250] = { --Blood DK ["Tank"] = true, ["Melee"] = true, ["Physical"] = true, ["HasInterrupt"] = true, }, [251] = { --Frost DK ["Dps"] = true, ["Melee"] = true, ["MeleeDps"] = true, ["Physical"] = true, ["HasInterrupt"] = true, }, [1455] = { --Initial DK (used in exiles reach tutorial mode). Treated as hybrid. Utility disabled because that'd require checking tutorial progress ["Tank"] = true, ["Dps"] = true, ["Melee"] = true, ["MeleeDps"] = true, ["Physical"] = true, }, [253] = { --Beastmaster Hunter ["Dps"] = true, ["Ranged"] = true, ["RangedDps"] = true, ["Physical"] = true, ["HasInterrupt"] = true, ["MagicDispeller"] = true, ["RemoveEnrage"] = true, }, [254] = { --Markmanship Hunter Hunter ["Dps"] = true, ["Ranged"] = true, ["RangedDps"] = true, ["Physical"] = true, ["HasInterrupt"] = true, ["MagicDispeller"] = true, ["RemoveEnrage"] = true, }, [255] = { --Survival Hunter (Legion+) ["Dps"] = true, ["Melee"] = true, ["MeleeDps"] = true, ["Physical"] = true, ["HasInterrupt"] = true, ["MagicDispeller"] = true, ["RemoveEnrage"] = true, }, [1448] = { --Initial Hunter (used in exiles reach tutorial mode). Treated as hybrid. Utility disabled because that'd require checking tutorial progress ["Dps"] = true, ["Ranged"] = true, ["RangedDps"] = true, ["Physical"] = true, }, [256] = { --Discipline Priest ["Healer"] = true, ["Ranged"] = true, ["ManaUser"] = true, ["SpellCaster"] = true, ["CasterDps"] = true,--Iffy. Technically yes, but this can't be used to determine eligable target for dps only debuffs ["RaidCooldown"] = true,--Power Word: Barrier(Discipline) / Divine Hymn (Holy) ["RemoveDisease"] = true, ["RemoveMagic"] = true, ["MagicDispeller"] = true, ["ImmunityDispeller"] = true, }, [258] = { --Shadow Priest ["Dps"] = true, ["Ranged"] = true, ["RangedDps"] = true, ["ManaUser"] = true, ["SpellCaster"] = true, ["CasterDps"] = true, ["MagicDispeller"] = true, ["ImmunityDispeller"] = true, ["HasInterrupt"] = true, ["RemoveDisease"] = true, }, [1452] = { --Initial Priest (used in exiles reach tutorial mode). Treated as hybrid. Utility disabled because that'd require checking tutorial progress ["Dps"] = true, ["Healer"] = true, ["Ranged"] = true, ["RangedDps"] = true, ["ManaUser"] = true, ["SpellCaster"] = true, ["CasterDps"] = true, }, [259] = { --Assassination Rogue ["Dps"] = true, ["Melee"] = true, ["MeleeDps"] = true, ["Physical"] = true, ["HasInterrupt"] = true, ["HasImmunity"] = true, }, [1453] = { --Initial Rogue (used in exiles reach tutorial mode). Treated as hybrid. Utility disabled because that'd require checking tutorial progress ["Dps"] = true, ["Melee"] = true, ["MeleeDps"] = true, ["Physical"] = true, }, [262] = { --Elemental Shaman ["Dps"] = true, ["Ranged"] = true, ["RangedDps"] = true, ["ManaUser"] = true, ["SpellCaster"] = true, ["CasterDps"] = true, ["RemoveCurse"] = true, ["MagicDispeller"] = true, ["HasInterrupt"] = true, }, [263] = { --Enhancement Shaman ["Dps"] = true, ["Melee"] = true, ["MeleeDps"] = true, ["ManaUser"] = true, ["SpellCaster"] = true, ["Physical"] = true, ["RemoveCurse"] = true, ["MagicDispeller"] = true, ["HasInterrupt"] = true, }, [264] = { --Restoration Shaman ["Healer"] = true, ["Ranged"] = true, ["ManaUser"] = true, ["SpellCaster"] = true, ["RaidCooldown"] = true,--Spirit Link Totem ["RemoveCurse"] = true, ["RemoveMagic"] = true, ["MagicDispeller"] = true, ["HasInterrupt"] = true, }, [1444] = { --Initial Shaman (used in exiles reach tutorial mode). Treated as hybrid. Utility disabled because that'd require checking tutorial progress ["Healer"] = true, ["Dps"] = true, ["Melee"] = true, ["MeleeDps"] = true, ["Ranged"] = true, ["RangedDps"] = true, ["ManaUser"] = true, ["SpellCaster"] = true, ["Physical"] = true, }, [265] = { --Affliction Warlock ["Dps"] = true, ["Ranged"] = true, ["RangedDps"] = true, ["ManaUser"] = true, ["SpellCaster"] = true, -- ["RemoveMagic"] = true,--Singe Magic (Imp) ["CasterDps"] = true, }, --[266] = { --Demonology Warlock -- ["Dps"] = true, -- ["Ranged"] = true, -- ["RangedDps"] = true, -- ["ManaUser"] = true, -- ["SpellCaster"] = true, -- -- ["RemoveMagic"] = true,--Singe Magic (Imp) -- ["CasterDps"] = true, --}, --[267] = { --Destruction Warlock -- ["Dps"] = true, -- ["Ranged"] = true, -- ["RangedDps"] = true, -- ["ManaUser"] = true, -- ["SpellCaster"] = true, -- -- ["RemoveMagic"] = true,--Singe Magic (Imp) -- ["CasterDps"] = true, --}, [1454] = { --Initial Warlock (used in exiles reach tutorial mode). Treated as hybrid. Utility disabled because that'd require checking tutorial progress ["Dps"] = true, ["Ranged"] = true, ["RangedDps"] = true, ["ManaUser"] = true, ["SpellCaster"] = true, ["CasterDps"] = true, }, [268] = { --Brewmaster Monk ["Tank"] = true, ["Melee"] = true, ["Physical"] = true, ["RemovePoison"] = true, ["RemoveDisease"] = true, ["HasInterrupt"] = true, }, [269] = { --Windwalker Monk ["Dps"] = true, ["Melee"] = true, ["MeleeDps"] = true, ["Physical"] = true, ["RemovePoison"] = true, ["RemoveDisease"] = true, ["HasInterrupt"] = true, }, [270] = { --Mistweaver Monk ["Healer"] = true, ["Melee"] = true, ["Ranged"] = true, ["ManaUser"] = true, ["SpellCaster"] = true, ["RaidCooldown"] = true,--Revival ["RemovePoison"] = true, ["RemoveDisease"] = true, ["RemoveMagic"] = true, }, [1450] = { --Initial Monk (used in exiles reach tutorial mode). Treated as hybrid. Utility disabled because that'd require checking tutorial progress ["Tank"] = true, ["Healer"] = true, ["Dps"] = true, ["Melee"] = true, ["MeleeDps"] = true, ["Physical"] = true, ["Ranged"] = true, ["ManaUser"] = true, ["SpellCaster"] = true, }, [577] = { --Havok Demon Hunter ["Dps"] = true, ["Melee"] = true, ["MeleeDps"] = true, ["Physical"] = true, ["HasInterrupt"] = true, ["MagicDispeller"] = true, }, [581] = { --Vengeance Demon Hunter ["Tank"] = true, ["Melee"] = true, ["Physical"] = true, ["HasInterrupt"] = true, ["MagicDispeller"] = true, }, [1456] = { --Initial Demon Hunter (used in exiles reach tutorial mode). Treated as hybrid. Utility disabled because that'd require checking tutorial progress ["Tank"] = true, ["Melee"] = true, ["MeleeDps"] = true, ["Physical"] = true, }, [1467] = { --Evoker Devastation ["Dps"] = true, ["CasterDps"] = true, ["Ranged"] = true, ["RangedDps"] = true, ["ManaUser"] = true, ["SpellCaster"] = true, ["RemovePoison"] = IsSpellKnown(365585),--Expunge. Must be specced ["RemoveCurse"] = IsSpellKnown(374251),--Cauterizing Flame ["RemoveDisease"] = IsSpellKnown(374251),--Cauterizing Flame ["RemoveEnrage"] = IsSpellKnown(374346),--Overawe }, [1468] = { --Evoker Preservation ["Healer"] = true, ["Ranged"] = true, ["ManaUser"] = true, ["SpellCaster"] = true, ["RemoveMagic"] = true, ["RemovePoison"] = true,--Auto known ["RemoveCurse"] = IsSpellKnown(374251),--Cauterizing Flame ["RemoveDisease"] = IsSpellKnown(374251),--Cauterizing Flame ["RemoveEnrage"] = IsSpellKnown(374346),--Overawe ["RaidCooldown"] = IsSpellKnown(363534),--Rewind }, [1465] = { --Evoker Initial (treated as both healer and dps for basic leveling purposes) ["Dps"] = true, ["CasterDps"] = true, ["Healer"] = true, ["Ranged"] = true, ["ManaUser"] = true, ["SpellCaster"] = true, }, } specRoleTable[63] = specRoleTable[62]--Frost Mage same as arcane specRoleTable[64] = specRoleTable[62]--Fire Mage same as arcane specRoleTable[72] = specRoleTable[71]--Fury Warrior same as Arms specRoleTable[252] = specRoleTable[251]--Unholy DK same as frost specRoleTable[257] = specRoleTable[256]--Holy Priest same as disc specRoleTable[260] = specRoleTable[259]--Combat Rogue same as Assassination specRoleTable[261] = specRoleTable[259]--Subtlety Rogue same as Assassination specRoleTable[266] = specRoleTable[265]--Demonology Warlock same as Affliction specRoleTable[267] = specRoleTable[265]--Destruction Warlock same as Affliction specRoleTable[1473] = specRoleTable[1467]--Just map augmentation to devastation for now else local IsSpellKnown = IsSpellKnown specRoleTable = { ["MAGE1"] = { --Arcane Mage ["Dps"] = true, ["Ranged"] = true, ["RangedDps"] = true, ["ManaUser"] = true, ["SpellCaster"] = true, ["CasterDps"] = true, ["HasInterrupt"] = true, ["HasImmunity"] = true, ["RemoveCurse"] = true, ["MagicDispeller"] = IsSpellKnown(30449),--Spellsteal in TBC }, ["PALADIN1"] = { --Holy Paladin ["Healer"] = true, ["Melee"] = true,--They melee when oom? ["Ranged"] = true, ["CasterDps"] = true,--Judgements, exorcism, etc ["ManaUser"] = true, ["SpellCaster"] = true, ["RaidCooldown"] = true,--Devotion Aura ["RemovePoison"] = true, ["RemoveDisease"] = true, ["RemoveMagic"] = true, ["HasImmunity"] = true, }, ["PALADIN2"] = { --Protection Paladin ["Tank"] = true, ["Melee"] = true, ["ManaUser"] = true, ["Physical"] = true, ["CasterDps"] = true,--Judgements, exorcism, etc ["RemovePoison"] = true, ["RemoveDisease"] = true, ["RemoveMagic"] = true, ["HasImmunity"] = true, }, ["PALADIN3"] = { --Retribution Paladin ["Tank"] = true, ["Dps"] = true, ["Melee"] = true, ["MeleeDps"] = true, ["CasterDps"] = true,--Judgements, exorcism, etc ["ManaUser"] = true, ["Physical"] = true, ["RemovePoison"] = true, ["RemoveDisease"] = true, ["RemoveMagic"] = true, ["HasImmunity"] = true, }, ["WARRIOR1"] = { --Arms Warrior ["Dps"] = true, ["Tank"] = true, ["Melee"] = true, ["MeleeDps"] = true, ["Physical"] = true, ["HasInterrupt"] = true, }, ["WARRIOR3"] = { --Protection Warrior ["Tank"] = true, ["Melee"] = true, ["Physical"] = true, ["HasInterrupt"] = true, ["MagicDispeller"] = (IsSpellKnown(23922) or IsSpellKnown(23923) or IsSpellKnown(23924) or IsSpellKnown(23925) or IsSpellKnown(25258) or IsSpellKnown(30356)),--Shield Slam }, ["DRUID1"] = { --Balance Druid ["Healer"] = true, ["Dps"] = true, ["Ranged"] = true, ["RangedDps"] = true, ["ManaUser"] = true, ["SpellCaster"] = true, ["CasterDps"] = true, ["RemoveCurse"] = true, }, ["DRUID2"] = { --Feral Druid ["Healer"] = true, ["Dps"] = true, ["Tank"] = true, ["Melee"] = true, ["MeleeDps"] = true, ["Physical"] = true, ["RemoveCurse"] = true, }, ["DRUID3"] = { -- Restoration Druid ["Healer"] = true, ["Ranged"] = true, ["ManaUser"] = true, ["SpellCaster"] = true, ["RaidCooldown"] = true,--Tranquility ["RemoveCurse"] = true, }, ["HUNTER1"] = { --Beastmaster Hunter ["Dps"] = true, ["Ranged"] = true, ["RangedDps"] = true, ["Physical"] = true, ["RemoveEnrage"] = true, ["ManaUser"] = true, }, ["HUNTER2"] = { --Markmanship Hunter Hunter ["Dps"] = true, ["Ranged"] = true, ["RangedDps"] = true, ["Physical"] = true, ["RemoveEnrage"] = true, ["ManaUser"] = true, }, ["HUNTER3"] = { --Survival Hunter ["Dps"] = true, ["Ranged"] = true, ["RangedDps"] = true, ["Physical"] = true, ["RemoveEnrage"] = true, ["ManaUser"] = true, }, ["PRIEST1"] = { --Discipline Priest ["Healer"] = true, ["Ranged"] = true, ["ManaUser"] = true, ["SpellCaster"] = true, ["CasterDps"] = true,--Iffy. Technically yes, but this can't be used to determine eligable target for dps only debuffs ["RaidCooldown"] = true,--Power Word: Barrier(Discipline) / Divine Hymn (Holy) ["MagicDispeller"] = true, ["RemoveMagic"] = true, }, ["PRIEST3"] = { --Shadow Priest ["Dps"] = true, ["Ranged"] = true, ["RangedDps"] = true, ["ManaUser"] = true, ["SpellCaster"] = true, ["CasterDps"] = true, ["MagicDispeller"] = true, ["RemoveMagic"] = true, ["HasInterrupt"] = IsSpellKnown(15487),--Silence is a talent tree talent }, ["ROGUE1"] = { --Assassination Rogue ["Dps"] = true, ["Melee"] = true, ["MeleeDps"] = true, ["Physical"] = true, ["HasInterrupt"] = true, }, ["SHAMAN1"] = { --Elemental Shaman ["Dps"] = true, ["Ranged"] = true, ["RangedDps"] = true, ["ManaUser"] = true, ["SpellCaster"] = true, ["CasterDps"] = true, }, ["SHAMAN2"] = { --Enhancement Shaman ["Dps"] = true, ["Melee"] = true, ["MeleeDps"] = true, --["CasterDps"] = true,?? ["ManaUser"] = true, ["SpellCaster"] = true, ["Physical"] = true, }, ["SHAMAN3"] = { --Restoration Shaman ["Healer"] = true, ["Ranged"] = true, ["ManaUser"] = true, ["SpellCaster"] = true, }, ["WARLOCK1"] = { --Affliction Warlock ["Dps"] = true, ["Ranged"] = true, ["RangedDps"] = true, ["ManaUser"] = true, ["SpellCaster"] = true, ["CasterDps"] = true, }, ["DEATHKNIGHT1"] = {--Just treat all DKs as all roles, they are hybrid as hell in wrath and any spec can be any role ["Tank"] = true, ["Melee"] = true, ["Dps"] = true, ["MeleeDps"] = true, ["Physical"] = true, ["HasInterrupt"] = true, }, } specRoleTable["MAGE3"] = specRoleTable["MAGE1"]--Frost Mage same as arcane specRoleTable["MAGE2"] = specRoleTable["MAGE1"]--Fire Mage same as arcane specRoleTable["WARRIOR2"] = specRoleTable["WARRIOR1"]--Fury Warrior same as Arms specRoleTable["PRIEST2"] = specRoleTable["PRIEST1"]--Holy Priest same as disc specRoleTable["ROGUE2"] = specRoleTable["ROGUE1"]--Combat Rogue same as Assassination specRoleTable["ROGUE3"] = specRoleTable["ROGUE1"]--Subtlety Rogue same as Assassination specRoleTable["WARLOCK2"] = specRoleTable["WARLOCK1"]--Demonology Warlock same as Affliction specRoleTable["WARLOCK3"] = specRoleTable["WARLOCK1"]--Destruction Warlock same as Affliction specRoleTable["DEATHKNIGHT2"] = specRoleTable["DEATHKNIGHT1"] specRoleTable["DEATHKNIGHT3"] = specRoleTable["DEATHKNIGHT1"] end private.specRoleTable = specRoleTable end DBMExtraGlobal:rebuildSpecTable()--Initial build