Open Raid Library update
This commit is contained in:
+1
-1
@@ -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
@@ -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
|
||||
|
||||
@@ -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
@@ -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
@@ -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)
|
||||
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
+132
-372
@@ -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
|
||||
@@ -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,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>
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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
@@ -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 /////
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -6377,7 +6377,7 @@ do
|
||||
end
|
||||
|
||||
sectionFrame.ConsolidadeSpellsSwitch:SetPoint(startX, startY - 20)
|
||||
_detalhes:SetFontSize (sectionFrame.ConsolidadeSpellsLabel, 12)
|
||||
_detalhes:SetFontSize(sectionFrame.ConsolidadeSpellsLabel, 12)
|
||||
|
||||
local sectionOptions = {
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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")
|
||||
|
||||
@@ -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]])
|
||||
|
||||
Reference in New Issue
Block a user