diff --git a/Libs/DF/fw.lua b/Libs/DF/fw.lua index 0ee6adc2..79633721 100644 --- a/Libs/DF/fw.lua +++ b/Libs/DF/fw.lua @@ -1,5 +1,5 @@ -local dversion = 143 +local dversion = 144 local major, minor = "DetailsFramework-1.0", dversion local DF, oldminor = LibStub:NewLibrary (major, minor) diff --git a/Libs/DF/panel.lua b/Libs/DF/panel.lua index f4efdb0a..aedf94ce 100644 --- a/Libs/DF/panel.lua +++ b/Libs/DF/panel.lua @@ -9378,4 +9378,73 @@ f:Hide() --]=] +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +--> error message box + +function DF:ShowErrorMessage (errorMessage, titleText) + + if (not DF.ErrorMessagePanel) then + local f = CreateFrame ("frame", "DetailsFrameworkErrorMessagePanel", UIParent) + f:SetSize (400, 120) + f:SetFrameStrata ("FULLSCREEN") + f:SetPoint ("center", UIParent, "center", 0, 100) + f:EnableMouse (true) + f:SetMovable (true) + f:RegisterForDrag ("LeftButton") + f:SetScript ("OnDragStart", function() f:StartMoving() end) + f:SetScript ("OnDragStop", function() f:StopMovingOrSizing() end) + f:SetScript ("OnMouseDown", function (self, button) if (button == "RightButton") then f:Hide() end end) + tinsert (UISpecialFrames, "DetailsFrameworkErrorMessagePanel") + DF.ErrorMessagePanel = f + + DF:CreateTitleBar (f, "Details! Framework Error!") + DF:ApplyStandardBackdrop (f) + + local errorLabel = f:CreateFontString (nil, "overlay", "GameFontNormal") + errorLabel:SetPoint ("top", f, "top", 0, -25) + errorLabel:SetJustifyH ("center") + errorLabel:SetSize (360, 66) + f.errorLabel = errorLabel + + local button_text_template = DF:GetTemplate ("font", "OPTIONS_FONT_TEMPLATE") + local options_dropdown_template = DF:GetTemplate ("dropdown", "OPTIONS_DROPDOWN_TEMPLATE") + + local closeButton = DF:CreateButton (f, nil, 60, 20, "close", nil, nil, nil, nil, nil, nil, options_dropdown_template) + closeButton:SetPoint ("bottom", f, "bottom", 0, 5) + f.closeButton = closeButton + + closeButton:SetClickFunction (function() + f:Hide() + end) + + f.ShowAnimation = DF:CreateAnimationHub (f, function() + f:SetBackdropBorderColor (0, 0, 0, 0) + f.TitleBar:SetBackdropBorderColor (0, 0, 0, 0) + end, function() + f:SetBackdropBorderColor (0, 0, 0, 1) + f.TitleBar:SetBackdropBorderColor (0, 0, 0, 1) + end) + DF:CreateAnimation (f.ShowAnimation, "scale", 1, .075, .2, .2, 1.1, 1.1, "center", 0, 0) + DF:CreateAnimation (f.ShowAnimation, "scale", 2, .075, 1, 1, .90, .90, "center", 0, 0) + + f.FlashTexture = f:CreateTexture (nil, "overlay") + f.FlashTexture:SetColorTexture (1, 1, 1, 1) + f.FlashTexture:SetAllPoints() + + f.FlashAnimation = DF:CreateAnimationHub (f.FlashTexture, function() f.FlashTexture:Show() end, function() f.FlashTexture:Hide() end) + DF:CreateAnimation (f.FlashAnimation, "alpha", 1, .075, 0, .05) + DF:CreateAnimation (f.FlashAnimation, "alpha", 2, .075, .1, 0) + + f:Hide() + end + + DF.ErrorMessagePanel:Show() + DF.ErrorMessagePanel.errorLabel:SetText (errorMessage) + DF.ErrorMessagePanel.TitleLabel:SetText (titleText) + DF.ErrorMessagePanel.ShowAnimation:Play() + DF.ErrorMessagePanel.FlashAnimation:Play() +end + + + --functionn falsee truee breakk elsea endz \ No newline at end of file diff --git a/boot.lua b/boot.lua index d85cf6f4..15c37e32 100644 --- a/boot.lua +++ b/boot.lua @@ -5,7 +5,7 @@ _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 = 6968 --if this is higher than the regular counter, use it instead + _detalhes.alpha_build_counter = 6992 --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.realversion = 136 --core version, this is used to check API version for scripts and plugins (see alias below) diff --git a/classes/classe_combate.lua b/classes/classe_combate.lua index 90b7d6a3..1e2a9058 100644 --- a/classes/classe_combate.lua +++ b/classes/classe_combate.lua @@ -653,9 +653,9 @@ shadow = _detalhes.atributo_misc:r_connect_shadow (actor, true, custom_combat) end - shadow.boss_fight_component = actor.boss_fight_component - shadow.fight_component = actor.fight_component - shadow.grupo = actor.grupo + shadow.boss_fight_component = actor.boss_fight_component or shadow.boss_fight_component + shadow.fight_component = actor.fight_component or shadow.fight_component + shadow.grupo = actor.grupo or shadow.grupo end end diff --git a/classes/classe_damage.lua b/classes/classe_damage.lua index 84a2b073..38384366 100644 --- a/classes/classe_damage.lua +++ b/classes/classe_damage.lua @@ -5048,11 +5048,19 @@ end shadow.end_time = time() end + shadow.boss_fight_component = actor.boss_fight_component or shadow.boss_fight_component + shadow.fight_component = actor.fight_component or shadow.fight_component + shadow.grupo = actor.grupo or shadow.grupo + --check if need to restore meta tables and indexes for this actor if (not no_refresh) then _detalhes.refresh:r_atributo_damage (actor, shadow) end + --a referência do .owner pode ter sido apagada? + --os 2 segmentos foram juntados porém a referência do owner de um pet criado ali em cima deve ser nula? + --teria que analisar se o novo objecto é de um pet e colocar a referência do owner no pet novamente, ou pelo menos verificar se a referência é valida + --> tempo decorrido (captura de dados) local end_time = actor.end_time if (not actor.end_time) then @@ -5063,9 +5071,19 @@ end shadow.start_time = shadow.start_time - tempo --> pets (add unique pet names) - for _, petName in _ipairs (actor.pets) do - DetailsFramework.table.addunique (shadow.pets, petName) - end + for _, petName in _ipairs (actor.pets) do + local hasPet = false + for i = 1, #shadow.pets do + if (shadow.pets[i] == petName) then + hasPet = true + break + end + end + + if (not hasPet) then + shadow.pets [#shadow.pets+1] = petName + end + end --> total de dano (captura de dados) shadow.total = shadow.total + actor.total @@ -5172,6 +5190,21 @@ atributo_damage.__add = function (tabela1, tabela2) tabela1.damage_from [nome] = true end + --> pets (add unique pet names) + for _, petName in _ipairs (tabela2.pets) do + local hasPet = false + for i = 1, #tabela1.pets do + if (tabela1.pets[i] == petName) then + hasPet = true + break + end + end + + if (not hasPet) then + tabela1.pets [#tabela1.pets+1] = petName + end + end + --> soma os containers de alvos for target_name, amount in _pairs (tabela2.targets) do tabela1.targets [target_name] = (tabela1.targets [target_name] or 0) + amount diff --git a/classes/container_historico.lua b/classes/container_historico.lua index 1004cf99..53483cdd 100644 --- a/classes/container_historico.lua +++ b/classes/container_historico.lua @@ -291,6 +291,7 @@ function historico:adicionar (tabela) local container_damage = _segundo_combate [1] local container_heal = _segundo_combate [2] + --regular cleanup for _, jogador in ipairs (container_damage._ActorTable) do --> remover a tabela de last events jogador.last_events_table = nil @@ -312,7 +313,7 @@ function historico:adicionar (tabela) local _terceiro_combate = self.tabelas[3] - if (_terceiro_combate) then + if (_terceiro_combate and not _terceiro_combate.is_mythic_dungeon_segment) then if ((_terceiro_combate.is_trash and not _terceiro_combate.is_boss) or (_terceiro_combate.is_temporary)) then --> verificar novamente a time machine diff --git a/core/meta.lua b/core/meta.lua index 21a03132..97067460 100644 --- a/core/meta.lua +++ b/core/meta.lua @@ -531,16 +531,17 @@ while (_iter.data) do --search key: ~deletar ~apagar local can_erase = true - if (_iter.data.grupo or _iter.data.boss or _iter.data.boss_fight_component or _iter.data.pvp_component) then + if (_iter.data.grupo or _iter.data.boss or _iter.data.boss_fight_component or _iter.data.pvp_component or _iter.data.fight_component) then can_erase = false else + local owner = _iter.data.owner if (owner) then local owner_actor = _combate [class_type]._NameIndexTable [owner.nome] if (owner_actor) then local owner_actor = _combate [class_type]._ActorTable [owner_actor] if (owner_actor) then - if (owner.grupo or owner.boss or owner.boss_fight_component) then + if (owner.grupo or owner.boss or owner.boss_fight_component or owner.fight_component) then can_erase = false end end @@ -594,115 +595,117 @@ end end - for class_type, _tabela in _ipairs (todos_atributos) do - - local conteudo = _tabela._ActorTable + if (not _combate.is_mythic_dungeon_segment) then + for class_type, _tabela in _ipairs (todos_atributos) do + + local conteudo = _tabela._ActorTable - --> Limpa tabelas que n�o estejam em grupo - if (conteudo) then + --> Limpa tabelas que n�o estejam em grupo + if (conteudo) then - if (_detalhes.clear_ungrouped) then - --n�o deleta dummies e actors de fora do grupo - --if (not _detalhes.clear_ungrouped) then - - local _iter = {index = 1, data = conteudo[1], cleaned = 0} --> ._ActorTable[1] para pegar o primeiro index + if (_detalhes.clear_ungrouped) then + --n�o deleta dummies e actors de fora do grupo + --if (not _detalhes.clear_ungrouped) then + + local _iter = {index = 1, data = conteudo[1], cleaned = 0} --> ._ActorTable[1] para pegar o primeiro index - while (_iter.data) do --search key: ~deletar ~apagar - local can_erase = true - - if (_iter.data.grupo or _iter.data.boss or _iter.data.boss_fight_component or IsBossEncounter or _iter.data.pvp_component) then - can_erase = false - else - local owner = _iter.data.owner - if (owner) then - local owner_actor = _combate [class_type]._NameIndexTable [owner.nome] - if (owner_actor) then - local owner_actor = _combate [class_type]._ActorTable [owner_actor] + while (_iter.data) do --search key: ~deletar ~apagar + local can_erase = true + + if (_iter.data.grupo or _iter.data.boss or _iter.data.boss_fight_component or IsBossEncounter or _iter.data.pvp_component or _iter.data.fight_component) then + can_erase = false + else + local owner = _iter.data.owner + if (owner) then + local owner_actor = _combate [class_type]._NameIndexTable [owner.nome] if (owner_actor) then - if (owner.grupo or owner.boss or owner.boss_fight_component) then - can_erase = false + local owner_actor = _combate [class_type]._ActorTable [owner_actor] + if (owner_actor) then + if (owner.grupo or owner.boss or owner.boss_fight_component or owner.fight_component) then + can_erase = false + end end end end end + + if (can_erase) then + + if (not _iter.data.owner) then --> pet + local myself = _iter.data + + if (myself.tipo == class_type_dano or myself.tipo == class_type_cura) then + _combate.totals [myself.tipo] = _combate.totals [myself.tipo] - myself.total + if (myself.grupo) then + _combate.totals_grupo [myself.tipo] = _combate.totals_grupo [myself.tipo] - myself.total + end + + elseif (myself.tipo == class_type_e_energy) then + _combate.totals [myself.tipo] [myself.powertype] = _combate.totals [myself.tipo] [myself.powertype] - myself.total + if (myself.grupo) then + _combate.totals_grupo [myself.tipo] [myself.powertype] = _combate.totals_grupo [myself.tipo] [myself.powertype] - myself.total + end + + elseif (myself.tipo == class_type_misc) then + if (myself.cc_break) then + _combate.totals [myself.tipo] ["cc_break"] = _combate.totals [myself.tipo] ["cc_break"] - myself.cc_break + if (myself.grupo) then + _combate.totals_grupo [myself.tipo] ["cc_break"] = _combate.totals_grupo [myself.tipo] ["cc_break"] - myself.cc_break + end + end + if (myself.ress) then + _combate.totals [myself.tipo] ["ress"] = _combate.totals [myself.tipo] ["ress"] - myself.ress + if (myself.grupo) then + _combate.totals_grupo [myself.tipo] ["ress"] = _combate.totals_grupo [myself.tipo] ["ress"] - myself.ress + end + end + --> n�o precisa diminuir o total dos buffs e debuffs + if (myself.cooldowns_defensive) then + _combate.totals [myself.tipo] ["cooldowns_defensive"] = _combate.totals [myself.tipo] ["cooldowns_defensive"] - myself.cooldowns_defensive + if (myself.grupo) then + _combate.totals_grupo [myself.tipo] ["cooldowns_defensive"] = _combate.totals_grupo [myself.tipo] ["cooldowns_defensive"] - myself.cooldowns_defensive + end + end + if (myself.interrupt) then + _combate.totals [myself.tipo] ["interrupt"] = _combate.totals [myself.tipo] ["interrupt"] - myself.interrupt + if (myself.grupo) then + _combate.totals_grupo [myself.tipo] ["interrupt"] = _combate.totals_grupo [myself.tipo] ["interrupt"] - myself.interrupt + end + end + if (myself.dispell) then + _combate.totals [myself.tipo] ["dispell"] = _combate.totals [myself.tipo] ["dispell"] - myself.dispell + if (myself.grupo) then + _combate.totals_grupo [myself.tipo] ["dispell"] = _combate.totals_grupo [myself.tipo] ["dispell"] - myself.dispell + end + end + if (myself.dead) then + _combate.totals [myself.tipo] ["dead"] = _combate.totals [myself.tipo] ["dead"] - myself.dead + if (myself.grupo) then + _combate.totals_grupo [myself.tipo] ["dead"] = _combate.totals_grupo [myself.tipo] ["dead"] - myself.dead + end + end + end + end + + _table_remove (conteudo, _iter.index) + _iter.cleaned = _iter.cleaned + 1 + _iter.data = conteudo [_iter.index] + else + _iter.index = _iter.index + 1 + _iter.data = conteudo [_iter.index] + end end - if (can_erase) then - - if (not _iter.data.owner) then --> pet - local myself = _iter.data - - if (myself.tipo == class_type_dano or myself.tipo == class_type_cura) then - _combate.totals [myself.tipo] = _combate.totals [myself.tipo] - myself.total - if (myself.grupo) then - _combate.totals_grupo [myself.tipo] = _combate.totals_grupo [myself.tipo] - myself.total - end - - elseif (myself.tipo == class_type_e_energy) then - _combate.totals [myself.tipo] [myself.powertype] = _combate.totals [myself.tipo] [myself.powertype] - myself.total - if (myself.grupo) then - _combate.totals_grupo [myself.tipo] [myself.powertype] = _combate.totals_grupo [myself.tipo] [myself.powertype] - myself.total - end - - elseif (myself.tipo == class_type_misc) then - if (myself.cc_break) then - _combate.totals [myself.tipo] ["cc_break"] = _combate.totals [myself.tipo] ["cc_break"] - myself.cc_break - if (myself.grupo) then - _combate.totals_grupo [myself.tipo] ["cc_break"] = _combate.totals_grupo [myself.tipo] ["cc_break"] - myself.cc_break - end - end - if (myself.ress) then - _combate.totals [myself.tipo] ["ress"] = _combate.totals [myself.tipo] ["ress"] - myself.ress - if (myself.grupo) then - _combate.totals_grupo [myself.tipo] ["ress"] = _combate.totals_grupo [myself.tipo] ["ress"] - myself.ress - end - end - --> n�o precisa diminuir o total dos buffs e debuffs - if (myself.cooldowns_defensive) then - _combate.totals [myself.tipo] ["cooldowns_defensive"] = _combate.totals [myself.tipo] ["cooldowns_defensive"] - myself.cooldowns_defensive - if (myself.grupo) then - _combate.totals_grupo [myself.tipo] ["cooldowns_defensive"] = _combate.totals_grupo [myself.tipo] ["cooldowns_defensive"] - myself.cooldowns_defensive - end - end - if (myself.interrupt) then - _combate.totals [myself.tipo] ["interrupt"] = _combate.totals [myself.tipo] ["interrupt"] - myself.interrupt - if (myself.grupo) then - _combate.totals_grupo [myself.tipo] ["interrupt"] = _combate.totals_grupo [myself.tipo] ["interrupt"] - myself.interrupt - end - end - if (myself.dispell) then - _combate.totals [myself.tipo] ["dispell"] = _combate.totals [myself.tipo] ["dispell"] - myself.dispell - if (myself.grupo) then - _combate.totals_grupo [myself.tipo] ["dispell"] = _combate.totals_grupo [myself.tipo] ["dispell"] - myself.dispell - end - end - if (myself.dead) then - _combate.totals [myself.tipo] ["dead"] = _combate.totals [myself.tipo] ["dead"] - myself.dead - if (myself.grupo) then - _combate.totals_grupo [myself.tipo] ["dead"] = _combate.totals_grupo [myself.tipo] ["dead"] - myself.dead - end - end - end - end - - _table_remove (conteudo, _iter.index) - _iter.cleaned = _iter.cleaned + 1 - _iter.data = conteudo [_iter.index] - else - _iter.index = _iter.index + 1 - _iter.data = conteudo [_iter.index] + if (_iter.cleaned > 0) then + ReconstroiMapa (_tabela) end + end - - if (_iter.cleaned > 0) then - ReconstroiMapa (_tabela) - end - end + end - end - + end --end is mythic dungeon segment end --> panic mode diff --git a/core/parser.lua b/core/parser.lua index 2a465aec..fdc5069e 100644 --- a/core/parser.lua +++ b/core/parser.lua @@ -939,12 +939,12 @@ if (not este_jogador) then --> pode ser um desconhecido ou um pet este_jogador, meu_dono, who_name = _current_damage_container:PegarCombatente (who_serial, who_name, who_flags, true) - if (meu_dono) then --> é um pet + if (meu_dono) then --> � um pet if (who_serial ~= "") then damage_cache_pets [who_serial] = este_jogador damage_cache_petsOwners [who_serial] = meu_dono end - --conferir se o dono já esta no cache + --conferir se o dono j� esta no cache if (not damage_cache [meu_dono.serial] and meu_dono.serial ~= "") then damage_cache [meu_dono.serial] = meu_dono end @@ -963,7 +963,7 @@ end elseif (meu_dono) then - --> é um pet + --> � um pet who_name = who_name .. " <" .. meu_dono.nome .. ">" end @@ -3085,13 +3085,13 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1 este_jogador, meu_dono, who_name = _current_misc_container:PegarCombatente (who_serial, who_name, who_flags, true) - if (meu_dono) then --> é um pet + if (meu_dono) then --> � um pet if (who_serial ~= "") then misc_cache_pets [who_serial] = este_jogador misc_cache_petsOwners [who_serial] = meu_dono end - --conferir se o dono já esta no cache + --conferir se o dono j� esta no cache if (not misc_cache [meu_dono.serial] and meu_dono.serial ~= "") then misc_cache [meu_dono.serial] = meu_dono end diff --git a/gumps/janela_principal.lua b/gumps/janela_principal.lua index 0c7625ab..4c98cc52 100644 --- a/gumps/janela_principal.lua +++ b/gumps/janela_principal.lua @@ -7531,7 +7531,7 @@ function _detalhes:SetBackdropTexture (texturename) end --- ~alpha (transparency of buttons on the toolbar) ~autohide ãutohide ~menuauto +-- ~alpha (transparency of buttons on the toolbar) ~autohide �utohide ~menuauto function _detalhes:SetAutoHideMenu (left, right, interacting) --30/07/2018: the separation by left and right menu icons doesn't exists for years, but it was still active in the code making