From b596445acefd31b32e51a81a115ba69795574db1 Mon Sep 17 00:00:00 2001 From: Tercio Jose Date: Tue, 22 Jun 2021 17:00:09 -0300 Subject: [PATCH] Packr Utility on Coach mode and Vanguard massive update --- Libs/DF/fw.lua | 7 +- Libs/DF/panel.lua | 57 +- Libs/DF/spells.lua | 7 +- boot.lua | 11 +- core/parser.lua | 5 + core/plugins_raid.lua | 12 + core/windows.lua | 49 +- frames/window_custom_scripts.lua | 84 + frames/window_switch.lua | 81 +- functions/coach.lua | 18 +- functions/pack.lua | 781 +++++- functions/slash.lua | 14 +- functions/spells.lua | 2282 +++++++++-------- .../Details_EncounterDetails.lua | 4 +- .../Details_RaidCheck/Details_RaidCheck.lua | 4 +- plugins/Details_Streamer/Details_Streamer.lua | 2 +- .../Details_TinyThreat/Details_TinyThreat.lua | 2 +- plugins/Details_Vanguard/Details_Vanguard.lua | 137 +- 18 files changed, 2408 insertions(+), 1149 deletions(-) create mode 100644 frames/window_custom_scripts.lua diff --git a/Libs/DF/fw.lua b/Libs/DF/fw.lua index 5d42123cd..3433a9d12 100644 --- a/Libs/DF/fw.lua +++ b/Libs/DF/fw.lua @@ -1,6 +1,6 @@ -local dversion = 256 +local dversion = 257 local major, minor = "DetailsFramework-1.0", dversion local DF, oldminor = LibStub:NewLibrary (major, minor) @@ -22,6 +22,9 @@ local tinsert = _G.tinsert local abs = _G.abs local tremove = _G.tremove +local IS_WOW_PROJECT_MAINLINE = WOW_PROJECT_ID == WOW_PROJECT_MAINLINE +local IS_WOW_PROJECT_NOT_MAINLINE = WOW_PROJECT_ID ~= WOW_PROJECT_MAINLINE + local UnitPlayerControlled = UnitPlayerControlled local UnitIsTapDenied = UnitIsTapDenied @@ -3678,7 +3681,7 @@ function DF:GetCharacterRaceList (fullList) tinsert (DF.RaceCache, {Name = raceInfo.raceName, FileString = raceInfo.clientFileString}) end - if WOW_PROJECT_ID == WOW_PROJECT_MAINLINE then + if IS_WOW_PROJECT_MAINLINE then local alliedRaceInfo = C_AlliedRaces.GetRaceInfoByID (i) if (alliedRaceInfo and DF.AlliedRaceList [alliedRaceInfo.raceID]) then tinsert (DF.RaceCache, {Name = alliedRaceInfo.maleName, FileString = alliedRaceInfo.raceFileString}) diff --git a/Libs/DF/panel.lua b/Libs/DF/panel.lua index 5331af6f6..85083c688 100644 --- a/Libs/DF/panel.lua +++ b/Libs/DF/panel.lua @@ -14,6 +14,9 @@ local _type = type --> lua local local _math_floor = math.floor --> lua local local loadstring = loadstring --> lua local +local IS_WOW_PROJECT_MAINLINE = WOW_PROJECT_ID == WOW_PROJECT_MAINLINE +local IS_WOW_PROJECT_NOT_MAINLINE = WOW_PROJECT_ID ~= WOW_PROJECT_MAINLINE + local PixelUtil = PixelUtil or DFPixelUtil local UnitGroupRolesAssigned = DetailsFramework.UnitGroupRolesAssigned @@ -662,7 +665,7 @@ function DF:NewPanel (parent, container, name, member, w, h, backdrop, backdropc ["OnEnter"] = {0.3, 0.3, 0.3, 0.5}, ["OnLeave"] = {0.9, 0.7, 0.7, 1} } - PanelObject.frame:SetBackdrop ({bgFile = [[Interface\DialogFrame\UI-DialogBox-Background]], edgeFile = "Interface\DialogFrame\UI-DialogBox-Border", edgeSize = 10, tileSize = 64, tile = true}) + PanelObject.frame:SetBackdrop ({bgFile = [[Interface\DialogFrame\UI-DialogBox-Background]], edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border", edgeSize = 10, tileSize = 64, tile = true}) PanelObject.widget = PanelObject.frame @@ -6006,13 +6009,13 @@ local default_load_conditions_frame_options = { function DF:CreateLoadFilterParser (callback) local f = CreateFrame ("frame") f:RegisterEvent ("PLAYER_ENTERING_WORLD") - if WOW_PROJECT_ID == WOW_PROJECT_MAINLINE then + if IS_WOW_PROJECT_MAINLINE then f:RegisterEvent ("PLAYER_SPECIALIZATION_CHANGED") f:RegisterEvent ("PLAYER_TALENT_UPDATE") end f:RegisterEvent ("PLAYER_ROLES_ASSIGNED") f:RegisterEvent ("ZONE_CHANGED_NEW_AREA") - if WOW_PROJECT_ID == WOW_PROJECT_MAINLINE then + if IS_WOW_PROJECT_MAINLINE then f:RegisterEvent ("CHALLENGE_MODE_START") end f:RegisterEvent ("ENCOUNTER_START") @@ -6075,7 +6078,7 @@ function DF:PassLoadFilters (loadTable, encounterID) end --spec - if (WOW_PROJECT_ID == WOW_PROJECT_MAINLINE and loadTable.spec.Enabled) then + if (IS_WOW_PROJECT_MAINLINE and loadTable.spec.Enabled) then local canCheckTalents = true if (passLoadClass) then @@ -6116,7 +6119,7 @@ function DF:PassLoadFilters (loadTable, encounterID) end --talents - if (WOW_PROJECT_ID == WOW_PROJECT_MAINLINE and loadTable.talent.Enabled) then + if (IS_WOW_PROJECT_MAINLINE and loadTable.talent.Enabled) then local talentsInUse = DF:GetCharacterTalents (false, true) local hasTalent for talentID, _ in pairs (talentsInUse) do @@ -6131,7 +6134,7 @@ function DF:PassLoadFilters (loadTable, encounterID) end --pvptalent - if (WOW_PROJECT_ID == WOW_PROJECT_MAINLINE and loadTable.pvptalent.Enabled) then + if (IS_WOW_PROJECT_MAINLINE and loadTable.pvptalent.Enabled) then local talentsInUse = DF:GetCharacterPvPTalents (false, true) local hasTalent for talentID, _ in pairs (talentsInUse) do @@ -6168,7 +6171,7 @@ function DF:PassLoadFilters (loadTable, encounterID) end --affix - if (WOW_PROJECT_ID == WOW_PROJECT_MAINLINE and loadTable.affix.Enabled) then + if (IS_WOW_PROJECT_MAINLINE and loadTable.affix.Enabled) then local isInMythicDungeon = C_ChallengeMode.IsChallengeModeActive() if (not isInMythicDungeon) then return false @@ -6318,7 +6321,7 @@ function DF:OpenLoadConditionsPanel (optionsTable, callback, frameOptions) tinsert (f.AllRadioGroups, classGroup) --create the radio group for character spec - if WOW_PROJECT_ID == WOW_PROJECT_MAINLINE then + if IS_WOW_PROJECT_MAINLINE then local specs = {} for _, specID in ipairs (DF:GetClassSpecIDs (select (2, UnitClass ("player")))) do local specID, specName, specDescription, specIcon, specBackground, specRole, specClass = DetailsFramework.GetSpecializationInfoByID (specID) @@ -6352,7 +6355,7 @@ function DF:OpenLoadConditionsPanel (optionsTable, callback, frameOptions) tinsert (f.AllRadioGroups, raceGroup) --create radio group for talents - if WOW_PROJECT_ID == WOW_PROJECT_MAINLINE then + if IS_WOW_PROJECT_MAINLINE then local talentList = {} for _, talentTable in ipairs (DF:GetCharacterTalents()) do tinsert (talentList, { @@ -6452,7 +6455,7 @@ function DF:OpenLoadConditionsPanel (optionsTable, callback, frameOptions) end --create radio group for pvp talents - if WOW_PROJECT_ID == WOW_PROJECT_MAINLINE then + if IS_WOW_PROJECT_MAINLINE then local pvpTalentList = {} for _, talentTable in ipairs (DF:GetCharacterPvPTalents()) do tinsert (pvpTalentList, { @@ -6582,7 +6585,7 @@ function DF:OpenLoadConditionsPanel (optionsTable, callback, frameOptions) tinsert (f.AllRadioGroups, roleTypesGroup) --create radio group for mythic+ affixes - if WOW_PROJECT_ID == WOW_PROJECT_MAINLINE then + if IS_WOW_PROJECT_MAINLINE then local affixes = {} for i = 2, 1000 do local affixName, desc, texture = C_ChallengeMode.GetAffixInfo (i) @@ -6652,7 +6655,7 @@ function DF:OpenLoadConditionsPanel (optionsTable, callback, frameOptions) tinsert (f.AllTextEntries, mapIDEditbox) function f.Refresh (self) - if WOW_PROJECT_ID == WOW_PROJECT_MAINLINE then + if IS_WOW_PROJECT_MAINLINE then --update the talents (might have changed if the player changed its specialization) local talentList = {} for _, talentTable in ipairs (DF:GetCharacterTalents()) do @@ -6667,7 +6670,7 @@ function DF:OpenLoadConditionsPanel (optionsTable, callback, frameOptions) DetailsFrameworkLoadConditionsPanel.TalentGroup:SetOptions (talentList) end - if WOW_PROJECT_ID == WOW_PROJECT_MAINLINE then + if IS_WOW_PROJECT_MAINLINE then local pvpTalentList = {} for _, talentTable in ipairs (DF:GetCharacterPvPTalents()) do tinsert (pvpTalentList, { @@ -6692,7 +6695,7 @@ function DF:OpenLoadConditionsPanel (optionsTable, callback, frameOptions) textEntry:Refresh() end - if WOW_PROJECT_ID == WOW_PROJECT_MAINLINE then + if IS_WOW_PROJECT_MAINLINE then DetailsFrameworkLoadConditionsPanel.CanShowTalentWarning() DetailsFrameworkLoadConditionsPanel.CanShowPvPTalentWarning() end @@ -7210,10 +7213,10 @@ DF.StatusBarFunctions = { {"PLAYER_ENTERING_WORLD"}, {"UNIT_HEALTH", true}, {"UNIT_MAXHEALTH", true}, - {(WOW_PROJECT_ID ~= WOW_PROJECT_MAINLINE) and "UNIT_HEALTH_FREQUENT", true}, -- this one is classic-only... - {(WOW_PROJECT_ID == WOW_PROJECT_MAINLINE) and "UNIT_HEAL_PREDICTION", true}, - {(WOW_PROJECT_ID == WOW_PROJECT_MAINLINE) and "UNIT_ABSORB_AMOUNT_CHANGED", true}, - {(WOW_PROJECT_ID == WOW_PROJECT_MAINLINE) and "UNIT_HEAL_ABSORB_AMOUNT_CHANGED", true}, + {(IS_WOW_PROJECT_NOT_MAINLINE) and "UNIT_HEALTH_FREQUENT", true}, -- this one is classic-only... + {(IS_WOW_PROJECT_MAINLINE) and "UNIT_HEAL_PREDICTION", true}, + {(IS_WOW_PROJECT_MAINLINE) and "UNIT_ABSORB_AMOUNT_CHANGED", true}, + {(IS_WOW_PROJECT_MAINLINE) and "UNIT_HEAL_ABSORB_AMOUNT_CHANGED", true}, } --> setup the castbar to be used by another unit @@ -7242,7 +7245,7 @@ DF.StatusBarFunctions = { --> check for settings and update some events if (not self.Settings.ShowHealingPrediction) then - if WOW_PROJECT_ID == WOW_PROJECT_MAINLINE then + if IS_WOW_PROJECT_MAINLINE then self:UnregisterEvent ("UNIT_HEAL_PREDICTION") self:UnregisterEvent ("UNIT_HEAL_ABSORB_AMOUNT_CHANGED") end @@ -7250,7 +7253,7 @@ DF.StatusBarFunctions = { self.healAbsorbIndicator:Hide() end if (not self.Settings.ShowShields) then - if WOW_PROJECT_ID == WOW_PROJECT_MAINLINE then + if IS_WOW_PROJECT_MAINLINE then self:UnregisterEvent ("UNIT_ABSORB_AMOUNT_CHANGED") end self.shieldAbsorbIndicator:Hide() @@ -7343,7 +7346,7 @@ DF.StatusBarFunctions = { --health and absorbs prediction healthBarMetaFunctions.UpdateHealPrediction = function (self) - if WOW_PROJECT_ID ~= WOW_PROJECT_MAINLINE then return end + if IS_WOW_PROJECT_NOT_MAINLINE then return end local currentHealth = self.currentHealth local currentHealthMax = self.currentHealthMax local healthPercent = currentHealth / currentHealthMax @@ -7657,7 +7660,7 @@ DF.PowerFrameFunctions = { --> when a event different from unit_power_update is triggered, update which type of power the unit should show UpdatePowerInfo = function (self) - if (WOW_PROJECT_ID == WOW_PROJECT_MAINLINE and self.Settings.ShowAlternatePower) then -- not available in classic + if (IS_WOW_PROJECT_MAINLINE and self.Settings.ShowAlternatePower) then -- not available in classic local barID = UnitPowerBarID(self.displayedUnit) local barInfo = GetUnitPowerBarInfoByID(barID) --local name, tooltip, cost = GetUnitPowerBarStringsByID(barID); @@ -7799,8 +7802,8 @@ DF.CastFrameFunctions = { {"UNIT_SPELLCAST_CHANNEL_START"}, {"UNIT_SPELLCAST_CHANNEL_UPDATE"}, {"UNIT_SPELLCAST_CHANNEL_STOP"}, - {(WOW_PROJECT_ID == WOW_PROJECT_MAINLINE) and "UNIT_SPELLCAST_INTERRUPTIBLE"}, - {(WOW_PROJECT_ID == WOW_PROJECT_MAINLINE) and "UNIT_SPELLCAST_NOT_INTERRUPTIBLE"}, + {(IS_WOW_PROJECT_MAINLINE) and "UNIT_SPELLCAST_INTERRUPTIBLE"}, + {(IS_WOW_PROJECT_MAINLINE) and "UNIT_SPELLCAST_NOT_INTERRUPTIBLE"}, {"PLAYER_ENTERING_WORLD"}, {"UNIT_SPELLCAST_START", true}, {"UNIT_SPELLCAST_STOP", true}, @@ -8331,7 +8334,7 @@ DF.CastFrameFunctions = { UNIT_SPELLCAST_START = function (self, unit) local name, text, texture, startTime, endTime, isTradeSkill, castID, notInterruptible, spellID - if WOW_PROJECT_ID == WOW_PROJECT_MAINLINE then + if IS_WOW_PROJECT_MAINLINE then name, text, texture, startTime, endTime, isTradeSkill, castID, notInterruptible, spellID = UnitCastingInfo (unit) else name, text, texture, startTime, endTime, isTradeSkill, castID, spellID = UnitCastingInfo (unit) @@ -8393,7 +8396,7 @@ DF.CastFrameFunctions = { UNIT_SPELLCAST_CHANNEL_START = function (self, unit, ...) local name, text, texture, startTime, endTime, isTradeSkill, notInterruptible, spellID - if WOW_PROJECT_ID == WOW_PROJECT_MAINLINE then + if IS_WOW_PROJECT_MAINLINE then name, text, texture, startTime, endTime, isTradeSkill, notInterruptible, spellID = UnitChannelInfo (unit) else name, text, texture, startTime, endTime, isTradeSkill, spellID = UnitChannelInfo (unit) @@ -9004,7 +9007,7 @@ end --> todo: see what 'UnitTargetsVehicleInRaidUI' is, there's a call for this in the CompactUnitFrame.lua but zero documentation CheckVehiclePossession = function (self) --> this unit is possessing a vehicle? - local unitPossessVehicle = (WOW_PROJECT_ID == WOW_PROJECT_MAINLINE) and UnitHasVehicleUI (self.unit) or false + local unitPossessVehicle = (IS_WOW_PROJECT_MAINLINE) and UnitHasVehicleUI (self.unit) or false if (unitPossessVehicle) then if (not self.unitInVehicle) then if (UnitIsUnit ("player", self.unit)) then diff --git a/Libs/DF/spells.lua b/Libs/DF/spells.lua index 2c622cf5b..ca36d781a 100644 --- a/Libs/DF/spells.lua +++ b/Libs/DF/spells.lua @@ -4,6 +4,9 @@ if (not DF or not DetailsFrameworkCanLoad) then return end +local IS_WOW_PROJECT_MAINLINE = WOW_PROJECT_ID == WOW_PROJECT_MAINLINE +local IS_WOW_PROJECT_NOT_MAINLINE = WOW_PROJECT_ID ~= WOW_PROJECT_MAINLINE + DF_COOLDOWN_RAID = 4 DF_COOLDOWN_EXTERNAL = 3 @@ -486,7 +489,7 @@ DF.CooldownsBySpec = { } --additional CDs / modifications for classic -if (WOW_PROJECT_ID ~= WOW_PROJECT_MAINLINE) then +if (IS_WOW_PROJECT_NOT_MAINLINE) then --WARRIOR --Arms DF.CooldownsBySpec[71][12292] = 1 --Death Wish (BCC) @@ -1009,7 +1012,7 @@ DF.CrowdControlSpells = { } -- additionals for classic -if (WOW_PROJECT_ID ~= WOW_PROJECT_MAINLINE) then +if (IS_WOW_PROJECT_NOT_MAINLINE) then DF.CrowdControlSpells[99] = nil --demoralizing roar disabled, no CC in tbc --auto-generated diff --git a/boot.lua b/boot.lua index be5d9b5ff..8ba37ed5a 100644 --- a/boot.lua +++ b/boot.lua @@ -6,9 +6,9 @@ local version, build, date, tocversion = GetBuildInfo() - _detalhes.build_counter = 8516 - _detalhes.alpha_build_counter = 8516 --if this is higher than the regular counter, use it instead - _detalhes.bcc_counter = 20 + _detalhes.build_counter = 8637 + _detalhes.alpha_build_counter = 8637 --if this is higher than the regular counter, use it instead + _detalhes.bcc_counter = 23 _detalhes.dont_open_news = true _detalhes.game_version = version _detalhes.userversion = version .. _detalhes.build_counter @@ -33,6 +33,11 @@ do local Loc = _G.LibStub("AceLocale-3.0"):GetLocale( "Details" ) local news = { + {"v9.0.5.8637.144", "June 22nd, 2021"}, + "Major update on Vanguard plugin.", + "Added utility module to Coach, this module will send interrupt, dispel, cc breaks, cooldown usege and battle resses to the Coach.", + "Added plugins into the title bar display menu.", + {"v9.0.5.8502.144", "May 21th, 2021"}, "Added options to change the color of each team during an arena match.", "Fixed One Segment Battleground.", diff --git a/core/parser.lua b/core/parser.lua index b351c73cf..731c9385d 100755 --- a/core/parser.lua +++ b/core/parser.lua @@ -3729,6 +3729,11 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1 return end + --do not register ress if not in combat + if (not Details.in_combat) then + return + end + _current_misc_container.need_refresh = true ------------------------------------------------------------------------------------------------ diff --git a/core/plugins_raid.lua b/core/plugins_raid.lua index bd7bdd03d..ba4ce154b 100644 --- a/core/plugins_raid.lua +++ b/core/plugins_raid.lua @@ -49,6 +49,12 @@ _detalhes.RaidTables:EnableRaidMode (self, plugin_name) end end + + --force hide wait for plugins + if (_G["DetailsWaitFrameBG"..self.meu_id] and _G["DetailsWaitForPluginFrame" .. self.meu_id]) then + _G["DetailsWaitForPluginFrame" .. self.meu_id]:Hide() + _G["DetailsWaitFrameBG"..self.meu_id]:Hide() + end end function _detalhes.RaidTables:EnableRaidMode (instance, plugin_name, from_cooltip, from_mode_menu) @@ -215,6 +221,12 @@ GameCooltip:ExecFunc (instance.baseframe.cabecalho.atributo) --instance _detalhes.popup:ExecFunc (DeleteButton) end + + --force hide wait for plugins + if (_G["DetailsWaitFrameBG"..instance.meu_id] and _G["DetailsWaitForPluginFrame" .. instance.meu_id]) then + _G["DetailsWaitForPluginFrame" .. instance.meu_id]:Hide() + _G["DetailsWaitFrameBG"..instance.meu_id]:Hide() + end else if (not instance.wait_for_plugin) then instance:CreateWaitForPlugin() diff --git a/core/windows.lua b/core/windows.lua index 2516c318a..ac90c6a2d 100644 --- a/core/windows.lua +++ b/core/windows.lua @@ -966,44 +966,53 @@ local WaitForPluginFrame = CreateFrame ("frame", "DetailsWaitForPluginFrame" .. self.meu_id, UIParent,"BackdropTemplate") local WaitTexture = WaitForPluginFrame:CreateTexture (nil, "overlay") - WaitTexture:SetTexture ("Interface\\UNITPOWERBARALT\\Mechanical_Circular_Frame") - WaitTexture:SetPoint ("center", WaitForPluginFrame) - WaitTexture:SetWidth (180) - WaitTexture:SetHeight (180) + WaitTexture:SetTexture ("Interface\\CHARACTERFRAME\\Disconnect-Icon") + WaitTexture:SetWidth(64/2) + WaitTexture:SetHeight(64/2) + --WaitTexture:SetDesaturated(true) + --WaitTexture:SetVertexColor(1, 1, 1, 0.3) WaitForPluginFrame.wheel = WaitTexture local RotateAnimGroup = WaitForPluginFrame:CreateAnimationGroup() - local rotate = RotateAnimGroup:CreateAnimation ("Rotation") - rotate:SetDegrees (360) - rotate:SetDuration (60) - RotateAnimGroup:SetLooping ("repeat") - - local bgpanel = gump:NewPanel (UIParent, UIParent, "DetailsWaitFrameBG"..self.meu_id, nil, 120, 30, false, false, false) + local rotate = RotateAnimGroup:CreateAnimation ("Alpha") + --rotate:SetDegrees (360) + --rotate:SetDuration (5) + rotate:SetFromAlpha(0.8) + rotate:SetToAlpha(1) + --RotateAnimGroup:SetLooping ("repeat") + rotate:SetTarget(WaitTexture) + + local bgpanel = gump:NewPanel (WaitForPluginFrame, WaitForPluginFrame, "DetailsWaitFrameBG"..self.meu_id, nil, 120, 30, false, false, false) bgpanel:SetPoint ("center", WaitForPluginFrame, "center") bgpanel:SetBackdrop ({bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background"}) bgpanel:SetBackdropColor (.2, .2, .2, 1) - local label = gump:NewLabel (UIParent, UIParent, nil, nil, Loc ["STRING_WAITPLUGIN"]) --> localize-me - label.color = "silver" + local label = gump:NewLabel (bgpanel, bgpanel, nil, nil, Loc ["STRING_WAITPLUGIN"]) + label.color = "white" label:SetPoint ("center", WaitForPluginFrame, "center") - label:SetJustifyH ("center") + label:SetJustifyH ("left") label:Hide() + WaitTexture:SetPoint("right", label.widget, "topleft", 12, -7) - WaitForPluginFrame:Hide() + WaitForPluginFrame:Hide() self.wait_for_plugin_created = true function self:WaitForPlugin() self:ChangeIcon ([[Interface\GossipFrame\ActiveQuestIcon]]) - if (WaitForPluginFrame:IsShown() and WaitForPluginFrame:GetParent() == self.baseframe) then - self.waiting_pid = self:ScheduleTimer ("ExecDelayedPlugin1", 5, self) - end + --if (WaitForPluginFrame:IsShown() and WaitForPluginFrame:GetParent() == self.baseframe) then + -- self.waiting_pid = self:ScheduleTimer ("ExecDelayedPlugin1", 5, self) + --end WaitForPluginFrame:SetParent (self.baseframe) WaitForPluginFrame:SetAllPoints (self.baseframe) - local size = math.max (self.baseframe:GetHeight()* 0.35, 100) - WaitForPluginFrame.wheel:SetWidth (size) - WaitForPluginFrame.wheel:SetHeight (size) + bgpanel:ClearAllPoints() + bgpanel:SetPoint("topleft", self.baseframe, 0, 0) + bgpanel:SetPoint("bottomright", self.baseframe, 0, 0) + + --local size = math.max (self.baseframe:GetHeight()* 0.35, 100) + --WaitForPluginFrame.wheel:SetWidth (size) + --WaitForPluginFrame.wheel:SetHeight (size) WaitForPluginFrame:Show() label:Show() bgpanel:Show() diff --git a/frames/window_custom_scripts.lua b/frames/window_custom_scripts.lua new file mode 100644 index 000000000..1a6001b80 --- /dev/null +++ b/frames/window_custom_scripts.lua @@ -0,0 +1,84 @@ + + +local Details = _G._detalhes +local DF = _G.DetailsFramework +local _ + +--local AceComm = LibStub ("AceComm-3.0") +--local AceSerializer = LibStub ("AceSerializer-3.0") +local Loc = LibStub("AceLocale-3.0"):GetLocale("Details") + +local CONST_MENU_X_POSITION = 10 +local CONST_MENU_Y_POSITION = -40 +local CONST_MENU_WIDTH = 160 +local CONST_MENU_HEIGHT = 20 + +local CONST_INFOBOX_X_POSITION = 220 +local CONST_EDITBUTTONS_X_POSITION = 560 + +local CONST_EDITBOX_Y_POSITION = -200 +local CONST_EDITBOX_WIDTH = 900 +local CONST_EDITBOX_HEIGHT = 370 + +local CONST_EDITBOX_BUTTON_WIDTH = 80 +local CONST_EDITBOX_BUTTON_HEIGHT = 20 + +local CONST_BUTTON_TEMPLATE = DF:GetTemplate ("button", "OPTIONS_BUTTON_TEMPLATE") +local CONST_TEXTENTRY_TEMPLATE = DF:GetTemplate ("button", "OPTIONS_BUTTON_TEMPLATE") + +DF:InstallTemplate ("button", "DETAILS_CUSTOMDISPLAY_CODE_BUTTONS", + { + icon = {texture = [[Interface\BUTTONS\UI-GuildButton-PublicNote-Up]]}, + width = 160, + }, + "DETAILS_PLUGIN_BUTTON_TEMPLATE" +) + +DF:InstallTemplate ("button", "DETAILS_CUSTOMDISPLAY_REGULAR_BUTTON", + { + width = 130, + }, + "DETAILS_PLUGIN_BUTTON_TEMPLATE" +) + +DF:InstallTemplate ("button", "DETAILS_CUSTOMDISPLAY_CODE_BOX", { + backdrop = {edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true}, + backdropcolor = {.2, .2, .2, 0.6}, + backdropbordercolor = {0, 0, 0, 1}, +}) +DF:InstallTemplate ("button", "DETAILS_CUSTOMDISPLAY_CODE_BOX_EXPANDED", { + backdrop = {edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true}, + backdropcolor = {.2, .2, .2, 1}, + backdropbordercolor = {0, 0, 0, 1}, +}) +DF:InstallTemplate ("button", "DETAILS_CUSTOMDISPLAY_CODE_BOX_BUTTON", { + backdrop = {edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true}, + backdropcolor = {.2, .2, .2, 1}, + backdropbordercolor = {0, 0, 0, 1}, +}) + +DF:NewColor ("DETAILS_CUSTOMDISPLAY_ICON", .7, .6, .5, 1) + +local CONST_CODETEXTENTRY_TEMPLATE = DF:GetTemplate ("button", "DETAILS_CUSTOMDISPLAY_CODE_BOX") +local CONST_CODETEXTENTRYEXPANDED_TEMPLATE = DF:GetTemplate ("button", "DETAILS_CUSTOMDISPLAY_CODE_BOX_EXPANDED") +local CONST_CODETEXTENTRYBUTTON_TEMPLATE = DF:GetTemplate ("button", "DETAILS_CUSTOMDISPLAY_CODE_BOX_BUTTON") +local CONST_CODETEXTENTRY_OPENCODEBUTTONS_TEMPLATE = DF:GetTemplate ("button", "DETAILS_CUSTOMDISPLAY_CODE_BUTTONS") +local CONST_REGULAR_BUTTON_TEMPLATE = DF:GetTemplate ("button", "DETAILS_CUSTOMDISPLAY_REGULAR_BUTTON") + + +--new script button + + +--search script box + + +--control buttons like import, export, delete, restore + + +--build the left menu, this menu has all scripts to edit + + +--build the script properties panel with name, icon, etc + + +-- \ No newline at end of file diff --git a/frames/window_switch.lua b/frames/window_switch.lua index 29e14a512..68c5aeac0 100644 --- a/frames/window_switch.lua +++ b/frames/window_switch.lua @@ -217,6 +217,20 @@ do local sub_attribute = self.sub_attribute local instance = all_switch.instance + --check if is a plugin button + if (self.isPlugin) then + if (_detalhes.RaidTables.NameTable[self.pluginName]) then + _detalhes.RaidTables:EnableRaidMode (instance, self.pluginName) + elseif (_detalhes.SoloTables.NameTable [self.pluginName]) then + _detalhes.SoloTables:EnableSoloMode (instance, self.pluginName) + else + _detalhes:Msg ("Plugin not found.") + end + + all_switch:Hide() + return + end + if (instance.modo == _detalhes._detalhes_props["MODO_ALONE"] or instance.modo == _detalhes._detalhes_props["MODO_RAID"]) then instance:AlteraModo (instance, 2) end @@ -415,11 +429,15 @@ do end --> update plugins - local script_index = 6 + local script_index = _detalhes.atributos[0]+2 local button_index = 1 all_switch.x = all_switch.x + 130 all_switch.y = -28 + for _, button in ipairs (all_switch.buttons[script_index]) do + button:Hide() + end + --build raid plugins list local raidPlugins = _detalhes.RaidTables:GetAvailablePlugins() if (#raidPlugins >= 0) then @@ -427,8 +445,6 @@ do --if a plugin has the member 'NoMenu', it won't be shown on menus to select plugins if (ptable[3].__enabled and not ptable[3].NoMenu) then --PluginName, PluginIcon, PluginObject, PluginAbsoluteName - --CoolTip:AddMenu (2, _detalhes.RaidTables.EnableRaidMode, instancia, ptable[4], true, ptable[1], ptable[2], true) - local button = all_switch.buttons [script_index] [button_index] if (not button) then button = create_all_switch_button(script_index, button_index, all_switch.x, all_switch.y) @@ -436,6 +452,10 @@ do all_switch.y = all_switch.y - 17 end + --set the button to select the plugin + button.isPlugin = true + button.pluginName = ptable[4] + button.text:SetText(ptable[1]) all_switch.check_text_size(button.text) button.texture:SetTexture (ptable[2]) @@ -1055,9 +1075,27 @@ function _detalhes:FastSwitch (button, bookmark, bookmark_number, select_new) end if (bookmark.atributo == "plugin") then + --> is a plugin, check if is a raid or solo plugin if (_detalhes.RaidTables.NameTable [bookmark.sub_atributo]) then - _detalhes.RaidTables:EnableRaidMode (_detalhes.switch.current_instancia, bookmark.sub_atributo) + + local raidPlugins = _detalhes.RaidTables:GetAvailablePlugins() + local isAvailable = false + if (#raidPlugins >= 0) then + for i, ptable in ipairs (raidPlugins) do + --check if the plugin is available + if (ptable[4] == bookmark.sub_atributo) then + isAvailable = true + end + end + end + + if (isAvailable) then + _detalhes.RaidTables:EnableRaidMode (_detalhes.switch.current_instancia, bookmark.sub_atributo) + else + Details:Msg("plugin already in use in another window. If you are wondering where, check the Orange Gear > Window Control.") --localize-me + end + elseif (_detalhes.SoloTables.NameTable [bookmark.sub_atributo]) then _detalhes.SoloTables:EnableSoloMode (_detalhes.switch.current_instancia, bookmark.sub_atributo) else @@ -1145,6 +1183,7 @@ function _detalhes.switch:Update() local name local vcolor local add + local textColor = "white" if (options and options.sub_atributo) then if (options.atributo == 5) then --> custom @@ -1163,12 +1202,31 @@ function _detalhes.switch:Update() end elseif (options.atributo == "plugin") then --> plugin + local plugin = _detalhes:GetPlugin (options.sub_atributo) if (plugin) then + + local raidPlugins = _detalhes.RaidTables:GetAvailablePlugins() + local isAvailable = false + if (#raidPlugins >= 0) then + for i, ptable in ipairs (raidPlugins) do + --check if the plugin is available + if (ptable[4] == plugin.real_name) then + isAvailable = true + end + end + end + + if (isAvailable) then + vcolor = vertex_color_default + else + vcolor = {.35, .35, .35, .35} + textColor = "gray" + end icone = plugin.__icon coords = default_coords name = plugin.__name - vcolor = vertex_color_default + else icone = [[Interface\AddOns\Details\images\icons]] coords = add_coords @@ -1208,6 +1266,7 @@ function _detalhes.switch:Update() end button.button2.texto:SetSize (width, height) + DetailsFramework:SetFontColor(button.button2.texto, textColor) button.textureNormal:SetTexture (icone, true) button.textureNormal:SetTexCoord (_unpack (coords)) @@ -1453,7 +1512,7 @@ end local left_box_on_click = function (self, button) if (button == "RightButton") then --select another bookmark - _detalhes:FastSwitch (self, bookmark, self.bookmark_number, true) + _detalhes:FastSwitch (self, nil, self.bookmark_number, true) else --change the display local bookmark = _detalhes.switch.table [self.bookmark_number] @@ -1490,14 +1549,6 @@ local change_icon = function (self, icon1, icon2, icon3, icon4) end function _detalhes.switch:NewSwitchButton (frame, index, x, y, rightButton) - - local paramTable = { - ["instancia"] = _detalhes.switch.current_instancia, - ["button"] = index, - ["atributo"] = nil, - ["sub_atributo"] = nil - } - --botao dentro da caixa local button = CreateFrame ("button", "DetailsSwitchPanelButton_1_"..index, frame, "BackdropTemplate") --botao com o icone button:SetSize (15, 24) @@ -1577,4 +1628,4 @@ function _detalhes.switch:NewSwitchButton (frame, index, x, y, rightButton) return button end ---doa + diff --git a/functions/coach.lua b/functions/coach.lua index 8a1eb7ae4..2c15887c4 100644 --- a/functions/coach.lua +++ b/functions/coach.lua @@ -82,7 +82,14 @@ function Details.Coach.Client.SendDataToRL() print("Details Coach sending data to RL.") end - local data = Details.packFunctions.GetAllData() + --local data = Details.packFunctions.GetAllData() + local okay, data = pcall(Details.packFunctions.GetAllData) + if (not okay) then + Details:Msg("Error on GetAllData():", data) + Details.Coach.Client.UpdateTicker:Cancel() + return + end + if (data and Details.Coach.Client.coachName) then Details:SendCommMessage(_G.DETAILS_PREFIX_NETWORK, Details:Serialize(_G.DETAILS_PREFIX_COACH, UnitName("player"), GetRealmName(), Details.realversion, "CDT", data), "WHISPER", Details.Coach.Client.coachName) end @@ -134,6 +141,15 @@ function Details.Coach.StartUp() end function eventListener.OnEnterCombat() + --[=[ --debug solo + Details.Coach.SendRLCombatStartNotify("Ditador") + --start a timer to send data to the coach + if (Details.Coach.Client.UpdateTicker) then + Details.Coach.Client.UpdateTicker:Cancel() + end + Details.Coach.Client.UpdateTicker = Details.Schedules.NewTicker(1.5, Details.Coach.Client.SendDataToRL) + --]=] + --send a notify to coach telling a new combat has started if (Details.Coach.Client.IsEnabled()) then if (IsInRaid() and isInRaidZone()) then diff --git a/functions/pack.lua b/functions/pack.lua index dd17ca98e..23eb52a66 100644 --- a/functions/pack.lua +++ b/functions/pack.lua @@ -27,6 +27,7 @@ local actorInformation = {} local actorInformationIndexes = {} local actorDamageInfo = {} local actorHealInfo = {} +local actorUtilityInfo = {} --flags local REACTION_HOSTILE = 0x00000040 @@ -55,7 +56,8 @@ local isDebugging = false function Details.packFunctions.GetAllData() local combat = Details:GetCurrentCombat() - local packedData = Details.packFunctions.PackCombatData(combat, 0x13) + local packedData = Details.packFunctions.PackCombatData(combat, 0x1B) + --local packedData = Details.packFunctions.PackCombatData(combat, 0x13) return packedData end @@ -81,6 +83,7 @@ function Details.packFunctions.PackCombatData(combatObject, flags) table.wipe(actorInformationIndexes) table.wipe(actorDamageInfo) table.wipe(actorHealInfo) + table.wipe(actorUtilityInfo) --reset the serial counter entitySerialCounter = 0 @@ -104,13 +107,20 @@ function Details.packFunctions.PackCombatData(combatObject, flags) end if (bit.band(flags, 0x1) ~= 0) then + print("pack damage") Details.packFunctions.PackDamage(combatObject) end if (bit.band(flags, 0x2) ~= 0) then + print("pack heal") Details.packFunctions.PackHeal(combatObject) end + if (bit.band(flags, 0x8) ~= 0) then + print("pack utility") + Details.packFunctions.PackUtility(combatObject) + end + --> prepare data to send over network local exportedString = flags .. "," @@ -142,6 +152,14 @@ function Details.packFunctions.PackCombatData(combatObject, flags) end end + --add the utility actors data + if (bit.band(flags, 0x8) ~= 0) then + exportedString = exportedString .. "!U" .. "," + for index, data in ipairs(actorUtilityInfo) do + exportedString = exportedString .. data .. "," + end + end + --main stuff --print("finished export (debug):", exportedString) --debug --print("uncompressed (debug):", format("%.2f", #exportedString/1024), "KBytes") @@ -154,13 +172,15 @@ function Details.packFunctions.PackCombatData(combatObject, flags) --Details:Dump({exportedString}) + print("EXPORTING STRING FINAL:", exportedString) + --compress local LibDeflate = _G.LibStub:GetLibrary("LibDeflate") local dataCompressed = LibDeflate:CompressDeflate(exportedString, {level = 9}) local dataEncoded = LibDeflate:EncodeForWoWAddonChannel(dataCompressed) --print("encoded for WowAddonChannel (debug):", format("%.2f", #dataEncoded/1024), "KBytes") - + return dataEncoded end @@ -895,6 +915,746 @@ function Details.packFunctions.UnPackHeal(currentCombat, combatData, tablePositi return tablePosition end +-------------------------------------------------------------------------------------------------- +--> pack utility data + +--pack utility passes the player utility info + pets the player own +--each player will also send an enemy, the enemy will be in order of raidIndex of the player +function Details.packFunctions.PackUtility(combatObject) + + if (isDebugging) then + print("PackUtility(): start.") + end + + --store actorObjects to pack + local actorsToPack = {} + + --get the player object from the combat > utility container + local playerName = UnitName("player") + local playerObject = combatObject:GetActor(DETAILS_ATTRIBUTE_MISC, playerName) + if (not playerObject) then + if (isDebugging) then + print("PackUtility(): return | no player object.") + end + return + end + + tinsert(actorsToPack, playerObject) + + --get the list of pets the player own + local playerPets = playerObject.pets + for _, petName in ipairs(playerPets) do + local petObject = combatObject:GetActor(DETAILS_ATTRIBUTE_MISC, petName) + if (petObject) then + tinsert(actorsToPack, petObject) + end + end + + local playerIndex = _G.UnitInRaid("player") + + if (not playerIndex) then --no player index + if (isDebugging) then + print("PackUtility(): return | no player index found.") + end + return + end + + --get all npc enemies and sort them by their respaw id + local allActors = combatObject[DETAILS_ATTRIBUTE_MISC]._ActorTable + local allEnemies = {} --this have subtables, format: {actorObject, spawnId} + + for i = 1, #allActors do + --get the actor object + local actor = allActors[i] + --check if is an enemy or neutral + if (actor:IsNeutralOrEnemy()) then + --get the spawnId + local spawnId = select(7, strsplit("-", actor.serial)) + if (spawnId) then + --convert hex to number + spawnId = tonumber(spawnId:sub(1, 10), 16) + if (spawnId) then + --first index is the actorObject, the second index is the spawnId to sort enemies + tinsert(allEnemies, {actor, spawnId}) + end + end + end + end + --sort enemies by their spawnId + table.sort(allEnemies, Details.Sort2) + + local allPlayerNames = {} + for i = 1, 20 do + local name, _, subgroup = GetRaidRosterInfo(i) + if (name) then --maybe the group has less than 20 players + name = _G.Ambiguate(name, "none") + if (name and subgroup <= 4) then + tinsert(allPlayerNames, name) + end + end + end + table.sort(allPlayerNames, function(t1, t2) return t1 < t2 end) + + local playerName = UnitName("player") + for i = 1, #allPlayerNames do + if (playerName == allPlayerNames[i]) then + playerIndex = i + break + end + end + + --this is the enemy that this player has to send + local enemyObjectToSend = allEnemies[playerIndex] and allEnemies[playerIndex][1] + if (enemyObjectToSend) then + tinsert(actorsToPack, enemyObjectToSend) + end + + --add the actors to actor information table + for _, actorObject in ipairs(actorsToPack) do + --check if already has the actor information + local indexToActorInfo = actorInformationIndexes[actorObject.nome] --actor name + if (not indexToActorInfo) then + --need to add the actor general information into the actor information table + indexToActorInfo = Details.packFunctions.AddActorInformation(actorObject) + end + end + + for i = 1, #actorsToPack do + --get the actor object + local actor = actorsToPack[i] + local indexToActorInfo = actorInformationIndexes[actor.nome] + + --where the information of this actor starts + local currentIndex = #actorUtilityInfo + 1 + + --[1] index where is stored the actor info like name, class, spec, etc + actorUtilityInfo[currentIndex] = indexToActorInfo --[1] + + --[=[ + interrupt_spells._ActorTable [spellId] = { + [2139] = { + ["id"] = 2139, + ["interrompeu_oque"] = { + [337110] = 1, + }, + ["targets"] = { + ["Baroness Frieda"] = 1, + }, + ["counter"] = 1, + }, + } + + cooldowns_defensive + cooldowns_defensive_targets + ["cooldowns_defensive_spells"] = { + ["_ActorTable"] = { + [45438] = { + ["id"] = 45438, + ["targets"] = { + ["Relune-Tichondrius"] = 1, + }, + ["counter"] = 1, + }, + }, + ["tipo"] = 9, + }, + + cc_break + cc_break_oque + cc_break_targets + ["cc_break_spells"] = { + ["_ActorTable"] = { + [42223] = { + ["cc_break_oque"] = { + [197214] = 2, + }, + ["id"] = 42223, + ["targets"] = { + ["Castellan Niklaus"] = 1, + ["Baroness Frieda"] = 1, + }, + ["cc_break"] = 2, + ["counter"] = 0, + }, + }, + }, + + ["cc_done_spells"] = { + ["_ActorTable"] = { + [127797] = { + ["id"] = 127797, + ["targets"] = { + ["Castellan Niklaus"] = 1, + ["Lord Stavros"] = 1, + ["Baroness Frieda"] = 1, + }, + ["counter"] = 3, + }, + }, + ["tipo"] = 9, + }, + + ["dispell_spells"] = { + ["_ActorTable"] = { + [77130] = { + ["targets"] = { + ["Magicgreenie-BleedingHollow"] = 1, + }, + ["id"] = 77130, + ["dispell_oque"] = { + [337110] = 1, + }, + ["dispell"] = 1, + ["counter"] = 0, + }, + }, + ["tipo"] = 9, + }, + + ress + ress_targets + ["ress_spells"] = { + ["_ActorTable"] = { + [212048] = { + ["id"] = 212048, + ["ress"] = 7, + ["targets"] = { + ["Freezerbeef-Illidan"] = 1, + ["Jilkari-ThoriumBrotherhood"] = 1, + ["Ditador"] = 1, + ["Caller-Thrall"] = 1, + ["Thebappo-Tichondrius"] = 1, + ["Superskourge-Area52"] = 1, + ["Rorschak-Area52"] = 1, + }, + ["counter"] = 0, + }, + }, + ["tipo"] = 9, + }, + + --]=] + + --> cooldowns, pack player cooldowns used + actorUtilityInfo [#actorUtilityInfo + 1] = "C" + local cooldownContainer = actor.cooldowns_defensive_spells and actor.cooldowns_defensive_spells._ActorTable + local totalSpellIndexes = 0 + + if (cooldownContainer) then + --reserve an index to tell the length of spells + actorUtilityInfo [#actorUtilityInfo + 1] = 0 + local reservedSpellSizeIndex = #actorUtilityInfo + + for spellId, spellInfo in pairs(cooldownContainer) do + local spellCounter = spellInfo.counter + local spellTargets = spellInfo.targets + + actorUtilityInfo [#actorUtilityInfo + 1] = floor(spellId) + actorUtilityInfo [#actorUtilityInfo + 1] = floor(spellCounter) + totalSpellIndexes = totalSpellIndexes + 2 + + --build targets + local targetsSize = Details.packFunctions.CountTableEntriesValid(spellTargets) * 2 + actorUtilityInfo [#actorUtilityInfo + 1] = targetsSize + totalSpellIndexes = totalSpellIndexes + 1 + + for actorName, totalDone in pairs(spellTargets) do + actorUtilityInfo [#actorUtilityInfo + 1] = actorName + actorUtilityInfo [#actorUtilityInfo + 1] = floor(totalDone) + totalSpellIndexes = totalSpellIndexes + 2 + end + end + + --amount of indexes spells are using + actorUtilityInfo[reservedSpellSizeIndex] = totalSpellIndexes + else + actorUtilityInfo [#actorUtilityInfo + 1] = 0 + end + + --> interrupts, pack player interrupts + actorUtilityInfo [#actorUtilityInfo + 1] = "I" + local interruptsContainer = actor.interrupt_spells and actor.interrupt_spells._ActorTable + local totalSpellIndexes = 0 + + if (interruptsContainer) then + --reserve an index to tell the length of spells + actorUtilityInfo [#actorUtilityInfo + 1] = 0 + local reservedSpellSizeIndex = #actorUtilityInfo + + for spellId, spellInfo in pairs(interruptsContainer) do + local spellCounter = spellInfo.counter + local spellTargets = spellInfo.targets + local whatGotInterrupted = spellInfo.interrompeu_oque + + actorUtilityInfo [#actorUtilityInfo + 1] = floor(spellId) + actorUtilityInfo [#actorUtilityInfo + 1] = floor(spellCounter) --spellCounter is nil + totalSpellIndexes = totalSpellIndexes + 2 + + --build targets + local targetsSize = Details.packFunctions.CountTableEntriesValid(spellTargets) * 2 + actorUtilityInfo [#actorUtilityInfo + 1] = targetsSize + totalSpellIndexes = totalSpellIndexes + 1 + + for actorName, totalDone in pairs(spellTargets) do + actorUtilityInfo [#actorUtilityInfo + 1] = actorName + actorUtilityInfo [#actorUtilityInfo + 1] = floor(totalDone) + totalSpellIndexes = totalSpellIndexes + 2 + end + + --build what was interrupted by the spell + local interruptedSize = Details.packFunctions.CountTableEntriesValid(whatGotInterrupted) * 2 + actorUtilityInfo [#actorUtilityInfo + 1] = interruptedSize + totalSpellIndexes = totalSpellIndexes + 1 + + for spellId, totalDone in pairs(whatGotInterrupted) do + actorUtilityInfo [#actorUtilityInfo + 1] = spellId + actorUtilityInfo [#actorUtilityInfo + 1] = floor(totalDone) + totalSpellIndexes = totalSpellIndexes + 2 + end + end + + --amount of indexes spells are using + actorUtilityInfo[reservedSpellSizeIndex] = totalSpellIndexes + else + actorUtilityInfo [#actorUtilityInfo + 1] = 0 + end + + --> cc break, pack player crowd control breaks + actorUtilityInfo [#actorUtilityInfo + 1] = "B" + local ccBreakContainer = actor.cc_break_spells and actor.cc_break_spells._ActorTable + local totalSpellIndexes = 0 + + if (ccBreakContainer) then + --reserve an index to tell the length of spells + actorUtilityInfo [#actorUtilityInfo + 1] = 0 + local reservedSpellSizeIndex = #actorUtilityInfo + + for spellId, spellInfo in pairs(ccBreakContainer) do + local spellCounter = spellInfo.cc_break + local spellTargets = spellInfo.targets + local whatGotCCBroken = spellInfo.cc_break_oque + + actorUtilityInfo [#actorUtilityInfo + 1] = floor(spellId) + actorUtilityInfo [#actorUtilityInfo + 1] = floor(spellCounter) + totalSpellIndexes = totalSpellIndexes + 2 + + --build targets + local targetsSize = Details.packFunctions.CountTableEntriesValid(spellTargets) * 2 + actorUtilityInfo [#actorUtilityInfo + 1] = targetsSize + totalSpellIndexes = totalSpellIndexes + 1 + + for actorName, totalDone in pairs(spellTargets) do + actorUtilityInfo [#actorUtilityInfo + 1] = actorName + actorUtilityInfo [#actorUtilityInfo + 1] = floor(totalDone) + totalSpellIndexes = totalSpellIndexes + 2 + end + + --build what was interrupted by the spell + local ccBrokenSize = Details.packFunctions.CountTableEntriesValid(whatGotCCBroken) * 2 + actorUtilityInfo [#actorUtilityInfo + 1] = ccBrokenSize + totalSpellIndexes = totalSpellIndexes + 1 + + for spellId, totalDone in pairs(whatGotCCBroken) do + actorUtilityInfo [#actorUtilityInfo + 1] = spellId + actorUtilityInfo [#actorUtilityInfo + 1] = floor(totalDone) + totalSpellIndexes = totalSpellIndexes + 2 + end + end + + --amount of indexes spells are using + actorUtilityInfo[reservedSpellSizeIndex] = totalSpellIndexes + else + actorUtilityInfo [#actorUtilityInfo + 1] = 0 + end + + --> dispel, pack player dispels done + actorUtilityInfo [#actorUtilityInfo + 1] = "D" + local dispelsContainer = actor.dispell_spells and actor.dispell_spells._ActorTable + local totalSpellIndexes = 0 + + if (dispelsContainer) then + --reserve an index to tell the length of spells + actorUtilityInfo [#actorUtilityInfo + 1] = 0 + local reservedSpellSizeIndex = #actorUtilityInfo + + for spellId, spellInfo in pairs(dispelsContainer) do + local spellTotal = spellInfo.dispell + local spellTargets = spellInfo.targets + local whatGotDispelled = spellInfo.dispell_oque + + actorUtilityInfo [#actorUtilityInfo + 1] = floor(spellId) + actorUtilityInfo [#actorUtilityInfo + 1] = floor(spellTotal) + totalSpellIndexes = totalSpellIndexes + 2 + + --build targets + local targetsSize = Details.packFunctions.CountTableEntriesValid(spellTargets) * 2 + actorUtilityInfo [#actorUtilityInfo + 1] = targetsSize + totalSpellIndexes = totalSpellIndexes + 1 + + for actorName, totalDone in pairs(spellTargets) do + actorUtilityInfo [#actorUtilityInfo + 1] = actorName + actorUtilityInfo [#actorUtilityInfo + 1] = floor(totalDone) + totalSpellIndexes = totalSpellIndexes + 2 + end + + --build what was dispelled by the spell + local dispelsSize = Details.packFunctions.CountTableEntriesValid(whatGotDispelled) * 2 + actorUtilityInfo [#actorUtilityInfo + 1] = dispelsSize + totalSpellIndexes = totalSpellIndexes + 1 + + for spellId, totalDone in pairs(whatGotDispelled) do + actorUtilityInfo [#actorUtilityInfo + 1] = spellId + actorUtilityInfo [#actorUtilityInfo + 1] = floor(totalDone) + totalSpellIndexes = totalSpellIndexes + 2 + end + end + + --amount of indexes spells are using + actorUtilityInfo[reservedSpellSizeIndex] = totalSpellIndexes + else + actorUtilityInfo [#actorUtilityInfo + 1] = 0 + end + + --> ress, pack player ress performed + actorUtilityInfo [#actorUtilityInfo + 1] = "R" + local ressContainer = actor.ress_spells and actor.ress_spells._ActorTable + local totalSpellIndexes = 0 + + if (ressContainer) then + --reserve an index to tell the length of spells + actorUtilityInfo [#actorUtilityInfo + 1] = 0 + local reservedSpellSizeIndex = #actorUtilityInfo + + for spellId, spellInfo in pairs(ressContainer) do + local spellTotal = spellInfo.ress + local spellTargets = spellInfo.targets + + actorUtilityInfo [#actorUtilityInfo + 1] = floor(spellId) + actorUtilityInfo [#actorUtilityInfo + 1] = floor(spellTotal) + totalSpellIndexes = totalSpellIndexes + 2 + + --build targets + local targetsSize = Details.packFunctions.CountTableEntriesValid(spellTargets) * 2 + actorUtilityInfo [#actorUtilityInfo + 1] = targetsSize + totalSpellIndexes = totalSpellIndexes + 1 + + for actorName, totalDone in pairs(spellTargets) do + actorUtilityInfo [#actorUtilityInfo + 1] = actorName + actorUtilityInfo [#actorUtilityInfo + 1] = floor(totalDone) + totalSpellIndexes = totalSpellIndexes + 2 + end + end + + --amount of indexes spells are using + actorUtilityInfo[reservedSpellSizeIndex] = totalSpellIndexes + else + actorUtilityInfo [#actorUtilityInfo + 1] = 0 + end + end + + if (isDebugging) then + print("PackUtility(): done.") + end +end + +function Details.packFunctions.UnPackUtility(currentCombat, combatData, tablePosition) + if (isDebugging) then + print("UnPackUtility(): start.") + end + + --get the utility container + local utilityContainer = currentCombat[DETAILS_ATTRIBUTE_MISC] + + --loop from 1 to 199, the amount of actors store is unknown + --todo: it's only unpacking the first actor from the table, e.g. theres izimode and eye of corruption, after export it only shows the eye of corruption + --table position does not move forward + for i = 1, 199 do + --actor information index in the combatData table + --this index gives the position where the actor name, class, spec are stored + local actorReference = tonumber(combatData[tablePosition]) --[1] + local actorName, actorFlag, serialNumber, class, spec = Details.packFunctions.RetriveActorInformation(combatData, actorReference) + + if (isDebugging) then + print("UnPackUtility(): Retrivied Data From " .. (actorReference or "nil") .. ":", actorName, actorFlag, serialNumber, class, spec) + end + + --check if all utility actors has been processed + --if there's no actor name it means it reached the end + if (not actorName) then + if (isDebugging) then + print("UnPackUtiliyu(): break | Utility loop has been stopped", "index:", i, "tablePosition:", tablePosition, "value:", combatData[tablePosition]) + end + break + end + + --get or create the actor object + local actorObject = utilityContainer:GetOrCreateActor(serialNumber, actorName, actorFlag, true) + + --set the actor class, spec and group + actorObject.classe = class + actorObject.spec = spec + actorObject.grupo = isActorInGroup(class, actorFlag) + actorObject.flag_original = actorFlag + --finished utility actor setup + --C - cooldowns + --I - interrupts + --B - cc break + --D - dispels + --R - ress + + --> copy back the actor cooldowns spells + tablePosition = tablePosition + 1 + tablePosition = tablePosition + 1 + + --amount of indexes used to store cooldowns spells for this actor + local spellsSize = tonumber(combatData[tablePosition]) --[7] + if (isDebugging) then + print("cooldowns size unpack:", spellsSize) + end + + tablePosition = tablePosition + 1 + + --check if there's cooldown data + if (spellsSize > 0) then + local newTotal = 0 + local newTargetsTable = {} + + local spellIndex = tablePosition + while(spellIndex < tablePosition + spellsSize) do + local spellId = tonumber(combatData[spellIndex]) --[1] + local spellTotal = tonumber(combatData[spellIndex+1]) --[2] + local targetsSize = tonumber(combatData[spellIndex+2]) --[3] + + local targetTable = Details.packFunctions.UnpackTable(combatData, spellIndex+2, true) + local spellObject = actorObject.cooldowns_defensive_spells:GetOrCreateSpell(spellId, true) + + spellObject.counter = spellTotal + spellObject.targets = targetTable + + for targetName, amount in pairs (spellObject.targets) do + newTargetsTable[targetName] = (newTargetsTable[targetName] or 0) + amount + newTotal = newTotal + amount + end + + spellIndex = spellIndex + targetsSize + 3 + end + + actorObject.cooldowns_defensive = newTotal + actorObject.cooldowns_defensive_targets = newTargetsTable + tablePosition = tablePosition + spellsSize --increase table position + end + + --> copy back the actor interrupts spells + --tablePosition = tablePosition + 1 + local startInterrupt = combatData[tablePosition] + tablePosition = tablePosition + 1 + + --amount of indexes used to store interrupt spells for this actor + local spellsSize = tonumber(combatData[tablePosition]) --[7] + if (isDebugging) then + print("interrupt size unpack:", spellsSize) + end + tablePosition = tablePosition + 1 + + if (spellsSize > 0) then + local newTotal = 0 + local newTargetsTable = {} + local newTargetWhatTable = {} + + local spellIndex = tablePosition + while(spellIndex < tablePosition + spellsSize) do + local spellId = tonumber(combatData[spellIndex]) --[1] + local spellTotal = tonumber(combatData[spellIndex+1]) --[2] + local targetsSize = tonumber(combatData[spellIndex+2]) --[3] + + local targetTable = Details.packFunctions.UnpackTable(combatData, spellIndex+2, true) + local spellObject = actorObject.interrupt_spells:GetOrCreateSpell(spellId, true) + + spellObject.counter = spellTotal + spellObject.targets = targetTable + + for targetName, amount in pairs (spellObject.targets) do + newTargetsTable[targetName] = (newTargetsTable[targetName] or 0) + amount + newTotal = newTotal + amount + end + + --interrupt what + spellIndex = spellIndex + targetsSize + 3 + local interruptWhatTableSize = combatData[spellIndex] + local interruptWhatTable = Details.packFunctions.UnpackTable(combatData, spellIndex, true) --table[index] is nil + spellObject.interrompeu_oque = interruptWhatTable + + for targetName, amount in pairs (spellObject.targets) do + newTargetWhatTable[targetName] = (newTargetWhatTable[targetName] or 0) + amount + end + + spellIndex = spellIndex + interruptWhatTableSize + 1 + end + + actorObject.interrupt = newTotal + actorObject.interrupt_targets = newTargetsTable + actorObject.interrompeu_oque = newTargetWhatTable + tablePosition = tablePosition + spellsSize --increase table position + end + + --> copy back the actor cc break spells + --tablePosition = tablePosition + 1 + local startCCBreak = combatData[tablePosition] + tablePosition = tablePosition + 1 + + --amount of indexes used to store cc break spells for this actor + local spellsSize = tonumber(combatData[tablePosition]) --[7] + if (isDebugging) then + print("cc break size unpack:", spellsSize) + end + tablePosition = tablePosition + 1 + + if (spellsSize > 0) then + local newTotal = 0 + local newTargetsTable = {} + local newTargetWhatTable = {} + + local spellIndex = tablePosition + while(spellIndex < tablePosition + spellsSize) do + local spellId = tonumber(combatData[spellIndex]) --[1] + local spellTotal = tonumber(combatData[spellIndex+1]) --[2] + local targetsSize = tonumber(combatData[spellIndex+2]) --[3] + + local targetTable = Details.packFunctions.UnpackTable(combatData, spellIndex+2, true) + local spellObject = actorObject.cc_break_spells:GetOrCreateSpell(spellId, true) + + spellObject.cc_break = spellTotal + spellObject.targets = targetTable + + for targetName, amount in pairs (spellObject.targets) do + newTargetsTable[targetName] = (newTargetsTable[targetName] or 0) + amount + newTotal = newTotal + amount + end + + --cc broke what + spellIndex = spellIndex + targetsSize + 3 + local ccBrokeWhatTableSize = combatData[spellIndex] + + local ccBrokeWhatTable = Details.packFunctions.UnpackTable(combatData, spellIndex, true) + spellObject.cc_break_oque = ccBrokeWhatTable + + for targetName, amount in pairs (spellObject.cc_break_oque) do + newTargetWhatTable[targetName] = (newTargetWhatTable[targetName] or 0) + amount + end + + spellIndex = spellIndex + ccBrokeWhatTableSize + 1 + end + + actorObject.cc_break = newTotal + actorObject.cc_break_targets = newTargetsTable + actorObject.cc_break_oque = newTargetWhatTable + tablePosition = tablePosition + spellsSize --increase table position + end + + --> copy back the actor dispel spells + --tablePosition = tablePosition + 1 + tablePosition = tablePosition + 1 + + --amount of indexes used to store dispel spells for this actor + local spellsSize = tonumber(combatData[tablePosition]) --[7] + if (isDebugging) then + print("dispel size unpack:", spellsSize) + end + tablePosition = tablePosition + 1 + + if (spellsSize > 0) then + local newTotal = 0 + local newTargetsTable = {} + local newTargetWhatTable = {} + + local spellIndex = tablePosition + while(spellIndex < tablePosition + spellsSize) do + local spellId = tonumber(combatData[spellIndex]) --[1] + local spellTotal = tonumber(combatData[spellIndex+1]) --[2] + local targetsSize = tonumber(combatData[spellIndex+2]) --[3] + + local targetTable = Details.packFunctions.UnpackTable(combatData, spellIndex+2, true) + local spellObject = actorObject.dispell_spells:GetOrCreateSpell(spellId, true) + + spellObject.dispell = spellTotal + spellObject.targets = targetTable + + for targetName, amount in pairs (spellObject.targets) do + newTargetsTable[targetName] = (newTargetsTable[targetName] or 0) + amount + newTotal = newTotal + amount + end + spellIndex = spellIndex + targetsSize + 3 + + --dispel what + local dispelWhatTableSize = combatData[spellIndex] + local dispelWhatTable = Details.packFunctions.UnpackTable(combatData, spellIndex, true) + spellObject.dispell_oque = dispelWhatTable + + for spellId, amount in pairs (spellObject.dispell_oque) do + newTargetWhatTable[spellId] = (newTargetWhatTable[spellId] or 0) + amount + end + + spellIndex = spellIndex + dispelWhatTableSize + 1 + end + + actorObject.dispell = newTotal + actorObject.dispell_targets = newTargetsTable + actorObject.dispell_oque = newTargetWhatTable + tablePosition = tablePosition + spellsSize --increase table position + end + + --ress + --ress_targets + --ress_spells + --> copy back the actor ress spells + --tablePosition = tablePosition + 1 + tablePosition = tablePosition + 1 + + --amount of indexes used to store ress spells for this actor + local spellsSize = tonumber(combatData[tablePosition]) --[7] + if (isDebugging) then + print("ress size unpack:", spellsSize) + end + tablePosition = tablePosition + 1 + + if (spellsSize > 0) then + local newTotal = 0 + local newTargetsTable = {} + + local spellIndex = tablePosition + while(spellIndex < tablePosition + spellsSize) do + local spellId = tonumber(combatData[spellIndex]) --[1] + local spellTotal = tonumber(combatData[spellIndex+1]) --[2] + local targetsSize = tonumber(combatData[spellIndex+2]) --[3] + + local targetTable = Details.packFunctions.UnpackTable(combatData, spellIndex+2, true) + local spellObject = actorObject.ress_spells:GetOrCreateSpell(spellId, true) + + spellObject.ress = spellTotal + spellObject.targets = targetTable + + for targetName, amount in pairs (spellObject.targets) do + newTargetsTable[targetName] = (newTargetsTable[targetName] or 0) + amount + newTotal = newTotal + amount + end + + spellIndex = spellIndex + targetsSize + 3 + end + + actorObject.ress = newTotal + actorObject.ress_targets = newTargetsTable + tablePosition = tablePosition + spellsSize --increase table position + end + end + + if (isDebugging) then + print("UnPackUtility(): done.") + end + + return tablePosition +end + + --this function does the same as the function above but does not create a new combat, it just add new information function Details.packFunctions.DeployPackedCombatData(packedCombatData) if (isDebugging) then @@ -982,6 +1742,23 @@ function Details.packFunctions.DeployPackedCombatData(packedCombatData) Details.packFunctions.UnPackHeal(currentCombat, combatData, tablePosition) end + if (bit.band(flags, 0x8) ~= 0) then + --find the index where the utility information start + for i = tablePosition, #combatData do + if (combatData[i] == "!U") then + tablePosition = i + 1 + break + end + end + + if (isDebugging) then + print("DeployPackedCombatData(): data has utility info, Utility Index:", tablePosition) + end + + --unpack utility + Details.packFunctions.UnPackUtility(currentCombat, combatData, tablePosition) + end + if (bit.band(flags, 0x10) == 0) then --set the start and end of combat time and date currentCombat:SetStartTime(combatData[INDEX_COMBAT_START_TIME]) diff --git a/functions/slash.lua b/functions/slash.lua index 5f0400b13..1f7aa306b 100644 --- a/functions/slash.lua +++ b/functions/slash.lua @@ -1540,10 +1540,18 @@ function SlashCmdList.DETAILS (msg, editbox) end --BFA BETA - elseif (msg == "update") then - _detalhes:CopyPaste ([[https://www.wowinterface.com/downloads/info23056-DetailsDamageMeter8.07.3.5.html]]) + --elseif (msg == "update") then + -- _detalhes:CopyPaste ([[https://www.wowinterface.com/downloads/info23056-DetailsDamageMeter8.07.3.5.html]]) + elseif (msg == "ec") then + if (rest and tonumber(rest)) then + local combatToErase = tonumber(rest) + tremove(_detalhes.tabela_historico.tabelas, combatToErase) + Details:Msg("combat erased.") + end + return + elseif (msg == "share") then local f = {} @@ -1659,6 +1667,8 @@ function SlashCmdList.DETAILS (msg, editbox) end end + + print("|", msg) print (" ") --local v = _detalhes.game_version .. "." .. (_detalhes.build_counter >= _detalhes.alpha_build_counter and _detalhes.build_counter or _detalhes.alpha_build_counter) diff --git a/functions/spells.lua b/functions/spells.lua index 6e1e1196e..49b9de730 100644 --- a/functions/spells.lua +++ b/functions/spells.lua @@ -8,1069 +8,1259 @@ do _detalhes.PotionList [spellID] = true end - _detalhes.SpecSpellList = { --~spec - - -- havoc demon hunter --577 - [188499] = 577, -- Blade Dance - [320402] = 577, -- Blade Dance - [203550] = 577, -- Blind Fury - [198589] = 577, -- Blur - [320407] = 577, -- Blur - [320374] = 577, -- Burning Hatred - [179057] = 577, -- Chaos Nova - [320412] = 577, -- Chaos Nova - [162794] = 577, -- Chaos Strike - [197125] = 577, -- Chaos Strike - [320413] = 577, -- Chaos Strike - [343206] = 577, -- Chaos Strike - [258887] = 577, -- Cycle of Hatred - [196718] = 577, -- Darkness - [320420] = 577, -- Darkness - [203555] = 577, -- Demon Blades - [162243] = 577, -- Demon's Bite - [206478] = 577, -- Demonic Appetite - [205411] = 577, -- Desperate Instincts - [258860] = 577, -- Essence Break - [198013] = 577, -- Eye Beam - [320415] = 577, -- Eye Beam - [258925] = 577, -- Fel Barrage - [211881] = 577, -- Fel Eruption - [195072] = 577, -- Fel Rush - [320416] = 577, -- Fel Rush - [343017] = 577, -- Fel Rush - [206416] = 577, -- First Blood - [342817] = 577, -- Glaive Tempest - [258876] = 577, -- Insatiable Hunger - [203556] = 577, -- Master of the Glaive - [206476] = 577, -- Momentum - [196555] = 577, -- Netherwalk - [258881] = 577, -- Trail of Ruin - [275144] = 577, -- Unbound Chaos - [206477] = 577, -- Unleashed Power - [198793] = 577, -- Vengeful Retreat - [320635] = 577, -- Vengeful Retreat - - -- vengeance demon hunter --581 - [207550] = 581, -- Abyssal Strike - [207548] = 581, -- Agonizing Flames - [320341] = 581, -- Bulk Extraction - [207739] = 581, -- Burning Alive - [336639] = 581, -- Charred Flesh - [207666] = 581, -- Concentrated Sigils - [203720] = 581, -- Demon Spikes - [321028] = 581, -- Demon Spikes - [227174] = 581, -- Fallout - [207697] = 581, -- Feast of Souls - [218612] = 581, -- Feed the Demon - [212084] = 581, -- Fel Devastation - [320639] = 581, -- Fel Devastation - [204021] = 581, -- Fiery Brand - [320962] = 581, -- Fiery Brand - [343010] = 581, -- Fiery Brand - [263642] = 581, -- Fracture - [320331] = 581, -- Infernal Armor - [189110] = 581, -- Infernal Strike - [320791] = 581, -- Infernal Strike - [343016] = 581, -- Infernal Strike - [209258] = 581, -- Last Resort - [209281] = 581, -- Quickened Sigils - [343014] = 581, -- Revel in Pain - [326853] = 581, -- Ruinous Bulwark - [203782] = 581, -- Shear - [203783] = 581, -- Shear - [202138] = 581, -- Sigil of Chains - [204596] = 581, -- Sigil of Flame - [320794] = 581, -- Sigil of Flame - [207684] = 581, -- Sigil of Misery - [320418] = 581, -- Sigil of Misery - [202137] = 581, -- Sigil of Silence - [320417] = 581, -- Sigil of Silence - [263648] = 581, -- Soul Barrier - [228477] = 581, -- Soul Cleave - [321021] = 581, -- Soul Cleave - [343207] = 581, -- Soul Cleave - [247454] = 581, -- Spirit Bomb - [320380] = 581, -- Thick Skin - [268175] = 581, -- Void Reaver - - -- Unholy Death Knight: - [194916] = 252, -- All Will Serve - [275699] = 252, -- Apocalypse - [316961] = 252, -- Apocalypse - [343755] = 252, -- Apocalypse - [276837] = 252, -- Army of the Damned - [42650] = 252, -- Army of the Dead - [207264] = 252, -- Bursting Sores - [207311] = 252, -- Clawing Shadows - [325554] = 252, -- Dark Transformation - [63560] = 252, -- Dark Transformation - [152280] = 252, -- Defile - [207269] = 252, -- Ebon Fever - [207317] = 252, -- Epidemic - [276023] = 252, -- Harbinger of Doom - [207272] = 252, -- Infected Claws - [77575] = 252, -- Outbreak - [277234] = 252, -- Pestilence - [194917] = 252, -- Pestilent Pustules - [51462] = 252, -- Runic Corruption - [317234] = 252, -- Scourge Strike - [55090] = 252, -- Scourge Strike - [343294] = 252, -- Soul Reaper - [207321] = 252, -- Spell Eater - [49530] = 252, -- Sudden Doom - [317250] = 252, -- Summon Gargoyle - [49206] = 252, -- Summon Gargoyle - [207289] = 252, -- Unholy Assault - [115989] = 252, -- Unholy Blight - [319230] = 252, -- Unholy Pact - - -- Frost Death Knight: - [207142] = 251, -- Avalanche - [207167] = 251, -- Blinding Sleet - [152279] = 251, -- Breath of Sindragosa - [281208] = 251, -- Cold Heart - [317230] = 251, -- Empower Rune Weapon - [47568] = 251, -- Empower Rune Weapon - [316803] = 251, -- Frost Strike - [49143] = 251, -- Frost Strike - [207230] = 251, -- Frostscythe - [279302] = 251, -- Frostwyrm's Fury - [194909] = 251, -- Frozen Pulse - [194912] = 251, -- Gathering Storm - [194913] = 251, -- Glacial Advance - [57330] = 251, -- Horn of Winter - [49184] = 251, -- Howling Blast - [321995] = 251, -- Hypothermic Presence - [207126] = 251, -- Icecap - [194878] = 251, -- Icy Talons - [253593] = 251, -- Inexorable Assault - [317214] = 251, -- Killing Machine - [51128] = 251, -- Killing Machine - [343252] = 251, -- Might of the Frozen Wastes - [81333] = 251, -- Might of the Frozen Wastes - [207061] = 251, -- Murderous Efficiency - [317198] = 251, -- Obliterate - [49020] = 251, -- Obliterate - [281238] = 251, -- Obliteration - [207200] = 251, -- Permafrost - [316849] = 251, -- Pillar of Frost - [51271] = 251, -- Pillar of Frost - [196770] = 251, -- Remorseless Winter - [316794] = 251, -- Remorseless Winter - [316838] = 251, -- Rime - [59057] = 251, -- Rime - [207104] = 251, -- Runic Attenuation - [81229] = 251, -- Runic Empowerment - - -- Blood Death Knight: - [205727] = 250, -- Anti-Magic Barrier - [316634] = 250, -- Blood Boil - [50842] = 250, -- Blood Boil - [221699] = 250, -- Blood Tap - [206931] = 250, -- Blooddrinker - [195679] = 250, -- Bloodworms - [194844] = 250, -- Bonestorm - [205224] = 250, -- Consumption - [274156] = 250, -- Consumption - [81136] = 250, -- Crimson Scourge - [49028] = 250, -- Dancing Rune Weapon - [195292] = 250, -- Death's Caress - [206974] = 250, -- Foul Bulwark - [108199] = 250, -- Gorefiend's Grasp - [206930] = 250, -- Heart Strike - [316575] = 250, -- Heart Strike - [317090] = 250, -- Heart Strike - [221536] = 250, -- Heartbreaker - [273946] = 250, -- Hemostasis - [206940] = 250, -- Mark of Blood - [195182] = 250, -- Marrowrend - [316746] = 250, -- Marrowrend - [219786] = 250, -- Ossuary - [114556] = 250, -- Purgatory - [194662] = 250, -- Rapid Decomposition - [205723] = 250, -- Red Thirst - [317610] = 250, -- Relish in Blood - [194679] = 250, -- Rune Tap - [316616] = 250, -- Rune Tap - [206970] = 250, -- Tightening Grasp - [219809] = 250, -- Tombstone - [317133] = 250, -- Vampiric Blood - [55233] = 250, -- Vampiric Blood - [273953] = 250, -- Voracious - [206967] = 250, -- Will of the Necropolis + if (DetailsFramework.IsTBCWow()) then + _detalhes.SpecSpellList = { --~spec - - -- Balance Druid: - [236168] = 102, -- Starfall - [136060] = 102, -- Celestial Alignment - [252188] = 102, -- Solar Beam - [631519] = 102, -- Shooting Stars - [132123] = 102, -- Fury of Elune - - -- Feral Druid: - [132185] = 103, -- Predatory Swiftness - [132242] = 103, -- Tiger's Fury - [132278] = 103, -- Primal Fury - [132141] = 103, -- Brutal Slash - - -- Guardian Druid: - [571585] = 104, -- Gore - [1033479] = 104, -- Guardian of Elune - [1033490] = 104, -- Pulverize - [132139] = 104, -- Blood Frenzy - [571586] = 104, -- Incarnation: Guardian of Ursoc - - -- Restoration Druid: - [740] = 105, -- Tranquility - [102342] = 105, -- Ironbark - [33763] = 105, -- Lifebloom - [88423] = 105, -- Nature's Cure - [145205] = 105, --Efflorescence - - -- Beast Mastery Hunter: - [267116] = 253, -- Animal Companion - [191384] = 253, -- Aspect of the Beast - [193530] = 253, -- Aspect of the Wild - [217200] = 253, -- Barbed Shot - [115939] = 253, -- Beast Cleave - [19574] = 253, -- Bestial Wrath - [231548] = 253, -- Bestial Wrath - [321530] = 253, -- Bloodshed - [193455] = 253, -- Cobra Shot - [262838] = 253, -- Cobra Shot - [120679] = 253, -- Dire Beast - [53270] = 253, -- Exotic Beasts - [199532] = 253, -- Killer Cobra - [273887] = 253, -- Killer Instinct - [56315] = 253, -- Kindred Spirits - [199528] = 253, -- One with the Pack - [321014] = 253, -- Pack Tactics - [193532] = 253, -- Scent of Blood - [285564] = 253, -- Scent of Blood - [257891] = 253, -- Spitting Cobra - [201430] = 253, -- Stampede - [199530] = 253, -- Stomp - [257944] = 253, -- Thrill of the Hunt - [185789] = 253, -- Wild Call - - -- Marksmanship Hunter: - [19434] = 254, -- Aimed Shot - [321468] = 254, -- Binding Shackles - [186387] = 254, -- Bursting Shot - [260404] = 254, -- Calling the Shots - [260228] = 254, -- Careful Aim - [321460] = 254, -- Dead Eye - [260402] = 254, -- Double Tap - [212431] = 254, -- Explosive Shot - [260393] = 254, -- Lethal Shots - [194595] = 254, -- Lock and Load - [155228] = 254, -- Lone Wolf - [260309] = 254, -- Master Marksman - [260240] = 254, -- Precise Shots - [257044] = 254, -- Rapid Fire - [321281] = 254, -- Rapid Fire - [193533] = 254, -- Steady Focus - [260367] = 254, -- Streamline - [257621] = 254, -- Trick Shots - [288613] = 254, -- Trueshot - [260243] = 254, -- Volley - [260247] = 254, -- Volley - - -- Survival Hunter: - [269737] = 255, -- Alpha Predator - [186289] = 255, -- Aspect of the Eagle - [260331] = 255, -- Birds of Prey - [260248] = 255, -- Bloodseeker - [212436] = 255, -- Butchery - [187708] = 255, -- Carve - [294029] = 255, -- Carve - [259391] = 255, -- Chakrams - [259398] = 255, -- Chakrams - [272651] = 255, -- Command Pet - [266779] = 255, -- Coordinated Assault - [269751] = 255, -- Flanking Strike - [190925] = 255, -- Harpoon - [231550] = 255, -- Harpoon - [260241] = 255, -- Hydra's Bite - [259387] = 255, -- Mongoose Bite - [187707] = 255, -- Muzzle - [186270] = 255, -- Raptor Strike - [162487] = 255, -- Steel Trap - [162488] = 255, -- Steel Trap - [265895] = 255, -- Terms of Engagement - [260285] = 255, -- Tip of the Spear - [268501] = 255, -- Viper's Venom - [259495] = 255, -- Wildfire Bomb - [271014] = 255, -- Wildfire Infusion - [195645] = 255, -- Wing Clip - [321026] = 255, -- Wing Clip - - -- Arcane Mage: - [231564] = 62, -- Arcane Barrage - [321526] = 62, -- Arcane Barrage - [44425] = 62, -- Arcane Barrage - [30451] = 62, -- Arcane Blast - [342231] = 62, -- Arcane Echo - [205022] = 62, -- Arcane Familiar - [5143] = 62, -- Arcane Missiles - [7268] = 62, -- Arcane Missiles - [153626] = 62, -- Arcane Orb - [12042] = 62, -- Arcane Power - [321739] = 62, -- Arcane Power - [343208] = 62, -- Arcane Power - [235711] = 62, -- Chrono Shift - [16870] = 62, -- Clearcasting - [321420] = 62, -- Clearcasting - [321758] = 62, -- Clearcasting - [321387] = 62, -- Enlightened - [12051] = 62, -- Evocation - [231565] = 62, -- Evocation - [110959] = 62, -- Greater Invisibility - [342249] = 62, -- Master of Time - [114923] = 62, -- Nether Tempest - [114954] = 62, -- Nether Tempest - [155147] = 62, -- Overpowered - [205025] = 62, -- Presence of Mind - [321742] = 62, -- Presence of Mind - [235450] = 62, -- Prismatic Barrier - [321745] = 62, -- Prismatic Barrier - [205028] = 62, -- Resonance - [281482] = 62, -- Reverberate - [264354] = 62, -- Rule of Threes - [236457] = 62, -- Slipstream - [31589] = 62, -- Slow - [321747] = 62, -- Slow - [157980] = 62, -- Supernova - [210805] = 62, -- Time Anomaly - [321507] = 62, -- Touch of the Magi - [343215] = 62, -- Touch of the Magi - - -- Fire Mage: - [235870] = 63, -- Alexstrasza's Fury - [157981] = 63, -- Blast Wave - [235313] = 63, -- Blazing Barrier - [321708] = 63, -- Blazing Barrier - [235365] = 63, -- Blazing Soul - [86949] = 63, -- Cauterize - [190319] = 63, -- Combustion - [321710] = 63, -- Combustion - [205023] = 63, -- Conflagration - [117216] = 63, -- Critical Mass - [231630] = 63, -- Critical Mass - [321707] = 63, -- Dragon's Breath - [133] = 63, -- Fireball - [157642] = 63, -- Fireball - [343194] = 63, -- Fireball - [203283] = 63, -- Firestarter - [205026] = 63, -- Firestarter - [205029] = 63, -- Flame On - [205037] = 63, -- Flame Patch - [2120] = 63, -- Flamestrike - [321709] = 63, -- Flamestrike - [343230] = 63, -- Flamestrike - [236058] = 63, -- Frenetic Speed - [342344] = 63, -- From the Ashes - [195283] = 63, -- Hot Streak - [155148] = 63, -- Kindling - [44457] = 63, -- Living Bomb - [44461] = 63, -- Living Bomb - [153561] = 63, -- Meteor - [257541] = 63, -- Phoenix Flames - [343222] = 63, -- Phoenix Flames - [321711] = 63, -- Pyroblast - [269650] = 63, -- Pyroclasm - [205020] = 63, -- Pyromaniac - [2948] = 63, -- Scorch - [269644] = 63, -- Searing Touch - - -- Frost Mage: - [190356] = 64, -- Blizzard - [321696] = 64, -- Blizzard - [205027] = 64, -- Bone Chilling - [190447] = 64, -- Brain Freeze - [231584] = 64, -- Brain Freeze - [278309] = 64, -- Chain Reaction - [235219] = 64, -- Cold Snap - [321699] = 64, -- Cold Snap - [153595] = 64, -- Comet Storm - [120] = 64, -- Cone of Cold - [343180] = 64, -- Cone of Cold - [257537] = 64, -- Ebonbolt - [112965] = 64, -- Fingers of Frost - [44614] = 64, -- Flurry - [270233] = 64, -- Freezing Rain - [235224] = 64, -- Frigid Winds - [84714] = 64, -- Frozen Orb - [84721] = 64, -- Frozen Orb - [205030] = 64, -- Frozen Touch - [235297] = 64, -- Glacial Insulation - [199786] = 64, -- Glacial Spike - [11426] = 64, -- Ice Barrier - [108839] = 64, -- Ice Floes - [30455] = 64, -- Ice Lance - [343175] = 64, -- Ice Lance - [157997] = 64, -- Ice Nova - [12472] = 64, -- Icy Veins - [321702] = 64, -- Icy Veins - [205024] = 64, -- Lonely Winter - [205021] = 64, -- Ray of Frost - [12982] = 64, -- Shatter - [231582] = 64, -- Shatter - [31687] = 64, -- Summon Water Elemental - [155149] = 64, -- Thermal Void - - -- Brewmaster Monk: - [115399] = 268, -- Black Ox Brew - [196736] = 268, -- Blackout Combo - [280515] = 268, -- Bob and Weave - [115181] = 268, -- Breath of Fire - [123725] = 268, -- Breath of Fire - [245013] = 268, -- Brewmaster's Balance - [322507] = 268, -- Celestial Brew - [322510] = 268, -- Celestial Brew - [325177] = 268, -- Celestial Flames - [216519] = 268, -- Celestial Fortune - [324312] = 268, -- Clash - [325153] = 268, -- Exploding Keg - [124502] = 268, -- Gift of the Ox - [124507] = 268, -- Gift of the Ox - [196737] = 268, -- High Tolerance - [121253] = 268, -- Keg Smash - [325093] = 268, -- Light Brewing - [119582] = 268, -- Purifying Brew - [343743] = 268, -- Purifying Brew - [322120] = 268, -- Shuffle - [196730] = 268, -- Special Delivery - [242580] = 268, -- Spitfire - [115069] = 268, -- Stagger - [322522] = 268, -- Stagger - [115315] = 268, -- Summon Black Ox Statue - [115176] = 268, -- Zen Meditation - [328682] = 268, -- Zen Meditation - - - -- Windwalker Monk: - [116092] = 269, -- Afterlife - [196707] = 269, -- Afterlife - [322719] = 269, -- Afterlife - [115396] = 269, -- Ascension - [161862] = 269, -- Ascension - [325201] = 269, -- Dance of Chi-Ji - [116095] = 269, -- Disable - [343731] = 269, -- Disable - [115288] = 269, -- Energizing Elixir - [261947] = 269, -- Fist of the White Tiger - [113656] = 269, -- Fists of Fury - [117418] = 269, -- Fists of Fury - [101545] = 269, -- Flying Serpent Kick - [123586] = 269, -- Flying Serpent Kick - [280195] = 269, -- Good Karma - [196740] = 269, -- Hit Combo - [261767] = 269, -- Inner Strength - [152173] = 269, -- Serenity - [280197] = 269, -- Spiritual Focus - [122470] = 269, -- Touch of Karma - [124280] = 269, -- Touch of Karma - [152175] = 269, -- Whirling Dragon Punch - [157411] = 269, -- Windwalking - - -- Mistweaver Monk: - [343655] = 270, -- Enveloping Breath - [124682] = 270, -- Enveloping Mist - [231605] = 270, -- Enveloping Mist - [191837] = 270, -- Essence Font - [231633] = 270, -- Essence Font - [197895] = 270, -- Focused Thunder - [116849] = 270, -- Life Cocoon - [197915] = 270, -- Lifecycles - [197908] = 270, -- Mana Tea - [197900] = 270, -- Mist Wrap - [212051] = 270, -- Reawaken - [196725] = 270, -- Refreshing Jade Wind - [115151] = 270, -- Renewing Mist - [119611] = 270, -- Renewing Mist - [281231] = 270, -- Renewing Mist - [115310] = 270, -- Revival - [274909] = 270, -- Rising Mist - [198898] = 270, -- Song of Chi-Ji - [115175] = 270, -- Soothing Mist - [209525] = 270, -- Soothing Mist - [210802] = 270, -- Spirit of the Crane - [115313] = 270, -- Summon Jade Serpent Statue - [116645] = 270, -- Teachings of the Monastery - [116680] = 270, -- Thunder Focus Tea - [231876] = 270, -- Thunder Focus Tea - [274963] = 270, -- Upwelling - - -- Holy Paladin: - [212056] = 65, -- Absolution - [31821] = 65, -- Aura Mastery - [248033] = 65, -- Awakening - [156910] = 65, -- Beacon of Faith - [53563] = 65, -- Beacon of Light - [53652] = 65, -- Beacon of Light - [200025] = 65, -- Beacon of Virtue - [223306] = 65, -- Bestow Faith - [4987] = 65, -- Cleanse - [196926] = 65, -- Crusader's Might - [498] = 65, -- Divine Protection - [325966] = 65, -- Glimmer of Light - [82326] = 65, -- Holy Light - [114165] = 65, -- Holy Prism - [114852] = 65, -- Holy Prism - [114871] = 65, -- Holy Prism - [20473] = 65, -- Holy Shock - [25912] = 65, -- Holy Shock - [25914] = 65, -- Holy Shock - [272906] = 65, -- Holy Shock - [289941] = 65, -- Holy Shock - [53576] = 65, -- Infusion of Light - [85222] = 65, -- Light of Dawn - [183998] = 65, -- Light of the Martyr - [219562] = 65, -- Light of the Martyr - [114158] = 65, -- Light's Hammer - [114919] = 65, -- Light's Hammer - [214202] = 65, -- Rule of Law - [157047] = 65, -- Saved by the Light + -- Balance Druid: + [33831] = 102, -- force of nature + [24858] = 102, -- moonkin form - - -- Protection Paladin: - [31850] = 66, -- Ardent Defender - [66235] = 66, -- Ardent Defender - [231665] = 66, -- Avenger's Shield - [31935] = 66, -- Avenger's Shield - [337261] = 66, -- Avenger's Shield - [204019] = 66, -- Blessed Hammer - [229976] = 66, -- Blessed Hammer - [204018] = 66, -- Blessing of Spellwarding - [204023] = 66, -- Crusader's Judgment - [204077] = 66, -- Final Stand - [203776] = 66, -- First Avenger - [85043] = 66, -- Grand Crusader - [86659] = 66, -- Guardian of Ancient Kings - [317854] = 66, -- Hammer of the Righteous - [337287] = 66, -- Hammer of the Righteous - [53595] = 66, -- Hammer of the Righteous - [315924] = 66, -- Hand of the Protector - [327193] = 66, -- Moment of Glory - [280373] = 66, -- Redoubt - [204074] = 66, -- Righteous Protector - [161800] = 66, -- Riposte - [321136] = 66, -- Shining Light + -- Feral Druid: + [33983] = 103, -- mangle cat + [33982] = 103, -- mangle cat + [33876] = 103, -- mangle cat - - -- Retribution Paladin: - [267344] = 70, -- Art of War - [317912] = 70, -- Art of War - [184575] = 70, -- Blade of Justice - [327981] = 70, -- Blade of Justice - [231832] = 70, -- Blade of Wrath - [231895] = 70, -- Crusade - [53385] = 70, -- Divine Storm - [326732] = 70, -- Empyrean Power - [343527] = 70, -- Execution Sentence - [343721] = 70, -- Final Reckoning - [203316] = 70, -- Fires of Justice - [183218] = 70, -- Hand of Hindrance - [215661] = 70, -- Justicar's Vengeance - [267610] = 70, -- Righteous Verdict - [85256] = 70, -- Templar's Verdict - [255937] = 70, -- Wake of Ashes - [269569] = 70, -- Zeal - - - -- Discipline Priest: - [81749] = 256, -- Atonement - [193134] = 256, -- Castigation - [197419] = 256, -- Contrition - [205367] = 256, -- Dominant Mind - [246287] = 256, -- Evangelism - [238063] = 256, -- Lenience - [193063] = 256, -- Masochism - [33206] = 256, -- Pain Suppression - [47540] = 256, -- Penance - [47666] = 256, -- Penance - [47750] = 256, -- Penance - [198068] = 256, -- Power of the Dark Side - [204197] = 256, -- Purge the Wicked - [47536] = 256, -- Rapture - [214621] = 256, -- Schism - [314867] = 256, -- Shadow Covenant - [197045] = 256, -- Shield Discipline - [280391] = 256, -- Sins of the Many - [109964] = 256, -- Spirit Shell - - -- Holy Priest: - [116092] = 257, -- Afterlife - [196707] = 257, -- Afterlife - [322719] = 257, -- Afterlife - [238100] = 257, -- Angel's Mercy - [200183] = 257, -- Apotheosis - [193157] = 257, -- Benediction - [32546] = 257, -- Binding Heal - [200199] = 257, -- Censure - [204883] = 257, -- Circle of Healing - [238136] = 257, -- Cosmic Ripple - [64843] = 257, -- Divine Hymn - [193155] = 257, -- Enlightenment - [2061] = 257, -- Flash Heal - [200209] = 257, -- Guardian Angel - [47788] = 257, -- Guardian Spirit - [2060] = 257, -- Heal - [14914] = 257, -- Holy Fire - [196985] = 257, -- Light of the Naaru - [321377] = 257, -- Prayer Circle - [596] = 257, -- Prayer of Healing - [319912] = 257, -- Prayer of Mending - [33076] = 257, -- Prayer of Mending - [33110] = 257, -- Prayer of Mending - [139] = 257, -- Renew - [341997] = 257, -- Renewed Faith - [20711] = 257, -- Spirit of Redemption - [215769] = 257, -- Spirit of Redemption - [109186] = 257, -- Surge of Light - [64901] = 257, -- Symbol of Hope - [200128] = 257, -- Trail of Light - - -- Shadow Priest: - [341240] = 258, -- Ancient Madness - [341374] = 258, -- Damnation - [341205] = 258, -- Dark Thoughts - [321291] = 258, -- Death and Madness - [335467] = 258, -- Devouring Plague - [322108] = 258, -- Dispersion - [193195] = 258, -- Fortress of the Mind - [280752] = 258, -- Hallucinations - [288733] = 258, -- Intangibility - [263716] = 258, -- Last Word - [193225] = 258, -- Legacy of the Void - [205369] = 258, -- Mind Bomb - [15407] = 258, -- Mind Flay - [238558] = 258, -- Misery - [64044] = 258, -- Psychic Horror - [213634] = 258, -- Purify Disease - [199855] = 258, -- San'layn - [341385] = 258, -- Searing Nightmare - [342834] = 258, -- Shadow Crash - [232698] = 258, -- Shadowform - [341491] = 258, -- Shadowy Apparitions - [78203] = 258, -- Shadowy Apparitions - [15487] = 258, -- Silence - [319952] = 258, -- Surrender to Madness - [341273] = 258, -- Unfurling Darkness - [322110] = 258, -- Vampiric Embrace - [322116] = 258, -- Vampiric Touch - [34914] = 258, -- Vampiric Touch - [228266] = 258, -- Void Bolt - [231688] = 258, -- Void Bolt - [319914] = 258, -- Void Bolt - [228260] = 258, -- Void Eruption - [319908] = 258, -- Void Eruption - [263165] = 258, -- Void Torrent - [185916] = 258, -- Voidform - [228264] = 258, -- Voidform - - -- Assassination Rogue: - [328085] = 259, -- Blindside - [121411] = 259, -- Crimson Tempest - [193640] = 259, -- Elaborate Planning - [32645] = 259, -- Envenom - [200806] = 259, -- Exsanguinate - [51723] = 259, -- Fan of Knives - [231719] = 259, -- Garrote - [703] = 259, -- Garrote - [270061] = 259, -- Hidden Blades - [14117] = 259, -- Improved Poisons - [330542] = 259, -- Improved Poisons - [154904] = 259, -- Internal Bleeding - [196861] = 259, -- Iron Wire - [280716] = 259, -- Leeching Poison - [255989] = 259, -- Master Assassin - [196864] = 259, -- Master Poisoner - [1329] = 259, -- Mutilate - [27576] = 259, -- Mutilate - [5374] = 259, -- Mutilate - [255544] = 259, -- Poison Bomb - [185565] = 259, -- Poisoned Knife - [14190] = 259, -- Seal Fate - [319568] = 259, -- Vendetta - [79140] = 259, -- Vendetta - [152152] = 259, -- Venom Rush - [79134] = 259, -- Venomous Wounds - - -- Outlaw Rogue: - [196924] = 260, -- Acrobatic Strikes - [13750] = 260, -- Adrenaline Rush - [235484] = 260, -- Between the Eyes - [315341] = 260, -- Between the Eyes - [13877] = 260, -- Blade Flurry - [22482] = 260, -- Blade Flurry - [331851] = 260, -- Blade Flurry - [271877] = 260, -- Blade Rush - [256165] = 260, -- Blinding Powder - [35551] = 260, -- Combat Potency - [61329] = 260, -- Combat Potency - [272026] = 260, -- Dancing Steel - [108216] = 260, -- Dirty Tricks - [2098] = 260, -- Dispatch - [343142] = 260, -- Dreadblades - [196937] = 260, -- Ghostly Strike - [1776] = 260, -- Gouge - [195457] = 260, -- Grappling Hook - [319600] = 260, -- Grappling Hook - [196922] = 260, -- Hit and Run - [193546] = 260, -- Iron Stomach - [51690] = 260, -- Killing Spree - [256170] = 260, -- Loaded Dice - [185763] = 260, -- Pistol Shot - [196938] = 260, -- Quick Draw - [79096] = 260, -- Restless Blades - [256188] = 260, -- Retractable Hook - [315508] = 260, -- Roll the Bones - [14161] = 260, -- Ruthlessness - [1752] = 260, -- Sinister Strike - [193315] = 260, -- Sinister Strike - [279876] = 260, -- Sinister Strike - [279877] = 260, -- Sinister Strike - - -- Subtlety Rogue: - [319949] = 261, -- Backstab - [53] = 261, -- Backstab - [245687] = 261, -- Dark Shadow - [185314] = 261, -- Deepening Shadows - [238104] = 261, -- Enveloping Shadows - [196819] = 261, -- Eviscerate - [231716] = 261, -- Eviscerate - [316219] = 261, -- Find Weakness - [200758] = 261, -- Gloomblade - [196976] = 261, -- Master of Shadows - [277953] = 261, -- Night Terrors - [343160] = 261, -- Premeditation - [58423] = 261, -- Relentless Strikes - [280719] = 261, -- Secret Technique - [121471] = 261, -- Shadow Blades - [185313] = 261, -- Shadow Dance - [108209] = 261, -- Shadow Focus - [196912] = 261, -- Shadow Techniques - [319706] = 261, -- Shadow Techniques - [319175] = 261, -- Shadow Vault - [319178] = 261, -- Shadow Vault - [185438] = 261, -- Shadowstrike - [231718] = 261, -- Shadowstrike - [257505] = 261, -- Shot in the Dark - [197835] = 261, -- Shuriken Storm - [319951] = 261, -- Shuriken Storm - [277925] = 261, -- Shuriken Tornado - [114014] = 261, -- Shuriken Toss - [200759] = 261, -- Soothing Darkness - [212283] = 261, -- Symbols of Death - [328077] = 261, -- Symbols of Death - - -- Elemental Shaman: - [273221] = 262, -- Aftershock - [108281] = 262, -- Ancestral Guidance - [114911] = 262, -- Ancestral Guidance - [8042] = 262, -- Earth Shock - [170374] = 262, -- Earthen Rage - [61882] = 262, -- Earthquake - [77478] = 262, -- Earthquake - [320125] = 262, -- Echoing Shock - [343190] = 262, -- Elemental Fury - [60188] = 262, -- Elemental Fury - [198067] = 262, -- Fire Elemental - [210714] = 262, -- Icefury - [192222] = 262, -- Liquid Magma Totem - [16166] = 262, -- Master of the Elements - [117013] = 262, -- Primal Elementalist - [342243] = 262, -- Static Discharge - [192249] = 262, -- Storm Elemental - [262303] = 262, -- Surge of Power - [51490] = 262, -- Thunderstorm - [260895] = 262, -- Unlimited Power - - -- Enhancement Shaman: - [187874] = 263, -- Crash Lightning - [192246] = 263, -- Crashing Storm - [188089] = 263, -- Earthen Spike - [210853] = 263, -- Elemental Assault - [262624] = 263, -- Elemental Spirits - [196884] = 263, -- Feral Lunge - [231723] = 263, -- Feral Spirit - [51533] = 263, -- Feral Spirit - [333974] = 263, -- Fire Nova - [8349] = 263, -- Fire Nova - [262647] = 263, -- Forceful Winds - [334195] = 263, -- Hailstorm - [201900] = 263, -- Hot Hand - [342240] = 263, -- Ice Strike - [334046] = 263, -- Lashing Flames - [334033] = 263, -- Lava Lash - [60103] = 263, -- Lava Lash - [187880] = 263, -- Maelstrom Weapon - [58875] = 263, -- Spirit Walk - [201845] = 263, -- Stormbringer - [319930] = 263, -- Stormbringer - [334175] = 263, -- Stormfury - [17364] = 263, -- Stormstrike - [32175] = 263, -- Stormstrike - [32176] = 263, -- Stormstrike Off-Hand - [197214] = 263, -- Sundering - [343211] = 263, -- Windfury Totem - [8512] = 263, -- Windfury Totem - [33757] = 263, -- Windfury Weapon - - -- Restoration Shaman: - [207399] = 264, -- Ancestral Protection Totem - [207401] = 264, -- Ancestral Vigor - [212048] = 264, -- Ancestral Vision - [157153] = 264, -- Cloudburst Totem - [200076] = 264, -- Deluge - [207778] = 264, -- Downpour - [198838] = 264, -- Earthen Wall Totem - [280614] = 264, -- Flash Flood - [192088] = 264, -- Graceful Spirit - [73920] = 264, -- Healing Rain - [108280] = 264, -- Healing Tide Totem - [343205] = 264, -- Healing Tide Totem - [77472] = 264, -- Healing Wave - [157154] = 264, -- High Tide - [16191] = 264, -- Mana Tide Totem - [343182] = 264, -- Mana Tide Totem - [77130] = 264, -- Purify Spirit - [16196] = 264, -- Resurgence - [61295] = 264, -- Riptide - [98008] = 264, -- Spirit Link Totem - [320746] = 264, -- Surge of Earth - [320747] = 264, -- Surge of Earth - [231785] = 264, -- Tidal Waves - [51564] = 264, -- Tidal Waves - [200072] = 264, -- Torrent - [200071] = 264, -- Undulation - [73685] = 264, -- Unleash Life - [52127] = 264, -- Water Shield - [197995] = 264, -- Wellspring - - -- Affliction : - [196103] = 265, -- Absolute Corruption - [231792] = 265, -- Agony - [980] = 265, -- Agony - [264000] = 265, -- Creeping Death - [334183] = 265, -- Dark Caller - [198590] = 265, -- Drain Soul - [48181] = 265, -- Haunt - [334319] = 265, -- Inevitable Demise - [324536] = 265, -- Malefic Rapture - [108558] = 265, -- Nightfall - [205179] = 265, -- Phantom Singularity - [27243] = 265, -- Seed of Corruption - [27285] = 265, -- Seed of Corruption - [32388] = 265, -- Shadow Embrace - [63106] = 265, -- Siphon Life - [196226] = 265, -- Sow the Seeds - [205180] = 265, -- Summon Darkglare - [231791] = 265, -- Unstable Affliction - [316099] = 265, -- Unstable Affliction - [334315] = 265, -- Unstable Affliction - [278350] = 265, -- Vile Taint - [196102] = 265, -- Writhe in Agony - - -- Demonology Warlock: - [267211] = 266, -- Bilescourge Bombers - [104316] = 266, -- Call Dreadstalkers - [334727] = 266, -- Call Dreadstalkers - [264178] = 266, -- Demonbolt - [205145] = 266, -- Demonic Calling - [267215] = 266, -- Demonic Consumption - [267171] = 266, -- Demonic Strength - [603] = 266, -- Doom - [264078] = 266, -- Dreadlash - [267170] = 266, -- From the Shadows - [105174] = 266, -- Hand of Gul'dan - [196277] = 266, -- Implosion - [267216] = 266, -- Inner Demons - [267217] = 266, -- Nether Portal - [264130] = 266, -- Power Siphon - [267214] = 266, -- Sacrificed Souls - [108415] = 266, -- Soul Link - [264057] = 266, -- Soul Strike - [265187] = 266, -- Summon Demonic Tyrant - [334585] = 266, -- Summon Demonic Tyrant - [30146] = 266, -- Summon Felguard - [264119] = 266, -- Summon Vilefiend - - -- Destruction Warlock: - [196406] = 267, -- Backdraft - [152108] = 267, -- Cataclysm - [196447] = 267, -- Channel Demonfire - [116858] = 267, -- Chaos Bolt - [215279] = 267, -- Chaos Bolt - [17962] = 267, -- Conflagrate - [231793] = 267, -- Conflagrate - [196412] = 267, -- Eradication - [196408] = 267, -- Fire and Brimstone - [267115] = 267, -- Flashover - [335174] = 267, -- Havoc - [80240] = 267, -- Havoc - [193541] = 267, -- Immolate - [348] = 267, -- Immolate - [29722] = 267, -- Incinerate - [270545] = 267, -- Inferno - [266134] = 267, -- Internal Combustion - [266086] = 267, -- Rain of Chaos - [335189] = 267, -- Rain of Fire - [42223] = 267, -- Rain of Fire - [5740] = 267, -- Rain of Fire - [205148] = 267, -- Reverse Entropy - [205184] = 267, -- Roaring Blaze - [17877] = 267, -- Shadowburn - [6353] = 267, -- Soul Fire - [1122] = 267, -- Summon Infernal - [335175] = 267, -- Summon Infernal - - - -- Arms Warrior: - [845] = 71, -- Cleave - [334779] = 71, -- Collateral Damage - [167105] = 71, -- Colossus Smash - [316411] = 71, -- Colossus Smash - [262228] = 71, -- Deadly Calm - [197690] = 71, -- Defensive Stance - [118038] = 71, -- Die by the Sword - [315948] = 71, -- Die by the Sword - [262150] = 71, -- Dreadnaught - [202316] = 71, -- Fervor of Battle - [248621] = 71, -- In For The Kill - [12294] = 71, -- Mortal Strike - [261900] = 71, -- Mortal Strike - [316440] = 71, -- Overpower - [316441] = 71, -- Overpower - [7384] = 71, -- Overpower - [772] = 71, -- Rend - [279423] = 71, -- Seasoned Soldier - [29838] = 71, -- Second Wind - [260643] = 71, -- Skullsplitter - [260708] = 71, -- Sweeping Strikes - [316432] = 71, -- Sweeping Strikes - [316433] = 71, -- Sweeping Strikes - [184783] = 71, -- Tactician - [262161] = 71, -- Warbreaker - - -- Fury Warrior: - [23881] = 72, -- Bloodthirst - [316537] = 72, -- Bloodthirst - [335070] = 72, -- Cruelty - [184361] = 72, -- Enrage - [316424] = 72, -- Enrage - [316425] = 72, -- Enrage - [184364] = 72, -- Enraged Regeneration - [316474] = 72, -- Enraged Regeneration - [335077] = 72, -- Frenzy - [215568] = 72, -- Fresh Meat - [215571] = 72, -- Frothing Berserker - [202224] = 72, -- Furious Charge - [280392] = 72, -- Meat Cleaver - [315720] = 72, -- Onslaught - [316452] = 72, -- Raging Blow - [316453] = 72, -- Raging Blow - [85288] = 72, -- Raging Blow - [85384] = 72, -- Raging Blow - [96103] = 72, -- Raging Blow - [184367] = 72, -- Rampage - [209694] = 72, -- Rampage - [316412] = 72, -- Rampage - [316519] = 72, -- Rampage - [202751] = 72, -- Reckless Abandon - [1719] = 72, -- Recklessness - [316828] = 72, -- Recklessness - [335091] = 72, -- Seethe - [280772] = 72, -- Siegebreaker - [81099] = 72, -- Single-Minded Fury - [46917] = 72, -- Titan's Grip - [208154] = 72, -- Warpaint - - - -- Protection Warrior: - [202560] = 73, -- Best Served Cold - [280001] = 73, -- Bolster - [202743] = 73, -- Booming Voice - [203201] = 73, -- Crackling Thunder - [115767] = 73, -- Deep Wounds - [115768] = 73, -- Deep Wounds - [1160] = 73, -- Demoralizing Shout - [316464] = 73, -- Demoralizing Shout - [20243] = 73, -- Devastate - [236279] = 73, -- Devastator - [203177] = 73, -- Heavy Repercussions - [202095] = 73, -- Indomitable - [202603] = 73, -- Into the Fray - [12975] = 73, -- Last Stand - [275338] = 73, -- Menace - [202561] = 73, -- Never Surrender - [275334] = 73, -- Punish - [6572] = 73, -- Revenge - [161798] = 73, -- Riposte - [275339] = 73, -- Rumbling Earth - [316834] = 73, -- Shield Wall - [871] = 73, -- Shield Wall - [46968] = 73, -- Shockwave - [316414] = 73, -- Thunder Clap - [6343] = 73, -- Thunder Clap - [275336] = 73, -- Unstoppable Force - [316428] = 73, -- Vanguard - [71] = 73, -- Vanguard + -- Guardian Druid: + [33986] = 104, -- mangle bear + [33987] = 104, -- mangle bear + [33878] = 104, -- mangle bear + + -- Restoration Druid: + [33891] = 105, -- tree of life + [18562] = 105, -- swiftmend -} + -- Beast Mastery Hunter: + [19574] = 253, -- bestial wrath + + -- Marksmanship Hunter: + [34490] = 254, -- silencing shot + [19506] = 254, -- trueshot aura + [20905] = 254, -- trueshot aura + [20906] = 254, -- trueshot aura + [27066] = 254, -- trueshot aura + + -- Survival Hunter: + [23989] = 255, -- readiness + [19386] = 255, -- wyvern sting + [24132] = 255, -- wyvern sting + [24133] = 255, -- wyvern sting + [27068] = 255, -- wyvern sting + + -- Arcane Mage: + [31589] = 62, -- slow + [12042] = 62, -- arcane power + [12043] = 62, -- presence of mind + + -- Fire Mage: + [31661] = 63, -- dragon's breath + [33041] = 63, -- dragon's breath + [33042] = 63, -- dragon's breath + [33043] = 63, -- dragon's breath + [28682] = 63, -- combustion + [27133] = 63, -- blast wave + [11113] = 63, -- blast wave + [13018] = 63, -- blast wave + [13019] = 63, -- blast wave + [13020] = 63, -- blast wave + [13021] = 63, -- blast wave + [33933] = 63, -- blast wave + + -- Frost Mage: + [31687] = 64, -- summon water elemental + [11426] = 64, -- ice barrier + [13032] = 64, -- ice barrier + [13033] = 64, -- ice barrier + [27134] = 64, -- ice barrier + [33405] = 64, -- ice barrier + [11958] = 64, -- cold snap - _detalhes.SpecIDToClass = { - [577] = "DEMONHUNTER", -- Havoc Demon Hunter - [581] = "DEMONHUNTER", -- Vengeance Demon Hunter + -- Holy Paladin: + [31842] = 65, -- divine illumination + [20473] = 65, -- holy shock + [20929] = 65, -- holy shock + [20930] = 65, -- holy shock + [27174] = 65, -- holy shock + [33072] = 65, -- holy shock - [252] = "DEATHKNIGHT", -- Unholy Death Knight - [251] = "DEATHKNIGHT", -- Frost Death Knight - [250] = "DEATHKNIGHT", -- Blood Death Knight + -- Protection Paladin: + [31935] = 66, -- avengers shield + [32699] = 66, -- avengers shield + [32700] = 66, -- avengers shield + [20925] = 66, -- holy shield + [20927] = 66, -- holy shield + [20928] = 66, -- holy shield + [27179] = 66, -- holy shield + + -- Retribution Paladin: + [35395] = 70, -- crusader strike + [20066] = 70, -- repentance + + -- Discipline Priest: + [33206] = 256, -- pain suppression + [10060] = 256, -- power infusion + + -- Holy Priest: + [34861] = 257, -- circle of healing + [34863] = 257, -- circle of healing + [34864] = 257, -- circle of healing + [34865] = 257, -- circle of healing + [34866] = 257, -- circle of healing + [724] = 257, -- lightwell + [27870] = 257, -- lightwell + [27871] = 257, -- lightwell + [27875] = 257, -- lightwell + [20711] = 257, -- spirit of redemption + + -- Shadow Priest: + [34914] = 258, -- vampiric touch + [34916] = 258, -- vampiric touch + [34917] = 258, -- vampiric touch + [15473] = 258, -- shadowform + [15286] = 258, -- vampiric embrace + + -- Assassination Rogue: + [1329] = 259, -- mutilate + [34411] = 259, -- mutilate + [34412] = 259, -- mutilate + [34413] = 259, -- mutilate + + -- Outlaw (Combat) Rogue: + [13750] = 260, -- adrenaline rush + + -- Subtlety Rogue: + [36554] = 261, -- shadowstep + [14183] = 261, -- premeditation + + -- Elemental Shaman: + [30706] = 262, -- totem of wrath + [16166] = 262, -- elemental mastery + + -- Enhancement Shaman: + [30823] = 263, -- shamanistic rage + [17364] = 263, -- storm strike + + -- Restoration Shaman: + [974] = 264, -- earth shield + [32593] = 264, -- earth shield + [32594] = 264, -- earth shield + [16190] = 264, -- mana tide totem + + -- Affliction : + [30108] = 265, -- unstable affliction + [30404] = 265, -- unstable affliction + [30405] = 265, -- unstable affliction + [18220] = 265, -- dark pact + [18937] = 265, -- dark pact + [18938] = 265, -- dark pact + [27265] = 265, -- dark pact + + -- Demonology Warlock: + [30146] = 266, -- summon felguard + [19028] = 266, -- soul link + + -- Destruction Warlock: + [30283] = 267, -- shadowfury + [30413] = 267, -- shadowfury + [30414] = 267, -- shadowfury + + -- Arms Warrior: + [29623] = 71, -- endless rage + [12294] = 71, -- mortal strike + [30330] = 71, -- mortal strike + [25248] = 71, -- mortal strike + [27580] = 71, -- mortal strike + [21553] = 71, -- mortal strike + [21552] = 71, -- mortal strike + [21551] = 71, -- mortal strike + + -- Fury Warrior: + [30033] = 72, -- rampage + [29801] = 72, -- rampage + [30030] = 72, -- rampage + [23881] = 72, -- bloodthirst + [23892] = 72, -- bloodthirst + [23893] = 72, -- bloodthirst + [23894] = 72, -- bloodthirst + [25251] = 72, -- bloodthirst + [30335] = 72, -- bloodthirst + + -- Protection Warrior: + [20243] = 73, -- devastate + [30022] = 73, -- devastate + [30016] = 73, -- devastate + [23922] = 73, -- shield slam + [23923] = 73, -- shield slam + [23924] = 73, -- shield slam + [23925] = 73, -- shield slam + [25258] = 73, -- shield slam + [30356] = 73, -- shield slam + } + + else + _detalhes.SpecSpellList = { --~spec + + -- havoc demon hunter --577 + [188499] = 577, -- Blade Dance + [320402] = 577, -- Blade Dance + [203550] = 577, -- Blind Fury + [198589] = 577, -- Blur + [320407] = 577, -- Blur + [320374] = 577, -- Burning Hatred + [179057] = 577, -- Chaos Nova + [320412] = 577, -- Chaos Nova + [162794] = 577, -- Chaos Strike + [197125] = 577, -- Chaos Strike + [320413] = 577, -- Chaos Strike + [343206] = 577, -- Chaos Strike + [258887] = 577, -- Cycle of Hatred + [196718] = 577, -- Darkness + [320420] = 577, -- Darkness + [203555] = 577, -- Demon Blades + [162243] = 577, -- Demon's Bite + [206478] = 577, -- Demonic Appetite + [205411] = 577, -- Desperate Instincts + [258860] = 577, -- Essence Break + [198013] = 577, -- Eye Beam + [320415] = 577, -- Eye Beam + [258925] = 577, -- Fel Barrage + [211881] = 577, -- Fel Eruption + [195072] = 577, -- Fel Rush + [320416] = 577, -- Fel Rush + [343017] = 577, -- Fel Rush + [206416] = 577, -- First Blood + [342817] = 577, -- Glaive Tempest + [258876] = 577, -- Insatiable Hunger + [203556] = 577, -- Master of the Glaive + [206476] = 577, -- Momentum + [196555] = 577, -- Netherwalk + [258881] = 577, -- Trail of Ruin + [275144] = 577, -- Unbound Chaos + [206477] = 577, -- Unleashed Power + [198793] = 577, -- Vengeful Retreat + [320635] = 577, -- Vengeful Retreat + + -- vengeance demon hunter --581 + [207550] = 581, -- Abyssal Strike + [207548] = 581, -- Agonizing Flames + [320341] = 581, -- Bulk Extraction + [207739] = 581, -- Burning Alive + [336639] = 581, -- Charred Flesh + [207666] = 581, -- Concentrated Sigils + [203720] = 581, -- Demon Spikes + [321028] = 581, -- Demon Spikes + [227174] = 581, -- Fallout + [207697] = 581, -- Feast of Souls + [218612] = 581, -- Feed the Demon + [212084] = 581, -- Fel Devastation + [320639] = 581, -- Fel Devastation + [204021] = 581, -- Fiery Brand + [320962] = 581, -- Fiery Brand + [343010] = 581, -- Fiery Brand + [263642] = 581, -- Fracture + [320331] = 581, -- Infernal Armor + [189110] = 581, -- Infernal Strike + [320791] = 581, -- Infernal Strike + [343016] = 581, -- Infernal Strike + [209258] = 581, -- Last Resort + [209281] = 581, -- Quickened Sigils + [343014] = 581, -- Revel in Pain + [326853] = 581, -- Ruinous Bulwark + [203782] = 581, -- Shear + [203783] = 581, -- Shear + [202138] = 581, -- Sigil of Chains + [204596] = 581, -- Sigil of Flame + [320794] = 581, -- Sigil of Flame + [207684] = 581, -- Sigil of Misery + [320418] = 581, -- Sigil of Misery + [202137] = 581, -- Sigil of Silence + [320417] = 581, -- Sigil of Silence + [263648] = 581, -- Soul Barrier + [228477] = 581, -- Soul Cleave + [321021] = 581, -- Soul Cleave + [343207] = 581, -- Soul Cleave + [247454] = 581, -- Spirit Bomb + [320380] = 581, -- Thick Skin + [268175] = 581, -- Void Reaver + + -- Unholy Death Knight: + [194916] = 252, -- All Will Serve + [275699] = 252, -- Apocalypse + [316961] = 252, -- Apocalypse + [343755] = 252, -- Apocalypse + [276837] = 252, -- Army of the Damned + [42650] = 252, -- Army of the Dead + [207264] = 252, -- Bursting Sores + [207311] = 252, -- Clawing Shadows + [325554] = 252, -- Dark Transformation + [63560] = 252, -- Dark Transformation + [152280] = 252, -- Defile + [207269] = 252, -- Ebon Fever + [207317] = 252, -- Epidemic + [276023] = 252, -- Harbinger of Doom + [207272] = 252, -- Infected Claws + [77575] = 252, -- Outbreak + [277234] = 252, -- Pestilence + [194917] = 252, -- Pestilent Pustules + [51462] = 252, -- Runic Corruption + [317234] = 252, -- Scourge Strike + [55090] = 252, -- Scourge Strike + [343294] = 252, -- Soul Reaper + [207321] = 252, -- Spell Eater + [49530] = 252, -- Sudden Doom + [317250] = 252, -- Summon Gargoyle + [49206] = 252, -- Summon Gargoyle + [207289] = 252, -- Unholy Assault + [115989] = 252, -- Unholy Blight + [319230] = 252, -- Unholy Pact - [102] = "DRUID", -- Balance Druid - [103] = "DRUID", -- Feral Druid - [104] = "DRUID", -- Guardian Druid - [105] = "DRUID", -- Restoration Druid + -- Frost Death Knight: + [207142] = 251, -- Avalanche + [207167] = 251, -- Blinding Sleet + [152279] = 251, -- Breath of Sindragosa + [281208] = 251, -- Cold Heart + [317230] = 251, -- Empower Rune Weapon + [47568] = 251, -- Empower Rune Weapon + [316803] = 251, -- Frost Strike + [49143] = 251, -- Frost Strike + [207230] = 251, -- Frostscythe + [279302] = 251, -- Frostwyrm's Fury + [194909] = 251, -- Frozen Pulse + [194912] = 251, -- Gathering Storm + [194913] = 251, -- Glacial Advance + [57330] = 251, -- Horn of Winter + [49184] = 251, -- Howling Blast + [321995] = 251, -- Hypothermic Presence + [207126] = 251, -- Icecap + [194878] = 251, -- Icy Talons + [253593] = 251, -- Inexorable Assault + [317214] = 251, -- Killing Machine + [51128] = 251, -- Killing Machine + [343252] = 251, -- Might of the Frozen Wastes + [81333] = 251, -- Might of the Frozen Wastes + [207061] = 251, -- Murderous Efficiency + [317198] = 251, -- Obliterate + [49020] = 251, -- Obliterate + [281238] = 251, -- Obliteration + [207200] = 251, -- Permafrost + [316849] = 251, -- Pillar of Frost + [51271] = 251, -- Pillar of Frost + [196770] = 251, -- Remorseless Winter + [316794] = 251, -- Remorseless Winter + [316838] = 251, -- Rime + [59057] = 251, -- Rime + [207104] = 251, -- Runic Attenuation + [81229] = 251, -- Runic Empowerment - [253] = "HUNTER", -- Beast Mastery Hunter - [254] = "HUNTER", -- Marksmanship Hunter - [255] = "HUNTER", -- Survival Hunter + -- Blood Death Knight: + [205727] = 250, -- Anti-Magic Barrier + [316634] = 250, -- Blood Boil + [50842] = 250, -- Blood Boil + [221699] = 250, -- Blood Tap + [206931] = 250, -- Blooddrinker + [195679] = 250, -- Bloodworms + [194844] = 250, -- Bonestorm + [205224] = 250, -- Consumption + [274156] = 250, -- Consumption + [81136] = 250, -- Crimson Scourge + [49028] = 250, -- Dancing Rune Weapon + [195292] = 250, -- Death's Caress + [206974] = 250, -- Foul Bulwark + [108199] = 250, -- Gorefiend's Grasp + [206930] = 250, -- Heart Strike + [316575] = 250, -- Heart Strike + [317090] = 250, -- Heart Strike + [221536] = 250, -- Heartbreaker + [273946] = 250, -- Hemostasis + [206940] = 250, -- Mark of Blood + [195182] = 250, -- Marrowrend + [316746] = 250, -- Marrowrend + [219786] = 250, -- Ossuary + [114556] = 250, -- Purgatory + [194662] = 250, -- Rapid Decomposition + [205723] = 250, -- Red Thirst + [317610] = 250, -- Relish in Blood + [194679] = 250, -- Rune Tap + [316616] = 250, -- Rune Tap + [206970] = 250, -- Tightening Grasp + [219809] = 250, -- Tombstone + [317133] = 250, -- Vampiric Blood + [55233] = 250, -- Vampiric Blood + [273953] = 250, -- Voracious + [206967] = 250, -- Will of the Necropolis + - [62] = "MAGE", -- Arcane Mage - [63] = "MAGE", -- Fire Mage - [64] = "MAGE", -- Frost Mage + -- Balance Druid: + [236168] = 102, -- Starfall + [136060] = 102, -- Celestial Alignment + [252188] = 102, -- Solar Beam + [631519] = 102, -- Shooting Stars + [132123] = 102, -- Fury of Elune + + -- Feral Druid: + [132185] = 103, -- Predatory Swiftness + [132242] = 103, -- Tiger's Fury + [132278] = 103, -- Primal Fury + [132141] = 103, -- Brutal Slash - [268] = "MONK", -- Brewmaster Monk - [269] = "MONK", -- Windwalker Monk - [270] = "MONK", -- Mistweaver Monk + -- Guardian Druid: + [571585] = 104, -- Gore + [1033479] = 104, -- Guardian of Elune + [1033490] = 104, -- Pulverize + [132139] = 104, -- Blood Frenzy + [571586] = 104, -- Incarnation: Guardian of Ursoc - [65] = "PALADIN", -- Holy Paladin - [66] = "PALADIN", -- Protection Paladin - [70] = "PALADIN", -- Retribution Paladin + -- Restoration Druid: + [740] = 105, -- Tranquility + [102342] = 105, -- Ironbark + [33763] = 105, -- Lifebloom + [88423] = 105, -- Nature's Cure + [145205] = 105, --Efflorescence + + -- Beast Mastery Hunter: + [267116] = 253, -- Animal Companion + [191384] = 253, -- Aspect of the Beast + [193530] = 253, -- Aspect of the Wild + [217200] = 253, -- Barbed Shot + [115939] = 253, -- Beast Cleave + [19574] = 253, -- Bestial Wrath + [231548] = 253, -- Bestial Wrath + [321530] = 253, -- Bloodshed + [193455] = 253, -- Cobra Shot + [262838] = 253, -- Cobra Shot + [120679] = 253, -- Dire Beast + [53270] = 253, -- Exotic Beasts + [199532] = 253, -- Killer Cobra + [273887] = 253, -- Killer Instinct + [56315] = 253, -- Kindred Spirits + [199528] = 253, -- One with the Pack + [321014] = 253, -- Pack Tactics + [193532] = 253, -- Scent of Blood + [285564] = 253, -- Scent of Blood + [257891] = 253, -- Spitting Cobra + [201430] = 253, -- Stampede + [199530] = 253, -- Stomp + [257944] = 253, -- Thrill of the Hunt + [185789] = 253, -- Wild Call + + -- Marksmanship Hunter: + [19434] = 254, -- Aimed Shot + [321468] = 254, -- Binding Shackles + [186387] = 254, -- Bursting Shot + [260404] = 254, -- Calling the Shots + [260228] = 254, -- Careful Aim + [321460] = 254, -- Dead Eye + [260402] = 254, -- Double Tap + [212431] = 254, -- Explosive Shot + [260393] = 254, -- Lethal Shots + [194595] = 254, -- Lock and Load + [155228] = 254, -- Lone Wolf + [260309] = 254, -- Master Marksman + [260240] = 254, -- Precise Shots + [257044] = 254, -- Rapid Fire + [321281] = 254, -- Rapid Fire + [193533] = 254, -- Steady Focus + [260367] = 254, -- Streamline + [257621] = 254, -- Trick Shots + [288613] = 254, -- Trueshot + [260243] = 254, -- Volley + [260247] = 254, -- Volley + + -- Survival Hunter: + [269737] = 255, -- Alpha Predator + [186289] = 255, -- Aspect of the Eagle + [260331] = 255, -- Birds of Prey + [260248] = 255, -- Bloodseeker + [212436] = 255, -- Butchery + [187708] = 255, -- Carve + [294029] = 255, -- Carve + [259391] = 255, -- Chakrams + [259398] = 255, -- Chakrams + [272651] = 255, -- Command Pet + [266779] = 255, -- Coordinated Assault + [269751] = 255, -- Flanking Strike + [190925] = 255, -- Harpoon + [231550] = 255, -- Harpoon + [260241] = 255, -- Hydra's Bite + [259387] = 255, -- Mongoose Bite + [187707] = 255, -- Muzzle + [186270] = 255, -- Raptor Strike + [162487] = 255, -- Steel Trap + [162488] = 255, -- Steel Trap + [265895] = 255, -- Terms of Engagement + [260285] = 255, -- Tip of the Spear + [268501] = 255, -- Viper's Venom + [259495] = 255, -- Wildfire Bomb + [271014] = 255, -- Wildfire Infusion + [195645] = 255, -- Wing Clip + [321026] = 255, -- Wing Clip + + -- Arcane Mage: + [231564] = 62, -- Arcane Barrage + [321526] = 62, -- Arcane Barrage + [44425] = 62, -- Arcane Barrage + [30451] = 62, -- Arcane Blast + [342231] = 62, -- Arcane Echo + [205022] = 62, -- Arcane Familiar + [5143] = 62, -- Arcane Missiles + [7268] = 62, -- Arcane Missiles + [153626] = 62, -- Arcane Orb + [12042] = 62, -- Arcane Power + [321739] = 62, -- Arcane Power + [343208] = 62, -- Arcane Power + [235711] = 62, -- Chrono Shift + [16870] = 62, -- Clearcasting + [321420] = 62, -- Clearcasting + [321758] = 62, -- Clearcasting + [321387] = 62, -- Enlightened + [12051] = 62, -- Evocation + [231565] = 62, -- Evocation + [110959] = 62, -- Greater Invisibility + [342249] = 62, -- Master of Time + [114923] = 62, -- Nether Tempest + [114954] = 62, -- Nether Tempest + [155147] = 62, -- Overpowered + [205025] = 62, -- Presence of Mind + [321742] = 62, -- Presence of Mind + [235450] = 62, -- Prismatic Barrier + [321745] = 62, -- Prismatic Barrier + [205028] = 62, -- Resonance + [281482] = 62, -- Reverberate + [264354] = 62, -- Rule of Threes + [236457] = 62, -- Slipstream + [31589] = 62, -- Slow + [321747] = 62, -- Slow + [157980] = 62, -- Supernova + [210805] = 62, -- Time Anomaly + [321507] = 62, -- Touch of the Magi + [343215] = 62, -- Touch of the Magi + + -- Fire Mage: + [235870] = 63, -- Alexstrasza's Fury + [157981] = 63, -- Blast Wave + [235313] = 63, -- Blazing Barrier + [321708] = 63, -- Blazing Barrier + [235365] = 63, -- Blazing Soul + [86949] = 63, -- Cauterize + [190319] = 63, -- Combustion + [321710] = 63, -- Combustion + [205023] = 63, -- Conflagration + [117216] = 63, -- Critical Mass + [231630] = 63, -- Critical Mass + [321707] = 63, -- Dragon's Breath + [133] = 63, -- Fireball + [157642] = 63, -- Fireball + [343194] = 63, -- Fireball + [203283] = 63, -- Firestarter + [205026] = 63, -- Firestarter + [205029] = 63, -- Flame On + [205037] = 63, -- Flame Patch + [2120] = 63, -- Flamestrike + [321709] = 63, -- Flamestrike + [343230] = 63, -- Flamestrike + [236058] = 63, -- Frenetic Speed + [342344] = 63, -- From the Ashes + [195283] = 63, -- Hot Streak + [155148] = 63, -- Kindling + [44457] = 63, -- Living Bomb + [44461] = 63, -- Living Bomb + [153561] = 63, -- Meteor + [257541] = 63, -- Phoenix Flames + [343222] = 63, -- Phoenix Flames + [321711] = 63, -- Pyroblast + [269650] = 63, -- Pyroclasm + [205020] = 63, -- Pyromaniac + [2948] = 63, -- Scorch + [269644] = 63, -- Searing Touch + + -- Frost Mage: + [190356] = 64, -- Blizzard + [321696] = 64, -- Blizzard + [205027] = 64, -- Bone Chilling + [190447] = 64, -- Brain Freeze + [231584] = 64, -- Brain Freeze + [278309] = 64, -- Chain Reaction + [235219] = 64, -- Cold Snap + [321699] = 64, -- Cold Snap + [153595] = 64, -- Comet Storm + [120] = 64, -- Cone of Cold + [343180] = 64, -- Cone of Cold + [257537] = 64, -- Ebonbolt + [112965] = 64, -- Fingers of Frost + [44614] = 64, -- Flurry + [270233] = 64, -- Freezing Rain + [235224] = 64, -- Frigid Winds + [84714] = 64, -- Frozen Orb + [84721] = 64, -- Frozen Orb + [205030] = 64, -- Frozen Touch + [235297] = 64, -- Glacial Insulation + [199786] = 64, -- Glacial Spike + [11426] = 64, -- Ice Barrier + [108839] = 64, -- Ice Floes + [30455] = 64, -- Ice Lance + [343175] = 64, -- Ice Lance + [157997] = 64, -- Ice Nova + [12472] = 64, -- Icy Veins + [321702] = 64, -- Icy Veins + [205024] = 64, -- Lonely Winter + [205021] = 64, -- Ray of Frost + [12982] = 64, -- Shatter + [231582] = 64, -- Shatter + [31687] = 64, -- Summon Water Elemental + [155149] = 64, -- Thermal Void + + -- Brewmaster Monk: + [115399] = 268, -- Black Ox Brew + [196736] = 268, -- Blackout Combo + [280515] = 268, -- Bob and Weave + [115181] = 268, -- Breath of Fire + [123725] = 268, -- Breath of Fire + [245013] = 268, -- Brewmaster's Balance + [322507] = 268, -- Celestial Brew + [322510] = 268, -- Celestial Brew + [325177] = 268, -- Celestial Flames + [216519] = 268, -- Celestial Fortune + [324312] = 268, -- Clash + [325153] = 268, -- Exploding Keg + [124502] = 268, -- Gift of the Ox + [124507] = 268, -- Gift of the Ox + [196737] = 268, -- High Tolerance + [121253] = 268, -- Keg Smash + [325093] = 268, -- Light Brewing + [119582] = 268, -- Purifying Brew + [343743] = 268, -- Purifying Brew + [322120] = 268, -- Shuffle + [196730] = 268, -- Special Delivery + [242580] = 268, -- Spitfire + [115069] = 268, -- Stagger + [322522] = 268, -- Stagger + [115315] = 268, -- Summon Black Ox Statue + [115176] = 268, -- Zen Meditation + [328682] = 268, -- Zen Meditation + + + -- Windwalker Monk: + [116092] = 269, -- Afterlife + [196707] = 269, -- Afterlife + [322719] = 269, -- Afterlife + [115396] = 269, -- Ascension + [161862] = 269, -- Ascension + [325201] = 269, -- Dance of Chi-Ji + [116095] = 269, -- Disable + [343731] = 269, -- Disable + [115288] = 269, -- Energizing Elixir + [261947] = 269, -- Fist of the White Tiger + [113656] = 269, -- Fists of Fury + [117418] = 269, -- Fists of Fury + [101545] = 269, -- Flying Serpent Kick + [123586] = 269, -- Flying Serpent Kick + [280195] = 269, -- Good Karma + [196740] = 269, -- Hit Combo + [261767] = 269, -- Inner Strength + [152173] = 269, -- Serenity + [280197] = 269, -- Spiritual Focus + [122470] = 269, -- Touch of Karma + [124280] = 269, -- Touch of Karma + [152175] = 269, -- Whirling Dragon Punch + [157411] = 269, -- Windwalking + + -- Mistweaver Monk: + [343655] = 270, -- Enveloping Breath + [124682] = 270, -- Enveloping Mist + [231605] = 270, -- Enveloping Mist + [191837] = 270, -- Essence Font + [231633] = 270, -- Essence Font + [197895] = 270, -- Focused Thunder + [116849] = 270, -- Life Cocoon + [197915] = 270, -- Lifecycles + [197908] = 270, -- Mana Tea + [197900] = 270, -- Mist Wrap + [212051] = 270, -- Reawaken + [196725] = 270, -- Refreshing Jade Wind + [115151] = 270, -- Renewing Mist + [119611] = 270, -- Renewing Mist + [281231] = 270, -- Renewing Mist + [115310] = 270, -- Revival + [274909] = 270, -- Rising Mist + [198898] = 270, -- Song of Chi-Ji + [115175] = 270, -- Soothing Mist + [209525] = 270, -- Soothing Mist + [210802] = 270, -- Spirit of the Crane + [115313] = 270, -- Summon Jade Serpent Statue + [116645] = 270, -- Teachings of the Monastery + [116680] = 270, -- Thunder Focus Tea + [231876] = 270, -- Thunder Focus Tea + [274963] = 270, -- Upwelling + + -- Holy Paladin: + [212056] = 65, -- Absolution + [31821] = 65, -- Aura Mastery + [248033] = 65, -- Awakening + [156910] = 65, -- Beacon of Faith + [53563] = 65, -- Beacon of Light + [53652] = 65, -- Beacon of Light + [200025] = 65, -- Beacon of Virtue + [223306] = 65, -- Bestow Faith + [4987] = 65, -- Cleanse + [196926] = 65, -- Crusader's Might + [498] = 65, -- Divine Protection + [325966] = 65, -- Glimmer of Light + [82326] = 65, -- Holy Light + [114165] = 65, -- Holy Prism + [114852] = 65, -- Holy Prism + [114871] = 65, -- Holy Prism + [20473] = 65, -- Holy Shock + [25912] = 65, -- Holy Shock + [25914] = 65, -- Holy Shock + [272906] = 65, -- Holy Shock + [289941] = 65, -- Holy Shock + [53576] = 65, -- Infusion of Light + [85222] = 65, -- Light of Dawn + [183998] = 65, -- Light of the Martyr + [219562] = 65, -- Light of the Martyr + [114158] = 65, -- Light's Hammer + [114919] = 65, -- Light's Hammer + [214202] = 65, -- Rule of Law + [157047] = 65, -- Saved by the Light + - [256] = "PRIEST", -- Discipline Priest - [257] = "PRIEST", -- Holy Priest - [258] = "PRIEST", -- Shadow Priest + -- Protection Paladin: + [31850] = 66, -- Ardent Defender + [66235] = 66, -- Ardent Defender + [231665] = 66, -- Avenger's Shield + [31935] = 66, -- Avenger's Shield + [337261] = 66, -- Avenger's Shield + [204019] = 66, -- Blessed Hammer + [229976] = 66, -- Blessed Hammer + [204018] = 66, -- Blessing of Spellwarding + [204023] = 66, -- Crusader's Judgment + [204077] = 66, -- Final Stand + [203776] = 66, -- First Avenger + [85043] = 66, -- Grand Crusader + [86659] = 66, -- Guardian of Ancient Kings + [317854] = 66, -- Hammer of the Righteous + [337287] = 66, -- Hammer of the Righteous + [53595] = 66, -- Hammer of the Righteous + [315924] = 66, -- Hand of the Protector + [327193] = 66, -- Moment of Glory + [280373] = 66, -- Redoubt + [204074] = 66, -- Righteous Protector + [161800] = 66, -- Riposte + [321136] = 66, -- Shining Light + - [259] = "ROGUE", -- Assassination Rogue - [260] = "ROGUE", -- Outlaw Rogue - [261] = "ROGUE", -- Subtlety Rogue + -- Retribution Paladin: + [267344] = 70, -- Art of War + [317912] = 70, -- Art of War + [184575] = 70, -- Blade of Justice + [327981] = 70, -- Blade of Justice + [231832] = 70, -- Blade of Wrath + [231895] = 70, -- Crusade + [53385] = 70, -- Divine Storm + [326732] = 70, -- Empyrean Power + [343527] = 70, -- Execution Sentence + [343721] = 70, -- Final Reckoning + [203316] = 70, -- Fires of Justice + [183218] = 70, -- Hand of Hindrance + [215661] = 70, -- Justicar's Vengeance + [267610] = 70, -- Righteous Verdict + [85256] = 70, -- Templar's Verdict + [255937] = 70, -- Wake of Ashes + [269569] = 70, -- Zeal + + + -- Discipline Priest: + [81749] = 256, -- Atonement + [193134] = 256, -- Castigation + [197419] = 256, -- Contrition + [205367] = 256, -- Dominant Mind + [246287] = 256, -- Evangelism + [238063] = 256, -- Lenience + [193063] = 256, -- Masochism + [33206] = 256, -- Pain Suppression + [47540] = 256, -- Penance + [47666] = 256, -- Penance + [47750] = 256, -- Penance + [198068] = 256, -- Power of the Dark Side + [204197] = 256, -- Purge the Wicked + [47536] = 256, -- Rapture + [214621] = 256, -- Schism + [314867] = 256, -- Shadow Covenant + [197045] = 256, -- Shield Discipline + [280391] = 256, -- Sins of the Many + [109964] = 256, -- Spirit Shell - [262] = "SHAMAN", -- Elemental Shaman - [263] = "SHAMAN", -- Enhancement Shaman - [264] = "SHAMAN", -- Restoration Shaman + -- Holy Priest: + [116092] = 257, -- Afterlife + [196707] = 257, -- Afterlife + [322719] = 257, -- Afterlife + [238100] = 257, -- Angel's Mercy + [200183] = 257, -- Apotheosis + [193157] = 257, -- Benediction + [32546] = 257, -- Binding Heal + [200199] = 257, -- Censure + [204883] = 257, -- Circle of Healing + [238136] = 257, -- Cosmic Ripple + [64843] = 257, -- Divine Hymn + [193155] = 257, -- Enlightenment + [2061] = 257, -- Flash Heal + [200209] = 257, -- Guardian Angel + [47788] = 257, -- Guardian Spirit + [2060] = 257, -- Heal + [14914] = 257, -- Holy Fire + [196985] = 257, -- Light of the Naaru + [321377] = 257, -- Prayer Circle + [596] = 257, -- Prayer of Healing + [319912] = 257, -- Prayer of Mending + [33076] = 257, -- Prayer of Mending + [33110] = 257, -- Prayer of Mending + [139] = 257, -- Renew + [341997] = 257, -- Renewed Faith + [20711] = 257, -- Spirit of Redemption + [215769] = 257, -- Spirit of Redemption + [109186] = 257, -- Surge of Light + [64901] = 257, -- Symbol of Hope + [200128] = 257, -- Trail of Light + + -- Shadow Priest: + [341240] = 258, -- Ancient Madness + [341374] = 258, -- Damnation + [341205] = 258, -- Dark Thoughts + [321291] = 258, -- Death and Madness + [335467] = 258, -- Devouring Plague + [322108] = 258, -- Dispersion + [193195] = 258, -- Fortress of the Mind + [280752] = 258, -- Hallucinations + [288733] = 258, -- Intangibility + [263716] = 258, -- Last Word + [193225] = 258, -- Legacy of the Void + [205369] = 258, -- Mind Bomb + [15407] = 258, -- Mind Flay + [238558] = 258, -- Misery + [64044] = 258, -- Psychic Horror + [213634] = 258, -- Purify Disease + [199855] = 258, -- San'layn + [341385] = 258, -- Searing Nightmare + [342834] = 258, -- Shadow Crash + [232698] = 258, -- Shadowform + [341491] = 258, -- Shadowy Apparitions + [78203] = 258, -- Shadowy Apparitions + [15487] = 258, -- Silence + [319952] = 258, -- Surrender to Madness + [341273] = 258, -- Unfurling Darkness + [322110] = 258, -- Vampiric Embrace + [322116] = 258, -- Vampiric Touch + [34914] = 258, -- Vampiric Touch + [228266] = 258, -- Void Bolt + [231688] = 258, -- Void Bolt + [319914] = 258, -- Void Bolt + [228260] = 258, -- Void Eruption + [319908] = 258, -- Void Eruption + [263165] = 258, -- Void Torrent + [185916] = 258, -- Voidform + [228264] = 258, -- Voidform - [265] = "WARLOCK", -- Affliction Warlock - [266] = "WARLOCK", -- Demonology Warlock - [267] = "WARLOCK", -- Destruction Warlock + -- Assassination Rogue: + [328085] = 259, -- Blindside + [121411] = 259, -- Crimson Tempest + [193640] = 259, -- Elaborate Planning + [32645] = 259, -- Envenom + [200806] = 259, -- Exsanguinate + [51723] = 259, -- Fan of Knives + [231719] = 259, -- Garrote + [703] = 259, -- Garrote + [270061] = 259, -- Hidden Blades + [14117] = 259, -- Improved Poisons + [330542] = 259, -- Improved Poisons + [154904] = 259, -- Internal Bleeding + [196861] = 259, -- Iron Wire + [280716] = 259, -- Leeching Poison + [255989] = 259, -- Master Assassin + [196864] = 259, -- Master Poisoner + [1329] = 259, -- Mutilate + [27576] = 259, -- Mutilate + [5374] = 259, -- Mutilate + [255544] = 259, -- Poison Bomb + [185565] = 259, -- Poisoned Knife + [14190] = 259, -- Seal Fate + [319568] = 259, -- Vendetta + [79140] = 259, -- Vendetta + [152152] = 259, -- Venom Rush + [79134] = 259, -- Venomous Wounds + + -- Outlaw Rogue: + [196924] = 260, -- Acrobatic Strikes + [13750] = 260, -- Adrenaline Rush + [235484] = 260, -- Between the Eyes + [315341] = 260, -- Between the Eyes + [13877] = 260, -- Blade Flurry + [22482] = 260, -- Blade Flurry + [331851] = 260, -- Blade Flurry + [271877] = 260, -- Blade Rush + [256165] = 260, -- Blinding Powder + [35551] = 260, -- Combat Potency + [61329] = 260, -- Combat Potency + [272026] = 260, -- Dancing Steel + [108216] = 260, -- Dirty Tricks + [2098] = 260, -- Dispatch + [343142] = 260, -- Dreadblades + [196937] = 260, -- Ghostly Strike + [1776] = 260, -- Gouge + [195457] = 260, -- Grappling Hook + [319600] = 260, -- Grappling Hook + [196922] = 260, -- Hit and Run + [193546] = 260, -- Iron Stomach + [51690] = 260, -- Killing Spree + [256170] = 260, -- Loaded Dice + [185763] = 260, -- Pistol Shot + [196938] = 260, -- Quick Draw + [79096] = 260, -- Restless Blades + [256188] = 260, -- Retractable Hook + [315508] = 260, -- Roll the Bones + [14161] = 260, -- Ruthlessness + [1752] = 260, -- Sinister Strike + [193315] = 260, -- Sinister Strike + [279876] = 260, -- Sinister Strike + [279877] = 260, -- Sinister Strike + + -- Subtlety Rogue: + [319949] = 261, -- Backstab + [53] = 261, -- Backstab + [245687] = 261, -- Dark Shadow + [185314] = 261, -- Deepening Shadows + [238104] = 261, -- Enveloping Shadows + [196819] = 261, -- Eviscerate + [231716] = 261, -- Eviscerate + [316219] = 261, -- Find Weakness + [200758] = 261, -- Gloomblade + [196976] = 261, -- Master of Shadows + [277953] = 261, -- Night Terrors + [343160] = 261, -- Premeditation + [58423] = 261, -- Relentless Strikes + [280719] = 261, -- Secret Technique + [121471] = 261, -- Shadow Blades + [185313] = 261, -- Shadow Dance + [108209] = 261, -- Shadow Focus + [196912] = 261, -- Shadow Techniques + [319706] = 261, -- Shadow Techniques + [319175] = 261, -- Shadow Vault + [319178] = 261, -- Shadow Vault + [185438] = 261, -- Shadowstrike + [231718] = 261, -- Shadowstrike + [257505] = 261, -- Shot in the Dark + [197835] = 261, -- Shuriken Storm + [319951] = 261, -- Shuriken Storm + [277925] = 261, -- Shuriken Tornado + [114014] = 261, -- Shuriken Toss + [200759] = 261, -- Soothing Darkness + [212283] = 261, -- Symbols of Death + [328077] = 261, -- Symbols of Death + + -- Elemental Shaman: + [273221] = 262, -- Aftershock + [108281] = 262, -- Ancestral Guidance + [114911] = 262, -- Ancestral Guidance + [8042] = 262, -- Earth Shock + [170374] = 262, -- Earthen Rage + [61882] = 262, -- Earthquake + [77478] = 262, -- Earthquake + [320125] = 262, -- Echoing Shock + [343190] = 262, -- Elemental Fury + [60188] = 262, -- Elemental Fury + [198067] = 262, -- Fire Elemental + [210714] = 262, -- Icefury + [192222] = 262, -- Liquid Magma Totem + [16166] = 262, -- Master of the Elements + [117013] = 262, -- Primal Elementalist + [342243] = 262, -- Static Discharge + [192249] = 262, -- Storm Elemental + [262303] = 262, -- Surge of Power + [51490] = 262, -- Thunderstorm + [260895] = 262, -- Unlimited Power + + -- Enhancement Shaman: + [187874] = 263, -- Crash Lightning + [192246] = 263, -- Crashing Storm + [188089] = 263, -- Earthen Spike + [210853] = 263, -- Elemental Assault + [262624] = 263, -- Elemental Spirits + [196884] = 263, -- Feral Lunge + [231723] = 263, -- Feral Spirit + [51533] = 263, -- Feral Spirit + [333974] = 263, -- Fire Nova + [8349] = 263, -- Fire Nova + [262647] = 263, -- Forceful Winds + [334195] = 263, -- Hailstorm + [201900] = 263, -- Hot Hand + [342240] = 263, -- Ice Strike + [334046] = 263, -- Lashing Flames + [334033] = 263, -- Lava Lash + [60103] = 263, -- Lava Lash + [187880] = 263, -- Maelstrom Weapon + [58875] = 263, -- Spirit Walk + [201845] = 263, -- Stormbringer + [319930] = 263, -- Stormbringer + [334175] = 263, -- Stormfury + [17364] = 263, -- Stormstrike + [32175] = 263, -- Stormstrike + [32176] = 263, -- Stormstrike Off-Hand + [197214] = 263, -- Sundering + [343211] = 263, -- Windfury Totem + [8512] = 263, -- Windfury Totem + [33757] = 263, -- Windfury Weapon + + -- Restoration Shaman: + [207399] = 264, -- Ancestral Protection Totem + [207401] = 264, -- Ancestral Vigor + [212048] = 264, -- Ancestral Vision + [157153] = 264, -- Cloudburst Totem + [200076] = 264, -- Deluge + [207778] = 264, -- Downpour + [198838] = 264, -- Earthen Wall Totem + [280614] = 264, -- Flash Flood + [192088] = 264, -- Graceful Spirit + [73920] = 264, -- Healing Rain + [108280] = 264, -- Healing Tide Totem + [343205] = 264, -- Healing Tide Totem + [77472] = 264, -- Healing Wave + [157154] = 264, -- High Tide + [16191] = 264, -- Mana Tide Totem + [343182] = 264, -- Mana Tide Totem + [77130] = 264, -- Purify Spirit + [16196] = 264, -- Resurgence + [61295] = 264, -- Riptide + [98008] = 264, -- Spirit Link Totem + [320746] = 264, -- Surge of Earth + [320747] = 264, -- Surge of Earth + [231785] = 264, -- Tidal Waves + [51564] = 264, -- Tidal Waves + [200072] = 264, -- Torrent + [200071] = 264, -- Undulation + [73685] = 264, -- Unleash Life + [52127] = 264, -- Water Shield + [197995] = 264, -- Wellspring + + -- Affliction : + [196103] = 265, -- Absolute Corruption + [231792] = 265, -- Agony + [980] = 265, -- Agony + [264000] = 265, -- Creeping Death + [334183] = 265, -- Dark Caller + [198590] = 265, -- Drain Soul + [48181] = 265, -- Haunt + [334319] = 265, -- Inevitable Demise + [324536] = 265, -- Malefic Rapture + [108558] = 265, -- Nightfall + [205179] = 265, -- Phantom Singularity + [27243] = 265, -- Seed of Corruption + [27285] = 265, -- Seed of Corruption + [32388] = 265, -- Shadow Embrace + [63106] = 265, -- Siphon Life + [196226] = 265, -- Sow the Seeds + [205180] = 265, -- Summon Darkglare + [231791] = 265, -- Unstable Affliction + [316099] = 265, -- Unstable Affliction + [334315] = 265, -- Unstable Affliction + [278350] = 265, -- Vile Taint + [196102] = 265, -- Writhe in Agony - [71] = "WARRIOR", -- Arms Warrior - [72] = "WARRIOR", -- Fury Warrior - [73] = "WARRIOR", -- Protection Warrior + -- Demonology Warlock: + [267211] = 266, -- Bilescourge Bombers + [104316] = 266, -- Call Dreadstalkers + [334727] = 266, -- Call Dreadstalkers + [264178] = 266, -- Demonbolt + [205145] = 266, -- Demonic Calling + [267215] = 266, -- Demonic Consumption + [267171] = 266, -- Demonic Strength + [603] = 266, -- Doom + [264078] = 266, -- Dreadlash + [267170] = 266, -- From the Shadows + [105174] = 266, -- Hand of Gul'dan + [196277] = 266, -- Implosion + [267216] = 266, -- Inner Demons + [267217] = 266, -- Nether Portal + [264130] = 266, -- Power Siphon + [267214] = 266, -- Sacrificed Souls + [108415] = 266, -- Soul Link + [264057] = 266, -- Soul Strike + [265187] = 266, -- Summon Demonic Tyrant + [334585] = 266, -- Summon Demonic Tyrant + [30146] = 266, -- Summon Felguard + [264119] = 266, -- Summon Vilefiend + + -- Destruction Warlock: + [196406] = 267, -- Backdraft + [152108] = 267, -- Cataclysm + [196447] = 267, -- Channel Demonfire + [116858] = 267, -- Chaos Bolt + [215279] = 267, -- Chaos Bolt + [17962] = 267, -- Conflagrate + [231793] = 267, -- Conflagrate + [196412] = 267, -- Eradication + [196408] = 267, -- Fire and Brimstone + [267115] = 267, -- Flashover + [335174] = 267, -- Havoc + [80240] = 267, -- Havoc + [193541] = 267, -- Immolate + [348] = 267, -- Immolate + [29722] = 267, -- Incinerate + [270545] = 267, -- Inferno + [266134] = 267, -- Internal Combustion + [266086] = 267, -- Rain of Chaos + [335189] = 267, -- Rain of Fire + [42223] = 267, -- Rain of Fire + [5740] = 267, -- Rain of Fire + [205148] = 267, -- Reverse Entropy + [205184] = 267, -- Roaring Blaze + [17877] = 267, -- Shadowburn + [6353] = 267, -- Soul Fire + [1122] = 267, -- Summon Infernal + [335175] = 267, -- Summon Infernal + + + -- Arms Warrior: + [845] = 71, -- Cleave + [334779] = 71, -- Collateral Damage + [167105] = 71, -- Colossus Smash + [316411] = 71, -- Colossus Smash + [262228] = 71, -- Deadly Calm + [197690] = 71, -- Defensive Stance + [118038] = 71, -- Die by the Sword + [315948] = 71, -- Die by the Sword + [262150] = 71, -- Dreadnaught + [202316] = 71, -- Fervor of Battle + [248621] = 71, -- In For The Kill + [12294] = 71, -- Mortal Strike + [261900] = 71, -- Mortal Strike + [316440] = 71, -- Overpower + [316441] = 71, -- Overpower + [7384] = 71, -- Overpower + [772] = 71, -- Rend + [279423] = 71, -- Seasoned Soldier + [29838] = 71, -- Second Wind + [260643] = 71, -- Skullsplitter + [260708] = 71, -- Sweeping Strikes + [316432] = 71, -- Sweeping Strikes + [316433] = 71, -- Sweeping Strikes + [184783] = 71, -- Tactician + [262161] = 71, -- Warbreaker + + -- Fury Warrior: + [23881] = 72, -- Bloodthirst + [316537] = 72, -- Bloodthirst + [335070] = 72, -- Cruelty + [184361] = 72, -- Enrage + [316424] = 72, -- Enrage + [316425] = 72, -- Enrage + [184364] = 72, -- Enraged Regeneration + [316474] = 72, -- Enraged Regeneration + [335077] = 72, -- Frenzy + [215568] = 72, -- Fresh Meat + [215571] = 72, -- Frothing Berserker + [202224] = 72, -- Furious Charge + [280392] = 72, -- Meat Cleaver + [315720] = 72, -- Onslaught + [316452] = 72, -- Raging Blow + [316453] = 72, -- Raging Blow + [85288] = 72, -- Raging Blow + [85384] = 72, -- Raging Blow + [96103] = 72, -- Raging Blow + [184367] = 72, -- Rampage + [209694] = 72, -- Rampage + [316412] = 72, -- Rampage + [316519] = 72, -- Rampage + [202751] = 72, -- Reckless Abandon + [1719] = 72, -- Recklessness + [316828] = 72, -- Recklessness + [335091] = 72, -- Seethe + [280772] = 72, -- Siegebreaker + [81099] = 72, -- Single-Minded Fury + [46917] = 72, -- Titan's Grip + [208154] = 72, -- Warpaint + + + -- Protection Warrior: + [202560] = 73, -- Best Served Cold + [280001] = 73, -- Bolster + [202743] = 73, -- Booming Voice + [203201] = 73, -- Crackling Thunder + [115767] = 73, -- Deep Wounds + [115768] = 73, -- Deep Wounds + [1160] = 73, -- Demoralizing Shout + [316464] = 73, -- Demoralizing Shout + [20243] = 73, -- Devastate + [236279] = 73, -- Devastator + [203177] = 73, -- Heavy Repercussions + [202095] = 73, -- Indomitable + [202603] = 73, -- Into the Fray + [12975] = 73, -- Last Stand + [275338] = 73, -- Menace + [202561] = 73, -- Never Surrender + [275334] = 73, -- Punish + [6572] = 73, -- Revenge + [161798] = 73, -- Riposte + [275339] = 73, -- Rumbling Earth + [316834] = 73, -- Shield Wall + [871] = 73, -- Shield Wall + [46968] = 73, -- Shockwave + [316414] = 73, -- Thunder Clap + [6343] = 73, -- Thunder Clap + [275336] = 73, -- Unstoppable Force + [316428] = 73, -- Vanguard + [71] = 73, -- Vanguard + } - + + _detalhes.SpecIDToClass = { + [577] = "DEMONHUNTER", -- Havoc Demon Hunter + [581] = "DEMONHUNTER", -- Vengeance Demon Hunter + + [252] = "DEATHKNIGHT", -- Unholy Death Knight + [251] = "DEATHKNIGHT", -- Frost Death Knight + [250] = "DEATHKNIGHT", -- Blood Death Knight + + [102] = "DRUID", -- Balance Druid + [103] = "DRUID", -- Feral Druid + [104] = "DRUID", -- Guardian Druid + [105] = "DRUID", -- Restoration Druid + + [253] = "HUNTER", -- Beast Mastery Hunter + [254] = "HUNTER", -- Marksmanship Hunter + [255] = "HUNTER", -- Survival Hunter + + [62] = "MAGE", -- Arcane Mage + [63] = "MAGE", -- Fire Mage + [64] = "MAGE", -- Frost Mage + + [268] = "MONK", -- Brewmaster Monk + [269] = "MONK", -- Windwalker Monk + [270] = "MONK", -- Mistweaver Monk + + [65] = "PALADIN", -- Holy Paladin + [66] = "PALADIN", -- Protection Paladin + [70] = "PALADIN", -- Retribution Paladin + + [256] = "PRIEST", -- Discipline Priest + [257] = "PRIEST", -- Holy Priest + [258] = "PRIEST", -- Shadow Priest + + [259] = "ROGUE", -- Assassination Rogue + [260] = "ROGUE", -- Outlaw Rogue + [261] = "ROGUE", -- Subtlety Rogue + + [262] = "SHAMAN", -- Elemental Shaman + [263] = "SHAMAN", -- Enhancement Shaman + [264] = "SHAMAN", -- Restoration Shaman + + [265] = "WARLOCK", -- Affliction Warlock + [266] = "WARLOCK", -- Demonology Warlock + [267] = "WARLOCK", -- Destruction Warlock + + [71] = "WARRIOR", -- Arms Warrior + [72] = "WARRIOR", -- Fury Warrior + [73] = "WARRIOR", -- Protection Warrior + } + end + _detalhes.ClassSpellList = { --death knight diff --git a/plugins/Details_EncounterDetails/Details_EncounterDetails.lua b/plugins/Details_EncounterDetails/Details_EncounterDetails.lua index 2325208fe..77af236d4 100644 --- a/plugins/Details_EncounterDetails/Details_EncounterDetails.lua +++ b/plugins/Details_EncounterDetails/Details_EncounterDetails.lua @@ -2168,7 +2168,7 @@ function EncounterDetails:OnEvent (_, event, ...) if (_G._detalhes and _G._detalhes:InstallOkey()) then - if (DetailsFramework.IsTimewalkWoW()) then + if (DetailsFramework.IsClassicWow()) then return end @@ -2180,7 +2180,7 @@ function EncounterDetails:OnEvent (_, event, ...) local PLUGIN_LOCALIZED_NAME = Loc ["STRING_PLUGIN_NAME"] local PLUGIN_REAL_NAME = "DETAILS_PLUGIN_ENCOUNTER_DETAILS" local PLUGIN_ICON = [[Interface\Scenarios\ScenarioIcon-Boss]] - local PLUGIN_AUTHOR = "Details! Team" + local PLUGIN_AUTHOR = "Terciob" local PLUGIN_VERSION = "v1.06" local default_settings = { diff --git a/plugins/Details_RaidCheck/Details_RaidCheck.lua b/plugins/Details_RaidCheck/Details_RaidCheck.lua index 189fc8419..ae4b12b10 100644 --- a/plugins/Details_RaidCheck/Details_RaidCheck.lua +++ b/plugins/Details_RaidCheck/Details_RaidCheck.lua @@ -948,7 +948,7 @@ end if (_G._detalhes) then - if (DetailsFramework.IsTimewalkWoW()) then + if (DetailsFramework.IsClassicWow()) then return end @@ -974,7 +974,7 @@ end --make it load after the other plugins C_Timer.After(1, function() --> install - local install, saveddata, is_enabled = _G._detalhes:InstallPlugin ("TOOLBAR", Loc ["STRING_RAIDCHECK_PLUGIN_NAME"], [[Interface\Buttons\UI-CheckBox-Check]], DetailsRaidCheck, "DETAILS_PLUGIN_RAIDCHECK", MINIMAL_DETAILS_VERSION_REQUIRED, "Details! Team", version, default_settings) + local install, saveddata, is_enabled = _G._detalhes:InstallPlugin ("TOOLBAR", Loc ["STRING_RAIDCHECK_PLUGIN_NAME"], [[Interface\Buttons\UI-CheckBox-Check]], DetailsRaidCheck, "DETAILS_PLUGIN_RAIDCHECK", MINIMAL_DETAILS_VERSION_REQUIRED, "Terciob", version, default_settings) if (type (install) == "table" and install.error) then return print (install.error) end diff --git a/plugins/Details_Streamer/Details_Streamer.lua b/plugins/Details_Streamer/Details_Streamer.lua index e761c62b1..13fe37c36 100644 --- a/plugins/Details_Streamer/Details_Streamer.lua +++ b/plugins/Details_Streamer/Details_Streamer.lua @@ -2286,7 +2286,7 @@ function StreamOverlay:OnEvent (_, event, ...) StreamOverlay.DefaultConfigTable = default_options_table --> Install - local install, saveddata = _G._detalhes:InstallPlugin ("TOOLBAR", "Action Tracker", [[Interface\MINIMAP\MOVIERECORDINGICON]], StreamOverlay, "DETAILS_PLUGIN_STREAM_OVERLAY", MINIMAL_DETAILS_VERSION_REQUIRED, "Details! Team", StreamOverlay.CurrentVersion, default_options_table) + local install, saveddata = _G._detalhes:InstallPlugin ("TOOLBAR", "Action Tracker", [[Interface\MINIMAP\MOVIERECORDINGICON]], StreamOverlay, "DETAILS_PLUGIN_STREAM_OVERLAY", MINIMAL_DETAILS_VERSION_REQUIRED, "Terciob", StreamOverlay.CurrentVersion, default_options_table) if (type (install) == "table" and install.error) then print (install.error) end diff --git a/plugins/Details_TinyThreat/Details_TinyThreat.lua b/plugins/Details_TinyThreat/Details_TinyThreat.lua index 98b116869..ff65d510c 100644 --- a/plugins/Details_TinyThreat/Details_TinyThreat.lua +++ b/plugins/Details_TinyThreat/Details_TinyThreat.lua @@ -689,7 +689,7 @@ function ThreatMeter:OnEvent (_, event, ...) local MINIMAL_DETAILS_VERSION_REQUIRED = 1 --> Install - local install, saveddata = _G._detalhes:InstallPlugin ("RAID", Loc ["STRING_PLUGIN_NAME"], "Interface\\Icons\\Ability_Druid_Cower", ThreatMeter, "DETAILS_PLUGIN_TINY_THREAT", MINIMAL_DETAILS_VERSION_REQUIRED, "Details! Team", "v1.07") + local install, saveddata = _G._detalhes:InstallPlugin ("RAID", Loc ["STRING_PLUGIN_NAME"], "Interface\\Icons\\Ability_Druid_Cower", ThreatMeter, "DETAILS_PLUGIN_TINY_THREAT", MINIMAL_DETAILS_VERSION_REQUIRED, "Terciob", "v2.01") if (type (install) == "table" and install.error) then print (install.error) end diff --git a/plugins/Details_Vanguard/Details_Vanguard.lua b/plugins/Details_Vanguard/Details_Vanguard.lua index 663d26a5d..9791ae7ea 100644 --- a/plugins/Details_Vanguard/Details_Vanguard.lua +++ b/plugins/Details_Vanguard/Details_Vanguard.lua @@ -138,7 +138,7 @@ local function CreatePluginFrames (data) Vanguard:CombatEnd() Vanguard:ResetBars() - Vanguard:ResetBlocks() + --Vanguard:ResetBlocks() elseif (event == "GROUP_ONLEAVE") then @@ -157,11 +157,13 @@ local function CreatePluginFrames (data) elseif (event == "DETAILS_INSTANCE_ENDRESIZE" or event == "DETAILS_INSTANCE_SIZECHANGED") then --Vanguard:OnResize() - + elseif (event == "PLUGIN_DISABLED") then - + elseif (event == "PLUGIN_ENABLED") then - + + elseif (event == "DETAILS_OPTIONS_MODIFIED") then + Vanguard.RefreshWidgets() end end @@ -338,6 +340,8 @@ local function CreatePluginFrames (data) local width = Vanguard.db.tank_block_size self:SetWidth (width) self:SetBackdropColor (unpack (Vanguard.db.tank_block_color)) + self.unitFrame.healthBar.background:SetColorTexture(unpack (Vanguard.db.tank_block_color)) + self.unitFrame.healthBar.Settings.BackgroundColor = Vanguard.db.tank_block_color --texture self.unitFrame.healthBar:SetTexture (SharedMedia:Fetch("statusbar", Vanguard.db.tank_block_texture)) @@ -347,14 +351,14 @@ local function CreatePluginFrames (data) local debuff_on_enter = function (self) if (self.spellid) then - self.texture:SetBlendMode ("ADD") + --self.texture:SetBlendMode ("ADD") GameTooltip:SetOwner (self, "ANCHOR_TOPLEFT") GameTooltip:SetSpellByID (self.spellid) GameTooltip:Show() end end local debuff_on_leave = function (self) - self.texture:SetBlendMode ("BLEND") + --self.texture:SetBlendMode ("BLEND") if (self.spellid) then GameTooltip:Hide() end @@ -456,51 +460,57 @@ local function CreatePluginFrames (data) f.debuffs_next_index = 1 for i = 1, CONST_DEBUFF_AMOUNT do - local support_frame = CreateFrame ("frame", nil, f.unitFrame, "BackdropTemplate") + local support_frame = CreateFrame ("frame", "VanguardSupportFrame_"..index.."_"..i, f.unitFrame, "BackdropTemplate") support_frame:SetFrameLevel (f.unitFrame:GetFrameLevel()+10) support_frame:SetSize (24, 24) support_frame:SetScript ("OnMouseUp", on_click) --icon texture - local texture = support_frame:CreateTexture (nil, "overlay") + local texture = support_frame:CreateTexture (support_frame:GetName() .. "_Texture", "overlay") texture:SetSize (24, 24) texture:SetPoint("center", support_frame, "center", 0, 0) local y = 3 local xOffSet = (i-1) * (texture:GetWidth() + 1) + support_frame.offset = xOffSet support_frame:SetPoint ("left", f, "left", 5 + xOffSet, -8) - local dblock = CreateFrame ("cooldown", "VanguardTankBlock" .. index.. "Cooldown" .. i, support_frame, "CooldownFrameTemplate, BackdropTemplate") + local dblock = CreateFrame ("cooldown", "VanguardTankDebuffCooldown" .. index.. "_" .. i, support_frame, "CooldownFrameTemplate, BackdropTemplate") dblock:SetAlpha (0.7) dblock:SetPoint ("topleft", texture, "topleft") dblock:SetPoint ("bottomright", texture, "bottomright") + + --scripts dblock:SetScript ("OnMouseUp", on_click) + dblock:SetScript ("OnEnter", debuff_on_enter) + dblock:SetScript ("OnLeave", debuff_on_leave) + dblock.texture = texture dblock:SetHideCountdownNumbers(true) - - dblock:SetScript ("OnEnter", debuff_on_enter) - dblock:SetScript ("OnLeave", debuff_on_leave) - local elevateStringsFrame = CreateFrame("frame", nil, support_frame) + local elevateStringsFrame = CreateFrame("frame", support_frame:GetName() .. "_ElevateFrame", support_frame) elevateStringsFrame:SetAllPoints() elevateStringsFrame:SetFrameLevel(dblock:GetFrameLevel()+10) + elevateStringsFrame:EnableMouse(false) - local stack = elevateStringsFrame:CreateFontString (nil, "overlay", "GameFontNormal") + local stack = elevateStringsFrame:CreateFontString (elevateStringsFrame:GetName() .. "_StackText", "overlay", "GameFontNormal") stack:SetPoint ("bottomright", dblock, "bottomright", 0, 0) DetailsFramework:SetFontColor(stack, "yellow") - local stack_bg = elevateStringsFrame:CreateTexture (nil, "artwork") + local stack_bg = elevateStringsFrame:CreateTexture (elevateStringsFrame:GetName() .. "_StackBG", "artwork") stack_bg:SetColorTexture(0, 0, 0, 1) stack_bg:SetPoint ("center", stack, "center", 0, 0) stack_bg:SetSize(10, 10) + stack_bg:Hide() - dblock.Timer = dblock:CreateFontString(nil, "overlay", "NumberFontNormal") + dblock.Timer = dblock:CreateFontString(dblock:GetName() .. "_Timer", "overlay", "NumberFontNormal") dblock.Timer:SetPoint("center") dblock.stack = stack dblock.stack_bg = stack_bg dblock.support = support_frame + dblock.elevate_frame = elevateStringsFrame f.debuffs_blocks [i] = dblock end @@ -532,10 +542,76 @@ local function CreatePluginFrames (data) end function Vanguard.RefreshWidgets() + + local hostInstance = Vanguard:GetInstance(Vanguard.instance_id) + local isClickThrough = hostInstance.clickthrough_window + local isClickThrough_InCombat = hostInstance.clickthrough_incombatonly + for i, f in pairs(Vanguard.TankBlocks) do for debuffBlockId = 1, CONST_DEBUFF_AMOUNT do local debuffBlock = f.debuffs_blocks[debuffBlockId] DetailsFramework:SetFontSize(debuffBlock.Timer, Vanguard.db.aura_timer_text_size) + debuffBlock.support:SetPoint ("left", f, "left", 5 + debuffBlock.support.offset, -8 + Vanguard.db.aura_offset_y) + end + + if (isClickThrough) then + if (isClickThrough_InCombat) then + if (InCombatLockdown()) then + f:EnableMouse(false) + f.unitFrame:EnableMouse(false) + f.unitFrame.healthBar:EnableMouse(false) + f.unitFrame.powerBar:EnableMouse(false) + f.unitFrame.castBar:EnableMouse(false) + for debuffBlockId = 1, CONST_DEBUFF_AMOUNT do + local debuffBlock = f.debuffs_blocks[debuffBlockId] + debuffBlock:EnableMouse(false) + debuffBlock.support:EnableMouse(false) + --debuffBlock.elevate_frame:EnableMouse(false) + end + f.heal_inc:EnableMouse(false) + else + f:EnableMouse(true) + f.unitFrame:EnableMouse(true) + f.unitFrame.healthBar:EnableMouse(true) + f.unitFrame.powerBar:EnableMouse(true) + f.unitFrame.castBar:EnableMouse(true) + for debuffBlockId = 1, CONST_DEBUFF_AMOUNT do + local debuffBlock = f.debuffs_blocks[debuffBlockId] + debuffBlock:EnableMouse(true) + debuffBlock.support:EnableMouse(true) + --debuffBlock.elevate_frame:EnableMouse(true) + debuffBlock:SetScript("OnMouseUp", on_click) + end + f.heal_inc:EnableMouse(true) + end + else + f:EnableMouse(false) + f.unitFrame:EnableMouse(false) + f.unitFrame.healthBar:EnableMouse(false) + f.unitFrame.powerBar:EnableMouse(false) + f.unitFrame.castBar:EnableMouse(false) + for debuffBlockId = 1, CONST_DEBUFF_AMOUNT do + local debuffBlock = f.debuffs_blocks[debuffBlockId] + debuffBlock:EnableMouse(false) + debuffBlock.support:EnableMouse(false) + --debuffBlock.elevate_frame:EnableMouse(false) + end + f.heal_inc:EnableMouse(false) + end + else + f:EnableMouse(true) + f.unitFrame:EnableMouse(true) + f.unitFrame.healthBar:EnableMouse(true) + f.unitFrame.powerBar:EnableMouse(true) + f.unitFrame.castBar:EnableMouse(true) + for debuffBlockId = 1, CONST_DEBUFF_AMOUNT do + local debuffBlock = f.debuffs_blocks[debuffBlockId] + debuffBlock:EnableMouse(true) + debuffBlock.support:EnableMouse(true) + --debuffBlock.elevate_frame:EnableMouse(true) + debuffBlock:SetScript("OnMouseUp", on_click) + end + f.heal_inc:EnableMouse(true) end --texture @@ -580,10 +656,10 @@ local function CreatePluginFrames (data) f.unitFrame.castBar:SetPoint("topleft", f, "topleft", 0, 0) f.unitFrame.castBar:SetPoint("topright", f, "topright", 0, 0) end - else - f.unitFrame.castBar:Hide() end + f.unitFrame.castBar:Hide() + if (Vanguard.db.show_power_bar) then f.unitFrame.powerBar:Show() f.unitFrame.powerBar:SetHeight(Vanguard.db.tank_block_powerbar_size_height) @@ -746,6 +822,8 @@ local function CreatePluginFrames (data) Vanguard.track_incoming = Vanguard:ScheduleRepeatingTimer ("TrackIncoming", 0.1) onUpdateFrame:SetScript("OnUpdate", onUpdateFrame.onUpdate) + + Vanguard.RefreshWidgets() end function Vanguard:CombatEnd() @@ -760,6 +838,8 @@ local function CreatePluginFrames (data) end onUpdateFrame:SetScript("OnUpdate", nil) + + Vanguard.RefreshWidgets() end local formatTime = function(time) @@ -793,6 +873,7 @@ local function CreatePluginFrames (data) dblock.debuffName = name dblock.texture:SetTexture(icon) dblock.texture:SetTexCoord(.1, .9, .1, .9) + dblock.spellid = spellId if (count and count > 1) then dblock.stack:SetText(count) @@ -937,7 +1018,7 @@ local build_options_panel = function() get = function() return Vanguard.db.tank_block_size_height end, set = function (self, fixedparam, value) Vanguard.db.tank_block_size_height = value; Vanguard:RefreshTanks() end, min = 10, - max = 60, + max = 100, step = 1, name = "Health Bar Height", }, @@ -965,14 +1046,22 @@ local build_options_panel = function() set = function (self, r, g, b, a) local current = Vanguard.db.tank_block_color; current[1], current[2], current[3], current[4] = r, g, b, a; - Vanguard:RefreshTanks(); + Vanguard:RefreshTanks() end, --desc = "Select the color of the tank block background.", name = "Health Bar Background Color" }, {type = "blank"}, - + { + type = "range", + get = function() return Vanguard.db.aura_offset_y end, + set = function (self, fixedparam, value) Vanguard.db.aura_offset_y = value; Vanguard.RefreshWidgets() end, + min = -20, + max = 20, + step = 1, + name = "Debuff Y Offset", + }, { type = "range", get = function() return Vanguard.db.aura_timer_text_size end, @@ -1016,11 +1105,12 @@ function Vanguard:OnEvent (_, event, arg1, token, time, who_serial, who_name, wh show_inc_bars = true, tank_block_size = 150, tank_block_height = 40, - tank_block_color = {0.24705882, 0.0039215, 0, 0.8}, + tank_block_color = {0.074509, 0.035294, 0.035294, 0.832845}, tank_block_texture = "Details Serenity", first_run = false, bar_height = 24, aura_timer_text_size = 14, + aura_offset_y = 0, show_health_bar = true, show_power_bar = false, show_cast_bar = false, @@ -1032,7 +1122,7 @@ function Vanguard:OnEvent (_, event, arg1, token, time, who_serial, who_name, wh --> Install function Vanguard:OnDetailsEvent() end --> dummy func to stop warnings. - local install, saveddata = _G._detalhes:InstallPlugin ("TANK", "Vanguard", "Interface\\Icons\\INV_Shield_04", Vanguard, "DETAILS_PLUGIN_VANGUARD", MINIMAL_DETAILS_VERSION_REQUIRED, "Tercio", "v2.1", default_saved_table) + local install, saveddata = _G._detalhes:InstallPlugin ("TANK", "Vanguard", "Interface\\Icons\\INV_Shield_04", Vanguard, "DETAILS_PLUGIN_VANGUARD", MINIMAL_DETAILS_VERSION_REQUIRED, "Terciob", "v3.0", default_saved_table) if (type (install) == "table" and install.error) then print (install.error) end @@ -1048,6 +1138,7 @@ function Vanguard:OnEvent (_, event, arg1, token, time, who_serial, who_name, wh _G._detalhes:RegisterEvent (Vanguard, "DETAILS_INSTANCE_ENDRESIZE") _G._detalhes:RegisterEvent (Vanguard, "DETAILS_INSTANCE_SIZECHANGED") _G._detalhes:RegisterEvent (Vanguard, "GROUP_ONLEAVE") + _G._detalhes:RegisterEvent (Vanguard, "DETAILS_OPTIONS_MODIFIED") VanguardFrame:RegisterEvent ("ZONE_CHANGED_NEW_AREA") VanguardFrame:RegisterEvent ("PLAYER_ENTERING_WORLD")