diff --git a/classes/class_instance.lua b/classes/class_instance.lua index bbeeb9a7..3ee74717 100644 --- a/classes/class_instance.lua +++ b/classes/class_instance.lua @@ -99,11 +99,11 @@ end ---run a function on all enabled instances ---@param func function ---@vararg any -function Details:InstanciaCallFunction(func, ...) +function Details:InstanceCallDetailsFunc(func, ...) for index, instance in ipairs(Details.tabela_instancias) do ---@cast instance instance if (instance:IsEnabled()) then - func(_, instance, ...) + func(Details, instance, ...) end end end @@ -113,7 +113,7 @@ end ---@vararg any function Details:InstanciaCallFunctionOffline(func, ...) for index, instancia in ipairs(Details.tabela_instancias) do - func(_, instancia, ...) + func(Details, instancia, ...) end end @@ -2512,7 +2512,7 @@ end --handle internal details! events local eventListener = Details:CreateEventListener() eventListener:RegisterEvent("DETAILS_DATA_SEGMENTREMOVED", function() - Details:InstanciaCallFunction(Details.UpdateCombatObjectInUse) + Details:InstanceCallDetailsFunc(Details.UpdateCombatObjectInUse) end) function Details:UpdateCombatObjectInUse(instance) diff --git a/classes/container_segments.lua b/classes/container_segments.lua index 5c378c2c..3c30c07b 100644 --- a/classes/container_segments.lua +++ b/classes/container_segments.lua @@ -342,6 +342,9 @@ function Details222.Combat.AddCombat(combatToBeAdded) ---@type number amount of segments currently stored local amountSegmentsInUse = #segmentsTable + ---@type table store references of combat objects removed + local removedCombats = {} + ---@debug check if there's a destroyed segment within the segment container if (amountSegmentsInUse > 0) then for i = 1, amountSegmentsInUse do @@ -360,11 +363,11 @@ function Details222.Combat.AddCombat(combatToBeAdded) if (amountSegmentsInUse < maxSegmentsAllowed) then --if there's no segment stored, then this as the first segment if (amountSegmentsInUse == 0) then - Details:InstanciaCallFunction(Details.CheckFreeze, amountSegmentsInUse + 1, combatToBeAdded) + Details:InstanceCallDetailsFunc(Details.CheckFreeze, amountSegmentsInUse + 1, combatToBeAdded) else ---@type combat local oldestCombatObject = segmentsTable[amountSegmentsInUse] - Details:InstanciaCallFunction(Details.CheckFreeze, amountSegmentsInUse + 1, oldestCombatObject) + Details:InstanceCallDetailsFunc(Details.CheckFreeze, amountSegmentsInUse + 1, oldestCombatObject) end end @@ -396,7 +399,7 @@ function Details222.Combat.AddCombat(combatToBeAdded) end end - ---@type boolean user choise to remove trash combats or nor + ---@type boolean user choise to remove trash combats or not local bAutoRemoveTrashCombats = Details.trash_auto_remove if (bAutoRemoveTrashCombats) then ---@type combat @@ -411,9 +414,11 @@ function Details222.Combat.AddCombat(combatToBeAdded) if (bCombatIsTrash or bCombatIsWorldTrash) then ---@type boolean, combat|nil local bSegmentRemoved, combatObjectRemoved = Details:RemoveSegmentByCombatObject(combatToCheckForTrash) - if (bSegmentRemoved and combatObjectRemoved == combatToCheckForTrash) then + if (bSegmentRemoved and combatObjectRemoved and combatObjectRemoved == combatToCheckForTrash) then Details:DestroyCombat(combatObjectRemoved) bSegmentDestroyed = true + --add the combat reference to removed combats table + removedCombats[combatObjectRemoved] = true end end end @@ -433,9 +438,11 @@ function Details222.Combat.AddCombat(combatToBeAdded) ---@type boolean, combat|nil local bSegmentRemoved, combatObjectRemoved = Details:RemoveSegmentByCombatObject(combatObjectToBeRemoved) - if (bSegmentRemoved and combatObjectRemoved == combatObjectToBeRemoved) then + if (bSegmentRemoved and combatObjectRemoved and combatObjectRemoved == combatObjectToBeRemoved) then Details:DestroyCombat(combatObjectRemoved) bSegmentDestroyed = true + --add the combat reference to removed combats table + removedCombats[combatObjectRemoved] = true end end @@ -470,7 +477,7 @@ function Details222.Combat.AddCombat(combatToBeAdded) Details:InstanceCall(function(instanceObject) instanceObject:RefreshCombat() end) --update the combat shown on all instances - Details:InstanciaCallFunction(Details.AtualizaSegmentos_AfterCombat) + Details:InstanceCallDetailsFunc(Details.AtualizaSegmentos_AfterCombat) if (bSegmentDestroyed) then Details:SendEvent("DETAILS_DATA_SEGMENTREMOVED") @@ -500,7 +507,7 @@ function segmentClass:AddCombat(combatObject) if (not oldestCombatObject) then oldestCombatObject = combatObject end - Details:InstanciaCallFunction(Details.CheckFreeze, #segmentsTable + 1, oldestCombatObject) + Details:InstanceCallDetailsFunc(Details.CheckFreeze, #segmentsTable + 1, oldestCombatObject) end --add to the first index of the segment table @@ -672,7 +679,7 @@ function segmentClass:AddCombat(combatObject) Details:InstanceCall(function(instanceObject) instanceObject:RefreshCombat() end) --update the combat shown on all instances - Details:InstanciaCallFunction(Details.AtualizaSegmentos_AfterCombat, self) + Details:InstanceCallDetailsFunc(Details.AtualizaSegmentos_AfterCombat, self) if (bSegmentDestroyed) then Details:SendEvent("DETAILS_DATA_SEGMENTREMOVED") @@ -844,10 +851,10 @@ function segmentClass:ResetAllCombatData() Details.schedule_hard_garbage_collect = true end - Details:InstanciaCallFunction(Details.UpdateCombatObjectInUse) -- atualiza o instancia.showing para as novas tabelas criadas - Details:InstanciaCallFunction(Details.AtualizaSoloMode_AfertReset) -- verifica se precisa zerar as tabela da janela solo mode - Details:InstanciaCallFunction(Details.ResetaGump) --_detalhes:ResetaGump("de todas as instancias") - Details:InstanciaCallFunction(Details.FadeHandler.Fader, "IN", nil, "barras") + Details:InstanceCallDetailsFunc(Details.UpdateCombatObjectInUse) -- atualiza o instancia.showing para as novas tabelas criadas + Details:InstanceCallDetailsFunc(Details.AtualizaSoloMode_AfertReset) -- verifica se precisa zerar as tabela da janela solo mode + Details:InstanceCallDetailsFunc(Details.ResetaGump) --_detalhes:ResetaGump("de todas as instancias") + Details:InstanceCallDetailsFunc(Details.FadeHandler.Fader, "IN", nil, "barras") Details:RefreshMainWindow(-1) --atualiza todas as instancias diff --git a/core/control.lua b/core/control.lua index 0f361d49..7011dcbf 100644 --- a/core/control.lua +++ b/core/control.lua @@ -360,9 +360,9 @@ --check if there's a 'current segment in place', if not, re-create the overall data before creating the new segment if (not segmentsTable[1]) then Details.tabela_overall = Details.combate:NovaTabela() - Details:InstanciaCallFunction(Details.ResetaGump, nil, -1) --reseta scrollbar, iterators, rodap�, etc - Details:InstanciaCallFunction(Details.InstanciaFadeBarras, -1) --esconde todas as barras - Details:InstanciaCallFunction(Details.UpdateCombatObjectInUse) --atualiza o showing + Details:InstanceCallDetailsFunc(Details.ResetaGump, nil, -1) --reseta scrollbar, iterators, rodap�, etc + Details:InstanceCallDetailsFunc(Details.InstanciaFadeBarras, -1) --esconde todas as barras + Details:InstanceCallDetailsFunc(Details.UpdateCombatObjectInUse) --atualiza o showing end --get the yet 'current' combat and lock the activity time on all actors @@ -430,7 +430,7 @@ --if the window is showing current segment, switch it for the new combat --also if the window has auto current, jump to current segment - Details:InstanciaCallFunction(Details.TrocaSegmentoAtual, Details.tabela_vigente.is_boss and true) + Details:InstanceCallDetailsFunc(Details.TrocaSegmentoAtual, Details.tabela_vigente.is_boss and true) --clear hosts and make the cloud capture stuff Details.host_of = nil @@ -872,7 +872,7 @@ end Details.tabela_vigente.resincked = true - Details:InstanciaCallFunction(Details.AtualizarJanela) + Details:InstanceCallDetailsFunc(Details.AtualizarJanela) if (Details.solo) then --code to update "solo" plugins, there's no solo plugins for details! at the moment if (Details.SoloTables.CombatID == Details:GetOrSetCombatId()) then --significa que o solo mode validou o combate, como matar um bixo muito low level com uma s� porrada diff --git a/core/meta.lua b/core/meta.lua index 027f8166..a28e6929 100644 --- a/core/meta.lua +++ b/core/meta.lua @@ -696,7 +696,7 @@ local classTypeUtility = Details.atributos.misc --refresh nas janelas if (amountActorRemoved > 0) then - Details:InstanciaCallFunction(Details.reset_window) + Details:InstanceCallDetailsFunc(Details.reset_window) end --cleanup backlisted pets within the handler of actor containers @@ -870,7 +870,7 @@ local classTypeUtility = Details.atributos.misc amountRemoved = amountRemoved + collectGarbage(overallCombatObject, overriteLastEvent) if (amountRemoved > 0) then - Details:InstanciaCallFunction(Details.ScheduleUpdate) + Details:InstanceCallDetailsFunc(Details.ScheduleUpdate) Details:RefreshMainWindow(-1) end diff --git a/functions/mythicdungeon.lua b/functions/mythicdungeon.lua index d2f397a4..dc752c2f 100644 --- a/functions/mythicdungeon.lua +++ b/functions/mythicdungeon.lua @@ -158,10 +158,10 @@ function DetailsMythicPlusFrame.MergeSegmentsOnEnd() Details:SairDoCombate() --update all windows - Details:InstanciaCallFunction(Details.FadeHandler.Fader, "IN", nil, "barras") - Details:InstanciaCallFunction(Details.UpdateCombatObjectInUse) - Details:InstanciaCallFunction(Details.AtualizaSoloMode_AfertReset) - Details:InstanciaCallFunction(Details.ResetaGump) + Details:InstanceCallDetailsFunc(Details.FadeHandler.Fader, "IN", nil, "barras") + Details:InstanceCallDetailsFunc(Details.UpdateCombatObjectInUse) + Details:InstanceCallDetailsFunc(Details.AtualizaSoloMode_AfertReset) + Details:InstanceCallDetailsFunc(Details.ResetaGump) Details:RefreshMainWindow(-1, true) if (DetailsMythicPlusFrame.DevelopmentDebug) then @@ -271,10 +271,10 @@ function DetailsMythicPlusFrame.MergeTrashCleanup (isFromSchedule) Details:SendEvent("DETAILS_DATA_SEGMENTREMOVED") --update all windows - Details:InstanciaCallFunction(Details.FadeHandler.Fader, "IN", nil, "barras") - Details:InstanciaCallFunction(Details.UpdateCombatObjectInUse) - Details:InstanciaCallFunction(Details.AtualizaSoloMode_AfertReset) - Details:InstanciaCallFunction(Details.ResetaGump) + Details:InstanceCallDetailsFunc(Details.FadeHandler.Fader, "IN", nil, "barras") + Details:InstanceCallDetailsFunc(Details.UpdateCombatObjectInUse) + Details:InstanceCallDetailsFunc(Details.AtualizaSoloMode_AfertReset) + Details:InstanceCallDetailsFunc(Details.ResetaGump) Details:RefreshMainWindow(-1, true) else Details222.MythicPlus.LogStep("MergeTrashCleanup | no segments to merge.") @@ -373,10 +373,10 @@ function DetailsMythicPlusFrame.MergeRemainingTrashAfterAllBossesDone() end --update all windows - Details:InstanciaCallFunction(Details.FadeHandler.Fader, "IN", nil, "barras") - Details:InstanciaCallFunction(Details.UpdateCombatObjectInUse) - Details:InstanciaCallFunction(Details.AtualizaSoloMode_AfertReset) - Details:InstanciaCallFunction(Details.ResetaGump) + Details:InstanceCallDetailsFunc(Details.FadeHandler.Fader, "IN", nil, "barras") + Details:InstanceCallDetailsFunc(Details.UpdateCombatObjectInUse) + Details:InstanceCallDetailsFunc(Details.AtualizaSoloMode_AfertReset) + Details:InstanceCallDetailsFunc(Details.ResetaGump) Details:RefreshMainWindow(-1, true) end diff --git a/functions/slash.lua b/functions/slash.lua index dd246015..437af476 100644 --- a/functions/slash.lua +++ b/functions/slash.lua @@ -1374,10 +1374,10 @@ function SlashCmdList.DETAILS (msg, editbox) --clear memory collectgarbage() - Details:InstanciaCallFunction(Details.FadeHandler.Fader, "in", nil, "barras") - Details:InstanciaCallFunction(Details.UpdateCombatObjectInUse) - Details:InstanciaCallFunction(Details.AtualizaSoloMode_AfertReset) - Details:InstanciaCallFunction(Details.ResetaGump) + Details:InstanceCallDetailsFunc(Details.FadeHandler.Fader, "in", nil, "barras") + Details:InstanceCallDetailsFunc(Details.UpdateCombatObjectInUse) + Details:InstanceCallDetailsFunc(Details.AtualizaSoloMode_AfertReset) + Details:InstanceCallDetailsFunc(Details.ResetaGump) Details:RefreshMainWindow(-1, true) elseif (msg == "ej") then