Open Raid Library update

This commit is contained in:
Tercio Jose
2022-10-18 10:31:05 -03:00
parent 399756d6d1
commit fd801fa69f
47 changed files with 2559 additions and 915 deletions
+1 -1
View File
@@ -813,7 +813,7 @@ function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, t
icon:SetSize(lineHeight - 2, lineHeight - 2)
local name = line:CreateFontString("$parentName", "overlay", "GameFontNormal")
DF:SetFontSize (name, 10)
DF:SetFontSize(name, 10)
local remove_button = CreateFrame("button", "$parentRemoveButton", line, "UIPanelCloseButton")
remove_button:SetSize(16, 16)
+1 -1
View File
@@ -205,7 +205,7 @@ DF:Mixin(ButtonMetaFunctions, DF.ScriptHookMixin)
--text size
local smember_textsize = function(object, value)
return DF:SetFontSize (object.button.text, value)
return DF:SetFontSize(object.button.text, value)
end
--texture
+259
View File
@@ -0,0 +1,259 @@
local DF = _G["DetailsFramework"]
if (not DF or not DetailsFrameworkCanLoad) then
return
end
local _
local ChartFrameMixin = {
ChartFrameConstructor = function(self)
self.nextLine = 1
self.minValue = 0
self.maxValue = 1
self.lineThickness = 1
self.data = {}
self.lines = {}
--OnSizeChanged
self:SetScript("OnSizeChanged", self.OnSizeChanged)
end,
--internally handle next line
GetLine = function(self)
local line = self.lines[self.nextLine]
if (not line) then
line = self:CreateLine(nil, "overlay")
self.lines[self.nextLine] = line
end
self.nextLine = self.nextLine + 1
line:Show()
return line
end,
GetLines = function(self)
return self.lines
end,
GetAmountLines = function(self)
return self.nextLine - 1
end,
HideLines = function(self)
local allLines = self:GetLines()
for i = 1, #allLines do
local line = allLines[i]
line:Hide()
end
end,
Reset = function(self)
self:HideLines()
self.nextLine = 1
end,
SetLineThickness = function(self, value)
assert(type(value) == "number", "number expected on :SetLineThickness(number)")
self.lineThickness = value
end,
--calculate the width of each drawn line
GetLineWidth = function(self)
--self:SetLineWidth(nil) to erase the fixed value
if (self.fixedLineWidth) then
return self.fixedLineWidth
else
local amountData = self:GetDataSize()
local frameWidth = self:GetWidth()
return frameWidth / amountData
end
end,
SetLineWidth = function(self, width)
assert(type(width) == "number", "number expected on :SetLineWidth(number)")
self.fixedLineWidth = width
end,
CalcYAxisPointForValue = function(self, value)
return value / self.maxValue * self.height
end,
UpdateFrameSizeCache = function(self)
self.width = self:GetWidth()
self.height = self:GetHeight()
end,
OnSizeChanged = function(self)
self:UpdateFrameSizeCache()
end,
Plot = function(self)
--debug
--self:SetData({38, 26, 12, 63, 100, 96, 42, 94, 25, 75, 61, 54, 71, 40, 34, 100, 66, 90, 39, 13, 99, 18, 72, 18, 83, 45, 56, 24, 33, 85, 95, 71, 15, 66, 19, 58, 52, 9, 83, 99, 100, 4, 3, 56, 6, 80, 94, 7, 40, 55, 98, 92, 20, 9, 35, 89, 72, 7, 13, 81, 29, 78, 55, 70, 12, 33, 39, 3, 84, 31, 10, 53, 51, 69, 66, 58, 71, 60, 31, 71, 27, 76, 21, 75, 15, 89, 2, 81, 72, 78, 74, 80, 97, 10, 59, 0, 31, 5, 1, 82, 71, 89, 78, 94, 74, 20, 65, 72, 56, 40, 92, 91, 40, 79, 4, 56, 18, 88, 88, 20, 20, 10, 47, 26, 80, 26, 75, 21, 57, 10, 67, 66, 84, 83, 14, 47, 83, 9, 7, 73, 63, 32, 64, 20, 40, 3, 46, 54, 17, 37, 82, 66, 65, 22, 12, 1, 100, 41, 1, 72, 38, 41, 71, 69, 88, 34, 10, 50, 9, 25, 19, 27, 3, 13, 40, 75, 3, 11, 93, 58, 81, 80, 93, 25, 74, 68, 91, 87, 79, 48, 66, 53, 64, 18, 51, 19, 32, 4, 21, 43})
local currentXPoint = 0
local currentYPoint = 0
self:UpdateFrameSizeCache()
--max amount of data is the max amount of point the chart will have
local maxLines = self:GetDataSize()
--calculate where the first point height will be
local firstValue = self:GetDataFirstValue()
assert(firstValue, "Can't Plot(), chart has no data, use Chart:SetData(table)")
currentYPoint = self:CalcYAxisPointForValue(firstValue)
--calculate the width space which line should have
local eachLineWidth = self:GetLineWidth()
self:ResetDataIndex()
for i = 1, maxLines do
local line = self:GetLine()
line:SetColorTexture(1, 1, 1, 1)
line:SetThickness(1)
--the start point starts where the latest point finished
line:SetStartPoint("bottomleft", currentXPoint, currentYPoint)
--move x
currentXPoint = currentXPoint + eachLineWidth
--end point
local value = self:GetDataNextValue()
currentYPoint = self:CalcYAxisPointForValue(value)
line:SetEndPoint("bottomleft", currentXPoint, currentYPoint)
end
end,
}
local createChartFrame = function(parent, name)
local f = CreateFrame("frame", name, parent, "BackdropTemplate")
DF:Mixin(f, DF.DataMixin)
DF:Mixin(f, DF.ValueMixin)
DF:Mixin(f, ChartFrameMixin)
f:DataConstructor()
f:ValueConstructor()
f:ChartFrameConstructor()
--when a new data is set, update the min and max values
local onSetDataCallback = function()
local minValue, maxValue = f:GetDataMinMaxValues()
f:SetMinMaxValues(minValue, maxValue)
--clear the lines
f:HideLines()
end
f:AddDataChangeCallback(onSetDataCallback)
return f
end
function DF:CreateGraphicLineFrame(parent, name)
local newGraphicFrame = createChartFrame(parent, name)
return newGraphicFrame
end
local MultiChartFrameMixin = {
MultiChartFrameConstructor = function(self)
self.nextChartselframe = 1
self.biggestDataValue = 0
self.chartFrames = {}
end,
AddData = function(self, data)
assert(type(data) == "table", "MultiChartFrame:AddData() usage: AddData(table)")
local chartFrame = self:GetChart()
chartFrame:SetData(data)
self:SetMaxValueIfBigger(chartFrame:GetMaxValue())
self:SetMinValueIfLower(chartFrame:GetMinValue())
local dataAmount = chartFrame:GetDataSize()
self:SetMaxDataSize(dataAmount)
end,
--internally handle next line
GetChart = function(self)
local chartFrame = self.chartFrames[self.nextChartFrame]
if (not chartFrame) then
chartFrame = createChartFrame(self, "$parentChartFrame" .. self.nextChartFrame)
chartFrame:SetAllPoints()
chartFrame:UpdateFrameSizeCache()
self.chartFrames[self.nextChartFrame] = chartFrame
end
self.nextChartFrame = self.nextChartFrame + 1
chartFrame:Show()
return chartFrame
end,
GetCharts = function(self)
return self.chartFrames
end,
GetAmountCharts = function(self)
return self.nextChartFrame - 1
end,
HideCharts = function(self)
local charts = self:GetCharts()
for i = 1, #charts do
local chartFrame = charts[i]
chartFrame:Hide()
end
end,
Reset = function(self)
self:HideCharts()
self.nextChartFrame = 1
end,
SetChartsMinMaxValues = function(self, minValue, maxValue)
local allCharts = self:GetCharts()
for i = 1, self:GetAmountCharts() do
local chartFrame = allCharts[i]
chartFrame:SetMinMaxValues(minValue, maxValue)
end
end,
SetMaxDataSize = function(self, dataSize)
self.biggestDataValue = max(self.biggestDataValue, dataSize)
end,
GetMaxDataSize = function(self)
return self.biggestDataValue
end,
Plot = function(self)
local minValue, maxValue = self:GetMinMaxValues()
self:SetChartsMinMaxValues(minValue, maxValue)
local plotAreaWidth = self:GetWidth()
local maxDataSize = self:GetMaxDataSize()
local eachLineWidth = plotAreaWidth / maxDataSize
local allCharts = self:GetCharts()
for i = 1, self:GetAmountCharts() do
local chartFrame = allCharts[i]
chartFrame:SetLineWidth(eachLineWidth)
chartFrame:Plot()
end
end,
}
function DF:CreateGraphicMultiLineFrame(parent, name)
name = name or ("DetailsMultiChartFrameID" .. math.random(1, 10000000))
local f = CreateFrame("frame", name, parent, "BackdropTemplate")
DF:Mixin(f, DF.ValueMixin)
DF:Mixin(f, MultiChartFrameMixin)
f:ValueConstructor()
f:MultiChartFrameConstructor()
return f
end
+26 -1
View File
@@ -15,7 +15,7 @@ local max = math.max
--api locals
local PixelUtil = PixelUtil or DFPixelUtil
local version = 5
local version = 6
local CONST_MENU_TYPE_MAINMENU = "main"
local CONST_MENU_TYPE_SUBMENU = "sub"
@@ -3207,6 +3207,31 @@ function DF:CreateCoolTip()
gameCooltip:Hide()
end)
end
local cyrillic = "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯЁЂЃЄЅІЇЈЉЊЋЌЎЏҐабвгдежзийклмнопрстуфхцчшщъыьэюяёђѓєѕіїјљњћќўџґАаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя"
local latin = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
local chinese = "ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚ᄀᄁᆪᄂᆬᆭᄃᄄᄅᆰᆱᆲᆳᆴᆵᄚᄆᄇᄈᄡᄉᄊᄋᄌᄍᄎᄏᄐᄑ하ᅢᅣᅤᅥᅦᅧᅨᅩᅪᅫᅬᅭᅮᅯᅰᅱᅲᅳᅴᅵ"
local alphabetTable = {}
for letter in latin:gmatch(".") do
alphabetTable[letter] = "enUS"
end
for letter in cyrillic:gmatch(".") do
alphabetTable[letter] = "ruRU"
end
for letter in chinese:gmatch(".") do
alphabetTable[letter] = "zhCN"
end
function gameCooltip:DetectLanguageId(text)
for letter in text:gmatch(".") do
if (alphabetTable[letter]) then
return alphabetTable[letter]
end
end
end
return gameCooltip
end
+2 -2
View File
@@ -1,6 +1,6 @@
local dversion = 381
local dversion = 382
local major, minor = "DetailsFramework-1.0", dversion
local DF, oldminor = LibStub:NewLibrary(major, minor)
@@ -3384,7 +3384,7 @@ end
--this is most copied from the wow client code, few changes applied to customize it
function DF:CreateGlowOverlay (parent, antsColor, glowColor)
local glowFrame = CreateFrame("frame", parent:GetName() and "$parentGlow2" or "OverlayActionGlow" .. math.random (1, 10000000), parent, "ActionBarButtonSpellActivationAlert")
local glowFrame = CreateFrame("frame", parent:GetName() and "$parentGlow2" or "OverlayActionGlow" .. math.random(1, 10000000), parent, "ActionBarButtonSpellActivationAlert")
glowFrame:HookScript ("OnShow", glow_overlay_onshow)
glowFrame:HookScript ("OnHide", glow_overlay_onhide)
+1
View File
@@ -18,6 +18,7 @@
<Script file="savedvars.lua"/>
<Script file="languages.lua"/>
<Script file="timebar.lua"/>
<Script file="charts.lua"/>
<Include file="tutorial_alert.xml"/>
<Include file="split_bar.xml"/>
+139
View File
@@ -685,4 +685,143 @@ detailsFramework.SortFunctions = {
table.sort(thisTable, SortByMemberReverse)
end
end
}
detailsFramework.DataMixin = {
DataConstructor = function(self)
self._dataInfo = {
data = {},
dataCurrentIndex = 1,
callbacks = {},
}
end,
AddDataChangeCallback = function(self, func, ...)
assert(type(func) == "function", "invalid function for AddDataChangeCallback.")
local allCallbacks = self._dataInfo.callbacks
allCallbacks[func] = {...}
end,
RemoveDataChangeCallback = function(self, func)
assert(type(func) == "function", "invalid function for RemoveDataChangeCallback.")
local allCallbacks = self._dataInfo.callbacks
allCallbacks[func] = nil
end,
SetData = function(self, data)
assert(type(data) == "table", "invalid table for SetData.")
self._dataInfo.data = data
self:ResetDataIndex()
local allCallbacks = self._dataInfo.callbacks
for func, payload in pairs(allCallbacks) do
xpcall(func, geterrorhandler(), data, unpack(payload))
end
end,
GetData = function(self)
return self._dataInfo.data
end,
GetDataNextValue = function(self)
local currentValue = self._dataInfo.dataCurrentIndex
local value = self:GetData()[currentValue]
self._dataInfo.dataCurrentIndex = self._dataInfo.dataCurrentIndex + 1
return value
end,
ResetDataIndex = function(self)
self._dataInfo.dataCurrentIndex = 1
end,
GetDataSize = function(self)
return #self:GetData()
end,
GetDataFirstValue = function(self)
return self:GetData()[1]
end,
GetDataLastValue = function(self)
local data = self:GetData()
return data[#data]
end,
--if the value stored is number, return the min and max values
GetDataMinMaxValues = function(self)
local minDataValue = 0
local maxDataValue = 0
local data = self:GetData()
for i = 1, #data do
local thisData = data[i]
if (thisData > maxDataValue) then
maxDataValue = thisData
elseif (thisData < minDataValue) then
minDataValue = thisData
end
end
return minDataValue, maxDataValue
end,
--when data uses sub tables, get the min max values from a specific index or key
GetDataMinMaxValueFromSubTable = function(self, key)
local minDataValue = 0
local maxDataValue = 0
local data = self:GetData()
for i = 1, #data do
local thisData = data[i]
if (thisData[key] > maxDataValue) then
maxDataValue = thisData[key]
elseif (thisData[key] < minDataValue) then
minDataValue = thisData[key]
end
end
return minDataValue, maxDataValue
end,
}
detailsFramework.ValueMixin = {
ValueConstructor = function(self)
self.minValue = 0
self.maxValue = 1
end,
SetMinMaxValues = function(self, minValue, maxValue)
self.minValue = minValue
self.maxValue = maxValue
end,
GetMinMaxValues = function(self)
return self.minValue, self.maxValue
end,
GetMinValue = function(self)
return self.minValue
end,
GetMaxValue = function(self)
return self.maxValue
end,
SetMinValue = function(self, minValue)
self.minValue = minValue
end,
SetMinValueIfLower = function(self, ...)
self.minValue = min(self.minValue, ...)
end,
SetMaxValue = function(self, maxValue)
self.maxValue = maxValue
end,
SetMaxValueIfBigger = function(self, ...)
self.maxValue = max(self.maxValue, ...)
end,
}
+5 -5
View File
@@ -302,8 +302,8 @@ DF:Mixin(BarMetaFunctions, DF.ScriptHookMixin)
end
--font size
local smember_textsize = function(_object, _value)
DF:SetFontSize (_object.textleft, _value)
return DF:SetFontSize (_object.textright, _value)
DF:SetFontSize(_object.textleft, _value)
return DF:SetFontSize(_object.textright, _value)
end
--font color
local smember_textcolor = function(_object, _value)
@@ -613,7 +613,7 @@ DF:Mixin(BarMetaFunctions, DF.ScriptHookMixin)
--right text
self.remaining = self.remaining - elapsed
if (self.MyObject.RightTextIsTimer) then
self.righttext:SetText(DF:IntegerToTimer (self.remaining))
self.righttext:SetText(DF:IntegerToTimer(self.remaining))
else
self.righttext:SetText(_math_floor(self.remaining))
end
@@ -739,11 +739,11 @@ local build_statusbar = function(self)
self.lefttext = self:CreateFontString("$parent_TextLeft", "OVERLAY", "GameFontHighlight")
self.lefttext:SetJustifyH("LEFT")
self.lefttext:SetPoint("LEFT", self.icontexture, "RIGHT", 3, 0)
DF:SetFontSize (self.lefttext, 10)
DF:SetFontSize(self.lefttext, 10)
self.righttext = self:CreateFontString("$parent_TextRight", "OVERLAY", "GameFontHighlight")
self.righttext:SetJustifyH("LEFT")
DF:SetFontSize (self.righttext, 10)
DF:SetFontSize(self.righttext, 10)
self.righttext:SetPoint("RIGHT", self, "RIGHT", -3, 0)
DetailsFrameworkNormalBar_OnCreate (self)
+154 -167
View File
@@ -783,7 +783,7 @@ local align_rows = function(self)
text:SetPoint("left", line, "left", self._anchors [#self._anchors], 0)
text:SetWidth(row.width)
detailsFramework:SetFontSize (text, row.textsize or 10)
detailsFramework:SetFontSize(text, row.textsize or 10)
text:SetJustifyH(row.textalign or "left")
end
elseif (rowType == "entry") then
@@ -953,7 +953,7 @@ local update_rows = function(self, updated_rows)
--
widget.text:SetText(t.name)
detailsFramework:SetFontSize (widget.text, raw.textsize or 10)
detailsFramework:SetFontSize(widget.text, raw.textsize or 10)
widget.text:SetJustifyH(raw.textalign or "left")
end
end
@@ -2874,82 +2874,80 @@ local chart_panel_onresize = function(self)
self.Graphic:SetPoint("topleft", self, "topleft", 108, -35)
end
local chart_panel_add_data = function(self, graphicData, color, name, elapsed_time, lineTexture, smoothLevel, firstIndex)
local f = self
self = self.Graphic
local _data = {}
local max_value = graphicData.max_value
local amount = #graphicData
local scaleW = 1/self:GetWidth()
local chart_panel_add_data = function(self, graphicData, color, name, elapsedTime, lineTexture, smoothLevel, firstIndex)
local chartPanel = self --chartPanel from the framework CreateChartPanel
local LibGraphChartFrame = self.Graphic
local builtData = {}
local maxValue = graphicData.max_value
local scaleWidth = 1 / LibGraphChartFrame:GetWidth()
local content = graphicData
--smooth the start and end of the chart
tinsert(content, 1, 0)
tinsert(content, 1, 0)
tinsert(content, #content+1, 0)
tinsert(content, #content+1, 0)
local _i = 3
local graphMaxDps = math.max(self.max_value, max_value)
local index = 3
local graphMaxDps = math.max(LibGraphChartFrame.max_value, maxValue)
--do smoothness progress
if (not smoothLevel) then
while (_i <= #content-2) do
local v = (content[_i-2]+content[_i-1]+content[_i]+content[_i+1]+content[_i+2])/5 --normalize
_data [#_data+1] = {scaleW*(_i-2), v/graphMaxDps} --x and y coords
_i = _i + 1
while (index <= #content-2) do
local value = (content[index-2] + content[index-1] + content[index] + content[index+1] + content[index+2]) / 5 --normalize
builtData[#builtData+1] = {scaleWidth * (index-2), value / graphMaxDps} -- x and y coords
index = index + 1
end
elseif (smoothLevel == "SHORT") then
while (_i <= #content-2) do
local value = (content[_i] + content[_i+1]) / 2
_data [#_data+1] = {scaleW*(_i-2), value}
_data [#_data+1] = {scaleW*(_i-2), value}
_i = _i + 2
while (index <= #content-2) do
local value = (content[index] + content[index+1]) / 2
builtData [#builtData+1] = {scaleWidth*(index-2), value}
builtData [#builtData+1] = {scaleWidth*(index-2), value}
index = index + 2
end
elseif (smoothLevel == "SMA") then
reset_SMA()
while (_i <= #content-2) do
local value, is_new_max_value = do_SMA (content[_i], max_value)
while (index <= #content-2) do
local value, is_new_max_value = do_SMA(content[index], maxValue)
if (is_new_max_value) then
max_value = is_new_max_value
maxValue = is_new_max_value
end
_data [#_data+1] = {scaleW*(_i-2), value} --x and y coords
_i = _i + 1
builtData [#builtData+1] = {scaleWidth * (index-2), value} -- x and y coords
index = index + 1
end
elseif (smoothLevel == -1) then
while (_i <= #content-2) do
local current = content[_i]
while (index <= #content-2) do
local current = content[index]
local minus_2 = content[_i-2] * 0.6
local minus_1 = content[_i-1] * 0.8
local plus_1 = content[_i+1] * 0.8
local plus_2 = content[_i+2] * 0.6
local minus_2 = content[index-2] * 0.6
local minus_1 = content[index-1] * 0.8
local plus_1 = content[index+1] * 0.8
local plus_2 = content[index+2] * 0.6
local v = (current + minus_2 + minus_1 + plus_1 + plus_2)/5 --normalize
_data [#_data+1] = {scaleW*(_i-2), v/graphMaxDps} --x and y coords
_i = _i + 1
local value = (current + minus_2 + minus_1 + plus_1 + plus_2) / 5 --normalize
builtData [#builtData+1] = {scaleWidth * (index-2), value / graphMaxDps} -- x and y coords
index = index + 1
end
elseif (smoothLevel == 1) then
_i = 2
while (_i <= #content-1) do
local v = (content[_i-1]+content[_i]+content[_i+1])/3 --normalize
_data [#_data+1] = {scaleW*(_i-1), v/graphMaxDps} --x and y coords
_i = _i + 1
index = 2
while (index <= #content-1) do
local value = (content[index-1]+content[index]+content[index+1])/3 --normalize
builtData [#builtData+1] = {scaleWidth*(index-1), value/graphMaxDps} -- x and y coords
index = index + 1
end
elseif (smoothLevel == 2) then
_i = 1
while (_i <= #content) do
local v = content[_i] --do not normalize
_data [#_data+1] = {scaleW*(_i), v/graphMaxDps} --x and y coords
_i = _i + 1
index = 1
while (index <= #content) do
local value = content[index] --do not normalize
builtData [#builtData+1] = {scaleWidth*(index), value/graphMaxDps} -- x and y coords
index = index + 1
end
end
tremove(content, 1)
@@ -2957,55 +2955,46 @@ local chart_panel_add_data = function(self, graphicData, color, name, elapsed_ti
tremove(content, #graphicData)
tremove(content, #graphicData)
if (max_value > self.max_value) then
if (maxValue > LibGraphChartFrame.max_value) then
--normalize previous data
if (self.max_value > 0) then
local normalizePercent = self.max_value / max_value
for dataIndex, Data in ipairs(self.Data) do
if (LibGraphChartFrame.max_value > 0) then
local normalizePercent = LibGraphChartFrame.max_value / maxValue
for dataIndex, Data in ipairs(LibGraphChartFrame.Data) do
local Points = Data.Points
for i = 1, #Points do
Points[i][2] = Points[i][2]*normalizePercent
Points[i][2] = Points[i][2] * normalizePercent
end
end
end
self.max_value = max_value
f:SetScale(max_value)
LibGraphChartFrame.max_value = maxValue
chartPanel:SetScale(maxValue)
end
tinsert(f.GData, {_data, color or line_default_color, lineTexture, max_value, elapsed_time})
tinsert(chartPanel.GData, {builtData, color or line_default_color, lineTexture, maxValue, elapsedTime})
if (name) then
f:AddLabel (color or line_default_color, name, "graphic", #f.GData)
chartPanel:AddLabel(color or line_default_color, name, "graphic", #chartPanel.GData)
end
local newLineTexture = "Interface\\AddOns\\Details\\Libs\\LibGraph-2.0\\line"
if (firstIndex) then
if (lineTexture) then
if (not lineTexture:find("\\") and not lineTexture:find("//")) then
local path = string.match(debugstack (1, 1, 0), "AddOns\\(.+)LibGraph%-2%.0%.lua")
if path then
lineTexture = "Interface\\AddOns\\" .. path .. lineTexture
else
lineTexture = nil
end
end
end
table.insert (self.Data, 1, {Points = _data, Color = color or line_default_color, lineTexture = lineTexture, ElapsedTime = elapsed_time})
self.NeedsUpdate = true
table.insert(LibGraphChartFrame.Data, 1, {Points = builtData, Color = color or line_default_color, lineTexture = newLineTexture, ElapsedTime = elapsedTime})
LibGraphChartFrame.NeedsUpdate = true
else
self:AddDataSeries (_data, color or line_default_color, nil, lineTexture)
self.Data [#self.Data].ElapsedTime = elapsed_time
LibGraphChartFrame:AddDataSeries(builtData, color or line_default_color, nil, newLineTexture)
LibGraphChartFrame.Data[#LibGraphChartFrame.Data].ElapsedTime = elapsedTime
end
local max_time = 0
for _, data in ipairs(self.Data) do
if (data.ElapsedTime > max_time) then
max_time = data.ElapsedTime
local maxTime = 0
for _, data in ipairs(LibGraphChartFrame.Data) do
if (data.ElapsedTime > maxTime) then
maxTime = data.ElapsedTime
end
end
f:SetTime(max_time)
chart_panel_onresize (f)
chartPanel:SetTime(maxTime)
chart_panel_onresize(chartPanel)
end
@@ -3061,50 +3050,50 @@ local chart_panel_right_click_close = function(self, value)
end
end
function detailsFramework:CreateChartPanel(parent, w, h, name)
function detailsFramework:CreateChartPanel(parent, width, height, name)
if (not name) then
name = "DFPanel" .. detailsFramework.PanelCounter
detailsFramework.PanelCounter = detailsFramework.PanelCounter + 1
end
parent = parent or UIParent
w = w or 800
h = h or 500
width = width or 800
height = height or 500
local f = CreateFrame("frame", name, parent, "BackdropTemplate")
f:SetSize(w or 500, h or 400)
f:EnableMouse(true)
f:SetMovable(true)
local chartFrame = CreateFrame("frame", name, parent, "BackdropTemplate")
chartFrame:SetSize(width or 500, height or 400)
chartFrame:EnableMouse(true)
chartFrame:SetMovable(true)
f:SetScript("OnMouseDown", chart_panel_mousedown)
f:SetScript("OnMouseUp", chart_panel_mouseup)
chartFrame:SetScript("OnMouseDown", chart_panel_mousedown)
chartFrame:SetScript("OnMouseUp", chart_panel_mouseup)
f:SetBackdrop(chart_panel_backdrop)
f:SetBackdropColor(.3, .3, .3, .3)
chartFrame:SetBackdrop(chart_panel_backdrop)
chartFrame:SetBackdropColor(.3, .3, .3, .3)
local c = CreateFrame("Button", nil, f, "UIPanelCloseButton", "BackdropTemplate")
c:SetWidth(32)
c:SetHeight(32)
c:SetPoint("TOPRIGHT", f, "TOPRIGHT", -3, -7)
c:SetFrameLevel(f:GetFrameLevel()+1)
c:SetAlpha(0.9)
f.CloseButton = c
local closeButton = CreateFrame("Button", nil, chartFrame, "UIPanelCloseButton", "BackdropTemplate")
closeButton:SetWidth(32)
closeButton:SetHeight(32)
closeButton:SetPoint("TOPRIGHT", chartFrame, "TOPRIGHT", -3, -7)
closeButton:SetFrameLevel(chartFrame:GetFrameLevel()+1)
closeButton:SetAlpha(0.9)
chartFrame.CloseButton = closeButton
local title = detailsFramework:NewLabel(f, nil, "$parentTitle", "chart_title", "Chart!", nil, 20, {1, 1, 0})
title:SetPoint("topleft", f, "topleft", 110, -13)
local title = detailsFramework:NewLabel(chartFrame, nil, "$parentTitle", "chart_title", "Chart!", nil, 20, {1, 1, 0})
title:SetPoint("topleft", chartFrame, "topleft", 110, -13)
f.Overlays = {}
f.OverlaysAmount = 1
chartFrame.Overlays = {}
chartFrame.OverlaysAmount = 1
f.BoxLabels = {}
f.BoxLabelsAmount = 1
chartFrame.BoxLabels = {}
chartFrame.BoxLabelsAmount = 1
f.ShowHeader = true
f.HeaderOnlyIndicator = false
f.HeaderShowOverlays = true
chartFrame.ShowHeader = true
chartFrame.HeaderOnlyIndicator = false
chartFrame.HeaderShowOverlays = true
--graphic
local g = LibStub:GetLibrary("LibGraph-2.0"):CreateGraphLine (name .. "Graphic", f, "topleft","topleft", 108, -35, w - 120, h - 67)
local g = LibStub:GetLibrary("LibGraph-2.0"):CreateGraphLine (name .. "Graphic", chartFrame, "topleft","topleft", 108, -35, width - 120, height - 67)
g:SetXAxis (-1,1)
g:SetYAxis (-1,1)
g:SetGridSpacing (false, false)
@@ -3122,10 +3111,10 @@ function detailsFramework:CreateChartPanel(parent, w, h, name)
g:SetLineTexture ("line")
f.Graphic = g
f.GData = {}
f.OData = {}
f.ChartFrames = {}
chartFrame.Graphic = g
chartFrame.GData = {}
chartFrame.OData = {}
chartFrame.ChartFrames = {}
--div lines
for i = 1, 8, 1 do
@@ -3134,10 +3123,10 @@ function detailsFramework:CreateChartPanel(parent, w, h, name)
line:SetWidth(670)
line:SetHeight(1.1)
local s = f:CreateFontString(nil, "overlay", "GameFontHighlightSmall")
f ["dpsamt"..i] = s
local s = chartFrame:CreateFontString(nil, "overlay", "GameFontHighlightSmall")
chartFrame ["dpsamt"..i] = s
s:SetText("100k")
s:SetPoint("topleft", f, "topleft", 27, -61 + (-(24.6*i)))
s:SetPoint("topleft", chartFrame, "topleft", 27, -61 + (-(24.6*i)))
line:SetPoint("topleft", s, "bottom", -27, 0)
line:SetPoint("topright", g, "right", 0, 0)
@@ -3145,49 +3134,49 @@ function detailsFramework:CreateChartPanel(parent, w, h, name)
end
--create time labels and the bottom texture to use as a background to these labels
f.TimeLabels = {}
f.TimeLabelsHeight = 16
chartFrame.TimeLabels = {}
chartFrame.TimeLabelsHeight = 16
for i = 1, 17 do
local timeString = f:CreateFontString(nil, "overlay", "GameFontHighlightSmall")
local timeString = chartFrame:CreateFontString(nil, "overlay", "GameFontHighlightSmall")
timeString:SetText("00:00")
timeString:SetPoint("bottomleft", f, "bottomleft", 78 + ((i-1)*36), f.TimeLabelsHeight)
f.TimeLabels [i] = timeString
timeString:SetPoint("bottomleft", chartFrame, "bottomleft", 78 + ((i-1)*36), chartFrame.TimeLabelsHeight)
chartFrame.TimeLabels [i] = timeString
local line = f:CreateTexture(nil, "border")
line:SetSize(1, h-45)
local line = chartFrame:CreateTexture(nil, "border")
line:SetSize(1, height-45)
line:SetColorTexture(1, 1, 1, .1)
line:SetPoint("bottomleft", timeString, "topright", 0, -10)
line:Hide()
timeString.line = line
end
local bottom_texture = detailsFramework:NewImage(f, nil, 702, 25, "background", nil, nil, "$parentBottomTexture")
local bottom_texture = detailsFramework:NewImage(chartFrame, nil, 702, 25, "background", nil, nil, "$parentBottomTexture")
bottom_texture:SetColorTexture(.1, .1, .1, .7)
bottom_texture:SetPoint("topright", g, "bottomright", 0, 0)
bottom_texture:SetPoint("bottomleft", f, "bottomleft", 8, 12)
bottom_texture:SetPoint("bottomleft", chartFrame, "bottomleft", 8, 12)
f.SetTime = chart_panel_align_timelabels
f.EnableVerticalLines = chart_panel_vlines_on
f.DisableVerticalLines = chart_panel_vlines_off
f.SetTitle = chart_panel_set_title
f.SetScale = chart_panel_set_scale
f.Reset = chart_panel_reset
f.AddLine = chart_panel_add_data
f.CanMove = chart_panel_can_move
f.AddLabel = chart_panel_add_label
f.AddOverlay = chart_panel_add_overlay
f.HideCloseButton = chart_panel_hide_close_button
f.RightClickClose = chart_panel_right_click_close
f.CalcStdDev = calc_stddev
f.CalcLowessSmoothing = calc_lowess_smoothing
chartFrame.SetTime = chart_panel_align_timelabels
chartFrame.EnableVerticalLines = chart_panel_vlines_on
chartFrame.DisableVerticalLines = chart_panel_vlines_off
chartFrame.SetTitle = chart_panel_set_title
chartFrame.SetScale = chart_panel_set_scale
chartFrame.Reset = chart_panel_reset
chartFrame.AddLine = chart_panel_add_data
chartFrame.CanMove = chart_panel_can_move
chartFrame.AddLabel = chart_panel_add_label
chartFrame.AddOverlay = chart_panel_add_overlay
chartFrame.HideCloseButton = chart_panel_hide_close_button
chartFrame.RightClickClose = chart_panel_right_click_close
chartFrame.CalcStdDev = calc_stddev
chartFrame.CalcLowessSmoothing = calc_lowess_smoothing
f:SetScript("OnSizeChanged", chart_panel_onresize)
chart_panel_onresize(f)
chartFrame:SetScript("OnSizeChanged", chart_panel_onresize)
chart_panel_onresize(chartFrame)
return f
return chartFrame
end
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@@ -3264,13 +3253,13 @@ local gframe_create_line = function(self)
textBackground:SetColorTexture(0, 0, 0, 0.5)
textBackground:SetPoint("bottom", f.ball, "top", 0, -6)
text:SetPoint("center", textBackground, "center")
detailsFramework:SetFontSize (text, 10)
detailsFramework:SetFontSize(text, 10)
f.text = text
f.textBackground = textBackground
local timeline = f:CreateFontString(nil, "overlay", "GameFontNormal")
timeline:SetPoint("bottomright", f, "bottomright", -2, 0)
detailsFramework:SetFontSize (timeline, 8)
detailsFramework:SetFontSize(timeline, 8)
f.timeline = timeline
return f
@@ -3351,34 +3340,32 @@ local gframe_update = function(self, lines)
o = o + 1
end
end
function detailsFramework:CreateGFrame (parent, w, h, linewidth, onenter, onleave, member, name)
local f = CreateFrame("frame", name, parent, "BackdropTemplate")
f:SetSize(w or 450, h or 150)
--f.CustomLine = [[Interface\AddOns\Details\Libs\LibGraph-2.0\line]]
function detailsFramework:CreateGFrame(parent, width, height, lineWidth, onEnter, onLeave, member, name)
local newGraphicFrame = CreateFrame("frame", name, parent, "BackdropTemplate")
newGraphicFrame:SetSize(width or 450, height or 150)
if (member) then
parent [member] = f
parent[member] = newGraphicFrame
end
f.CreateLine = gframe_create_line
f.GetLine = gframe_getline
f.Reset = gframe_reset
f.UpdateLines = gframe_update
newGraphicFrame.CreateLine = gframe_create_line
newGraphicFrame.GetLine = gframe_getline
newGraphicFrame.Reset = gframe_reset
newGraphicFrame.UpdateLines = gframe_update
f.MaxValue = 0
newGraphicFrame.MaxValue = 0
f._lines = {}
newGraphicFrame._lines = {}
f._onenter_line = onenter
f._onleave_line = onleave
newGraphicFrame._onenter_line = onEnter
newGraphicFrame._onleave_line = onLeave
f._linewidth = linewidth or 50
f._maxlines = floor(f:GetWidth() / f._linewidth)
newGraphicFrame._linewidth = lineWidth or 50
newGraphicFrame._maxlines = floor(newGraphicFrame:GetWidth() / newGraphicFrame._linewidth)
return f
return newGraphicFrame
end
@@ -4500,7 +4487,7 @@ detailsFramework.TitleFunctions = {
end
if (size) then
detailsFramework:SetFontSize (self.TitleLabel, size)
detailsFramework:SetFontSize(self.TitleLabel, size)
end
end
@@ -4683,7 +4670,7 @@ detailsFramework.IconRowFunctions = {
iconFrame.CountdownText:SetText(formattedTime)
iconFrame.CountdownText:SetPoint(self.options.text_anchor or "center", iconFrame, self.options.text_rel_anchor or "center", self.options.text_x_offset or 0, self.options.text_y_offset or 0)
detailsFramework:SetFontSize (iconFrame.CountdownText, self.options.text_size)
detailsFramework:SetFontSize(iconFrame.CountdownText, self.options.text_size)
detailsFramework:SetFontFace (iconFrame.CountdownText, self.options.text_font)
detailsFramework:SetFontOutline (iconFrame.CountdownText, self.options.text_outline)
@@ -4715,7 +4702,7 @@ detailsFramework.IconRowFunctions = {
iconFrame.Desc:SetText(descText.text)
iconFrame.Desc:SetTextColor(detailsFramework:ParseColors(descText.text_color or self.options.desc_text_color))
iconFrame.Desc:SetPoint(self.options.desc_text_anchor or "bottom", iconFrame, self.options.desc_text_rel_anchor or "top", self.options.desc_text_x_offset or 0, self.options.desc_text_y_offset or 2)
detailsFramework:SetFontSize (iconFrame.Desc, descText.text_size or self.options.desc_text_size)
detailsFramework:SetFontSize(iconFrame.Desc, descText.text_size or self.options.desc_text_size)
detailsFramework:SetFontFace (iconFrame.Desc, self.options.desc_text_font)
detailsFramework:SetFontOutline (iconFrame.Desc, self.options.desc_text_outline)
else
@@ -4727,7 +4714,7 @@ detailsFramework.IconRowFunctions = {
iconFrame.StackText:SetText(count)
iconFrame.StackText:SetTextColor(detailsFramework:ParseColors(self.options.desc_text_color))
iconFrame.StackText:SetPoint(self.options.stack_text_anchor or "center", iconFrame, self.options.stack_text_rel_anchor or "bottomright", self.options.stack_text_x_offset or 0, self.options.stack_text_y_offset or 0)
detailsFramework:SetFontSize (iconFrame.StackText, self.options.stack_text_size)
detailsFramework:SetFontSize(iconFrame.StackText, self.options.stack_text_size)
detailsFramework:SetFontFace (iconFrame.StackText, self.options.stack_text_font)
detailsFramework:SetFontOutline (iconFrame.StackText, self.options.stack_text_outline)
else
@@ -7416,7 +7403,7 @@ detailsFramework.PowerFrameFunctions = {
self.percentText:Show()
PixelUtil.SetPoint(self.percentText, "center", self, "center", 0, 0)
detailsFramework:SetFontSize (self.percentText, 9)
detailsFramework:SetFontSize(self.percentText, 9)
detailsFramework:SetFontColor(self.percentText, "white")
detailsFramework:SetFontOutline (self.percentText, "OUTLINE")
else
@@ -8630,7 +8617,7 @@ detailsFramework.BorderFunctions = {
-- ~borderframe
function detailsFramework:CreateBorderFrame (parent, name)
local parentName = name or "DetailsFrameworkBorderFrame" .. tostring(math.random (1, 100000000))
local parentName = name or "DetailsFrameworkBorderFrame" .. tostring(math.random(1, 100000000))
local f = CreateFrame("frame", parentName, parent, "BackdropTemplate")
f:SetFrameLevel(f:GetFrameLevel()+1)
@@ -9131,7 +9118,7 @@ end
-- ~unitframe
local globalBaseFrameLevel = 1 -- to be increased + used across each new plate
function detailsFramework:CreateUnitFrame(parent, name, unitFrameSettingsOverride, healthBarSettingsOverride, castBarSettingsOverride, powerBarSettingsOverride)
local parentName = name or ("DetailsFrameworkUnitFrame" .. tostring(math.random (1, 100000000)))
local parentName = name or ("DetailsFrameworkUnitFrame" .. tostring(math.random(1, 100000000)))
--create the main unit frame
local mewUnitFrame = CreateFrame("button", parentName, parent, "BackdropTemplate")
@@ -9281,7 +9268,7 @@ detailsFramework.TimeLineElapsedTimeFunctions = {
end
detailsFramework:SetFontColor(label, self.options.text_color)
detailsFramework:SetFontSize (label, self.options.text_size)
detailsFramework:SetFontSize(label, self.options.text_size)
detailsFramework:SetFontFace (label, self.options.text_font)
detailsFramework:SetFontOutline (label, self.options.text_outline)
@@ -9325,7 +9312,7 @@ detailsFramework.TimeLineElapsedTimeFunctions = {
local secondsOfTime = pixelPerSecond * xOffset
label:SetText(detailsFramework:IntegerToTimer (floor(secondsOfTime)))
label:SetText(detailsFramework:IntegerToTimer(floor(secondsOfTime)))
if (label.line:IsShown()) then
label.line:SetHeight(parent:GetParent():GetHeight())
+58 -63
View File
@@ -1,5 +1,5 @@
local DF = _G ["DetailsFramework"]
local DF = _G["DetailsFramework"]
if (not DF or not DetailsFrameworkCanLoad) then
return
end
@@ -12,7 +12,7 @@ local CreateImageEditorFrame = function()
editorWindow:SetPoint("center", UIParent, "center")
editorWindow:SetResizable(true)
editorWindow:SetMovable(true)
editorWindow:SetClampedToScreen (true)
editorWindow:SetClampedToScreen(true)
tinsert(UISpecialFrames, "DetailsFrameworkImageEdit")
editorWindow:SetFrameStrata("TOOLTIP")
@@ -23,26 +23,26 @@ local CreateImageEditorFrame = function()
end
_G.DetailsFrameworkImageEditTable = editorWindow
editorWindow.hooks = {}
local background = DF:NewImage(editorWindow, nil, nil, nil, "background", nil, "background", "$parentBackground")
background:SetAllPoints()
background:SetTexture(0, 0, 0, .8)
local edit_texture = DF:NewImage(editorWindow, nil, 500, 500, "artwork", nil, "edit_texture", "$parentImage")
edit_texture:SetAllPoints()
_G.DetailsFrameworkImageEdit_EditTexture = edit_texture
local background_frame = CreateFrame("frame", "DetailsFrameworkImageEditBackground", DetailsFrameworkImageEdit, "BackdropTemplate")
background_frame:SetPoint("topleft", DetailsFrameworkImageEdit, "topleft", -10, 30)
background_frame:SetFrameStrata("TOOLTIP")
background_frame:SetFrameLevel(editorWindow:GetFrameLevel())
background_frame:SetSize(790, 560)
background_frame:SetResizable(true)
background_frame:SetMovable(true)
background_frame:SetScript("OnMouseDown", function()
editorWindow:StartMoving()
end)
@@ -60,16 +60,15 @@ local CreateImageEditorFrame = function()
local haveHFlip = false
local haveVFlip = false
--Top Slider
local topCoordTexture = DF:NewImage(editorWindow, nil, nil, nil, "overlay", nil, nil, "$parentImageTopCoord")
topCoordTexture:SetPoint("topleft", editorWindow, "topleft")
topCoordTexture:SetPoint("topright", editorWindow, "topright")
topCoordTexture:SetColorTexture(1, 0, 0)
topCoordTexture.height = 1
topCoordTexture.alpha = .2
local topSlider = DF:NewSlider (editorWindow, nil, "$parentTopSlider", "topSlider", 100, 100, 0.1, 100, 0.1, 0)
topSlider:SetAllPoints(editorWindow.widget)
topSlider:SetOrientation ("VERTICAL")
@@ -90,11 +89,10 @@ local CreateImageEditorFrame = function()
editorWindow.accept(nil, nil, true)
end
end)
topSlider:Hide()
--Bottom Slider
local bottomCoordTexture = DF:NewImage(editorWindow, nil, nil, nil, "overlay", nil, nil, "$parentImageBottomCoord")
bottomCoordTexture:SetPoint("bottomleft", editorWindow, "bottomleft", 0, 0)
bottomCoordTexture:SetPoint("bottomright", editorWindow, "bottomright", 0, 0)
@@ -102,7 +100,7 @@ local CreateImageEditorFrame = function()
bottomCoordTexture.height = 1
bottomCoordTexture.alpha = .2
local bottomSlider= DF:NewSlider (editorWindow, nil, "$parentBottomSlider", "bottomSlider", 100, 100, 0.1, 100, 0.1, 100)
local bottomSlider = DF:NewSlider (editorWindow, nil, "$parentBottomSlider", "bottomSlider", 100, 100, 0.1, 100, 0.1, 100)
bottomSlider:SetAllPoints(editorWindow.widget)
bottomSlider:SetOrientation ("VERTICAL")
bottomSlider.backdrop = nil
@@ -123,49 +121,47 @@ local CreateImageEditorFrame = function()
editorWindow.accept(nil, nil, true)
end
end)
bottomSlider:Hide()
--Left Slider
local leftCoordTexture = DF:NewImage(editorWindow, nil, nil, nil, "overlay", nil, nil, "$parentImageLeftCoord")
leftCoordTexture:SetPoint("topleft", editorWindow, "topleft", 0, 0)
leftCoordTexture:SetPoint("bottomleft", editorWindow, "bottomleft", 0, 0)
leftCoordTexture:SetColorTexture(1, 0, 0)
leftCoordTexture.width = 1
leftCoordTexture.alpha = .2
local leftSlider = DF:NewSlider (editorWindow, nil, "$parentLeftSlider", "leftSlider", 100, 100, 0.1, 100, 0.1, 0.1)
leftSlider:SetAllPoints(editorWindow.widget)
leftSlider.backdrop = nil
leftSlider.fractional = true
leftSlider:SetHook("OnEnter", function() return true end)
leftSlider:SetHook("OnLeave", function() return true end)
local leftSliderThumpTexture = leftSlider:CreateTexture(nil, "overlay")
leftSliderThumpTexture:SetColorTexture(1, 1, 1)
leftSliderThumpTexture:SetWidth(1)
leftSliderThumpTexture:SetHeight(512)
leftSlider:SetThumbTexture (leftSliderThumpTexture)
leftSlider:SetHook("OnValueChange", function(_, _, value)
leftCoordTexture.image:SetWidth(editorWindow.frame:GetWidth()/100*value)
if (editorWindow.callback_func) then
editorWindow.accept(nil, nil, true)
end
end)
leftSlider:Hide()
--Right Slider
local rightCoordTexture = DF:NewImage(editorWindow, nil, nil, nil, "overlay", nil, nil, "$parentImageRightCoord")
rightCoordTexture:SetPoint("topright", editorWindow, "topright", 0, 0)
rightCoordTexture:SetPoint("bottomright", editorWindow, "bottomright", 0, 0)
rightCoordTexture:SetColorTexture(1, 0, 0)
rightCoordTexture.width = 1
rightCoordTexture.alpha = .2
local rightSlider = DF:NewSlider (editorWindow, nil, "$parentRightSlider", "rightSlider", 100, 100, 0.1, 100, 0.1, 100)
rightSlider:SetAllPoints(editorWindow.widget)
rightSlider.backdrop = nil
@@ -186,11 +182,10 @@ local CreateImageEditorFrame = function()
editorWindow.accept(nil, nil, true)
end
end)
rightSlider:Hide()
--Edit Buttons
rightSlider:Hide()
--Edit Buttons
local buttonsBackground = DF:NewPanel(UIParent, nil, "DetailsFrameworkImageEditButtonsBg", nil, 115, 230)
--buttonsBackground:SetPoint("topleft", window, "topright", 2, 0)
buttonsBackground:SetPoint("topright", background_frame, "topright", -8, -10)
@@ -198,35 +193,35 @@ local CreateImageEditorFrame = function()
--buttonsBackground:SetMovable(true)
tinsert(UISpecialFrames, "DetailsFrameworkImageEditButtonsBg")
buttonsBackground:SetFrameStrata("TOOLTIP")
local alphaFrameShown = false
local editingSide = nil
local lastButton = nil
local alphaFrame
local originalColor = {0.9999, 0.8196, 0}
local enableTexEdit = function(button, bottom, side)
if (alphaFrameShown) then
alphaFrame:Hide()
alphaFrameShown = false
button.text:SetTextColor(unpack(originalColor))
end
if (ColorPickerFrame:IsShown()) then
ColorPickerFrame:Hide()
end
if (lastButton) then
lastButton.text:SetTextColor(unpack(originalColor))
end
if (editingSide == side) then
editorWindow [editingSide.."Slider"]:Hide()
editingSide = nil
return
elseif (editingSide) then
editorWindow [editingSide.."Slider"]:Hide()
end
@@ -234,10 +229,10 @@ local CreateImageEditorFrame = function()
editingSide = side
button.text:SetTextColor(1, 1, 1)
lastButton = button
editorWindow [side.."Slider"]:Show()
end
local yMod = -10
local leftTexCoordButton = DF:NewButton(buttonsBackground, nil, "$parentLeftTexButton", nil, 100, 20, enableTexEdit, "left", nil, nil, "Crop Left", 1)
@@ -255,11 +250,11 @@ local CreateImageEditorFrame = function()
local bottomTexCoordButton = DF:NewButton(buttonsBackground, nil, "$parentBottomTexButton", nil, 100, 20, enableTexEdit, "bottom", nil, nil, "Crop Bottom", 1)
bottomTexCoordButton:SetPoint("topright", buttonsBackground, "topright", -8, -70 + yMod)
bottomTexCoordButton:SetTemplate(DF:GetTemplate("dropdown", "OPTIONS_DROPDOWN_TEMPLATE"))
local Alpha = DF:NewButton(buttonsBackground, nil, "$parentBottomAlphaButton", nil, 100, 20, alpha, nil, nil, nil, "Alpha", 1)
Alpha:SetPoint("topright", buttonsBackground, "topright", -8, -115 + yMod)
Alpha:SetTemplate(DF:GetTemplate("dropdown", "OPTIONS_DROPDOWN_TEMPLATE"))
--overlay color
local selectedColor = function(default)
if (default) then
@@ -274,14 +269,14 @@ local CreateImageEditorFrame = function()
end
end
end
local changeColor = function()
ColorPickerFrame.func = nil
ColorPickerFrame.opacityFunc = nil
ColorPickerFrame.cancelFunc = nil
ColorPickerFrame.previousValues = nil
local right, g, bottom = edit_texture:GetVertexColor()
ColorPickerFrame:SetColorRGB (right, g, bottom)
ColorPickerFrame:SetParent(buttonsBackground.widget)
@@ -292,13 +287,13 @@ local CreateImageEditorFrame = function()
ColorPickerFrame:ClearAllPoints()
ColorPickerFrame:SetPoint("left", buttonsBackground.widget, "right")
ColorPickerFrame:Show()
if (alphaFrameShown) then
alphaFrame:Hide()
alphaFrameShown = false
Alpha.button.text:SetTextColor(unpack(originalColor))
end
end
if (lastButton) then
lastButton.text:SetTextColor(unpack(originalColor))
if (editingSide) then
@@ -306,34 +301,34 @@ local CreateImageEditorFrame = function()
end
end
end
local changeColorButton = DF:NewButton(buttonsBackground, nil, "$parentOverlayColorButton", nil, 100, 20, changeColor, nil, nil, nil, "Color", 1)
changeColorButton:SetPoint("topright", buttonsBackground, "topright", -8, -95 + yMod)
changeColorButton:SetTemplate(DF:GetTemplate("dropdown", "OPTIONS_DROPDOWN_TEMPLATE"))
alphaFrame = DF:NewPanel(buttonsBackground, nil, "DetailsFrameworkImageEditAlphaBg", nil, 40, 225)
alphaFrame:SetPoint("topleft", buttonsBackground, "topright", 2, 0)
alphaFrame:Hide()
alphaFrame:Hide()
local alphaSlider = DF:NewSlider (alphaFrame, nil, "$parentAlphaSlider", "alphaSlider", 30, 220, 1, 100, 1, edit_texture:GetAlpha()*100)
alphaSlider:SetPoint("top", alphaFrame, "top", 0, -5)
alphaSlider:SetOrientation ("VERTICAL")
alphaSlider.thumb:SetSize(40, 30)
--leftSlider.backdrop = nil
--leftSlider.fractional = true
local alpha = function(button)
if (ColorPickerFrame:IsShown()) then
ColorPickerFrame:Hide()
end
if (lastButton) then
lastButton.text:SetTextColor(unpack(originalColor))
if (editingSide) then
editorWindow [editingSide.."Slider"]:Hide()
end
end
if (not alphaFrameShown) then
alphaFrame:Show()
alphaSlider:SetValue(edit_texture:GetAlpha()*100)
@@ -345,9 +340,9 @@ local CreateImageEditorFrame = function()
button.text:SetTextColor(unpack(originalColor))
end
end
Alpha.clickfunction = alpha
alphaSlider:SetHook("OnValueChange", function(_, _, value)
edit_texture:SetAlpha(value/100)
if (editorWindow.callback_func) then
@@ -365,22 +360,22 @@ local CreateImageEditorFrame = function()
resizer:SetPoint("BOTTOMRIGHT", editorWindow.widget, "BOTTOMRIGHT", 0, 0)
resizer:EnableMouse(true)
resizer:SetFrameLevel(editorWindow.widget:GetFrameLevel() + 2)
resizer:SetScript("OnMouseDown", function(self, button)
resizer:SetScript("OnMouseDown", function(self, button)
editorWindow.widget:StartSizing("BOTTOMRIGHT")
end)
resizer:SetScript("OnMouseUp", function(self, button)
resizer:SetScript("OnMouseUp", function(self, button)
editorWindow.widget:StopMovingOrSizing()
end)
editorWindow.widget:SetScript("OnMouseDown", function()
editorWindow.widget:StartMoving()
end)
editorWindow.widget:SetScript("OnMouseUp", function()
editorWindow.widget:StopMovingOrSizing()
end)
editorWindow.widget:SetScript("OnSizeChanged", function()
edit_texture.width = editorWindow.width
edit_texture.height = editorWindow.height
@@ -388,12 +383,12 @@ local CreateImageEditorFrame = function()
rightSliderThumpTexture:SetHeight(editorWindow.height)
topSliderThumpTexture:SetWidth(editorWindow.width)
bottomSliderThumpTexture:SetWidth(editorWindow.width)
rightCoordTexture.image:SetWidth(math.max( (editorWindow.frame:GetWidth() / 100 * math.abs(rightSlider:GetValue()-100)), 1))
leftCoordTexture.image:SetWidth(editorWindow.frame:GetWidth()/100*leftSlider:GetValue())
bottomCoordTexture:SetHeight(math.max( (editorWindow.frame:GetHeight() / 100 * math.abs(bottomSlider:GetValue()-100)), 1))
topCoordTexture:SetHeight(editorWindow.frame:GetHeight()/100*topSlider:GetValue())
if (editorWindow.callback_func) then
editorWindow.accept(nil, nil, true)
end
+4 -4
View File
@@ -289,8 +289,8 @@ DF:Mixin(SplitBarMetaFunctions, DF.ScriptHookMixin)
end
--font size
local smember_textsize = function(_object, _value)
DF:SetFontSize (_object.textleft, _value)
return DF:SetFontSize (_object.textright, _value)
DF:SetFontSize(_object.textleft, _value)
return DF:SetFontSize(_object.textright, _value)
end
--font color
local smember_textcolor = function(_object, _value)
@@ -691,12 +691,12 @@ local build_statusbar = function(self)
self.spark:SetPoint("LEFT", self, "RIGHT", -17, -1)
self.lefttext = self:CreateFontString("$parent_TextLeft", "OVERLAY", "GameFontHighlight")
DF:SetFontSize (self.lefttext, 10)
DF:SetFontSize(self.lefttext, 10)
self.lefttext:SetJustifyH("left")
self.lefttext:SetPoint("LEFT", self.lefticon, "RIGHT", 3, 0)
self.righttext = self:CreateFontString("$parent_TextRight", "OVERLAY", "GameFontHighlight")
DF:SetFontSize (self.righttext, 10)
DF:SetFontSize(self.righttext, 10)
self.righttext:SetJustifyH("right")
self.righttext:SetPoint("RIGHT", self.righticon, "LEFT", -3, 0)
+3 -1
View File
@@ -11,7 +11,7 @@ Description: Allows for easy creation of graphs
--Thanks to Nelson Minar for catching several errors where width was being used instead of height (damn copy and paste >_>)
local major = "LibGraph-2.0"
local minor = 90000 + tonumber(("$Revision: 57 $"):match("(%d+)"))
local minor = 90000 + tonumber(("$Revision: 58 $"):match("(%d+)"))
--Search for just Addon\\ at the front since the interface part often gets trimmed
@@ -31,6 +31,8 @@ do
end
end
TextureDirectory = "Interface\\Addons\\Details\\Libs\\LibGraph-2.0"
if not LibStub then error(major .. " requires LibStub") end
+53 -5
View File
@@ -15,6 +15,8 @@ local CONST_TALENT_VERSION_CLASSIC = 1
local CONST_TALENT_VERSION_LEGION = 4
local CONST_TALENT_VERSION_DRAGONFLIGHT = 5
local CONST_BTALENT_VERSION_COVENANTS = 9
local isTimewalkWoW = function()
local _, _, _, buildInfo = GetBuildInfo()
if (buildInfo < 40000) then
@@ -26,6 +28,38 @@ local IsDragonflight = function()
return select(4, GetBuildInfo()) >= 100000
end
local IsShadowlands = function()
local versionString, revision, launchDate, gameVersion = GetBuildInfo()
if (gameVersion >= 90000 and gameVersion < 100000) then
return true
end
end
--information about the player character to send, each expansion has its own system and data can be different
--it's always a number
function openRaidLib.UnitInfoManager.GetPlayerInfo1()
if (IsShadowlands()) then
--return the renown level within the player covenant
local renown = C_CovenantSanctumUI.GetRenownLevel() or 1
return renown
end
return 0
end
--information about the player character to send, each expansion has its own system and data can be different
--it's always a number
function openRaidLib.UnitInfoManager.GetPlayerInfo2()
if (IsShadowlands()) then
--return which covenant the player picked
local covenant = C_Covenants.GetActiveCovenantID() or 0
return covenant
end
return 0
end
--default player class-spec talent system
function openRaidLib.GetTalentVersion()
local _, _, _, buildInfo = GetBuildInfo()
@@ -42,6 +76,13 @@ function openRaidLib.GetTalentVersion()
end
end
--secondary talent tree, can be a legendary weapon talent tree, covenant talent tree, etc...
function openRaidLib.GetBorrowedTalentVersion()
if (IsShadowlands()) then
return CONST_BTALENT_VERSION_COVENANTS
end
end
local getDragonflightTalentsAsIndexTable = function()
local allTalents = {}
local configId = C_ClassTalents.GetActiveConfigID()
@@ -164,12 +205,8 @@ function openRaidLib.GetPlayerSpecId()
end
end
--borrowed talent tree from shadowlands
function openRaidLib.UnitInfoManager.GetPlayerConduits()
if (IsDragonflight()) then
return {}
end
local conduits = {}
local soulbindID = C_Soulbinds.GetActiveSoulbindID()
@@ -214,6 +251,17 @@ function openRaidLib.UnitInfoManager.GetPlayerConduits()
return conduits
end
function openRaidLib.UnitInfoManager.GetPlayerBorrowedTalents()
local borrowedTalentVersion = openRaidLib.GetBorrowedTalentVersion()
if (borrowedTalentVersion == CONST_BTALENT_VERSION_COVENANTS) then
return openRaidLib.UnitInfoManager.GetPlayerConduits()
end
return {}
end
function openRaidLib.GearManager.GetPlayerItemLevel()
if (_G.GetAverageItemLevel) then
local _, itemLevel = GetAverageItemLevel()
+209 -34
View File
@@ -15,6 +15,11 @@ Code Rules:
- Public callbacks are callbacks registered by an external addon.
Change Log:
- things to maintain now has 1 file per expansion
- player conduits, covenant internally renamed to playerInfo1 and playerInfo2 to make the lib more future proof
- player conduits tree is now Borrowed Talents Tree, for future proof
- removed the talent size limitation on 7 indexes
- added:
* openRaidLib.GetFlaskInfoBySpellId(spellId)
* openRaidLib.GetFlaskTierFromAura(auraInfo)
@@ -63,7 +68,7 @@ if (WOW_PROJECT_ID ~= WOW_PROJECT_MAINLINE and not isExpansion_Dragonflight()) t
end
local major = "LibOpenRaid-1.0"
local CONST_LIB_VERSION = 60
local CONST_LIB_VERSION = 62
LIB_OPEN_RAID_CAN_LOAD = false
local unpack = table.unpack or _G.unpack
@@ -81,6 +86,9 @@ local unpack = table.unpack or _G.unpack
openRaidLib.inGroup = false
openRaidLib.UnitIDCache = {}
local CONST_CVAR_TEMPCACHE = "LibOpenRaidTempCache"
local CONST_CVAR_TEMPCACHE_DEBUG = "LibOpenRaidTempCacheDebug"
--show failures (when the function return an error) results to chat
local CONST_DIAGNOSTIC_ERRORS = false
--show the data to be sent and data received from comm
@@ -114,6 +122,9 @@ local unpack = table.unpack or _G.unpack
local CONST_TWO_SECONDS = 2.0
local CONST_THREE_SECONDS = 3.0
local CONST_SPECIALIZATION_VERSION_CLASSIC = 0
local CONST_SPECIALIZATION_VERSION_MODERN = 1
local CONST_COOLDOWN_CHECK_INTERVAL = CONST_TWO_SECONDS
local CONST_COOLDOWN_TIMELEFT_HAS_CHANGED = CONST_TWO_SECONDS
@@ -127,6 +138,16 @@ local unpack = table.unpack or _G.unpack
local GetContainerItemID = GetContainerItemID or C_Container.GetContainerItemID
local GetContainerItemLink = GetContainerItemLink or C_Container.GetContainerItemLink
--from vanilla to cataclysm, the specID did not existed, hence its considered version 0
--for mists of pandaria and beyond it's version 1
local getSpecializationVersion = function()
if (gameVersion >= 50000) then
return CONST_SPECIALIZATION_VERSION_MODERN
else
return CONST_SPECIALIZATION_VERSION_CLASSIC
end
end
function openRaidLib.ShowDiagnosticErrors(value)
CONST_DIAGNOSTIC_ERRORS = value
end
@@ -175,6 +196,147 @@ local unpack = table.unpack or _G.unpack
end
end
--------------------------------------------------------------------------------------------------------------------------------
--~internal cache
--use a console variable to create a flash cache to keep data while the game reload
--this is not a long term database as saved variables are and it get clean up often
C_CVar.RegisterCVar(CONST_CVAR_TEMPCACHE)
C_CVar.RegisterCVar(CONST_CVAR_TEMPCACHE_DEBUG)
--internal namespace
local tempCache = {
debugString = "",
}
tempCache.copyCache = function(t1, t2)
for key, value in pairs(t2) do
if (type(value) == "table") then
t1[key] = t1[key] or {}
tempCache.copyCache(t1[key], t2[key])
else
t1[key] = value
end
end
return t1
end
--use debug cvar to find issues that occurred during the logoff process
function openRaidLib.PrintTempCacheDebug()
local debugMessage = C_CVar.GetCVar(CONST_CVAR_TEMPCACHE_DEBUG)
sendChatMessage("|cFFFF9922OpenRaidLib|r Temp CVar Result:\n", debugMessage)
end
function tempCache.SaveDebugText()
C_CVar.SetCVar(CONST_CVAR_TEMPCACHE_DEBUG, tempCache.debugString)
end
function tempCache.AddDebugText(text)
tempCache.debugString = tempCache.debugString .. date("%H:%M:%S") .. "| " .. text .. "\n"
end
function tempCache.SaveCacheOnCVar(data)
C_CVar.SetCVar(CONST_CVAR_TEMPCACHE, data)
tempCache.AddDebugText("CVars Saved on saveCahceOnCVar(), Size: " .. #data)
end
function tempCache.RestoreData()
local data = C_CVar.GetCVar(CONST_CVAR_TEMPCACHE)
if (data and type(data) == "string" and data ~= "") then
local LibAceSerializer = LibStub:GetLibrary("AceSerializer-3.0", true)
if (LibAceSerializer) then
local okay, cacheInfo = LibAceSerializer:Deserialize(data)
if (okay) then
local age = cacheInfo.createdAt
--if the data is older than 5 minutes, much has been changed from the group and the data is out dated
if (age + (60 * 5) < time()) then
return
end
local unitsInfo = cacheInfo.unitsInfo
local cooldownsInfo = cacheInfo.cooldownsInfo
local gearInfo = cacheInfo.gearInfo
local okayUnitsInfo, unitsInfo = LibAceSerializer:Deserialize(unitsInfo)
local okayCooldownsInfo, cooldownsInfo = LibAceSerializer:Deserialize(cooldownsInfo)
local okayGearInfo, gearInfo = LibAceSerializer:Deserialize(gearInfo)
if (okayUnitsInfo and unitsInfo) then
openRaidLib.UnitInfoManager.UnitData = tempCache.copyCache(openRaidLib.UnitInfoManager.UnitData, unitsInfo)
else
tempCache.AddDebugText("invalid UnitInfo")
end
if (okayCooldownsInfo and cooldownsInfo) then
openRaidLib.CooldownManager.UnitData = tempCache.copyCache(openRaidLib.CooldownManager.UnitData, cooldownsInfo)
else
tempCache.AddDebugText("invalid CooldownsInfo")
end
if (okayGearInfo and gearInfo) then
openRaidLib.GearManager.UnitData = tempCache.copyCache(openRaidLib.GearManager.UnitData, gearInfo)
else
tempCache.AddDebugText("invalid GearInfo")
end
else
tempCache.AddDebugText("Deserialization not okay")
end
else
tempCache.AddDebugText("LibAceSerializer not found")
end
else
tempCache.AddDebugText("invalid temporary cache, isn't string or cvar not found")
end
end
function tempCache.SaveData()
tempCache.AddDebugText("SaveData() called.")
local LibAceSerializer = LibStub:GetLibrary("AceSerializer-3.0", true)
if (LibAceSerializer) then
local allUnitsInfo = openRaidLib.UnitInfoManager.UnitData
local allUnitsCooldowns = openRaidLib.CooldownManager.UnitData
local allPlayersGear = openRaidLib.GearManager.UnitData
local cacheInfo = {
createdAt = time(),
}
local unitsInfoSerialized = LibAceSerializer:Serialize(allUnitsInfo)
local unitsCooldownsSerialized = LibAceSerializer:Serialize(allUnitsCooldowns)
local playersGearSerialized = LibAceSerializer:Serialize(allPlayersGear)
if (unitsInfoSerialized) then
cacheInfo.unitsInfo = unitsInfoSerialized
tempCache.AddDebugText("SaveData() units info serialized okay.")
else
tempCache.AddDebugText("SaveData() units info serialized failed.")
end
if (unitsCooldownsSerialized) then
cacheInfo.cooldownsInfo = unitsCooldownsSerialized
tempCache.AddDebugText("SaveData() cooldowns info serialized okay.")
else
tempCache.AddDebugText("SaveData() cooldowns info serialized failed.")
end
if (playersGearSerialized) then
cacheInfo.gearInfo = playersGearSerialized
tempCache.AddDebugText("SaveData() gear info serialized okay.")
else
tempCache.AddDebugText("SaveData() gear info serialized failed.")
end
local cacheInfoSerialized = LibAceSerializer:Serialize(cacheInfo)
tempCache.SaveCacheOnCVar(cacheInfoSerialized)
else
tempCache.AddDebugText("SaveData() AceSerializer not found.")
end
tempCache.SaveDebugText()
end
--------------------------------------------------------------------------------------------------------------------------------
--~comms
openRaidLib.commHandler = {}
@@ -276,7 +438,7 @@ local unpack = table.unpack or _G.unpack
--0x2: to raid
--0x4: to guild
local sendData = function(dataEncoded, channel)
local aceComm = LibStub:GetLibrary("AceComm-3.0")
local aceComm = LibStub:GetLibrary("AceComm-3.0", true)
if (aceComm) then
aceComm:SendCommMessage(CONST_COMM_PREFIX, dataEncoded, channel, nil, "ALERT")
else
@@ -700,6 +862,10 @@ local unpack = table.unpack or _G.unpack
["CHALLENGE_MODE_COMPLETED"] = function()
openRaidLib.internalCallback.TriggerEvent("mythicDungeonEnd")
end,
["PLAYER_LOGOUT"] = function()
tempCache.SaveData()
end,
}
openRaidLib.eventFunctions = eventFunctions
@@ -721,6 +887,7 @@ local unpack = table.unpack or _G.unpack
eventFrame:RegisterEvent("PLAYER_DEAD")
eventFrame:RegisterEvent("PLAYER_ALIVE")
eventFrame:RegisterEvent("PLAYER_UNGHOST")
eventFrame:RegisterEvent("PLAYER_LOGOUT")
if (checkClientVersion("retail")) then
eventFrame:RegisterEvent("PLAYER_TALENT_UPDATE")
@@ -998,36 +1165,36 @@ local unpack = table.unpack or _G.unpack
--@unitName: player name
function openRaidLib.UnitInfoManager.OnReceiveUnitFullInfo(data, unitName)
local specId = tonumber(data[1])
local renown = tonumber(data[2])
local covenantId = tonumber(data[3])
if (not covenantId or covenantId > 4) then --cleanup on 10.0
--invalid covanentId
local playerInfo1 = tonumber(data[2])
local playerInfo2 = tonumber(data[3])
if (not playerInfo2 or playerInfo2 > 4) then --cleanup on 10.0
--invalid covanentId - different lib versions, it'll fix itself on dragonflight
return
end
local talentsSize = tonumber(data[4])
if (not talentsSize or talentsSize > 7) then --talents rework on 10.0
--invalid talents size
if (not talentsSize) then
return
end
local conduitsTableIndex = tonumber((talentsSize + 1) + 3) + 1 -- +3 for spec, renown and covenant data | talentSizeIndex + talentSize | +1 for talents size
local conduitsSize = data[conduitsTableIndex]
local borrowedTalentsTableIndex = tonumber((talentsSize + 1) + 3) + 1 -- +3 for spec, playerInfo1 and playerInfo2 data | talentSizeIndex + talentSize | +1 for talents size
local borrowedTalentsSize = data[borrowedTalentsTableIndex]
local pvpTalentsTableIndex = 3 + 3 + talentsSize + conduitsSize -- +3 for spec, renown and covenant data | +3 for talents, conduit and pvptalents index for size
local pvpTalentsTableIndex = 3 + 3 + talentsSize + borrowedTalentsSize -- +3 for spec, playerInfo1 and playerInfo2 data | +3 for talents, conduit and pvptalents index for size
local pvpTalentsSize = data[pvpTalentsTableIndex]
--unpack the talents data as a ipairs table
local talentsTableUnpacked = openRaidLib.UnpackTable(data, 4, false, false, talentsSize)
--unpack the conduits data as a ipairs table
local conduitsTableUnpacked = openRaidLib.UnpackTable(data, conduitsTableIndex, false, false, conduitsSize)
--unpack the borrowed talents data as a ipairs table
local borrowedTalentsTableUnpacked = openRaidLib.UnpackTable(data, borrowedTalentsTableIndex, false, false, borrowedTalentsSize)
--back compatibility with versions without pvp talents
if (type(data[pvpTalentsTableIndex]) == "string" or not data[pvpTalentsTableIndex]) then
--add a dummy table as pvp talents
openRaidLib.UnitInfoManager.AddUnitInfo(unitName, specId, renown, covenantId, talentsTableUnpacked, conduitsTableUnpacked, {0, 0, 0})
openRaidLib.UnitInfoManager.AddUnitInfo(unitName, specId, playerInfo1, playerInfo2, talentsTableUnpacked, borrowedTalentsTableUnpacked, {0, 0, 0})
return
end
@@ -1035,7 +1202,7 @@ local unpack = table.unpack or _G.unpack
local pvpTalentsTableUnpacked = openRaidLib.UnpackTable(data, pvpTalentsTableIndex, false, false, pvpTalentsSize)
--add to the list of players information and also trigger a public callback
openRaidLib.UnitInfoManager.AddUnitInfo(unitName, specId, renown, covenantId, talentsTableUnpacked, conduitsTableUnpacked, pvpTalentsTableUnpacked)
openRaidLib.UnitInfoManager.AddUnitInfo(unitName, specId, playerInfo1, playerInfo2, talentsTableUnpacked, borrowedTalentsTableUnpacked, pvpTalentsTableUnpacked)
end
openRaidLib.commHandler.RegisterComm(CONST_COMM_PLAYERINFO_PREFIX, openRaidLib.UnitInfoManager.OnReceiveUnitFullInfo)
@@ -1044,17 +1211,24 @@ function openRaidLib.UnitInfoManager.SendAllPlayerInfo()
local dataToSend = CONST_COMM_PLAYERINFO_PREFIX .. ","
dataToSend = dataToSend .. playerInfo[1] .. "," --spec id
dataToSend = dataToSend .. playerInfo[2] .. "," --renown
dataToSend = dataToSend .. playerInfo[3] .. "," --covenantId
dataToSend = dataToSend .. openRaidLib.PackTable(playerInfo[4]) .. "," --talents
dataToSend = dataToSend .. openRaidLib.PackTable(playerInfo[5]) .. "," --conduits
dataToSend = dataToSend .. openRaidLib.PackTable(playerInfo[6]) .. "," --pvp talents
dataToSend = dataToSend .. playerInfo[2] .. "," --player info 1
dataToSend = dataToSend .. playerInfo[3] .. "," --player info 2
dataToSend = dataToSend .. openRaidLib.PackTable(playerInfo[4]) .. "," --player talents class-spec
dataToSend = dataToSend .. openRaidLib.PackTable(playerInfo[5]) .. "," --player talents borrowed
dataToSend = dataToSend .. openRaidLib.PackTable(playerInfo[6]) .. "," --player talents pvp
--send the data
openRaidLib.commHandler.SendCommData(dataToSend)
diagnosticComm("SendGetUnitInfoFullData| " .. dataToSend) --debug
end
--player info format:
--index 1: number: specId
--index 2: number: tbd, depends on expansion
--index 3: number: tbd, depends on expansion
--index 4: talents 1: player talents: length vary depends on talent system
--index 5: talents 2: borrowed power talents: length vary from expansions
--index 6: talents 3: pvp talents
function openRaidLib.UnitInfoManager.GetPlayerFullInfo()
local playerInfo = {}
@@ -1064,29 +1238,28 @@ function openRaidLib.UnitInfoManager.GetPlayerFullInfo()
return {0, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0}, 0}
end
--spec
local specId = 0
local selectedSpecialization = GetSpecialization()
if (selectedSpecialization) then
specId = GetSpecializationInfo(selectedSpecialization) or 0
if (getSpecializationVersion() == CONST_SPECIALIZATION_VERSION_MODERN) then
local selectedSpecialization = GetSpecialization()
if (selectedSpecialization) then
specId = GetSpecializationInfo(selectedSpecialization) or 0
end
end
playerInfo[1] = specId
--shadowlands-renown
local renown = C_CovenantSanctumUI.GetRenownLevel() or 1
playerInfo[2] = renown
--player information 1 (this can be different for each expansion)
playerInfo[2] = openRaidLib.UnitInfoManager.GetPlayerInfo1()
--shadowlands-covenant
local covenant = C_Covenants.GetActiveCovenantID()
playerInfo[3] = covenant
--player information 2 (this can be different for each expansion)
playerInfo[3] = openRaidLib.UnitInfoManager.GetPlayerInfo2()
--talents
--player class-spec talents
local talents = openRaidLib.UnitInfoManager.GetPlayerTalents()
playerInfo[4] = talents
--shadowlands-conduits
local conduits = openRaidLib.UnitInfoManager.GetPlayerConduits()
playerInfo[5] = conduits
--borrowed talents (conduits talents on shadowlands)
local borrowedTalents = openRaidLib.UnitInfoManager.GetPlayerBorrowedTalents()
playerInfo[5] = borrowedTalents
--pvp talents
local pvpTalents = openRaidLib.UnitInfoManager.GetPlayerPvPTalents()
@@ -2328,3 +2501,5 @@ C_Timer.After(0.1, function()
end
end)
end)
tempCache.RestoreData()
@@ -1,47 +1,9 @@
--data which main need maintenance over time
if (not LIB_OPEN_RAID_CAN_LOAD) then
if (not LIB_OPEN_RAID_COOLDOWNS_INFO) then
--the lib isn't loading in WotLK, some addons break due to this table not being initialized
LIB_OPEN_RAID_COOLDOWNS_INFO = {}
LIB_OPEN_RAID_COOLDOWNS_BY_SPEC = {}
end
return
end
--alert the user that something went wrong
C_Timer.After(10, function()
if (not LIB_OPEN_RAID_DATABASE_LOADED) then
print("Details! > LibOpenRaid failed to load, check BugSack for errors and report.")
end
end)
--data for dragonflight expansion
local versionString, revision, launchDate, gameVersion = GetBuildInfo()
local isExpansion_Dragonflight = function()
if (gameVersion >= 100000) then
return true
end
end
local isExpansion_Shadowlands = function()
if (gameVersion < 100000 and gameVersion >= 90000) then
return true
end
end
local isExpansion_LichKing = function()
if (gameVersion < 40000 and gameVersion >= 30000) then
return true
end
end
local isExpansion_Vanilla = function()
if (gameVersion < 20000) then
return true
end
if (gameVersion >= 110000 or gameVersion < 100000) then
return
end
--localization
@@ -121,353 +83,151 @@ end
LIB_OPEN_RAID_FOOD_BUFF = {} --default
LIB_OPEN_RAID_FLASK_BUFF = {} --default
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--Wrath of the Lich King
LIB_OPEN_RAID_BLOODLUST = {
[2825] = true, --bloodlust (shaman)
[32182] = true, --heroism (shaman)
[80353] = true, --timewarp (mage)
[90355] = true, --ancient hysteria (hunter)
[309658] = true, --current exp drums (letherwork)
--need to get the 30% haste buff from evokers
}
if (isExpansion_LichKing()) then
LIB_OPEN_RAID_BLOODLUST = {
[2825] = true, --bloodlust
[32182] = true, --heroism
[80353] = true, --timewarp
[90355] = true, --ancient hysteria
[309658] = true, --current exp drums
}
LIB_OPEN_RAID_MYTHICKEYSTONE_ITEMID = 180653
LIB_OPEN_RAID_AUGMENTATED_RUNE = 0 --need to update to dragonflight
--which gear slots can be enchanted on the latest retail version of the game
--when the value is a number, the slot only receives enchants for a specific attribute
LIB_OPEN_RAID_ENCHANT_SLOTS = {
--[INVSLOT_NECK] = true,
[INVSLOT_BACK] = true, --for all
[INVSLOT_CHEST] = true, --for all
[INVSLOT_FINGER1] = true, --for all
[INVSLOT_FINGER2] = true, --for all
[INVSLOT_MAINHAND] = true, --for all
LIB_OPEN_RAID_COVENANT_ICONS = {
--need to get the icon for the new 4 covanants in dragonflight
--"Interface\\ICONS\\UI_Sigil_Kyrian", --kyrian
--"Interface\\ICONS\\UI_Sigil_Venthyr", --venthyr
--"Interface\\ICONS\\UI_Sigil_NightFae", --nightfae
--"Interface\\ICONS\\UI_Sigil_Necrolord", --necrolords
}
[INVSLOT_FEET] = 2, --agility only
[INVSLOT_WRIST] = 1, --intellect only
[INVSLOT_HAND] = 3, --strenth only
}
--which gear slots can be enchanted on the latest retail version of the game
--when the value is a number, the slot only receives enchants for a specific attribute
LIB_OPEN_RAID_ENCHANT_SLOTS = {
--[INVSLOT_NECK] = true,
[INVSLOT_BACK] = true, --for all
[INVSLOT_CHEST] = true, --for all
[INVSLOT_FINGER1] = true, --for all
[INVSLOT_FINGER2] = true, --for all
[INVSLOT_MAINHAND] = true, --for all
LIB_OPEN_RAID_MYTHICKEYSTONE_ITEMID = 180653
LIB_OPEN_RAID_AUGMENTATED_RUNE = 0
[INVSLOT_FEET] = 2, --agility only
[INVSLOT_WRIST] = 1, --intellect only
[INVSLOT_HAND] = 3, --strenth only
}
LIB_OPEN_RAID_COVENANT_ICONS = {}
-- how to get the enchantId:
-- local itemLink = GetInventoryItemLink("player", slotId)
-- local enchandId = select(3, strsplit(":", itemLink))
-- print("enchantId:", enchandId)
LIB_OPEN_RAID_ENCHANT_IDS = {
--need to get this data to dragonflight
--FEET
--[6207] = INVSLOT_FEET, --[Enchant Boots - Speed of Soul]
--[6211] = INVSLOT_FEET, --[Enchant Boots - Eternal Agility] + 15 agi
--[6212] = INVSLOT_FEET, --[Enchant Boots - Agile Soulwalker] + 10 agi
LIB_OPEN_RAID_ENCHANT_IDS = {}
--WRIST
--[6222] = INVSLOT_WRIST, [Enchant Bracers - Shaded Hearthing]
--[6219] = INVSLOT_WRIST, --[Enchant Bracers - Illuminated Soul] + 10 int
--[6220] = INVSLOT_WRIST, --[Enchant Bracers - Eternal Intellect] + 15 int
LIB_OPEN_RAID_GEM_IDS = {}
--HAND
--[6205] = INVSLOT_HAND, --[Enchant Gloves - Shadowlands Gathering]
--[6209] = INVSLOT_HAND, --[Enchant Gloves - Strength of Soul] +10 str
--[6210] = INVSLOT_HAND, --[Enchant Gloves - Eternal Strength] +15 str
LIB_OPEN_RAID_WEAPON_ENCHANT_IDS = {}
--FINGER
--[6164] = INVSLOT_FINGER1, --[Enchant Ring - Tenet of Critical Strike] +16
--[6166] = INVSLOT_FINGER1, --[Enchant Ring - Tenet of Haste] +16
--[6168] = INVSLOT_FINGER1, --[Enchant Ring - Tenet of Mastery] +16
--[6170] = INVSLOT_FINGER1, --[Enchant Ring - Tenet of Versatility] +16
LIB_OPEN_RAID_FOOD_BUFF = {}
--BACK
--[6202] = INVSLOT_BACK, --[Enchant Cloak - Fortified Speed] +20 stam +30 speed
--[6203] = INVSLOT_BACK, --[Enchant Cloak - Fortified Avoidance] +20 stam +30 avoidance
--[6204] = INVSLOT_BACK, --[Enchant Cloak - Fortified Leech]
--[6208] = INVSLOT_BACK, --[Enchant Cloak - Soul Vitality]
LIB_OPEN_RAID_FLASK_BUFF = {}
--CHEST
--[6213] = INVSLOT_CHEST, --[Enchant Chest - Eternal Bulwark] +25 armor +20 agi or str
--[6214] = INVSLOT_CHEST, --[Enchant Chest - Eternal Skirmish] +20 agi or str +more white damage
--[6217] = INVSLOT_CHEST, --[Enchant Chest - Eternal Bounds] +20 int + 6% mana
--[6216] = INVSLOT_CHEST, --[Enchant Chest - Sacred Stats] +20 all stats
--[6230] = INVSLOT_CHEST, --[Enchant Chest - Eternal Stats] +30 all stats
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--Shadowlands
--MAINHAND
--[6223] = INVSLOT_MAINHAND, --[Enchant Weapon - Lightless Force] + shadow wave damage
--[6226] = INVSLOT_MAINHAND, --[Enchant Weapon - Eternal Grace] + burst of healing done
--[6227] = INVSLOT_MAINHAND, --[Enchant Weapon - Ascended Vigor] + healing received increased
--[6228] = INVSLOT_MAINHAND, --[Enchant Weapon - Sinful Revelation] + 6% bleed damage
--[6229] = INVSLOT_MAINHAND, --[Enchant Weapon - Celestial Guidance] + 5% agility
--[6243] = INVSLOT_MAINHAND, --[Runeforging: Rune of Hysteria]
--[3370] = INVSLOT_MAINHAND, --[Runeforging: Rune of Razorice]
--[6241] = INVSLOT_MAINHAND, --[Runeforging: Rune of Sanguination]
--[6242] = INVSLOT_MAINHAND, --[Runeforging: Rune of Spellwarding]
--[6245] = INVSLOT_MAINHAND, --[Runeforging: Rune of the Apocalypse]
--[3368] = INVSLOT_MAINHAND, --[Runeforging: Rune of the Fallen Crusader]
--[3847] = INVSLOT_MAINHAND, --[Runeforging: Rune of the Stoneskin Gargoyle]
--[6244] = INVSLOT_MAINHAND, --[Runeforging: Rune of Unending Thirst]
}
elseif (isExpansion_Shadowlands()) then
LIB_OPEN_RAID_BLOODLUST = {
[2825] = true, --bloodlust
[32182] = true, --heroism
[80353] = true, --timewarp
[90355] = true, --ancient hysteria
[309658] = true, --current exp drums
}
--how to get the gemId:
--local itemLink = GetInventoryItemLink("player", slotId)
--local gemId = select(4, strsplit(":", itemLink))
--print("gemId:", gemId)
LIB_OPEN_RAID_GEM_IDS = {
--need update to dragonflight
}
LIB_OPEN_RAID_MYTHICKEYSTONE_ITEMID = 180653
LIB_OPEN_RAID_AUGMENTATED_RUNE = 347901
--/dump GetWeaponEnchantInfo()
LIB_OPEN_RAID_WEAPON_ENCHANT_IDS = {
--need update to dragonflight
[5400] = true, --flametongue
[5401] = true, --windfury
}
LIB_OPEN_RAID_COVENANT_ICONS = {
[[Interface\ICONS\UI_Sigil_Kyrian]], --kyrian
[[Interface\ICONS\UI_Sigil_Venthyr]], --venthyr
[[Interface\ICONS\UI_Sigil_NightFae]], --nightfae
[[Interface\ICONS\UI_Sigil_Necrolord]], --necrolords
}
--buff spellId, the value of the food is the tier level
--use /details auras
LIB_OPEN_RAID_FOOD_BUFF = {
[382145] = {tier = {[220] = 1}, status = {"haste"}, localized = {STAT_HASTE}}, --Well Fed haste 220
[382146] = {tier = {[220] = 1}, status = {"critical"}, localized = {STAT_CRITICAL_STRIKE}}, --Well Fed crit 220
[382149] = {tier = {[220] = 1}, status = {"versatility"}, localized = {STAT_VERSATILITY}}, --Well Fed vers 220
[382150] = {tier = {[220] = 1}, status = {"mastery"}, localized = {STAT_MASTERY}}, --Well Fed mastery 220
[382152] = {tier = {[130] = 1}, status = {"haste", "critical"}, localized = {STAT_HASTE, STAT_CRITICAL_STRIKE}}, --Well Fed haste + crit 130
[382153] = {tier = {[130] = 1}, status = {"haste", "versatility"}, localized = {STAT_HASTE, STAT_VERSATILITY}}, --Well Fed haste + vers 130
[382154] = {tier = {[130] = 1}, status = {"haste", "mastery"}, localized = {STAT_HASTE, STAT_MASTERY}}, --Well Fed haste + mastery 130
[382155] = {tier = {[130] = 1}, status = {"critical", "versatility"}, localized = {STAT_CRITICAL_STRIKE, STAT_VERSATILITY}}, --Well Fed crit + vers 130
[382156] = {tier = {[130] = 1}, status = {"critical", "mastery"}, localized = {STAT_CRITICAL_STRIKE, STAT_MASTERY}}, --Well Fed crit + mastery 130
[382157] = {tier = {[130] = 1}, status = {"mastery", "versatility"}, localized = {STAT_MASTERY, STAT_VERSATILITY}}, --Well Fed vers + mastery 130
}
--which gear slots can be enchanted on the latest retail version of the game
--when the value is a number, the slot only receives enchants for a specific attribute
LIB_OPEN_RAID_ENCHANT_SLOTS = {
--[INVSLOT_NECK] = true,
[INVSLOT_BACK] = true, --for all
[INVSLOT_CHEST] = true, --for all
[INVSLOT_FINGER1] = true, --for all
[INVSLOT_FINGER2] = true, --for all
[INVSLOT_MAINHAND] = true, --for all
--use /details auras
LIB_OPEN_RAID_FLASK_BUFF = {
--phials
[371354] = {tier = {[131] = 1, [151] = 2, [174] = 3}}, --Phial of the Eye in the Storm
[370652] = {tier = {[470] = 1, [541] = 2, [622] = 3}}, --Phial of Static Empowerment
[371172] = {tier = {[236] = 1, [257] = 2, [279] = 3}}, --Phial of Tepid Versatility
[371204] = {tier = {[8125] = 1, [9344] = 2, [10746] = 3}}, --Phial of Still Air
[371036] = {tier = {[-4] = 1, [-5] = 2, [-6] = 3}}, --Phial of Icy Preservation
[374000] = {tier = {[690] = 1, [752] = 2, [814] = 3}}, --Iced Phial of Corrupting Rage
[371386] = {tier = {[432] = 1, [497] = 2, [572] = 3}}, --Phial of Charged Isolation
[373257] = {tier = {[4603] = 2, [3949] = 1, [5365] = 3}}, --Phial of Glacial Fury
[393700] = {tier = {[45] = 3, [38] = 2, [32] = 1}}, --Aerated Phial of Deftness
[393717] = {tier = {[45] = 3, [38] = 2, [32] = 1}}, --Steaming Phial of Finesse
[371186] = {tier = {[558] = 3, [473] = 1, [515] = 2}}, --Charged Phial of Alacrity
[393714] = {tier = {[45] = 3, [38] = 2, [32] = 1}}, --Crystalline Phial of Perception
[371339] = {tier = {[562] = 3, [476] = 1, [519] = 2}}, --Phial of Elemental Chaos
}
[INVSLOT_FEET] = 2, --agility only
[INVSLOT_WRIST] = 1, --intellect only
[INVSLOT_HAND] = 3, --strenth only
}
-- how to get the enchantId:
-- local itemLink = GetInventoryItemLink("player", slotId)
-- local enchandId = select(3, strsplit(":", itemLink))
-- print("enchantId:", enchandId)
LIB_OPEN_RAID_ENCHANT_IDS = {
--FEET
--[6207] = INVSLOT_FEET, --[Enchant Boots - Speed of Soul]
[6211] = INVSLOT_FEET, --[Enchant Boots - Eternal Agility] + 15 agi
[6212] = INVSLOT_FEET, --[Enchant Boots - Agile Soulwalker] + 10 agi
--WRIST
--[6222] = INVSLOT_WRIST, [Enchant Bracers - Shaded Hearthing]
[6219] = INVSLOT_WRIST, --[Enchant Bracers - Illuminated Soul] + 10 int
[6220] = INVSLOT_WRIST, --[Enchant Bracers - Eternal Intellect] + 15 int
--HAND
--[6205] = INVSLOT_HAND, --[Enchant Gloves - Shadowlands Gathering]
[6209] = INVSLOT_HAND, --[Enchant Gloves - Strength of Soul] +10 str
[6210] = INVSLOT_HAND, --[Enchant Gloves - Eternal Strength] +15 str
--FINGER
[6164] = INVSLOT_FINGER1, --[Enchant Ring - Tenet of Critical Strike] +16
[6166] = INVSLOT_FINGER1, --[Enchant Ring - Tenet of Haste] +16
[6168] = INVSLOT_FINGER1, --[Enchant Ring - Tenet of Mastery] +16
[6170] = INVSLOT_FINGER1, --[Enchant Ring - Tenet of Versatility] +16
--BACK
[6202] = INVSLOT_BACK, --[Enchant Cloak - Fortified Speed] +20 stam +30 speed
[6203] = INVSLOT_BACK, --[Enchant Cloak - Fortified Avoidance] +20 stam +30 avoidance
[6204] = INVSLOT_BACK, --[Enchant Cloak - Fortified Leech]
[6208] = INVSLOT_BACK, --[Enchant Cloak - Soul Vitality]
--CHEST
[6213] = INVSLOT_CHEST, --[Enchant Chest - Eternal Bulwark] +25 armor +20 agi or str
[6214] = INVSLOT_CHEST, --[Enchant Chest - Eternal Skirmish] +20 agi or str +more white damage
[6217] = INVSLOT_CHEST, --[Enchant Chest - Eternal Bounds] +20 int + 6% mana
[6216] = INVSLOT_CHEST, --[Enchant Chest - Sacred Stats] +20 all stats
[6230] = INVSLOT_CHEST, --[Enchant Chest - Eternal Stats] +30 all stats
--MAINHAND
[6223] = INVSLOT_MAINHAND, --[Enchant Weapon - Lightless Force] + shadow wave damage
[6226] = INVSLOT_MAINHAND, --[Enchant Weapon - Eternal Grace] + burst of healing done
[6227] = INVSLOT_MAINHAND, --[Enchant Weapon - Ascended Vigor] + healing received increased
[6228] = INVSLOT_MAINHAND, --[Enchant Weapon - Sinful Revelation] + 6% bleed damage
[6229] = INVSLOT_MAINHAND, --[Enchant Weapon - Celestial Guidance] + 5% agility
[6243] = INVSLOT_MAINHAND, --[Runeforging: Rune of Hysteria]
[3370] = INVSLOT_MAINHAND, --[Runeforging: Rune of Razorice]
[6241] = INVSLOT_MAINHAND, --[Runeforging: Rune of Sanguination]
[6242] = INVSLOT_MAINHAND, --[Runeforging: Rune of Spellwarding]
[6245] = INVSLOT_MAINHAND, --[Runeforging: Rune of the Apocalypse]
[3368] = INVSLOT_MAINHAND, --[Runeforging: Rune of the Fallen Crusader]
[3847] = INVSLOT_MAINHAND, --[Runeforging: Rune of the Stoneskin Gargoyle]
[6244] = INVSLOT_MAINHAND, --[Runeforging: Rune of Unending Thirst]
}
-- how to get the gemId:
-- local itemLink = GetInventoryItemLink("player", slotId)
-- local gemId = select(4, strsplit(":", itemLink))
-- print("gemId:", gemId)
LIB_OPEN_RAID_GEM_IDS = {
[173126] = true, --Straddling Jewel Doublet (green, +12 speed)
[173125] = true, --Revitalizing Jewel Doublet (green, +100 health)
[173130] = true, --Masterful Jewel Cluster (blue, master)
[173129] = true, --Versatile Jewel Cluster (blue, versatility)
[173127] = true, --Deadly Jewel Cluster (blue, crit)
[173128] = true, --Quick Jewel Cluster (blue, haste)
[168636] = true, --Leviathan's Eye of Strength (purple, strength)
[168638] = true, --Leviathan's Eye of Intellect (purple, intellect)
[169220] = true, --Straddling Sage Agate (blue, movement speed)
}
--/dump GetWeaponEnchantInfo()
LIB_OPEN_RAID_WEAPON_ENCHANT_IDS = {
[6188] = true, --shadowcore oil
[6190] = true, --embalmer's oil
[6201] = true, --weighted
[6200] = true, --sharpened
[5400] = true, --flametongue
[5401] = true, --windfury
}
--buff spellId, the value of the food is the tier level
LIB_OPEN_RAID_FOOD_BUFF = {
[259454] = 1, --(agility) Feast of Gluttonous Hedonism
[308434] = 1, --(critical) Phantasmal Souffle and Fries
[308397] = 1, --(critical +18) Butterscotch Marinated Ribs
[308400] = 1, --(critical +30) Spinefin Souffle and Fries
[308488] = 1, --(haste) Tenebrous Crown Roast Aspic
[308404] = 1, --(haste +18) Cinnamon Bonefish Stew
[308405] = 1, --(haste +30) Tenebrous Crown Roast Aspic
[308506] = 1, --(mastery) Crawler Ravioli with Apple Sauce
[308412] = 1, --(mastery +18) Meaty Apple Dumplings
[308413] = 1, --(mastery +30) Iridescent Ravioli with Apple Sauce
[308525] = 1, --(stamina) Banana Beef Pudding
[308414] = 1, --(stamina +14) Pickled Meat Smoothie
[308415] = 1, --(stamina +22) Banana Beef Pudding
[308514] = 1, --(versatility) Steak a la Mode
[308425] = 1, --(versatility +18) Sweet Silvergill Sausages
[308426] = 1, --(versatility +30) Steak a la Mode
[308419] = 1, --(periodicaly damage) Smothered Shank
[327715] = 1, --(speed) Fried Bonefish
--feasts
[327706] = 2, --strength +20
[327707] = 2, --stamina +20
[327708] = 2, --intellect +20
[327709] = 2, --agility +20
[327704] = 2, --intellect +18
[327701] = 2, --strength +18
[327705] = 2, --agility +18
}
LIB_OPEN_RAID_FLASK_BUFF = {
[307185] = true, --Spectral Flask of Power
[307187] = true, --Spectral Stamina Flask
[307166] = true, --Eternal Flask
}
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--Dragonflight
elseif (isExpansion_Dragonflight()) then
LIB_OPEN_RAID_BLOODLUST = {
[2825] = true, --bloodlust (shaman)
[32182] = true, --heroism (shaman)
[80353] = true, --timewarp (mage)
[90355] = true, --ancient hysteria (hunter)
[309658] = true, --current exp drums (letherwork)
--need to get the 30% haste buff from evokers
}
LIB_OPEN_RAID_MYTHICKEYSTONE_ITEMID = 180653
LIB_OPEN_RAID_AUGMENTATED_RUNE = 0 --need to update to dragonflight
LIB_OPEN_RAID_COVENANT_ICONS = {
--need to get the icon for the new 4 covanants in dragonflight
--"Interface\\ICONS\\UI_Sigil_Kyrian", --kyrian
--"Interface\\ICONS\\UI_Sigil_Venthyr", --venthyr
--"Interface\\ICONS\\UI_Sigil_NightFae", --nightfae
--"Interface\\ICONS\\UI_Sigil_Necrolord", --necrolords
}
--which gear slots can be enchanted on the latest retail version of the game
--when the value is a number, the slot only receives enchants for a specific attribute
LIB_OPEN_RAID_ENCHANT_SLOTS = {
--[INVSLOT_NECK] = true,
[INVSLOT_BACK] = true, --for all
[INVSLOT_CHEST] = true, --for all
[INVSLOT_FINGER1] = true, --for all
[INVSLOT_FINGER2] = true, --for all
[INVSLOT_MAINHAND] = true, --for all
[INVSLOT_FEET] = 2, --agility only
[INVSLOT_WRIST] = 1, --intellect only
[INVSLOT_HAND] = 3, --strenth only
}
-- how to get the enchantId:
-- local itemLink = GetInventoryItemLink("player", slotId)
-- local enchandId = select(3, strsplit(":", itemLink))
-- print("enchantId:", enchandId)
LIB_OPEN_RAID_ENCHANT_IDS = {
--need to get this data to dragonflight
--FEET
--[6207] = INVSLOT_FEET, --[Enchant Boots - Speed of Soul]
--[6211] = INVSLOT_FEET, --[Enchant Boots - Eternal Agility] + 15 agi
--[6212] = INVSLOT_FEET, --[Enchant Boots - Agile Soulwalker] + 10 agi
--WRIST
--[6222] = INVSLOT_WRIST, [Enchant Bracers - Shaded Hearthing]
--[6219] = INVSLOT_WRIST, --[Enchant Bracers - Illuminated Soul] + 10 int
--[6220] = INVSLOT_WRIST, --[Enchant Bracers - Eternal Intellect] + 15 int
--HAND
--[6205] = INVSLOT_HAND, --[Enchant Gloves - Shadowlands Gathering]
--[6209] = INVSLOT_HAND, --[Enchant Gloves - Strength of Soul] +10 str
--[6210] = INVSLOT_HAND, --[Enchant Gloves - Eternal Strength] +15 str
--FINGER
--[6164] = INVSLOT_FINGER1, --[Enchant Ring - Tenet of Critical Strike] +16
--[6166] = INVSLOT_FINGER1, --[Enchant Ring - Tenet of Haste] +16
--[6168] = INVSLOT_FINGER1, --[Enchant Ring - Tenet of Mastery] +16
--[6170] = INVSLOT_FINGER1, --[Enchant Ring - Tenet of Versatility] +16
--BACK
--[6202] = INVSLOT_BACK, --[Enchant Cloak - Fortified Speed] +20 stam +30 speed
--[6203] = INVSLOT_BACK, --[Enchant Cloak - Fortified Avoidance] +20 stam +30 avoidance
--[6204] = INVSLOT_BACK, --[Enchant Cloak - Fortified Leech]
--[6208] = INVSLOT_BACK, --[Enchant Cloak - Soul Vitality]
--CHEST
--[6213] = INVSLOT_CHEST, --[Enchant Chest - Eternal Bulwark] +25 armor +20 agi or str
--[6214] = INVSLOT_CHEST, --[Enchant Chest - Eternal Skirmish] +20 agi or str +more white damage
--[6217] = INVSLOT_CHEST, --[Enchant Chest - Eternal Bounds] +20 int + 6% mana
--[6216] = INVSLOT_CHEST, --[Enchant Chest - Sacred Stats] +20 all stats
--[6230] = INVSLOT_CHEST, --[Enchant Chest - Eternal Stats] +30 all stats
--MAINHAND
--[6223] = INVSLOT_MAINHAND, --[Enchant Weapon - Lightless Force] + shadow wave damage
--[6226] = INVSLOT_MAINHAND, --[Enchant Weapon - Eternal Grace] + burst of healing done
--[6227] = INVSLOT_MAINHAND, --[Enchant Weapon - Ascended Vigor] + healing received increased
--[6228] = INVSLOT_MAINHAND, --[Enchant Weapon - Sinful Revelation] + 6% bleed damage
--[6229] = INVSLOT_MAINHAND, --[Enchant Weapon - Celestial Guidance] + 5% agility
--[6243] = INVSLOT_MAINHAND, --[Runeforging: Rune of Hysteria]
--[3370] = INVSLOT_MAINHAND, --[Runeforging: Rune of Razorice]
--[6241] = INVSLOT_MAINHAND, --[Runeforging: Rune of Sanguination]
--[6242] = INVSLOT_MAINHAND, --[Runeforging: Rune of Spellwarding]
--[6245] = INVSLOT_MAINHAND, --[Runeforging: Rune of the Apocalypse]
--[3368] = INVSLOT_MAINHAND, --[Runeforging: Rune of the Fallen Crusader]
--[3847] = INVSLOT_MAINHAND, --[Runeforging: Rune of the Stoneskin Gargoyle]
--[6244] = INVSLOT_MAINHAND, --[Runeforging: Rune of Unending Thirst]
}
--how to get the gemId:
--local itemLink = GetInventoryItemLink("player", slotId)
--local gemId = select(4, strsplit(":", itemLink))
--print("gemId:", gemId)
LIB_OPEN_RAID_GEM_IDS = {
--need update to dragonflight
}
--/dump GetWeaponEnchantInfo()
LIB_OPEN_RAID_WEAPON_ENCHANT_IDS = {
--need update to dragonflight
[5400] = true, --flametongue
[5401] = true, --windfury
}
--buff spellId, the value of the food is the tier level
--use /details auras
LIB_OPEN_RAID_FOOD_BUFF = {
[382145] = {tier = {[220] = 1}, status = {"haste"}, localized = {STAT_HASTE}}, --Well Fed haste 220
[382146] = {tier = {[220] = 1}, status = {"critical"}, localized = {STAT_CRITICAL_STRIKE}}, --Well Fed crit 220
[382149] = {tier = {[220] = 1}, status = {"versatility"}, localized = {STAT_VERSATILITY}}, --Well Fed vers 220
[382150] = {tier = {[220] = 1}, status = {"mastery"}, localized = {STAT_MASTERY}}, --Well Fed mastery 220
[382152] = {tier = {[130] = 1}, status = {"haste", "critical"}, localized = {STAT_HASTE, STAT_CRITICAL_STRIKE}}, --Well Fed haste + crit 130
[382153] = {tier = {[130] = 1}, status = {"haste", "versatility"}, localized = {STAT_HASTE, STAT_VERSATILITY}}, --Well Fed haste + vers 130
[382154] = {tier = {[130] = 1}, status = {"haste", "mastery"}, localized = {STAT_HASTE, STAT_MASTERY}}, --Well Fed haste + mastery 130
[382155] = {tier = {[130] = 1}, status = {"critical", "versatility"}, localized = {STAT_CRITICAL_STRIKE, STAT_VERSATILITY}}, --Well Fed crit + vers 130
[382156] = {tier = {[130] = 1}, status = {"critical", "mastery"}, localized = {STAT_CRITICAL_STRIKE, STAT_MASTERY}}, --Well Fed crit + mastery 130
[382157] = {tier = {[130] = 1}, status = {"mastery", "versatility"}, localized = {STAT_MASTERY, STAT_VERSATILITY}}, --Well Fed vers + mastery 130
}
--use /details auras
LIB_OPEN_RAID_FLASK_BUFF = {
--phials
[371354] = {tier = {[131] = 1, [151] = 2, [174] = 3}}, --Phial of the Eye in the Storm
[370652] = {tier = {[470] = 1, [541] = 2, [622] = 3}}, --Phial of Static Empowerment
[371172] = {tier = {[236] = 1, [257] = 2, [279] = 3}}, --Phial of Tepid Versatility
[371204] = {tier = {[8125] = 1, [9344] = 2, [10746] = 3}}, --Phial of Still Air
[371036] = {tier = {[-4] = 1, [-5] = 2, [-6] = 3}}, --Phial of Icy Preservation
[374000] = {tier = {[690] = 1, [752] = 2, [814] = 3}}, --Iced Phial of Corrupting Rage
[371386] = {tier = {[432] = 1, [497] = 2, [572] = 3}}, --Phial of Charged Isolation
[373257] = {tier = {[4603] = 2, [3949] = 1, [5365] = 3}}, --Phial of Glacial Fury
[393700] = {tier = {[45] = 3, [38] = 2, [32] = 1}}, --Aerated Phial of Deftness
[393717] = {tier = {[45] = 3, [38] = 2, [32] = 1}}, --Steaming Phial of Finesse
[371186] = {tier = {[558] = 3, [473] = 1, [515] = 2}}, --Charged Phial of Alacrity
[393714] = {tier = {[45] = 3, [38] = 2, [32] = 1}}, --Crystalline Phial of Perception
[371339] = {tier = {[562] = 3, [476] = 1, [519] = 2}}, --Phial of Elemental Chaos
}
--spellId of healing from potions
LIB_OPEN_RAID_HEALING_POTIONS = {
[370511] = 1, --Refreshing Healing Potion
[371039] = 1, --Potion of Withering Vitality
[6262] = 1, --Warlock's Healthstone
}
end
--spellId of healing from potions
LIB_OPEN_RAID_HEALING_POTIONS = {
[370511] = 1, --Refreshing Healing Potion
[371039] = 1, --Potion of Withering Vitality
[6262] = 1, --Warlock's Healthstone
}
--end of per expansion content
@@ -0,0 +1,678 @@
--data for shadowlands expansion
local versionString, revision, launchDate, gameVersion = GetBuildInfo()
if (gameVersion >= 100000 or gameVersion < 90000) then
return
end
--localization
local gameLanguage = GetLocale()
local L = { --default localization
["STRING_EXPLOSION"] = "explosion",
["STRING_MIRROR_IMAGE"] = "Mirror Image",
["STRING_CRITICAL_ONLY"] = "critical",
["STRING_BLOOM"] = "Bloom", --lifebloom 'bloom' healing
["STRING_GLAIVE"] = "Glaive", --DH glaive toss
["STRING_MAINTARGET"] = "Main Target",
["STRING_AOE"] = "AoE", --multi targets
["STRING_SHADOW"] = "Shadow", --the spell school 'shadow'
["STRING_PHYSICAL"] = "Physical", --the spell school 'physical'
["STRING_PASSIVE"] = "Passive", --passive spell
["STRING_TEMPLAR_VINDCATION"] = "Templar's Vindication", --paladin spell
["STRING_PROC"] = "proc", --spell proc
["STRING_TRINKET"] = "Trinket", --trinket
}
if (gameLanguage == "enUS") then
--default language
elseif (gameLanguage == "deDE") then
L["STRING_EXPLOSION"] = "Explosion"
L["STRING_MIRROR_IMAGE"] = "Bilder spiegeln"
L["STRING_CRITICAL_ONLY"] = "kritisch"
elseif (gameLanguage == "esES") then
L["STRING_EXPLOSION"] = "explosión"
L["STRING_MIRROR_IMAGE"] = "Imagen de espejo"
L["STRING_CRITICAL_ONLY"] = "crítico"
elseif (gameLanguage == "esMX") then
L["STRING_EXPLOSION"] = "explosión"
L["STRING_MIRROR_IMAGE"] = "Imagen de espejo"
L["STRING_CRITICAL_ONLY"] = "crítico"
elseif (gameLanguage == "frFR") then
L["STRING_EXPLOSION"] = "explosion"
L["STRING_MIRROR_IMAGE"] = "Effet miroir"
L["STRING_CRITICAL_ONLY"] = "critique"
elseif (gameLanguage == "itIT") then
L["STRING_EXPLOSION"] = "esplosione"
L["STRING_MIRROR_IMAGE"] = "Immagine Speculare"
L["STRING_CRITICAL_ONLY"] = "critico"
elseif (gameLanguage == "koKR") then
L["STRING_EXPLOSION"] = "폭발"
L["STRING_MIRROR_IMAGE"] = "미러 이미지"
L["STRING_CRITICAL_ONLY"] = "치명타"
elseif (gameLanguage == "ptBR") then
L["STRING_EXPLOSION"] = "explosão"
L["STRING_MIRROR_IMAGE"] = "Imagem Espelhada"
L["STRING_CRITICAL_ONLY"] = "critico"
elseif (gameLanguage == "ruRU") then
L["STRING_EXPLOSION"] = "взрыв"
L["STRING_MIRROR_IMAGE"] = "Зеркальное изображение"
L["STRING_CRITICAL_ONLY"] = "критический"
elseif (gameLanguage == "zhCN") then
L["STRING_EXPLOSION"] = "爆炸"
L["STRING_MIRROR_IMAGE"] = "镜像"
L["STRING_CRITICAL_ONLY"] = "爆击"
elseif (gameLanguage == "zhTW") then
L["STRING_EXPLOSION"] = "爆炸"
L["STRING_MIRROR_IMAGE"] = "鏡像"
L["STRING_CRITICAL_ONLY"] = "致命"
end
LIB_OPEN_RAID_BLOODLUST = {
[2825] = true, --bloodlust
[32182] = true, --heroism
[80353] = true, --timewarp
[90355] = true, --ancient hysteria
[309658] = true, --current exp drums
}
LIB_OPEN_RAID_MYTHICKEYSTONE_ITEMID = 180653
LIB_OPEN_RAID_AUGMENTATED_RUNE = 347901
LIB_OPEN_RAID_COVENANT_ICONS = {
[[Interface\ICONS\UI_Sigil_Kyrian]], --kyrian
[[Interface\ICONS\UI_Sigil_Venthyr]], --venthyr
[[Interface\ICONS\UI_Sigil_NightFae]], --nightfae
[[Interface\ICONS\UI_Sigil_Necrolord]], --necrolords
}
--which gear slots can be enchanted on the latest retail version of the game
--when the value is a number, the slot only receives enchants for a specific attribute
LIB_OPEN_RAID_ENCHANT_SLOTS = {
--[INVSLOT_NECK] = true,
[INVSLOT_BACK] = true, --for all
[INVSLOT_CHEST] = true, --for all
[INVSLOT_FINGER1] = true, --for all
[INVSLOT_FINGER2] = true, --for all
[INVSLOT_MAINHAND] = true, --for all
[INVSLOT_FEET] = 2, --agility only
[INVSLOT_WRIST] = 1, --intellect only
[INVSLOT_HAND] = 3, --strenth only
}
-- how to get the enchantId:
-- local itemLink = GetInventoryItemLink("player", slotId)
-- local enchandId = select(3, strsplit(":", itemLink))
-- print("enchantId:", enchandId)
LIB_OPEN_RAID_ENCHANT_IDS = {
--FEET
--[6207] = INVSLOT_FEET, --[Enchant Boots - Speed of Soul]
[6211] = INVSLOT_FEET, --[Enchant Boots - Eternal Agility] + 15 agi
[6212] = INVSLOT_FEET, --[Enchant Boots - Agile Soulwalker] + 10 agi
--WRIST
--[6222] = INVSLOT_WRIST, [Enchant Bracers - Shaded Hearthing]
[6219] = INVSLOT_WRIST, --[Enchant Bracers - Illuminated Soul] + 10 int
[6220] = INVSLOT_WRIST, --[Enchant Bracers - Eternal Intellect] + 15 int
--HAND
--[6205] = INVSLOT_HAND, --[Enchant Gloves - Shadowlands Gathering]
[6209] = INVSLOT_HAND, --[Enchant Gloves - Strength of Soul] +10 str
[6210] = INVSLOT_HAND, --[Enchant Gloves - Eternal Strength] +15 str
--FINGER
[6164] = INVSLOT_FINGER1, --[Enchant Ring - Tenet of Critical Strike] +16
[6166] = INVSLOT_FINGER1, --[Enchant Ring - Tenet of Haste] +16
[6168] = INVSLOT_FINGER1, --[Enchant Ring - Tenet of Mastery] +16
[6170] = INVSLOT_FINGER1, --[Enchant Ring - Tenet of Versatility] +16
--BACK
[6202] = INVSLOT_BACK, --[Enchant Cloak - Fortified Speed] +20 stam +30 speed
[6203] = INVSLOT_BACK, --[Enchant Cloak - Fortified Avoidance] +20 stam +30 avoidance
[6204] = INVSLOT_BACK, --[Enchant Cloak - Fortified Leech]
[6208] = INVSLOT_BACK, --[Enchant Cloak - Soul Vitality]
--CHEST
[6213] = INVSLOT_CHEST, --[Enchant Chest - Eternal Bulwark] +25 armor +20 agi or str
[6214] = INVSLOT_CHEST, --[Enchant Chest - Eternal Skirmish] +20 agi or str +more white damage
[6217] = INVSLOT_CHEST, --[Enchant Chest - Eternal Bounds] +20 int + 6% mana
[6216] = INVSLOT_CHEST, --[Enchant Chest - Sacred Stats] +20 all stats
[6230] = INVSLOT_CHEST, --[Enchant Chest - Eternal Stats] +30 all stats
--MAINHAND
[6223] = INVSLOT_MAINHAND, --[Enchant Weapon - Lightless Force] + shadow wave damage
[6226] = INVSLOT_MAINHAND, --[Enchant Weapon - Eternal Grace] + burst of healing done
[6227] = INVSLOT_MAINHAND, --[Enchant Weapon - Ascended Vigor] + healing received increased
[6228] = INVSLOT_MAINHAND, --[Enchant Weapon - Sinful Revelation] + 6% bleed damage
[6229] = INVSLOT_MAINHAND, --[Enchant Weapon - Celestial Guidance] + 5% agility
[6243] = INVSLOT_MAINHAND, --[Runeforging: Rune of Hysteria]
[3370] = INVSLOT_MAINHAND, --[Runeforging: Rune of Razorice]
[6241] = INVSLOT_MAINHAND, --[Runeforging: Rune of Sanguination]
[6242] = INVSLOT_MAINHAND, --[Runeforging: Rune of Spellwarding]
[6245] = INVSLOT_MAINHAND, --[Runeforging: Rune of the Apocalypse]
[3368] = INVSLOT_MAINHAND, --[Runeforging: Rune of the Fallen Crusader]
[3847] = INVSLOT_MAINHAND, --[Runeforging: Rune of the Stoneskin Gargoyle]
[6244] = INVSLOT_MAINHAND, --[Runeforging: Rune of Unending Thirst]
}
-- how to get the gemId:
-- local itemLink = GetInventoryItemLink("player", slotId)
-- local gemId = select(4, strsplit(":", itemLink))
-- print("gemId:", gemId)
LIB_OPEN_RAID_GEM_IDS = {
[173126] = true, --Straddling Jewel Doublet (green, +12 speed)
[173125] = true, --Revitalizing Jewel Doublet (green, +100 health)
[173130] = true, --Masterful Jewel Cluster (blue, master)
[173129] = true, --Versatile Jewel Cluster (blue, versatility)
[173127] = true, --Deadly Jewel Cluster (blue, crit)
[173128] = true, --Quick Jewel Cluster (blue, haste)
[168636] = true, --Leviathan's Eye of Strength (purple, strength)
[168638] = true, --Leviathan's Eye of Intellect (purple, intellect)
[169220] = true, --Straddling Sage Agate (blue, movement speed)
}
--/dump GetWeaponEnchantInfo()
LIB_OPEN_RAID_WEAPON_ENCHANT_IDS = {
[6188] = true, --shadowcore oil
[6190] = true, --embalmer's oil
[6201] = true, --weighted
[6200] = true, --sharpened
[5400] = true, --flametongue
[5401] = true, --windfury
}
--buff spellId, the value of the food is the tier level
LIB_OPEN_RAID_FOOD_BUFF = {
[259454] = 1, --(agility) Feast of Gluttonous Hedonism
[308434] = 1, --(critical) Phantasmal Souffle and Fries
[308397] = 1, --(critical +18) Butterscotch Marinated Ribs
[308400] = 1, --(critical +30) Spinefin Souffle and Fries
[308488] = 1, --(haste) Tenebrous Crown Roast Aspic
[308404] = 1, --(haste +18) Cinnamon Bonefish Stew
[308405] = 1, --(haste +30) Tenebrous Crown Roast Aspic
[308506] = 1, --(mastery) Crawler Ravioli with Apple Sauce
[308412] = 1, --(mastery +18) Meaty Apple Dumplings
[308413] = 1, --(mastery +30) Iridescent Ravioli with Apple Sauce
[308525] = 1, --(stamina) Banana Beef Pudding
[308414] = 1, --(stamina +14) Pickled Meat Smoothie
[308415] = 1, --(stamina +22) Banana Beef Pudding
[308514] = 1, --(versatility) Steak a la Mode
[308425] = 1, --(versatility +18) Sweet Silvergill Sausages
[308426] = 1, --(versatility +30) Steak a la Mode
[308419] = 1, --(periodicaly damage) Smothered Shank
[327715] = 1, --(speed) Fried Bonefish
--feasts
[327706] = 2, --strength +20
[327707] = 2, --stamina +20
[327708] = 2, --intellect +20
[327709] = 2, --agility +20
[327704] = 2, --intellect +18
[327701] = 2, --strength +18
[327705] = 2, --agility +18
}
LIB_OPEN_RAID_FLASK_BUFF = {
[307185] = true, --Spectral Flask of Power
[307187] = true, --Spectral Stamina Flask
[307166] = true, --Eternal Flask
}
LIB_OPEN_RAID_MELEE_SPECS = {
[251] = "DEATHKNIGHT",
[252] = "DEATHKNIGHT",
[577] = "DEMONHUNTER",
[103] = "DRUID",
--[255] = "Survival", --not in the list due to the long interrupt time
[269] = "MONK",
[70] = "PALADIN",
[259] = "ROGUE",
[260] = "ROGUE",
[261] = "ROGUE",
[263] = "SHAMAN",
[71] = "WARRIOR",
[72] = "WARRIOR",
}
--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
-- 4 raid defensive cooldown
-- 5 personal utility cooldown
-- 6 interrupt
--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
[15487] = {class = "PRIEST", specs = {258}, cooldown = 45, silence = 4, talent = false, cooldownWithTalent = 30, cooldownTalentId = 23137, type = 6, charges = 1}, --Silence (shadow) Last Word Talent to reduce cooldown in 15 seconds
[1766] = {class = "ROGUE", specs = {259, 260, 261}, cooldown = 15, silence = 5, talent = false, cooldownWithTalent = false, cooldownTalentId = false, type = 6, charges = 1}, --Kick
[96231] = {class = "PALADIN", specs = {66, 70}, cooldown = 15, silence = 4, talent = false, cooldownWithTalent = false, cooldownTalentId = false, type = 6, charges = 1}, --Rebuke (protection and retribution)
[116705] = {class = "MONK", specs = {268, 269}, cooldown = 15, silence = 4, talent = false, cooldownWithTalent = false, cooldownTalentId = false, type = 6, charges = 1}, --Spear Hand Strike (brewmaster and windwalker)
[57994] = {class = "SHAMAN", specs = {262, 263, 264}, cooldown = 12, silence = 3, talent = false, cooldownWithTalent = false, cooldownTalentId = false, type = 6, charges = 1}, --Wind Shear
[47528] = {class = "DEATHKNIGHT", specs = {250, 251, 252}, cooldown = 15, silence = 3, talent = false, cooldownWithTalent = false, cooldownTalentId = false, type = 6, charges = 1}, --Mind Freeze
[106839] = {class = "DRUID", specs = {103, 104}, cooldown = 15, silence = 4, talent = false, cooldownWithTalent = false, cooldownTalentId = false, type = 6, charges = 1}, --Skull Bash (feral, guardian)
[78675] = {class = "DRUID", specs = {102}, cooldown = 60, silence = 8, talent = false, cooldownWithTalent = false, cooldownTalentId = false, type = 6, charges = 1}, --Solar Beam (balance)
[147362] = {class = "HUNTER", specs = {253, 254}, cooldown = 24, silence = 3, talent = false, cooldownWithTalent = false, cooldownTalentId = false, type = 6, charges = 1}, --Counter Shot (beast mastery, marksmanship)
[187707] = {class = "HUNTER", specs = {255}, cooldown = 15, silence = 3, talent = false, cooldownWithTalent = false, cooldownTalentId = false, type = 6, charges = 1}, --Muzzle (survival)
[183752] = {class = "DEMONHUNTER", specs = {577, 581}, cooldown = 15, silence = 3, talent = false, cooldownWithTalent = false, cooldownTalentId = false, type = 6, charges = 1}, --Disrupt
[19647] = {class = "WARLOCK", specs = {265, 266, 267}, cooldown = 24, silence = 6, talent = false, cooldownWithTalent = false, cooldownTalentId = false, pet = 417, type = 6, charges = 1}, --Spell Lock (pet felhunter ability)
[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
-- 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
-- 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
-- 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
-- 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
-- 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
-- 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
-- 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
-- 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
-- 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
-- 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
-- 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
-- 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
In here you find a list of spells which has its name changed to give more information to the player
you may add into the list any other parameter your addon uses declaring for example 'icon = ' or 'texcoord = ' etc.
Implamentation Example:
if (LIB_OPEN_RAID_SPELL_CUSTOM_NAMES) then
for spellId, customTable in pairs(LIB_OPEN_RAID_SPELL_CUSTOM_NAMES) do
local name = customTable.name
if (name) then
MyCustomSpellTable[spellId] = name
end
end
end
--]=]
LIB_OPEN_RAID_SPELL_CUSTOM_NAMES = {} --default fallback
if (GetBuildInfo():match ("%d") == "1") then
LIB_OPEN_RAID_SPELL_CUSTOM_NAMES = {}
elseif (GetBuildInfo():match ("%d") == "2") then
LIB_OPEN_RAID_SPELL_CUSTOM_NAMES = {}
elseif (GetBuildInfo():match ("%d") == "3") then
LIB_OPEN_RAID_SPELL_CUSTOM_NAMES = {}
else
LIB_OPEN_RAID_SPELL_CUSTOM_NAMES = {
[44461] = {name = GetSpellInfo(44461) .. " (" .. L["STRING_EXPLOSION"] .. ")"}, --Living Bomb (explosion)
[59638] = {name = GetSpellInfo(59638) .. " (" .. L["STRING_MIRROR_IMAGE"] .. ")"}, --Mirror Image's Frost Bolt (mage)
[88082] = {name = GetSpellInfo(88082) .. " (" .. L["STRING_MIRROR_IMAGE"] .. ")"}, --Mirror Image's Fireball (mage)
[94472] = {name = GetSpellInfo(94472) .. " (" .. L["STRING_CRITICAL_ONLY"] .. ")"}, --Atonement critical hit (priest)
[33778] = {name = GetSpellInfo(33778) .. " (" .. L["STRING_BLOOM"] .. ")"}, --lifebloom (bloom)
[121414] = {name = GetSpellInfo(121414) .. " (" .. L["STRING_GLAIVE"] .. " #1)"}, --glaive toss (hunter)
[120761] = {name = GetSpellInfo(120761) .. " (" .. L["STRING_GLAIVE"] .. " #2)"}, --glaive toss (hunter)
[212739] = {name = GetSpellInfo(212739) .. " (" .. L["STRING_MAINTARGET"] .. ")"}, --DK Epidemic
[215969] = {name = GetSpellInfo(215969) .. " (" .. L["STRING_AOE"] .. ")"}, --DK Epidemic
[70890] = {name = GetSpellInfo(70890) .. " (" .. L["STRING_SHADOW"] .. ")"}, --DK Scourge Strike
[55090] = {name = GetSpellInfo(55090) .. " (" .. L["STRING_PHYSICAL"] .. ")"}, --DK Scourge Strike
[49184] = {name = GetSpellInfo(49184) .. " (" .. L["STRING_MAINTARGET"] .. ")"}, --DK Howling Blast
[237680] = {name = GetSpellInfo(237680) .. " (" .. L["STRING_AOE"] .. ")"}, --DK Howling Blast
[228649] = {name = GetSpellInfo(228649) .. " (" .. L["STRING_PASSIVE"] .. ")"}, --Monk Mistweaver Blackout kick - Passive Teachings of the Monastery
[339538] = {name = GetSpellInfo(224266) .. " (" .. L["STRING_TEMPLAR_VINDCATION"] .. ")"}, --
[343355] = {name = GetSpellInfo(343355) .. " (" .. L["STRING_PROC"] .. ")"}, --shadow priest's void bold proc
--shadowlands trinkets
[345020] = {name = GetSpellInfo(345020) .. " (" .. L["STRING_TRINKET"] .. ")"},
}
end
--interrupt list using proxy from cooldown list
--this list should be expansion and combatlog safe
LIB_OPEN_RAID_SPELL_INTERRUPT = {
[6552] = LIB_OPEN_RAID_COOLDOWNS_INFO[6552], --Pummel
[2139] = LIB_OPEN_RAID_COOLDOWNS_INFO[2139], --Counterspell
[15487] = LIB_OPEN_RAID_COOLDOWNS_INFO[15487], --Silence (shadow) Last Word Talent to reduce cooldown in 15 seconds
[1766] = LIB_OPEN_RAID_COOLDOWNS_INFO[1766], --Kick
[96231] = LIB_OPEN_RAID_COOLDOWNS_INFO[96231], --Rebuke (protection and retribution)
[116705] = LIB_OPEN_RAID_COOLDOWNS_INFO[116705], --Spear Hand Strike (brewmaster and windwalker)
[57994] = LIB_OPEN_RAID_COOLDOWNS_INFO[57994], --Wind Shear
[47528] = LIB_OPEN_RAID_COOLDOWNS_INFO[47528], --Mind Freeze
[106839] = LIB_OPEN_RAID_COOLDOWNS_INFO[106839], --Skull Bash (feral, guardian)
[78675] = LIB_OPEN_RAID_COOLDOWNS_INFO[78675], --Solar Beam (balance)
[147362] = LIB_OPEN_RAID_COOLDOWNS_INFO[147362], --Counter Shot (beast mastery, marksmanship)
[187707] = LIB_OPEN_RAID_COOLDOWNS_INFO[187707], --Muzzle (survival)
[183752] = LIB_OPEN_RAID_COOLDOWNS_INFO[183752], --Disrupt
[19647] = LIB_OPEN_RAID_COOLDOWNS_INFO[19647], --Spell Lock (pet felhunter ability)
[89766] = LIB_OPEN_RAID_COOLDOWNS_INFO[89766], --Axe Toss (pet felguard ability)
}
--override list of spells with more than one effect, example: multiple types of polymorph
LIB_OPEN_RAID_SPELL_DEFAULT_IDS = {
--stampeding roar (druid)
[106898] = 77761,
[77764] = 77761, --"Uncategorized" on wowhead, need to test if still exists
--spell lock (warlock pet)
[119910] = 19647, --"Uncategorized" on wowhead
[132409] = 19647, --"Uncategorized" on wowhead
--[115781] = 19647, --optical blast used by old talent observer, still a thing?
--[251523] = 19647, --wowhead list this spell as sibling spell
--[251922] = 19647, --wowhead list this spell as sibling spell
--axe toss (warlock pet)
[119914] = 89766, --"Uncategorized" on wowhead
[347008] = 89766, --"Uncategorized" on wowhead
--hex (shaman)
[210873] = 51514, --Compy
[211004] = 51514, --Spider
[211010] = 51514, --Snake
[211015] = 51514, --Cockroach
[269352] = 51514, --Skeletal Hatchling
[277778] = 51514, --Zandalari Tendonripper
[277784] = 51514, --Wicker Mongrel
[309328] = 51514, --Living Honey
--typhoon
--[61391] = 132469,
--metamorphosis
[191427] = 200166,
--187827 vengeance need to test these spellIds
--191427 havoc
}
--need to add mass dispell (32375)
LIB_OPEN_RAID_DATABASE_LOADED = true
+568
View File
@@ -0,0 +1,568 @@
--data for wrath of the lich king expansion
local versionString, revision, launchDate, gameVersion = GetBuildInfo()
if (gameVersion >= 40000 or gameVersion < 30000) then
return
end
--localization
local gameLanguage = GetLocale()
local L = { --default localization
["STRING_EXPLOSION"] = "explosion",
["STRING_MIRROR_IMAGE"] = "Mirror Image",
["STRING_CRITICAL_ONLY"] = "critical",
["STRING_BLOOM"] = "Bloom", --lifebloom 'bloom' healing
["STRING_GLAIVE"] = "Glaive", --DH glaive toss
["STRING_MAINTARGET"] = "Main Target",
["STRING_AOE"] = "AoE", --multi targets
["STRING_SHADOW"] = "Shadow", --the spell school 'shadow'
["STRING_PHYSICAL"] = "Physical", --the spell school 'physical'
["STRING_PASSIVE"] = "Passive", --passive spell
["STRING_TEMPLAR_VINDCATION"] = "Templar's Vindication", --paladin spell
["STRING_PROC"] = "proc", --spell proc
["STRING_TRINKET"] = "Trinket", --trinket
}
if (gameLanguage == "enUS") then
--default language
elseif (gameLanguage == "deDE") then
L["STRING_EXPLOSION"] = "Explosion"
L["STRING_MIRROR_IMAGE"] = "Bilder spiegeln"
L["STRING_CRITICAL_ONLY"] = "kritisch"
elseif (gameLanguage == "esES") then
L["STRING_EXPLOSION"] = "explosión"
L["STRING_MIRROR_IMAGE"] = "Imagen de espejo"
L["STRING_CRITICAL_ONLY"] = "crítico"
elseif (gameLanguage == "esMX") then
L["STRING_EXPLOSION"] = "explosión"
L["STRING_MIRROR_IMAGE"] = "Imagen de espejo"
L["STRING_CRITICAL_ONLY"] = "crítico"
elseif (gameLanguage == "frFR") then
L["STRING_EXPLOSION"] = "explosion"
L["STRING_MIRROR_IMAGE"] = "Effet miroir"
L["STRING_CRITICAL_ONLY"] = "critique"
elseif (gameLanguage == "itIT") then
L["STRING_EXPLOSION"] = "esplosione"
L["STRING_MIRROR_IMAGE"] = "Immagine Speculare"
L["STRING_CRITICAL_ONLY"] = "critico"
elseif (gameLanguage == "koKR") then
L["STRING_EXPLOSION"] = "폭발"
L["STRING_MIRROR_IMAGE"] = "미러 이미지"
L["STRING_CRITICAL_ONLY"] = "치명타"
elseif (gameLanguage == "ptBR") then
L["STRING_EXPLOSION"] = "explosão"
L["STRING_MIRROR_IMAGE"] = "Imagem Espelhada"
L["STRING_CRITICAL_ONLY"] = "critico"
elseif (gameLanguage == "ruRU") then
L["STRING_EXPLOSION"] = "взрыв"
L["STRING_MIRROR_IMAGE"] = "Зеркальное изображение"
L["STRING_CRITICAL_ONLY"] = "критический"
elseif (gameLanguage == "zhCN") then
L["STRING_EXPLOSION"] = "爆炸"
L["STRING_MIRROR_IMAGE"] = "镜像"
L["STRING_CRITICAL_ONLY"] = "爆击"
elseif (gameLanguage == "zhTW") then
L["STRING_EXPLOSION"] = "爆炸"
L["STRING_MIRROR_IMAGE"] = "鏡像"
L["STRING_CRITICAL_ONLY"] = "致命"
end
LIB_OPEN_RAID_FOOD_BUFF = {} --default
LIB_OPEN_RAID_FLASK_BUFF = {} --default
LIB_OPEN_RAID_BLOODLUST = {
[2825] = true, --bloodlust
[32182] = true, --heroism
[80353] = true, --timewarp
[90355] = true, --ancient hysteria
[309658] = true, --current exp drums
}
--which gear slots can be enchanted on the latest retail version of the game
--when the value is a number, the slot only receives enchants for a specific attribute
LIB_OPEN_RAID_ENCHANT_SLOTS = {
--[INVSLOT_NECK] = true,
[INVSLOT_BACK] = true, --for all
[INVSLOT_CHEST] = true, --for all
[INVSLOT_FINGER1] = true, --for all
[INVSLOT_FINGER2] = true, --for all
[INVSLOT_MAINHAND] = true, --for all
[INVSLOT_FEET] = 2, --agility only
[INVSLOT_WRIST] = 1, --intellect only
[INVSLOT_HAND] = 3, --strenth only
}
LIB_OPEN_RAID_MYTHICKEYSTONE_ITEMID = 180653
LIB_OPEN_RAID_AUGMENTATED_RUNE = 0
LIB_OPEN_RAID_COVENANT_ICONS = {}
LIB_OPEN_RAID_ENCHANT_IDS = {}
LIB_OPEN_RAID_GEM_IDS = {}
LIB_OPEN_RAID_WEAPON_ENCHANT_IDS = {}
LIB_OPEN_RAID_FOOD_BUFF = {}
LIB_OPEN_RAID_FLASK_BUFF = {}
LIB_OPEN_RAID_MELEE_SPECS = {
[251] = "DEATHKNIGHT",
[252] = "DEATHKNIGHT",
[577] = "DEMONHUNTER",
[103] = "DRUID",
--[255] = "Survival", --not in the list due to the long interrupt time
[269] = "MONK",
[70] = "PALADIN",
[259] = "ROGUE",
[260] = "ROGUE",
[261] = "ROGUE",
[263] = "SHAMAN",
[71] = "WARRIOR",
[72] = "WARRIOR",
}
--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
-- 4 raid defensive cooldown
-- 5 personal utility cooldown
-- 6 interrupt
--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
[15487] = {class = "PRIEST", specs = {258}, cooldown = 45, silence = 4, talent = false, cooldownWithTalent = 30, cooldownTalentId = 23137, type = 6, charges = 1}, --Silence (shadow) Last Word Talent to reduce cooldown in 15 seconds
[1766] = {class = "ROGUE", specs = {259, 260, 261}, cooldown = 15, silence = 5, talent = false, cooldownWithTalent = false, cooldownTalentId = false, type = 6, charges = 1}, --Kick
[96231] = {class = "PALADIN", specs = {66, 70}, cooldown = 15, silence = 4, talent = false, cooldownWithTalent = false, cooldownTalentId = false, type = 6, charges = 1}, --Rebuke (protection and retribution)
[116705] = {class = "MONK", specs = {268, 269}, cooldown = 15, silence = 4, talent = false, cooldownWithTalent = false, cooldownTalentId = false, type = 6, charges = 1}, --Spear Hand Strike (brewmaster and windwalker)
[57994] = {class = "SHAMAN", specs = {262, 263, 264}, cooldown = 12, silence = 3, talent = false, cooldownWithTalent = false, cooldownTalentId = false, type = 6, charges = 1}, --Wind Shear
[47528] = {class = "DEATHKNIGHT", specs = {250, 251, 252}, cooldown = 15, silence = 3, talent = false, cooldownWithTalent = false, cooldownTalentId = false, type = 6, charges = 1}, --Mind Freeze
[106839] = {class = "DRUID", specs = {103, 104}, cooldown = 15, silence = 4, talent = false, cooldownWithTalent = false, cooldownTalentId = false, type = 6, charges = 1}, --Skull Bash (feral, guardian)
[78675] = {class = "DRUID", specs = {102}, cooldown = 60, silence = 8, talent = false, cooldownWithTalent = false, cooldownTalentId = false, type = 6, charges = 1}, --Solar Beam (balance)
[147362] = {class = "HUNTER", specs = {253, 254}, cooldown = 24, silence = 3, talent = false, cooldownWithTalent = false, cooldownTalentId = false, type = 6, charges = 1}, --Counter Shot (beast mastery, marksmanship)
[187707] = {class = "HUNTER", specs = {255}, cooldown = 15, silence = 3, talent = false, cooldownWithTalent = false, cooldownTalentId = false, type = 6, charges = 1}, --Muzzle (survival)
[183752] = {class = "DEMONHUNTER", specs = {577, 581}, cooldown = 15, silence = 3, talent = false, cooldownWithTalent = false, cooldownTalentId = false, type = 6, charges = 1}, --Disrupt
[19647] = {class = "WARLOCK", specs = {265, 266, 267}, cooldown = 24, silence = 6, talent = false, cooldownWithTalent = false, cooldownTalentId = false, pet = 417, type = 6, charges = 1}, --Spell Lock (pet felhunter ability)
[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
-- 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
-- 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
-- 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
-- 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
-- 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
-- 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
-- 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
-- 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
-- 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
-- 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
-- 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
-- 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
In here you find a list of spells which has its name changed to give more information to the player
you may add into the list any other parameter your addon uses declaring for example 'icon = ' or 'texcoord = ' etc.
Implamentation Example:
if (LIB_OPEN_RAID_SPELL_CUSTOM_NAMES) then
for spellId, customTable in pairs(LIB_OPEN_RAID_SPELL_CUSTOM_NAMES) do
local name = customTable.name
if (name) then
MyCustomSpellTable[spellId] = name
end
end
end
--]=]
LIB_OPEN_RAID_SPELL_CUSTOM_NAMES = {} --default fallback
if (GetBuildInfo():match ("%d") == "1") then
LIB_OPEN_RAID_SPELL_CUSTOM_NAMES = {}
elseif (GetBuildInfo():match ("%d") == "2") then
LIB_OPEN_RAID_SPELL_CUSTOM_NAMES = {}
elseif (GetBuildInfo():match ("%d") == "3") then
LIB_OPEN_RAID_SPELL_CUSTOM_NAMES = {}
else
LIB_OPEN_RAID_SPELL_CUSTOM_NAMES = {
[44461] = {name = GetSpellInfo(44461) .. " (" .. L["STRING_EXPLOSION"] .. ")"}, --Living Bomb (explosion)
[59638] = {name = GetSpellInfo(59638) .. " (" .. L["STRING_MIRROR_IMAGE"] .. ")"}, --Mirror Image's Frost Bolt (mage)
[88082] = {name = GetSpellInfo(88082) .. " (" .. L["STRING_MIRROR_IMAGE"] .. ")"}, --Mirror Image's Fireball (mage)
[94472] = {name = GetSpellInfo(94472) .. " (" .. L["STRING_CRITICAL_ONLY"] .. ")"}, --Atonement critical hit (priest)
[33778] = {name = GetSpellInfo(33778) .. " (" .. L["STRING_BLOOM"] .. ")"}, --lifebloom (bloom)
[121414] = {name = GetSpellInfo(121414) .. " (" .. L["STRING_GLAIVE"] .. " #1)"}, --glaive toss (hunter)
[120761] = {name = GetSpellInfo(120761) .. " (" .. L["STRING_GLAIVE"] .. " #2)"}, --glaive toss (hunter)
[212739] = {name = GetSpellInfo(212739) .. " (" .. L["STRING_MAINTARGET"] .. ")"}, --DK Epidemic
[215969] = {name = GetSpellInfo(215969) .. " (" .. L["STRING_AOE"] .. ")"}, --DK Epidemic
[70890] = {name = GetSpellInfo(70890) .. " (" .. L["STRING_SHADOW"] .. ")"}, --DK Scourge Strike
[55090] = {name = GetSpellInfo(55090) .. " (" .. L["STRING_PHYSICAL"] .. ")"}, --DK Scourge Strike
[49184] = {name = GetSpellInfo(49184) .. " (" .. L["STRING_MAINTARGET"] .. ")"}, --DK Howling Blast
[237680] = {name = GetSpellInfo(237680) .. " (" .. L["STRING_AOE"] .. ")"}, --DK Howling Blast
[228649] = {name = GetSpellInfo(228649) .. " (" .. L["STRING_PASSIVE"] .. ")"}, --Monk Mistweaver Blackout kick - Passive Teachings of the Monastery
[339538] = {name = GetSpellInfo(224266) .. " (" .. L["STRING_TEMPLAR_VINDCATION"] .. ")"}, --
[343355] = {name = GetSpellInfo(343355) .. " (" .. L["STRING_PROC"] .. ")"}, --shadow priest's void bold proc
--shadowlands trinkets
[345020] = {name = GetSpellInfo(345020) .. " (" .. L["STRING_TRINKET"] .. ")"},
}
end
--interrupt list using proxy from cooldown list
--this list should be expansion and combatlog safe
LIB_OPEN_RAID_SPELL_INTERRUPT = {
[6552] = LIB_OPEN_RAID_COOLDOWNS_INFO[6552], --Pummel
[2139] = LIB_OPEN_RAID_COOLDOWNS_INFO[2139], --Counterspell
[15487] = LIB_OPEN_RAID_COOLDOWNS_INFO[15487], --Silence (shadow) Last Word Talent to reduce cooldown in 15 seconds
[1766] = LIB_OPEN_RAID_COOLDOWNS_INFO[1766], --Kick
[96231] = LIB_OPEN_RAID_COOLDOWNS_INFO[96231], --Rebuke (protection and retribution)
[116705] = LIB_OPEN_RAID_COOLDOWNS_INFO[116705], --Spear Hand Strike (brewmaster and windwalker)
[57994] = LIB_OPEN_RAID_COOLDOWNS_INFO[57994], --Wind Shear
[47528] = LIB_OPEN_RAID_COOLDOWNS_INFO[47528], --Mind Freeze
[106839] = LIB_OPEN_RAID_COOLDOWNS_INFO[106839], --Skull Bash (feral, guardian)
[78675] = LIB_OPEN_RAID_COOLDOWNS_INFO[78675], --Solar Beam (balance)
[147362] = LIB_OPEN_RAID_COOLDOWNS_INFO[147362], --Counter Shot (beast mastery, marksmanship)
[187707] = LIB_OPEN_RAID_COOLDOWNS_INFO[187707], --Muzzle (survival)
[183752] = LIB_OPEN_RAID_COOLDOWNS_INFO[183752], --Disrupt
[19647] = LIB_OPEN_RAID_COOLDOWNS_INFO[19647], --Spell Lock (pet felhunter ability)
[89766] = LIB_OPEN_RAID_COOLDOWNS_INFO[89766], --Axe Toss (pet felguard ability)
}
--override list of spells with more than one effect, example: multiple types of polymorph
LIB_OPEN_RAID_SPELL_DEFAULT_IDS = {
--stampeding roar (druid)
[106898] = 77761,
[77764] = 77761, --"Uncategorized" on wowhead, need to test if still exists
--spell lock (warlock pet)
[119910] = 19647, --"Uncategorized" on wowhead
[132409] = 19647, --"Uncategorized" on wowhead
--[115781] = 19647, --optical blast used by old talent observer, still a thing?
--[251523] = 19647, --wowhead list this spell as sibling spell
--[251922] = 19647, --wowhead list this spell as sibling spell
--axe toss (warlock pet)
[119914] = 89766, --"Uncategorized" on wowhead
[347008] = 89766, --"Uncategorized" on wowhead
--hex (shaman)
[210873] = 51514, --Compy
[211004] = 51514, --Spider
[211010] = 51514, --Snake
[211015] = 51514, --Cockroach
[269352] = 51514, --Skeletal Hatchling
[277778] = 51514, --Zandalari Tendonripper
[277784] = 51514, --Wicker Mongrel
[309328] = 51514, --Living Honey
--typhoon
--[61391] = 132469,
--metamorphosis
[191427] = 200166,
--187827 vengeance need to test these spellIds
--191427 havoc
}
--need to add mass dispell (32375)
LIB_OPEN_RAID_DATABASE_LOADED = true
+3 -1
View File
@@ -3,5 +3,7 @@
<Script file="Functions.lua" />
<Script file="GetPlayerInformation.lua" />
<Script file="Deprecated.lua" />
<Script file="ThingsToMantain.lua" />
<Script file="ThingsToMantain_Dragonflight.lua" />
<Script file="ThingsToMantain_Shadowlands.lua" />
<Script file="ThingsToMantain_Wrath.lua" />
</Ui>
+1 -1
View File
@@ -3480,7 +3480,7 @@ function _detalhes:envia_relatorio (linhas, custom)
local segmentTime = ""
if (combatObject) then
local combatTime = combatObject:GetCombatTime()
segmentTime = _detalhes.gump:IntegerToTimer (combatTime or 0)
segmentTime = _detalhes.gump:IntegerToTimer(combatTime or 0)
end
--effective ou active time
+1 -1
View File
@@ -4604,7 +4604,7 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1
--soft switch
_detalhes.capture_current [capture_type] = on_off
if (time) then
local schedule_id = math.random (1, 10000000)
local schedule_id = math.random(1, 10000000)
local new_schedule = _detalhes:ScheduleTimer("CaptureTimeout", time, {capture_type, schedule_id})
tinsert(_detalhes.capture_schedules, {new_schedule, schedule_id})
end
+8 -8
View File
@@ -477,7 +477,7 @@
local text = _detalhes.gump:NewLabel(frame, nil, "$parentText", "text", "0")
text:SetPoint("right", frame, "right", 0, 0)
text:SetJustifyH("right")
_detalhes:SetFontSize (text, 9.8)
_detalhes:SetFontSize(text, 9.8)
frame:SetHook("OnEnter", OnEnter)
frame:SetHook("OnLeave", OnLeave)
@@ -567,7 +567,7 @@
end
child.options.textSize = value or 9
child:SetFontSize (child.text, child.options.textSize)
child:SetFontSize(child.text, child.options.textSize)
elseif (option == "textface") then
@@ -830,8 +830,8 @@ do
-----------------------------------------------------------------------------------------------------------------------------
--now we insert all widgets created on widgets table
table.insert (widgets, window.segmentOptionLabel)
table.insert (widgets, window.segmentTypeDropdown)
table.insert(widgets, window.segmentOptionLabel)
table.insert(widgets, window.segmentTypeDropdown)
--after first call we replace this function with widgets table
PSegment.ExtraOptions = widgets
@@ -1017,8 +1017,8 @@ do
-----------------------------------------------------------------------------------------------------------------------------
--now we insert all widgets created on widgets table
table.insert (widgets, window.ClockTypeLabel)
table.insert (widgets, window.ClockTypeDropdown)
table.insert(widgets, window.ClockTypeLabel)
table.insert(widgets, window.ClockTypeDropdown)
--after first call we replace this function with widgets table
Clock.ExtraOptions = widgets
@@ -1431,8 +1431,8 @@ do
-----------------------------------------------------------------------------------------------------------------------------
--now we insert all widgets created on widgets table
table.insert (widgets, window.TimeTypeLabel)
table.insert (widgets, window.TimeTypeDropdown)
table.insert(widgets, window.TimeTypeLabel)
table.insert(widgets, window.TimeTypeDropdown)
--after first call we replace this function with widgets table
PTime.ExtraOptions = widgets
+2 -2
View File
@@ -17,7 +17,7 @@
--random name if nameless
if (not framename) then
framename = "DetailsToolbarButton" .. math.random (1, 100000)
framename = "DetailsToolbarButton" .. math.random(1, 100000)
end
--create button from template
@@ -199,7 +199,7 @@ end
f.icon:SetTexture(button.__icon)
f.title:SetText(button.__name)
f.desc:SetText(plugin_object:GetPluginDescription())
_detalhes:SetFontSize (f.desc, _detalhes.font_sizes.menus)
_detalhes:SetFontSize(f.desc, _detalhes.font_sizes.menus)
_detalhes:SetFontFace (f.desc, _detalhes.font_faces.menus)
--f.background:SetTexture(_detalhes.tooltip.menus_bg_texture)
+1 -1
View File
@@ -1024,7 +1024,7 @@ end
end
--font size
function _detalhes:SetFontSize (fontString, ...)
function _detalhes:SetFontSize(fontString, ...)
local fonte, _, flags = fontString:GetFont()
fontString:SetFont (fonte, _math_max (...), flags)
end
+2 -2
View File
@@ -24,7 +24,7 @@ function gump:NewLabel2 (parent, container, member, text, font, size, color)
newFontString:SetText(text)
if (size) then
_detalhes:SetFontSize (newFontString, size)
_detalhes:SetFontSize(newFontString, size)
end
if (color) then
@@ -491,7 +491,7 @@ end
function gump:NewScrollBar2 (master, slave, x, y)
local slider_gump = CreateFrame("Slider", master:GetName() and master:GetName() .. "SliderGump" or "DetailsSliderGump" .. math.random (1, 10000000), master)
local slider_gump = CreateFrame("Slider", master:GetName() and master:GetName() .. "SliderGump" or "DetailsSliderGump" .. math.random(1, 10000000), master)
slider_gump.scrollMax = 560 --default - tamanho da janela de fundo
-- ///// SLIDER /////
+6 -6
View File
@@ -346,7 +346,7 @@ function Details:CreateCurrentDpsFrame(parent, name)
f:SetBackdropColor(unpack(_detalhes.realtime_dps_meter.frame_settings.backdrop_color))
f:EnableMouse(true)
f:SetMovable(true)
f:SetClampedToScreen (true)
f:SetClampedToScreen(true)
f.movemeLabel = f:CreateFontString(nil, "overlay", "GameFontNormal")
f.movemeLabel:SetText("Move-Me")
@@ -467,7 +467,7 @@ function Details:CreateCurrentDpsFrame(parent, name)
local TitleString = f:CreateFontString(nil, "overlay", "GameFontNormal")
TitleString:SetPoint("top", f, "top", 0, -5)
TitleString:SetText("Details! Arena Real Time DPS Tracker")
DF:SetFontSize (TitleString, 9)
DF:SetFontSize(TitleString, 9)
local TitleBackground = f:CreateTexture(nil, "artwork")
TitleBackground:SetTexture([[Interface\Tooltips\UI-Tooltip-Background]])
TitleBackground:SetVertexColor(.1, .1, .1, .9)
@@ -500,7 +500,7 @@ function Details:CreateCurrentDpsFrame(parent, name)
--labels for mythic dungeon / group party
local labelGroupDamage = f:CreateFontString(nil, "overlay", "GameFontNormal")
labelGroupDamage:SetText("Real Time Group DPS")
DF:SetFontSize (labelGroupDamage, 14)
DF:SetFontSize(labelGroupDamage, 14)
DF:SetFontOutline (labelGroupDamage, "NONE")
local labelGroupDamage_DPS = f:CreateFontString(nil, "overlay", "GameFontNormal")
@@ -564,12 +564,12 @@ function Details:CreateCurrentDpsFrame(parent, name)
--update arena labels
DF:SetFontColor(labelPlayerTeam_DPS, _detalhes.realtime_dps_meter.font_color)
DF:SetFontFace (labelPlayerTeam_DPS, _detalhes.realtime_dps_meter.font_face)
DF:SetFontSize (labelPlayerTeam_DPS, _detalhes.realtime_dps_meter.font_size)
DF:SetFontSize(labelPlayerTeam_DPS, _detalhes.realtime_dps_meter.font_size)
DF:SetFontOutline (labelPlayerTeam_DPS, _detalhes.realtime_dps_meter.font_shadow)
DF:SetFontColor(labelYellowTeam_DPS, _detalhes.realtime_dps_meter.font_color)
DF:SetFontFace (labelYellowTeam_DPS, _detalhes.realtime_dps_meter.font_face)
DF:SetFontSize (labelYellowTeam_DPS, _detalhes.realtime_dps_meter.font_size)
DF:SetFontSize(labelYellowTeam_DPS, _detalhes.realtime_dps_meter.font_size)
DF:SetFontOutline (labelYellowTeam_DPS, _detalhes.realtime_dps_meter.font_shadow)
--wipe current data for arena
@@ -608,7 +608,7 @@ function Details:CreateCurrentDpsFrame(parent, name)
DF:SetFontColor(labelGroupDamage_DPS, _detalhes.realtime_dps_meter.font_color)
DF:SetFontFace (labelGroupDamage_DPS, _detalhes.realtime_dps_meter.font_face)
DF:SetFontSize (labelGroupDamage_DPS, _detalhes.realtime_dps_meter.font_size)
DF:SetFontSize(labelGroupDamage_DPS, _detalhes.realtime_dps_meter.font_size)
DF:SetFontOutline (labelGroupDamage_DPS, _detalhes.realtime_dps_meter.font_shadow)
--wipe current data for mythic dungeon
+3 -3
View File
@@ -1248,7 +1248,7 @@
line:SetDrawLayer("background")
line:SetPoint("left", thisButton.button, "right", -110, -3)
table.insert (actorsFrameButtons, #actorsFrameButtons+1, thisButton)
table.insert(actorsFrameButtons, #actorsFrameButtons+1, thisButton)
end
y = y + 20
@@ -1456,7 +1456,7 @@
line:SetDrawLayer("background")
line:SetPoint("left", thisButton.button, "right", -110, -3)
table.insert (actorsFrameButtons, #actorsFrameButtons+1, thisButton)
table.insert(actorsFrameButtons, #actorsFrameButtons+1, thisButton)
end
y = y + 20
@@ -1617,7 +1617,7 @@
line:SetDrawLayer("background")
line:SetPoint("left", thisButton.button, "right", -60, -3)
table.insert (spellsFrameButtons, #spellsFrameButtons+1, thisButton)
table.insert(spellsFrameButtons, #spellsFrameButtons+1, thisButton)
end
y = y + 20
+1 -1
View File
@@ -21,7 +21,7 @@ function Details:Dump (...)
if (not DetailsDumpFrame) then
DetailsDumpFrame = DetailsFramework:CreateSimplePanel(_G.UIParent)
DetailsDumpFrame:SetSize(700, 600)
DetailsDumpFrame:SetTitle ("Details! Dump Table [|cFFFF3333Ready Only|r]")
DetailsDumpFrame:SetTitle("Details! Dump Table [|cFFFF3333Ready Only|r]")
local text_editor = DetailsFramework:NewSpecialLuaEditorEntry (DetailsDumpFrame, 680, 560, "Editbox", "$parentEntry", true)
text_editor:SetPoint("topleft", DetailsDumpFrame, "topleft", 10, -30)
+5 -5
View File
@@ -253,7 +253,7 @@ function Details:CreateEventTrackerFrame(parent, name)
f:EnableMouse(true)
f:SetMovable(true)
f:SetResizable(true)
f:SetClampedToScreen (true)
f:SetClampedToScreen(true)
local LibWindow = LibStub("LibWindow-1.1")
LibWindow.RegisterConfig(f, _detalhes.event_tracker.frame)
@@ -363,11 +363,11 @@ function Details:CreateEventTrackerFrame(parent, name)
righticon:SetPoint("right", line, "right", 0, 0)
local lefttext = statusbar:CreateFontString("$parentLeftText", "overlay", "GameFontNormal")
DF:SetFontSize (lefttext, 9)
DF:SetFontSize(lefttext, 9)
lefttext:SetPoint("left", lefticon, "right", 2, 0)
local righttext = statusbar:CreateFontString("$parentRightText", "overlay", "GameFontNormal")
DF:SetFontSize (righttext, 9)
DF:SetFontSize(righttext, 9)
righttext:SetPoint("right", righticon, "left", -2, 0)
lefttext:SetJustifyH("left")
@@ -620,13 +620,13 @@ function Details:CreateEventTrackerFrame(parent, name)
--update left text
DF:SetFontColor(line.LeftText, _detalhes.event_tracker.font_color)
DF:SetFontFace (line.LeftText, _detalhes.event_tracker.font_face)
DF:SetFontSize (line.LeftText, _detalhes.event_tracker.font_size)
DF:SetFontSize(line.LeftText, _detalhes.event_tracker.font_size)
DF:SetFontOutline (line.LeftText, _detalhes.event_tracker.font_shadow)
--update right text
DF:SetFontColor(line.RightText, _detalhes.event_tracker.font_color)
DF:SetFontFace (line.RightText, _detalhes.event_tracker.font_face)
DF:SetFontSize (line.RightText, _detalhes.event_tracker.font_size)
DF:SetFontSize(line.RightText, _detalhes.event_tracker.font_size)
DF:SetFontOutline (line.RightText, _detalhes.event_tracker.font_shadow)
--adjust where the line is anchored
+32 -32
View File
@@ -3309,7 +3309,7 @@ do
tooltip_anchor:SetSize(140, 20)
tooltip_anchor:SetAlpha(0)
tooltip_anchor:SetMovable(false)
tooltip_anchor:SetClampedToScreen (true)
tooltip_anchor:SetClampedToScreen(true)
tooltip_anchor.locked = true
tooltip_anchor:SetBackdrop({bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], edgeFile = [[Interface\DialogFrame\UI-DialogBox-Border]], edgeSize = 10, insets = {left = 1, right = 1, top = 2, bottom = 1}})
tooltip_anchor:SetBackdropColor(0, 0, 0, 1)
@@ -3592,7 +3592,7 @@ function gump:CriaJanelaPrincipal (ID, instancia, criando)
-- main window config -------------------------------------------------------------------------------------------------------------------------------------------------
baseframe:SetClampedToScreen (true)
baseframe:SetClampedToScreen(true)
baseframe:SetSize(Details.new_window_size.width, Details.new_window_size.height)
baseframe:SetPoint("center", UIParent)
@@ -6224,7 +6224,7 @@ function Details:GetSegmentInfo(index)
end
local p = Details:GetBossPortrait (combat.is_boss.mapid, combat.is_boss.index)
local p = Details:GetBossPortrait(combat.is_boss.mapid, combat.is_boss.index)
if (p) then
portrait = p
end
@@ -6357,17 +6357,17 @@ local buildSegmentTooltip = function(self, deltaTime)
if (isMythicOverallSegment) then
--mostrar o tempo da dungeon
local totalTime = combat_time
gameCooltip:AddLine(zoneName .. " +" .. mythicLevel .. " (" .. Loc["STRING_SEGMENTS_LIST_OVERALL"] .. ")", Details.gump:IntegerToTimer (endedAt - startedAt), 1, dungeon_color)
gameCooltip:AddLine(zoneName .. " +" .. mythicLevel .. " (" .. Loc["STRING_SEGMENTS_LIST_OVERALL"] .. ")", Details.gump:IntegerToTimer(endedAt - startedAt), 1, dungeon_color)
gameCooltip:AddIcon([[Interface\AddOns\Details\images\icons]], "main", "left", 14, 10, 479/512, 510/512, 24/512, 51/512)
gameCooltip:AddLine(zoneName .. " +" .. mythicLevel .. " (" .. Loc["STRING_SEGMENTS_LIST_OVERALL"] .. ")", nil, 2, "white", "white")
else
if (segmentID == "trashoverall") then
local trashIcon = "|TInterface\\AddOns\\Details\\images\\icons:16:16:0:0:512:512:14:58:98:160|t"
gameCooltip:AddLine(trashIcon .. "" .. (encounterName or Loc["STRING_UNKNOW"]) .. " (" .. Loc["STRING_SEGMENTS_LIST_TRASH"] .. ")", Details.gump:IntegerToTimer (endedAt - startedAt), 1, dungeon_color, "gray")
gameCooltip:AddLine(trashIcon .. "" .. (encounterName or Loc["STRING_UNKNOW"]) .. " (" .. Loc["STRING_SEGMENTS_LIST_TRASH"] .. ")", Details.gump:IntegerToTimer(endedAt - startedAt), 1, dungeon_color, "gray")
gameCooltip:AddLine((encounterName or Loc["STRING_UNKNOW"]) .. " (" .. Loc["STRING_SEGMENTS_LIST_TRASH"] .. ")", nil, 2, "white", "white")
else
local skull = "|TInterface\\AddOns\\Details\\images\\icons:16:16:0:0:512:512:496:512:0:16|t"
gameCooltip:AddLine(skull .. "" .. (encounterName or Loc["STRING_UNKNOW"]) .. " (" .. Loc["STRING_SEGMENTS_LIST_BOSS"] .. ")", Details.gump:IntegerToTimer (combat_time), 1, dungeon_color, "gray")
gameCooltip:AddLine(skull .. "" .. (encounterName or Loc["STRING_UNKNOW"]) .. " (" .. Loc["STRING_SEGMENTS_LIST_BOSS"] .. ")", Details.gump:IntegerToTimer(combat_time), 1, dungeon_color, "gray")
gameCooltip:AddLine((encounterName or Loc["STRING_UNKNOW"]) .. " (" .. Loc["STRING_SEGMENTS_LIST_BOSS"] .. ")", nil, 2, "white", "white")
end
gameCooltip:AddIcon([[Interface\AddOns\Details\images\icons]], "main", "left", 14, 10, 479/512, 510/512, 24/512, 51/512)
@@ -6388,27 +6388,27 @@ local buildSegmentTooltip = function(self, deltaTime)
local minutos, segundos = floor(decorrido/60), floor(decorrido%60)
if (segmentID == "trashoverall") then
gameCooltip:AddLine(Loc["STRING_SEGMENTS_LIST_TIMEINCOMBAT"] .. ":", Details.gump:IntegerToTimer (decorrido), 2, "white", "white")
gameCooltip:AddLine(Loc["STRING_SEGMENTS_LIST_TIMEINCOMBAT"] .. ":", Details.gump:IntegerToTimer(decorrido), 2, "white", "white")
local totalRealTime = endedAt - startedAt
local wasted = totalRealTime - decorrido
--wasted time
gameCooltip:AddLine(Loc["STRING_SEGMENTS_LIST_WASTED_TIME"] .. ":", "|cFFFF3300" .. Details.gump:IntegerToTimer (wasted) .. " (" .. floor(wasted / totalRealTime * 100) .. "%)|r", 2, "white", "white")
gameCooltip:AddLine(Loc["STRING_SEGMENTS_LIST_WASTED_TIME"] .. ":", "|cFFFF3300" .. Details.gump:IntegerToTimer(wasted) .. " (" .. floor(wasted / totalRealTime * 100) .. "%)|r", 2, "white", "white")
gameCooltip:AddStatusBar(100, 2, 0, 0, 0, 0.35, false, false, "Skyline")
gameCooltip:AddLine(Loc["STRING_SEGMENTS_LIST_TOTALTIME"] .. ":", Details.gump:IntegerToTimer (endedAt - startedAt), 2, "white", "white")
gameCooltip:AddLine(Loc["STRING_SEGMENTS_LIST_TOTALTIME"] .. ":", Details.gump:IntegerToTimer(endedAt - startedAt), 2, "white", "white")
elseif (isMythicOverallSegment) then
gameCooltip:AddLine(Loc["STRING_SEGMENTS_LIST_TIMEINCOMBAT"] .. ":", Details.gump:IntegerToTimer (decorrido), 2, "white", "white")
gameCooltip:AddLine(Loc["STRING_SEGMENTS_LIST_TIMEINCOMBAT"] .. ":", Details.gump:IntegerToTimer(decorrido), 2, "white", "white")
local totalRealTime = endedAt - startedAt
local wasted = totalRealTime - decorrido
--wasted time
gameCooltip:AddLine(Loc["STRING_SEGMENTS_LIST_WASTED_TIME"] .. ":", "|cFFFF3300" .. Details.gump:IntegerToTimer (wasted) .. " (" .. floor(wasted / totalRealTime * 100) .. "%)|r", 2, "white", "white")
gameCooltip:AddLine(Loc["STRING_SEGMENTS_LIST_WASTED_TIME"] .. ":", "|cFFFF3300" .. Details.gump:IntegerToTimer(wasted) .. " (" .. floor(wasted / totalRealTime * 100) .. "%)|r", 2, "white", "white")
gameCooltip:AddStatusBar(100, 2, 0, 0, 0, 0.35, false, false, "Skyline")
gameCooltip:AddLine(Loc["STRING_SEGMENTS_LIST_TOTALTIME"] .. ":", Details.gump:IntegerToTimer (totalRealTime), 2, "white", "white")
gameCooltip:AddLine(Loc["STRING_SEGMENTS_LIST_TOTALTIME"] .. ":", Details.gump:IntegerToTimer(totalRealTime), 2, "white", "white")
else
gameCooltip:AddLine(Loc["STRING_SEGMENTS_LIST_COMBATTIME"] .. ":", Details.gump:IntegerToTimer (decorrido), 2, "white", "white")
gameCooltip:AddLine(Loc["STRING_SEGMENTS_LIST_COMBATTIME"] .. ":", Details.gump:IntegerToTimer(decorrido), 2, "white", "white")
end
if (thisCombat.is_boss) then
@@ -6422,12 +6422,12 @@ local buildSegmentTooltip = function(self, deltaTime)
--the combat has mythic dungeon tag but doesn't have a mythic dungeon table information
--so this is a trash cleanup segment
local trashInfo = thisCombat:GetMythicDungeonTrashInfo()
gameCooltip:AddLine(Loc["STRING_SEGMENT_TRASH"] .. " (#" .. i .. ")", Details.gump:IntegerToTimer (thisCombat:GetCombatTime()), 1, dungeon_color_trash, "gray")
gameCooltip:AddLine(Loc["STRING_SEGMENT_TRASH"] .. " (#" .. i .. ")", Details.gump:IntegerToTimer(thisCombat:GetCombatTime()), 1, dungeon_color_trash, "gray")
gameCooltip:AddIcon([[Interface\AddOns\Details\images\icons]], "main", "left", 14, 10, 479/512, 510/512, 24/512, 51/512, nil, nil, true)
--submenu
gameCooltip:AddLine(Loc["STRING_SEGMENT_TRASH"], nil, 2, "white", "white")
gameCooltip:AddLine(Loc["STRING_SEGMENTS_LIST_COMBATTIME"] .. ":", Details.gump:IntegerToTimer (thisCombat:GetCombatTime()), 2, "white", "white")
gameCooltip:AddLine(Loc["STRING_SEGMENTS_LIST_COMBATTIME"] .. ":", Details.gump:IntegerToTimer(thisCombat:GetCombatTime()), 2, "white", "white")
gameCooltip:AddLine("", "", 2, "white", "white")
gameCooltip:AddLine(Loc["STRING_SEGMENT_START"] .. ":", thisCombat.data_inicio, 2, "white", "white")
gameCooltip:AddLine(Loc["STRING_SEGMENT_END"] .. ":", thisCombat.data_fim or "in progress", 2, "white", "white")
@@ -6471,7 +6471,7 @@ local buildSegmentTooltip = function(self, deltaTime)
end
end
local portrait = Details:GetBossPortrait (thisCombat.is_boss.mapid, thisCombat.is_boss.index) or thisCombat.is_boss.bossimage
local portrait = Details:GetBossPortrait(thisCombat.is_boss.mapid, thisCombat.is_boss.index) or thisCombat.is_boss.bossimage
if (portrait) then
gameCooltip:AddIcon(portrait, 2, "top", 128, 64)
else
@@ -6646,24 +6646,24 @@ local buildSegmentTooltip = function(self, deltaTime)
if (isMythicOverallSegment) then
--mostrar o tempo da dungeon
local totalTime = combat_time
--CoolTip:AddLine(zoneName .. " +" .. mythicLevel .. " (overall)", _detalhes.gump:IntegerToTimer (totalTime), 1, dungeon_color)
--CoolTip:AddLine(zoneName .. " +" .. mythicLevel .. " (overall)", _detalhes.gump:IntegerToTimer (endedAt - startedAt), 1, dungeon_color)
--CoolTip:AddLine(zoneName .. " +" .. mythicLevel .. " (overall)", _detalhes.gump:IntegerToTimer(totalTime), 1, dungeon_color)
--CoolTip:AddLine(zoneName .. " +" .. mythicLevel .. " (overall)", _detalhes.gump:IntegerToTimer(endedAt - startedAt), 1, dungeon_color)
--CoolTip:AddIcon([[Interface\AddOns\Details\images\icons]], "main", "left", 14, 10, 479/512, 510/512, 24/512, 51/512)
gameCooltip:AddLine(zoneName .. " +" .. mythicLevel .. " (" .. Loc["STRING_SEGMENTS_LIST_OVERALL"] .. ")", nil, 2, "white", "white")
else
if (segmentID == "trashoverall") then
--CoolTip:AddLine(encounterName .. " (" .. Loc["STRING_SEGMENTS_LIST_TRASH"] .. ")", _detalhes.gump:IntegerToTimer (combat_time), 1, dungeon_color, "gray")
--CoolTip:AddLine(encounterName .. " (" .. Loc["STRING_SEGMENTS_LIST_TRASH"] .. ")", _detalhes.gump:IntegerToTimer (endedAt - startedAt), 1, dungeon_color, "gray")
--CoolTip:AddLine(encounterName .. " (" .. Loc["STRING_SEGMENTS_LIST_TRASH"] .. ")", _detalhes.gump:IntegerToTimer(combat_time), 1, dungeon_color, "gray")
--CoolTip:AddLine(encounterName .. " (" .. Loc["STRING_SEGMENTS_LIST_TRASH"] .. ")", _detalhes.gump:IntegerToTimer(endedAt - startedAt), 1, dungeon_color, "gray")
gameCooltip:AddLine(encounterName .. " (" .. Loc["STRING_SEGMENTS_LIST_TRASH"] .. ")", nil, 2, "white", "white")
else
--CoolTip:AddLine(encounterName .. " (" .. Loc["STRING_SEGMENTS_LIST_BOSS"] .. ")", _detalhes.gump:IntegerToTimer (combat_time), 1, dungeon_color, "gray")
--CoolTip:AddLine(encounterName .. " (" .. Loc["STRING_SEGMENTS_LIST_BOSS"] .. ")", _detalhes.gump:IntegerToTimer(combat_time), 1, dungeon_color, "gray")
gameCooltip:AddLine(encounterName .. " (" .. Loc["STRING_SEGMENTS_LIST_BOSS"] .. ")", nil, 2, "white", "white")
end
--CoolTip:AddIcon([[Interface\AddOns\Details\images\icons]], "main", "left", 14, 10, 479/512, 510/512, 24/512, 51/512)
end
local portrait = (thisCombat.is_boss and thisCombat.is_boss.bossimage) or Details:GetBossPortrait (nil, nil, encounterName, EJID)
local portrait = (thisCombat.is_boss and thisCombat.is_boss.bossimage) or Details:GetBossPortrait(nil, nil, encounterName, EJID)
if (portrait) then
gameCooltip:AddIcon(portrait, 2, "top", 128, 64, 0, 1, 0, 0.96)
end
@@ -6682,28 +6682,28 @@ local buildSegmentTooltip = function(self, deltaTime)
local totalRealTime = endedAt - startedAt
local wasted = totalRealTime - decorrido
gameCooltip:AddLine(Loc["STRING_SEGMENTS_LIST_TIMEINCOMBAT"] .. ":", Details.gump:IntegerToTimer (decorrido), 2, "white", "white")
gameCooltip:AddLine(Loc["STRING_SEGMENTS_LIST_TIMEINCOMBAT"] .. ":", Details.gump:IntegerToTimer(decorrido), 2, "white", "white")
--wasted time
gameCooltip:AddLine(Loc["STRING_SEGMENTS_LIST_WASTED_TIME"] .. ":", "|cFFFF3300" .. Details.gump:IntegerToTimer (wasted) .. " (" .. floor(wasted / totalRealTime * 100) .. "%)|r", 2, "white", "white")
gameCooltip:AddLine(Loc["STRING_SEGMENTS_LIST_WASTED_TIME"] .. ":", "|cFFFF3300" .. Details.gump:IntegerToTimer(wasted) .. " (" .. floor(wasted / totalRealTime * 100) .. "%)|r", 2, "white", "white")
gameCooltip:AddStatusBar (100, 2, 0, 0, 0, 0.35, false, false, "Skyline")
gameCooltip:AddLine(Loc["STRING_SEGMENTS_LIST_TOTALTIME"] .. ":", Details.gump:IntegerToTimer (endedAt - startedAt) .. " [|cFFFF3300" .. Details.gump:IntegerToTimer (totalRealTime - decorrido) .. "|r]", 2, "white", "white")
gameCooltip:AddLine(Loc["STRING_SEGMENTS_LIST_TOTALTIME"] .. ":", Details.gump:IntegerToTimer(endedAt - startedAt) .. " [|cFFFF3300" .. Details.gump:IntegerToTimer(totalRealTime - decorrido) .. "|r]", 2, "white", "white")
elseif (isMythicOverallSegment) then
gameCooltip:AddLine(Loc["STRING_SEGMENTS_LIST_TIMEINCOMBAT"] .. ":", Details.gump:IntegerToTimer (decorrido), 2, "white", "white")
gameCooltip:AddLine(Loc["STRING_SEGMENTS_LIST_TIMEINCOMBAT"] .. ":", Details.gump:IntegerToTimer(decorrido), 2, "white", "white")
local totalRealTime = endedAt - startedAt
local wasted = totalRealTime - decorrido
gameCooltip:AddLine(Loc["STRING_SEGMENTS_LIST_TOTALTIME"] .. ":", Details.gump:IntegerToTimer (totalRealTime), 2, "white", "white")
gameCooltip:AddLine(Loc["STRING_SEGMENTS_LIST_TOTALTIME"] .. ":", Details.gump:IntegerToTimer(totalRealTime), 2, "white", "white")
--wasted time
gameCooltip:AddLine(Loc["STRING_SEGMENTS_LIST_WASTED_TIME"] .. ":", "|cFFFF3300" .. Details.gump:IntegerToTimer (wasted) .. " (" .. floor(wasted / totalRealTime * 100) .. "%)|r", 2, "white", "white")
gameCooltip:AddLine(Loc["STRING_SEGMENTS_LIST_WASTED_TIME"] .. ":", "|cFFFF3300" .. Details.gump:IntegerToTimer(wasted) .. " (" .. floor(wasted / totalRealTime * 100) .. "%)|r", 2, "white", "white")
gameCooltip:AddStatusBar (100, 2, 0, 0, 0, 0.35, false, false, "Skyline")
else
gameCooltip:AddLine(Loc["STRING_SEGMENTS_LIST_COMBATTIME"] .. ":", Details.gump:IntegerToTimer (decorrido), 2, "white", "white")
gameCooltip:AddLine(Loc["STRING_SEGMENTS_LIST_COMBATTIME"] .. ":", Details.gump:IntegerToTimer(decorrido), 2, "white", "white")
end
if (thisCombat.is_boss) then
@@ -6719,13 +6719,13 @@ local buildSegmentTooltip = function(self, deltaTime)
local trashInfo = thisCombat:GetMythicDungeonTrashInfo()
--CoolTip:AddLine(Loc["STRING_SEGMENT_TRASH"], _detalhes.gump:IntegerToTimer (thisCombat:GetCombatTime()), 1, dungeon_color_trash, "gray")
--CoolTip:AddLine(Loc["STRING_SEGMENT_TRASH"], _detalhes.gump:IntegerToTimer(thisCombat:GetCombatTime()), 1, dungeon_color_trash, "gray")
--CoolTip:AddIcon([[Interface\AddOns\Details\images\icons]], "main", "left", 16, 12, 0.02734375, 0.11328125, 0.19140625, 0.3125, "red")
--CoolTip:AddIcon([[Interface\AddOns\Details\images\icons]], "main", "left", 14, 10, 479/512, 510/512, 24/512, 51/512, nil, nil, true)
--submenu
gameCooltip:AddLine(Loc["STRING_SEGMENT_TRASH"], nil, 2, "white", "white")
gameCooltip:AddLine(Loc["STRING_SEGMENTS_LIST_COMBATTIME"] .. ":", Details.gump:IntegerToTimer (thisCombat:GetCombatTime()), 2, "white", "white")
gameCooltip:AddLine(Loc["STRING_SEGMENTS_LIST_COMBATTIME"] .. ":", Details.gump:IntegerToTimer(thisCombat:GetCombatTime()), 2, "white", "white")
gameCooltip:AddLine("", "", 2, "white", "white")
gameCooltip:AddLine(Loc["STRING_SEGMENT_START"] .. ":", thisCombat.data_inicio, 2, "white", "white")
gameCooltip:AddLine(Loc["STRING_SEGMENT_END"] .. ":", thisCombat.data_fim or "in progress", 2, "white", "white")
@@ -6741,7 +6741,7 @@ local buildSegmentTooltip = function(self, deltaTime)
segment_info_added = true
elseif (Details.tabela_vigente.is_boss and Details.tabela_vigente.is_boss.name) then
local portrait = Details:GetBossPortrait (Details.tabela_vigente.is_boss.mapid, Details.tabela_vigente.is_boss.index) or Details.tabela_vigente.is_boss.bossimage
local portrait = Details:GetBossPortrait(Details.tabela_vigente.is_boss.mapid, Details.tabela_vigente.is_boss.index) or Details.tabela_vigente.is_boss.bossimage
if (portrait) then
gameCooltip:AddIcon(portrait, 2, "top", 128, 64)
else
+1 -1
View File
@@ -6377,7 +6377,7 @@ do
end
sectionFrame.ConsolidadeSpellsSwitch:SetPoint(startX, startY - 20)
_detalhes:SetFontSize (sectionFrame.ConsolidadeSpellsLabel, 12)
_detalhes:SetFontSize(sectionFrame.ConsolidadeSpellsLabel, 12)
local sectionOptions = {
+11 -11
View File
@@ -1747,12 +1747,12 @@ function gump:CriaJanelaInfo()
este_gump.topright_text1 = este_gump:CreateFontString(nil, "overlay", "GameFontNormal")
este_gump.topright_text1:SetPoint("bottomright", este_gump, "topright", -18 - (94 * (1-1)), -36)
este_gump.topright_text1:SetJustifyH("right")
_detalhes.gump:SetFontSize (este_gump.topright_text1, 10)
_detalhes.gump:SetFontSize(este_gump.topright_text1, 10)
este_gump.topright_text2 = este_gump:CreateFontString(nil, "overlay", "GameFontNormal")
este_gump.topright_text2:SetPoint("bottomright", este_gump, "topright", -18 - (94 * (1-1)), -48)
este_gump.topright_text2:SetJustifyH("right")
_detalhes.gump:SetFontSize (este_gump.topright_text2, 10)
_detalhes.gump:SetFontSize(este_gump.topright_text2, 10)
function este_gump:SetTopRightTexts (text1, text2, size, color, font)
if (text1) then
@@ -1767,8 +1767,8 @@ function gump:CriaJanelaInfo()
end
if (size and type(size) == "number") then
_detalhes.gump:SetFontSize (este_gump.topright_text1, size)
_detalhes.gump:SetFontSize (este_gump.topright_text2, size)
_detalhes.gump:SetFontSize(este_gump.topright_text1, size)
_detalhes.gump:SetFontSize(este_gump.topright_text2, size)
end
if (color) then
_detalhes.gump:SetFontColor(este_gump.topright_text1, color)
@@ -2762,10 +2762,10 @@ function gump:CriaJanelaInfo()
--local waButton = DF:CreateButton(line, wa_button, 18, 18)
--waButton:SetIcon ([[Interface\AddOns\WeakAuras\Media\Textures\icon]])
DF:SetFontSize (name, text_size)
DF:SetFontSize (uptime, text_size)
DF:SetFontSize (apply, text_size)
DF:SetFontSize (refresh, text_size)
DF:SetFontSize(name, text_size)
DF:SetFontSize(uptime, text_size)
DF:SetFontSize(apply, text_size)
DF:SetFontSize(refresh, text_size)
icon:SetPoint("left", line, "left", 2, 0)
name:SetPoint("left", icon, "right", 2, 0)
@@ -2810,7 +2810,7 @@ function gump:CriaJanelaInfo()
line.Icon:SetTexCoord(.1, .9, .1, .9)
line.Name:SetText(aura [2])
line.Uptime:SetText(DF:IntegerToTimer (aura [3]) .. " (|cFFBBAAAA" .. floor(aura [6]) .. "%|r)")
line.Uptime:SetText(DF:IntegerToTimer(aura [3]) .. " (|cFFBBAAAA" .. floor(aura [6]) .. "%|r)")
line.Apply:SetText(aura [4])
line.Refresh:SetText(aura [5])
@@ -4777,7 +4777,7 @@ function gump:CriaJanelaInfo()
noPLayersToShow:SetSize(spell_compare_frame_width[2] - 10, spell_compare_frame_height)
noPLayersToShow:SetJustifyH("center")
noPLayersToShow:SetJustifyV ("center")
_detalhes.gump:SetFontSize (noPLayersToShow, 14)
_detalhes.gump:SetFontSize(noPLayersToShow, 14)
_detalhes.gump:SetFontColor(noPLayersToShow, "gray")
frame2.NoPLayersToShow = noPLayersToShow
@@ -4841,7 +4841,7 @@ function gump:CriaJanelaInfo()
noPLayersToShow:SetSize(spell_compare_frame_width[2] - 10, spell_compare_frame_height)
noPLayersToShow:SetJustifyH("center")
noPLayersToShow:SetJustifyV ("center")
_detalhes.gump:SetFontSize (noPLayersToShow, 14)
_detalhes.gump:SetFontSize(noPLayersToShow, 14)
_detalhes.gump:SetFontColor(noPLayersToShow, "gray")
frame3.NoPLayersToShow = noPLayersToShow
+1 -1
View File
@@ -42,7 +42,7 @@ function Details:OpenProfiler()
string_profiler:SetPoint("topleft", f, "topleft", 10, -130)
string_profiler:SetText(L["STRING_OPTIONS_PROFILE_SELECTEXISTING"])
string_profiler:SetWidth(230)
Details:SetFontSize (string_profiler, 11)
Details:SetFontSize(string_profiler, 11)
Details:SetFontColor(string_profiler, "white")
--get the new profile name
+1 -1
View File
@@ -36,7 +36,7 @@ local buttonTemplate = DF:GetTemplate("button", "OPTIONS_BUTTON_TEMPLATE")
local textentry = DF:NewSpecialLuaEditorEntry (panel, scrollWidth, 555, "editbox", "$parentEntry")
textentry:SetPoint("topleft", panel, "topleft", 10, y)
DF:ApplyStandardBackdrop(textentry)
DF:SetFontSize (textentry.editbox, 14)
DF:SetFontSize(textentry.editbox, 14)
DF:ReskinSlider(textentry.scroll)
local arg1_button = DF:NewButton(panel, nil, "$parentButton1", nil, 80, 20, function() textentry.editbox:Insert ("{data1}") end, nil, nil, nil, string.format(Loc ["STRING_OPTIONS_TEXTEDITOR_DATA"], "1"), 1)
+1 -1
View File
@@ -8,7 +8,7 @@ function Details:ScrollDamage()
if (not DetailsScrollDamage) then
DetailsScrollDamage = DetailsFramework:CreateSimplePanel(UIParent)
DetailsScrollDamage:SetSize(427 - 40 - 20 - 20, 505 - 150 + 20 + 40)
DetailsScrollDamage:SetTitle ("Details! Scroll Damage (/details scroll)")
DetailsScrollDamage:SetTitle("Details! Scroll Damage (/details scroll)")
DetailsScrollDamage.Data = {}
DetailsScrollDamage:ClearAllPoints()
DetailsScrollDamage:SetPoint("left", UIParent, "left", 10, 0)
+82 -82
View File
@@ -32,12 +32,12 @@ function Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild
if (not DetailsRaidHistoryWindow or not DetailsRaidHistoryWindow.Initialized) then
DetailsRaidHistoryWindow.Initialized = true
local f = DetailsRaidHistoryWindow or CreateFrame("frame", "DetailsRaidHistoryWindow", UIParent,"BackdropTemplate") --, "ButtonFrameTemplate"
f:SetPoint("center", UIParent, "center")
f:SetFrameStrata("HIGH")
f:SetToplevel (true)
f:SetMovable(true)
f:SetWidth(850)
f:SetHeight(500)
@@ -73,13 +73,13 @@ function Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild
f.bg1:SetHorizTile(true)
f.bg1:SetSize(790, 454)
f.bg1:SetAllPoints()
f:SetBackdrop({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\AddOns\Details\images\background]], tileSize = 64, tile = true})
f:SetBackdropColor(.5, .5, .5, .5)
f:SetBackdropBorderColor(0, 0, 0, 1)
local titlebar = DF:CreateTitleBar(f, "Details! " .. Loc ["STRING_STATISTICS"])
if (not Details:GetTutorialCVar("HISTORYPANEL_TUTORIAL")) then
local tutorialFrame = CreateFrame("frame", "$parentTutorialFrame",f,"BackdropTemplate")
tutorialFrame:SetPoint("center", f, "center")
@@ -88,19 +88,19 @@ function Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild
tutorialFrame:SetBackdrop({bgFile = [[Interface\AddOns\Details\images\background]], tile = true, tileSize = 16,
insets = {left = 0, right = 0, top = 0, bottom = 0}, edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize=1})
tutorialFrame:SetBackdropColor(0, 0, 0, 1)
tutorialFrame.Title = DF:CreateLabel(tutorialFrame, "Statistics" , 12, "orange") --curse localization isn't adding new strings (and I deleted the old one)
tutorialFrame.Title:SetPoint("top", tutorialFrame, "top", 0, -5)
tutorialFrame.Desc = DF:CreateLabel(tutorialFrame, Loc ["STRING_GUILDDAMAGERANK_TUTORIAL_DESC"], 12)
tutorialFrame.Desc.width = 370
tutorialFrame.Desc:SetPoint("topleft", tutorialFrame, "topleft", 10, -45)
local closeButton = DF:CreateButton(tutorialFrame, function() Details:SetTutorialCVar ("HISTORYPANEL_TUTORIAL", true); tutorialFrame:Hide() end, 80, 20, Loc ["STRING_OPTIONS_CHART_CLOSE"])
closeButton:SetPoint("bottom", tutorialFrame, "bottom", 0, 10)
closeButton:SetTemplate(DF:GetTemplate("button", "OPTIONS_BUTTON_TEMPLATE"))
end
--background
local background = f:CreateTexture("$parentBackgroundImage", "border")
background:SetAlpha(0.3)
@@ -292,7 +292,7 @@ function Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild
local ReportButton = DF:CreateButton(f, f.BuildReport, 130, 20, Loc ["STRING_OPTIONS_REPORT_ANCHOR"]:gsub(":", ""), nil, nil, nil, "ReportButton", nil, nil, options_button_template, options_text_template)
ReportButton:SetPoint("right", GuildSyncButton, "left", -2, 0)
ReportButton:SetIcon ([[Interface\GLUES\CharacterSelect\RestoreButton]], 12, 12, "overlay", {0.2, .8, 0.2, .8}, nil, 4)
ReportButton:SetIcon ([[Interface\GLUES\CharacterSelect\RestoreButton]], 12, 12, "overlay", {0.2, .8, 0.2, .8}, nil, 4)
--
function f:SetBackgroundImage (encounterId)
@@ -321,7 +321,7 @@ function Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild
if (button == "RightButton") then
self:Hide()
else
self:StartMoving()
self:StartMoving()
self.isMoving = true
end
end)
@@ -531,15 +531,15 @@ function Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild
tinsert(bossList, {value = encounterId, label = encounter.boss, icon = icon, onclick = on_boss_select})
bossRepeated [encounterId] = true
end
if (not raidRepeated [instance.name]) then
tinsert(raidList, {value = instance.id, label = instance.name, icon = icon, onclick = onRaidSelect})
raidRepeated [instance.name] = true
end
end
end
for index, encounter in ipairs(encounterTable) do
local guild = encounter.guild
if (not guildRepeated [guild]) then
@@ -550,10 +550,10 @@ function Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild
end
end
end
table.sort (bossList, function(t1, t2) return t1.label < t2.label end)
diff_dropdown:Refresh()
diff_dropdown:Select(1, true)
boss_dropdown:Refresh()
@@ -562,7 +562,7 @@ function Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild
raid_dropdown:Refresh()
raid_dropdown:Select(1, true)
end
guild_dropdown:Refresh()
if (currentGuild) then
guild_dropdown:Select(currentGuild)
@@ -570,13 +570,13 @@ function Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild
guild_dropdown:Select(1, true)
end
end
function f.UpdateBossDropdown()
local raidSelected = DetailsRaidHistoryWindow.select_raid:GetValue()
local boss_repeated = {}
wipe (bossList)
for difficulty, encounterIdTable in pairs(db) do
if (type(difficulty) == "number") then
if (difficulty == 14) then
@@ -604,7 +604,7 @@ function Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild
end
end
for encounterId, encounterTable in pairs(encounterIdTable) do
for encounterId, encounterTable in pairs(encounterIdTable) do
if (not boss_repeated [encounterId]) then
local encounter, instance = Details:GetBossEncounterDetailsFromEncounterId (_, encounterId)
if (encounter) then
@@ -621,7 +621,7 @@ function Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild
end
else
tinsert(bossList, {value = encounterId, label = encounter.boss, icon = icon, onclick = on_boss_select})
end
end
--]=]
tinsert(bossList, {value = encounterId, label = encounter.boss, icon = icon, onclick = on_boss_select})
boss_repeated [encounterId] = true
@@ -631,65 +631,64 @@ function Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild
end
end
end
table.sort (bossList, function(t1, t2) return t1.label < t2.label end)
boss_dropdown:Refresh()
end
--anchors:
raid_string:SetPoint("topleft", f, "topleft", 10, -70)
raid_dropdown:SetPoint("topleft", f, "topleft", 10, -85)
boss_string:SetPoint("topleft", f, "topleft", 10, -110)
boss_dropdown:SetPoint("topleft", f, "topleft", 10, -125)
diff_string:SetPoint("topleft", f, "topleft", 10, -150)
diff_dropdown:SetPoint("topleft", f, "topleft", 10, -165)
role_string:SetPoint("topleft", f, "topleft", 10, -190)
role_dropdown:SetPoint("topleft", f, "topleft", 10, -205)
guild_string:SetPoint("topleft", f, "topleft", 10, -230)
guild_dropdown:SetPoint("topleft", f, "topleft", 10, -245)
player_string:SetPoint("topleft", f, "topleft", 10, -270)
player_dropdown:SetPoint("topleft", f, "topleft", 10, -285)
player2_string:SetPoint("topleft", f, "topleft", 10, -310)
player2_dropdown:SetPoint("topleft", f, "topleft", 10, -325)
player2_string:Hide()
player2_dropdown:Hide()
--refresh the window:
function f:BuildPlayerTable (playerName)
local encounterTable, guild, role = unpack(f.build_player2_data or {})
local data = {}
if (type(playerName) == "string" and string.len(playerName) > 1) then
for encounterIndex, encounter in ipairs(encounterTable) do
if (encounter.guild == guild) then
local roleTable = encounter [role]
local date = encounter.date
date = date:gsub(".*%s", "")
date = date:sub (1, -4)
local player = roleTable [playerName]
if (player) then
--tinsert(data, {text = date, value = player[1], data = player, fulldate = encounter.date, elapsed = encounter.elapsed})
tinsert(data, {text = date, value = player[1]/encounter.elapsed, utext = Details:ToK2 (player[1]/encounter.elapsed), data = player, fulldate = encounter.date, elapsed = encounter.elapsed})
end
end
end
--update graphic
if (not f.gframe) then
local onenter = function(self)
GameCooltip:Reset()
GameCooltip:SetType ("tooltip")
@@ -703,42 +702,43 @@ function Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild
GameCooltip:SetOwner(self.ball.tooltip_anchor)
GameCooltip:Show()
end
local onleave = function(self)
GameCooltip:Hide()
end
f.gframe = DF:CreateGFrame (f, 650, 400, 35, onenter, onleave, "gframe", "$parentGF")
f.gframe:SetPoint("topleft", f, "topleft", 190, -65)
end
f.gframe:Reset()
f.gframe:UpdateLines (data)
f.gframe:UpdateLines(data)
end
end
local fillpanel = DF:NewFillPanel (f, {}, "$parentFP", "fillpanel", 710, 501, false, false, true, nil)
fillpanel:SetPoint("topleft", f, "topleft", 195, -65)
function f:BuildGuildRankTable (encounterTable, guild, role)
local header = {{name = "Player Name", type = "text"}, {name = "Per Second", type = "text"}, {name = "Total", type = "text"}, {name = "Length", type = "text"}, {name = "Item Level", type = "text"}, {name = "Date", type = "text"}}
local players = {}
local players_index = {}
local playerScore = {}
--get the best of each player
for encounterIndex, encounter in ipairs(encounterTable) do
if (encounter.guild == guild) then
local roleTable = encounter [role]
local date = encounter.date
date = date:gsub(".*%s", "")
date = date:sub (1, -4)
for playerName, playerTable in pairs(roleTable) do
if (not playerScore [playerName]) then
playerScore [playerName] = {
total = 0,
@@ -749,10 +749,10 @@ function Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild
length = 0,
}
end
local total = playerTable [1]
local dps = total / encounter.elapsed
--if (total > playerScore [playerName].total) then
if (dps > playerScore [playerName].ps) then
playerScore [playerName].total = total
@@ -765,7 +765,7 @@ function Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild
end
end
end
local sortTable = {}
for playerName, t in pairs(playerScore) do
local className = select(2, GetClassInfo (t.class or 0))
@@ -773,64 +773,64 @@ function Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild
if (className) then
classColor = RAID_CLASS_COLORS [className] and RAID_CLASS_COLORS [className].colorStr
end
local playerNameFormated = Details:GetOnlyName(playerName)
tinsert(sortTable, {
"|c" .. classColor .. playerNameFormated .. "|r",
Details:comma_value (t.ps),
Details:ToK2 (t.total),
DF:IntegerToTimer (t.length),
DF:IntegerToTimer(t.length),
floor(t.ilvl),
t.date,
t.total,
t.ps,
})
end
table.sort (sortTable, function(a, b) return a[8] > b[8] end)
--add the number before the player name
for i = 1, #sortTable do
local t = sortTable [i]
t [1] = i .. ". " .. t [1]
end
fillpanel:SetFillFunction (function(index) return sortTable [index] end)
fillpanel:SetTotalFunction (function() return #sortTable end)
fillpanel:UpdateRows (header)
fillpanel:Refresh()
f.LatestResourceTable = sortTable
end
function f:BuildRaidTable (encounterTable, guild, role)
if (f.Mode == 2) then
f:BuildGuildRankTable (encounterTable, guild, role)
return
end
local header = {{name = "Player Name", type = "text"}} -- , width = 90
local players = {}
local players_index = {}
local player_class = {}
local amt_encounters = 0
for encounterIndex, encounter in ipairs(encounterTable) do
if (encounter.guild == guild) then
local roleTable = encounter [role]
local date = encounter.date
date = date:gsub(".*%s", "")
date = date:sub (1, -4)
amt_encounters = amt_encounters + 1
tinsert(header, {name = date, type = "text"})
for playerName, playerTable in pairs(roleTable) do
local index = players_index [playerName]
local player
if (not index) then
player = {playerName}
player_class [playerName] = playerTable [3]
@@ -840,7 +840,7 @@ function Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild
tinsert(player, Details:ToK2 (playerTable [1] / encounter.elapsed))
tinsert(players, player)
players_index [playerName] = #players
--print("not index", playerName, amt_encounters, date, 2, amt_encounters-1)
else
player = players [index]
@@ -849,14 +849,14 @@ function Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild
end
tinsert(player, Details:ToK2 (playerTable [1] / encounter.elapsed))
end
end
end
end
--sort alphabetical
table.sort (players, function(a, b) return a[1] < b[1] end)
for index, playerTable in ipairs(players) do
for i = #playerTable, amt_encounters do
tinsert(playerTable, "")
@@ -869,16 +869,16 @@ function Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild
playerTable [1] = "|c" .. classColor .. playerNameFormated .. "|r"
end
end
fillpanel:SetFillFunction (function(index) return players [index] end)
fillpanel:SetTotalFunction (function() return #players end)
fillpanel:UpdateRows (header)
fillpanel:Refresh()
fillpanel:SetPoint("topleft", f, "topleft", 200, -65)
end
function f:Refresh (player_name)
--build the main table
local diff = diff_dropdown.value
@@ -886,12 +886,12 @@ function Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild
local role = role_dropdown.value
local guild = guild_dropdown.value
local player = player_dropdown.value
local diffTable = db [diff]
f:SetBackgroundImage (boss)
--Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild, _player_base, _player_name)
if (diffTable) then
local encounters = diffTable [boss]
if (encounters) then
@@ -913,15 +913,15 @@ function Details:OpenRaidHistoryWindow (_raid, _boss, _difficulty, _role, _guild
player2_dropdown:Show()
f.build_player2_data = {encounters, guild, role}
player2_dropdown:Refresh()
player_name = f.latest_player_selected or player_name
if (player_name) then
player2_dropdown:Select(player_name)
else
player2_dropdown:Select(1, true)
end
f:BuildPlayerTable (player2_dropdown.value)
end
else
+1 -1
View File
@@ -523,7 +523,7 @@ function Details.switch:ShowMe(instancia)
function Details.switch:CreateSegmentBlock()
local s = gump:CreateLabel(Details.switch.frame)
Details:SetFontSize (s, 9)
Details:SetFontSize(s, 9)
local index = #Details.switch.segments_blocks
if (index == 1) then --overall button
+4 -4
View File
@@ -1387,11 +1387,11 @@ local window_openned_at = time()
local joe = current_combat[1]:PegarCombatente ("0x0000000000001", "Joe", 0x114, true)
joe.grupo = true
joe.classe = actors_classes [math.random (1, #actors_classes)]
joe.classe = actors_classes [math.random(1, #actors_classes)]
joe.total = 7500000
joe.total_without_pet = 7500000
joe.damage_taken = math.random (100000, 600000)
joe.friendlyfire_total = math.random (100000, 600000)
joe.damage_taken = math.random(100000, 600000)
joe.friendlyfire_total = math.random(100000, 600000)
total_damage = total_damage + joe.total
@@ -1400,7 +1400,7 @@ local window_openned_at = time()
--joe_death.classe = joe.classe
--local esta_morte = {{true, 96648, 100000, time(), 0, "Lady Holenna"}, {true, 96648, 100000, time()-52, 100000, "Lady Holenna"}, {true, 96648, 100000, time()-86, 200000, "Lady Holenna"}, {true, 96648, 100000, time()-101, 300000, "Lady Holenna"}, {false, 55296, 400000, time()-54, 400000, "King Djoffrey"}, {true, 14185, 0, time()-59, 400000, "Lady Holenna"}, {false, 87351, 400000, time()-154, 400000, "King Djoffrey"}, {false, 56236, 400000, time()-158, 400000, "King Djoffrey"} }
--local t = {esta_morte, time(), joe.nome, joe.classe, 400000, "52m 12s", ["dead"] = true}
--table.insert (current_combat.last_events_tables, #current_combat.last_events_tables+1, t)
--table.insert(current_combat.last_events_tables, #current_combat.last_events_tables+1, t)
rawset (_detalhes.spellcache, 300000, {"A Gun in Your Hand", 300000, [[Interface\ICONS\INV_Legendary_Gun]]})
rawset (_detalhes.spellcache, 300001, {"Shot", 300001, [[Interface\ICONS\INV_Archaeology_Ogres_HarGunn_Eye]]})
+3 -3
View File
@@ -281,7 +281,7 @@ do
end
--return the boss portrit
function _detalhes:GetBossPortrait (mapid, bossindex, encounterName, ejID)
function _detalhes:GetBossPortrait(mapid, bossindex, encounterName, ejID)
if (mapid and bossindex) then
local haveIcon = _detalhes.EncounterInformation [mapid] and _detalhes.EncounterInformation [mapid].encounters [bossindex] and _detalhes.EncounterInformation [mapid].encounters [bossindex].portrait
if (haveIcon) then
@@ -317,8 +317,8 @@ do
if (displayInfo ~= 0 and abilityIcon == "") then
actors [title] = {model = displayInfo, info = description}
end
table.insert (stack, siblingID)
table.insert (stack, nextSectionID)
table.insert(stack, siblingID)
table.insert(stack, nextSectionID)
curSectionID = table.remove (stack)
until not curSectionID
+1 -1
View File
@@ -445,7 +445,7 @@ function Details.Coach.WelcomePanel()
if (not welcomePanel) then
welcomePanel = DetailsFramework:CreateSimplePanel(UIParent)
welcomePanel:SetSize(400, 280)
welcomePanel:SetTitle ("Details! Coach")
welcomePanel:SetTitle("Details! Coach")
welcomePanel:ClearAllPoints()
welcomePanel:SetPoint("left", UIParent, "left", 10, 0)
welcomePanel:Hide()
+1 -1
View File
@@ -283,7 +283,7 @@ function detailsOnDeathMenu.ShowPanel()
detailsOnDeathMenu.disableLabel.alpha = 0.5
detailsOnDeathMenu:SetHeight(detailsOnDeathMenu:GetHeight() + 10)
if (math.random (1, 3) == 3) then
if (math.random(1, 3) == 3) then
Details:SetTutorialCVar ("DISABLE_ONDEATH_PANEL", true)
end
end
+3 -3
View File
@@ -76,7 +76,7 @@ local create_deathrecap_line = function(parent, n)
Details.gump:SetFontColor(timeAt, "gray")
Details.gump:SetFontColor(sourceName, "yellow")
Details.gump:SetFontSize (sourceName, 10)
Details.gump:SetFontSize(sourceName, 10)
--text alpha
timeAt:SetAlpha(textAlpha)
@@ -120,8 +120,8 @@ local create_deathrecap_line = function(parent, n)
backgroundTexture2:SetPoint("topright", backgroundTexture, "bottomright", 0, 0)
backgroundTexture2:SetHeight(32)
Details.gump:SetFontSize (amount, 14)
Details.gump:SetFontSize (lifePercent, 14)
Details.gump:SetFontSize(amount, 14)
Details.gump:SetFontSize(lifePercent, 14)
backgroundTexture:SetVertexColor(.2, .1, .1, .3)
end
+21 -16
View File
@@ -2,7 +2,7 @@
--local pointer to details object
local Details = _G._detalhes
local debugmode = false --print debug lines
local debugmode = true --print debug lines
local verbosemode = false --auto open the chart panel
local _
@@ -22,6 +22,8 @@ Should the chart data be volatile?
local mythicDungeonCharts = Details:CreateEventListener()
_G.DetailsMythicDungeonChartHandler = mythicDungeonCharts
--DetailsMythicDungeonChartHandler.ChartTable.Players["playername"].ChartData = {max_value = 0}
function mythicDungeonCharts:Debug(...)
if (debugmode or verbosemode) then
print("Details! DungeonCharts: ", ...)
@@ -38,7 +40,7 @@ local addPlayerDamage = function(unitName, unitRealm)
end
--get the player data
local playerData = mythicDungeonCharts.ChartTable.Players [CLName]
local playerData = mythicDungeonCharts.ChartTable.Players[CLName]
--if this is the first tick for the player, ignore the damage done on this tick
--this is done to prevent a tick tick with all the damage the player did on the previous segment
@@ -61,7 +63,7 @@ local addPlayerDamage = function(unitName, unitRealm)
LastCombatID = -1,
}
mythicDungeonCharts.ChartTable.Players [CLName] = playerData
mythicDungeonCharts.ChartTable.Players[CLName] = playerData
bIsFirstTick = true
end
@@ -569,12 +571,12 @@ function mythicDungeonCharts.ShowChart()
bossWidget:SetPoint("bottomright", dungeonChartFrame.ChartFrame.Graphic, "bottomleft", xPosition, 0)
bossWidget.TimeText:SetText(Details:GetFramework():IntegerToTimer (bossTable[1]))
bossWidget.TimeText:SetText(Details:GetFramework():IntegerToTimer(bossTable[1]))
if (bossTable[2].bossimage) then
bossWidget.AvatarTexture:SetTexture(bossTable[2].bossimage)
else
local bossAvatar = Details:GetBossPortrait (nil, nil, bossTable[2].name, bossTable[2].ej_instance_id)
local bossAvatar = Details:GetBossPortrait(nil, nil, bossTable[2].name, bossTable[2].ej_instance_id)
bossWidget.AvatarTexture:SetTexture(bossAvatar)
end
end
@@ -616,15 +618,14 @@ function mythicDungeonCharts.ShowChart()
mythicDungeonCharts.PlayerGraphIndex = {}
for playerName, playerTable in pairs(charts) do
local chartData = playerTable.ChartData
local lineName = playerTable.Name
classDuplicated [playerTable.Class] = (classDuplicated [playerTable.Class] or 0) + 1
classDuplicated[playerTable.Class] = (classDuplicated[playerTable.Class] or 0) + 1
local lineColor
if (playerTable.Class) then
local classColor = mythicDungeonCharts.ClassColors [playerTable.Class .. classDuplicated [playerTable.Class]]
local classColor = mythicDungeonCharts.ClassColors[playerTable.Class .. classDuplicated[playerTable.Class]]
if (classColor) then
lineColor = {classColor.r, classColor.g, classColor.b}
else
@@ -639,12 +640,12 @@ function mythicDungeonCharts.ShowChart()
--lowess smooth
--chartData = mythicDungeonCharts.LowessSmoothing (chartData, 75)
chartData = mythicDungeonCharts.Frame.ChartFrame:CalcLowessSmoothing (chartData, 75)
chartData = mythicDungeonCharts.Frame.ChartFrame:CalcLowessSmoothing(chartData, 75)
local maxValue = 0
for i = 1, #chartData do
if (chartData [i] > maxValue) then
maxValue = chartData [i]
maxValue = chartData[i]
end
end
chartData.max_value = maxValue
@@ -653,24 +654,24 @@ function mythicDungeonCharts.ShowChart()
tinsert(mythicDungeonCharts.PlayerGraphIndex, playerName)
end
mythicDungeonCharts.Frame.ChartFrame:RefreshBossTimeline (mythicDungeonCharts.ChartTable.BossDefeated, mythicDungeonCharts.ChartTable.ElapsedTime)
mythicDungeonCharts.Frame.ChartFrame:RefreshBossTimeline(mythicDungeonCharts.ChartTable.BossDefeated, mythicDungeonCharts.ChartTable.ElapsedTime)
--generate boss time table
local bossTimeTable = {}
for i, bossTable in ipairs(mythicDungeonCharts.ChartTable.BossDefeated) do
local combatTime = bossTable [3] or math.random (10, 30)
local combatTime = bossTable [3] or math.random(10, 30)
tinsert(bossTimeTable, bossTable[1])
tinsert(bossTimeTable, bossTable[1] - combatTime)
end
mythicDungeonCharts.Frame.ChartFrame:AddOverlay (bossTimeTable, {1, 1, 1, 0.05}, "Show Boss", "")
mythicDungeonCharts.Frame.ChartFrame:AddOverlay(bossTimeTable, {1, 1, 1, 0.05}, "Show Boss", "")
--local phrase = " Average Dps (under development)\npress Escape to hide, Details! Alpha Build." .. _detalhes.build_counter .. "." .. _detalhes.realversion
local phrase = "Details!: Average Dps for "
mythicDungeonCharts.Frame.ChartFrame:SetTitle ("")
Details:GetFramework():SetFontSize (mythicDungeonCharts.Frame.ChartFrame.chart_title, 14)
mythicDungeonCharts.Frame.ChartFrame:SetTitle("")
Details:GetFramework():SetFontSize(mythicDungeonCharts.Frame.ChartFrame.chart_title, 14)
mythicDungeonCharts.Frame.TitleText:SetText(mythicDungeonCharts.ChartTable.DungeonName and phrase .. mythicDungeonCharts.ChartTable.DungeonName or phrase)
@@ -890,8 +891,12 @@ mythicDungeonCharts.ClassColors = {
["DEMONHUNTER1"] = { r = 0.64, g = 0.19, b = 0.79, colorStr = "ffa330c9" },
["DEMONHUNTER2"] = { r = 0.44, g = 0.09, b = 0.59, colorStr = "ffa330c9" },
["DEMONHUNTER3"] = { r = 0.24, g = 0.09, b = 0.39, colorStr = "ffa330c9" },
["EVOKER1"] = { r = 0.0, g = 1.00 , b = 0.59, colorStr = "FF205F45" },
["EVOKER2"] = { r = 0.0, g = 0.8 , b = 0.39, colorStr = "FF126442" },
["EVOKER3"] = { r = 0.0, g = 0.6 , b = 0.19, colorStr = "FF274B3C" },
};
if (debugmode) then
C_Timer.After(1, mythicDungeonCharts.ShowChart)
--C_Timer.After(1, mythicDungeonCharts.ShowChart)
end
+5 -5
View File
@@ -515,7 +515,7 @@ function SlashCmdList.DETAILS (msg, editbox)
elseif (msg == "garbage") then
local a = {}
for i = 1, 10000 do
a [i] = {math.random (50000)}
a [i] = {math.random(50000)}
end
table.wipe(a)
@@ -1303,8 +1303,8 @@ function SlashCmdList.DETAILS (msg, editbox)
a:SetScript("OnUpdate", function(self, deltaTime)
elapsedTime = elapsedTime + deltaTime
--texture:SetSize(math.random (50, 300), math.random (50, 300))
--local spec = allspecs [math.random (#allspecs)]
--texture:SetSize(math.random(50, 300), math.random(50, 300))
--local spec = allspecs [math.random(#allspecs)]
texture:SetTexture([[Interface\AddOns\Details\images\options_window]])
--texture:SetTexture([[Interface\Store\Store-Splash]])
--texture:SetTexture([[Interface\AddOns\Details\images\options_window]])
@@ -1428,7 +1428,7 @@ function SlashCmdList.DETAILS (msg, editbox)
end
newCombat.is_trash = false
_detalhes:Msg("done merging, segments: " .. segmentsAdded .. ", total time: " .. DetailsFramework:IntegerToTimer (totalTime))
_detalhes:Msg("done merging, segments: " .. segmentsAdded .. ", total time: " .. DetailsFramework:IntegerToTimer(totalTime))
--[[ --mythic+ debug
--tag the segment as mythic overall segment
@@ -1760,7 +1760,7 @@ function Details:UpdateUserPanel (usersTable)
if (not Details.UserPanel) then
DetailsUserPanel = DetailsFramework:CreateSimplePanel(UIParent)
DetailsUserPanel:SetSize(707, 505)
DetailsUserPanel:SetTitle ("Details! Version Check")
DetailsUserPanel:SetTitle("Details! Version Check")
DetailsUserPanel.Data = {}
DetailsUserPanel:ClearAllPoints()
DetailsUserPanel:SetPoint("left", UIParent, "left", 10, 0)
+36 -36
View File
@@ -5,12 +5,12 @@ local Details = _G.Details
function Details:TestBarsUpdate()
local current_combat = Details:GetCombat("current")
for index, actor in current_combat[1]:ListActors() do
actor.total = actor.total + (actor.total / 100 * math.random (1, 10))
actor.total = actor.total - (actor.total / 100 * math.random (1, 10))
actor.total = actor.total + (actor.total / 100 * math.random(1, 10))
actor.total = actor.total - (actor.total / 100 * math.random(1, 10))
end
for index, actor in current_combat[2]:ListActors() do
actor.total = actor.total + (actor.total / 100 * math.random (1, 10))
actor.total = actor.total - (actor.total / 100 * math.random (1, 10))
actor.total = actor.total + (actor.total / 100 * math.random(1, 10))
actor.total = actor.total - (actor.total / 100 * math.random(1, 10))
end
current_combat[1].need_refresh = true
current_combat[2].need_refresh = true
@@ -181,7 +181,7 @@ function Details:CreateTestBars (alphabet, isArena)
for i = 1, 10 do
local who = actors_name [math.random (1, #actors_name)]
local who = actors_name [math.random(1, #actors_name)]
local robot = current_combat[1]:PegarCombatente ("0x0000-0000-0000", who[1], 0x114, true)
robot.grupo = true
@@ -204,42 +204,42 @@ function Details:CreateTestBars (alphabet, isArena)
robot:SetSpecId(who[3])
elseif (robot.classe == "DEATHKNIGHT") then
local specs = {250, 251, 252}
robot:SetSpecId(specs [math.random (1, #specs)])
robot:SetSpecId(specs [math.random(1, #specs)])
elseif (robot.classe == "DRUID") then
local specs = {102, 103, 104, 105}
robot:SetSpecId(specs [math.random (1, #specs)])
robot:SetSpecId(specs [math.random(1, #specs)])
elseif (robot.classe == "HUNTER") then
local specs = {253, 254, 255}
robot:SetSpecId(specs [math.random (1, #specs)])
robot:SetSpecId(specs [math.random(1, #specs)])
elseif (robot.classe == "MAGE") then
local specs = {62, 63, 64}
robot:SetSpecId(specs [math.random (1, #specs)])
robot:SetSpecId(specs [math.random(1, #specs)])
elseif (robot.classe == "MONK") then
local specs = {268, 269, 270}
robot:SetSpecId(specs [math.random (1, #specs)])
robot:SetSpecId(specs [math.random(1, #specs)])
elseif (robot.classe == "PALADIN") then
local specs = {65, 66, 70}
robot:SetSpecId(specs [math.random (1, #specs)])
robot:SetSpecId(specs [math.random(1, #specs)])
elseif (robot.classe == "PRIEST") then
local specs = {256, 257, 258}
robot:SetSpecId(specs [math.random (1, #specs)])
robot:SetSpecId(specs [math.random(1, #specs)])
elseif (robot.classe == "ROGUE") then
local specs = {259, 260, 261}
robot:SetSpecId(specs [math.random (1, #specs)])
robot:SetSpecId(specs [math.random(1, #specs)])
elseif (robot.classe == "SHAMAN") then
local specs = {262, 263, 264}
robot:SetSpecId(specs [math.random (1, #specs)])
robot:SetSpecId(specs [math.random(1, #specs)])
elseif (robot.classe == "WARLOCK") then
local specs = {265, 266, 267}
robot:SetSpecId(specs [math.random (1, #specs)])
robot:SetSpecId(specs [math.random(1, #specs)])
elseif (robot.classe == "WARRIOR") then
local specs = {71, 72, 73}
robot:SetSpecId(specs [math.random (1, #specs)])
robot:SetSpecId(specs [math.random(1, #specs)])
end
robot.total = math.random (10000000, 60000000)
robot.damage_taken = math.random (10000000, 60000000)
robot.friendlyfire_total = math.random (10000000, 60000000)
robot.total = math.random(10000000, 60000000)
robot.damage_taken = math.random(10000000, 60000000)
robot.friendlyfire_total = math.random(10000000, 60000000)
total_damage = total_damage + robot.total
@@ -249,7 +249,7 @@ function Details:CreateTestBars (alphabet, isArena)
robot_death.classe = robot.classe
local esta_morte = {{true, 96648, 100000, time(), 0, "Lady Holenna"}, {true, 96648, 100000, time()-52, 100000, "Lady Holenna"}, {true, 96648, 100000, time()-86, 200000, "Lady Holenna"}, {true, 96648, 100000, time()-101, 300000, "Lady Holenna"}, {false, 55296, 400000, time()-54, 400000, "King Djoffrey"}, {true, 14185, 0, time()-59, 400000, "Lady Holenna"}, {false, 87351, 400000, time()-154, 400000, "King Djoffrey"}, {false, 56236, 400000, time()-158, 400000, "King Djoffrey"} }
local t = {esta_morte, time(), robot.nome, robot.classe, 400000, "52m 12s", ["dead"] = true}
table.insert (current_combat.last_events_tables, #current_combat.last_events_tables+1, t)
table.insert(current_combat.last_events_tables, #current_combat.last_events_tables+1, t)
elseif (robot.nome == "Mr. President") then
rawset (Details.spellcache, 56488, {"Nuke", 56488, [[Interface\ICONS\inv_gizmo_supersappercharge]]})
@@ -257,7 +257,7 @@ function Details:CreateTestBars (alphabet, isArena)
robot.spells._ActorTable [56488].total = robot.total
end
local who = actors_name [math.random (1, #actors_name)]
local who = actors_name [math.random(1, #actors_name)]
local robot = current_combat[2]:PegarCombatente ("0x0000-0000-0000", who[1], 0x114, true)
robot.grupo = true
robot.classe = who[2]
@@ -266,43 +266,43 @@ function Details:CreateTestBars (alphabet, isArena)
robot:SetSpecId(who[3])
elseif (robot.classe == "DEATHKNIGHT") then
local specs = {250, 251, 252}
robot:SetSpecId(specs [math.random (1, #specs)])
robot:SetSpecId(specs [math.random(1, #specs)])
elseif (robot.classe == "DRUID") then
local specs = {102, 103, 104, 105}
robot:SetSpecId(specs [math.random (1, #specs)])
robot:SetSpecId(specs [math.random(1, #specs)])
elseif (robot.classe == "HUNTER") then
local specs = {253, 254, 255}
robot:SetSpecId(specs [math.random (1, #specs)])
robot:SetSpecId(specs [math.random(1, #specs)])
elseif (robot.classe == "MAGE") then
local specs = {62, 63, 64}
robot:SetSpecId(specs [math.random (1, #specs)])
robot:SetSpecId(specs [math.random(1, #specs)])
elseif (robot.classe == "MONK") then
local specs = {268, 269, 270}
robot:SetSpecId(specs [math.random (1, #specs)])
robot:SetSpecId(specs [math.random(1, #specs)])
elseif (robot.classe == "PALADIN") then
local specs = {65, 66, 70}
robot:SetSpecId(specs [math.random (1, #specs)])
robot:SetSpecId(specs [math.random(1, #specs)])
elseif (robot.classe == "PRIEST") then
local specs = {256, 257, 258}
robot:SetSpecId(specs [math.random (1, #specs)])
robot:SetSpecId(specs [math.random(1, #specs)])
elseif (robot.classe == "ROGUE") then
local specs = {259, 260, 261}
robot:SetSpecId(specs [math.random (1, #specs)])
robot:SetSpecId(specs [math.random(1, #specs)])
elseif (robot.classe == "SHAMAN") then
local specs = {262, 263, 264}
robot:SetSpecId(specs [math.random (1, #specs)])
robot:SetSpecId(specs [math.random(1, #specs)])
elseif (robot.classe == "WARLOCK") then
local specs = {265, 266, 267}
robot:SetSpecId(specs [math.random (1, #specs)])
robot:SetSpecId(specs [math.random(1, #specs)])
elseif (robot.classe == "WARRIOR") then
local specs = {71, 72, 73}
robot:SetSpecId(specs [math.random (1, #specs)])
robot:SetSpecId(specs [math.random(1, #specs)])
end
robot.total = math.random (10000000, 60000000)
robot.totalover = math.random (10000000, 60000000)
robot.totalabsorb = math.random (10000000, 60000000)
robot.healing_taken = math.random (10000000, 60000000)
robot.total = math.random(10000000, 60000000)
robot.totalover = math.random(10000000, 60000000)
robot.totalabsorb = math.random(10000000, 60000000)
robot.healing_taken = math.random(10000000, 60000000)
total_heal = total_heal + robot.total
@@ -400,7 +400,7 @@ local function CreatePluginFrames (data)
alert:SetFrameLevel(302)
alert.label = "Click here (on the skull icon) to bring the Encounter Breakdown panel"
alert.Text:SetSpacing (4)
alert:SetClampedToScreen (true)
alert:SetClampedToScreen(true)
MicroButtonAlert_SetText (alert, alert.label)
alert:SetPoint("bottom", EncounterDetails.ToolbarButton, "top", 0, 22)
alert.CloseButton:HookScript ("OnClick", hook_AlertButtonCloseButton)
@@ -1300,8 +1300,8 @@ function EncounterDetails:OpenAndRefresh (_, segment)
local barra = container.barras [index]
if (not barra) then
barra = EncounterDetails:CreateRow (index, container, 1, 0, -1)
_detalhes:SetFontSize (barra.lineText1, CONST_FONT_SIZE)
_detalhes:SetFontSize (barra.lineText4, CONST_FONT_SIZE)
_detalhes:SetFontSize(barra.lineText1, CONST_FONT_SIZE)
_detalhes:SetFontSize(barra.lineText4, CONST_FONT_SIZE)
barra.TTT = "damage_taken" -- tool tip type --damage taken
barra.report_text = Loc ["STRING_PLUGIN_NAME"].."! "..Loc ["STRING_DAMAGE_TAKEN_REPORT"]
end
@@ -1520,8 +1520,8 @@ function EncounterDetails:OpenAndRefresh (_, segment)
barra = EncounterDetails:CreateRow (index, container, 1, 0, -1)
barra.TTT = "habilidades_inimigas" -- tool tip type --enemy abilities
barra.report_text = Loc ["STRING_PLUGIN_NAME"].."! " .. Loc ["STRING_ABILITY_DAMAGE"]
_detalhes:SetFontSize (barra.lineText1, CONST_FONT_SIZE)
_detalhes:SetFontSize (barra.lineText4, CONST_FONT_SIZE)
_detalhes:SetFontSize(barra.lineText1, CONST_FONT_SIZE)
_detalhes:SetFontSize(barra.lineText4, CONST_FONT_SIZE)
barra.t:SetVertexColor(1, .8, .8, .8)
end
@@ -1809,8 +1809,8 @@ function EncounterDetails:OpenAndRefresh (_, segment)
barra.lineText1:SetPoint("left", add_damage_done, "right", 2, 0)
barra.textura:SetStatusBarTexture(nil)
_detalhes:SetFontSize (barra.lineText1, CONST_FONT_SIZE)
_detalhes:SetFontSize (barra.lineText4, CONST_FONT_SIZE)
_detalhes:SetFontSize(barra.lineText1, CONST_FONT_SIZE)
_detalhes:SetFontSize(barra.lineText4, CONST_FONT_SIZE)
barra.TTT = "add"
add_damage_done.TTT = "add"
@@ -1896,8 +1896,8 @@ function EncounterDetails:OpenAndRefresh (_, segment)
local barra = container.barras [index]
if (not barra) then
barra = EncounterDetails:CreateRow (index, container, 3, 0, -6)
_detalhes:SetFontSize (barra.lineText1, CONST_FONT_SIZE)
_detalhes:SetFontSize (barra.lineText4, CONST_FONT_SIZE)
_detalhes:SetFontSize(barra.lineText1, CONST_FONT_SIZE)
_detalhes:SetFontSize(barra.lineText4, CONST_FONT_SIZE)
barra.TTT = "total_interrupt" -- tool tip type
barra.report_text = "Details! ".. Loc ["STRING_INTERRUPTS_OF"]
barra:SetWidth(155)
@@ -2010,8 +2010,8 @@ function EncounterDetails:OpenAndRefresh (_, segment)
local barra = container.barras [index]
if (not barra) then
barra = EncounterDetails:CreateRow (index, container, 3, 3, -6)
_detalhes:SetFontSize (barra.lineText1, CONST_FONT_SIZE)
_detalhes:SetFontSize (barra.lineText4, CONST_FONT_SIZE)
_detalhes:SetFontSize(barra.lineText1, CONST_FONT_SIZE)
_detalhes:SetFontSize(barra.lineText4, CONST_FONT_SIZE)
barra.TTT = "dispell" -- tool tip type
barra.report_text = "Details! ".. Loc ["STRING_DISPELLS_OF"]
barra:SetWidth(160)
@@ -2072,8 +2072,8 @@ function EncounterDetails:OpenAndRefresh (_, segment)
barra = EncounterDetails:CreateRow (index, container, 3, 0, 1)
barra.TTT = "morte" -- tool tip type
barra.report_text = "Details! " .. Loc ["STRING_DEAD_LOG"]
_detalhes:SetFontSize (barra.lineText1, CONST_FONT_SIZE)
_detalhes:SetFontSize (barra.lineText4, CONST_FONT_SIZE)
_detalhes:SetFontSize(barra.lineText1, CONST_FONT_SIZE)
_detalhes:SetFontSize(barra.lineText4, CONST_FONT_SIZE)
barra:SetWidth(169)
local overlayTexture = barra:CreateTexture(nil, "overlay")
+10 -10
View File
@@ -956,7 +956,7 @@ _detalhes.EncounterDetailsTempWindow = function(EncounterDetails)
end
end
table.insert (self.Data, 1, {Points=data;Color=color})
table.insert(self.Data, 1, {Points=data;Color=color})
self.NeedsUpdate=true
end
@@ -2381,13 +2381,13 @@ local ScrollCreateLine = function(self, index)
icon:SetSize(ScrollLineHeight, ScrollLineHeight)
local name = statusBar:CreateFontString("$parentName", "overlay", "GameFontNormal")
_detalhes.gump:SetFontSize (name, 10)
_detalhes.gump:SetFontSize(name, 10)
icon:SetPoint("left", line, "left", 2, 0)
name:SetPoint("left", icon, "right", 2, 0)
_detalhes.gump:SetFontColor(name, "white")
local done = statusBar:CreateFontString("$parentDone", "overlay", "GameFontNormal")
_detalhes.gump:SetFontSize (done, 10)
_detalhes.gump:SetFontSize(done, 10)
_detalhes.gump:SetFontColor(done, "white")
done:SetPoint("right", line, "right", -2, 0)
@@ -2457,9 +2457,9 @@ for i = 1, 10 do
icon:SetSize(16, 16)
icon:SetTexture([[Interface\AddOns\Details\images\clock]])
local name = line:CreateFontString("$parentName", "overlay", "GameFontNormal")
_detalhes.gump:SetFontSize (name, 10)
_detalhes.gump:SetFontSize(name, 10)
local done = line:CreateFontString("$parentDone", "overlay", "GameFontNormal")
_detalhes.gump:SetFontSize (done, 10)
_detalhes.gump:SetFontSize(done, 10)
icon:SetPoint("left", line, "left", 2, 0)
name:SetPoint("left", icon, "right", 2, 0)
@@ -2485,11 +2485,11 @@ for i = 1, 20 do
line:SetBackdropColor(unpack(BGColorDefault))
line:Hide()
local name = line:CreateFontString("$parentName", "overlay", "GameFontNormal")
_detalhes.gump:SetFontSize (name, 9)
_detalhes.gump:SetFontSize(name, 9)
name:SetPoint("left", line, "left", 2, 0)
local done = line:CreateFontString("$parentDone", "overlay", "GameFontNormal")
_detalhes.gump:SetFontSize (done, 9)
_detalhes.gump:SetFontSize(done, 9)
done:SetPoint("right", line, "right", -2, 0)
line.name = name
@@ -2546,7 +2546,7 @@ function PhaseFrame:UpdatePhaseBars()
for index, phase in ipairs(timers) do
local timer = hash [phase]
PhaseFrame.PhasesBars [i].name:SetText("|cFFC0C0C0Phase:|r |cFFFFFFFF" .. phase)
PhaseFrame.PhasesBars [i].done:SetText(_detalhes.gump:IntegerToTimer (timer))
PhaseFrame.PhasesBars [i].done:SetText(_detalhes.gump:IntegerToTimer(timer))
PhaseFrame.PhasesBars [i].phase = phase
PhaseFrame.PhasesBars [i]:Show()
i = i + 1
@@ -2571,12 +2571,12 @@ function PhaseFrame:UpdateSegmentCompareBars (phase)
if (segment ~= segmentTable) then
bar.name:SetText("Segment " .. i .. ":")
_detalhes.gump:SetFontColor(bar.name, "orange")
bar.done:SetText(_detalhes.gump:IntegerToTimer (timers [phase]))
bar.done:SetText(_detalhes.gump:IntegerToTimer(timers [phase]))
_detalhes.gump:SetFontColor(bar.done, "orange")
else
bar.name:SetText("Segment " .. i .. ":")
_detalhes.gump:SetFontColor(bar.name, "white")
bar.done:SetText(_detalhes.gump:IntegerToTimer (timers [phase]))
bar.done:SetText(_detalhes.gump:IntegerToTimer(timers [phase]))
_detalhes.gump:SetFontColor(bar.done, "white")
end
else
@@ -207,7 +207,7 @@ local function CreatePluginFrames()
SOF:EnableMouse(true)
SOF:SetMovable(true)
SOF:SetResizable(true)
SOF:SetClampedToScreen (true)
SOF:SetClampedToScreen(true)
pcall(function()
if (DetailsFramework.IsDragonflight()) then
@@ -566,7 +566,7 @@ local function CreatePluginFrames()
end
--CastStart from the cast_send
table.insert (StreamOverlay.battle_content, 1, {icon1, text1, color1, icon2, icon2coords, text2, color2, backgroundcolor, bordercolor, CastID = ID, CastStart = CastStart, startTime = startTime, endTime = endTime})
table.insert(StreamOverlay.battle_content, 1, {icon1, text1, color1, icon2, icon2coords, text2, color2, backgroundcolor, bordercolor, CastID = ID, CastStart = CastStart, startTime = startTime, endTime = endTime})
table.remove (StreamOverlay.battle_content, StreamOverlay.total_lines+1)
if (StreamOverlay.db.use_square_mode) then
@@ -681,8 +681,8 @@ local function CreatePluginFrames()
row:SetPoint("topright", SOF, "topright", 0, h)
end
StreamOverlay:SetFontSize (row.text1, StreamOverlay.db.font_size)
StreamOverlay:SetFontSize (row.text2, StreamOverlay.db.font_size)
StreamOverlay:SetFontSize(row.text1, StreamOverlay.db.font_size)
StreamOverlay:SetFontSize(row.text2, StreamOverlay.db.font_size)
local font = SharedMedia:Fetch ("font", StreamOverlay.db.font_face)
StreamOverlay:SetFontFace (row.text1, font)
@@ -1630,7 +1630,7 @@ function StreamOverlay:UpdateDpsHpsFrameConfig (PluginDisabled)
local db = StreamOverlay.db.per_second
StreamOverlay:SetFontSize (screen_frame.text, db.size)
StreamOverlay:SetFontSize(screen_frame.text, db.size)
StreamOverlay:SetFontOutline (screen_frame.text, db.font_shadow)
screen_frame:SetScale(db.scale)
@@ -2458,7 +2458,7 @@ function StreamOverlay:OnEvent (_, event, ...)
icon:SetTexture([[Interface\MINIMAP\MOVIERECORDINGICON]])
local title = welcomeWindow:CreateFontString(nil, "overlay", "GameFontNormal")
title:SetText("Details!: Action Tracker (plugin)")
StreamOverlay:SetFontSize (title, 20)
StreamOverlay:SetFontSize(title, 20)
local youtubeTwitchIcons = welcomeWindow:CreateTexture(nil, "overlay")
youtubeTwitchIcons:SetTexture([[Interface\AddOns\Details\images\icons2]])