diff --git a/Libs/DF/fw.lua b/Libs/DF/fw.lua index b1f94eee..bdc14491 100644 --- a/Libs/DF/fw.lua +++ b/Libs/DF/fw.lua @@ -1,6 +1,6 @@ -local dversion = 348 +local dversion = 350 local major, minor = "DetailsFramework-1.0", dversion local DF, oldminor = LibStub:NewLibrary (major, minor) diff --git a/Libs/DF/panel.lua b/Libs/DF/panel.lua index 52a2f984..06ac1344 100644 --- a/Libs/DF/panel.lua +++ b/Libs/DF/panel.lua @@ -1495,18 +1495,17 @@ function DF:IconPick (callback, close_when_select, param1, param2) DF.IconPickFrame = CreateFrame ("frame", "DetailsFrameworkIconPickFrame", UIParent, "BackdropTemplate") tinsert (UISpecialFrames, "DetailsFrameworkIconPickFrame") - DF.IconPickFrame:SetFrameStrata ("TOOLTIP") + DF.IconPickFrame:SetFrameStrata ("FULLSCREEN") DF.IconPickFrame:SetPoint ("center", UIParent, "center") - DF.IconPickFrame:SetWidth (350) - DF.IconPickFrame:SetHeight (277) + DF.IconPickFrame:SetWidth (416) + DF.IconPickFrame:SetHeight (350) DF.IconPickFrame:EnableMouse (true) DF.IconPickFrame:SetMovable (true) - DF:CreateTitleBar (DF.IconPickFrame, "Icon Picker") + DF:CreateTitleBar (DF.IconPickFrame, "Details! Framework Icon Picker") DF.IconPickFrame:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true}) - DF.IconPickFrame:SetBackdropBorderColor (0, 0, 0) DF.IconPickFrame:SetBackdropColor (24/255, 24/255, 24/255, .8) DF.IconPickFrame:SetFrameLevel (5000) @@ -1559,12 +1558,12 @@ function DF:IconPick (callback, close_when_select, param1, param2) if (DF.IconPickFrame.searching == "") then DF.IconPickFrameScroll:Show() DF.IconPickFrame.searching = nil - DF.IconPickFrame.updateFunc() + DF.IconPickFrameScroll.RefreshIcons() else DF.IconPickFrameScroll:Hide() FauxScrollFrame_SetOffset (DF.IconPickFrame, 1) DF.IconPickFrame.last_filter_index = 1 - DF.IconPickFrame.updateFunc() + DF.IconPickFrameScroll.RefreshIcons() end end) @@ -1611,51 +1610,46 @@ function DF:IconPick (callback, close_when_select, param1, param2) DF.IconPickFrame.customIconAccept:SetPoint ("left", DF.IconPickFrame.customIconEntry, "right", 2, 0) --fill with icons - local MACRO_ICON_FILENAMES = {} local SPELLNAMES_CACHE = {} - - local texturePathGetter = DF.IconPickFrame:CreateTexture(nil, "overlay") - DF.IconPickFrame:SetScript ("OnShow", function() - - MACRO_ICON_FILENAMES [1] = "INV_MISC_QUESTIONMARK" + DF.IconPickFrame:SetScript("OnShow", function() + MACRO_ICON_FILENAMES[1] = "INV_MISC_QUESTIONMARK" local index = 2 for i = 1, GetNumSpellTabs() do - local tab, tabTex, offset, numSpells, _ = GetSpellTabInfo (i) + local tab, tabTex, offset, numSpells, _ = GetSpellTabInfo(i) offset = offset + 1 local tabEnd = offset + numSpells for j = offset, tabEnd - 1 do --to get spell info by slot, you have to pass in a pet argument - local spellType, ID = GetSpellBookItemInfo (j, "player") + local spellType, ID = GetSpellBookItemInfo(j, "player") if (spellType ~= "FLYOUT") then - MACRO_ICON_FILENAMES [index] = GetSpellBookItemTexture (j, "player") or 0 - SPELLNAMES_CACHE [index] = GetSpellInfo (ID) + MACRO_ICON_FILENAMES [index] = GetSpellBookItemTexture(j, "player") or 0 + SPELLNAMES_CACHE [index] = GetSpellInfo(ID) index = index + 1 - + elseif (spellType == "FLYOUT") then - local _, _, numSlots, isKnown = GetFlyoutInfo (ID) + local _, _, numSlots, isKnown = GetFlyoutInfo(ID) if (isKnown and numSlots > 0) then for k = 1, numSlots do - local spellID, overrideSpellID, isKnown = GetFlyoutSlotInfo (ID, k) + local spellID, overrideSpellID, isKnown = GetFlyoutSlotInfo(ID, k) if (isKnown) then - MACRO_ICON_FILENAMES [index] = GetSpellTexture (spellID) or 0 - SPELLNAMES_CACHE [index] = GetSpellInfo (spellID) + MACRO_ICON_FILENAMES [index] = GetSpellTexture(spellID) or 0 + SPELLNAMES_CACHE [index] = GetSpellInfo(spellID) index = index + 1 end end end - end end end - GetLooseMacroItemIcons (MACRO_ICON_FILENAMES) - GetLooseMacroIcons (MACRO_ICON_FILENAMES) - GetMacroIcons (MACRO_ICON_FILENAMES) - GetMacroItemIcons (MACRO_ICON_FILENAMES) + GetLooseMacroItemIcons(MACRO_ICON_FILENAMES) + GetLooseMacroIcons(MACRO_ICON_FILENAMES) + GetMacroIcons(MACRO_ICON_FILENAMES) + GetMacroItemIcons(MACRO_ICON_FILENAMES) --reset the custom icon text entry DF.IconPickFrame.customIconEntry:SetText ("") @@ -1663,16 +1657,16 @@ function DF:IconPick (callback, close_when_select, param1, param2) DF.IconPickFrame.search:SetText ("") end) - DF.IconPickFrame:SetScript ("OnHide", function() - wipe (MACRO_ICON_FILENAMES) - wipe (SPELLNAMES_CACHE) + DF.IconPickFrame:SetScript("OnHide", function() + wipe(MACRO_ICON_FILENAMES) + wipe(SPELLNAMES_CACHE) DF.IconPickFrame.preview:Hide() collectgarbage() end) DF.IconPickFrame.buttons = {} - local OnClickFunction = function (self) + local onClickFunction = function(self) DF:QuickDispatch (DF.IconPickFrame.callback, self.icon:GetTexture(), DF.IconPickFrame.param1, DF.IconPickFrame.param2) @@ -1681,208 +1675,158 @@ function DF:IconPick (callback, close_when_select, param1, param2) end end - local onenter = function (self) + local onEnter = function (self) DF.IconPickFrame.preview:SetPoint ("bottom", self, "top", 0, 2) - DF.IconPickFrame.preview.icon:SetTexture (self.icon:GetTexture()) + DF.IconPickFrame.preview.icon:SetTexture(self.icon:GetTexture()) DF.IconPickFrame.preview:Show() self.icon:SetBlendMode ("ADD") end - local onleave = function (self) + local onLeave = function (self) DF.IconPickFrame.preview:Hide() self.icon:SetBlendMode ("BLEND") end local backdrop = {bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tile = true, tileSize = 16, insets = {left = 0, right = 0, top = 0, bottom = 0}, edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1} - - for i = 0, 9 do - local newcheck = CreateFrame ("Button", "DetailsFrameworkIconPickFrameButton"..(i+1), DF.IconPickFrame, "BackdropTemplate") - local image = newcheck:CreateTexture ("DetailsFrameworkIconPickFrameButton"..(i+1).."Icon", "overlay") - newcheck.icon = image - image:SetPoint ("topleft", newcheck, "topleft", 2, -2) image:SetPoint ("bottomright", newcheck, "bottomright", -2, 2) - newcheck:SetSize (30, 28) - newcheck:SetBackdrop (backdrop) - - newcheck:SetScript ("OnClick", OnClickFunction) - newcheck.param1 = i+1 - - newcheck:SetPoint ("topleft", DF.IconPickFrame, "topleft", 12 + (i*30), -60) - newcheck:SetID (i+1) - DF.IconPickFrame.buttons [#DF.IconPickFrame.buttons+1] = newcheck - newcheck:SetScript ("OnEnter", onenter) - newcheck:SetScript ("OnLeave", onleave) - end - for i = 11, 20 do - local newcheck = CreateFrame ("Button", "DetailsFrameworkIconPickFrameButton"..i, DF.IconPickFrame, "BackdropTemplate") - local image = newcheck:CreateTexture ("DetailsFrameworkIconPickFrameButton"..i.."Icon", "overlay") - newcheck.icon = image - image:SetPoint ("topleft", newcheck, "topleft", 2, -2) image:SetPoint ("bottomright", newcheck, "bottomright", -2, 2) - newcheck:SetSize (30, 28) - newcheck:SetBackdrop (backdrop) - - newcheck:SetScript ("OnClick", OnClickFunction) - newcheck.param1 = i - - newcheck:SetPoint ("topleft", "DetailsFrameworkIconPickFrameButton"..(i-10), "bottomleft", 0, -1) - newcheck:SetID (i) - DF.IconPickFrame.buttons [#DF.IconPickFrame.buttons+1] = newcheck - newcheck:SetScript ("OnEnter", onenter) - newcheck:SetScript ("OnLeave", onleave) - end - for i = 21, 30 do - local newcheck = CreateFrame ("Button", "DetailsFrameworkIconPickFrameButton"..i, DF.IconPickFrame, "BackdropTemplate") - local image = newcheck:CreateTexture ("DetailsFrameworkIconPickFrameButton"..i.."Icon", "overlay") - newcheck.icon = image - image:SetPoint ("topleft", newcheck, "topleft", 2, -2) image:SetPoint ("bottomright", newcheck, "bottomright", -2, 2) - newcheck:SetSize (30, 28) - newcheck:SetBackdrop (backdrop) - - newcheck:SetScript ("OnClick", OnClickFunction) - newcheck.param1 = i - - newcheck:SetPoint ("topleft", "DetailsFrameworkIconPickFrameButton"..(i-10), "bottomleft", 0, -1) - newcheck:SetID (i) - DF.IconPickFrame.buttons [#DF.IconPickFrame.buttons+1] = newcheck - newcheck:SetScript ("OnEnter", onenter) - newcheck:SetScript ("OnLeave", onleave) - end - for i = 31, 40 do - local newcheck = CreateFrame ("Button", "DetailsFrameworkIconPickFrameButton"..i, DF.IconPickFrame, "BackdropTemplate") - local image = newcheck:CreateTexture ("DetailsFrameworkIconPickFrameButton"..i.."Icon", "overlay") - newcheck.icon = image - image:SetPoint ("topleft", newcheck, "topleft", 2, -2) image:SetPoint ("bottomright", newcheck, "bottomright", -2, 2) - newcheck:SetSize (30, 28) - newcheck:SetBackdrop (backdrop) - - newcheck:SetScript ("OnClick", OnClickFunction) - newcheck.param1 = i - - newcheck:SetPoint ("topleft", "DetailsFrameworkIconPickFrameButton"..(i-10), "bottomleft", 0, -1) - newcheck:SetID (i) - DF.IconPickFrame.buttons [#DF.IconPickFrame.buttons+1] = newcheck - newcheck:SetScript ("OnEnter", onenter) - newcheck:SetScript ("OnLeave", onleave) - end - for i = 41, 50 do - local newcheck = CreateFrame ("Button", "DetailsFrameworkIconPickFrameButton"..i, DF.IconPickFrame, "BackdropTemplate") - local image = newcheck:CreateTexture ("DetailsFrameworkIconPickFrameButton"..i.."Icon", "overlay") - newcheck.icon = image - image:SetPoint ("topleft", newcheck, "topleft", 2, -2) image:SetPoint ("bottomright", newcheck, "bottomright", -2, 2) - newcheck:SetSize (30, 28) - newcheck:SetBackdrop (backdrop) - - newcheck:SetScript ("OnClick", OnClickFunction) - newcheck.param1 = i - - newcheck:SetPoint ("topleft", "DetailsFrameworkIconPickFrameButton"..(i-10), "bottomleft", 0, -1) - newcheck:SetID (i) - DF.IconPickFrame.buttons [#DF.IconPickFrame.buttons+1] = newcheck - newcheck:SetScript ("OnEnter", onenter) - newcheck:SetScript ("OnLeave", onleave) - end - for i = 51, 60 do - local newcheck = CreateFrame ("Button", "DetailsFrameworkIconPickFrameButton"..i, DF.IconPickFrame, "BackdropTemplate") - local image = newcheck:CreateTexture ("DetailsFrameworkIconPickFrameButton"..i.."Icon", "overlay") - newcheck.icon = image - image:SetPoint ("topleft", newcheck, "topleft", 2, -2) image:SetPoint ("bottomright", newcheck, "bottomright", -2, 2) - newcheck:SetSize (30, 28) - newcheck:SetBackdrop (backdrop) - - newcheck:SetScript ("OnClick", OnClickFunction) - newcheck.param1 = i - - newcheck:SetPoint ("topleft", "DetailsFrameworkIconPickFrameButton"..(i-10), "bottomleft", 0, -1) - newcheck:SetID (i) - DF.IconPickFrame.buttons [#DF.IconPickFrame.buttons+1] = newcheck - newcheck:SetScript ("OnEnter", onenter) - newcheck:SetScript ("OnLeave", onleave) - end for _, button in ipairs(DF.IconPickFrame.buttons) do button:SetBackdropBorderColor(0, 0, 0, 1) end - local scroll = CreateFrame ("ScrollFrame", "DetailsFrameworkIconPickFrameScroll", DF.IconPickFrame, "ListScrollFrameTemplate", "BackdropTemplate") - DF:ReskinSlider (scroll) + local width = 412 + local height = 248 + local linesAmount = 6 + local lineHeight = 40 - local ChecksFrame_Update = function (self) - - local numMacroIcons = #MACRO_ICON_FILENAMES - local macroPopupIcon, macroPopupButton - local macroPopupOffset = FauxScrollFrame_GetOffset (scroll) - local index - - local texture - local filter - if (DF.IconPickFrame.searching) then - filter = string_lower (DF.IconPickFrame.searching) - end - - local pool - local shown = 0 - - if (filter and filter ~= "") then - --do the filter - pool = {} - for i = 1, #SPELLNAMES_CACHE do - if (SPELLNAMES_CACHE [i] and SPELLNAMES_CACHE [i]:lower():find (filter)) then - pool [#pool+1] = MACRO_ICON_FILENAMES [i] - shown = shown + 1 + local updateIconScroll = function(self, data, offset, totalLines) + for i = 1, totalLines do + local index = i + offset + local iconsInThisLine = data[index] + if (iconsInThisLine) then + local line = self:GetLine(i) + for o = 1, #iconsInThisLine do + local _, _, texture = GetSpellInfo(iconsInThisLine[o]) + if (texture) then + line.buttons[o].icon:SetTexture(texture) + line.buttons[o].texture = texture + else + line.buttons[o].icon:SetTexture(iconsInThisLine[o]) + line.buttons[o].texture = iconsInThisLine[o] + end end end - else - shown = nil end - - if (not pool) then - pool = MACRO_ICON_FILENAMES - end - - for i = 1, 60 do - macroPopupIcon = _G ["DetailsFrameworkIconPickFrameButton"..i.."Icon"] - macroPopupButton = _G ["DetailsFrameworkIconPickFrameButton"..i] - index = (macroPopupOffset * 10) + i - texture = pool [index] - if ( index <= numMacroIcons and texture ) then - - if (type (texture) == "number") then - macroPopupIcon:SetTexture (texture) - else - macroPopupIcon:SetTexture ("INTERFACE\\ICONS\\" .. texture) - end - - macroPopupIcon:SetTexCoord (4/64, 60/64, 4/64, 60/64) - macroPopupButton.IconID = index - macroPopupButton:Show() - else - macroPopupButton:Hide() - end - end - - pool = nil - - -- Scrollbar stuff - FauxScrollFrame_Update (scroll, ceil ((shown or numMacroIcons) / 10) , 5, 20 ) end - DF.IconPickFrame.updateFunc = ChecksFrame_Update - - scroll:SetPoint ("topleft", DF.IconPickFrame, "topleft", -18, -58) - scroll:SetWidth (330) - scroll:SetHeight (178) - scroll:SetScript ("OnVerticalScroll", function (self, offset) FauxScrollFrame_OnVerticalScroll (scroll, offset, 20, ChecksFrame_Update) end) - scroll.update = ChecksFrame_Update + local lower = string.lower + + local scroll = DF:CreateScrollBox(DF.IconPickFrame, "DetailsFrameworkIconPickFrameScroll", updateIconScroll, {}, width, height, linesAmount, lineHeight) + DF:ReskinSlider(scroll) + scroll:SetPoint ("topleft", DF.IconPickFrame, "topleft", 2, -58) + + function scroll.RefreshIcons() + --build icon list + local iconList = {} + local numMacroIcons = #MACRO_ICON_FILENAMES + + local filter + if (DF.IconPickFrame.searching) then + filter = lower(DF.IconPickFrame.searching) + end + + if (filter and filter ~= "") then + local index + local currentTable + for i = 1, #SPELLNAMES_CACHE do + if (SPELLNAMES_CACHE[i] and SPELLNAMES_CACHE[i]:lower():find(filter)) then + if (not index) then + index = 1 + local t = {} + iconList[#iconList+1] = t + currentTable = t + end + + currentTable[index] = SPELLNAMES_CACHE[i] + + index = index + 1 + if (index == 11) then + index = nil + end + end + + end + else + for i = 1, #SPELLNAMES_CACHE, 10 do + local t = {} + iconList[#iconList+1] = t + for o = i, i+9 do + if (SPELLNAMES_CACHE[o]) then + t[#t+1] = SPELLNAMES_CACHE[o] + end + end + end + + for i = 1, #MACRO_ICON_FILENAMES, 10 do + local t = {} + iconList[#iconList+1] = t + for o = i, i+9 do + if (MACRO_ICON_FILENAMES[o]) then + t[#t+1] = MACRO_ICON_FILENAMES[o] + end + end + end + end + + --set data and refresh + scroll:SetData(iconList) + scroll:Refresh() + end + + --create the lines and button of the scroll box + for i = 1, linesAmount do + scroll:CreateLine(function(self, index) + local line = CreateFrame("button", "$parentLine" .. index, self, "BackdropTemplate") + line:SetPoint("topleft", self, "topleft", 1, -((index-1)*(lineHeight+1)) - 1) + line:SetSize(width - 2, lineHeight) + line:SetBackdrop({bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true}) + line:SetBackdropColor(.2, .2, .2, .5) + line.buttons = {} + + local lastButton + + for o = 1, 10 do + local button = CreateFrame("button", "$parentIcon" .. o, line) + if (not lastButton) then + button:SetPoint("left", line, "left", 0, 0) + else + button:SetPoint("left", lastButton, "right", 1, 0) + end + button:SetSize(lineHeight, lineHeight) + button.icon = button:CreateTexture("$parentIcon", "overlay") + button.icon:SetAllPoints() + button.icon:SetTexCoord(.1, .9, .1, .9) + line.buttons[o] = button + + button:SetScript("OnEnter", onEnter) + button:SetScript("OnLeave", onLeave) + button:SetScript("OnClick", onClickFunction) + + lastButton = button + end + + return line + end) + end + DF.IconPickFrameScroll = scroll DF.IconPickFrame:Hide() - end DF.IconPickFrame.param1, DF.IconPickFrame.param2 = param1, param2 - DF.IconPickFrame:Show() - DF.IconPickFrameScroll.update (DF.IconPickFrameScroll) DF.IconPickFrame.callback = callback or DF.IconPickFrame.emptyFunction DF.IconPickFrame.click_close = close_when_select + DF.IconPickFrameScroll.RefreshIcons() end diff --git a/Libs/DF/textentry.lua b/Libs/DF/textentry.lua index 007e1dc4..9793dd37 100644 --- a/Libs/DF/textentry.lua +++ b/Libs/DF/textentry.lua @@ -313,7 +313,8 @@ DF.TextEntryCounter = DF.TextEntryCounter or 1 self.editbox:SetBackdropColor (unpack (self.enabled_backdrop_color)) self.editbox:SetTextColor (unpack (self.enabled_text_color)) if (self.editbox.borderframe) then - self.editbox.borderframe:SetBackdropColor (unpack (self.editbox.borderframe.onleave_backdrop)) + local r, g, b, a = DF:ParseColors(unpack(self.editbox.borderframe.onleave_backdrop)) + self.editbox.borderframe:SetBackdropColor(r, g, b, a) end end end diff --git a/Libs/LibOpenRaid/GetPlayerInformation.lua b/Libs/LibOpenRaid/GetPlayerInformation.lua index 4e8b3c80..76433e99 100644 --- a/Libs/LibOpenRaid/GetPlayerInformation.lua +++ b/Libs/LibOpenRaid/GetPlayerInformation.lua @@ -11,6 +11,10 @@ end local openRaidLib = LibStub:GetLibrary("LibOpenRaid-1.0") +local CONST_TALENT_VERSION_CLASSIC = 1 +local CONST_TALENT_VERSION_LEGION = 4 +local CONST_TALENT_VERSION_DRAGONFLIGHT = 5 + local isTimewalkWoW = function() local _, _, _, buildInfo = GetBuildInfo() if (buildInfo < 40000) then @@ -22,19 +26,79 @@ local IsDragonflight = function() return select(4, GetBuildInfo()) >= 100000 end ---creates two tables, one with indexed talents and another with pairs values ([talentId] = true) -function openRaidLib.UnitInfoManager.GetPlayerTalentsAsPairsTable() - if (IsDragonflight()) then - return {} +function openRaidLib.GetTalentVersion() + local _, _, _, buildInfo = GetBuildInfo() + local gamePatch = buildInfo / 10000 + if (gamePatch >= 1 and gamePatch <= 4) then --vanilla tbc wotlk cataclysm + return CONST_TALENT_VERSION_CLASSIC end + if (gamePatch >= 7 and gamePatch <= 9) then --legion bfa shadowlands + return CONST_TALENT_VERSION_LEGION + end + + if (gamePatch >= 10 and gamePatch <= 20) then --dragonflight + return CONST_TALENT_VERSION_DRAGONFLIGHT + end +end + +local getDradonflightTalentsAsIndexTable = function() + local allTalents = {} + local configId = C_ClassTalents.GetActiveConfigID() + local configInfo = C_Traits.GetConfigInfo(configId) + + for treeIndex, treeId in ipairs(configInfo.treeIDs) do + local treeNodes = C_Traits.GetTreeNodes(treeId) + + for nodeIdIndex, treeNodeID in ipairs(treeNodes) do + local traitNodeInfo = C_Traits.GetNodeInfo(configId, treeNodeID) + + if (traitNodeInfo) then + local activeEntry = traitNodeInfo.activeEntry + if (activeEntry) then + local entryId = activeEntry.entryID + local rank = activeEntry.rank + if (rank > 0) then + --get the entry info + local traitEntryInfo = C_Traits.GetEntryInfo(configId, entryId) + local definitionId = traitEntryInfo.definitionID + + --definition info + local traitDefinitionInfo = C_Traits.GetDefinitionInfo(definitionId) + local spellId = traitDefinitionInfo.overriddenSpellID or traitDefinitionInfo.spellID + local spellName, _, spellTexture = GetSpellInfo(spellId) + if (spellName) then + allTalents[#allTalents+1] = spellId + end + end + end + end + end + end + + return allTalents +end + +--creates two tables, one with indexed talents and another with pairs values ([talentId] = true) +function openRaidLib.UnitInfoManager.GetPlayerTalentsAsPairsTable() local talentsPairs = {} - for i = 1, 7 do - for o = 1, 3 do - local talentId, _, _, selected = GetTalentInfo(i, o, 1) - if (selected) then - talentsPairs[talentId] = true - break + local talentVersion = openRaidLib.GetTalentVersion() + + if (talentVersion == CONST_TALENT_VERSION_DRAGONFLIGHT) then + local allTalents = getDradonflightTalentsAsIndexTable() + for i = 1, #allTalents do + local spellId = allTalents[i] + talentsPairs[spellId] = true + end + + elseif (talentVersion == CONST_TALENT_VERSION_LEGION) then + for i = 1, 7 do + for o = 1, 3 do + local talentId, _, _, selected = GetTalentInfo(i, o, 1) + if (selected) then + talentsPairs[talentId] = true + break + end end end end @@ -43,17 +107,21 @@ function openRaidLib.UnitInfoManager.GetPlayerTalentsAsPairsTable() end function openRaidLib.UnitInfoManager.GetPlayerTalents() - if (IsDragonflight()) then - return {} - end + local talents = {} + local talentVersion = openRaidLib.GetTalentVersion() - local talents = {0, 0, 0, 0, 0, 0, 0} - for talentTier = 1, 7 do - for talentColumn = 1, 3 do - local talentId, name, texture, selected, available = GetTalentInfo(talentTier, talentColumn, 1) - if (selected) then - talents[talentTier] = talentId - break + if (talentVersion == CONST_TALENT_VERSION_DRAGONFLIGHT) then + talents = getDradonflightTalentsAsIndexTable() + + elseif (talentVersion == CONST_TALENT_VERSION_LEGION) then + talents = {0, 0, 0, 0, 0, 0, 0} + for talentTier = 1, 7 do + for talentColumn = 1, 3 do + local talentId, name, texture, selected, available = GetTalentInfo(talentTier, talentColumn, 1) + if (selected) then + talents[talentTier] = talentId + break + end end end end diff --git a/Libs/LibOpenRaid/LibOpenRaid.lua b/Libs/LibOpenRaid/LibOpenRaid.lua index efecf72e..68d1b133 100644 --- a/Libs/LibOpenRaid/LibOpenRaid.lua +++ b/Libs/LibOpenRaid/LibOpenRaid.lua @@ -15,6 +15,10 @@ Code Rules: - Public callbacks are callbacks registered by an external addon. Change Log: + - added dragonflight talents support + - ensure to register events after 'PLAYER_ENTERING_WORLD' has triggered + - added openRaidLib.RequestCooldownInfo(spellId) + - added openRaidLib.AddCooldownFilter(filterName, spells) - if Ace Comm is installed, use it - added "KeystoneWipe" callback - finished keystone info, see docs @@ -50,7 +54,7 @@ if (WOW_PROJECT_ID ~= WOW_PROJECT_MAINLINE and not IsDragonflight()) then end local major = "LibOpenRaid-1.0" -local CONST_LIB_VERSION = 48 +local CONST_LIB_VERSION = 50 LIB_OPEN_RAID_CAN_LOAD = false --declae the library within the LibStub @@ -564,8 +568,11 @@ LIB_OPEN_RAID_CAN_LOAD = false end, ["PLAYER_ENTERING_WORLD"] = function(...) + --has the selected character just loaded? if (not openRaidLib.firstEnteringWorld) then - --player logon + --register events + openRaidLib.OnEnterWorldRegisterEvents() + if (IsInGroup()) then openRaidLib.RequestAllData() end @@ -604,7 +611,7 @@ LIB_OPEN_RAID_CAN_LOAD = false openRaidLib.firstEnteringWorld = true end - + openRaidLib.internalCallback.TriggerEvent("onEnterWorld") end, @@ -660,7 +667,7 @@ LIB_OPEN_RAID_CAN_LOAD = false ["UNIT_PET"] = function(unitId) if (UnitIsUnit(unitId, "player")) then - openRaidLib.Schedules.NewUniqueTimer(0.5, function() openRaidLib.internalCallback.TriggerEvent("playerPetChange") end, "mainControl", "petStatus_Schedule") + openRaidLib.Schedules.NewUniqueTimer(1.1, function() openRaidLib.internalCallback.TriggerEvent("playerPetChange") end, "mainControl", "petStatus_Schedule") --if the pet is alive, register to know when it dies if (UnitExists("pet") and UnitHealth("pet") >= 1) then eventFrame:RegisterUnitEvent("UNIT_FLAGS", "pet") @@ -682,33 +689,36 @@ LIB_OPEN_RAID_CAN_LOAD = false } openRaidLib.eventFunctions = eventFunctions - eventFrame:RegisterEvent("GROUP_ROSTER_UPDATE") - eventFrame:RegisterUnitEvent("UNIT_SPELLCAST_SUCCEEDED", "player", "pet") eventFrame:RegisterEvent("PLAYER_ENTERING_WORLD") - eventFrame:RegisterEvent("PLAYER_REGEN_DISABLED") - eventFrame:RegisterEvent("PLAYER_REGEN_ENABLED") - eventFrame:RegisterEvent("UPDATE_INVENTORY_DURABILITY") - eventFrame:RegisterEvent("PLAYER_EQUIPMENT_CHANGED") - eventFrame:RegisterEvent("UNIT_PET") - eventFrame:RegisterEvent("PLAYER_DEAD") - eventFrame:RegisterEvent("PLAYER_ALIVE") - eventFrame:RegisterEvent("PLAYER_UNGHOST") - - if (checkClientVersion("retail")) then - eventFrame:RegisterEvent("PLAYER_TALENT_UPDATE") - eventFrame:RegisterEvent("PLAYER_PVP_TALENT_UPDATE") - eventFrame:RegisterEvent("ENCOUNTER_END") - eventFrame:RegisterEvent("CHALLENGE_MODE_START") - eventFrame:RegisterEvent("CHALLENGE_MODE_COMPLETED") - --eventFrame:RegisterEvent("PLAYER_SPECIALIZATION_CHANGED") - end - - eventFrame:SetScript("OnEvent", function(self, event, ...) eventFunctions[event](...) end) + --run when PLAYER_ENTERING_WORLD triggers, this avoid any attempt of getting information without the game has completed the load process + function openRaidLib.OnEnterWorldRegisterEvents() + eventFrame:RegisterEvent("GROUP_ROSTER_UPDATE") + eventFrame:RegisterUnitEvent("UNIT_SPELLCAST_SUCCEEDED", "player", "pet") + eventFrame:RegisterEvent("PLAYER_REGEN_DISABLED") + eventFrame:RegisterEvent("PLAYER_REGEN_ENABLED") + eventFrame:RegisterEvent("UPDATE_INVENTORY_DURABILITY") + eventFrame:RegisterEvent("PLAYER_EQUIPMENT_CHANGED") + eventFrame:RegisterEvent("UNIT_PET") + eventFrame:RegisterEvent("PLAYER_DEAD") + eventFrame:RegisterEvent("PLAYER_ALIVE") + eventFrame:RegisterEvent("PLAYER_UNGHOST") + + if (checkClientVersion("retail")) then + eventFrame:RegisterEvent("PLAYER_TALENT_UPDATE") + eventFrame:RegisterEvent("PLAYER_PVP_TALENT_UPDATE") + eventFrame:RegisterEvent("ENCOUNTER_END") + eventFrame:RegisterEvent("CHALLENGE_MODE_START") + eventFrame:RegisterEvent("CHALLENGE_MODE_COMPLETED") + --eventFrame:RegisterEvent("PLAYER_SPECIALIZATION_CHANGED") + end + end + + -------------------------------------------------------------------------------------------------------------------------------- --> ~main ~control @@ -1048,11 +1058,11 @@ function openRaidLib.UnitInfoManager.GetPlayerFullInfo() end playerInfo[1] = specId - --renown + --shadowlands-renown local renown = C_CovenantSanctumUI.GetRenownLevel() or 1 playerInfo[2] = renown - --covenant + --shadowlands-covenant local covenant = C_Covenants.GetActiveCovenantID() playerInfo[3] = covenant @@ -1060,13 +1070,13 @@ function openRaidLib.UnitInfoManager.GetPlayerFullInfo() local talents = openRaidLib.UnitInfoManager.GetPlayerTalents() playerInfo[4] = talents - --conduits + --shadowlands-conduits local conduits = openRaidLib.UnitInfoManager.GetPlayerConduits() playerInfo[5] = conduits --pvp talents local pvpTalents = openRaidLib.UnitInfoManager.GetPlayerPvPTalents() - playerInfo[6] = pvpTalents + playerInfo[6] = pvpTalents return playerInfo end @@ -1804,6 +1814,7 @@ openRaidLib.commHandler.RegisterComm(CONST_COMM_COOLDOWNCHANGES_PREFIX, openRaid function openRaidLib.CooldownManager.CheckForSpellsAdeedOrRemoved() local playerName = UnitName("player") local currentCooldowns = openRaidLib.CooldownManager.UnitData[playerName] + local _, newCooldownList = openRaidLib.CooldownManager.GetPlayerCooldownList() local spellsAdded, spellsRemoved = {}, {} diff --git a/Libs/LibOpenRaid/ThingsToMantain.lua b/Libs/LibOpenRaid/ThingsToMantain.lua index 0e90f650..864f17a9 100644 --- a/Libs/LibOpenRaid/ThingsToMantain.lua +++ b/Libs/LibOpenRaid/ThingsToMantain.lua @@ -211,7 +211,14 @@ LIB_OPEN_RAID_WEAPON_ENCHANT_IDS = { [5401] = true, --windfury } -LIB_OPEN_RAID_COOLDOWNS_BY_SPEC = { +--tells the duration, requirements and cooldown +--information about a cooldown is mainly get from tooltips +--if talent is required, use the command: +--/dump GetTalentInfo (talentTier, talentColumn, 1) +--example: to get the second talent of the last talent line, use: /dump GetTalentInfo (7, 2, 1) +LIB_OPEN_RAID_COOLDOWNS_INFO = { + + -- Filter Types: -- 1 attack cooldown -- 2 personal defensive cooldown -- 3 targetted defensive cooldown @@ -219,501 +226,7 @@ LIB_OPEN_RAID_COOLDOWNS_BY_SPEC = { -- 5 personal utility cooldown -- 6 interrupt - --Shadowlands 9.0.2 revision by Juliana Maison - --> MAGE - --arcane - [62] = { - [12042] = 1, --Arcane Power - [55342] = 1, --Mirror Image - [45438] = 2, --Ice Block - [12051] = 5, --Evocation - [110960] = 5, --Greater Invisibility - [235450] = 5, --Prismatic Barrier - [2139] = 6, --Counterspell (interrupt) - }, - --fire - [63] = { - [190319] = 1, --Combustion - [55342] = 1, --Mirror Image - [45438] = 2, --Ice Block - [66] = 5, --Invisibility - [235313] = 5, --Blazing Barrier - [2139] = 6, --Counterspell (interrupt) - }, - --frost - [64] = { - [12472] = 1, --Icy Veins - [205021] = 1, --Ray of Frost (talent) - [55342] = 1, --Mirror Image - [45438] = 2, --Ice Block - [66] = 5, --Invisibility - [235219] = 5, --Cold Snap - [11426] = 5, --Ice Barrier - [113724] = 5, --Ring of Frost (talent) - [2139] = 6, --Counterspell (interrupt) - }, - - --> PRIEST - --discipline - [256] = { - [10060] = 1, --Power Infusion - [34433] = 1, --Shadowfiend - [123040] = 1, --Mindbender - [33206] = 3, --Pain Suppression - [62618] = 4, --Power Word: Barrier - [271466] = 4, --Luminous Barrier (talent) - [109964] = 4, --Spirit Shell (talent) - [47536] = 5, --Rapture - [19236] = 5, --Desperate Prayer - [8122] = 5, --Psychic Scream - }, - --holy - [257] = { - [10060] = 1, --Power Infusion - [200183] = 2, --Apotheosis - [47788] = 3, --Guardian Spirit - [64843] = 4, --Divine Hymn - [64901] = 4, --Symbol of Hope - [265202] = 4, --Holy Word: Salvation (talent) - --[88625] = 5, --Holy Word: Chastise - --[34861] = 5, --Holy Word: Sanctify - [19236] = 5, --Desperate Prayer - [8122] = 5, --Psychic Scream - }, - --shadow priest - [258] = { - [10060] = 1, --Power Infusion - [34433] = 1, --Shadowfiend - [200174] = 1, --Mindbender - [193223] = 1, --Surrender to Madness (talent) - [47585] = 2, --Dispersion - [15286] = 4, --Vampiric Embrace - [19236] = 5, --Desperate Prayer - [64044] = 5, --Psychic Horror - [8122] = 5, --Psychic Scream - [205369] = 5, --Mind Bomb - [228260] = 1, --Void Erruption - [15487] = 6, --Silence (interrupt) - }, - - --> ROGUE - --assassination - [259] = { - [79140] = 1, --Vendetta - [1856] = 2, --Vanish - [5277] = 2, --Evasion - [31224] = 2, --Cloak of Shadows - [2094] = 5, --Blind - [185311] = 5, --Crimson Vial - [114018] = 5, --Shroud of Concealment - [1766] = 6, --Kick - }, - --outlaw - [260] = { - [13750] = 1, --Adrenaline Rush - [51690] = 1, --Killing Spree (talent) - [199754] = 2, --Riposte - [31224] = 2, --Cloak of Shadows - [5277] = 2, --Evasion - [1856] = 2, --Vanish - [2094] = 5, --Blind - [185311] = 5, --Crimson Vial - [114018] = 5, --Shroud of Concealment - [343142] = 5, --Dreadblades - [1766] = 6, --Kick - }, - --subtlety - [261] = { - [121471] = 1, --Shadow Blades - [31224] = 2, --Cloak of Shadows - [1856] = 2, --Vanish - [5277] = 2, --Evasion - [2094] = 5, --Blind - [185311] = 5, --Crimson Vial - [114018] = 5, --Shroud of Concealment - [1766] = 6, --Kick - }, - - --> WARLOCK - --affliction - [265] = { - [205180] = 1, --Summon Darkglare - --[342601] = 1, --Ritual of Doom - [113860] = 1, --Dark Soul: Misery (talent) - [104773] = 2, --Unending Resolve - [108416] = 2, --Dark Pact (talent) - [30283] = 5, --Shadowfury - [333889] = 5, --Fel Domination - [19647] = 6, --Spell Lock (pet interrupt) - }, - --demonology - [266] = { - [265187] = 1, --Summon Demonic Tyrant - --[342601] = 1, --Ritual of Doom - [267171] = 1, --Demonic Strength (talent) - [111898] = 1, --Grimoire: Felguard (talent) - [267217] = 1, --Nether Portal (talent) - [104773] = 2, --Unending Resolve - [108416] = 2, --Dark Pact (talent) - [30283] = 5, --Shadowfury - [5484] = 5, --Howl of Terror (talent) - [333889] = 5, --Fel Domination - [19647] = 6, --Spell Lock (pet interrupt) - [89766] = 6, --Axe Toss (pet interrupt) - }, - --destruction - [267] = { - [1122] = 1, --Summon Infernal - --[342601] = 1, --Ritual of Doom - [113858] = 1, --Dark Soul: Instability (talent) - [104773] = 2, --Unending Resolve - [108416] = 2, --Dark Pact (talent) - [30283] = 5, --Shadowfury - [333889] = 5, --Fel Domination - [19647] = 6, --Spell Lock (pet interrupt) - }, - - --> WARRIOR - --Arms - [71] = { - [107574] = 1, --Avatar (talent) - [227847] = 1, --Bladestorm - [152277] = 1, --Ravager (talent) - [118038] = 2, --Die by the Sword - [97462] = 4, --Rallying Cry - [64382] = 5, --Shattering Throw - [5246] = 5, --Intimidating Shout - [6552] = 6, --Pummel - }, - --Fury - [72] = { - [1719] = 1, --Recklessness - [46924] = 1, --Bladestorm (talent) - [184364] = 2, --Enraged Regeneration - [97462] = 4, --Rallying Cry - [64382] = 5, --Shattering Throw - [5246] = 5, --Intimidating Shout - [6552] = 6, --Pummel - }, - --Protection - [73] = { - [228920] = 1, --Ravager (talent) - [107574] = 1, --Avatar - [12975] = 2, --Last Stand - [871] = 2, --Shield Wall - [97462] = 4, --Rallying Cry - [64382] = 5, --Shattering Throw - [5246] = 5, --Intimidating Shout - [6552] = 6, --Pummel - }, - - --> PALADIN - --holy - [65] = { - [31884] = 1, --Avenging Wrath - [216331] = 1, --Avenging Crusader (talent) - [498] = 2, --Divine Protection - [642] = 2, --Divine Shield - [105809] = 2, --Holy Avenger (talent) - [152262] = 2, --Seraphim - [633] = 3, --Lay on Hands - [1022] = 3, --Blessing of Protection - [6940] = 3, --Blessing of Sacrifice - [31821] = 4, --Aura Mastery - [1044] = 5, --Blessing of Freedom - [853] = 5, --Hammer of Justice - [115750] = 5, --Blinding Light (talent) - }, - - --protection - [66] = { - [31884] = 1, --Avenging Wrath - [327193] = 1, --Moment of Glory (talent) - [31850] = 2, --Ardent Defender - [86659] = 2, --Guardian of Ancient Kings - [105809] = 2, --Holy Avenger (talent) - [152262] = 2, --Seraphim - [1022] = 3, --Blessing of Protection - [204018] = 3, --Blessing of Spellwarding (talent) - [6940] = 3, --Blessing of Sacrifice - [1044] = 5, --Blessing of Freedom - [853] = 5, --Hammer of Justice - [115750] = 5, --Blinding Light (talent) - [96231] = 6, --Rebuke (interrupt) - }, - - --retribution - [70] = { - [31884] = 1, --Avenging Wrath - [231895] = 1, --Crusade (talent) - [205191] = 2, --Eye for an Eye (talent) - [184662] = 2, --Shield of Vengeance - [642] = 2, --Divine Shield - [1022] = 3, --Blessing of Protection - [6940] = 3, --Blessing of Sacrifice - [633] = 3, --Lay on Hands - [1044] = 5, --Blessing of Freedom - [853] = 5, --Hammer of Justice - [115750] = 5, --Blinding Light (talent) - [96231] = 6, --Rebuke (interrupt) - }, - - --> DEMON HUNTER - --havoc - [577] = { - [191427] = 1, --Metamorphosis - [198589] = 2, --Blur - [196555] = 2, --Netherwalk (talent) - [196718] = 4, --Darkness - [188501] = 5, --Spectral Sight - [179057] = 5, --Chaos Nova - [211881] = 5, --Fel Eruption (talent) - [183752] = 6, --Disrupt (interrupt) - }, - --vengeance - [581] = { - [320341] = 1, --Bulk Extraction (talent) - [187827] = 2, --Metamorphosis - [204021] = 2, --Fiery Brand - [263648] = 2, --Soul Barrier (talent) - [207684] = 5, --Sigil of Misery - [202137] = 5, --Sigil of Silence - [202138] = 5, --Sigil of Chains (talent) - [188501] = 5, --Spectral Sight - [183752] = 6, --Disrupt (interrupt) - }, - - --> DEATH KNIGHT - --unholy - [252] = { - [275699] = 1, --Apocalypse - [42650] = 1, --Army of the Dead - [49206] = 1, --Summon Gargoyle (talent) - [207289] = 1, --Unholy Assault (talent) - [48707] = 2, --Anti-magic Shell - [48792] = 2, --Icebound Fortitude - [48743] = 2, --Death Pact (talent) - [51052] = 4, --Anti-magic Zone - [108194] = 5, --Asphyxiate (talent) - [287081] = 5, --Lichborne - [212552] = 5, --Wraith walk (talent) - [47528] = 6, --Mind Freeze (interrupt) - }, - --frost - [251] = { - [152279] = 1, --Breath of Sindragosa (talent) - [47568] = 1, --Empower Rune Weapon - [279302] = 1, --Frostwyrm's Fury - [48707] = 2, --Anti-magic Shell - [48792] = 2, --Icebound Fortitude - [48743] = 2, --Death Pact (talent) - [51052] = 4, --Anti-magic Zone - [207167] = 5, --Blinding Sleet (talent) - [108194] = 5, --Asphyxiate (talent) - [287081] = 5, --Lichborne - [212552] = 5, --Wraith walk (talent) - [47528] = 6, --Mind Freeze (interrupt) - }, - --blood - [250] = { - [49028] = 1, --Dancing Rune Weapon - [48707] = 2, --Anti-magic Shell - [48743] = 2, --Death Pact (talent) - [219809] = 2, --Tombstone (talent) - [55233] = 2, --Vampiric Blood - [48792] = 2, --Icebound Fortitude - [51052] = 4, --Anti-magic Zone - [108199] = 5, --Gorefiend's Grasp - [221562] = 5, --Asphyxiate - [212552] = 5, --Wraith walk (talent) - [47528] = 6, --Mind Freeze (interrupt) - }, - - --> DRUID - --Balance - [102] = { - [194223] = 1, --Celestial Alignment - [102560] = 1, --Incarnation: Chosen of Elune (talent) - [22812] = 2, --Barkskin - [108238] = 2, --Renewal (talent) - [29166] = 3, --Innervate - [77761] = 4, --Stampeding Roar - [319454] = 5, --Heart of the Wild (talent) - [132469] = 5, --Typhoon - [78675] = 6, --Solar Beam (interrupt) - }, - --Feral - [103] = { - [106951] = 1, --Berserk - [102543] = 1, --Incarnation: King of the Jungle (talent) - [22812] = 2, --Barkskin - [61336] = 2, --Survival Instincts - [108238] = 2, --Renewal (talent) - [77761] = 4, --Stampeding Roar - [132469] = 5, --Typhoon - [319454] = 5, --Heart of the Wild (talent) - [106839] = 6, --Skull Bash (interrupt) - }, - --Guardian - [104] = { - [106951] = 1, --Berserk - [204066] = 1, --Lunar Beam - [22812] = 2, --Barkskin - [61336] = 2, --Survival Instincts - [102558] = 2, --Incarnation: Guardian of Ursoc (talent) - [108238] = 2, --Renewal (talent) - [77761] = 4, --Stampeding Roar - [132469] = 5, --Typhoon - [319454] = 5, --Heart of the Wild (talent) - [106839] = 6, --Skull Bash (interrupt) - }, - --Restoration - [105] = { - - [22812] = 2, --Barkskin - [108238] = 2, --Renewal (talent) - [33891] = 2, --Incarnation: Tree of Life (talent) - [102342] = 3, --Ironbark - [29166] = 3, --Innervate - [203651] = 3, --Overgrowth (talent) - [740] = 4, --Tranquility - [197721] = 4, --Flourish (talent) - [77761] = 4, --Stampeding Roar - [319454] = 5, --Heart of the Wild (talent) - [102793] = 5, --Ursol's Vortex - }, - - --> HUNTER - --beast mastery - [253] = { - [193530] = 1, --Aspect of the Wild - [19574] = 1, --Bestial Wrath - [201430] = 1, --Stampede (talent) - [186265] = 2, --Aspect of the Turtle - [109304] = 2, --Exhilaration - [199483] = 2, --Camouflage (talent) - [186257] = 5, --Aspect of the cheetah - [19577] = 5, --Intimidation - [109248] = 5, --Binding Shot (talent) - [187650] = 5, --Freezing Trap - [147362] = 6, --Counter Shot (interrupt) - }, - --marksmanship - [254] = { - [288613] = 1, --Trueshot - [186265] = 2, --Aspect of the Turtle - [199483] = 2, --Camouflage (talent) - [109304] = 2, --Exhilaration - [281195] = 2, --Survival of the Fittest - [186257] = 5, --Aspect of the cheetah - [187650] = 5, --Freezing Trap - [147362] = 6, --Counter Shot (interrupt) - }, - --survival - [255] = { - [266779] = 1, --Coordinated Assault - [186265] = 2, --Aspect of the Turtle - [199483] = 2, --Camouflage (talent) - [109304] = 2, --Exhilaration - [186289] = 5, --Aspect of the eagle - [19577] = 5, --Intimidation - [187650] = 5, --Freezing Trap - [187707] = 6, --Muzzle (interrupt) - }, - - --> MONK - --brewmaster - [268] = { - [132578] = 1, --Invoke Niuzao, the Black Ox - [115080] = 1, --Touch of Death - [115203] = 2, --Fortifying Brew - [115399] = 2, --Black Ox brew (talent) - [115176] = 2, --Zen Meditation - [122278] = 2, --Dampen Harm (talent) - [116844] = 5, --Ring of peace (talent) - [119381] = 5, --Leg Sweep - [116705] = 6, --Spear Hand Strike (interrupt) - }, - --windwalker - [269] = { - [137639] = 1, --Storm, Earth, and Fire - [123904] = 1, --Invoke Xuen, the White Tiger - [152173] = 1, --Serenity (talent) - [115080] = 1, --Touch of Death - [115203] = 2, --Fortifying Brew - [122470] = 2, --Touch of Karma - [122278] = 2, --Dampen Harm (talent) - [122783] = 2, --Diffuse Magic (talent) - [116844] = 5, --Ring of peace (talent) - [119381] = 5, --Leg Sweep - [116705] = 6, --Spear Hand Strike (interrupt) - }, - --mistweaver - [270] = { - [115080] = 1, --Touch of Death - [122278] = 2, --Dampen Harm (talent) - [243435] = 2, --Fortifying Brew - [122783] = 2, --Diffuse Magic (talent) - [116849] = 3, --Life Cocoon - [322118] = 4, --Invoke Yulon, the Jade serpent - [115310] = 4, --Revival - [116844] = 5, --Ring of peace (talent) - [197908] = 5, --Mana tea (talent) - [119381] = 5, --Leg Sweep - }, - - --> SHAMAN - --elemental - [262] = { - [198067] = 1, --Fire Elemental - [192249] = 1, --Storm Elemental (talent) - [114050] = 1, --Ascendance (talent) - [108271] = 2, --Astral Shift - [108281] = 4, --Ancestral Guidance (talent) - [198103] = 2, --Earth Elemental - --[79206] = 5, --Spiritwalkers grace - [8143] = 5, --Tremor Totem - [192058] = 5, --Capacitor Totem - [192077] = 5, --Wind Rush Totem (talent) - [57994] = 6, --Wind Shear (interrupt) - }, - --enhancement - [263] = { - [51533] = 1, --Feral Spirit - [114051] = 1, --Ascendance (talent) - [108271] = 2, --Astral Shift - [198103] = 2, --Earth Elemental - [8143] = 5, --Tremor Totem - [192058] = 5, --Capacitor Totem - [57994] = 6, --Wind Shear (interrupt) - }, - --restoration - [264] = { - [108271] = 2, --Astral Shift - [114052] = 4, --Ascendance (talent) - [98008] = 4, --Spirit Link Totem - [108280] = 4, --Healing Tide Totem - [16191] = 4, --Mana Tide Totem - [207399] = 4, --Ancestral Protection Totem (talent) - [198103] = 2, --Earth Elemental - [8143] = 5, --Tremor Totem - [57994] = 6, --Wind Shear (interrupt) - }, - - --> EVOKER - --Devastation - [1467] = {}, - --Preservation - [1468] = {}, -} - ---tells the duration, requirements and cooldown ---information about a cooldown is mainly get from tooltips ---if talent is required, use the command: ---/dump GetTalentInfo (talentTier, talentColumn, 1) ---example: to get the second talent of the last talent line, use: /dump GetTalentInfo (7, 2, 1) -LIB_OPEN_RAID_COOLDOWNS_INFO = { --interrupts [6552] = {class = "WARRIOR", specs = {71, 72, 73}, cooldown = 15, silence = 4, talent = false, cooldownWithTalent = false, cooldownTalentId = false, type = 6, charges = 1}, --Pummel [2139] = {class = "MAGE", specs = {62, 63, 64}, cooldown = 24, silence = 6, talent = false, cooldownWithTalent = false, cooldownTalentId = false, type = 6, charges = 1}, --Counterspell @@ -732,224 +245,285 @@ LIB_OPEN_RAID_COOLDOWNS_INFO = { [89766] = {class = "WARLOCK", specs = {266}, cooldown = 30, silence = 4, talent = false, cooldownWithTalent = false, cooldownTalentId = false, pet = 17252, type = 6, charges = 1}, --Axe Toss (pet felguard ability) --paladin - [31884] = {cooldown = 120, duration = 20, talent = false, charges = 1, class = "PALADIN", type = 1}, --Avenging Wrath - [216331] = {cooldown = 120, duration = 20, talent = 22190, charges = 1, class = "PALADIN", type = 1}, --Avenging Crusader (talent) - [498] = {cooldown = 60, duration = 8, talent = false, charges = 1, class = "PALADIN", type = 2}, --Divine Protection - [642] = {cooldown = 300, duration = 8, talent = false, charges = 1, class = "PALADIN", type = 2}, --Divine Shield - [105809] = {cooldown = 90, duration = 20, talent = 22164, charges = 1, class = "PALADIN", type = 2}, --Holy Avenger (talent) - [152262] = { cooldown = 45, duration = 15, talent = 17601, charges = 1, class = "PALADIN", type = 2}, --Seraphim - [633] = {cooldown = 600, duration = false, talent = false, charges = 1, class = "PALADIN", type = 3}, --Lay on Hands - [1022] = {cooldown = 300, duration = 10, talent = false, charges = 1, class = "PALADIN", type = 3}, --Blessing of Protection - [6940] = {cooldown = 120, duration = 12, talent = false, charges = 1, class = "PALADIN", type = 3}, --Blessing of Sacrifice - [31821] = {cooldown = 180, duration = 8, talent = false, charges = 1, class = "PALADIN", type = 4}, --Aura Mastery - [1044] = {cooldown = 25, duration = 8, talent = false, charges = 1, class = "PALADIN", type = 5}, --Blessing of Freedom - [853] = {cooldown = 60, duration = 6, talent = false, charges = 1, class = "PALADIN", type = 5}, --Hammer of Justice - [115750] = {cooldown = 90, duration = 6, talent = 21811, charges = 1, class = "PALADIN", type = 5}, --Blinding Light(talent) - [327193] = {cooldown = 90, duration = 15, talent = 23468, charges = 1, class = "PALADIN", type = 1}, --Moment of Glory (talent) - [31850] = {cooldown = 120, duration = 8, talent = false, charges = 1, class = "PALADIN", type = 2}, --Ardent Defender - [86659] = {cooldown = 300, duration = 8, talent = false, charges = 1, class = "PALADIN", type = 2}, --Guardian of Ancient Kings - [204018] = {cooldown = 180, duration = 10, talent = 22435, charges = 1, class = "PALADIN", type = 3}, --Blessing of Spellwarding (talent) - [231895] = {cooldown = 120, duration = 25, talent = 22215, charges = 1, class = "PALADIN", type = 1}, --Crusade (talent) - [205191] = {cooldown = 60, duration = 10, talent = 22183, charges = 1, class = "PALADIN", type = 2}, --Eye for an Eye (talent) - [184662] = {cooldown = 120, duration = 15, talent = false, charges = 1, class = "PALADIN", type = 2}, --Shield of Vengeance - + -- 65 - Holy + -- 66 - Protection + -- 70 - Retribution + + [31884] = {cooldown = 120, duration = 20, specs = {65,66,70}, talent =false, charges = 1, class = "PALADIN", type = 1}, --Avenging Wrath + [216331] = {cooldown = 120, duration = 20, specs = {65}, talent =22190, charges = 1, class = "PALADIN", type = 1}, --Avenging Crusader (talent) + [498] = {cooldown = 60, duration = 8, specs = {65}, talent =false, charges = 1, class = "PALADIN", type = 2}, --Divine Protection + [642] = {cooldown = 300, duration = 8, specs = {65,66,70}, talent =false, charges = 1, class = "PALADIN", type = 2}, --Divine Shield + [105809] = {cooldown = 90, duration = 20, specs = {65,66,70}, talent =22164, charges = 1, class = "PALADIN", type = 2}, --Holy Avenger (talent) + [152262] = {cooldown = 45, duration = 15, specs = {65,66,70}, talent =17601, charges = 1, class = "PALADIN", type = 2}, --Seraphim + [633] = {cooldown = 600, duration = false, specs = {65,66,70}, talent =false, charges = 1, class = "PALADIN", type = 3}, --Lay on Hands + [1022] = {cooldown = 300, duration = 10, specs = {65,66,70}, talent =false, charges = 1, class = "PALADIN", type = 3}, --Blessing of Protection + [6940] = {cooldown = 120, duration = 12, specs = {65,66,70}, talent =false, charges = 1, class = "PALADIN", type = 3}, --Blessing of Sacrifice + [31821] = {cooldown = 180, duration = 8, specs = {65}, talent =false, charges = 1, class = "PALADIN", type = 4}, --Aura Mastery + [1044] = {cooldown = 25, duration = 8, specs = {65,66,70}, talent =false, charges = 1, class = "PALADIN", type = 5}, --Blessing of Freedom + [853] = {cooldown = 60, duration = 6, specs = {65,66,70}, talent =false, charges = 1, class = "PALADIN", type = 5}, --Hammer of Justice + [115750] = {cooldown = 90, duration = 6, specs = {65,66,70}, talent =21811, charges = 1, class = "PALADIN", type = 5}, --Blinding Light(talent) + [327193] = {cooldown = 90, duration = 15, specs = {66}, talent =23468, charges = 1, class = "PALADIN", type = 1}, --Moment of Glory (talent) + [31850] = {cooldown = 120, duration = 8, specs = {66}, talent =false, charges = 1, class = "PALADIN", type = 2}, --Ardent Defender + [86659] = {cooldown = 300, duration = 8, specs = {66}, talent =false, charges = 1, class = "PALADIN", type = 2}, --Guardian of Ancient Kings + [204018] = {cooldown = 180, duration = 10, specs = {66}, talent =22435, charges = 1, class = "PALADIN", type = 3}, --Blessing of Spellwarding (talent) + [231895] = {cooldown = 120, duration = 25, specs = {70}, talent =22215, charges = 1, class = "PALADIN", type = 1}, --Crusade (talent) + [205191] = {cooldown = 60, duration = 10, specs = {70}, talent =22183, charges = 1, class = "PALADIN", type = 2}, --Eye for an Eye (talent) + [184662] = {cooldown = 120, duration = 15, specs = {70}, talent =false, charges = 1, class = "PALADIN", type = 2}, --Shield of Vengeance + --warrior - [107574] = {cooldown = 90, duration = 20, talent = 22397, charges = 1, class = "WARRIOR", type = 1}, --Avatar - [227847] = {cooldown = 90, duration = 5, talent = false, charges = 1, class = "WARRIOR", type = 1}, --Bladestorm - [152277] = {cooldown = 60, duration = 6, talent = 21667, charges = 1, class = "WARRIOR", type = 1}, --Ravager (talent) - [118038] = {cooldown = 180, duration = 8, talent = false, charges = 1, class = "WARRIOR", type = 2}, --Die by the Sword - [97462] = {cooldown = 180, duration = 10, talent = false, charges = 1, class = "WARRIOR", type = 4}, --Rallying Cry - [1719] = {cooldown = 90, duration = 10, talent = false, charges = 1, class = "WARRIOR", type = 1}, --Recklessness - [46924] = {cooldown = 60, duration = 4, talent = 22400, charges = 1, class = "WARRIOR", type = 1}, --Bladestorm (talent) - [184364] = {cooldown = 120, duration = 8, talent = false, charges = 1, class = "WARRIOR", type = 2}, --Enraged Regeneration - [228920] = {cooldown = 60, duration = 6, talent = 23099, charges = 1, class = "WARRIOR", type = 1}, --Ravager (talent) - [12975] = {cooldown = 180, duration = 15, talent = false, charges = 1, class = "WARRIOR", type = 2}, --Last Stand - [871] = {cooldown = 8, duration = 240, talent = false, charges = 1, class = "WARRIOR", type = 2}, --Shield Wall - [64382] = {cooldown = 180, duration = false, talent = false, charges = 1, class = "WARRIOR", type = 5}, --Shattering Throw - [5246] = {cooldown = 90, duration = 8, talent = false, charges = 1, class = "WARRIOR", type = 5}, --Intimidating Shout + -- 71 - Arms + -- 72 - Fury + -- 73 - Protection + + [107574] = {cooldown = 90, duration = 20, specs = {71,73}, talent =22397, charges = 1, class = "WARRIOR", type = 1}, --Avatar + [227847] = {cooldown = 90, duration = 5, specs = {71}, talent =false, charges = 1, class = "WARRIOR", type = 1}, --Bladestorm + [46924] = {cooldown = 60, duration = 4, specs = {72}, talent =22400, charges = 1, class = "WARRIOR", type = 1}, --Bladestorm (talent) + [152277] = {cooldown = 60, duration = 6, specs = {71}, talent =21667, charges = 1, class = "WARRIOR", type = 1}, --Ravager (talent) + [228920] = {cooldown = 60, duration = 6, specs = {73}, talent =23099, charges = 1, class = "WARRIOR", type = 1}, --Ravager (talent) + [118038] = {cooldown = 180, duration = 8, specs = {71}, talent =false, charges = 1, class = "WARRIOR", type = 2}, --Die by the Sword + [97462] = {cooldown = 180, duration = 10, specs = {71,72,73}, talent =false, charges = 1, class = "WARRIOR", type = 4}, --Rallying Cry + [1719] = {cooldown = 90, duration = 10, specs = {72}, talent =false, charges = 1, class = "WARRIOR", type = 1}, --Recklessness + [184364] = {cooldown = 120, duration = 8, specs = {72}, talent =false, charges = 1, class = "WARRIOR", type = 2}, --Enraged Regeneration + [12975] = {cooldown = 180, duration = 15, specs = {73}, talent =false, charges = 1, class = "WARRIOR", type = 2}, --Last Stand + [871] = {cooldown = 8, duration = 240, specs = {73}, talent =false, charges = 1, class = "WARRIOR", type = 2}, --Shield Wall + [64382] = {cooldown = 180, duration = false, specs = {71,72,73}, talent =false, charges = 1, class = "WARRIOR", type = 5}, --Shattering Throw + [5246] = {cooldown = 90, duration = 8, specs = {71,72,73}, talent =false, charges = 1, class = "WARRIOR", type = 5}, --Intimidating Shout --warlock - [205180] = {cooldown = 180, duration = 20, talent = false, charges = 1, class = "WARLOCK", type = 1}, --Summon Darkglare - --[342601] = {cooldown = 3600, duration = false, talent = false, charges = 1, class = "WARLOCK", type = 1}, --Ritual of Doom - [113860] = {cooldown = 120, duration = 20, talent = 19293, charges = 1, class = "WARLOCK", type = 1}, --Dark Soul: Misery (talent) - [104773] = {cooldown = 180, duration = 8, talent = false, charges = 1, class = "WARLOCK", type = 2}, --Unending Resolve - [108416] = {cooldown = 60, duration = 20, talent = 19286, charges = 1, class = "WARLOCK", type = 2}, --Dark Pact (talent) - [265187] = {cooldown = 90, duration = 15, talent = false, charges = 1, class = "WARLOCK", type = 1}, --Summon Demonic Tyrant - [111898] = {cooldown = 120, duration = 15, talent = 21717, charges = 1, class = "WARLOCK", type = 1}, --Grimoire: Felguard (talent) - [267171] = {cooldown = 60, duration = false, talent = 23138, charges = 1, class = "WARLOCK", type = 1}, --Demonic Strength (talent) - [267217] = {cooldown = 180, duration = 20, talent = 23091, charges = 1, class = "WARLOCK", type = 1}, --Nether Portal - [1122] = {cooldown = 180, duration = 30, talent = false, charges = 1, class = "WARLOCK", type = 1}, --Summon Infernal - [113858] = {cooldown = 120, duration = 20, talent = 23092, charges = 1, class = "WARLOCK", type = 1}, --Dark Soul: Instability (talent) - [30283] = {cooldown = 60, duration = 3, talent = false, charges = 1, class = "WARLOCK", type = 5}, --Shadowfury - [333889] = {cooldown = 180, duration = 15, talent = false, charges = 1, class = "WARLOCK", type = 5}, --Fel Domination - [5484] = {cooldown = 40, duration = 20, talent = 23465, charges = 1, class = "WARLOCK", type = 5}, --Howl of Terror (talent) + -- 265 - Affliction + -- 266 - Demonology + -- 267 - Destruction + + [205180] = {cooldown = 180, duration = 20, specs = {265}, talent =false, charges = 1, class = "WARLOCK", type = 1}, --Summon Darkglare + --[342601] = {cooldown = 3600, duration = false, specs = {}, talent =false, charges = 1, class = "WARLOCK", type = 1}, --Ritual of Doom + [113860] = {cooldown = 120, duration = 20, specs = {265}, talent =19293, charges = 1, class = "WARLOCK", type = 1}, --Dark Soul: Misery (talent) + [104773] = {cooldown = 180, duration = 8, specs = {265,266,267}, talent =false, charges = 1, class = "WARLOCK", type = 2}, --Unending Resolve + [108416] = {cooldown = 60, duration = 20, specs = {265,266,267}, talent =19286, charges = 1, class = "WARLOCK", type = 2}, --Dark Pact (talent) + [265187] = {cooldown = 90, duration = 15, specs = {266}, talent =false, charges = 1, class = "WARLOCK", type = 1}, --Summon Demonic Tyrant + [111898] = {cooldown = 120, duration = 15, specs = {266}, talent =21717, charges = 1, class = "WARLOCK", type = 1}, --Grimoire: Felguard (talent) + [267171] = {cooldown = 60, duration = false, specs = {266}, talent =23138, charges = 1, class = "WARLOCK", type = 1}, --Demonic Strength (talent) + [267217] = {cooldown = 180, duration = 20, specs = {266}, talent =23091, charges = 1, class = "WARLOCK", type = 1}, --Nether Portal + [1122] = {cooldown = 180, duration = 30, specs = {267}, talent =false, charges = 1, class = "WARLOCK", type = 1}, --Summon Infernal + [113858] = {cooldown = 120, duration = 20, specs = {267}, talent =23092, charges = 1, class = "WARLOCK", type = 1}, --Dark Soul: Instability (talent) + [30283] = {cooldown = 60, duration = 3, specs = {265,266,267}, talent =false, charges = 1, class = "WARLOCK", type = 5}, --Shadowfury + [333889] = {cooldown = 180, duration = 15, specs = {265,266,267}, talent =false, charges = 1, class = "WARLOCK", type = 5}, --Fel Domination + [5484] = {cooldown = 40, duration = 20, specs = {265,266,267}, talent =23465, charges = 1, class = "WARLOCK", type = 5}, --Howl of Terror (talent) --shaman - [198067] = {cooldown = 150, duration = 30, talent = false, charges = 1, class = "SHAMAN", type = 1}, --Fire Elemental - [192249] = {cooldown = 150, duration = 30, talent = 19272, charges = 1, class = "SHAMAN", type = 1}, --Storm Elemental (talent) - [108271] = {cooldown = 90, duration = 8, talent = false, charges = 1, class = "SHAMAN", type = 2}, --Astral Shift - [108281] = {cooldown = 120, duration = 10, talent = 22172, charges = 1, class = "SHAMAN", type = 4}, --Ancestral Guidance (talent) - [51533] = {cooldown = 120, duration = 15, talent = false, charges = 1, class = "SHAMAN", type = 1}, --Feral Spirit - [114050] = {cooldown = 180, duration = 15, talent = 21675, charges = 1, class = "SHAMAN", type = 1}, --Ascendance (talent) - [114051] = {cooldown = 180, duration = 15, talent = 21972, charges = 1, class = "SHAMAN", type = 1}, --Ascendance (talent) - [114052] = {cooldown = 180, duration = 15, talent = 22359, charges = 1, class = "SHAMAN", type = 4}, --Ascendance (talent) - [98008] = {cooldown = 180, duration = 6, talent = false, charges = 1, class = "SHAMAN", type = 4}, --Spirit Link Totem - [108280] = {cooldown = 180, duration = 10, talent = false, charges = 1, class = "SHAMAN", type = 4}, --Healing Tide Totem - [207399] = {cooldown = 240, duration = 30, talent = 22323, charges = 1, class = "SHAMAN", type = 4}, --Ancestral Protection Totem (talent) - [16191] = {cooldown = 180, duration = 8, talent = false, charges = 1, class = "SHAMAN", type = 4}, --Mana Tide Totem - [198103] = {cooldown = 300, duration = 60, talent = false, charges = 1, class = "SHAMAN", type = 2}, --Earth Elemental - [192058] = {cooldown = 60, duration = false, talent = false, charges = 1, class = "SHAMAN", type = 5}, --Capacitor Totem - [8143] = {cooldown = 60, duration = 10, talent = false, charges = 1, class = "SHAMAN", type = 5}, --Tremor Totem - [192077] = {cooldown = 120, duration = 15, talent = 21966, charges = 1, class = "SHAMAN", type = 5}, --Wind Rush Totem (talent) + -- 262 - Elemental + -- 263 - Enchancment + -- 264 - Restoration + + [198067] = {cooldown = 150, duration = 30, specs = {262}, talent =false, charges = 1, class = "SHAMAN", type = 1}, --Fire Elemental + [192249] = {cooldown = 150, duration = 30, specs = {262}, talent =19272, charges = 1, class = "SHAMAN", type = 1}, --Storm Elemental (talent) + [108271] = {cooldown = 90, duration = 8, specs = {262,263,264}, talent =false, charges = 1, class = "SHAMAN", type = 2}, --Astral Shift + [108281] = {cooldown = 120, duration = 10, specs = {262,263}, talent =22172, charges = 1, class = "SHAMAN", type = 4}, --Ancestral Guidance (talent) + [51533] = {cooldown = 120, duration = 15, specs = {263}, talent =false, charges = 1, class = "SHAMAN", type = 1}, --Feral Spirit + [114050] = {cooldown = 180, duration = 15, specs = {262}, talent =21675, charges = 1, class = "SHAMAN", type = 1}, --Ascendance (talent) + [114051] = {cooldown = 180, duration = 15, specs = {263}, talent =21972, charges = 1, class = "SHAMAN", type = 1}, --Ascendance (talent) + [114052] = {cooldown = 180, duration = 15, specs = {264}, talent =22359, charges = 1, class = "SHAMAN", type = 4}, --Ascendance (talent) + [98008] = {cooldown = 180, duration = 6, specs = {264}, talent =false, charges = 1, class = "SHAMAN", type = 4}, --Spirit Link Totem + [108280] = {cooldown = 180, duration = 10, specs = {264}, talent =false, charges = 1, class = "SHAMAN", type = 4}, --Healing Tide Totem + [207399] = {cooldown = 240, duration = 30, specs = {264}, talent =22323, charges = 1, class = "SHAMAN", type = 4}, --Ancestral Protection Totem (talent) + [16191] = {cooldown = 180, duration = 8, specs = {264}, talent =false, charges = 1, class = "SHAMAN", type = 4}, --Mana Tide Totem + [198103] = {cooldown = 300, duration = 60, specs = {262,263,264}, talent =false, charges = 1, class = "SHAMAN", type = 2}, --Earth Elemental + [192058] = {cooldown = 60, duration = false, specs = {262,263,264}, talent =false, charges = 1, class = "SHAMAN", type = 5}, --Capacitor Totem + [8143] = {cooldown = 60, duration = 10, specs = {262,263,264}, talent =false, charges = 1, class = "SHAMAN", type = 5}, --Tremor Totem + [192077] = {cooldown = 120, duration = 15, specs = {262,263,264}, talent =21966, charges = 1, class = "SHAMAN", type = 5}, --Wind Rush Totem (talent) --monk - [132578] = {cooldown = 180, duration = 25, talent = false, charges = 1, class = "MONK", type = 1}, --Invoke Niuzao, the Black Ox - [115080] = {cooldown = 180, duration = false, talent = false, charges = 1, class = "MONK", type = 1}, --Touch of Death - [115203] = {cooldown = 420, duration = 15, talent = false, charges = 1, class = "MONK", type = 2}, --Fortifying Brew - [115176] = {cooldown = 300, duration = 8, talent = false, charges = 1, class = "MONK", type = 2}, --Zen Meditation - [115399] = {cooldown = 120, duration = false, talent = 19992, charges = 1, class = "MONK", type = 2}, --Black Ox brew (talent) - [122278] = {cooldown = 120, duration = 10, talent = 20175, charges = 1, class = "MONK", type = 2}, --Dampen Harm (talent) - [137639] = {cooldown = 90, duration = 15, talent = false, charges = 1, class = "MONK", type = 1}, --Storm, Earth, and Fire - [123904] = {cooldown = 120, duration = 24, talent = false, charges = 1, class = "MONK", type = 1}, --Invoke Xuen, the White Tiger - [152173] = {cooldown = 90, duration = 12, talent = 21191, charges = 1, class = "MONK", type = 1}, --Serenity (talent) - [122470] = {cooldown = 90, duration = 6, talent = false, charges = 1, class = "MONK", type = 2}, --Touch of Karma - [322118] = {cooldown = 180, duration = 25, talent = false, charges = 1, class = "MONK", type = 4}, --Invoke Yulon, the Jade serpent - [243435] = {cooldown = 90, duration = 15, talent = false, charges = 1, class = "MONK", type = 2}, --Fortifying Brew - [122783] = {cooldown = 90, duration = 6, talent = 20173, charges = 1, class = "MONK", type = 2}, --Diffuse Magic (talent) - [116849] = {cooldown = 120, duration = 12, talent = false, charges = 1, class = "MONK", type = 3}, --Life Cocoon - [115310] = {cooldown = 180, duration = false, talent = false, charges = 1, class = "MONK", type = 4}, --Revival - [197908] = {cooldown = 90, duration = 10, talent = 22166, charges = 1, class = "MONK", type = 5}, --Mana tea (talent) - [116844] = {cooldown = 45, duration = 5, talent = 19995, charges = 1, class = "MONK", type = 5}, --Ring of peace (talent) - [119381] = {cooldown = 50, duration = 3, talent = false, charges = 1, class = "MONK", type = 5}, --Leg Sweep + -- 268 - Brewmaster + -- 269 - Windwalker + -- 270 - Restoration + + [132578] = {cooldown = 180, duration = 25, specs = {268}, talent =false, charges = 1, class = "MONK", type = 1}, --Invoke Niuzao, the Black Ox + [115080] = {cooldown = 180, duration = false, specs = {268,269,270}, talent =false, charges = 1, class = "MONK", type = 1}, --Touch of Death + [115203] = {cooldown = 420, duration = 15, specs = {268}, talent =false, charges = 1, class = "MONK", type = 2}, --Fortifying Brew + [115176] = {cooldown = 300, duration = 8, specs = {268}, talent =false, charges = 1, class = "MONK", type = 2}, --Zen Meditation + [115399] = {cooldown = 120, duration = false, specs = {268}, talent =19992, charges = 1, class = "MONK", type = 2}, --Black Ox brew (talent) + [122278] = {cooldown = 120, duration = 10, specs = {268,269,270}, talent =20175, charges = 1, class = "MONK", type = 2}, --Dampen Harm (talent) + [137639] = {cooldown = 90, duration = 15, specs = {269}, talent =false, charges = 1, class = "MONK", type = 1}, --Storm, Earth, and Fire + [123904] = {cooldown = 120, duration = 24, specs = {269}, talent =false, charges = 1, class = "MONK", type = 1}, --Invoke Xuen, the White Tiger + [152173] = {cooldown = 90, duration = 12, specs = {269}, talent =21191, charges = 1, class = "MONK", type = 1}, --Serenity (talent) + [122470] = {cooldown = 90, duration = 6, specs = {269}, talent =false, charges = 1, class = "MONK", type = 2}, --Touch of Karma + [322118] = {cooldown = 180, duration = 25, specs = {270}, talent =false, charges = 1, class = "MONK", type = 4}, --Invoke Yulon, the Jade serpent + [243435] = {cooldown = 90, duration = 15, specs = {269,270}, talent =false, charges = 1, class = "MONK", type = 2}, --Fortifying Brew + [122783] = {cooldown = 90, duration = 6, specs = {269,270}, talent =20173, charges = 1, class = "MONK", type = 2}, --Diffuse Magic (talent) + [116849] = {cooldown = 120, duration = 12, specs = {270}, talent =false, charges = 1, class = "MONK", type = 3}, --Life Cocoon + [115310] = {cooldown = 180, duration = false, specs = {270}, talent =false, charges = 1, class = "MONK", type = 4}, --Revival + [197908] = {cooldown = 90, duration = 10, specs = {270}, talent =22166, charges = 1, class = "MONK", type = 5}, --Mana tea (talent) + [116844] = {cooldown = 45, duration = 5, specs = {268,269,270}, talent =19995, charges = 1, class = "MONK", type = 5}, --Ring of peace (talent) + [119381] = {cooldown = 50, duration = 3, specs = {268,269,270}, talent =false, charges = 1, class = "MONK", type = 5}, --Leg Sweep --hunter - [193530] = {cooldown = 120, duration = 20, talent = false, charges = 1, class = "HUNTER", type = 1}, --Aspect of the Wild - [19574] = {cooldown = 90, duration = 12, talent = false, charges = 1, class = "HUNTER", type = 1}, --Bestial Wrath - [201430] = {cooldown = 180, duration = 12, talent = 23044, charges = 1, class = "HUNTER", type = 1}, --Stampede (talent) - [288613] = {cooldown = 180, duration = 15, talent = false, charges = 1, class = "HUNTER", type = 1}, --Trueshot - [199483] = {cooldown = 60, duration = 60, talent = 23100, charges = 1, class = "HUNTER", type = 2}, --Camouflage (talent) - [281195] = {cooldown = 180, duration = 6, talent = false, charges = 1, class = "HUNTER", type = 2}, --Survival of the Fittest - [266779] = {cooldown = 120, duration = 20, talent = false, charges = 1, class = "HUNTER", type = 1}, --Coordinated Assault - [186265] = {cooldown = 180, duration = 8, talent = false, charges = 1, class = "HUNTER", type = 2}, --Aspect of the Turtle - [109304] = {cooldown = 120, duration = false, talent = false, charges = 1, class = "HUNTER", type = 2}, --Exhilaration - [186257] = {cooldown = 144, duration = 14, talent = false, charges = 1, class = "HUNTER", type = 5}, --Aspect of the cheetah - [19577] = {cooldown = 60, duration = 5, talent = false, charges = 1, class = "HUNTER", type = 5}, --Intimidation - [109248] = {cooldown = 45, duration = 10, talent = 22499, charges = 1, class = "HUNTER", type = 5}, --Binding Shot (talent) - [187650] = {cooldown = 25, duration = 60, talent = false, charges = 1, class = "HUNTER", type = 5}, --Freezing Trap - [186289] = {cooldown = 72, duration = 15, talent = false, charges = 1, class = "HUNTER", type = 5}, --Aspect of the eagle + -- 253 - Beast Mastery + -- 254 - Marksmenship + -- 255 - Survival + + [193530] = {cooldown = 120, duration = 20, specs = {253}, talent =false, charges = 1, class = "HUNTER", type = 1}, --Aspect of the Wild + [19574] = {cooldown = 90, duration = 12, specs = {253}, talent =false, charges = 1, class = "HUNTER", type = 1}, --Bestial Wrath + [201430] = {cooldown = 180, duration = 12, specs = {253}, talent =23044, charges = 1, class = "HUNTER", type = 1}, --Stampede (talent) + [288613] = {cooldown = 180, duration = 15, specs = {254}, talent =false, charges = 1, class = "HUNTER", type = 1}, --Trueshot + [199483] = {cooldown = 60, duration = 60, specs = {253,254,255}, talent =23100, charges = 1, class = "HUNTER", type = 2}, --Camouflage (talent) + [281195] = {cooldown = 180, duration = 6, specs = {253,254,255}, talent =false, charges = 1, class = "HUNTER", type = 2}, --Survival of the Fittest + [266779] = {cooldown = 120, duration = 20, specs = {255}, talent =false, charges = 1, class = "HUNTER", type = 1}, --Coordinated Assault + [186265] = {cooldown = 180, duration = 8, specs = {253,254,255}, talent =false, charges = 1, class = "HUNTER", type = 2}, --Aspect of the Turtle + [109304] = {cooldown = 120, duration = false, specs = {253,254,255}, talent =false, charges = 1, class = "HUNTER", type = 2}, --Exhilaration + [186257] = {cooldown = 144, duration = 14, specs = {253,254,255}, talent =false, charges = 1, class = "HUNTER", type = 5}, --Aspect of the cheetah + [19577] = {cooldown = 60, duration = 5, specs = {253,255}, talent =false, charges = 1, class = "HUNTER", type = 5}, --Intimidation + [109248] = {cooldown = 45, duration = 10, specs = {253,254,255}, talent =22499, charges = 1, class = "HUNTER", type = 5}, --Binding Shot (talent) + [187650] = {cooldown = 25, duration = 60, specs = {253,254,255}, talent =false, charges = 1, class = "HUNTER", type = 5}, --Freezing Trap + [186289] = {cooldown = 72, duration = 15, specs = {255}, talent =false, charges = 1, class = "HUNTER", type = 5}, --Aspect of the eagle --druid - [77761] = {cooldown = 120, duration = 8, talent = false, charges = 1, class = "DRUID", type = 4}, --Stampeding Roar - [194223] = {cooldown = 180, duration = 20, talent = false, charges = 1, class = "DRUID", type = 1}, --Celestial Alignment - [102560] = {cooldown = 180, duration = 30, talent = 21702, charges = 1, class = "DRUID", type = 1}, --Incarnation: Chosen of Elune (talent) - [22812] = {cooldown = 60, duration = 12, talent = false, charges = 1, class = "DRUID", type = 2}, --Barkskin - [108238] = {cooldown = 90, duration = false, talent = 18570, charges = 1, class = "DRUID", type = 2}, --Renewal (talent) - [29166] = {cooldown = 180, duration = 12, talent = false, charges = 1, class = "DRUID", type = 3}, --Innervate - [106951] = {cooldown = 180, duration = 15, talent = false, charges = 1, class = "DRUID", type = 1}, --Berserk - [102543] = {cooldown = 30, duration = 180, talent = 21704, charges = 1, class = "DRUID", type = 1}, --Incarnation: King of the Jungle (talent) - [61336] = {cooldown = 120, duration = 6, talent = false, charges = 2, class = "DRUID", type = 2}, --Survival Instincts (2min feral 4min guardian, same spellid) - [102558] = {cooldown = 180, duration = 30, talent = 22388, charges = 1, class = "DRUID", type = 2}, --Incarnation: Guardian of Ursoc (talent) - [33891] = {cooldown = 180, duration = 30, talent = 22421, charges = 1, class = "DRUID", type = 2}, --Incarnation: Tree of Life (talent) - [102342] = {cooldown = 60, duration = 12, talent = false, charges = 1, class = "DRUID", type = 3}, --Ironbark - [203651] = {cooldown = 60, duration = false, talent = 22422, charges = 1, class = "DRUID", type = 3}, --Overgrowth (talent) - [740] = {cooldown = 180, duration = 8, talent = false, charges = 1, class = "DRUID", type = 4}, --Tranquility - [197721] = {cooldown = 90, duration = 8, talent = 22404, charges = 1, class = "DRUID", type = 4}, --Flourish (talent) - [132469] = {cooldown = 30, duration = false, talent = false, charges = 1, class = "DRUID", type = 5}, --Typhoon - [319454] = {cooldown = 300, duration = 45, talent = 18577, charges = 1, class = "DRUID", type = 5}, --Heart of the Wild (talent) - [102793] = {cooldown = 60, duration = 10, talent = false, charges = 1, class = "DRUID", type = 5}, --Ursol's Vortex + -- 102 - Balance + -- 103 - Feral + -- 104 - Guardian + -- 105 - Restoration + + [77761] = {cooldown = 120, duration = 8, specs = {102,103,104,105}, talent =false, charges = 1, class = "DRUID", type = 4}, --Stampeding Roar + [194223] = {cooldown = 180, duration = 20, specs = {102}, talent =false, charges = 1, class = "DRUID", type = 1}, --Celestial Alignment + [102560] = {cooldown = 180, duration = 30, specs = {102}, talent =21702, charges = 1, class = "DRUID", type = 1}, --Incarnation: Chosen of Elune (talent) + [22812] = {cooldown = 60, duration = 12, specs = {102,103,104,105}, talent =false, charges = 1, class = "DRUID", type = 2}, --Barkskin + [108238] = {cooldown = 90, duration = false, specs = {102,103,104,105}, talent =18570, charges = 1, class = "DRUID", type = 2}, --Renewal (talent) + [29166] = {cooldown = 180, duration = 12, specs = {102,105}, talent =false, charges = 1, class = "DRUID", type = 3}, --Innervate + [106951] = {cooldown = 180, duration = 15, specs = {103,104}, talent =false, charges = 1, class = "DRUID", type = 1}, --Berserk + [102543] = {cooldown = 30, duration = 180, specs = {103}, talent =21704, charges = 1, class = "DRUID", type = 1}, --Incarnation: King of the Jungle (talent) + [61336] = {cooldown = 120, duration = 6, specs = {103,104}, talent =false, charges = 2, class = "DRUID", type = 2}, --Survival Instincts (2min feral 4min guardian, same spellid) + [102558] = {cooldown = 180, duration = 30, specs = {104}, talent =22388, charges = 1, class = "DRUID", type = 2}, --Incarnation: Guardian of Ursoc (talent) + [33891] = {cooldown = 180, duration = 30, specs = {105}, talent =22421, charges = 1, class = "DRUID", type = 2}, --Incarnation: Tree of Life (talent) + [102342] = {cooldown = 60, duration = 12, specs = {105}, talent =false, charges = 1, class = "DRUID", type = 3}, --Ironbark + [203651] = {cooldown = 60, duration = false, specs = {105}, talent =22422, charges = 1, class = "DRUID", type = 3}, --Overgrowth (talent) + [740] = {cooldown = 180, duration = 8, specs = {105}, talent =false, charges = 1, class = "DRUID", type = 4}, --Tranquility + [197721] = {cooldown = 90, duration = 8, specs = {105}, talent =22404, charges = 1, class = "DRUID", type = 4}, --Flourish (talent) + [132469] = {cooldown = 30, duration = false, specs = {102,103,104,105}, talent =false, charges = 1, class = "DRUID", type = 5}, --Typhoon + [319454] = {cooldown = 300, duration = 45, specs = {102,103,104,105}, talent =18577, charges = 1, class = "DRUID", type = 5}, --Heart of the Wild (talent) + [102793] = {cooldown = 60, duration = 10, specs = {102,103,104,105}, talent =false, charges = 1, class = "DRUID", type = 5}, --Ursol's Vortex --death knight - [275699] = {cooldown = 90, duration = 15, talent = false, charges = 1, class = "DEATHKNIGHT", type = 1}, --Apocalypse - [42650] = {cooldown = 480, duration = 30, talent = false, charges = 1, class = "DEATHKNIGHT", type = 1}, --Army of the Dead - [49206] = {cooldown = 180, duration = 30, talent = 22110, charges = 1, class = "DEATHKNIGHT", type = 1}, --Summon Gargoyle (talent) - [207289] = {cooldown = 78, duration = 12, talent = 22538, charges = 1, class = "DEATHKNIGHT", type = 1}, --Unholy Assault (talent) - [48743] = {cooldown = 120, duration = 15, talent = 23373, charges = 1, class = "DEATHKNIGHT", type = 2}, --Death Pact (talent) - [48707] = {cooldown = 60, duration = 10, talent = 23373, charges = 1, class = "DEATHKNIGHT", type = 2}, --Anti-magic Shell - [152279] = {cooldown = 120, duration = 5, talent = 22537, charges = 1, class = "DEATHKNIGHT", type = 1}, --Breath of Sindragosa (talent) - [47568] = {cooldown = 120, duration = 20, talent = false, charges = 1, class = "DEATHKNIGHT", type = 1}, --Empower Rune Weapon - [279302] = {cooldown = 120, duration = 10, talent = 22535, charges = 1, class = "DEATHKNIGHT", type = 1}, --Frostwyrm's Fury (talent) - [49028] = {cooldown = 120, duration = 8, talent = false, charges = 1, class = "DEATHKNIGHT", type = 1}, --Dancing Rune Weapon - [55233] = {cooldown = 90, duration = 10, talent = false, charges = 1, class = "DEATHKNIGHT", type = 2}, --Vampiric Blood - [48792] = {cooldown = 120, duration = 8, talent = false, charges = 1, class = "DEATHKNIGHT", type = 2}, --Icebound Fortitude - [51052] = {cooldown = 120, duration = 10, talent = false, charges = 1, class = "DEATHKNIGHT", type = 4}, --Anti-magic Zone - [219809] = {cooldown = 60, duration = 8, talent = 23454, charges = 1, class = "DEATHKNIGHT", type = 2}, --Tombstone (talent) - [108199] = {cooldown = 120, duration = false, talent = false, charges = 1, class = "DEATHKNIGHT", type = 5}, --Gorefiend's Grasp - [207167] = {cooldown = 60, duration = 5, talent = 22519, charges = 1, class = "DEATHKNIGHT", type = 5}, --Blinding Sleet (talent) - [108194] = {cooldown = 45, duration = 4, talent = 22520, charges = 1, class = "DEATHKNIGHT", type = 5}, --Asphyxiate (talent) - [221562] = {cooldown = 45, duration = 5, talent = false, charges = 1, class = "DEATHKNIGHT", type = 5}, --Asphyxiate - [212552] = {cooldown = 60, duration = 4, talent = 19228, charges = 1, class = "DEATHKNIGHT", type = 5}, --Wraith walk (talent) + -- 252 - Unholy + -- 251 - Frost + -- 252 - Blood + + [275699] = {cooldown = 90, duration = 15, specs = {252}, talent =false, charges = 1, class = "DEATHKNIGHT", type = 1}, --Apocalypse + [42650] = {cooldown = 480, duration = 30, specs = {252}, talent =false, charges = 1, class = "DEATHKNIGHT", type = 1}, --Army of the Dead + [49206] = {cooldown = 180, duration = 30, specs = {252}, talent =22110, charges = 1, class = "DEATHKNIGHT", type = 1}, --Summon Gargoyle (talent) + [207289] = {cooldown = 78, duration = 12, specs = {252}, talent =22538, charges = 1, class = "DEATHKNIGHT", type = 1}, --Unholy Assault (talent) + [48743] = {cooldown = 120, duration = 15, specs = {250,251,252}, talent =23373, charges = 1, class = "DEATHKNIGHT", type = 2}, --Death Pact (talent) + [48707] = {cooldown = 60, duration = 10, specs = {250,251,252}, talent =23373, charges = 1, class = "DEATHKNIGHT", type = 2}, --Anti-magic Shell + [152279] = {cooldown = 120, duration = 5, specs = {251}, talent =22537, charges = 1, class = "DEATHKNIGHT", type = 1}, --Breath of Sindragosa (talent) + [47568] = {cooldown = 120, duration = 20, specs = {251}, talent =false, charges = 1, class = "DEATHKNIGHT", type = 1}, --Empower Rune Weapon + [279302] = {cooldown = 120, duration = 10, specs = {251}, talent =22535, charges = 1, class = "DEATHKNIGHT", type = 1}, --Frostwyrm's Fury (talent) + [49028] = {cooldown = 120, duration = 8, specs = {250}, talent =false, charges = 1, class = "DEATHKNIGHT", type = 1}, --Dancing Rune Weapon + [55233] = {cooldown = 90, duration = 10, specs = {250}, talent =false, charges = 1, class = "DEATHKNIGHT", type = 2}, --Vampiric Blood + [48792] = {cooldown = 120, duration = 8, specs = {250,251,252}, talent =false, charges = 1, class = "DEATHKNIGHT", type = 2}, --Icebound Fortitude + [51052] = {cooldown = 120, duration = 10, specs = {250,251,252}, talent =false, charges = 1, class = "DEATHKNIGHT", type = 4}, --Anti-magic Zone + [219809] = {cooldown = 60, duration = 8, specs = {250}, talent =23454, charges = 1, class = "DEATHKNIGHT", type = 2}, --Tombstone (talent) + [108199] = {cooldown = 120, duration = false, specs = {250}, talent =false, charges = 1, class = "DEATHKNIGHT", type = 5}, --Gorefiend's Grasp + [207167] = {cooldown = 60, duration = 5, specs = {251}, talent =22519, charges = 1, class = "DEATHKNIGHT", type = 5}, --Blinding Sleet (talent) + [108194] = {cooldown = 45, duration = 4, specs = {251,252}, talent =22520, charges = 1, class = "DEATHKNIGHT", type = 5}, --Asphyxiate (talent) + [221562] = {cooldown = 45, duration = 5, specs = {250}, talent =false, charges = 1, class = "DEATHKNIGHT", type = 5}, --Asphyxiate + [212552] = {cooldown = 60, duration = 4, specs = {250,251,252}, talent =19228, charges = 1, class = "DEATHKNIGHT", type = 5}, --Wraith walk (talent) --demon hunter - [191427] = {cooldown = 240, duration = 30, talent = false, charges = 1, class = "DEMONHUNTER", type = 1}, --Metamorphosis - [198589] = {cooldown = 60, duration = 10, talent = false, charges = 1, class = "DEMONHUNTER", type = 2}, --Blur - [196555] = {cooldown = 120, duration = 5, talent = 21865, charges = 1, class = "DEMONHUNTER", type = 2}, --Netherwalk (talent) - [187827] = {cooldown = 180, duration = 15, talent = false, charges = 1, class = "DEMONHUNTER", type = 2}, --Metamorphosis - [196718] = {cooldown = 180, duration = 8, talent = false, charges = 1, class = "DEMONHUNTER", type = 4}, --Darkness - [188501] = {cooldown = 30, duration = 10, talent = false, charges = 1, class = "DEMONHUNTER", type = 5}, --Spectral Sight - [179057] = {cooldown = 60, duration = 2, talent = false, charges = 1, class = "DEMONHUNTER", type = 5}, --Chaos Nova - [211881] = {cooldown = 30, duration = 4, talent = 22767, charges = 1, class = "DEMONHUNTER", type = 5}, --Fel Eruption (talent) - [320341] = {cooldown = 90, duration = false, talent = 21902, charges = 1, class = "DEMONHUNTER", type = 1}, --Bulk Extraction (talent) - [204021] = {cooldown = 60, duration = 10, talent = false, charges = 1, class = "DEMONHUNTER", type = 2}, --Fiery Brand - [263648] = {cooldown = 30, duration = 12, talent = 22768, charges = 1, class = "DEMONHUNTER", type = 2}, --Soul Barrier (talent) - [207684] = {cooldown = 90, duration = 12, talent = false, charges = 1, class = "DEMONHUNTER", type = 5}, --Sigil of Misery - [202137] = {cooldown = 60, duration = 8, talent = false, charges = 1, class = "DEMONHUNTER", type = 5}, --Sigil of Silence - [202138] = {cooldown = 90, duration = 6, talent = 22511, charges = 1, class = "DEMONHUNTER", type = 5}, --Sigil of Chains (talent) + -- 577 - Havoc + -- 581 - Vengance + + [191427] = {cooldown = 240, duration = 30, specs = {577}, talent =false, charges = 1, class = "DEMONHUNTER", type = 1}, --Metamorphosis + [198589] = {cooldown = 60, duration = 10, specs = {577}, talent =false, charges = 1, class = "DEMONHUNTER", type = 2}, --Blur + [196555] = {cooldown = 120, duration = 5, specs = {577}, talent =21865, charges = 1, class = "DEMONHUNTER", type = 2}, --Netherwalk (talent) + [187827] = {cooldown = 180, duration = 15, specs = {581}, talent =false, charges = 1, class = "DEMONHUNTER", type = 2}, --Metamorphosis + [196718] = {cooldown = 180, duration = 8, specs = {577}, talent =false, charges = 1, class = "DEMONHUNTER", type = 4}, --Darkness + [188501] = {cooldown = 30, duration = 10, specs = {577,581}, talent =false, charges = 1, class = "DEMONHUNTER", type = 5}, --Spectral Sight + [179057] = {cooldown = 60, duration = 2, specs = {577}, talent =false, charges = 1, class = "DEMONHUNTER", type = 5}, --Chaos Nova + [211881] = {cooldown = 30, duration = 4, specs = {577}, talent =22767, charges = 1, class = "DEMONHUNTER", type = 5}, --Fel Eruption (talent) + [320341] = {cooldown = 90, duration = false, specs = {581}, talent =21902, charges = 1, class = "DEMONHUNTER", type = 1}, --Bulk Extraction (talent) + [204021] = {cooldown = 60, duration = 10, specs = {581}, talent =false, charges = 1, class = "DEMONHUNTER", type = 2}, --Fiery Brand + [263648] = {cooldown = 30, duration = 12, specs = {581}, talent =22768, charges = 1, class = "DEMONHUNTER", type = 2}, --Soul Barrier (talent) + [207684] = {cooldown = 90, duration = 12, specs = {581}, talent =false, charges = 1, class = "DEMONHUNTER", type = 5}, --Sigil of Misery + [202137] = {cooldown = 60, duration = 8, specs = {581}, talent =false, charges = 1, class = "DEMONHUNTER", type = 5}, --Sigil of Silence + [202138] = {cooldown = 90, duration = 6, specs = {581}, talent =22511, charges = 1, class = "DEMONHUNTER", type = 5}, --Sigil of Chains (talent) --mage - [12042] = {cooldown = 90, duration = 10, talent = false, charges = 1, class = "MAGE", type = 1}, --Arcane Power - [12051] = {cooldown = 90, duration = 6, talent = false, charges = 1, class = "MAGE", type = 1}, --Evocation - [110960] = {cooldown = 120, duration = 20, talent = false, charges = 1, class = "MAGE", type = 2}, --Greater Invisibility - [235450] = {cooldown = 25, duration = 60, talent = false, charges = 1, class = "MAGE", type = 5}, --Prismatic Barrier - [235313] = {cooldown = 25, duration = 60, talent = false, charges = 1, class = "MAGE", type = 5}, --Blazing Barrier - [11426] = {cooldown = 25, duration = 60, talent = false, charges = 1, class = "MAGE", type = 5}, --Ice Barrier - [190319] = {cooldown = 120, duration = 10, talent = false, charges = 1, class = "MAGE", type = 1}, --Combustion - [55342] = {cooldown = 120, duration = 40, talent = 22445, charges = 1, class = "MAGE", type = 1}, --Mirror Image - [66] = {cooldown = 300, duration = 20, talent = false, charges = 1, class = "MAGE", type = 2}, --Invisibility - [12472] = {cooldown = 180, duration = 20, talent = false, charges = 1, class = "MAGE", type = 1}, --Icy Veins - [205021] = {cooldown = 78, duration = 5, talent = 22309, charges = 1, class = "MAGE", type = 1}, --Ray of Frost (talent) - [45438] = {cooldown = 240, duration = 10, talent = false, charges = 1, class = "MAGE", type = 2}, --Ice Block - [235219] = {cooldown = 300, duration = false, talent = false, charges = 1, class = "MAGE", type = 5}, --Cold Snap - [113724] = {cooldown = 45, duration = 10, talent = 22471, charges = 1, class = "MAGE", type = 5}, --Ring of Frost (talent) + -- 62 - Arcane + -- 63 - Fire + -- 64 - Frost + + [12042] = {cooldown = 90, duration = 10, specs = {62}, talent =false, charges = 1, class = "MAGE", type = 1}, --Arcane Power + [12051] = {cooldown = 90, duration = 6, specs = {62}, talent =false, charges = 1, class = "MAGE", type = 1}, --Evocation + [110960] = {cooldown = 120, duration = 20, specs = {62}, talent =false, charges = 1, class = "MAGE", type = 2}, --Greater Invisibility + [235450] = {cooldown = 25, duration = 60, specs = {62}, talent =false, charges = 1, class = "MAGE", type = 5}, --Prismatic Barrier + [235313] = {cooldown = 25, duration = 60, specs = {63}, talent =false, charges = 1, class = "MAGE", type = 5}, --Blazing Barrier + [11426] = {cooldown = 25, duration = 60, specs = {64}, talent =false, charges = 1, class = "MAGE", type = 5}, --Ice Barrier + [190319] = {cooldown = 120, duration = 10, specs = {63}, talent =false, charges = 1, class = "MAGE", type = 1}, --Combustion + [55342] = {cooldown = 120, duration = 40, specs = {62,63,64}, talent =22445, charges = 1, class = "MAGE", type = 1}, --Mirror Image + [66] = {cooldown = 300, duration = 20, specs = {63,64}, talent =false, charges = 1, class = "MAGE", type = 2}, --Invisibility + [12472] = {cooldown = 180, duration = 20, specs = {64}, talent =false, charges = 1, class = "MAGE", type = 1}, --Icy Veins + [205021] = {cooldown = 78, duration = 5, specs = {64}, talent =22309, charges = 1, class = "MAGE", type = 1}, --Ray of Frost (talent) + [45438] = {cooldown = 240, duration = 10, specs = {62,63,64}, talent =false, charges = 1, class = "MAGE", type = 2}, --Ice Block + [235219] = {cooldown = 300, duration = false, specs = {64}, talent =false, charges = 1, class = "MAGE", type = 5}, --Cold Snap + [113724] = {cooldown = 45, duration = 10, specs = {62,63,64}, talent =22471, charges = 1, class = "MAGE", type = 5}, --Ring of Frost (talent) --priest - [10060] = {cooldown = 120, duration = 20, talent = false, charges = 1, class = "PRIEST", type = 1}, --Power Infusion - [34433] = {cooldown = 180, duration = 15, talent = false, charges = 1, class = "PRIEST", type = 1, ignoredIfTalent = 21719}, --Shadowfiend - [200174] = {cooldown = 60, duration = 15, talent = 21719, charges = 1, class = "PRIEST", type = 1}, --Mindbender (talent) - [123040] = {cooldown = 60, duration = 12, talent = 22094, charges = 1, class = "PRIEST", type = 1}, --Mindbender (talent) - [33206] = {cooldown = 180, duration = 8, talent = false, charges = 1, class = "PRIEST", type = 3}, --Pain Suppression - [62618] = {cooldown = 180, duration = 10, talent = false, charges = 1, class = "PRIEST", type = 4}, --Power Word: Barrier - [271466] = {cooldown = 180, duration = 10, talent = 21184, charges = 1, class = "PRIEST", type = 4}, --Luminous Barrier (talent) - [47536] = {cooldown = 90, duration = 10, talent = false, charges = 1, class = "PRIEST", type = 5}, --Rapture - [19236] = {cooldown = 90, duration = 10, talent = false, charges = 1, class = "PRIEST", type = 5}, --Desperate Prayer - [200183] = {cooldown = 120, duration = 20, talent = 21644, charges = 1, class = "PRIEST", type = 2}, --Apotheosis (talent) - [47788] = {cooldown = 180, duration = 10, talent = false, charges = 1, class = "PRIEST", type = 3}, --Guardian Spirit - [64843] = {cooldown = 180, duration = 8, talent = false, charges = 1, class = "PRIEST", type = 4}, --Divine Hymn - [64901] = {cooldown = 300, duration = 6, talent = false, charges = 1, class = "PRIEST", type = 4}, --Symbol of Hope - [265202] = {cooldown = 720, duration = false, talent = 23145, charges = 1, class = "PRIEST", type = 4}, --Holy Word: Salvation (talent) - [109964] = {cooldown = 60, duration = 12, talent = 21184, charges = 1, class = "PRIEST", type = 4}, --Spirit Shell (talent) - [8122] = {cooldown = 60, duration = 8, talent = false, charges = 1, class = "PRIEST", type = 5}, --Psychic Scream - [193223] = {cooldown = 240, duration = 60, talent = 21979, charges = 1, class = "PRIEST", type = 1}, --Surrender to Madness (talent) - [47585] = {cooldown = 120, duration = 6, talent = false, charges = 1, class = "PRIEST", type = 2}, --Dispersion - [15286] = {cooldown = 120, duration = 15, talent = false, charges = 1, class = "PRIEST", type = 4}, --Vampiric Embrace - [64044] = {cooldown = 45, duration = 4, talent = 21752, charges = 1, class = "PRIEST", type = 5}, --Psychic Horror - [205369] = {cooldown = 30, duration = 6, talent = 23375, charges = 1, class = "PRIEST", type = 5}, --Mind Bomb - [228260] = {cooldown = 90, duration = 15, talent = false, charges = 1, class = "PRIEST", type = 1}, --Void Erruption + -- 256 - Discipline + -- 257 - Holy + -- 258 - Shadow + + [10060] = {cooldown = 120, duration = 20, specs = {256,257,258}, talent =false, charges = 1, class = "PRIEST", type = 1}, --Power Infusion + [34433] = {cooldown = 180, duration = 15, specs = {256,258}, talent =false, charges = 1, class = "PRIEST", type = 1, ignoredIfTalent = 21719}, --Shadowfiend + [200174] = {cooldown = 60, duration = 15, specs = {258}, talent =21719, charges = 1, class = "PRIEST", type = 1}, --Mindbender (talent) + [123040] = {cooldown = 60, duration = 12, specs = {256}, talent =22094, charges = 1, class = "PRIEST", type = 1}, --Mindbender (talent) + [33206] = {cooldown = 180, duration = 8, specs = {256}, talent =false, charges = 1, class = "PRIEST", type = 3}, --Pain Suppression + [62618] = {cooldown = 180, duration = 10, specs = {256}, talent =false, charges = 1, class = "PRIEST", type = 4}, --Power Word: Barrier + [271466] = {cooldown = 180, duration = 10, specs = {256}, talent =21184, charges = 1, class = "PRIEST", type = 4}, --Luminous Barrier (talent) + [47536] = {cooldown = 90, duration = 10, specs = {256}, talent =false, charges = 1, class = "PRIEST", type = 5}, --Rapture + [19236] = {cooldown = 90, duration = 10, specs = {256,257,258}, talent =false, charges = 1, class = "PRIEST", type = 5}, --Desperate Prayer + [200183] = {cooldown = 120, duration = 20, specs = {257}, talent =21644, charges = 1, class = "PRIEST", type = 2}, --Apotheosis (talent) + [47788] = {cooldown = 180, duration = 10, specs = {257}, talent =false, charges = 1, class = "PRIEST", type = 3}, --Guardian Spirit + [64843] = {cooldown = 180, duration = 8, specs = {257}, talent =false, charges = 1, class = "PRIEST", type = 4}, --Divine Hymn + [64901] = {cooldown = 300, duration = 6, specs = {257}, talent =false, charges = 1, class = "PRIEST", type = 4}, --Symbol of Hope + [265202] = {cooldown = 720, duration = false, specs = {257}, talent =23145, charges = 1, class = "PRIEST", type = 4}, --Holy Word: Salvation (talent) + [109964] = {cooldown = 60, duration = 12, specs = {256}, talent =21184, charges = 1, class = "PRIEST", type = 4}, --Spirit Shell (talent) + [8122] = {cooldown = 60, duration = 8, specs = {256,257,258}, talent =false, charges = 1, class = "PRIEST", type = 5}, --Psychic Scream + [193223] = {cooldown = 240, duration = 60, specs = {258}, talent =21979, charges = 1, class = "PRIEST", type = 1}, --Surrender to Madness (talent) + [47585] = {cooldown = 120, duration = 6, specs = {258}, talent =false, charges = 1, class = "PRIEST", type = 2}, --Dispersion + [15286] = {cooldown = 120, duration = 15, specs = {258}, talent =false, charges = 1, class = "PRIEST", type = 4}, --Vampiric Embrace + [64044] = {cooldown = 45, duration = 4, specs = {258}, talent =21752, charges = 1, class = "PRIEST", type = 5}, --Psychic Horror + [205369] = {cooldown = 30, duration = 6, specs = {258}, talent =23375, charges = 1, class = "PRIEST", type = 5}, --Mind Bomb + [228260] = {cooldown = 90, duration = 15, specs = {258}, talent =false, charges = 1, class = "PRIEST", type = 1}, --Void Erruption + [73325] = {cooldown = 90, duration = false, specs = {256,257,258}, talent =false, charges = 1, class = "PRIEST", type = 5}, --Leap of Faith --rogue - [79140] = {cooldown = 120, duration = 20, talent = false, charges = 1, class = "ROGUE", type = 1}, --Vendetta - [1856] = {cooldown = 120, duration = 3, talent = false, charges = 1, class = "ROGUE", type = 2}, --Vanish - [5277] = {cooldown = 120, duration = 10, talent = false, charges = 1, class = "ROGUE", type = 2}, --Evasion - [31224] = {cooldown = 120, duration = 5, talent = false, charges = 1, class = "ROGUE", type = 2}, --Cloak of Shadows - [2094] = {cooldown = 120, duration = 60, talent = false, charges = 1, class = "ROGUE", type = 5}, --Blind - [114018] = {cooldown = 360, duration = 15, talent = false, charges = 1, class = "ROGUE", type = 5}, --Shroud of Concealment - [185311] = {cooldown = 30, duration = 15, talent = false, charges = 1, class = "ROGUE", type = 5}, --Crimson Vial - [13750] = {cooldown = 180, duration = 20, talent = false, charges = 1, class = "ROGUE", type = 1}, --Adrenaline Rush - [51690] = {cooldown = 120, duration = 2, talent = 23175, charges = 1, class = "ROGUE", type = 1}, --Killing Spree (talent) - [199754] = {cooldown = 120, duration = 10, talent = false, charges = 1, class = "ROGUE", type = 2}, --Riposte - [343142] = {cooldown = 90, duration = 10, talent = 19250, charges = 1, class = "ROGUE", type = 5}, --Dreadblades - [121471] = {cooldown = 180, duration = 20, talent = false, charges = 1, class = "ROGUE", type = 1}, --Shadow Blades + -- 259 - Assasination + -- 260 - Outlaw + -- 261 - Subtlety + + [79140] = {cooldown = 120, duration = 20, specs = {259}, talent =false, charges = 1, class = "ROGUE", type = 1}, --Vendetta + [1856] = {cooldown = 120, duration = 3, specs = {259,260,261}, talent =false, charges = 1, class = "ROGUE", type = 2}, --Vanish + [5277] = {cooldown = 120, duration = 10, specs = {259,260,261}, talent =false, charges = 1, class = "ROGUE", type = 2}, --Evasion + [31224] = {cooldown = 120, duration = 5, specs = {259,260,261}, talent =false, charges = 1, class = "ROGUE", type = 2}, --Cloak of Shadows + [2094] = {cooldown = 120, duration = 60, specs = {259,260,261}, talent =false, charges = 1, class = "ROGUE", type = 5}, --Blind + [114018] = {cooldown = 360, duration = 15, specs = {259,260,261}, talent =false, charges = 1, class = "ROGUE", type = 5}, --Shroud of Concealment + [185311] = {cooldown = 30, duration = 15, specs = {259,260,261}, talent =false, charges = 1, class = "ROGUE", type = 5}, --Crimson Vial + [13750] = {cooldown = 180, duration = 20, specs = {260}, talent =false, charges = 1, class = "ROGUE", type = 1}, --Adrenaline Rush + [51690] = {cooldown = 120, duration = 2, specs = {260}, talent =23175, charges = 1, class = "ROGUE", type = 1}, --Killing Spree (talent) + [199754] = {cooldown = 120, duration = 10, specs = {260}, talent =false, charges = 1, class = "ROGUE", type = 2}, --Riposte + [343142] = {cooldown = 90, duration = 10, specs = {260}, talent =19250, charges = 1, class = "ROGUE", type = 5}, --Dreadblades + [121471] = {cooldown = 180, duration = 20, specs = {261}, talent =false, charges = 1, class = "ROGUE", type = 1}, --Shadow Blades } +LIB_OPEN_RAID_COOLDOWNS_BY_SPEC = {}; +for spellID,spellData in pairs(LIB_OPEN_RAID_COOLDOWNS_INFO) do + for _,specID in ipairs(spellData.specs) do + LIB_OPEN_RAID_COOLDOWNS_BY_SPEC[specID] = LIB_OPEN_RAID_COOLDOWNS_BY_SPEC[specID] or {}; + LIB_OPEN_RAID_COOLDOWNS_BY_SPEC[specID][spellID] = spellData.type; + end +end + +-- DF Evoker +LIB_OPEN_RAID_COOLDOWNS_BY_SPEC[1467] = {}; +LIB_OPEN_RAID_COOLDOWNS_BY_SPEC[1468] = {}; + --[=[ Spell customizations: Many times there's spells with the same name which does different effects diff --git a/boot.lua b/boot.lua index af502749..3bee7f81 100644 --- a/boot.lua +++ b/boot.lua @@ -18,7 +18,7 @@ _detalhes.BFACORE = 131 --core version on BFA launch _detalhes.SHADOWLANDSCORE = 143 --core version on Shadowlands launch -- - _detalhes.dragonflight_beta_version = 27 + _detalhes.dragonflight_beta_version = 28 Details = _detalhes diff --git a/classes/class_instance.lua b/classes/class_instance.lua index 5e9f7dd4..a24373b1 100644 --- a/classes/class_instance.lua +++ b/classes/class_instance.lua @@ -1608,14 +1608,18 @@ function _detalhes:RestauraJanela(index, temp, load_only) else self.mostrando = "normal" end - + + --fix for the weird white window default skin + --this is a auto detect for configuration corruption, happens usually when the user install Details! over old config settings + --check if the skin used in the window is the default skin, check if statusbar is in use and if the color of the window is full white if (self.skin == _detalhes.default_skin_to_use and self.show_statusbar) then if(self.color[1] == 1 and self.color[2] == 1 and self.color[3] == 1 and self.color[4] == 1) then - print ("|cFFFF2222Details!: Corrupted skin detected! Resetting window skin to default.") + Details:Msg("error 0xFF85DD") self.skin = "no skin" self:ChangeSkin(_detalhes.default_skin_to_use) end end + --> internal stuff self.oldwith = self.baseframe:GetWidth() diff --git a/classes/include_instance.lua b/classes/include_instance.lua index 21fed5d7..1b1b1511 100644 --- a/classes/include_instance.lua +++ b/classes/include_instance.lua @@ -175,6 +175,9 @@ _detalhes.instance_defaults = { enable_custom_text = false, custom_text = "{name}", show_timer = true, + show_timer_always = false, --show the timer even when not in an encounter + show_timer_bg = true, --show the timer within battleground, the timer is the elapsed battleground time + show_timer_arena = true, ---show the timer within arena, the timer is the elapsed time of the arena match }, --auto hide window borders statusbar main menu menu_alpha = {enabled = false, iconstoo = true, onenter = 1, onleave = 1, ignorebars = false}, diff --git a/core/control.lua b/core/control.lua index 0edf446b..1051b031 100644 --- a/core/control.lua +++ b/core/control.lua @@ -1008,31 +1008,42 @@ function Details:CreateArenaSegment() Details:GetPlayersInArena() - + Details.arena_begun = true Details.start_arena = nil - + if (Details.in_combat) then Details:SairDoCombate() end - + --> registra os gr�ficos Details:TimeDataRegister ("Your Team Damage", string_arena_myteam_damage, nil, "Details!", "v1.0", [[Interface\ICONS\Ability_DualWield]], true, true) Details:TimeDataRegister ("Enemy Team Damage", string_arena_enemyteam_damage, nil, "Details!", "v1.0", [[Interface\ICONS\Ability_DualWield]], true, true) - + Details:TimeDataRegister ("Your Team Healing", string_arena_myteam_heal, nil, "Details!", "v1.0", [[Interface\ICONS\Ability_DualWield]], true, true) Details:TimeDataRegister ("Enemy Team Healing", string_arena_enemyteam_heal, nil, "Details!", "v1.0", [[Interface\ICONS\Ability_DualWield]], true, true) - + + Details.lastArenaStartTime = GetTime() + --> inicia um novo combate Details:EntrarEmCombate() - + --> sinaliza que esse combate � arena Details.tabela_vigente.arena = true Details.tabela_vigente.is_arena = {name = Details.zone_name, zone = Details.zone_name, mapid = Details.zone_id} Details:SendEvent("COMBAT_ARENA_START") end - + + --return the GetTime() of the current or latest arena match + function Details:GetArenaStartTime() + return Details.lastArenaStartTime + end + + function Details:GetBattlegroundStartTime() + return Details.lastBattlegroundStartTime + end + function Details:StartArenaSegment(...) if (Details.debug) then Details:Msg("(debug) starting a new arena segment.") @@ -1045,6 +1056,8 @@ end Details.start_arena = Details:ScheduleTimer("CreateArenaSegment", timeSeconds) Details:GetPlayersInArena() + + --CHAT_MSG_BG_SYSTEM_NEUTRAL - "The Arena battle has begun!"" end function Details:EnteredInArena() diff --git a/core/parser.lua b/core/parser.lua index 7878fe37..8a76d8fe 100755 --- a/core/parser.lua +++ b/core/parser.lua @@ -4950,6 +4950,8 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1 _detalhes.time_type = 1 end end + + Details.lastBattlegroundStartTime = GetTime() elseif (zoneType == "arena") then @@ -5618,7 +5620,7 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1 _detalhes:SchedulePetUpdate (6) end - function _detalhes.parser_functions:START_TIMER(...) + function _detalhes.parser_functions:START_TIMER(...) --~timer if (_detalhes.debug) then _detalhes:Msg("(debug) found a timer.") @@ -5657,7 +5659,13 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1 _detalhes.tabela_vigente.discard_segment = true Details:EndCombat() end + + Details.lastBattlegroundStartTime = GetTime() Details:StartCombat() + + if (Details.debug) then + Details:Msg("(debug) a battleground has started.") + end end -- ~load diff --git a/frames/window_main.lua b/frames/window_main.lua index 32556610..ee863fbd 100644 --- a/frames/window_main.lua +++ b/frames/window_main.lua @@ -7971,35 +7971,65 @@ local formatTime = function (t) return "[" .. m .. ":" .. s .. "]" end -function _detalhes:TitleTextTickTimer (instance) --called on each 1 second tick +local updateTimerInTheTitleBarText = function(instance, timer) + local originalText = instance.menu_attribute_string.originalText + if (originalText) then + local formattedTime = formatTime(timer) + instance:SetTitleBarText(formattedTime .. " " .. originalText) + + else + local titleBarTitleText = instance:GetTitleBarText() + if (not titleBarTitleText:find("%[.*%]")) then + instance:SetTitleBarText("[00:01] " .. titleBarTitleText) + else + local formattedTime = formatTime(timer) + titleBarTitleText = titleBarTitleText:gsub("%[.*%]", formattedTime) + instance:SetTitleBarText(titleBarTitleText) + end + end +end + +--self is Details +--this is a ticker callback, it is called on each 1 second +function _detalhes:TitleTextTickTimer(instance) + --hold the time value to show in the title bar + local timer + if (instance.attribute_text.enabled) then - --tick only during encounter - if (not Details.titletext_showtimer_always) then + local zoneType = Details:GetZoneType() + + if (zoneType == "arena") then + if (instance.attribute_text.show_timer_arena) then + timer = GetTime() - Details:GetArenaStartTime() + end + + elseif (zoneType == "pvp") then + if (instance.attribute_text.show_timer_bg) then + timer = GetTime() - Details:GetBattlegroundStartTime() + end + + elseif (zoneType == "raid" or zoneType == "party") then + --always attempt to show the time during a boss encounter if (IsEncounterInProgress) then - if (not IsEncounterInProgress()) then - return + if (IsEncounterInProgress()) then + timer = Details:GetCurrentCombat():GetCombatTime() end else - if (not Details.tabela_vigente.is_boss) then - return + if (Details.tabela_vigente.is_boss) then + timer = Details:GetCurrentCombat():GetCombatTime() end end end - local currentText = instance.menu_attribute_string.originalText - if (currentText) then - local timer = formatTime(_detalhes.tabela_vigente:GetCombatTime()) - instance:SetTitleBarText(timer .. " " .. currentText) - else - local current_text = instance:GetTitleBarText() - if (not current_text:find("%[.*%]")) then - instance:SetTitleBarText("[00:01] " .. current_text) - else - local timer = formatTime(_detalhes.tabela_vigente:GetCombatTime()) - current_text = current_text:gsub("%[.*%]", timer) - instance:SetTitleBarText(current_text) + if (not timer) then + if (instance.attribute_text.show_timer_always) then + timer = Details:GetCurrentCombat():GetCombatTime() end end + + if (timer) then + updateTimerInTheTitleBarText(instance, timer) + end end end @@ -8038,8 +8068,9 @@ function Details:GetTitleBarText() end -- ~titletext +--@timer_bg: battleground elapsed time +--@timer_arena: arena match elapsed time function _detalhes:AttributeMenu (enabled, pos_x, pos_y, font, size, color, side, shadow, timer_encounter, timer_bg, timer_arena) - if (type (enabled) ~= "boolean") then enabled = self.attribute_text.enabled end @@ -8077,7 +8108,14 @@ function _detalhes:AttributeMenu (enabled, pos_x, pos_y, font, size, color, side if (type(timer_encounter) ~= "boolean") then timer_encounter = self.attribute_text.show_timer end - + + if (type(timer_bg) ~= "boolean") then + timer_bg = self.attribute_text.show_timer_bg + end + if (type(timer_arena) ~= "boolean") then + timer_arena = self.attribute_text.show_timer_arena + end + self.attribute_text.enabled = enabled self.attribute_text.anchor [1] = pos_x self.attribute_text.anchor [2] = pos_y @@ -8087,6 +8125,8 @@ function _detalhes:AttributeMenu (enabled, pos_x, pos_y, font, size, color, side self.attribute_text.side = side self.attribute_text.shadow = shadow self.attribute_text.show_timer = timer_encounter + self.attribute_text.show_timer_bg = timer_bg + self.attribute_text.show_timer_arena = timer_arena --> enabled if (not enabled and self.menu_attribute_string) then diff --git a/functions/profiles.lua b/functions/profiles.lua index d303c751..0d20e557 100644 --- a/functions/profiles.lua +++ b/functions/profiles.lua @@ -1299,7 +1299,6 @@ local default_global_data = { }, current_exp_raid_encounters = {}, installed_skins_cache = {}, - titletext_showtimer_always = false, --> keystone cache keystone_cache = {}, diff --git a/functions/spells.lua b/functions/spells.lua index 80e11044..438a897a 100644 --- a/functions/spells.lua +++ b/functions/spells.lua @@ -199,6 +199,62 @@ do else _detalhes.SpecSpellList = { --~spec + --spyro healer + [359816] = 1468, --dream flight + [370960] = 1468, --emerald communion + [370537] = 1468, --stasis + [373270] = 1468, --lifebind + [367226] = 1468, --spiritbloom + [371270] = 1468, --time keeper + [368412] = 1468, --time of need + [371426] = 1468, --life givers flame + [377509] = 1468, --dream projection + [373834] = 1468, --call of ysera + [371832] = 1468, --cycle of life + [373861] = 1468, --temporal anomaly + [363510] = 1468, --mastery life binder + [356810] = 1468, --preservation evoker + [376210] = 1468, --borrowed time + [376207] = 1468, --delay harm + [355936] = 1468, --dream breath + [377082] = 1468, --dreamwalker + [364343] = 1468, --echo + [376138] = 1468, --empath + [372233] = 1468, --energy loop + + --spyro dps + [370837] = 1467, --engulfing blaze + [365937] = 1467, --ruby embers + [370452] = 1467, --shattering star + [362980] = 1467, --mastery giantkiller + [375797] = 1467, --animosity + [356809] = 1467, --devastation evoker + [375618] = 1467, --arcane intensity + [386342] = 1467, --arcane vigor + [375721] = 1467, --azure essence burst + [375801] = 1467, --burnout + [375796] = 1467, --cascading power + [386283] = 1467, --catalyze + [375777] = 1467, --causality + [370455] = 1467, --charged blast + [369375] = 1467, --continuum + [370962] = 1467, --dense energy + [375087] = 1467, --dragonrage + [375757] = 1467, --eternitys span + [370819] = 1467, --everburning flame + [369846] = 1467, --feed the flames + [386336] = 1467, --focusing iris + [370845] = 1467, --tyranny + [360995] = 1467, --rescue + [370843] = 1467, --focusing iris + [370839] = 1467, --power swell + [370783] = 1467, --snapfire + [359073] = 1467, --eternity surge + [368847] = 1467, --firestorm + [369089] = 1467, --volatility + [372048] = 1467, --oppressing roar + [384660] = 1467, --crippling force + -- havoc demon hunter --577 [188499] = 577, -- Blade Dance [320402] = 577, -- Blade Dance diff --git a/startup.lua b/startup.lua index 596a8b4d..bb063325 100644 --- a/startup.lua +++ b/startup.lua @@ -17,6 +17,10 @@ function Details:StartMeUp() --I'll never stop! Details:Msg("Details! author 'Terciob' does not have access to Dragonflight Beta, please be gentle while reporting bugs and questioning why some bugs haven't been fixed already, thank you!") end + --set default time for arena and bg to be the Details! load time in case the client loads mid event + Details.lastArenaStartTime = GetTime() + Details.lastBattlegroundStartTime = GetTime() + ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --> row single click, this determines what happen when the user click on a bar