- Attempt to delete the last trash segment in a dungeon run if this trash is the current segment. I'll delete it and pass the last boss segment as the current segment, after that it'll create the overall segment for the dungeon run.
This commit is contained in:
@@ -101,3 +101,5 @@ core\parser.lua
|
||||
functions\loaddata.lua
|
||||
|
||||
startup.lua
|
||||
|
||||
functions\api2.lua
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
|
||||
local dversion = 144
|
||||
local dversion = 145
|
||||
local major, minor = "DetailsFramework-1.0", dversion
|
||||
local DF, oldminor = LibStub:NewLibrary (major, minor)
|
||||
|
||||
|
||||
+168
-109
@@ -6366,7 +6366,6 @@ DF.DataScrollFunctions = {
|
||||
LineOnEnter = function (self)
|
||||
self:SetBackdropColor (unpack (self.backdrop_color_highlight))
|
||||
end,
|
||||
|
||||
LineOnLeave = function (self)
|
||||
self:SetBackdropColor (unpack (self.backdrop_color))
|
||||
end,
|
||||
@@ -8805,16 +8804,34 @@ local timeline_options = {
|
||||
--how many pixels will be use to represent 1 second
|
||||
pixels_per_second = 20,
|
||||
|
||||
scale_min = 0.15,
|
||||
scale_max = 1,
|
||||
|
||||
backdrop = {edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true},
|
||||
backdrop_color = {0, 0, 0, 0.2},
|
||||
backdrop_color_highlight = {.2, .2, .2, 0.4},
|
||||
backdrop_border_color = {0.1, 0.1, 0.1, .2},
|
||||
|
||||
slider_backdrop = {edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true},
|
||||
slider_backdrop_color = {0, 0, 0, 0.2},
|
||||
slider_backdrop_border_color = {0.1, 0.1, 0.1, .2},
|
||||
|
||||
title_template = "ORANGE_FONT_TEMPLATE",
|
||||
text_tempate = "OPTIONS_FONT_TEMPLATE",
|
||||
|
||||
on_enter = DF.DataScrollFunctions.LineOnEnter,
|
||||
on_leave = DF.DataScrollFunctions.LineOnLeave,
|
||||
on_enter = function (self)
|
||||
self:SetBackdropColor (unpack (self.backdrop_color_highlight))
|
||||
end,
|
||||
on_leave = function (self)
|
||||
self:SetBackdropColor (unpack (self.backdrop_color))
|
||||
end,
|
||||
|
||||
block_on_enter = function (self)
|
||||
|
||||
end,
|
||||
block_on_leave = function (self)
|
||||
|
||||
end,
|
||||
}
|
||||
|
||||
local elapsedtime_frame_options = {
|
||||
@@ -8831,7 +8848,7 @@ local elapsedtime_frame_options = {
|
||||
distance = 200, --distance in pixels between each label informing the time
|
||||
distance_min = 50, --minimum distance in pixels
|
||||
draw_line = true, --if true it'll draw a vertical line to represent a segment
|
||||
draw_line_color = {1, 1, 1, 0.3},
|
||||
draw_line_color = {1, 1, 1, 0.2},
|
||||
draw_line_thickness = 1,
|
||||
}
|
||||
|
||||
@@ -8967,6 +8984,7 @@ DF.TimeLineBlockFunctions = {
|
||||
--this is the title and icon of the title
|
||||
if (lineData.icon) then
|
||||
self.icon:SetTexture (lineData.icon)
|
||||
self.icon:SetTexCoord (.1, .9, .1, .9)
|
||||
self.text:SetText (lineData.text or "")
|
||||
self.text:SetPoint ("left", self.icon.widget, "right", 2, 0)
|
||||
else
|
||||
@@ -8975,32 +8993,70 @@ DF.TimeLineBlockFunctions = {
|
||||
text:SetPoint ("left", self, "left", 2, 0)
|
||||
end
|
||||
|
||||
if (self.dataIndex % 2 == 1) then
|
||||
self:SetBackdropColor (0, 0, 0, 0)
|
||||
else
|
||||
local r, g, b, a = unpack (self.backdrop_color)
|
||||
self:SetBackdropColor (r, g, b, a)
|
||||
end
|
||||
|
||||
self:SetWidth (5000)
|
||||
|
||||
local timelineData = lineData.timeline
|
||||
local spellId = lineData.spellId
|
||||
local useIconOnBlock = data.useIconOnBlocks
|
||||
|
||||
for i = 1, #timelineData do
|
||||
|
||||
local blockInfo = timelineData [i]
|
||||
|
||||
local time = blockInfo [1]
|
||||
local length = blockInfo [2]
|
||||
local color = blockInfo [3] or defaultColor
|
||||
local text = blockInfo [4]
|
||||
local icon = blockInfo [5]
|
||||
local tooltip = blockInfo [6]
|
||||
local isAura = blockInfo [3]
|
||||
local auraDuration = blockInfo [4]
|
||||
|
||||
local xOffset = pixelPerSecond * time
|
||||
local width = pixelPerSecond * length
|
||||
|
||||
if (time < -0.2) then
|
||||
xOffset = xOffset / 2.5
|
||||
end
|
||||
|
||||
local block = self:GetBlock (i)
|
||||
block:Show()
|
||||
PixelUtil.SetPoint (block, "left", self, "left", xOffset + headerWidth, 0)
|
||||
PixelUtil.SetSize (block, width, self:GetHeight())
|
||||
block.background:SetVertexColor (unpack (color))
|
||||
|
||||
--guess where it is anchored
|
||||
--guess it's size
|
||||
--both taking in consideration the scroll scale
|
||||
|
||||
block.info.spellId = spellId
|
||||
block.info.time = time
|
||||
block.info.duration = auraDuration
|
||||
|
||||
if (useIconOnBlock) then
|
||||
block.icon:SetTexture (lineData.icon)
|
||||
block.icon:SetTexCoord (.1, .9, .1, .9)
|
||||
block.icon:SetAlpha (.834)
|
||||
block.icon:SetSize (self:GetHeight(), self:GetHeight())
|
||||
|
||||
if (time < -0.2) then
|
||||
block.icon:SetDesaturated (true)
|
||||
else
|
||||
block.icon:SetDesaturated (false)
|
||||
end
|
||||
|
||||
PixelUtil.SetSize (block, self:GetHeight(), self:GetHeight())
|
||||
|
||||
if (isAura) then
|
||||
block.auraLength:Show()
|
||||
block.auraLength:SetWidth (pixelPerSecond * isAura)
|
||||
block:SetWidth (pixelPerSecond * isAura)
|
||||
else
|
||||
block.auraLength:Hide()
|
||||
end
|
||||
|
||||
block.background:SetVertexColor (0, 0, 0, 0)
|
||||
else
|
||||
block.background:SetVertexColor (unpack (color))
|
||||
PixelUtil.SetSize (block, width, self:GetHeight())
|
||||
block.auraLength:Hide()
|
||||
end
|
||||
end
|
||||
end,
|
||||
|
||||
@@ -9014,14 +9070,26 @@ DF.TimeLineBlockFunctions = {
|
||||
background:SetColorTexture (1, 1, 1, 1)
|
||||
local icon = block:CreateTexture (nil, "artwork")
|
||||
local text = block:CreateFontString (nil, "artwork")
|
||||
local auraLength = block:CreateTexture (nil, "border")
|
||||
|
||||
background:SetAllPoints()
|
||||
icon:SetPoint ("left")
|
||||
text:SetPoint ("left", icon, "left", 2, 0)
|
||||
auraLength:SetPoint ("topleft", icon, "topleft", 0, 0)
|
||||
auraLength:SetPoint ("bottomleft", icon, "bottomleft", 0, 0)
|
||||
auraLength:SetColorTexture (1, 1, 1, 1)
|
||||
auraLength:SetVertexColor (1, 1, 1, 0.1)
|
||||
|
||||
block.icon = icon
|
||||
block.text = text
|
||||
block.background = background
|
||||
block.auraLength = auraLength
|
||||
|
||||
block:SetScript ("OnEnter", self:GetParent():GetParent().options.block_on_enter)
|
||||
block:SetScript ("OnLeave", self:GetParent():GetParent().options.block_on_leave)
|
||||
|
||||
block:SetMouseClickEnabled (false)
|
||||
block.info = {}
|
||||
end
|
||||
|
||||
return block
|
||||
@@ -9060,8 +9128,9 @@ DF.TimeLineFunctions = {
|
||||
end
|
||||
line:SetSize (1, self.options.line_height) --width is set when updating the frame
|
||||
|
||||
line:SetScript ("OnEnter", self.options.on_enter)
|
||||
line:SetScript ("OnLeave", self.options.on_leave)
|
||||
line:SetScript ("OnEnter", self.options.on_enter)
|
||||
line:SetScript ("OnLeave", self.options.on_leave)
|
||||
line:SetMouseClickEnabled (false)
|
||||
|
||||
line:SetBackdrop (self.options.backdrop)
|
||||
line:SetBackdropColor (unpack (self.options.backdrop_color))
|
||||
@@ -9092,13 +9161,7 @@ DF.TimeLineFunctions = {
|
||||
|
||||
end,
|
||||
|
||||
--~todo ~doing
|
||||
--+ just finished the blocks alignment and scale, looks to be working okay
|
||||
--+ at the moment the with and height doesn't look correct, the height is way to much and the width looks too short
|
||||
--+ make the blocks start AFTER the title, currently it is in from of them
|
||||
--+ need to create the time line with font string to show the time elapsed
|
||||
--+ make them to scale with a scale bar
|
||||
|
||||
--todo
|
||||
--make the on enter and leave tooltips
|
||||
--set icons and texts
|
||||
--skin the sliders
|
||||
@@ -9110,9 +9173,11 @@ DF.TimeLineFunctions = {
|
||||
|
||||
--calculate the total width
|
||||
local pixelPerSecond = self.options.pixels_per_second
|
||||
local totalLength = self.data.length
|
||||
local totalLength = self.data.length or 1
|
||||
local currentScale = self.currentScale
|
||||
|
||||
self.scaleSlider:Enable()
|
||||
|
||||
--how many pixels represent 1 second
|
||||
local bodyWidth = totalLength * pixelPerSecond * currentScale
|
||||
self.body:SetWidth (bodyWidth + self.options.header_width)
|
||||
@@ -9165,42 +9230,11 @@ DF.TimeLineFunctions = {
|
||||
self.data = data
|
||||
self:RefreshTimeLine()
|
||||
end,
|
||||
|
||||
|
||||
--[=[
|
||||
receives a table with
|
||||
--should be tables of indexes? to save memory on not using hash names
|
||||
|
||||
header = {icon = "", name = ""}, --player name and player icon / need support for more things like boss casts / can be spell name and the icon of the spell / must be as generic as possible
|
||||
data = {time = when it happened, duration = size of the bar, spellID for tooltip, tooltip = {what to add to Cooltip} } --numeric table with data of spells used
|
||||
|
||||
will it scroll vertically too in case there's more data to show?
|
||||
i think it can without any problem since the scroll bar does scroll on both directions
|
||||
|
||||
parts it'll need
|
||||
- a time line
|
||||
- a scructure of lines (rows)
|
||||
- two sliders for vertical and horizontal
|
||||
|
||||
how the zoom scaling will work?
|
||||
a slider in the bottom side of the main slider
|
||||
it starts in 0.5?
|
||||
|
||||
how it will zoom?
|
||||
- change the scale? problem is the height will also be modified, so NO
|
||||
|
||||
- change the width of each bar
|
||||
- change the timeline time
|
||||
- change the max value of the main slider
|
||||
|
||||
|
||||
--]=]
|
||||
|
||||
|
||||
}
|
||||
|
||||
--creates a regular scroll in horizontal position
|
||||
function DF:CreateTimeLineFrame (parent, name, options)
|
||||
function DF:CreateTimeLineFrame (parent, name, options, timelineOptions)
|
||||
|
||||
local width = options and options.width or timeline_options.width
|
||||
local height = options and options.height or timeline_options.height
|
||||
@@ -9212,7 +9246,7 @@ function DF:CreateTimeLineFrame (parent, name, options)
|
||||
|
||||
frameCanvas.data = {}
|
||||
frameCanvas.lines = {}
|
||||
frameCanvas.currentScale = 1
|
||||
frameCanvas.currentScale = 0.5
|
||||
frameCanvas:SetSize (width, height)
|
||||
frameCanvas:SetBackdrop({
|
||||
bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
|
||||
@@ -9232,51 +9266,34 @@ function DF:CreateTimeLineFrame (parent, name, options)
|
||||
frameCanvas:BuildOptionsTable (timeline_options, options)
|
||||
|
||||
--create elapsed time frame
|
||||
frameCanvas.elapsedTimeFrame = DF:CreateElapsedTimeFrame (frameBody)
|
||||
frameCanvas.elapsedTimeFrame = DF:CreateElapsedTimeFrame (frameBody, frameCanvas:GetName() and frameCanvas:GetName() .. "ElapsedTimeFrame", timelineOptions)
|
||||
|
||||
--create horizontal slider
|
||||
local horizontalSlider = CreateFrame ("slider", nil, parent)
|
||||
horizontalSlider.bg = horizontalSlider:CreateTexture (nil, "background")
|
||||
horizontalSlider.bg:SetAllPoints (true)
|
||||
horizontalSlider.bg:SetTexture (0, 0, 0, 0.5)
|
||||
|
||||
|
||||
horizontalSlider:SetBackdrop (frameCanvas.options.slider_backdrop)
|
||||
horizontalSlider:SetBackdropColor (unpack (frameCanvas.options.slider_backdrop_color))
|
||||
horizontalSlider:SetBackdropBorderColor (unpack(frameCanvas.options.slider_backdrop_border_color))
|
||||
|
||||
horizontalSlider.thumb = horizontalSlider:CreateTexture (nil, "OVERLAY")
|
||||
horizontalSlider.thumb:SetTexture ("Interface\\Buttons\\UI-ScrollBar-Knob")
|
||||
horizontalSlider.thumb:SetSize (25, 25)
|
||||
horizontalSlider.thumb:SetTexture ([[Interface\AddOns\Details\images\icons2]])
|
||||
horizontalSlider.thumb:SetTexCoord (478/512, 496/512, 104/512, 120/512)
|
||||
horizontalSlider.thumb:SetSize (20, 18)
|
||||
horizontalSlider.thumb:SetVertexColor (0.6, 0.6, 0.6, 0.95)
|
||||
|
||||
horizontalSlider:SetThumbTexture (horizontalSlider.thumb)
|
||||
horizontalSlider:SetOrientation ("horizontal")
|
||||
horizontalSlider:SetSize (width, 20)
|
||||
horizontalSlider:SetSize (width + 20, 20)
|
||||
horizontalSlider:SetPoint ("topleft", frameCanvas, "bottomleft")
|
||||
horizontalSlider:SetMinMaxValues (0, scrollWidth)
|
||||
horizontalSlider:SetValue (0)
|
||||
horizontalSlider:SetScript ("OnValueChanged", function (self)
|
||||
frameCanvas:SetHorizontalScroll (self:GetValue())
|
||||
frameCanvas:SetHorizontalScroll (self:GetValue())
|
||||
end)
|
||||
|
||||
--[=[
|
||||
frameCanvas:EnableMouseWheel (true)
|
||||
frameCanvas:SetScript ("OnMouseWheel", function (self, delta)
|
||||
delta = delta * -1
|
||||
|
||||
local current = horizontalSlider:GetValue()
|
||||
|
||||
if (IsShiftKeyDown() and (delta > 0)) then
|
||||
horizontalSlider:SetValue(0)
|
||||
|
||||
elseif (IsShiftKeyDown() and (delta < 0)) then
|
||||
horizontalSlider:SetValue (scrollWidth)
|
||||
|
||||
elseif ((delta < 0) and (current < scrollWidth)) then
|
||||
horizontalSlider:SetValue (current + 20)
|
||||
|
||||
elseif ((delta > 0) and (current > 1)) then
|
||||
horizontalSlider:SetValue (current - 20)
|
||||
|
||||
end
|
||||
end)
|
||||
--]=]
|
||||
|
||||
frameCanvas.horizontalSlider = horizontalSlider
|
||||
|
||||
--create scale slider
|
||||
@@ -9284,65 +9301,107 @@ function DF:CreateTimeLineFrame (parent, name, options)
|
||||
scaleSlider.bg = scaleSlider:CreateTexture (nil, "background")
|
||||
scaleSlider.bg:SetAllPoints (true)
|
||||
scaleSlider.bg:SetTexture (0, 0, 0, 0.5)
|
||||
scaleSlider:Disable()
|
||||
frameCanvas.scaleSlider = scaleSlider
|
||||
|
||||
scaleSlider:SetBackdrop (frameCanvas.options.slider_backdrop)
|
||||
scaleSlider:SetBackdropColor (unpack (frameCanvas.options.slider_backdrop_color))
|
||||
scaleSlider:SetBackdropBorderColor (unpack(frameCanvas.options.slider_backdrop_border_color))
|
||||
|
||||
scaleSlider.thumb = scaleSlider:CreateTexture (nil, "OVERLAY")
|
||||
scaleSlider.thumb:SetTexture ("Interface\\Buttons\\UI-ScrollBar-Knob")
|
||||
scaleSlider.thumb:SetSize (25, 25)
|
||||
scaleSlider.thumb:SetTexture ([[Interface\AddOns\Details\images\icons2]])
|
||||
scaleSlider.thumb:SetTexCoord (478/512, 496/512, 104/512, 120/512)
|
||||
scaleSlider.thumb:SetSize (20, 18)
|
||||
scaleSlider.thumb:SetVertexColor (0.6, 0.6, 0.6, 0.95)
|
||||
|
||||
scaleSlider:SetThumbTexture (scaleSlider.thumb)
|
||||
scaleSlider:SetOrientation ("horizontal")
|
||||
scaleSlider:SetSize (width, 20)
|
||||
scaleSlider:SetSize (width + 20, 20)
|
||||
scaleSlider:SetPoint ("topleft", horizontalSlider, "bottomleft", 0, -2)
|
||||
scaleSlider:SetMinMaxValues (0.1, 1)
|
||||
scaleSlider:SetValue (1)
|
||||
scaleSlider:SetMinMaxValues (frameCanvas.options.scale_min, frameCanvas.options.scale_max)
|
||||
scaleSlider:SetValue (DF:GetRangeValue (frameCanvas.options.scale_min, frameCanvas.options.scale_max, 0.5))
|
||||
|
||||
scaleSlider:SetScript ("OnValueChanged", function (self)
|
||||
local current = scaleSlider:GetValue()
|
||||
frameCanvas.currentScale = current
|
||||
frameCanvas:RefreshTimeLine()
|
||||
end)
|
||||
|
||||
|
||||
--create vertical slider
|
||||
local verticalSlider = CreateFrame ("slider", nil, parent)
|
||||
verticalSlider.bg = verticalSlider:CreateTexture (nil, "background")
|
||||
verticalSlider.bg:SetAllPoints (true)
|
||||
verticalSlider.bg:SetTexture (0, 0, 0, 0.5)
|
||||
|
||||
verticalSlider:SetBackdrop (frameCanvas.options.slider_backdrop)
|
||||
verticalSlider:SetBackdropColor (unpack (frameCanvas.options.slider_backdrop_color))
|
||||
verticalSlider:SetBackdropBorderColor (unpack(frameCanvas.options.slider_backdrop_border_color))
|
||||
|
||||
verticalSlider.thumb = verticalSlider:CreateTexture (nil, "OVERLAY")
|
||||
verticalSlider.thumb:SetTexture ("Interface\\Buttons\\UI-ScrollBar-Knob")
|
||||
verticalSlider.thumb:SetSize (25, 25)
|
||||
verticalSlider.thumb:SetTexture ([[Interface\AddOns\Details\images\icons2]])
|
||||
verticalSlider.thumb:SetTexCoord (482/512, 492/512, 104/512, 120/512)
|
||||
verticalSlider.thumb:SetSize (12, 12)
|
||||
verticalSlider.thumb:SetVertexColor (0.6, 0.6, 0.6, 0.95)
|
||||
|
||||
verticalSlider:SetThumbTexture (verticalSlider.thumb)
|
||||
verticalSlider:SetOrientation ("vertical")
|
||||
verticalSlider:SetSize (20, height)
|
||||
verticalSlider:SetPoint ("topleft", frameCanvas, "topright", 2, 0)
|
||||
verticalSlider:SetSize (20, height - 2)
|
||||
verticalSlider:SetPoint ("topleft", frameCanvas, "topright", 0, 0)
|
||||
verticalSlider:SetMinMaxValues (0, scrollHeight)
|
||||
verticalSlider:SetValue (0)
|
||||
verticalSlider:SetScript ("OnValueChanged", function (self)
|
||||
frameCanvas:SetVerticalScroll (self:GetValue())
|
||||
end)
|
||||
|
||||
frameCanvas.verticalSlider = verticalSlider
|
||||
|
||||
--mouse scroll
|
||||
frameCanvas:EnableMouseWheel (true)
|
||||
frameCanvas:SetScript ("OnMouseWheel", function (self, delta)
|
||||
delta = delta
|
||||
local minValue, maxValue = horizontalSlider:GetMinMaxValues()
|
||||
local currentHorizontal = horizontalSlider:GetValue()
|
||||
|
||||
local current = verticalSlider:GetValue()
|
||||
if (IsShiftKeyDown() and delta < 0) then
|
||||
local amountToScroll = frameBody:GetHeight() / 20
|
||||
verticalSlider:SetValue (verticalSlider:GetValue() + amountToScroll)
|
||||
|
||||
elseif (IsShiftKeyDown() and delta > 0) then
|
||||
local amountToScroll = frameBody:GetHeight() / 20
|
||||
verticalSlider:SetValue (verticalSlider:GetValue() - amountToScroll)
|
||||
|
||||
elseif (IsControlKeyDown() and delta > 0) then
|
||||
scaleSlider:SetValue (min (scaleSlider:GetValue() + 0.1, 1))
|
||||
|
||||
if (IsShiftKeyDown() and (delta > 0)) then
|
||||
verticalSlider:SetValue(0)
|
||||
elseif (IsControlKeyDown() and delta < 0) then
|
||||
scaleSlider:SetValue (max (scaleSlider:GetValue() - 0.1, 0.15))
|
||||
|
||||
elseif (IsShiftKeyDown() and (delta < 0)) then
|
||||
verticalSlider:SetValue (scrollWidth)
|
||||
elseif (delta < 0 and currentHorizontal < maxValue) then
|
||||
local amountToScroll = frameBody:GetWidth() / 20
|
||||
horizontalSlider:SetValue (currentHorizontal + amountToScroll)
|
||||
|
||||
elseif ((delta < 0) and (current < scrollWidth)) then
|
||||
verticalSlider:SetValue (current + 20)
|
||||
|
||||
elseif ((delta > 0) and (current > 1)) then
|
||||
verticalSlider:SetValue (current - 20)
|
||||
elseif (delta > 0 and maxValue > 1) then
|
||||
local amountToScroll = frameBody:GetWidth() / 20
|
||||
horizontalSlider:SetValue (currentHorizontal - amountToScroll)
|
||||
|
||||
end
|
||||
end)
|
||||
|
||||
frameCanvas.verticalSlider = verticalSlider
|
||||
--mouse drag
|
||||
frameBody:SetScript ("OnMouseDown", function (self, button)
|
||||
local x = GetCursorPosition()
|
||||
self.MouseX = x
|
||||
|
||||
frameBody:SetScript ("OnUpdate", function (self, deltaTime)
|
||||
local x = GetCursorPosition()
|
||||
local deltaX = self.MouseX - x
|
||||
local current = horizontalSlider:GetValue()
|
||||
horizontalSlider:SetValue (current + (deltaX * 1.2) * ((IsShiftKeyDown() and 2) or (IsAltKeyDown() and 0.5) or 1))
|
||||
self.MouseX = x
|
||||
end)
|
||||
end)
|
||||
frameBody:SetScript ("OnMouseUp", function (self, button)
|
||||
frameBody:SetScript ("OnUpdate", nil)
|
||||
end)
|
||||
|
||||
return frameCanvas
|
||||
end
|
||||
|
||||
@@ -5,9 +5,9 @@
|
||||
_detalhes = LibStub("AceAddon-3.0"):NewAddon("_detalhes", "AceTimer-3.0", "AceComm-3.0", "AceSerializer-3.0", "NickTag-1.0")
|
||||
|
||||
_detalhes.build_counter = 6923
|
||||
_detalhes.alpha_build_counter = 7002 --if this is higher than the regular counter, use it instead
|
||||
_detalhes.game_version = "v8.1.0"
|
||||
_detalhes.userversion = "v8.1.0." .. _detalhes.build_counter
|
||||
_detalhes.alpha_build_counter = 7014 --if this is higher than the regular counter, use it instead
|
||||
_detalhes.game_version = "v8.1.5"
|
||||
_detalhes.userversion = "v8.1.5." .. _detalhes.build_counter
|
||||
_detalhes.realversion = 136 --core version, this is used to check API version for scripts and plugins (see alias below)
|
||||
_detalhes.APIVersion = _detalhes.realversion --core version
|
||||
_detalhes.version = _detalhes.userversion .. " (core " .. _detalhes.realversion .. ")" --simple stirng to show to players
|
||||
|
||||
@@ -399,8 +399,9 @@
|
||||
esta_tabela.TimeData = _detalhes:TimeDataCreateCombatTables()
|
||||
esta_tabela.PhaseData = {{1, 1}, damage = {}, heal = {}, damage_section = {}, heal_section = {}} --[1] phase number [2] phase started
|
||||
|
||||
--> for external plugin usage
|
||||
--> for external plugin usage, these tables are guaranteed to be saved with the combat
|
||||
esta_tabela.spells_cast_timeline = {}
|
||||
esta_tabela.aura_timeline = {}
|
||||
esta_tabela.cleu_timeline = {}
|
||||
|
||||
--> Skill cache (not used)
|
||||
|
||||
@@ -0,0 +1,158 @@
|
||||
|
||||
--[=[
|
||||
Details API 2.0
|
||||
This is a high level API for Details! Damage Meter
|
||||
|
||||
|
||||
|
||||
--]=]
|
||||
|
||||
--local helpers
|
||||
local getCombatObject = function (segmentNumber)
|
||||
local combatObject
|
||||
|
||||
--select which segment to use, use low level variables for performance
|
||||
if (segment == -1) then
|
||||
combatObject = _detalhes.tabela_overall
|
||||
elseif (segment == 0) then
|
||||
combatObject = _detalhes.tabela_vigente
|
||||
else
|
||||
combatObject = _detalhes.tabela_historico.tabelas [segment]
|
||||
end
|
||||
|
||||
return combatObject
|
||||
end
|
||||
|
||||
local getActorObjectFromCombat = function (combatObject, containerID, actorName)
|
||||
local index = combatObject [containerID]._NameIndexTable [actorName]
|
||||
return combatObject [containerID]._ActorTable [index]
|
||||
end
|
||||
|
||||
--api
|
||||
Details.API_Description = {}
|
||||
|
||||
--[=[
|
||||
Details:GetPlayerDamage ( playerName, segment = 0 )
|
||||
returns the damage of player or npc, must pass the full player name (with realm name if the player is from a different realm), pet names must have the owner name.
|
||||
|
||||
--=]=]
|
||||
Details.API_Description.GetPlayerDamage = {
|
||||
desc = "Returns the damage of player or npc, must pass the full player name (with realm name if the player is from a different realm), pet names must have the owner name.",
|
||||
parameters = {
|
||||
{
|
||||
name = "playerName",
|
||||
desc = "Name of the player, pet, npc. Must be the exactly name with realm included if the player isn't from the same server as you.",
|
||||
},
|
||||
{
|
||||
name = "segment",
|
||||
type = "number",
|
||||
desc = "Which segment to retrive the player damage, default value is current segment. Use -1 for overall data or value from 1 to 25 for other segments.",
|
||||
},
|
||||
},
|
||||
returnValues = {
|
||||
{
|
||||
name = "playerDamage",
|
||||
type = "number",
|
||||
desc = "Number (float) representing the player damage.",
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
function Details.GetPlayerDamage (playerName, segment)
|
||||
segment = segment or 0
|
||||
local combatObject = getCombatObject (segment)
|
||||
|
||||
if (not combatObject) then
|
||||
return 0
|
||||
end
|
||||
|
||||
local playerObject = getActorObjectFromCombat (combatObject, 1, playerName)
|
||||
if (not playerObject) then
|
||||
return 0
|
||||
end
|
||||
|
||||
return playerObject.total or 0
|
||||
end
|
||||
|
||||
|
||||
--[=[
|
||||
Details:GetPlayerDamageOnUnit ( playerName, unitName, segment = 0 )
|
||||
returns the damage of player or npc in a specific target
|
||||
|
||||
--=]=]
|
||||
Details.API_Description.GetPlayerDamageOnUnit = {
|
||||
desc = "Returns the damage of player or npc in a specific target.",
|
||||
parameters = {
|
||||
{
|
||||
name = "playerName",
|
||||
desc = "Name of the player, pet, npc. Must be the exactly name with realm included if the player isn't from the same server as you.",
|
||||
},
|
||||
{
|
||||
name = "unitName",
|
||||
desc = "Name of the unit target.",
|
||||
},
|
||||
{
|
||||
name = "segment",
|
||||
type = "number",
|
||||
desc = "Which segment to retrive the player damage, default value is current segment. Use -1 for overall data or value from 1 to 25 for other segments.",
|
||||
},
|
||||
},
|
||||
returnValues = {
|
||||
{
|
||||
name = "damageOnTarget",
|
||||
type = "number",
|
||||
desc = "Number (float) representing the player damage on the unit target.",
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
function Details.GetPlayerDamageOnUnit (playerName, unitName, segment)
|
||||
segment = segment or 0
|
||||
local combatObject = getCombatObject (segment)
|
||||
|
||||
if (not combatObject) then
|
||||
return 0
|
||||
end
|
||||
|
||||
local playerObject = getActorObjectFromCombat (combatObject, 1, playerName)
|
||||
if (not playerObject) then
|
||||
return 0
|
||||
end
|
||||
|
||||
return playerObject.targets [unitName] or 0
|
||||
end
|
||||
|
||||
|
||||
--[=[
|
||||
|
||||
--=]=]
|
||||
|
||||
|
||||
|
||||
--[=[
|
||||
|
||||
--=]=]
|
||||
|
||||
|
||||
|
||||
--[=[
|
||||
|
||||
--=]=]
|
||||
|
||||
|
||||
|
||||
--[=[
|
||||
|
||||
--=]=]
|
||||
|
||||
|
||||
|
||||
--[=[
|
||||
|
||||
--=]=]
|
||||
|
||||
|
||||
|
||||
--[=[
|
||||
|
||||
--=]=]
|
||||
+26
-18
@@ -609,8 +609,6 @@ function _G._detalhes:Start()
|
||||
endDate = whenEnded
|
||||
end
|
||||
lastSegment = pastCombat
|
||||
|
||||
Details:Msg ("segment " .. i .. " merged.")
|
||||
end
|
||||
|
||||
--> set the segment time / using a sum of combat times, this combat time is reliable
|
||||
@@ -637,28 +635,46 @@ function _G._detalhes:Start()
|
||||
end
|
||||
|
||||
--> should delete the trash segments after the merge?
|
||||
Details:Msg ("merge finished, starting clean up of merged segments.")
|
||||
|
||||
if (_detalhes.mythic_plus.delete_trash_after_merge) then
|
||||
local removedCurrentSegment = false
|
||||
local segmentHistory = self:GetCombatSegments()
|
||||
for _, pastCombat in ipairs (segmentsToMerge) do
|
||||
for i = #segmentHistory, 1, -1 do
|
||||
local segment = segmentHistory [i]
|
||||
if (segment == pastCombat) then
|
||||
if (_detalhes.tabela_vigente ~= segment) then
|
||||
--> remove the segment
|
||||
tremove (segmentHistory, i)
|
||||
Details:Msg ("segment " .. i .. " removed.")
|
||||
else
|
||||
Details:Msg ("error removing segment " .. i .. ", reason: the segment is the current segment.")
|
||||
--> remove the segment
|
||||
if (_detalhes.tabela_vigente == segment) then
|
||||
removedCurrentSegment = true
|
||||
end
|
||||
tremove (segmentHistory, i)
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
for i = #segmentsToMerge, 1, -1 do
|
||||
tremove (segmentsToMerge, i)
|
||||
end
|
||||
|
||||
if (removedCurrentSegment) then
|
||||
--> find another current segment
|
||||
local segmentHistory = self:GetCombatSegments()
|
||||
_detalhes.tabela_vigente = segmentHistory [1]
|
||||
|
||||
if (not _detalhes.tabela_vigente) then
|
||||
--> assuming there's no segment from the dungeon run
|
||||
self:EntrarEmCombate()
|
||||
self:SairDoCombate()
|
||||
end
|
||||
|
||||
--> update all windows
|
||||
self:InstanciaCallFunction (self.gump.Fade, "in", nil, "barras")
|
||||
self:InstanciaCallFunction (self.AtualizaSegmentos)
|
||||
self:InstanciaCallFunction (self.AtualizaSoloMode_AfertReset)
|
||||
self:InstanciaCallFunction (self.ResetaGump)
|
||||
self:AtualizaGumpPrincipal (-1, true)
|
||||
end
|
||||
|
||||
self:SendEvent ("DETAILS_DATA_SEGMENTREMOVED")
|
||||
else
|
||||
--> clear the segments to merge table
|
||||
@@ -803,8 +819,6 @@ function _G._detalhes:Start()
|
||||
--> this mean a combat was opened after the last boss of the dungeon was killed
|
||||
if (not self.tabela_vigente.is_boss and self.tabela_vigente:GetCombatTime() > 5) then
|
||||
|
||||
Details:Msg ("last segment isn't a boss segment, need to merge it with latest trash segment.")
|
||||
|
||||
if (newFrame.DevelopmentDebug) then
|
||||
print ("Details!", "MythicDungeonFinished() > the last combat isn't a boss fight, might have trash after bosses done.")
|
||||
end
|
||||
@@ -834,7 +848,6 @@ function _G._detalhes:Start()
|
||||
|
||||
--> merge this segment
|
||||
tinsert (segmentsToMerge, pastCombat)
|
||||
Details:Msg ("segment " .. i .. " added to merge after last boss.")
|
||||
|
||||
if (newFrame.DevelopmentDebug) then
|
||||
print ("MythicDungeonFinished() > found after last boss combat")
|
||||
@@ -857,7 +870,6 @@ function _G._detalhes:Start()
|
||||
local pastCombat = segmentHistory [i]
|
||||
if (pastCombat and pastCombat.is_mythic_dungeon and pastCombat.is_mythic_dungeon.SegmentID == "trashoverall") then
|
||||
latestTrashOverall = pastCombat
|
||||
Details:Msg ("found last trash overall on segment " .. i .. ", starting the merge.")
|
||||
break
|
||||
end
|
||||
end
|
||||
@@ -880,11 +892,7 @@ function _G._detalhes:Start()
|
||||
-- end
|
||||
-- _detalhes.schedule_mythicdungeon_endtrash_merge = true
|
||||
--end
|
||||
else
|
||||
Details:Msg ("failed to find the trash overall for the last boss of the dungeon.")
|
||||
end
|
||||
else
|
||||
Details:Msg ("no trash segments detected after the last boss in the dungeon.")
|
||||
end
|
||||
|
||||
--> merge segments
|
||||
|
||||
Reference in New Issue
Block a user