Added support for mythic+ deaths

This commit is contained in:
Tercio Jose
2023-02-27 12:03:09 -03:00
parent d7f15831fa
commit 0dd7b1e91b
5 changed files with 197 additions and 156 deletions
+96 -91
View File
@@ -161,14 +161,6 @@ function Details:GetSpellCastAmount(combat, actorName, spellId) --[[exported]]
return 0
end
--[[exported]] function Details:GetSpellTableFromContainer(spellContainerName, spellId)
local spellContainer = self[spellContainerName]
if (spellContainer) then
local spellTable = spellContainer._ActorTable[spellId]
return spellTable
end
end
function atributo_misc:NovaTabela(serial, nome, link)
local newUtilityActor = {
last_event = 0,
@@ -675,107 +667,120 @@ function atributo_misc:DeadAtualizarBarra (morte, whichRowLine, colocacao, insta
end
function atributo_misc:RefreshWindow (instancia, tabela_do_combate, forcar, exportar, refresh_needed)
function atributo_misc:RefreshWindow(instance, combatObject, bIsForceRefresh, bIsExport)
---@type actorcontainer
local utilityActorContainer = combatObject[class_type]
local showing = tabela_do_combate [class_type] --o que esta sendo mostrado -> [1] - dano [2] - cura --pega o container com ._NameIndexTable ._ActorTable
if (#showing._ActorTable < 1) then --no h barras para mostrar
return _detalhes:EsconderBarrasNaoUsadas (instancia, showing), "", 0, 0
if (#utilityActorContainer._ActorTable < 1) then --no h barras para mostrar
return _detalhes:EsconderBarrasNaoUsadas (instance, utilityActorContainer), "", 0, 0
end
local total = 0
instancia.top = 0
instance.top = 0
local sub_atributo = instancia.sub_atributo --o que esta sendo mostrado nesta instncia
local conteudo = showing._ActorTable
--the main attribute is utility, the sub attribute is the type of utility (cc break, ress, etc)
local subAttribute = instance.sub_atributo
local conteudo = utilityActorContainer._ActorTable
local amount = #conteudo
local modo = instancia.modo
local modo = instance.modo
if (exportar) then
if (type(exportar) == "boolean") then
if (sub_atributo == 1) then --CC BREAKS
if (bIsExport) then
if (type(bIsExport) == "boolean") then
if (subAttribute == 1) then --CC BREAKS
keyName = "cc_break"
elseif (sub_atributo == 2) then --RESS
elseif (subAttribute == 2) then --RESS
keyName = "ress"
elseif (sub_atributo == 3) then --INTERRUPT
elseif (subAttribute == 3) then --INTERRUPT
keyName = "interrupt"
elseif (sub_atributo == 4) then --DISPELLS
elseif (subAttribute == 4) then --DISPELLS
keyName = "dispell"
elseif (sub_atributo == 5) then --DEATHS
elseif (subAttribute == 5) then --DEATHS
keyName = "dead"
elseif (sub_atributo == 6) then --DEFENSIVE COOLDOWNS
elseif (subAttribute == 6) then --DEFENSIVE COOLDOWNS
keyName = "cooldowns_defensive"
elseif (sub_atributo == 7) then --BUFF UPTIME
elseif (subAttribute == 7) then --BUFF UPTIME
keyName = "buff_uptime"
elseif (sub_atributo == 8) then --DEBUFF UPTIME
elseif (subAttribute == 8) then --DEBUFF UPTIME
keyName = "debuff_uptime"
end
else
keyName = exportar.key
modo = exportar.modo
keyName = bIsExport.key
modo = bIsExport.modo
end
elseif (instancia.atributo == 5) then --custom
elseif (instance.atributo == 5) then --custom
keyName = "custom"
total = tabela_do_combate.totals [instancia.customName]
total = combatObject.totals [instance.customName]
else
--pega qual a sub key que ser usada
if (sub_atributo == 1) then --CC BREAKS
if (subAttribute == 1) then --CC BREAKS
keyName = "cc_break"
elseif (sub_atributo == 2) then --RESS
elseif (subAttribute == 2) then --RESS
keyName = "ress"
elseif (sub_atributo == 3) then --INTERRUPT
elseif (subAttribute == 3) then --INTERRUPT
keyName = "interrupt"
elseif (sub_atributo == 4) then --DISPELLS
elseif (subAttribute == 4) then --DISPELLS
keyName = "dispell"
elseif (sub_atributo == 5) then --DEATHS
elseif (subAttribute == 5) then --DEATHS
keyName = "dead"
elseif (sub_atributo == 6) then --DEFENSIVE COOLDOWNS
elseif (subAttribute == 6) then --DEFENSIVE COOLDOWNS
keyName = "cooldowns_defensive"
elseif (sub_atributo == 7) then --BUFF UPTIME
elseif (subAttribute == 7) then --BUFF UPTIME
keyName = "buff_uptime"
elseif (sub_atributo == 8) then --DEBUFF UPTIME
elseif (subAttribute == 8) then --DEBUFF UPTIME
keyName = "debuff_uptime"
end
end
if (keyName == "dead") then
local mortes = tabela_do_combate.last_events_tables
instancia.top = 1
total = #mortes
local allDeathsInTheCombat = combatObject.last_events_tables
instance.top = 1
total = #allDeathsInTheCombat
if (exportar) then
return mortes
if (bIsExport) then
return allDeathsInTheCombat
end
if (total < 1) then
instancia:EsconderScrollBar()
return _detalhes:EndRefresh (instancia, total, tabela_do_combate, showing) --retorna a tabela que precisa ganhar o refresh
instance:EsconderScrollBar()
return _detalhes:EndRefresh(instance, total, combatObject, utilityActorContainer)
end
--estra mostrando ALL ento posso seguir o padro correto? primeiro, atualiza a scroll bar...
instancia:RefreshScrollBar (total)
instance:RefreshScrollBar(total)
--depois faz a atualizao normal dele atravs dos_ iterators
local whichRowLine = 1
local barras_container = instancia.barras
local percentage_type = instancia.row_info.percent_type
local bIsReverse = true
for i = instancia.barraS[1], instancia.barraS[2], 1 do --vai atualizar s o range que esta sendo mostrado
if (mortes[i]) then --correo para um raro e desconhecido problema onde mortes[i] nil
atributo_misc:DeadAtualizarBarra (mortes[i], whichRowLine, i, instancia)
whichRowLine = whichRowLine+1
--if this is reverse, need to invert the values in the table which holds the deaths in the combat
if (bIsReverse) then
local tempTable = {}
for i = #allDeathsInTheCombat, 1, -1 do
tempTable[#tempTable+1] = allDeathsInTheCombat[i]
end
--update only the lines shown
for i = instance.barraS[1], instance.barraS[2], 1 do
if (tempTable[i]) then
atributo_misc:DeadAtualizarBarra(tempTable[i], whichRowLine, i, instance)
whichRowLine = whichRowLine+1
end
end
else
--update only the lines shown
for i = instance.barraS[1], instance.barraS[2], 1 do
if (allDeathsInTheCombat[i]) then
atributo_misc:DeadAtualizarBarra(allDeathsInTheCombat[i], whichRowLine, i, instance)
whichRowLine = whichRowLine+1
end
end
end
return _detalhes:EndRefresh (instancia, total, tabela_do_combate, showing) --retorna a tabela que precisa ganhar o refresh
return _detalhes:EndRefresh(instance, total, combatObject, utilityActorContainer)
else
if (instancia.atributo == 5) then --custom
if (instance.atributo == 5) then --custom
--faz o sort da categoria e retorna o amount corrigido
table.sort (conteudo, _detalhes.SortIfHaveKey)
@@ -789,10 +794,10 @@ function atributo_misc:RefreshWindow (instancia, tabela_do_combate, forcar, expo
end
--pega o total ja aplicado na tabela do combate
total = tabela_do_combate.totals [class_type] [keyName]
total = combatObject.totals [class_type] [keyName]
--grava o total
instancia.top = conteudo[1][keyName]
instance.top = conteudo[1][keyName]
elseif (modo == modo_ALL) then --mostrando ALL
@@ -808,10 +813,10 @@ function atributo_misc:RefreshWindow (instancia, tabela_do_combate, forcar, expo
end
--pega o total ja aplicado na tabela do combate
total = tabela_do_combate.totals [class_type] [keyName]
total = combatObject.totals [class_type] [keyName]
--grava o total
instancia.top = conteudo[1][keyName]
instance.top = conteudo[1][keyName]
elseif (modo == modo_GROUP) then --mostrando GROUP
@@ -824,7 +829,7 @@ function atributo_misc:RefreshWindow (instancia, tabela_do_combate, forcar, expo
amount = index - 1
break
elseif (index == 1) then --esse IF aqui, precisa mesmo ser aqui? no daria pra pega-lo com uma chave [1] nad grupo == true?
instancia.top = conteudo[1][keyName]
instance.top = conteudo[1][keyName]
end
total = total + player[keyName]
@@ -838,46 +843,46 @@ function atributo_misc:RefreshWindow (instancia, tabela_do_combate, forcar, expo
end
--refaz o mapa do container
showing:remapear()
utilityActorContainer:remapear()
if (exportar) then
return total, keyName, instancia.top, amount
if (bIsExport) then
return total, keyName, instance.top, amount
end
if (amount < 1) then --no h barras para mostrar
instancia:EsconderScrollBar() --precisaria esconder a scroll bar
return _detalhes:EndRefresh (instancia, total, tabela_do_combate, showing) --retorna a tabela que precisa ganhar o refresh
instance:EsconderScrollBar() --precisaria esconder a scroll bar
return _detalhes:EndRefresh (instance, total, combatObject, utilityActorContainer) --retorna a tabela que precisa ganhar o refresh
end
--estra mostrando ALL ento posso seguir o padro correto? primeiro, atualiza a scroll bar...
instancia:RefreshScrollBar (amount)
instance:RefreshScrollBar (amount)
--depois faz a atualizao normal dele atravs dos_ iterators
local whichRowLine = 1
local barras_container = instancia.barras
local percentage_type = instancia.row_info.percent_type
local bars_show_data = instancia.row_info.textR_show_data
local bars_brackets = instancia:GetBarBracket()
local bars_separator = instancia:GetBarSeparator()
local use_animations = _detalhes.is_using_row_animations and (not instancia.baseframe.isStretching and not forcar)
local barras_container = instance.barras
local percentage_type = instance.row_info.percent_type
local bars_show_data = instance.row_info.textR_show_data
local bars_brackets = instance:GetBarBracket()
local bars_separator = instance:GetBarSeparator()
local use_animations = _detalhes.is_using_row_animations and (not instance.baseframe.isStretching and not bIsForceRefresh)
if (total == 0) then
total = 0.00000001
end
UsingCustomLeftText = instancia.row_info.textL_enable_custom_text
UsingCustomRightText = instancia.row_info.textR_enable_custom_text
UsingCustomLeftText = instance.row_info.textL_enable_custom_text
UsingCustomRightText = instance.row_info.textR_enable_custom_text
if (instancia.bars_sort_direction == 1) then --top to bottom
for i = instancia.barraS[1], instancia.barraS[2], 1 do --vai atualizar s o range que esta sendo mostrado
conteudo[i]:RefreshLine(instancia, barras_container, whichRowLine, i, total, sub_atributo, forcar, keyName, nil, percentage_type, use_animations, bars_show_data, bars_brackets, bars_separator)
if (instance.bars_sort_direction == 1) then --top to bottom
for i = instance.barraS[1], instance.barraS[2], 1 do --vai atualizar s o range que esta sendo mostrado
conteudo[i]:RefreshLine(instance, barras_container, whichRowLine, i, total, subAttribute, bIsForceRefresh, keyName, nil, percentage_type, use_animations, bars_show_data, bars_brackets, bars_separator)
whichRowLine = whichRowLine+1
end
elseif (instancia.bars_sort_direction == 2) then --bottom to top
for i = instancia.barraS[2], instancia.barraS[1], -1 do --vai atualizar s o range que esta sendo mostrado
elseif (instance.bars_sort_direction == 2) then --bottom to top
for i = instance.barraS[2], instance.barraS[1], -1 do --vai atualizar s o range que esta sendo mostrado
if (conteudo[i]) then
conteudo[i]:RefreshLine(instancia, barras_container, whichRowLine, i, total, sub_atributo, forcar, keyName, nil, percentage_type, use_animations, bars_show_data, bars_brackets, bars_separator)
conteudo[i]:RefreshLine(instance, barras_container, whichRowLine, i, total, subAttribute, bIsForceRefresh, keyName, nil, percentage_type, use_animations, bars_show_data, bars_brackets, bars_separator)
whichRowLine = whichRowLine+1
end
end
@@ -885,10 +890,10 @@ function atributo_misc:RefreshWindow (instancia, tabela_do_combate, forcar, expo
end
if (use_animations) then
instancia:PerformAnimations (whichRowLine-1)
instance:PerformAnimations (whichRowLine-1)
end
if (instancia.atributo == 5) then --custom
if (instance.atributo == 5) then --custom
--zerar o .custom dos_ Actors
for index, player in ipairs(conteudo) do
if (player.custom > 0) then
@@ -900,15 +905,15 @@ function atributo_misc:RefreshWindow (instancia, tabela_do_combate, forcar, expo
end
--beta, hidar barras no usadas durante um refresh forado
if (forcar) then
if (instancia.modo == 2) then --group
for i = whichRowLine, instancia.rows_fit_in_window do
Details.FadeHandler.Fader(instancia.barras [i], "in", Details.fade_speed)
if (bIsForceRefresh) then
if (instance.modo == 2) then --group
for i = whichRowLine, instance.rows_fit_in_window do
Details.FadeHandler.Fader(instance.barras [i], "in", Details.fade_speed)
end
end
end
return _detalhes:EndRefresh (instancia, total, tabela_do_combate, showing) --retorna a tabela que precisa ganhar o refresh
return _detalhes:EndRefresh (instance, total, combatObject, utilityActorContainer) --retorna a tabela que precisa ganhar o refresh
end
+20 -20
View File
@@ -45,15 +45,15 @@ function segmentClass:NovoHistorico()
return esta_tabela
end
function segmentClass:adicionar_overall (tabela)
function segmentClass:adicionar_overall (combatObject)
local zoneName, zoneType = GetInstanceInfo()
if (zoneType ~= "none" and tabela:GetCombatTime() <= Details.minimum_overall_combat_time) then
if (zoneType ~= "none" and combatObject:GetCombatTime() <= Details.minimum_overall_combat_time) then
return
end
if (Details.overall_clear_newboss) then
--only for raids
if (tabela.instance_type == "raid" and tabela.is_boss) then
if (combatObject.instance_type == "raid" and combatObject.is_boss) then
if (Details.last_encounter ~= Details.last_encounter2) then
if (Details.debug) then
Details:Msg("(debug) new boss detected 'overall_clear_newboss' is true, cleaning overall data.")
@@ -66,12 +66,12 @@ function segmentClass:adicionar_overall (tabela)
end
end
if (tabela.overall_added) then
if (combatObject.overall_added) then
Details:Msg("error > attempt to add a segment already added > func historico:adicionar_overall()")
return
end
local mythicInfo = tabela.is_mythic_dungeon
local mythicInfo = combatObject.is_mythic_dungeon
if (mythicInfo) then
--do not add overall mythic+ dungeon segments
if (mythicInfo.TrashOverallSegment) then
@@ -85,11 +85,11 @@ function segmentClass:adicionar_overall (tabela)
--store the segments added to the overall data
Details.tabela_overall.segments_added = Details.tabela_overall.segments_added or {}
local this_clock = tabela.data_inicio
local this_clock = combatObject.data_inicio
local combatName = tabela:GetCombatName(true)
local combatTime = tabela:GetCombatTime()
local combatType = tabela:GetCombatType()
local combatName = combatObject:GetCombatName(true)
local combatTime = combatObject:GetCombatTime()
local combatType = combatObject:GetCombatType()
tinsert(Details.tabela_overall.segments_added, 1, {name = combatName, elapsed = combatTime, clock = this_clock, type = combatType})
@@ -98,26 +98,26 @@ function segmentClass:adicionar_overall (tabela)
end
if (Details.debug) then
Details:Msg("(debug) adding the segment to overall data: " .. (tabela:GetCombatName(true) or "no name") .. " with time of: " .. (tabela:GetCombatTime() or "no time"))
Details:Msg("(debug) adding the segment to overall data: " .. (combatObject:GetCombatName(true) or "no name") .. " with time of: " .. (combatObject:GetCombatTime() or "no time"))
end
Details.tabela_overall = Details.tabela_overall + tabela
tabela.overall_added = true
Details.tabela_overall = Details.tabela_overall + combatObject
combatObject.overall_added = true
if (not Details.tabela_overall.overall_enemy_name) then
Details.tabela_overall.overall_enemy_name = tabela.is_boss and tabela.is_boss.name or tabela.enemy
Details.tabela_overall.overall_enemy_name = combatObject.is_boss and combatObject.is_boss.name or combatObject.enemy
else
if (Details.tabela_overall.overall_enemy_name ~= (tabela.is_boss and tabela.is_boss.name or tabela.enemy)) then
if (Details.tabela_overall.overall_enemy_name ~= (combatObject.is_boss and combatObject.is_boss.name or combatObject.enemy)) then
Details.tabela_overall.overall_enemy_name = "-- x -- x --"
end
end
if (Details.tabela_overall.start_time == 0) then
Details.tabela_overall:SetStartTime (tabela.start_time)
Details.tabela_overall:SetEndTime (tabela.end_time)
Details.tabela_overall:SetStartTime (combatObject.start_time)
Details.tabela_overall:SetEndTime (combatObject.end_time)
else
Details.tabela_overall:SetStartTime (tabela.start_time - Details.tabela_overall:GetCombatTime())
Details.tabela_overall:SetEndTime (tabela.end_time)
Details.tabela_overall:SetStartTime (combatObject.start_time - Details.tabela_overall:GetCombatTime())
Details.tabela_overall:SetEndTime (combatObject.end_time)
end
if (Details.tabela_overall.data_inicio == 0) then
@@ -215,7 +215,7 @@ function Details:CanAddCombatToOverall (tabela)
end
--sai do combate, chamou adicionar a tabela ao histrico
function segmentClass:adicionar (tabela)
function segmentClass:adicionar(tabela)
local tamanho = #self.tabelas
@@ -259,7 +259,7 @@ function segmentClass:adicionar (tabela)
end
--see if can add the encounter to overall data
local canAddToOverall = Details:CanAddCombatToOverall (tabela)
local canAddToOverall = Details:CanAddCombatToOverall(tabela)
if (canAddToOverall) then
--if (InCombatLockdown()) then
+44 -30
View File
@@ -4090,6 +4090,13 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1
return
end
local bIsMythicRun = false
--check if this is a mythic+ run for overall deaths
local mythicLevel = C_ChallengeMode and C_ChallengeMode.GetActiveKeystoneInfo() --classic wow doesn't not have C_ChallengeMode API
if (mythicLevel and type(mythicLevel) == "number" and mythicLevel >= 2) then --several checks to be future proof
bIsMythicRun = true
end
_current_misc_container.need_refresh = true
--combat totals
@@ -4255,9 +4262,6 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1
eventsBeforePlayerDeath[#eventsBeforePlayerDeath+1] = eventTable
end
local combatElapsedTime = GetTime() - _current_combat:GetStartTime()
local minutes, seconds = floor(combatElapsedTime / 60), floor(combatElapsedTime % 60)
local maxHealth
if (thisPlayer.arena_enemy) then
--this is an arena enemy, get the heal with the unit Id
@@ -4276,34 +4280,29 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1
maxHealth = UnitHealthMax(thisPlayer.nome)
end
local playerDeathTable = {
eventsBeforePlayerDeath, --table
time, --number unix time
thisPlayer.nome, --string player name
thisPlayer.classe, --string player class
maxHealth, --number max health
minutes .. "m " .. seconds .. "s", --time of death as string
local playerDeathTable
local combatElapsedTime = GetTime() - _current_combat:GetStartTime()
["dead"] = true,
["last_cooldown"] = thisPlayer.last_cooldown,
["dead_at"] = combatElapsedTime,
}
do
local minutes, seconds = floor(combatElapsedTime / 60), floor(combatElapsedTime % 60)
playerDeathTable = {
eventsBeforePlayerDeath, --table
time, --number unix time
thisPlayer.nome, --string player name
thisPlayer.classe, --string player class
maxHealth, --number max health
minutes .. "m " .. seconds .. "s", --time of death as string
["dead"] = true,
["last_cooldown"] = thisPlayer.last_cooldown,
["dead_at"] = combatElapsedTime,
}
end
tinsert(_current_combat.last_events_tables, #_current_combat.last_events_tables+1, playerDeathTable)
if (_hook_deaths) then
--send event to registred functions
for _, func in ipairs(_hook_deaths_container) do
local successful, errortext = pcall(func, nil, token, time, sourceSerial, sourceName, sourceFlags, targetSerial, targetName, targetFlags, playerDeathTable, thisPlayer.last_cooldown, combatElapsedTime, maxHealth)
if (not successful) then
_detalhes:Msg("error occurred on a death hook function:", errortext)
end
end
end
--check if this is a mythic+ run for overall deaths
local mythicLevel = C_ChallengeMode and C_ChallengeMode.GetActiveKeystoneInfo() --classic wow doesn't not have C_ChallengeMode API
if (mythicLevel and type(mythicLevel) == "number" and mythicLevel >= 2) then --several checks to be future proof
if (bIsMythicRun) then
--more checks for integrity
if (_detalhes.tabela_overall and _detalhes.tabela_overall.last_events_tables) then
--this is a mythic dungeon run, add the death to overall data
@@ -4312,16 +4311,31 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1
local overallDeathTable = DetailsFramework.table.copy({}, playerDeathTable)
--get the elapsed time
local timeElapsed = GetTime() - _detalhes.tabela_overall:GetStartTime()
local minutes, seconds = floor(timeElapsed/60), floor(timeElapsed % 60)
local mythicPlusElapsedTime = GetTime() - _detalhes.tabela_overall:GetStartTime()
local minutes, seconds = floor(mythicPlusElapsedTime/60), floor(mythicPlusElapsedTime % 60)
overallDeathTable [6] = minutes .. "m " .. seconds .. "s"
overallDeathTable.dead_at = timeElapsed
overallDeathTable[6] = minutes .. "m " .. seconds .. "s"
overallDeathTable.dead_at = mythicPlusElapsedTime
--save data about the mythic run in the deathTable which goes in the regular segment
playerDeathTable["mythic_plus"] = true
playerDeathTable["mythic_plus_dead_at"] = mythicPlusElapsedTime
playerDeathTable["mythic_plus_dead_at_string"] = overallDeathTable[6]
tinsert(_detalhes.tabela_overall.last_events_tables, #_detalhes.tabela_overall.last_events_tables + 1, overallDeathTable)
end
end
if (_hook_deaths) then
--send event to registred functions
for _, func in ipairs(_hook_deaths_container) do
local successful, errortext = pcall(func, nil, token, time, sourceSerial, sourceName, sourceFlags, targetSerial, targetName, targetFlags, playerDeathTable, thisPlayer.last_cooldown, combatElapsedTime, maxHealth, playerDeathTable["mythic_plus_dead_at"] or 0)
if (not successful) then
_detalhes:Msg("error occurred on a death hook function:", errortext)
end
end
end
--remove the player death events from the cache
last_events_cache[targetName] = nil
end
+23 -5
View File
@@ -6,19 +6,37 @@ local addonName, Details222 = ...
Details222.Mixins.ActorMixin = {
GetSpellContainer = function(self, containerType)
---return a spellContainer from an actor
---@param actor actor
---@param containerType string
---@return spellcontainer|nil
GetSpellContainer = function(actor, containerType)
if (containerType == "debuff") then
return self.debuff_uptime_spells
return actor.debuff_uptime_spells
elseif (containerType == "buff") then
return self.buff_uptime_spells
return actor.buff_uptime_spells
elseif (containerType == "spell") then
return self.spells
return actor.spells
elseif (containerType == "cooldowns") then
return self.cooldowns_defensive_spells
return actor.cooldowns_defensive_spells
end
end,
---return a spellTable from a spellContainer
---@param actor actor
---@param spellContainerName string
---@param spellId number
---@return spelltable|nil
GetSpellTableFromContainer = function(actor, spellContainerName, spellId)
---@type spellcontainer
local spellContainer = actor[spellContainerName]
if (spellContainer) then
---@type spelltable
local spellTable = spellContainer._ActorTable[spellId]
return spellTable
end
end,
}
+14 -10
View File
@@ -60,7 +60,7 @@ function DetailsMythicPlusFrame.MergeSegmentsOnEnd()
Details222.MythicPlus.LogStep("MergeSegmentsOnEnd started | creating the overall segment at the end of the run.")
--create a new combat to be the overall for the mythic run
Details:EntrarEmCombate()
Details:StartCombat()
--get the current combat just created and the table with all past segments
local newCombat = Details:GetCurrentCombat()
@@ -72,30 +72,32 @@ function DetailsMythicPlusFrame.MergeSegmentsOnEnd()
local totalSegments = 0
--add all boss segments from this run to this new segment
for i = 1, 25 do --from the newer combat to the oldest
local pastCombat = segmentHistory [i]
if (pastCombat and pastCombat.is_mythic_dungeon_run_id == Details.mythic_dungeon_id) then
for i = 1, 40 do --from the newer combat to the oldest
local thisCombat = segmentHistory[i]
if (thisCombat and thisCombat.is_mythic_dungeon_run_id == Details.mythic_dungeon_id) then
local canAddThisSegment = true
if (_detalhes.mythic_plus.make_overall_boss_only) then
if (not pastCombat.is_boss) then
if (not thisCombat.is_boss) then
canAddThisSegment = false
end
end
if (canAddThisSegment) then
newCombat = newCombat + pastCombat
totalTime = totalTime + pastCombat:GetCombatTime()
newCombat = newCombat + thisCombat
newCombat:CopyDeathsFrom(thisCombat, true)
totalTime = totalTime + thisCombat:GetCombatTime()
totalSegments = totalSegments + 1
if (DetailsMythicPlusFrame.DevelopmentDebug) then
print("MergeSegmentsOnEnd() > adding time:", pastCombat:GetCombatTime(), pastCombat.is_boss and pastCombat.is_boss.name)
print("MergeSegmentsOnEnd() > adding time:", thisCombat:GetCombatTime(), thisCombat.is_boss and thisCombat.is_boss.name)
end
if (endDate == "") then
local _, whenEnded = pastCombat:GetDate()
local _, whenEnded = thisCombat:GetDate()
endDate =whenEnded
end
lastSegment = pastCombat
lastSegment = thisCombat
end
end
end
@@ -187,6 +189,8 @@ function DetailsMythicPlusFrame.MergeTrashCleanup (isFromSchedule)
newCombat = newCombat + pastCombat
totalTime = totalTime + pastCombat:GetCombatTime()
newCombat:CopyDeathsFrom(pastCombat, true)
--tag this combat as already added to a boss trash overall
pastCombat._trashoverallalreadyadded = true