From a5d0ca6dae6e064ff96405a5277ab7c55f765711 Mon Sep 17 00:00:00 2001 From: Tercio Date: Mon, 26 Sep 2016 00:06:03 -0300 Subject: [PATCH] - built-in plugins update. --- .../Details_EncounterDetails.lua | 270 +++- plugins/Details_EncounterDetails/enUS.lua | 2 +- plugins/Details_EncounterDetails/frames.lua | 1300 ++++++++++------- .../images/boss_frame_buttons.tga | Bin 20210 -> 20064 bytes 4 files changed, 987 insertions(+), 585 deletions(-) diff --git a/plugins/Details_EncounterDetails/Details_EncounterDetails.lua b/plugins/Details_EncounterDetails/Details_EncounterDetails.lua index 7155c589..16c9d96b 100644 --- a/plugins/Details_EncounterDetails/Details_EncounterDetails.lua +++ b/plugins/Details_EncounterDetails/Details_EncounterDetails.lua @@ -14,6 +14,8 @@ local _GetTime = GetTime --> wow api local local _GetCursorPosition = GetCursorPosition --> wow api local local _GameTooltip = GameTooltip --> wow api local +local GameCooltip = GameCooltip2 + local _math_floor = math.floor --> lua library local local _cstr = string.format --> lua library local local _ipairs = ipairs --> lua library local @@ -382,12 +384,6 @@ local function CreatePluginFrames (data) EncounterDetails:BuildDpsGraphic() end - --EncounterDetails:SetTutorialCVar ("ENCOUNTER_DETAILS_TUTORIAL2", false) - if (not EncounterDetails:GetTutorialCVar ("ENCOUNTER_DETAILS_TUTORIAL2")) then - EncounterDetails:SetTutorialCVar ("ENCOUNTER_DETAILS_TUTORIAL2", true) - EncounterDetails:ButtonsTutorial() - end - --select latest emote segment Details_EncounterDetailsEmotesSegmentDropdown.MyObject:Select (1) Details_EncounterDetailsEmotesSegmentDropdown.MyObject:Refresh() @@ -422,6 +418,10 @@ local function CreatePluginFrames (data) _detalhes.EncounterDetailsTempWindow (EncounterDetails) _detalhes.EncounterDetailsTempWindow = nil + --> ~remover ~autoabrir ãbrir ~abrir ~auto + --C_Timer.After (.5, EncounterDetails.OpenWindow) + + end local IsShiftKeyDown = IsShiftKeyDown @@ -456,7 +456,10 @@ local sort_damage_from = function (a, b) end --> custom tooltip for dead details --------------------------------------------------------------------------------------------------------- - + + --tooltip backdrop, color and border + local bgColor, borderColor = {0.17, 0.17, 0.17, .9}, {.30, .30, .30, .3} + local function KillInfo (deathTable, row) local eventos = deathTable [1] @@ -466,8 +469,6 @@ end local battleress = false local lastcooldown = false - local GameCooltip = GameCooltip - GameCooltip:Reset() GameCooltip:SetType ("tooltipbar") GameCooltip:SetOwner (row) @@ -475,7 +476,7 @@ end GameCooltip:AddLine ("Click to Report", nil, 1, "orange") GameCooltip:AddIcon ([[Interface\TUTORIALFRAME\UI-TUTORIAL-FRAME]], 1, 1, 12, 16, 0.015625, 0.13671875, 0.4375, 0.59765625) GameCooltip:AddStatusBar (0, 1, 1, 1, 1, 1, false, {value = 100, color = {.3, .3, .3, 1}, specialSpark = false, texture = [[Interface\AddOns\Details\images\bar_serenity]]}) - + --death parser for index, event in _ipairs (eventos) do @@ -563,14 +564,14 @@ end GameCooltip:AddStatusBar (0, 1, 1, 1, 1, 1, false, {value = 100, color = {.3, .3, .3, 1}, specialSpark = false, texture = [[Interface\AddOns\Details\images\bar_serenity]]}) end - GameCooltip:SetOption ("StatusBarHeightMod", -6) GameCooltip:SetOption ("FixedWidth", 300) GameCooltip:SetOption ("TextSize", 9) GameCooltip:SetOption ("LeftBorderSize", -4) GameCooltip:SetOption ("RightBorderSize", 5) - GameCooltip:SetOption ("StatusBarTexture", [[Interface\AddOns\Details\images\bar4_reverse]]) - GameCooltip:SetWallpaper (1, [[Interface\SPELLBOOK\Spellbook-Page-1]], {.6, 0.1, 0.64453125, 0}, {.8, .8, .8, 0.2}, true) + GameCooltip:SetOption ("StatusBarTexture", [[Interface\AddOns\Details\images\bar_serenity]]) + --GameCooltip:SetWallpaper (1, [[Interface\SPELLBOOK\Spellbook-Page-1]], {.6, 0.1, 0.64453125, 0}, {.8, .8, .8, 0.2}, true) + GameCooltip:SetBackdrop (1, _detalhes.cooltip_preset2_backdrop, bgColor, borderColor) GameCooltip:ShowCooltip() end @@ -587,15 +588,22 @@ local function DispellInfo (dispell, barra) _table_sort (tabela_jogadores, _detalhes.Sort2) - _GameTooltip:ClearLines() - _GameTooltip:AddLine (barra.texto_esquerdo:GetText()) + --cooltip + + + --_GameTooltip:ClearLines() + --_GameTooltip:AddLine (barra.texto_esquerdo:GetText()) for index, tabela in _ipairs (tabela_jogadores) do local coords = EncounterDetails.class_coords [tabela[3]] if (not coords) then - GameTooltip:AddDoubleLine ("|TInterface\\GossipFrame\\DailyActiveQuestIcon:14:14:0:0:16:16:0:1:0:1".."|t "..tabela[1]..": ", tabela[2], 1, 1, 1, 1, 1, 1) + GameCooltip:AddLine (tabela[1], tabela[2]) + GameCooltip:AddIcon ("Interface\\GossipFrame\\DailyActiveQuestIcon") + --GameTooltip:AddDoubleLine ("|TInterface\\GossipFrame\\DailyActiveQuestIcon:14:14:0:0:16:16:0:1:0:1".."|t "..tabela[1], tabela[2], 1, 1, 1, 1, 1, 1) else - GameTooltip:AddDoubleLine ("|TInterface\\AddOns\\Details\\images\\classes_small:14:14:0:0:128:128:"..(coords[1]*128)..":"..(coords[2]*128)..":"..(coords[3]*128)..":"..(coords[4]*128).."|t "..tabela[1]..": ", tabela[2], 1, 1, 1, 1, 1, 1) + GameCooltip:AddLine (tabela[1], tabela[2]) + GameCooltip:AddIcon ("Interface\\AddOns\\Details\\images\\classes_small", nil, 1, 14, 14, (coords[1]), (coords[2]), (coords[3]), (coords[4])) + --GameTooltip:AddDoubleLine ("|TInterface\\AddOns\\Details\\images\\classes_small:14:14:0:0:128:128:"..(coords[1]*128)..":"..(coords[2]*128)..":"..(coords[3]*128)..":"..(coords[4]*128).."|t "..tabela[1]..": ", tabela[2], 1, 1, 1, 1, 1, 1) end end end @@ -613,12 +621,20 @@ local function KickBy (magia, barra) _table_sort (tabela_jogadores, _detalhes.Sort2) - _GameTooltip:ClearLines() - _GameTooltip:AddLine (barra.texto_esquerdo:GetText()) + local spellName, _, spellIcon = GetSpellInfo (barra.texto_esquerdo:GetText()) + GameCooltip:AddLine (barra.texto_esquerdo:GetText()) + if (spellIcon) then + GameCooltip:AddIcon (spellIcon, nil, 1, 14, 14, 5/64, 59/64, 5/64, 59/64) + end for index, tabela in _ipairs (tabela_jogadores) do local coords = EncounterDetails.class_coords [tabela[3]] - GameTooltip:AddDoubleLine ("|TInterface\\AddOns\\Details\\images\\classes_small:14:14:0:0:128:128:"..(coords[1]*128)..":"..(coords[2]*128)..":"..(coords[3]*128)..":"..(coords[4]*128).."|t "..tabela[1]..": ", tabela[2], 1, 1, 1, 1, 1, 1) + GameCooltip:AddLine (EncounterDetails:GetOnlyName (tabela[1]) .. ": ", tabela[2], 1, "white") + GameCooltip:AddIcon ("Interface\\AddOns\\Details\\images\\classes_small", nil, 1, 14, 14, (coords[1]), (coords[2]), (coords[3]), (coords[4])) + GameCooltip:AddStatusBar (100, 1, .3, .3, .3, .3, false, false, false) + + + --GameTooltip:AddDoubleLine ("|T:14:14:0:0:128:128:"...."|t "..tabela[1]..": ", tabela[2], 1, 1, 1, 1, 1, 1) end end @@ -638,15 +654,19 @@ local function EnemySkills (habilidade, barra) _table_sort (tabela_jogadores, _detalhes.Sort2) - _GameTooltip:ClearLines() - _GameTooltip:AddLine (barra.texto_esquerdo:GetText()) + GameCooltip:AddLine (barra.texto_esquerdo:GetText()) + + local ToK = _detalhes.ToKFunctions [_detalhes.ps_abbreviation] for index, tabela in _ipairs (tabela_jogadores) do local coords = EncounterDetails.class_coords [tabela[3]] + + GameCooltip:AddLine (EncounterDetails:GetOnlyName (tabela[1]) .. ": ", ToK (_, tabela[2]), 1, "white") + GameCooltip:AddStatusBar (100, 1, .3, .3, .3, .3, false, false, false) + if (coords) then - GameTooltip:AddDoubleLine ("|TInterface\\AddOns\\Details\\images\\classes_small:14:14:0:0:128:128:"..(coords[1]*128)..":"..(coords[2]*128)..":"..(coords[3]*128)..":"..(coords[4]*128).."|t "..tabela[1]..": ", _detalhes:comma_value(tabela[2]).." (".._cstr("%.1f", (tabela[2]/total) * 100).."%)", 1, 1, 1, 1, 1, 1) + GameCooltip:AddIcon ("Interface\\AddOns\\Details\\images\\classes_small", nil, 1, 14, 14, (coords[1]), (coords[2]), (coords[3]), (coords[4])) end - --GameTooltip:AddDoubleLine ("|TInterface\\AddOns\\Details\\images\\classes_small:14:14:0:0:128:128:"..coords[1]..":"..coords[2]..":"..coords[3]..":"..coords[4].."|t "..tabela[1]..": ", _detalhes:comma_value(tabela[2]).." (".._cstr("%.1f", (tabela[2]/total) * 100).."%)", 1, 1, 1, 1, 1, 1) end end @@ -680,8 +700,7 @@ local function DamageTakenDetails (jogador, barra) _table_sort (meus_agressores, _detalhes.Sort2) - _GameTooltip:ClearLines() - _GameTooltip:AddLine (barra.texto_esquerdo:GetText()) + GameCooltip:AddLine (barra.texto_esquerdo:GetText()) local max = #meus_agressores if (max > 20) then @@ -690,8 +709,9 @@ local function DamageTakenDetails (jogador, barra) local teve_melee = false - for i = 1, max do + local ToK = _detalhes.ToKFunctions [_detalhes.ps_abbreviation] + for i = 1, max do local nome_magia, _, icone_magia = _GetSpellInfo (meus_agressores[i][1]) if (meus_agressores[i][1] == 1) then @@ -699,8 +719,9 @@ local function DamageTakenDetails (jogador, barra) teve_melee = true end - GameTooltip:AddDoubleLine (nome_magia..": ", _detalhes:comma_value(meus_agressores[i][2]).." (".._cstr("%.1f", (meus_agressores[i][2]/damage_taken) * 100).."%)", 1, 1, 1, 1, 1, 1) - GameTooltip:AddTexture (icone_magia) + GameCooltip:AddLine (nome_magia..": ", ToK (_, meus_agressores[i][2]) .. " (".._cstr("%.1f", (meus_agressores[i][2]/damage_taken) * 100).."%)", 1, "white") + GameCooltip:AddStatusBar (100, 1, .3, .3, .3, .3, false, false, false) + GameCooltip:AddIcon (icone_magia, nil, 1, 14, 14) end if (teve_melee) then @@ -725,10 +746,15 @@ function _detalhes:BossInfoRowClick (barra, param1) local reportar - if (barra.TTT == "morte") then --> deaths - reportar = {barra.report_text .. " " .. barra.texto_esquerdo:GetText()} - for i = 1, GameCooltip:GetNumLines(), 1 do + if (barra.TTT == "morte" or true) then --> deaths -- todos os boxes estão usando cooltip, por isso o 'true'. + reportar = {barra.report_text .. " " .. (barra.texto_esquerdo and barra.texto_esquerdo:GetText() or barra:GetParent() and barra:GetParent().texto_esquerdo and barra:GetParent().texto_esquerdo:GetText() or "")} + local beginAt = 1 + if (barra.TTT == "damage_taken" or barra.TTT == "habilidades_inimigas" or barra.TTT == "total_interrupt" or barra.TTT == "add") then + beginAt = 2 + end + --"habilidades_inimigas" + for i = beginAt, GameCooltip:GetNumLines(), 1 do local texto_left, texto_right = GameCooltip:GetText (i) if (texto_left and texto_right) then @@ -816,11 +842,20 @@ function EncounterDetails:SetRowScripts (barra, index, container) self:SetHeight (17) self:SetAlpha(1) - self:SetBackdrop (backdrop_bar_onenter) - self:SetBackdropColor (.0, .0, .0, 0.3) - self:SetBackdropBorderColor (.0, .0, .0, 0.5) + EncounterDetails.SetBarBackdrop_OnEnter (self) - GameTooltip:SetOwner (self, "ANCHOR_TOPRIGHT") + --GameTooltip:SetOwner (self, "ANCHOR_TOPRIGHT") + GameCooltip:Preset (2) + GameCooltip:SetOwner (self) + + GameCooltip:SetOption ("StatusBarTexture", [[Interface\AddOns\Details\images\bar_background]]) + GameCooltip:SetOption ("StatusBarHeightMod", 0) + GameCooltip:SetOption ("FixedWidth", 280) + GameCooltip:SetOption ("TextSize", 10) + GameCooltip:SetOption ("LeftBorderSize", -4) + GameCooltip:SetOption ("RightBorderSize", 5) + GameCooltip:SetOption ("ButtonsYMod", 0) + GameCooltip:SetOption ("YSpacingMod", -1) if (not self.TTT) then --> tool tip type return @@ -829,6 +864,13 @@ function EncounterDetails:SetRowScripts (barra, index, container) if (self.TTT == "damage_taken") then --> damage taken DamageTakenDetails (self.jogador, barra) + elseif (self.TTT == "adds_container") then + GameCooltip:AddLine ("Damage Taken") + GameCooltip:AddIcon ("Interface\\Buttons\\UI-MicroStream-Green", 1, 1, 14, 14, 0, 1, 1, 0) + + GameCooltip:AddLine ("Damage Done to Players") + GameCooltip:AddIcon ("Interface\\Buttons\\UI-MicroStream-Red") + elseif (self.TTT == "habilidades_inimigas") then --> enemy abilytes EnemySkills (self.jogador, self) self:SetScript ("OnUpdate", shift_monitor) @@ -854,7 +896,9 @@ function EncounterDetails:SetRowScripts (barra, index, container) KillInfo (self.jogador, self) --> aqui 2 end - GameTooltip:Show() + --GameTooltip:Show() + + GameCooltip:Show() end) barra:SetScript ("OnLeave", --> MOUSE OUT @@ -868,13 +912,11 @@ function EncounterDetails:SetRowScripts (barra, index, container) self:SetHeight (16) self:SetAlpha (0.9) - - self:SetBackdrop (backdrop_bar_onleave) - self:SetBackdropColor (.0, .0, .0, 0.3) + + EncounterDetails.SetBarBackdrop_OnLeave (self) GameTooltip:Hide() - _detalhes.popup:ShowMe (false, "tooltip") - + GameCooltip:Hide() end) end @@ -907,6 +949,8 @@ function EncounterDetails:OpenAndRefresh (_, segment) local map_id local boss_info + local ToK = _detalhes.ToKFunctions [_detalhes.ps_abbreviation] + if (EncounterDetails.debugmode and not _combat_object.is_boss) then _combat_object.is_boss = { index = 1, @@ -939,7 +983,10 @@ function EncounterDetails:OpenAndRefresh (_, segment) map_id = _combat_object.is_boss.mapid boss_info = _detalhes:GetBossDetails (_combat_object.is_boss.mapid, _combat_object.is_boss.index) - if (EncounterDetailsFrame.ShowType == "graph") then + if (EncounterDetailsFrame.ShowType == "phases") then + EncounterDetailsPhaseFrame.OnSelectPhase (1) + + elseif (EncounterDetailsFrame.ShowType == "graph") then EncounterDetails:BuildDpsGraphic() elseif (EncounterDetailsFrame.ShowType == "spellsauras") then @@ -982,7 +1029,7 @@ function EncounterDetails:OpenAndRefresh (_, segment) --[[ data mine: _combat_object ["totals_grupo"] hold the total [1] damage // [2] heal // [3] [energy_name] energies // [4] [misc_name] miscs --]] - --> Container Overall Damage Taken + --> Container Overall Damage Taken ~damagetaken ~damage taken --[[ data mine: combat tables have 4 containers [1] damage [2] heal [3] energy [4] misc each container have 2 tables: ._NameIndexTable and ._ActorTable --]] local DamageContainer = _combat_object [class_type_damage] @@ -1004,7 +1051,7 @@ function EncounterDetails:OpenAndRefresh (_, segment) if (jogador.classe and jogador.classe ~= "UNGROUPPLAYER" and jogador.classe ~= "UNKNOW") then local barra = container.barras [index] if (not barra) then - barra = EncounterDetails:CreateRow (index, container) + barra = EncounterDetails:CreateRow (index, container, 1, 0, -1) _detalhes:SetFontSize (barra.texto_esquerdo, 9) _detalhes:SetFontSize (barra.texto_direita, 9) _detalhes:SetFontFace (barra.texto_esquerdo, "Arial Narrow") @@ -1018,7 +1065,7 @@ function EncounterDetails:OpenAndRefresh (_, segment) barra.texto_esquerdo:SetText (jogador.nome) end - barra.texto_direita:SetText (_detalhes:comma_value (jogador.damage_taken)) + barra.texto_direita:SetText (ToK (_, jogador.damage_taken)) _detalhes:name_space (barra) @@ -1056,7 +1103,7 @@ function EncounterDetails:OpenAndRefresh (_, segment) --> Fim do container Overall Damage Taken - --> Container Overall Habilidades Inimigas + --> Container Overall Habilidades Inimigas ~damage taken by spell local habilidades_poll = {} --> pega as magias contínuas presentes em todas as fases @@ -1174,8 +1221,29 @@ function EncounterDetails:OpenAndRefresh (_, segment) --> por em ordem local tabela_em_ordem = {} + local jaFoi = {} + for id, tabela in _pairs (habilidades_usadas) do - tabela_em_ordem [#tabela_em_ordem+1] = tabela + local spellname = GetSpellInfo (tabela [4]) + if (not jaFoi [spellname]) then + tabela [5] = spellname + tabela_em_ordem [#tabela_em_ordem+1] = tabela + jaFoi [spellname] = #tabela_em_ordem + else + local index = jaFoi [spellname] + tabela_em_ordem [index] [1] = tabela_em_ordem [index] [1] + tabela [1] + + local tt = tabela_em_ordem [index] [2] -- tabela com [PlayerName] = {amount, class} + + for playerName, t in pairs (tabela [2]) do + local amount, class = unpack (t) + if (tt [playerName]) then + tt [playerName][1] = tt [playerName][1] + amount + else + tt [playerName] = {amount, class} + end + end + end end _table_sort (tabela_em_ordem, _detalhes.Sort1) @@ -1192,7 +1260,7 @@ function EncounterDetails:OpenAndRefresh (_, segment) local barra = container.barras [index] if (not barra) then - barra = EncounterDetails:CreateRow (index, container) + 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.texto_esquerdo, 9) @@ -1203,16 +1271,18 @@ function EncounterDetails:OpenAndRefresh (_, segment) local nome_magia, _, icone_magia = _GetSpellInfo (habilidade[4]) - barra.texto_esquerdo:SetText (nome_magia) - barra.texto_direita:SetText (_detalhes:comma_value (habilidade[1])) + barra.texto_esquerdo:SetText (nome_magia) -- .. " (|cFFa0a0a0" .. habilidade[4] .. "|r) + barra.texto_direita:SetText (ToK (_, habilidade[1])) _detalhes:name_space (barra) barra.jogador = habilidade --> barra.jogador agora tem a tabela com --> [1] total dano causado [2] jogadores que foram alvos [3] jogadores que castaram essa magia [4] ID da magia - --barra.textura:SetStatusBarColor (_unpack (_detalhes.class_colors [jogador.classe])) - --barra.textura:SetStatusBarColor (1, 1, 1, 1) --> a cor pode ser a spell school da magia + local spellSchool = _detalhes.spell_school_cache [nome_magia] or 1 + local r, g, b = _detalhes:GetSpellSchoolColor (spellSchool) + barra.t:SetVertexColor (r, g, b) + if (index == 1) then barra.textura:SetValue (100) dano_do_primeiro = habilidade[1] @@ -1326,21 +1396,41 @@ function EncounterDetails:OpenAndRefresh (_, segment) local tabela = barra.jogador local dano_em = tabela.dano_em - GameTooltip:SetOwner (barra, "ANCHOR_TOPRIGHT") + --GameTooltip:SetOwner (barra, "ANCHOR_TOPRIGHT") + --_GameTooltip:ClearLines() + --_GameTooltip:AddLine (barra.texto_esquerdo:GetText().." ".. Loc ["STRING_INFLICTED"]) + + GameCooltip:Preset (2) + GameCooltip:SetOwner (self) + + GameCooltip:SetOption ("StatusBarTexture", [[Interface\AddOns\Details\images\bar_background]]) + GameCooltip:SetOption ("StatusBarHeightMod", 0) + GameCooltip:SetOption ("FixedWidth", 280) + GameCooltip:SetOption ("TextSize", 10) + GameCooltip:SetOption ("LeftBorderSize", -4) + GameCooltip:SetOption ("RightBorderSize", 5) + GameCooltip:SetOption ("ButtonsYMod", 0) + GameCooltip:SetOption ("YSpacingMod", -1) + + GameCooltip:AddLine (barra.texto_esquerdo:GetText().." ".. "Damage Done") + - _GameTooltip:ClearLines() - _GameTooltip:AddLine (barra.texto_esquerdo:GetText().." ".. Loc ["STRING_INFLICTED"]) local dano_em_total = tabela.dano_em_total for _, esta_tabela in _pairs (dano_em) do local coords = EncounterDetails.class_coords [esta_tabela[3]] - GameTooltip:AddDoubleLine ("|TInterface\\AddOns\\Details\\images\\classes_small:14:14:0:0:128:128:"..(coords[1]*128)..":"..(coords[2]*128)..":"..(coords[3]*128)..":"..(coords[4]*128).."|t "..esta_tabela[1]..": ", _detalhes:comma_value(esta_tabela[2]).." (".. _cstr ("%.1f", esta_tabela[2]/dano_em_total*100) .."%)", 1, 1, 1, 1, 1, 1) + + GameCooltip:AddLine (esta_tabela[1]..": ", _detalhes:ToK (esta_tabela[2]).." (".. _cstr ("%.1f", esta_tabela[2]/dano_em_total*100) .."%)") + + --GameTooltip:AddDoubleLine ("|TInterface\\AddOns\\Details\\images\\classes_small:14:14:0:0:128:128:"..(coords[1]*128)..":"..(coords[2]*128)..":"..(coords[3]*128)..":"..(coords[4]*128).."|t "..esta_tabela[1]..": ", _detalhes:comma_value(esta_tabela[2]).." (".. _cstr ("%.1f", esta_tabela[2]/dano_em_total*100) .."%)", 1, 1, 1, 1, 1, 1) + GameCooltip:AddIcon ([[Interface\AddOns\Details\images\classes_small]], 1, 1, 14, 14, (coords[1]), (coords[2]), (coords[3]), (coords[4])) + GameCooltip:AddStatusBar (0, 1, 1, 1, 1, 1, false, {value = 100, color = {.3, .3, .3, 1}, specialSpark = false, texture = [[Interface\AddOns\Details\images\bar_serenity]]}) + end - GameTooltip:AddLine (" ") - GameTooltip:AddLine ("CLICK to Report") - - GameTooltip:Show() + GameCooltip:AddLine (" ") + GameCooltip:AddLine ("CLICK to Report") + GameCooltip:Show() end local function _DanoRecebido (self) @@ -1351,10 +1441,23 @@ function EncounterDetails:OpenAndRefresh (_, segment) local tabela = barra.jogador local damage_from = tabela.damage_from - GameTooltip:SetOwner (barra, "ANCHOR_TOPRIGHT") + GameCooltip:Preset (2) + GameCooltip:SetOwner (self) - GameTooltip:ClearLines() - GameTooltip:AddLine (barra.texto_esquerdo:GetText().." "..Loc ["STRING_DAMAGE_TAKEN"]) + GameCooltip:SetOption ("StatusBarTexture", [[Interface\AddOns\Details\images\bar_background]]) + GameCooltip:SetOption ("StatusBarHeightMod", 0) + GameCooltip:SetOption ("FixedWidth", 280) + GameCooltip:SetOption ("TextSize", 10) + GameCooltip:SetOption ("LeftBorderSize", -4) + GameCooltip:SetOption ("RightBorderSize", 5) + GameCooltip:SetOption ("ButtonsYMod", 0) + GameCooltip:SetOption ("YSpacingMod", -1) + + GameCooltip:AddLine (barra.texto_esquerdo:GetText().." "..Loc ["STRING_DAMAGE_TAKEN"]) + + --GameTooltip:SetOwner (barra, "ANCHOR_TOPRIGHT") + --GameTooltip:ClearLines() + --GameTooltip:AddLine (barra.texto_esquerdo:GetText().." "..Loc ["STRING_DAMAGE_TAKEN"]) local damage_from_total = tabela.damage_from_total @@ -1362,20 +1465,26 @@ function EncounterDetails:OpenAndRefresh (_, segment) local coords = EncounterDetails.class_coords [esta_tabela[3]] if (coords) then - GameTooltip:AddDoubleLine ("|TInterface\\AddOns\\Details\\images\\classes_small:14:14:0:0:128:128:"..(coords[1]*128)..":"..(coords[2]*128)..":"..(coords[3]*128)..":"..(coords[4]*128).."|t "..esta_tabela[1]..": ", _detalhes:comma_value(esta_tabela[2]).." (".. _cstr ("%.1f", esta_tabela[2]/damage_from_total*100) .."%)", 1, 1, 1, 1, 1, 1) + --GameTooltip:AddDoubleLine ("|TInterface\\AddOns\\Details\\images\\classes_small:14:14:0:0:128:128:"..(coords[1]*128)..":"..(coords[2]*128)..":"..(coords[3]*128)..":"..(coords[4]*128).."|t "..esta_tabela[1]..": ", _detalhes:comma_value(esta_tabela[2]).." (".. _cstr ("%.1f", esta_tabela[2]/damage_from_total*100) .."%)", 1, 1, 1, 1, 1, 1) + GameCooltip:AddLine (esta_tabela[1]..": ", _detalhes:ToK (esta_tabela[2]).." (".. _cstr ("%.1f", esta_tabela[2]/damage_from_total*100) .."%)") + GameCooltip:AddIcon ([[Interface\AddOns\Details\images\classes_small]], 1, 1, 14, 14, (coords[1]), (coords[2]), (coords[3]), (coords[4])) + GameCooltip:AddStatusBar (0, 1, 1, 1, 1, 1, false, {value = 100, color = {.3, .3, .3, 1}, specialSpark = false, texture = [[Interface\AddOns\Details\images\bar_serenity]]}) + else - GameTooltip:AddDoubleLine (esta_tabela[1], _detalhes:comma_value(esta_tabela[2]).." (".. _cstr ("%.1f", esta_tabela[2]/damage_from_total*100) .."%)", 1, 1, 1, 1, 1, 1) + --GameTooltip:AddDoubleLine (esta_tabela[1], _detalhes:comma_value(esta_tabela[2]).." (".. _cstr ("%.1f", esta_tabela[2]/damage_from_total*100) .."%)", 1, 1, 1, 1, 1, 1) + GameCooltip:AddLine (esta_tabela[1]..": ", _detalhes:ToK (esta_tabela[2]).." (".. _cstr ("%.1f", esta_tabela[2]/damage_from_total*100) .."%)") + GameCooltip:AddStatusBar (0, 1, 1, 1, 1, 1, false, {value = 100, color = {.3, .3, .3, 1}, specialSpark = false, texture = [[Interface\AddOns\Details\images\bar_serenity]]}) end end - GameTooltip:AddLine (" ") - GameTooltip:AddLine ("CLICK to Report") - - GameTooltip:Show() + GameCooltip:AddLine (" ") + GameCooltip:AddLine ("CLICK to Report") + GameCooltip:Show() end local function _OnHide (self) - GameTooltip:Hide() + --GameTooltip:Hide() + GameCooltip:Hide() self.textura:SetBlendMode ("BLEND") end @@ -1396,16 +1505,16 @@ function EncounterDetails:OpenAndRefresh (_, segment) local barra = container.barras [index] if (not barra) then barra = EncounterDetails:CreateRow (index, container, -0) - barra:SetBackdrop (backdrop_bar_onleave) - barra:SetBackdropColor (.0, .0, .0, 0.3) + --barra:SetBackdrop (backdrop_bar_onleave) + --barra:SetBackdropColor (.0, .0, .0, 0.3) barra:SetWidth (155) - barra._no_report = true - + barra.TTT = "adds_container" + --> criar 2 botão: um para o dano que add deu e outro para o dano que o add tomou local add_damage_taken = _CreateFrame ("Button", nil, barra) - add_damage_taken.report_text = "Details! " + add_damage_taken.report_text = "Details! Damage Taken of " add_damage_taken.barra = barra add_damage_taken:SetWidth (16) add_damage_taken:SetHeight (16) @@ -1428,7 +1537,7 @@ function EncounterDetails:OpenAndRefresh (_, segment) add_damage_taken.textura:SetPoint ("center", add_damage_taken, "center") local add_damage_done = _CreateFrame ("Button", nil, barra) - add_damage_done.report_text = "Details! " + add_damage_done.report_text = "Details! Damage Done of " add_damage_done.barra = barra add_damage_done:SetWidth (16) add_damage_done:SetHeight (16) @@ -1454,6 +1563,9 @@ function EncounterDetails:OpenAndRefresh (_, segment) _detalhes:SetFontSize (barra.texto_esquerdo, 9) _detalhes:SetFontSize (barra.texto_direita, 9) + add_damage_taken.TTT = "add" + add_damage_done.TTT = "add" + --barra.TTT = "habilidades_inimigas" -- tool tip type end @@ -1539,8 +1651,6 @@ function EncounterDetails:OpenAndRefresh (_, segment) barra = EncounterDetails:CreateRow (index, container, 3, 0, -6) barra.TTT = "total_interrupt" -- tool tip type barra.report_text = "Details! ".. Loc ["STRING_INTERRUPTS_OF"] - barra:SetBackdrop (backdrop_bar_onleave) - barra:SetBackdropColor (.0, .0, .0, 0.3) barra:SetWidth (155) end @@ -1653,8 +1763,6 @@ function EncounterDetails:OpenAndRefresh (_, segment) barra = EncounterDetails:CreateRow (index, container, 3, 3, -6) barra.TTT = "dispell" -- tool tip type barra.report_text = "Details! ".. Loc ["STRING_DISPELLS_OF"] - barra:SetBackdrop (backdrop_bar_onleave) - barra:SetBackdropColor (.0, .0, .0, 0.3) barra:SetWidth (160) end diff --git a/plugins/Details_EncounterDetails/enUS.lua b/plugins/Details_EncounterDetails/enUS.lua index 20ee07f2..f9b8cd8e 100644 --- a/plugins/Details_EncounterDetails/enUS.lua +++ b/plugins/Details_EncounterDetails/enUS.lua @@ -13,7 +13,7 @@ Loc ["STRING_SHOW_PHASE_DATA"] = "Show details for this phase" Loc ["STRING_NOT IMPLEMENTED"] = "Not implemented yet" Loc ["STRING_DIED"] = "died" Loc ["STRING_MELEE_DAMAGE"] = "melee damage" -Loc ["STRING_DAMAGE_TAKEN_REPORT"] = "Damage taken by ability" +Loc ["STRING_DAMAGE_TAKEN_REPORT"] = "Damage taken by" Loc ["STRING_ABILITY_DAMAGE"] = "Ability damage" Loc ["STRING_DAMAGE_TAKEN"] = "Damage Taken" Loc ["STRING_TOOK_DAMAGE_FROM"] = "Took damage from" diff --git a/plugins/Details_EncounterDetails/frames.lua b/plugins/Details_EncounterDetails/frames.lua index 273e2fcb..092eb57e 100644 --- a/plugins/Details_EncounterDetails/frames.lua +++ b/plugins/Details_EncounterDetails/frames.lua @@ -8,11 +8,41 @@ do local _math_floor = math.floor local _cstr = string.format local _GetSpellInfo = _detalhes.getspellinfo + + local PhaseButtonTemplate = { + backdrop = {edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true}, + backdropcolor = {.3, .3, .3, .5}, + onentercolor = {1, 1, 1, .5}, + backdropbordercolor = {0, 0, 0, 1}, + } + local PhaseButtonTemplateHighlight = { + backdrop = {edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true}, + backdropcolor = {.9, .9, .9, .5}, + onentercolor = {1, 1, 1, .5}, + backdropbordercolor = {.70, .70, .70, 1}, + } - _detalhes.EncounterDetailsTempWindow = function (EncounterDetails) + local set_backdrop = function (frame) + frame:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tileSize = 64, tile = true}) + frame:SetBackdropColor (0, 0, 0, .2) + frame:SetBackdropBorderColor (0, 0, 0, 1) + end + + local BGColorDefault = {0.5, 0.5, 0.5, 0.3} + local BGColorDefault_Hover = {0.5, 0.5, 0.5, 0.7} + local BackdropDefault = {bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true} + +_detalhes.EncounterDetailsTempWindow = function (EncounterDetails) --> options panel + EncounterDetails.SetBarBackdrop_OnEnter = function (self) + self:SetBackdropColor (unpack (BGColorDefault_Hover)) + end + EncounterDetails.SetBarBackdrop_OnLeave = function (self) + self:SetBackdropColor (unpack (BGColorDefault)) + end + function EncounterDetails:AutoShowIcon() local found_boss = false for _, combat in ipairs (EncounterDetails:GetCombatSegments()) do @@ -168,7 +198,7 @@ do barra:SetWidth (200+width_mod) --> tamanho da barra de acordo com o tamanho da janela barra:SetHeight (16) --> altura determinada pela instância - local y = (index-1)*15 --> 17 é a altura da barra + local y = (index-1)*17 y_mod = y_mod or 0 y = y + y_mod y = y*-1 --> baixo @@ -183,6 +213,9 @@ do EncounterDetails:CreateRowTexture (barra) + barra:SetBackdrop (BackdropDefault) + EncounterDetails.SetBarBackdrop_OnLeave (barra) + --> icone barra.icone = barra.textura:CreateTexture (nil, "OVERLAY") barra.icone:SetWidth (14) @@ -262,9 +295,7 @@ do if (EncounterDetails.Frame.linhas > 5) then EncounterDetails.Frame.linhas = 1 end - - g.max_damage = 0 for _, line in ipairs (g.VerticalLines) do @@ -274,6 +305,9 @@ do lastBoss = combat.is_boss and combat.is_boss.index -- + if (not segment) then + return + end for i = segment + 4, segment+1, -1 do local combat = EncounterDetails:GetCombat (i) if (combat) then --the combat exists @@ -304,7 +338,7 @@ do g:ClearPhaseTexture() local phase_data = combat.PhaseData - local scale = 610 / combat:GetCombatTime() + local scale = 810 / combat:GetCombatTime() for i = 1, #phase_data do local phase = phase_data[i][1] @@ -424,7 +458,7 @@ do if (drawDeathsCombat) then local mortes = drawDeathsCombat.last_events_tables --local scaleG = 650/_detalhes.tabela_vigente:GetCombatTime() - local scaleG = 610/drawDeathsCombat:GetCombatTime() + local scaleG = 810/drawDeathsCombat:GetCombatTime() for _, row in _ipairs (g.VerticalLines) do row:Hide() @@ -505,7 +539,7 @@ do local deadTime = mortes [i].dead_at --print (deadTime, mortes [i][3]) - vRowFrame:SetPoint ("topleft", EncounterDetails.Frame, "topleft", (deadTime*scaleG)+70, -268) + vRowFrame:SetPoint ("topleft", EncounterDetails.Frame, "topleft", (deadTime*scaleG)+70, -418) vRowFrame.dead = mortes [i] vRowFrame:Show() @@ -513,8 +547,11 @@ do end end + --~chart ~graphic ~grafico function EncounterDetails:CreateGraphPanel() - local g = Graphics:CreateGraphLine ("DetailsRaidDpsGraph", EncounterDetails.Frame, "topleft","topleft",20,-76,670,238) + local g = Graphics:CreateGraphLine ("DetailsRaidDpsGraph", EncounterDetails.Frame, "topleft","topleft", 20, -76, 870, 388) + --670, 238 + --1.3 1.62 g:SetXAxis (-1,1) g:SetYAxis (-1,1) g:SetGridSpacing (false, false) @@ -862,7 +899,7 @@ do self.Data [index].Color = color self.NeedsUpdate=true end - + function g:AddDataSeriesOnFirstIndex (points, color, n2) local data --Make sure there is data points @@ -886,24 +923,27 @@ do self.NeedsUpdate=true end + DetailsFrameWork:NewLabel (EncounterDetails.Frame, EncounterDetails.Frame, nil, "phases_string", "phases:", "GameFontHighlightSmall") + EncounterDetails.Frame["phases_string"]:SetPoint ("TOPLEFT", EncounterDetails.Frame, "TOPLEFT", 20, -450) + DetailsFrameWork:NewLabel (EncounterDetails.Frame, EncounterDetails.Frame, nil, "timeamt0", "00:00", "GameFontHighlightSmall") - EncounterDetails.Frame["timeamt0"]:SetPoint ("TOPLEFT", EncounterDetails.Frame, "TOPLEFT", 85, -300) + EncounterDetails.Frame["timeamt0"]:SetPoint ("TOPLEFT", EncounterDetails.Frame, "TOPLEFT", 85, -450) for i = 1, 8, 1 do - local line = g:CreateTexture (nil, "overlay") line:SetColorTexture (.5, .5, .5, .7) - line:SetWidth (670) + line:SetWidth (870) line:SetHeight (1) line:SetVertexColor (.4, .4, .4, .8) DetailsFrameWork:NewLabel (EncounterDetails.Frame, EncounterDetails.Frame, nil, "dpsamt"..i, "", "GameFontHighlightSmall") - EncounterDetails.Frame["dpsamt"..i]:SetPoint ("TOPLEFT", EncounterDetails.Frame, "TOPLEFT", 27, -61 + (-(24.6*i))) + EncounterDetails.Frame["dpsamt"..i]:SetPoint ("TOPLEFT", EncounterDetails.Frame, "TOPLEFT", 27, -61 + (-(39.85*i))) --24.6 line:SetPoint ("topleft", EncounterDetails.Frame["dpsamt"..i].widget, "bottom", -27, 0) DetailsFrameWork:NewLabel (EncounterDetails.Frame, EncounterDetails.Frame, nil, "timeamt"..i, "", "GameFontHighlightSmall") - EncounterDetails.Frame["timeamt"..i].widget:SetPoint ("TOPLEFT", EncounterDetails.Frame, "TOPLEFT", 75+(73*i), -300) + EncounterDetails.Frame["timeamt"..i].widget:SetPoint ("TOPLEFT", EncounterDetails.Frame, "TOPLEFT", 75+(94.9*i), -450) --73 end + --670, 238 // --1.3 1.62 g.max_time = 0 g.max_damage = 0 @@ -914,7 +954,7 @@ do local texture = g:CreateTexture (nil, "overlay") texture:SetWidth (9) texture:SetHeight (9) - texture:SetPoint ("TOPLEFT", EncounterDetails.Frame, "TOPLEFT", (i*65) + 299, -81) + texture:SetPoint ("TOPLEFT", EncounterDetails.Frame, "TOPLEFT", (i*65) + 499, -81) texture:SetColorTexture (unpack (grafico_cores[i])) local text = g:CreateFontString (nil, "OVERLAY", "GameFontHighlightSmall") text:SetPoint ("LEFT", texture, "right", 2, 0) @@ -930,34 +970,86 @@ do local v = g:CreateTexture (nil, "overlay") v:SetWidth (1) - v:SetHeight (238) + v:SetHeight (388) v:SetPoint ("top", g, "top", 0, 1) v:SetPoint ("left", g, "left", 55, 0) v:SetColorTexture (1, 1, 1, 1) local h = g:CreateTexture (nil, "overlay") - h:SetWidth (668) + h:SetWidth (868) h:SetHeight (2) - h:SetPoint ("top", g, "top", 0, -217) + h:SetPoint ("top", g, "top", 0, -367) h:SetPoint ("left", g, "left") h:SetColorTexture (1, 1, 1, 1) end + -- ~start ~main ~frame ~baseframe ~bossframe local BossFrame = EncounterDetails.Frame - local DetailsFrameWork = _detalhes.gump BossFrame:SetFrameStrata ("HIGH") BossFrame:SetToplevel (true) + BossFrame:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\AddOns\Details\images\background]], tileSize = 64, tile = true}) + BossFrame:SetBackdropColor (.5, .5, .5, .5) + BossFrame:SetBackdropBorderColor (0, 0, 0, 1) + -- ~size - BossFrame:SetWidth (698) - BossFrame:SetHeight (354) + BossFrame:SetWidth (898) -- + 200 + BossFrame:SetHeight (504) -- + 150 + + BossFrame:EnableMouse (true) + BossFrame:SetResizable (false) + BossFrame:SetMovable (true) + --background + BossFrame.bg1 = BossFrame:CreateTexture (nil, "background") + BossFrame.bg1:SetTexture ([[Interface\AddOns\Details\images\background]], true) + BossFrame.bg1:SetAlpha (0.7) + BossFrame.bg1:SetVertexColor (0.27, 0.27, 0.27) + BossFrame.bg1:SetVertTile (true) + BossFrame.bg1:SetHorizTile (true) + BossFrame.bg1:SetSize (790, 454) + BossFrame.bg1:SetAllPoints() - BossFrame:EnableMouse (true) - BossFrame:SetResizable (false) - BossFrame:SetMovable (true) + --title bar + local titlebar = CreateFrame ("frame", nil, BossFrame) + titlebar:SetPoint ("topleft", BossFrame, "topleft", 2, -3) + titlebar:SetPoint ("topright", BossFrame, "topright", -2, -3) + titlebar:SetHeight (20) + titlebar:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\AddOns\Details\images\background]], tileSize = 64, tile = true}) + titlebar:SetBackdropColor (.5, .5, .5, 1) + titlebar:SetBackdropBorderColor (0, 0, 0, 1) + + local name_bg_texture = BossFrame:CreateTexture (nil, "background") + name_bg_texture:SetTexture ([[Interface\PetBattles\_PetBattleHorizTile]], true) + name_bg_texture:SetHorizTile (true) + name_bg_texture:SetTexCoord (0, 1, 126/256, 19/256) + name_bg_texture:SetPoint ("topleft", BossFrame, "topleft", 2, -22) + name_bg_texture:SetPoint ("bottomright", BossFrame, "bottomright") + name_bg_texture:SetHeight (54) + name_bg_texture:SetVertexColor (0, 0, 0, 0.2) + + --window title + local titleLabel = DetailsFrameWork:NewLabel (titlebar, titlebar, nil, "titulo", Loc ["STRING_WINDOW_TITLE"], "GameFontHighlightLeft", 12, {227/255, 186/255, 4/255}) + titleLabel:SetPoint ("center", BossFrame, "center") + titleLabel:SetPoint ("top", BossFrame, "top", 0, -7) + + --> Nome do Encontro + DetailsFrameWork:NewLabel (BossFrame, BossFrame, nil, "boss_name", "Unknown Encounter", "QuestFont_Large") + BossFrame.boss_name:SetPoint ("TOPLEFT", BossFrame, "TOPLEFT", 100, -46) + + --> Nome da Raid + DetailsFrameWork:NewLabel (BossFrame, BossFrame, nil, "raid_name", "Unknown Raid", "GameFontHighlightSmall") + BossFrame.raid_name:SetPoint ("CENTER", BossFrame.boss_name, "CENTER", 0, 14) + + --> icone da classe no canto esquerdo superior + BossFrame.boss_icone = BossFrame:CreateTexture (nil, "overlay") + BossFrame.boss_icone:SetPoint ("TOPLEFT", BossFrame, "TOPLEFT", 4, -24) + BossFrame.boss_icone:SetWidth (46) + BossFrame.boss_icone:SetHeight (46) + + ---- BossFrame:SetScript ("OnMouseDown", function (self, botao) @@ -979,45 +1071,27 @@ do BossFrame:SetPoint ("CENTER", UIParent) - --> icone da classe no canto esquerdo superior - BossFrame.boss_icone = BossFrame:CreateTexture (nil, "BACKGROUND") - BossFrame.boss_icone:SetPoint ("TOPLEFT", BossFrame, "TOPLEFT", 4, 0) - BossFrame.boss_icone:SetWidth (64) - BossFrame.boss_icone:SetHeight (64) - --> imagem de fundo - BossFrame.raidbackground = BossFrame:CreateTexture (nil, "BORDER") - BossFrame.raidbackground:SetPoint ("TOPLEFT", BossFrame, "TOPLEFT", 244, -74) - BossFrame.raidbackground:SetDrawLayer ("BORDER", 2) - BossFrame.raidbackground:SetWidth (445) - BossFrame.raidbackground:SetHeight (240) - BossFrame.raidbackground:SetAlpha (0.4) + BossFrame.raidbackground = BossFrame:CreateTexture (nil, "BORDER") + BossFrame.raidbackground:SetPoint ("TOPLEFT", BossFrame, "TOPLEFT", 0, -74) + BossFrame.raidbackground:SetPoint ("bottomright", BossFrame, "bottomright", 0, 0) + BossFrame.raidbackground:SetDrawLayer ("BORDER", 2) + BossFrame.raidbackground:SetAlpha (0.1) + + --> botão fechar + titlebar.CloseButton = CreateFrame ("Button", nil, titlebar, "UIPanelCloseButton") + titlebar.CloseButton:SetWidth (20) + titlebar.CloseButton:SetHeight (20) + titlebar.CloseButton:SetPoint ("TOPRIGHT", BossFrame, "TOPRIGHT", -2, -3) + titlebar.CloseButton:SetText ("X") + titlebar.CloseButton:SetScript ("OnClick", function(self) + EncounterDetails:CloseWindow() + end) + titlebar.CloseButton:SetFrameLevel (titlebar:GetFrameLevel()+2) + titlebar.CloseButton:GetNormalTexture():SetDesaturated (true) --> background completo - BossFrame.bg = BossFrame:CreateTexture (nil, "BORDER") - BossFrame.bg:SetPoint ("TOPLEFT", BossFrame, "TOPLEFT", 0, 0) - BossFrame.bg:SetWidth (1024) - BossFrame.bg:SetHeight (512) - BossFrame.bg:SetTexture ("Interface\\AddOns\\Details_EncounterDetails\\images\\boss_bg_graphic") - BossFrame.bg:SetDrawLayer ("BORDER", 1) - - BossFrame.bg_filler = BossFrame:CreateTexture (nil, "BORDER") - BossFrame.bg_filler:SetPoint ("TOPLEFT", BossFrame, "TOPLEFT", 20, -74) - BossFrame.bg_filler:SetSize (670, 239) - BossFrame.bg_filler:SetDrawLayer ("BORDER", 0) - BossFrame.bg_filler:SetTexture ([[Interface\FrameGeneral\UI-Background-Marble]], true) - BossFrame.bg_filler:SetVertTile (true) - BossFrame.bg_filler:SetHorizTile (true) - BossFrame.bg_main = BossFrame:CreateTexture (nil, "BORDER") - BossFrame.bg_main:SetPoint ("TOPLEFT", BossFrame, "TOPLEFT", 0, 0) - BossFrame.bg_main:SetWidth (700) - BossFrame.bg_main:SetHeight (512) - BossFrame.bg_main:SetTexture ("Interface\\AddOns\\Details_EncounterDetails\\images\\boss_bg") - BossFrame.bg_main:SetTexCoord (0, 700/1024, 0, 1) - BossFrame.bg_main:SetDrawLayer ("BORDER", 3) - BossFrame.bg_main:Show() - BossFrame.Widgets = {} BossFrame.ShowType = "main" @@ -1034,13 +1108,43 @@ do BossFrame.linhas = nil end - local selected - local u - local mode_label local scrollframe local emote_segment = 1 local searching + local hide_Graph = function() + if (_G.DetailsRaidDpsGraph) then + _G.DetailsRaidDpsGraph:Hide() + for i = 1, 8, 1 do + BossFrame["dpsamt"..i]:Hide() + BossFrame["timeamt"..i]:Hide() + end + BossFrame["timeamt0"]:Hide() + BossFrame["phases_string"]:Hide() + end + end + + local hide_Emote = function() + --hide emote frames + for _, widget in pairs (BossFrame.EmoteWidgets) do + widget:Hide() + end + end + + local hide_WeakAuras = function() + --hide spells frames + for _, widget in pairs (BossFrame.EnemySpellsWidgets) do + widget:Hide() + end + end + + local hide_Summary = function() + --hide boss frames + for _, frame in _ipairs (BossFrame.Widgets) do + frame:Hide() + end + end + BossFrame.switch = function (to, _, to2) if (type (to) == "string") then to = to @@ -1053,80 +1157,37 @@ do BossFrame.label_dbm_bars:Hide() BossFrame.label_bw_bars:Hide() - if (to == "main") then + EncounterDetailsPhaseFrame:Hide() - local bg_texture = BossFrame.bg_main - BossFrame.bg_main:Show() - + if (to == "main") then BossFrame.raidbackground:Show() for _, frame in _ipairs (BossFrame.Widgets) do frame:Show() end - selected:SetPoint ("center", BossFrame.buttonSwitchNormal, "center", 0, 1) - u:SetAllPoints (BossFrame.buttonSwitchNormal) - - if (_G.DetailsRaidDpsGraph) then - _G.DetailsRaidDpsGraph:Hide() - for i = 1, 8, 1 do - BossFrame["dpsamt"..i]:Hide() - BossFrame["timeamt"..i]:Hide() - - end - BossFrame["timeamt0"]:Hide() - end - - --hide emote frames - for _, widget in pairs (BossFrame.EmoteWidgets) do - widget:Hide() - end - - --hide spells frames - for _, widget in pairs (BossFrame.EnemySpellsWidgets) do - widget:Hide() - end - + hide_Graph() + hide_Emote() + hide_WeakAuras() + BossFrame.ShowType = "main" - mode_label.text = "Summary" BossFrame.segmentosDropdown:Enable() elseif (to == "spellsauras") then - --hide boss frames - for _, frame in _ipairs (BossFrame.Widgets) do - frame:Hide() - end + hide_Summary() - BossFrame.bg_main:Hide() BossFrame.raidbackground:Show() - --hide graph - if (_G.DetailsRaidDpsGraph) then - _G.DetailsRaidDpsGraph:Hide() - for i = 1, 8, 1 do - BossFrame["dpsamt"..i]:Hide() - BossFrame["timeamt"..i]:Hide() - - end - BossFrame["timeamt0"]:Hide() - end - - --hide emote frames - for _, widget in pairs (BossFrame.EmoteWidgets) do - widget:Hide() - end + hide_Graph() + hide_Emote() --show spells frames for _, widget in pairs (BossFrame.EnemySpellsWidgets) do widget:Show() end - selected:SetPoint ("center", BossFrame.buttonSwitchSpellsAuras.widget, "center", 0, 1) - u:SetAllPoints (BossFrame.buttonSwitchSpellsAuras.widget) - BossFrame.ShowType = "spellsauras" - mode_label.text = "Spells and Auras" -- show spells box local actor = EncounterDetails.build_actor_menu() [1] @@ -1153,7 +1214,6 @@ do frame:Hide() end - BossFrame.bg_main:Hide() BossFrame.raidbackground:Show() --hide graph @@ -1162,9 +1222,9 @@ do for i = 1, 8, 1 do BossFrame["dpsamt"..i]:Hide() BossFrame["timeamt"..i]:Hide() - end BossFrame["timeamt0"]:Hide() + BossFrame["phases_string"]:Hide() end --show emote frames for _, widget in pairs (BossFrame.EmoteWidgets) do @@ -1176,11 +1236,7 @@ do widget:Hide() end - selected:SetPoint ("center", BossFrame.buttonSwitchBossEmotes.widget, "center", 0, 1) - u:SetAllPoints (BossFrame.buttonSwitchBossEmotes.widget) - BossFrame.ShowType = "emotes" - mode_label.text = "Boss Emotes" scrollframe:Update() BossFrame.EmotesSegment:Refresh() @@ -1188,6 +1244,17 @@ do BossFrame.segmentosDropdown:Disable() + elseif (to == "phases") then + + hide_Summary() + hide_Graph() + hide_Emote() + hide_WeakAuras() + + BossFrame.ShowType = "phases" + + EncounterDetailsPhaseFrame:Show() + elseif (to == "graph") then EncounterDetails:BuildDpsGraphic() @@ -1195,16 +1262,12 @@ do return end - BossFrame.bg_main:Hide() BossFrame.raidbackground:Hide() for _, frame in _ipairs (BossFrame.Widgets) do frame:Hide() end - - selected:SetPoint ("center", BossFrame.buttonSwitchGraphic, "center", 0, 1) - u:SetAllPoints (BossFrame.buttonSwitchGraphic) - + _G.DetailsRaidDpsGraph:Show() for i = 1, 8, 1 do @@ -1212,9 +1275,9 @@ do BossFrame["timeamt"..i].widget:Show() end BossFrame["timeamt0"].widget:Show() + BossFrame["phases_string"].widget:Show() BossFrame.ShowType = "graph" - mode_label.text = "Damage Graphic" --hide emote frames for _, widget in pairs (BossFrame.EmoteWidgets) do @@ -1230,97 +1293,42 @@ do end end - -- ~button + -- ~button ~menu --summary - BossFrame.buttonSwitchNormal = DetailsFrameWork:NewDetailsButton (BossFrame, BossFrame, _, BossFrame.switch, "main", nil, 26, 33) - BossFrame.buttonSwitchNormal:SetPoint ("bottomright", BossFrame, "bottomright", -270, 5) - local t = BossFrame.buttonSwitchNormal:CreateTexture (nil, "artwork") - t:SetTexture ("Interface\\AddOns\\Details_EncounterDetails\\images\\boss_frame_buttons") - t:SetTexCoord (0, 0.1015625, 0, 0.515625) - t:SetWidth (26) - t:SetHeight (33) - t:SetAllPoints (BossFrame.buttonSwitchNormal) + local BUTTON_WIDTH = 80 + local BUTTON_HEIGHT = 20 + + BossFrame.buttonSwitchNormal = _detalhes.gump:CreateButton (BossFrame, BossFrame.switch, BUTTON_WIDTH, BUTTON_HEIGHT, "Summary", "main") + BossFrame.buttonSwitchNormal:SetPoint ("TOPLEFT", BossFrame, "TOPLEFT", 300, -38) + BossFrame.buttonSwitchNormal:SetIcon ("Interface\\AddOns\\Details_EncounterDetails\\images\\boss_frame_buttons", 18, 18, "overlay", {0, 0.1015625, 0, 0.515625}) + BossFrame.buttonSwitchNormal:SetTemplate (PhaseButtonTemplate) + --chart - BossFrame.buttonSwitchGraphic = DetailsFrameWork:NewDetailsButton (BossFrame, BossFrame, _, BossFrame.switch, "graph", nil, 26, 33) + BossFrame.buttonSwitchGraphic = _detalhes.gump:CreateButton (BossFrame, BossFrame.switch, BUTTON_WIDTH, BUTTON_HEIGHT, "Charts", "graph") BossFrame.buttonSwitchGraphic:SetPoint ("left", BossFrame.buttonSwitchNormal, "right", 0, 0) - local g = BossFrame.buttonSwitchGraphic:CreateTexture (nil, "artwork") - g:SetTexture ("Interface\\AddOns\\Details_EncounterDetails\\images\\boss_frame_buttons") - g:SetTexCoord (0.1171875, 0.21875, 0, 0.515625) - g:SetWidth (26) - g:SetHeight (33) - g:SetAllPoints (BossFrame.buttonSwitchGraphic) + BossFrame.buttonSwitchGraphic:SetIcon ("Interface\\AddOns\\Details_EncounterDetails\\images\\boss_frame_buttons", 18, 18, "overlay", {0.1171875, 0.21875, 0, 0.515625}) + BossFrame.buttonSwitchGraphic:SetTemplate (PhaseButtonTemplate) + --emotes - BossFrame.buttonSwitchBossEmotes = DetailsFrameWork:NewButton (BossFrame, nil, "EncounterDetailsBossEmoteButton", nil, 26, 33, BossFrame.switch, "emotes") + BossFrame.buttonSwitchBossEmotes = _detalhes.gump:CreateButton (BossFrame, BossFrame.switch, BUTTON_WIDTH, BUTTON_HEIGHT, "Emotes", "emotes") BossFrame.buttonSwitchBossEmotes:SetPoint ("left", BossFrame.buttonSwitchGraphic, "right", 0, 0) - local e = BossFrame.buttonSwitchBossEmotes:CreateTexture (nil, "artwork") - e:SetTexture ("Interface\\AddOns\\Details_EncounterDetails\\images\\boss_frame_buttons") - e:SetTexCoord (90/256, 116/256, 0, 0.515625) - e:SetWidth (26) - e:SetHeight (33) - e:SetAllPoints (BossFrame.buttonSwitchBossEmotes.widget) + BossFrame.buttonSwitchBossEmotes:SetIcon ("Interface\\AddOns\\Details_EncounterDetails\\images\\boss_frame_buttons", 18, 18, "overlay", {90/256, 116/256, 0, 0.515625}) + BossFrame.buttonSwitchBossEmotes:SetTemplate (PhaseButtonTemplate) + --spells e auras - BossFrame.buttonSwitchSpellsAuras = DetailsFrameWork:NewButton (BossFrame, nil, "EncounterDetailsBossSpellAuraButton", nil, 26, 33, BossFrame.switch, "spellsauras") + BossFrame.buttonSwitchSpellsAuras = _detalhes.gump:CreateButton (BossFrame, BossFrame.switch, BUTTON_WIDTH, BUTTON_HEIGHT, "WeakAuras", "spellsauras") BossFrame.buttonSwitchSpellsAuras:SetPoint ("left", BossFrame.buttonSwitchBossEmotes, "right", 0, 0) - local aa = BossFrame.buttonSwitchSpellsAuras:CreateTexture (nil, "artwork") - aa:SetTexture ("Interface\\AddOns\\Details_EncounterDetails\\images\\boss_frame_buttons") - aa:SetTexCoord (120/256, 146/256, 0, 0.515625) - aa:SetWidth (26) - aa:SetHeight (33) - aa:SetAllPoints() + BossFrame.buttonSwitchSpellsAuras:SetIcon ("Interface\\AddOns\\Details_EncounterDetails\\images\\boss_frame_buttons", 18, 18, "overlay", {120/256, 146/256, 0, 0.515625}) + BossFrame.buttonSwitchSpellsAuras:SetTemplate (PhaseButtonTemplate) - --> tutorial frame - function EncounterDetails:ButtonsTutorial() - - local tutorial_frame = CreateFrame ("frame", nil, BossFrame) - tutorial_frame:SetFrameStrata ("FULLSCREEN") - tutorial_frame:SetPoint ("topleft", t, "topleft") - tutorial_frame:SetPoint ("bottomright", aa, "bottomright") - - local plugin_icon_alert = CreateFrame ("frame", "EncounterDetailsPopUp2", tutorial_frame, "DetailsHelpBoxTemplate") - plugin_icon_alert.ArrowUP:Show() - plugin_icon_alert.ArrowGlowUP:Show() - plugin_icon_alert.Text:SetText ("Select here, the module you want to see:") - plugin_icon_alert:SetPoint ("bottom", tutorial_frame, "top", 0, 30) - plugin_icon_alert:Show() + --phases + BossFrame.buttonSwitchPhases = _detalhes.gump:CreateButton (BossFrame, BossFrame.switch, BUTTON_WIDTH, BUTTON_HEIGHT, "Phases", "phases") + BossFrame.buttonSwitchPhases:SetPoint ("left", BossFrame.buttonSwitchSpellsAuras, "right", 0, 0) + --BossFrame.buttonSwitchPhases:SetIcon ([[Interface\AdventureMap\AdventureMap]], 18, 18, "overlay", {801/1024, 845/1024, 249/1024, 291/1024}) + BossFrame.buttonSwitchPhases:SetIcon ("Interface\\AddOns\\Details_EncounterDetails\\images\\boss_frame_buttons", 18, 18, "overlay", {150/256, 176/256, 0, 0.515625}) + BossFrame.buttonSwitchPhases:SetTemplate (PhaseButtonTemplate) + - end - - u = BossFrame.buttonSwitchGraphic:CreateTexture (nil, "overlay") - u:SetTexture ("Interface\\AddOns\\Details_EncounterDetails\\images\\boss_frame_buttons") - u:SetTexCoord (0.8984375, 1, 0, 0.515625) - u:SetWidth (26) - u:SetHeight (33) - u:SetAllPoints (BossFrame.buttonSwitchNormal) - - selected = BossFrame.buttonSwitchGraphic:CreateTexture (nil, "overlay") - selected:SetColorTexture (1, 1, 1, .1) - selected:SetWidth (22) - selected:SetHeight (28) - selected:SetPoint ("center", BossFrame.buttonSwitchNormal, "center", 0, 0) - - --mode label - local support_frame = CreateFrame ("frame", nil, BossFrame) - support_frame:SetPoint ("topleft", BossFrame.buttonSwitchSpellsAuras.widget, "topright", 0, -1) - support_frame:SetPoint ("bottomright", BossFrame, "bottomright", -9, 6) - support_frame:SetBackdrop ({bgFile = [[Interface\AddOns\Details\images\background]], tile = true, tileSize = 16}) - support_frame:SetBackdropColor (1, 1, 1, 0.3) - - mode_label = DetailsFrameWork:CreateLabel (support_frame, "Summary", 13, color, "GameFontNormal") - mode_label:SetPoint ("center", support_frame, "center") - - local left = support_frame:CreateTexture (nil, "overlay") - left:SetTexture ([[Interface\TALENTFRAME\talent-main]]) - left:SetTexCoord (0.13671875, 0.25, 0.486328125, 0.576171875) - left:SetPoint ("left", support_frame, 0, 0) - left:SetWidth (10) - left:SetHeight (support_frame:GetHeight()) - - local right = support_frame:CreateTexture (nil, "overlay") - right:SetTexture ([[Interface\TALENTFRAME\talent-main]]) - right:SetTexCoord (0.01953125, 0.13671875, 0.486328125, 0.576171875) - right:SetPoint ("right", support_frame, 0, 0) - right:SetWidth (10) - right:SetHeight (support_frame:GetHeight()) --tooltips BossFrame.buttonSwitchNormal.MouseOnEnterHook = function() @@ -1328,7 +1336,6 @@ do GameCooltip:AddLine (Loc ["STRING_FIGHT_SUMMARY"], nil, nil, "orange", nil, 12) GameCooltip:SetWallpaper (1, [[Interface\SPELLBOOK\Spellbook-Page-1]], {.6, 0.1, 0, 0.64453125}, {1, 1, 1, 0.1}, true) GameCooltip:ShowCooltip (BossFrame.buttonSwitchNormal, "tooltip") - t:SetBlendMode ("ADD") end BossFrame.buttonSwitchNormal.MouseOnLeaveHook = function() _detalhes.popup:ShowMe (false); t:SetBlendMode ("BLEND") end -- @@ -1337,7 +1344,6 @@ do GameCooltip:AddLine (Loc ["STRING_FIGHT_GRAPHIC"], nil, nil, "orange", nil, 12) GameCooltip:SetWallpaper (1, [[Interface\SPELLBOOK\Spellbook-Page-1]], {.6, 0.1, 0, 0.64453125}, {1, 1, 1, 0.1}, true) GameCooltip:ShowCooltip (BossFrame.buttonSwitchGraphic, "tooltip") - g:SetBlendMode ("ADD") end BossFrame.buttonSwitchGraphic.MouseOnLeaveHook = function() _detalhes.popup:ShowMe (false); g:SetBlendMode ("BLEND") end -- @@ -1346,11 +1352,9 @@ do GameCooltip:AddLine (Loc ["STRING_FIGHT_EMOTES"], nil, nil, "orange", nil, 12) GameCooltip:SetWallpaper (1, [[Interface\SPELLBOOK\Spellbook-Page-1]], {.6, 0.1, 0, 0.64453125}, {1, 1, 1, 0.1}, true) GameCooltip:ShowCooltip (BossFrame.buttonSwitchBossEmotes, "tooltip") - e:SetBlendMode ("ADD") end) BossFrame.buttonSwitchBossEmotes:SetHook ("OnLeave", function() _detalhes.popup:ShowMe (false); - e:SetBlendMode ("BLEND") end) -- BossFrame.buttonSwitchSpellsAuras:SetHook ("OnEnter", function() @@ -1358,11 +1362,9 @@ do GameCooltip:AddLine (Loc ["STRING_FIGHT_SPELLS"], nil, nil, "orange", nil, 12) GameCooltip:SetWallpaper (1, [[Interface\SPELLBOOK\Spellbook-Page-1]], {.6, 0.1, 0, 0.64453125}, {1, 1, 1, 0.1}, true) GameCooltip:ShowCooltip (BossFrame.buttonSwitchSpellsAuras, "tooltip") - aa:SetBlendMode ("ADD") end) BossFrame.buttonSwitchSpellsAuras:SetHook ("OnLeave", function() _detalhes.popup:ShowMe (false); - aa:SetBlendMode ("BLEND") end) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -1405,7 +1407,7 @@ do end if (emote_pool) then - for bar_index = 1, 16 do + for bar_index = 1, 26 do local data = emote_pool [bar_index + offset] local bar = emote_lines [bar_index] @@ -1426,14 +1428,15 @@ do bar.righttext:SetTextColor (color_table.r, color_table.g, color_table.b) bar.icon:SetTexture ([[Interface\CHARACTERFRAME\UI-StateIcon]]) bar.icon:SetTexCoord (0, 0.5, 0.5, 1) + bar.icon:SetBlendMode ("ADD") else bar:Hide() end end - FauxScrollFrame_Update (self, #emote_pool, 16, 15) + FauxScrollFrame_Update (self, #emote_pool, 26, 15) else - for bar_index = 1, 16 do + for bar_index = 1, 26 do local bar = emote_lines [bar_index] bar:Hide() end @@ -1441,8 +1444,9 @@ do end BossFrame.EmoteWidgets = {} + --~emotes ~whispers - local bar_div_emotes = DetailsFrameWork:CreateImage (BossFrame, "Interface\\AddOns\\Details_EncounterDetails\\images\\boss_bg", 4, 240, "artwork", {724/1024, 728/1024, 0, 245/512}) + local bar_div_emotes = DetailsFrameWork:CreateImage (BossFrame, "Interface\\AddOns\\Details_EncounterDetails\\images\\boss_bg", 4, 390, "artwork", {724/1024, 728/1024, 0, 245/512}) bar_div_emotes:SetPoint ("TOPLEFT", BossFrame, "TOPLEFT", 244, -74) bar_div_emotes:Hide() tinsert (BossFrame.EmoteWidgets, bar_div_emotes) @@ -1453,6 +1457,8 @@ do scrollframe:SetPoint ("bottomright", BossFrame, "bottomright", -33, 42) scrollframe.Update = refresh_emotes scrollframe:Hide() + _detalhes.gump:ReskinSlider (scrollframe, 3) + -- tinsert (BossFrame.EmoteWidgets, scrollframe) @@ -1500,7 +1506,7 @@ do EncounterDetails:SendReportWindow (reportFunc) end - for i = 1, 16 do + for i = 1, 26 do local line = CreateFrame ("frame", nil, BossFrame) local y = (i-1) * 15 * -1 line:SetPoint ("topleft", scrollframe, "topleft", 0, y) @@ -1515,12 +1521,12 @@ do line.lefttext = line:CreateFontString (nil, "overlay", "GameFontHighlightSmall") line.lefttext:SetPoint ("left", line.icon, "right", 2, 0) - line.lefttext:SetWidth (line:GetWidth() - 22) + line.lefttext:SetWidth (line:GetWidth() - 26) line.lefttext:SetHeight (14) line.lefttext:SetJustifyH ("left") line.righttext = line:CreateFontString (nil, "overlay", "GameFontHighlightSmall") - line.righttext:SetPoint ("left", line.icon, "right", 42, 0) + line.righttext:SetPoint ("left", line.icon, "right", 46, 0) line.righttext:SetWidth (line:GetWidth() - 60) line.righttext:SetHeight (14) line.righttext:SetJustifyH ("left") @@ -1536,8 +1542,8 @@ do end --select emote segment - local emotes_segment_label = DetailsFrameWork:CreateLabel (BossFrame, "Emote Segment:", 11, nil, "GameFontHighlightSmall") - emotes_segment_label:SetPoint ("topleft", BossFrame, "topleft", 25, -85) + local emotes_segment_label = DetailsFrameWork:CreateLabel (BossFrame, "Segment:", 11, nil, "GameFontHighlightSmall") + emotes_segment_label:SetPoint ("topleft", BossFrame, "topleft", 10, -85) local on_emote_Segment_select = function (_, _, segment) FauxScrollFrame_SetOffset (scrollframe, 0) @@ -1571,12 +1577,13 @@ do --search box local emotes_search_label = DetailsFrameWork:CreateLabel (BossFrame, "Search:", 11, nil, "GameFontHighlightSmall") - emotes_search_label:SetPoint ("topleft", BossFrame, "topleft", 25, -130) + emotes_search_label:SetPoint ("topleft", BossFrame, "topleft", 10, -130) local emotes_search_results_label = DetailsFrameWork:CreateLabel (BossFrame, "", 11, nil, "GameFontNormal", "SearchResults") - emotes_search_results_label:SetPoint ("topleft", BossFrame, "topleft", 25, -180) + emotes_search_results_label:SetPoint ("topleft", BossFrame, "topleft", 10, -190) -- local search = DetailsFrameWork:NewTextEntry (BossFrame, nil, "$parentEmoteSearchBox", nil, 160, 20) + search:SetTemplate (PhaseButtonTemplate) search:SetPoint ("topleft",emotes_search_label, "bottomleft", -1, -2) search:SetJustifyH ("left") @@ -1610,7 +1617,7 @@ do tinsert (BossFrame.EmoteWidgets, emotes_search_label) -- report button - local report_emote_button = DetailsFrameWork:NewButton (BossFrame, nil, "$parentReportEmoteButton", "ReportEmoteButton", 120, 20, function() + local report_emote_button = DetailsFrameWork:NewButton (BossFrame, nil, "$parentReportEmoteButton", "ReportEmoteButton", 160, 16, function() local reportFunc = function (IsCurrent, IsReverse, AmtLines) local segment = EncounterDetails.charsaved.emotes and EncounterDetails.charsaved.emotes [emote_segment] @@ -1659,12 +1666,12 @@ do local use_slider = true EncounterDetails:SendReportWindow (reportFunc, nil, nil, use_slider) - end, nil, nil, nil, "Report Lines") + end, nil, nil, nil, "Report Results") - report_emote_button:SetIcon ([[Interface\AddOns\Details\images\report_button]], 8, 16, nil, {0, 1, 0, 1}, nil, nil, 2) + report_emote_button:SetIcon ([[Interface\AddOns\Details\images\report_button]], 8, 14, nil, {0, 1, 0, 1}, nil, 4, 2) + report_emote_button:SetTemplate (PhaseButtonTemplate) - report_emote_button:SetPoint ("topleft", BossFrame.SearchResults, "bottomleft", 0, -2) - report_emote_button:InstallCustomTexture() + report_emote_button:SetPoint ("topleft", search, "bottomleft", 0, -2) report_emote_button:Disable() tinsert (BossFrame.EmoteWidgets, report_emote_button) @@ -1676,23 +1683,21 @@ do end local emote_report_label = DetailsFrameWork:NewLabel (search.widget, search.widget, nil, "report_click", "|cFFffb400Left Click|r: Report Line") - emote_report_label:SetPoint ("topleft", search.widget, "bottomleft", 1, -141) - - --window title - DetailsFrameWork:NewLabel (BossFrame, BossFrame, nil, "titulo", Loc ["STRING_WINDOW_TITLE"], "GameFontHighlightLeft", 12, {227/255, 186/255, 4/255}) - BossFrame.titulo:SetPoint ("center", BossFrame, "center") - BossFrame.titulo:SetPoint ("top", BossFrame, "top", 0, -18) + emote_report_label:SetPoint ("topleft", search.widget, "bottomleft", 1, -61) + ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - +--> auras weakauras + + BossFrame.EnemySpellsWidgets = {} - --> spells and auras ~auras ~spell + --> spells and auras ~auras ~spell ~weakaura ãura -- actor dropdown - local EnemyActorSpells_label = DetailsFrameWork:CreateLabel (BossFrame, "Enemy Actor:", 11, nil, "GameFontHighlightSmall") - EnemyActorSpells_label:SetPoint ("topleft", BossFrame, "topleft", 25, -85) + local EnemyActorSpells_label = DetailsFrameWork:CreateLabel (BossFrame, "Enemy Unit:", 11, nil, "GameFontHighlightSmall") + EnemyActorSpells_label:SetPoint ("topleft", BossFrame, "topleft", 10, -85) local spell_blocks = {} @@ -1705,15 +1710,20 @@ do end local on_enter_spell = function (self) + if (self.MyObject._spellid) then + GameTooltip:SetOwner (self, "ANCHOR_TOPLEFT") + GameTooltip:SetSpellByID (self.MyObject._spellid) + GameTooltip:Show() - GameTooltip:SetOwner (self, "ANCHOR_TOPLEFT") - GameTooltip:SetSpellByID (self.MyObject._spellid) - GameTooltip:Show() - + self:SetBackdropColor (1, 1, 1, .5) + self:SetBackdropBorderColor (0, 0, 0, 1) + return true + end end local on_leave_spell = function (self, capsule) GameTooltip:Hide() + self:SetBackdropColor (.3, .3, .3, .5) end local create_aura_func = function (self, button, spellid, encounter_id) @@ -1741,15 +1751,15 @@ do end GameCooltip:ShowCooltip (self, "tooltip") end - - self:SetBackdropColor (0.6, 0.6, 0.6, 0.5) + + self:SetBackdropColor (1, 1, 1, .5) end local info_onleave = function (self) GameCooltip:Hide() - self:SetBackdropColor (0, 0, 0, 0.5) + self:SetBackdropColor (.3, .3, .3, .5) end - for i = 1, 10 do + for i = 1, 18 do local anchor_frame = CreateFrame ("frame", "BossFrameSpellAnchor" .. i, BossFrame) local icon_button_func = function (texture) @@ -1761,12 +1771,14 @@ do spellicon_button:InstallCustomTexture() local spellid = DetailsFrameWork:CreateTextEntry (anchor_frame, EncounterDetails.empty_function, 60, 20) + spellid:SetTemplate (PhaseButtonTemplate) spellid:SetHook ("OnEditFocusGained", on_focus_gain) spellid:SetHook ("OnEditFocusLost", on_focus_lost) spellid:SetHook ("OnEnter", on_enter_spell) spellid:SetHook ("OnLeave", on_leave_spell) local spellname = DetailsFrameWork:CreateTextEntry (anchor_frame, EncounterDetails.empty_function, 140, 20) + spellname:SetTemplate (PhaseButtonTemplate) spellname:SetHook ("OnEditFocusGained", on_focus_gain) spellname:SetHook ("OnEditFocusLost", on_focus_lost) spellname:SetHook ("OnEnter", on_enter_spell) @@ -1778,8 +1790,10 @@ do spellname:SetPoint ("left", spellid, "right", 4, 0) local spellinfo = CreateFrame ("frame", nil, anchor_frame) - spellinfo:SetBackdrop ({bgFile = [[Interface\AddOns\Details\images\background]], tileSize = 64, edgeFile = [[Interface\AddOns\Details\images\border_2]], edgeSize = 12, insets = {left = 1, right = 1, top = 1, bottom = 1}}) - spellinfo:SetBackdropColor (0, 0, 0, 0.5) + spellinfo:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true}) + spellinfo:SetBackdropColor (.3, .3, .3, .5) + spellinfo:SetBackdropBorderColor (0, 0, 0, 1) + spellinfo:SetSize (60, 20) spellinfo:SetScript ("OnEnter", info_onenter) spellinfo:SetScript ("OnLeave", info_onleave) @@ -1791,7 +1805,7 @@ do local create_aura = DetailsFrameWork:NewButton (anchor_frame, nil, "$parentCreateAuraButton", "AuraButton", 105, 18, create_aura_func, nil, nil, nil, "Create Aura") create_aura:SetPoint ("left", spellinfo, "right", 4, 0) - create_aura:InstallCustomTexture() + create_aura:SetTemplate (PhaseButtonTemplate) anchor_frame.icon = spellicon anchor_frame.spellid = spellid @@ -1856,7 +1870,7 @@ do local encounter_id = EncounterDetails_SpellAurasScroll.encounter_id local offset = FauxScrollFrame_GetOffset (self) - for bar_index = 1, 10 do + for bar_index = 1, 18 do local data = pool [bar_index + offset] local bar = spell_blocks [bar_index] @@ -1876,8 +1890,8 @@ do bar.spellid:SetBackdropBorderColor (0, 1, 0) bar.spellname:SetBackdropBorderColor (0, 1, 0) else - bar.spellid:SetBackdropBorderColor (1, 1, 1) - bar.spellname:SetBackdropBorderColor (1, 1, 1) + bar.spellid:SetBackdropBorderColor (0, 0, 0) + bar.spellname:SetBackdropBorderColor (0, 0, 0) end bar.aurabutton:SetClickFunction (create_aura_func, data [1], encounter_id) @@ -1887,7 +1901,7 @@ do end end - FauxScrollFrame_Update (self, #pool, 10, 20) + FauxScrollFrame_Update (self, #pool, 18, 20) end @@ -1931,13 +1945,13 @@ do EnemyActorSpells:Hide() EnemyActorSpells_label:Hide() - local bar_div = DetailsFrameWork:CreateImage (BossFrame, "Interface\\AddOns\\Details_EncounterDetails\\images\\boss_bg", 4, 240, "artwork", {724/1024, 728/1024, 0, 245/512}) + local bar_div = DetailsFrameWork:CreateImage (BossFrame, "Interface\\AddOns\\Details_EncounterDetails\\images\\boss_bg", 4, 390, "artwork", {724/1024, 728/1024, 0, 245/512}) bar_div:SetPoint ("TOPLEFT", BossFrame, "TOPLEFT", 244, -74) bar_div:Hide() local npc_id = DetailsFrameWork:CreateLabel (BossFrame, "NpcID:", 11, nil, "GameFontHighlightSmall") BossFrame.aura_npc_id = npc_id - npc_id:SetPoint ("topleft", BossFrame, "topleft", 25, -130) + npc_id:SetPoint ("topleft", BossFrame, "topleft", 10, -130) npc_id:Hide() local npc_id2 = DetailsFrameWork:CreateLabel (BossFrame, "", 11, nil, "GameFontHighlightSmall") BossFrame.aura_npc_id2 = npc_id2 @@ -1946,9 +1960,9 @@ do -- local label_dbm_bars = DetailsFrameWork:CreateLabel (BossFrame, "DBM Bars:", 11, nil, "GameFontHighlightSmall") - label_dbm_bars:SetPoint ("topleft", BossFrame, "topleft", 25, -160) + label_dbm_bars:SetPoint ("topleft", BossFrame, "topleft", 10, -160) local label_bw_bars = DetailsFrameWork:CreateLabel (BossFrame, "Big Wigs Bars:", 11, nil, "GameFontHighlightSmall") - label_bw_bars:SetPoint ("topleft", BossFrame, "topleft", 25, -205) + label_bw_bars:SetPoint ("topleft", BossFrame, "topleft", 10, -205) BossFrame.label_dbm_bars = label_dbm_bars BossFrame.label_bw_bars = label_bw_bars @@ -2047,8 +2061,424 @@ do tinsert (BossFrame.EnemySpellsWidgets, npc_id) tinsert (BossFrame.EnemySpellsWidgets, npc_id2) +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +-- ~phases +local PhaseFrame = CreateFrame ("frame", "EncounterDetailsPhaseFrame", BossFrame) +PhaseFrame:SetAllPoints() +PhaseFrame:SetFrameLevel (BossFrame:GetFrameLevel()+1) +PhaseFrame.DamageTable = {} +PhaseFrame.HealingTable = {} +PhaseFrame.LastPhaseSelected = 1 +PhaseFrame.CurrentSegment = {} +PhaseFrame.PhaseButtons = {} +EncounterDetailsPhaseFrame:Hide() + +local ScrollWidth, ScrollHeight, ScrollLineAmount, ScrollLineHeight = 200, 310, 15, 20 +local PhasesY = -88 +local AnchorY = -120 + +PhaseFrame:SetScript ("OnShow", function() + PhaseFrame.OnSelectPhase (1) +end) + +function PhaseFrame:ClearAll() + --disable all buttons + for i = 1, #PhaseFrame.PhaseButtons do + PhaseFrame.PhaseButtons[i]:SetTemplate (PhaseButtonTemplate) + PhaseFrame.PhaseButtons[i]:Disable() + end + --update damage and healing scrolls + table.wipe (PhaseFrame.DamageTable) + table.wipe (PhaseFrame.HealingTable) + + --refresh the scroll + PhaseFrame.Damage_Scroll:Refresh() + PhaseFrame.Heal_Scroll:Refresh() + + --clear phase bars + PhaseFrame:ClearPhaseBars() +end + +local selectSegment = function (_, _, phaseSelected) + PhaseFrame ["OnSelectPhase"] (phaseSelected) +end + +function PhaseFrame.OnSelectPhase (phaseSelected) + + PhaseFrame:ClearAll() + + --get the selected segment + PhaseFrame.CurrentSegment = EncounterDetails:GetCombat (EncounterDetails._segment) + if (not PhaseFrame.CurrentSegment) then + return + end + + --get the heal and damage for phase selected + local phaseData = PhaseFrame.CurrentSegment.PhaseData + if (not phaseData) then + return + end + + phaseSelected = phaseSelected or PhaseFrame.LastPhaseSelected + PhaseFrame.LastPhaseSelected = phaseSelected + + local phases = PhaseFrame:GetPhaseTimers (PhaseFrame.CurrentSegment, true) + for buttonIndex, phase in ipairs (phases) do + local button = PhaseFrame.PhaseButtons [buttonIndex] + if (phase == phaseSelected) then + button:SetTemplate (PhaseButtonTemplateHighlight) + else + button:SetTemplate (PhaseButtonTemplate) + if (PhaseFrame.CurrentSegment.PhaseData.damage [phase]) then + button:Enable() + else + button:Disable() + end + end + button:SetText (phase) + button:SetClickFunction (selectSegment, phase) + end + + if (not phaseData.damage [phaseSelected]) then + PhaseFrame:ClearAll() + return + end + + --update damage and healing scrolls + table.wipe (PhaseFrame.DamageTable) + for charName, amount in pairs (phaseData.damage [phaseSelected]) do + tinsert (PhaseFrame.DamageTable, {charName, amount}) + end + table.sort (PhaseFrame.DamageTable, function(a, b) return a[2] > b[2] end) + table.wipe (PhaseFrame.HealingTable) + for charName, amount in pairs (phaseData.heal [phaseSelected]) do + tinsert (PhaseFrame.HealingTable, {charName, amount}) + end + table.sort (PhaseFrame.HealingTable, function(a, b) return a[2] > b[2] end) + + --refresh the scroll + PhaseFrame.Damage_Scroll:Refresh() + PhaseFrame.Heal_Scroll:Refresh() + + PhaseFrame:UpdatePhaseBars() +end + +local PhaseSelectLabel = _detalhes.gump:CreateLabel (PhaseFrame, "Select Phase:", 12, "orange") +local DamageLabel = _detalhes.gump:CreateLabel (PhaseFrame, "Damage Done") +local HealLabel = _detalhes.gump:CreateLabel (PhaseFrame, "Healing Done") +local PhaseTimersLabel = _detalhes.gump:CreateLabel (PhaseFrame, "Phase Timers") + +local report_damage = function (IsCurrent, IsReverse, AmtLines) + local result = {} + local reportFunc = function (IsCurrent, IsReverse, AmtLines) + AmtLines = AmtLines + 1 + if (#result > AmtLines) then + for i = #result, AmtLines+1, -1 do + tremove (result, i) + end + end + EncounterDetails:SendReportLines (result) + end + + tinsert (result, "Details!: Damage for Phase " .. PhaseFrame.LastPhaseSelected .. " of " .. (PhaseFrame.CurrentSegment and PhaseFrame.CurrentSegment.is_boss and PhaseFrame.CurrentSegment.is_boss.name or "Unknown") .. ":") + for i = 1, #PhaseFrame.DamageTable do + tinsert (result, EncounterDetails:GetOnlyName (PhaseFrame.DamageTable[i][1]) .. ": " .. _detalhes:ToK (_math_floor (PhaseFrame.DamageTable [i][2]))) + end + + EncounterDetails:SendReportWindow (reportFunc, nil, nil, true) +end + +local Report_DamageButton = _detalhes.gump:CreateButton (PhaseFrame, report_damage, 16, 16, "report") +Report_DamageButton:SetPoint ("left", DamageLabel, "left", ScrollWidth-44, 0) +Report_DamageButton.textcolor = "gray" +Report_DamageButton.textsize = 9 + +local report_healing = function() + local result = {} + local reportFunc = function (IsCurrent, IsReverse, AmtLines) + AmtLines = AmtLines + 1 + if (#result > AmtLines) then + for i = #result, AmtLines+1, -1 do + tremove (result, i) + end + end + EncounterDetails:SendReportLines (result) + end + + tinsert (result, "Details!: Healing for Phase " .. PhaseFrame.LastPhaseSelected .. " of " .. (PhaseFrame.CurrentSegment and PhaseFrame.CurrentSegment.is_boss and PhaseFrame.CurrentSegment.is_boss.name or "Unknown") .. ":") + for i = 1, #PhaseFrame.HealingTable do + tinsert (result, EncounterDetails:GetOnlyName (PhaseFrame.HealingTable[i][1]) .. ": " .. _detalhes:ToK (_math_floor (PhaseFrame.HealingTable [i][2]))) + end + + EncounterDetails:SendReportWindow (reportFunc, nil, nil, true) +end +local Report_HealingButton = _detalhes.gump:CreateButton (PhaseFrame, report_healing, 16, 16, "report") +Report_HealingButton:SetPoint ("left", HealLabel, "left", ScrollWidth-44, 0) +Report_HealingButton.textcolor = "gray" +Report_HealingButton.textsize = 9 + + +PhaseSelectLabel:SetPoint ("topleft", PhaseFrame, "topleft", 10, PhasesY) + +DamageLabel:SetPoint ("topleft", PhaseFrame, "topleft", 10, AnchorY) +HealLabel:SetPoint ("topleft", PhaseFrame, "topleft", ScrollWidth + 40, AnchorY) +PhaseTimersLabel:SetPoint ("topleft", PhaseFrame, "topleft", (ScrollWidth * 2) + (40*2), AnchorY) + +for i = 1, 10 do + local button = _detalhes.gump:CreateButton (PhaseFrame, PhaseFrame.OnSelectPhase, 60, 20, "", i) + button:SetPoint ("left", PhaseSelectLabel, "right", 8 + ((i-1) * 61), 0) + tinsert (PhaseFrame.PhaseButtons, button) +end + +local ScrollRefresh = function (self, data, offset, total_lines) + local ToK = _detalhes.ToKFunctions [_detalhes.ps_abbreviation] + local RemoveRealm = _detalhes.GetOnlyName + for i = 1, ScrollLineAmount do + local index = i + offset + local player = data [index] + if (player) then + local line = self:GetLine (i) + local texture, L, R, T, B = _detalhes:GetPlayerIcon (player[1], PhaseFrame.CurrentSegment) + + line.icon:SetTexture (texture) + line.icon:SetTexCoord (L, R, T, B) + line.name:SetText (RemoveRealm (_, player[1])) + line.done:SetText (ToK (_, player[2])) + end + end +end + +local line_onenter = function (self) + self:SetBackdropColor (unpack (BGColorDefault_Hover)) +end + +local line_onleave = function (self) + self:SetBackdropColor (unpack (BGColorDefault)) +end + + +local ScrollCreateLine = function (self, index) + local line = CreateFrame ("button", "$parentLine" .. index, self) + line:SetPoint ("topleft", self, "topleft", 0, -((index-1)*(ScrollLineHeight+1))) + line:SetSize (ScrollWidth, ScrollLineHeight) + line:SetScript ("OnEnter", line_onenter) + line:SetScript ("OnLeave", line_onleave) + line:SetScript ("OnClick", line_onclick) + + line:SetBackdrop ({bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true}) + line:SetBackdropColor (unpack (BGColorDefault)) + + local icon = line:CreateTexture ("$parentIcon", "overlay") + icon:SetSize (ScrollLineHeight, ScrollLineHeight) + local name = line:CreateFontString ("$parentName", "overlay", "GameFontNormal") + _detalhes.gump:SetFontSize (name, 9) + icon:SetPoint ("left", line, "left", 2, 0) + name:SetPoint ("left", icon, "right", 2, 0) + _detalhes.gump:SetFontColor (name, "white") + local done = line:CreateFontString ("$parentDone", "overlay", "GameFontNormal") + _detalhes.gump:SetFontSize (done, 9) + done:SetPoint ("right", line, "right", -2, 0) + line.icon = icon + line.name = name + line.done = done + name:SetHeight (10) + name:SetJustifyH ("left") + return line +end + +local Damage_Scroll = _detalhes.gump:CreateScrollBox (PhaseFrame, "$parentDamageScroll", ScrollRefresh, PhaseFrame.DamageTable, ScrollWidth, ScrollHeight, ScrollLineAmount, ScrollLineHeight) +local Heal_Scroll = _detalhes.gump:CreateScrollBox (PhaseFrame, "$parentHealScroll", ScrollRefresh, PhaseFrame.HealingTable, ScrollWidth, ScrollHeight, ScrollLineAmount, ScrollLineHeight) + +Damage_Scroll:SetPoint ("topleft", DamageLabel.widget, "bottomleft", 0, -4) +Heal_Scroll:SetPoint ("topleft", HealLabel.widget, "bottomleft", 0, -4) + +_detalhes.gump:ReskinSlider (Damage_Scroll, 4) +_detalhes.gump:ReskinSlider (Heal_Scroll, 4) + +for i = 1, ScrollLineAmount do + Damage_Scroll:CreateLine (ScrollCreateLine) +end +PhaseFrame.Damage_Scroll = Damage_Scroll +Damage_Scroll:SetBackdrop ({bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 16}) +Damage_Scroll:SetBackdropColor (0, 0, 0, .4) + +for i = 1, ScrollLineAmount do + Heal_Scroll:CreateLine (ScrollCreateLine) +end +PhaseFrame.Heal_Scroll = Heal_Scroll +Heal_Scroll:SetBackdrop ({bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 16}) +Heal_Scroll:SetBackdropColor (0, 0, 0, .4) + + +---------------------------------------------------------- + +PhaseFrame.PhasesBars = {} +PhaseFrame.PhasesSegmentCompare = {} + +local PhaseBarOnEnter = function (self) + PhaseFrame:UpdateSegmentCompareBars (self.phase) + self:SetBackdropColor (unpack (BGColorDefault_Hover)) +end +local PhaseBarOnLeave = function (self) + PhaseFrame:ClearSegmentCompareBars() + self:SetBackdropColor (unpack (BGColorDefault)) +end +local PhaseBarOnClick = function (self) + --report +end + +for i = 1, 10 do + local line = CreateFrame ("button", "$parentPhaseBar" .. i, PhaseFrame) + line:SetPoint ("topleft", PhaseTimersLabel.widget, "bottomleft", 0, -((i-1)*(31)) - 4) + line:SetSize (ScrollWidth, 30) + line:SetScript ("OnEnter", PhaseBarOnEnter) + line:SetScript ("OnLeave", PhaseBarOnLeave) + line:SetScript ("OnClick", PhaseBarOnClick) + + line:SetBackdrop ({bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true}) + line:SetBackdropColor (unpack (BGColorDefault)) + + local icon = line:CreateTexture ("$parentIcon", "overlay") + icon:SetSize (16, 16) + icon:SetTexture ([[Interface\AddOns\Details\images\clock]]) + local name = line:CreateFontString ("$parentName", "overlay", "GameFontNormal") + _detalhes.gump:SetFontSize (name, 10) + local done = line:CreateFontString ("$parentDone", "overlay", "GameFontNormal") + _detalhes.gump:SetFontSize (done, 10) + + icon:SetPoint ("left", line, "left", 2, 0) + name:SetPoint ("left", icon, "right", 2, 0) + done:SetPoint ("right", line, "right", -2, 0) + + line.icon = icon + line.name = name + line.done = done + name:SetHeight (10) + name:SetJustifyH ("left") + + tinsert (PhaseFrame.PhasesBars, line) +end + +--cria a linha do segmento para a compara ção, é o que fica na parte direita da tela +--ele é acessado para mostrar quando passar o mouse sobre uma das barras de phase +for i = 1, 20 do + local line = CreateFrame ("button", "$parentSegmentCompareBar" .. i, PhaseFrame) + line:SetPoint ("topleft", PhaseTimersLabel.widget, "bottomleft", ScrollWidth+10, -((i-1)*(ScrollLineHeight+1)) - 4) + line:SetSize (ScrollWidth, ScrollLineHeight) + + line:SetBackdrop ({bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true}) + line:SetBackdropColor (unpack (BGColorDefault)) + line:Hide() + local name = line:CreateFontString ("$parentName", "overlay", "GameFontNormal") + _detalhes.gump:SetFontSize (name, 9) + name:SetPoint ("left", line, "left", 2, 0) + + local done = line:CreateFontString ("$parentDone", "overlay", "GameFontNormal") + _detalhes.gump:SetFontSize (done, 9) + done:SetPoint ("right", line, "right", -2, 0) + + line.name = name + line.done = done + name:SetHeight (10) + name:SetJustifyH ("left") + + tinsert (PhaseFrame.PhasesSegmentCompare, line) +end + +function PhaseFrame:ClearPhaseBars() + for i = 1, #PhaseFrame.PhasesBars do + local bar = PhaseFrame.PhasesBars[i] + bar.name:SetText ("") + bar.done:SetText ("") + bar.phase = nil + bar:Hide() + end +end +function PhaseFrame:ClearSegmentCompareBars() + for i = 1, #PhaseFrame.PhasesSegmentCompare do + PhaseFrame.PhasesSegmentCompare[i]:Hide() + end +end + +function PhaseFrame:GetPhaseTimers (segment, ordered) + local t = {} + + segment = segment or PhaseFrame.CurrentSegment + + for phaseIT = 1, #segment.PhaseData do + local phase, startAt = unpack (segment.PhaseData [phaseIT]) --phase iterator + local endAt = segment.PhaseData [phaseIT+1] and segment.PhaseData [phaseIT+1][2] or segment:GetCombatTime() + local elapsed = endAt - startAt + t [phase] = (t [phase] or 0) + elapsed + end + + if (ordered) then + local order = {} + for phase, _ in pairs (t) do + tinsert (order, phase) + end + table.sort (order, function (a, b) return a < b end) + return order, t + end + + return t +end + +--executa quando atualizar o segment geral +function PhaseFrame:UpdatePhaseBars() + local timers, hash = PhaseFrame:GetPhaseTimers (PhaseFrame.CurrentSegment, true) + local i = 1 + 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].phase = phase + PhaseFrame.PhasesBars [i]:Show() + i = i + 1 + end +end + +--executa quando passar o mouse sobre uma bnarra de phase +function PhaseFrame:UpdateSegmentCompareBars (phase) + --segmento atual (numero) + local segmentNumber = EncounterDetails._segment + local segmentTable = PhaseFrame.CurrentSegment + local bossID = segmentTable:GetBossInfo() and segmentTable:GetBossInfo().id + + local index = 1 + for i, segment in ipairs (_detalhes:GetCombatSegments()) do + if (segment:GetBossInfo() and segment:GetBossInfo().id == bossID) then + + local bar = PhaseFrame.PhasesSegmentCompare [index] + local timers = PhaseFrame:GetPhaseTimers (segment) + + if (timers [phase]) then + if (segment ~= segmentTable) then + bar.name:SetText ("Segment " .. i .. ":") + _detalhes.gump:SetFontColor (bar.name, "orange") + 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])) + _detalhes.gump:SetFontColor (bar.done, "white") + end + else + bar.name:SetText ("Segment " .. i .. ":") + _detalhes.gump:SetFontColor (bar.name, "red") + bar.done:SetText ("--x--x--") + end + + bar:Show() + index = index + 1 + end + end + +end + ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ local frame = BossFrame @@ -2068,14 +2498,6 @@ do local backdrop = {edgeFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 16, edgeSize = 1, insets = {left = 1, right = 1, top = 0, bottom = 1}} - --> Nome do Encontro - DetailsFrameWork:NewLabel (frame, frame, nil, "boss_name", "Unknown Encounter", "QuestFont_Large") - frame.boss_name:SetPoint ("TOPLEFT", frame, "TOPLEFT", 100, -51) - - --> Nome da Raid - DetailsFrameWork:NewLabel (frame, frame, nil, "raid_name", "Unknown Raid", "GameFontHighlightSmall") - frame.raid_name:SetPoint ("CENTER", frame.boss_name, "CENTER", 0, 14) - --> Selecionar o segmento local buildSegmentosMenu = function (self) @@ -2095,10 +2517,10 @@ do local segmentos_string = DetailsFrameWork:NewLabel (frame, nil, nil, "segmentosString", "Segment:", "GameFontNormal", 12) segmentos_string:SetPoint ("bottomleft", frame, "bottomleft", 20, 16) + -- ~dropdown local segmentos = DetailsFrameWork:NewDropDown (frame, _, "$parentSegmentsDropdown", "segmentosDropdown", 160, 18, buildSegmentosMenu, nil) segmentos:SetPoint ("left", segmentos_string, "right", 2, 0) - local options = DetailsFrameWork:NewButton (frame, nil, "$parentOptionsButton", "OptionsButton", 86, 16, EncounterDetails.OpenOptionsPanel, nil, nil, nil, "Options") options:SetPoint ("left", segmentos, "right", 7, -1) options:SetTextColor (1, 0.93, 0.74) @@ -2106,38 +2528,33 @@ do --> Caixa do Dano total tomado pela Raid + -- ~containers ~frontpage ~damagetaken + local BOX_WIDTH = 250 + local BOX_HEIGHT = 170 + local BOX_HEIGHT_UPPER = 175 + local container_damagetaken_window = CreateFrame ("ScrollFrame", "Details_Boss_ContainerDamageTaken", frame) + set_backdrop (container_damagetaken_window) + local container_damagetaken_frame = CreateFrame ("Frame", "Details_Boss_FrameDamageTaken", container_damagetaken_window) frame.Widgets [#frame.Widgets+1] = container_damagetaken_window container_damagetaken_frame:SetScript ("OnMouseDown", mouse_down) container_damagetaken_frame:SetScript ("OnMouseUp", mouse_up) - container_damagetaken_frame.barras = {} --label titulo & background local dano_recebido_bg = CreateFrame ("Frame", nil, frame) - dano_recebido_bg:SetWidth (200) + dano_recebido_bg:SetWidth (BOX_WIDTH) dano_recebido_bg:SetHeight (16) dano_recebido_bg:EnableMouse (true) dano_recebido_bg:SetResizable (false) - dano_recebido_bg:SetPoint ("topleft", frame, "topleft", 20, -76) + dano_recebido_bg:SetPoint ("topleft", frame, "topleft", 10, -78) frame.Widgets [#frame.Widgets+1] = dano_recebido_bg - dano_recebido_bg.textura = dano_recebido_bg:CreateTexture (nil, "overlay") - dano_recebido_bg.textura:SetPoint ("topleft", dano_recebido_bg, "topleft", 0, 2) - dano_recebido_bg.textura:SetTexture ("Interface\\AddOns\\Details_EncounterDetails\\images\\boss_bg") - dano_recebido_bg.textura:SetTexCoord (19/1024, 217/1024, 74/512, 90/512) - dano_recebido_bg.textura:SetSize (198, 16) - dano_recebido_bg.textura:SetBlendMode ("ADD") - dano_recebido_bg.textura:Hide() - - dano_recebido_bg:SetScript ("OnEnter", function(self) self.textura:Show() end) - dano_recebido_bg:SetScript ("OnLeave", function(self) self.textura:Hide() end) - - DetailsFrameWork:NewLabel (dano_recebido_bg, dano_recebido_bg, nil, "damagetaken_title", Loc ["STRING_DAMAGE_AT"], "GameFontHighlightSmall") + DetailsFrameWork:NewLabel (dano_recebido_bg, dano_recebido_bg, nil, "damagetaken_title", "Damage Taken per Player", "GameFontHighlightSmall") --localize-me dano_recebido_bg.damagetaken_title:SetPoint ("BOTTOMLEFT", container_damagetaken_window, "TOPLEFT", 5, 3) --container_damagetaken_window:SetBackdrop({edgeFile = "Interface\\DialogFrame\\UI-DialogBox-gold-Border", tile = true, tileSize = 16, edgeSize = 5, insets = {left = 1, right = 1, top = 0, bottom = 1},}) @@ -2148,22 +2565,23 @@ do container_damagetaken_frame:SetBackdropColor (0, 0, 0, 0.6) container_damagetaken_frame:SetAllPoints (container_damagetaken_window) - container_damagetaken_frame:SetWidth (200) - container_damagetaken_frame:SetHeight (100) + container_damagetaken_frame:SetWidth (BOX_WIDTH) + container_damagetaken_frame:SetHeight (BOX_HEIGHT) container_damagetaken_frame:EnableMouse (true) container_damagetaken_frame:SetResizable (false) container_damagetaken_frame:SetMovable (true) - container_damagetaken_window:SetWidth (200) - container_damagetaken_window:SetHeight (100) + container_damagetaken_window:SetWidth (BOX_WIDTH) + container_damagetaken_window:SetHeight (BOX_HEIGHT) container_damagetaken_window:SetScrollChild (container_damagetaken_frame) - container_damagetaken_window:SetPoint ("TOPLEFT", frame, "TOPLEFT", 20, -90) + container_damagetaken_window:SetPoint ("TOPLEFT", frame, "TOPLEFT", 10, -92) - DetailsFrameWork:NewScrollBar (container_damagetaken_window, container_damagetaken_frame, 4, -2) - container_damagetaken_window.slider:Altura (89) + DetailsFrameWork:NewScrollBar (container_damagetaken_window, container_damagetaken_frame, 4, -16) + container_damagetaken_window.slider:Altura (BOX_HEIGHT - 31) container_damagetaken_window.slider:cimaPoint (0, 1) container_damagetaken_window.slider:baixoPoint (0, -1) container_damagetaken_frame.slider = container_damagetaken_window.slider + _detalhes.gump:ReskinSlider (container_damagetaken_window) container_damagetaken_window.gump = container_damagetaken_frame container_damagetaken_frame.window = container_damagetaken_window @@ -2171,8 +2589,10 @@ do frame.overall_damagetaken = container_damagetaken_window --> Caixa das Habilidades do boss - + --~ability ~damage taken by spell local container_habilidades_window = CreateFrame ("ScrollFrame", "Details_Boss_ContainerHabilidades", frame) + set_backdrop (container_habilidades_window) + local container_habilidades_frame = CreateFrame ("Frame", "Details_Boss_FrameHabilidades", container_habilidades_window) container_habilidades_frame:SetScript ("OnMouseDown", mouse_down) @@ -2183,30 +2603,17 @@ do --label titulo % background local habilidades_inimigas_bg = CreateFrame ("Frame", nil, frame) - habilidades_inimigas_bg:SetWidth (200) + habilidades_inimigas_bg:SetWidth (BOX_WIDTH) habilidades_inimigas_bg:SetHeight (16) habilidades_inimigas_bg:EnableMouse (true) habilidades_inimigas_bg:SetResizable (false) - habilidades_inimigas_bg:SetPoint ("topleft", frame, "topleft", 20, -196) + habilidades_inimigas_bg:SetPoint ("topleft", frame, "topleft", 10, -276) frame.Widgets [#frame.Widgets+1] = habilidades_inimigas_bg frame.Widgets [#frame.Widgets+1] = container_habilidades_window frame.Widgets [#frame.Widgets+1] = container_habilidades_frame - habilidades_inimigas_bg.textura = habilidades_inimigas_bg:CreateTexture (nil, "overlay") - habilidades_inimigas_bg.textura:SetPoint ("topleft", habilidades_inimigas_bg, "topleft") - habilidades_inimigas_bg.textura:SetTexture ("Interface\\AddOns\\Details_EncounterDetails\\images\\boss_bg") - - habilidades_inimigas_bg.textura:SetTexCoord (19/1024, 217/1024, 195/512, 211/512) - habilidades_inimigas_bg.textura:SetSize (199, 16) - habilidades_inimigas_bg.textura:SetBlendMode ("ADD") - - habilidades_inimigas_bg.textura:Hide() - - habilidades_inimigas_bg:SetScript ("OnEnter", function(self) self.textura:Show() end) - habilidades_inimigas_bg:SetScript ("OnLeave", function(self) self.textura:Hide() end) - - DetailsFrameWork:NewLabel (habilidades_inimigas_bg, habilidades_inimigas_bg, nil, "habilidades_title", Loc ["STRING_INFLICTED_BY"], "GameFontHighlightSmall") + DetailsFrameWork:NewLabel (habilidades_inimigas_bg, habilidades_inimigas_bg, nil, "habilidades_title", "Damage Taken by Spell", "GameFontHighlightSmall") --localize-me habilidades_inimigas_bg.habilidades_title:SetPoint ("BOTTOMLEFT", container_habilidades_window, "TOPLEFT", 5, 3) --> container background @@ -2218,22 +2625,23 @@ do container_habilidades_frame:SetBackdropColor (0, 0, 0, 0.6) container_habilidades_frame:SetAllPoints (container_habilidades_window) - container_habilidades_frame:SetWidth (200) - container_habilidades_frame:SetHeight (100) + container_habilidades_frame:SetWidth (BOX_WIDTH) + container_habilidades_frame:SetHeight (BOX_HEIGHT) container_habilidades_frame:EnableMouse (true) container_habilidades_frame:SetResizable (false) container_habilidades_frame:SetMovable (true) - container_habilidades_window:SetWidth (200) - container_habilidades_window:SetHeight (100) + container_habilidades_window:SetWidth (BOX_WIDTH) + container_habilidades_window:SetHeight (BOX_HEIGHT) container_habilidades_window:SetScrollChild (container_habilidades_frame) - container_habilidades_window:SetPoint ("TOPLEFT", frame, "TOPLEFT", 20, -211) + container_habilidades_window:SetPoint ("TOPLEFT", frame, "TOPLEFT", 10, -286) - DetailsFrameWork:NewScrollBar (container_habilidades_window, container_habilidades_frame, 4, -2) - container_habilidades_window.slider:Altura (89) + DetailsFrameWork:NewScrollBar (container_habilidades_window, container_habilidades_frame, 4, -16) + container_habilidades_window.slider:Altura (BOX_HEIGHT-31) container_habilidades_window.slider:cimaPoint (0, 1) container_habilidades_window.slider:baixoPoint (0, -1) container_habilidades_frame.slider = container_habilidades_window.slider + _detalhes.gump:ReskinSlider (container_habilidades_window) container_habilidades_window.gump = container_habilidades_frame container_habilidades_frame.window = container_habilidades_window @@ -2242,71 +2650,44 @@ do --> Caixa dos Adds + -- ~adds ãdds + local BOX_WIDTH = 270 + local BOX_HEIGHT = 173 local container_adds_window = CreateFrame ("ScrollFrame", "Details_Boss_ContainerAdds", frame) - local container_adds_frame = CreateFrame ("Frame", "Details_Boss_FrameAdds", container_adds_window) - local mouseOver_adds_frame = CreateFrame ("Frame", "MouseOverDetails_Boss_FrameAdds", frame) + set_backdrop (container_adds_window) - frame.Widgets [#frame.Widgets+1] = mouseOver_adds_frame + local container_adds_frame = CreateFrame ("Frame", "Details_Boss_FrameAdds", container_adds_window) frame.Widgets [#frame.Widgets+1] = container_adds_frame frame.Widgets [#frame.Widgets+1] = container_adds_window - - mouseOver_adds_frame:SetPoint ("bottom", container_adds_window, "top") - mouseOver_adds_frame:SetPoint ("bottomleft", container_adds_window, "topleft", 0, 5) - mouseOver_adds_frame:SetPoint ("bottomright", container_adds_window, "topright", 20, 5) - mouseOver_adds_frame:SetHeight (50) - - mouseOver_adds_frame.imagem = mouseOver_adds_frame:CreateTexture (nil, "overlay") - mouseOver_adds_frame.imagem:SetPoint ("topright", mouseOver_adds_frame, "topright", -7, -9) - - mouseOver_adds_frame.imagem:SetTexture ("Interface\\AddOns\\Details_EncounterDetails\\images\\boss_icons") - mouseOver_adds_frame.imagem:SetTexCoord (0.52734375, 0.7421875, 0.03125, 0.3671875) - mouseOver_adds_frame.imagem:SetWidth (57) - mouseOver_adds_frame.imagem:SetHeight (44) - - mouseOver_adds_frame:SetScript ("OnEnter", - function() - if (EncounterDetails.db.opened < 30) then - _G.DetailsBubble:SetOwner (mouseOver_adds_frame.imagem, nil, nil, -45, -22) - _G.DetailsBubble:FlipHorizontal() - _G.DetailsBubble:SetBubbleText (Loc ["STRING_ADDS_HELP"]) - _G.DetailsBubble:ShowBubble() - end - mouseOver_adds_frame.imagem:SetTexCoord (0.7734375, 0.99609375, 0.03125, 0.3671875) - end) - mouseOver_adds_frame:SetScript ("OnLeave", - function() - _G.DetailsBubble:HideBubble() - mouseOver_adds_frame.imagem:SetTexCoord (0.52734375, 0.7421875, 0.03125, 0.3671875) - end) - - mouseOver_adds_frame:SetScript ("OnMouseDown", mouse_down) - mouseOver_adds_frame:SetScript ("OnMouseUp", mouse_up) - container_adds_frame:SetScript ("OnMouseDown", mouse_down) - container_adds_frame:SetScript ("OnMouseUp", mouse_up) - container_adds_frame.barras = {} + local adds_total_string = DetailsFrameWork:CreateLabel ( container_adds_window, "damage done") + adds_total_string.textcolor = "gray" + adds_total_string.textsize = 9 + adds_total_string:SetPoint ("bottomright", container_adds_window, "topright", 0, 3) + container_adds_frame:SetAllPoints (container_adds_window) - container_adds_frame:SetWidth (175) - container_adds_frame:SetHeight (90) + container_adds_frame:SetWidth (BOX_WIDTH) + container_adds_frame:SetHeight (BOX_HEIGHT) container_adds_frame:EnableMouse (true) container_adds_frame:SetResizable (false) container_adds_frame:SetMovable (true) - container_adds_window:SetWidth (175) - container_adds_window:SetHeight (88) + container_adds_window:SetWidth (BOX_WIDTH) + container_adds_window:SetHeight (BOX_HEIGHT_UPPER) container_adds_window:SetScrollChild (container_adds_frame) - container_adds_window:SetPoint ("TOPLEFT", frame, "TOPLEFT", 255, -113) + container_adds_window:SetPoint ("TOPLEFT", frame, "TOPLEFT", 290, -90) DetailsFrameWork:NewLabel (container_adds_window, container_adds_window, nil, "titulo", Loc ["STRING_ADDS"], "QuestFont_Large", 16, {1, 1, 1}) container_adds_window.titulo:SetPoint ("bottomleft", container_adds_window, "topleft", 0, 0) - DetailsFrameWork:NewScrollBar (container_adds_window, container_adds_frame, 4, -13) - container_adds_window.slider:Altura (65) + DetailsFrameWork:NewScrollBar (container_adds_window, container_adds_frame, 4, -16) + container_adds_window.slider:Altura (BOX_HEIGHT - 31) container_adds_window.slider:cimaPoint (0, 1) container_adds_window.slider:baixoPoint (0, -1) container_adds_frame.slider = container_adds_window.slider + _detalhes.gump:ReskinSlider (container_adds_window) container_adds_window.gump = container_adds_frame container_adds_frame.window = container_adds_window @@ -2314,70 +2695,46 @@ do frame.overall_adds = container_adds_window --> Caixa dos interrupts (kicks) - + -- ~interrupt local container_interrupt_window = CreateFrame ("ScrollFrame", "Details_Boss_Containerinterrupt", frame) + set_backdrop (container_interrupt_window) + local container_interrupt_frame = CreateFrame ("Frame", "Details_Boss_Frameinterrupt", container_interrupt_window) - local mouseOver_interrupt_frame = CreateFrame ("Frame", "MouseOverDetails_Boss_FrameInterrupt", frame) + + local interrupt_total_string = DetailsFrameWork:CreateLabel (container_interrupt_window, "interrupts / casts") + interrupt_total_string.textcolor = "gray" + interrupt_total_string.textsize = 9 + interrupt_total_string:SetPoint ("bottomright", container_interrupt_window, "topright", 0, 3) frame.Widgets [#frame.Widgets+1] = container_interrupt_window frame.Widgets [#frame.Widgets+1] = container_interrupt_frame - frame.Widgets [#frame.Widgets+1] = mouseOver_interrupt_frame - - mouseOver_interrupt_frame:SetPoint ("bottom", container_interrupt_window, "top") - mouseOver_interrupt_frame:SetPoint ("bottomleft", container_interrupt_window, "topleft", 0, 5) - mouseOver_interrupt_frame:SetPoint ("bottomright", container_interrupt_window, "topright", 20, 5) - mouseOver_interrupt_frame:SetHeight (50) - - mouseOver_interrupt_frame.imagem = mouseOver_interrupt_frame:CreateTexture (nil, "overlay") - mouseOver_interrupt_frame.imagem:SetPoint ("topright", mouseOver_interrupt_frame, "topright", 1, -25) - - mouseOver_interrupt_frame.imagem:SetTexture ("Interface\\AddOns\\Details_EncounterDetails\\images\\boss_icons") - mouseOver_interrupt_frame.imagem:SetTexCoord (0.6015625, 1, 0.734375, 0.9765625) - mouseOver_interrupt_frame.imagem:SetWidth (103*0.7) - mouseOver_interrupt_frame.imagem:SetHeight (34*0.7) - - mouseOver_interrupt_frame:SetScript ("OnEnter", - function() - if (EncounterDetails.db.opened < 30) then - _G.DetailsBubble:SetOwner (mouseOver_interrupt_frame.imagem, nil, nil, 40, -18) - _G.DetailsBubble:SetBubbleText (Loc ["STRING_INTERRIPT_HELP"]) - _G.DetailsBubble:ShowBubble() - end - mouseOver_interrupt_frame.imagem:SetTexCoord (0.6015625, 1, 0.4296875, 0.6953125) - end) - mouseOver_interrupt_frame:SetScript ("OnLeave", - function() - _G.DetailsBubble:HideBubble() - mouseOver_interrupt_frame.imagem:SetTexCoord (0.6015625, 1, 0.734375, 0.9765625) - end) - container_interrupt_frame:SetScript ("OnMouseDown", mouse_down) container_interrupt_frame:SetScript ("OnMouseUp", mouse_up) - mouseOver_interrupt_frame:SetScript ("OnMouseDown", mouse_down) - mouseOver_interrupt_frame:SetScript ("OnMouseUp", mouse_up) - container_interrupt_frame.barras = {} container_interrupt_frame:SetAllPoints (container_interrupt_window) - container_interrupt_frame:SetWidth (185) - container_interrupt_frame:SetHeight (67) + container_interrupt_frame:SetWidth (BOX_WIDTH) + container_interrupt_frame:SetHeight (BOX_HEIGHT) container_interrupt_frame:EnableMouse (true) container_interrupt_frame:SetResizable (false) container_interrupt_frame:SetMovable (true) - container_interrupt_window:SetWidth (185) - container_interrupt_window:SetHeight (65) + container_interrupt_window:SetWidth (BOX_WIDTH) + container_interrupt_window:SetHeight (BOX_HEIGHT_UPPER) container_interrupt_window:SetScrollChild (container_interrupt_frame) - container_interrupt_window:SetPoint ("TOPLEFT", frame, "TOPLEFT", 470, -234) + --container_interrupt_window:SetPoint ("TOPLEFT", frame, "TOPLEFT", 470, -234) + container_interrupt_window:SetPoint ("TOPLEFT", container_adds_window, "TOPRIGHT", 28, 0) DetailsFrameWork:NewLabel (container_interrupt_window, container_interrupt_window, nil, "titulo", Loc ["STRING_INTERRUPTS"], "QuestFont_Large", 16, {1, 1, 1}) container_interrupt_window.titulo:SetPoint ("bottomleft", container_interrupt_window, "topleft", 0, 3) - DetailsFrameWork:NewScrollBar (container_interrupt_window, container_interrupt_frame, -1, -8) - container_interrupt_window.slider:Altura (45) - container_interrupt_window.slider:cimaPoint (0, 0) - container_interrupt_window.slider:baixoPoint (0, -2) + DetailsFrameWork:NewScrollBar (container_interrupt_window, container_interrupt_frame, 4, -16) + container_interrupt_window.slider:Altura (BOX_HEIGHT-31) + container_interrupt_window.slider:cimaPoint (0, 1) + container_interrupt_window.slider:baixoPoint (0, -1) container_interrupt_frame.slider = container_interrupt_window.slider + _detalhes.gump:ReskinSlider (container_interrupt_window) + container_interrupt_window.gump = container_interrupt_frame container_interrupt_frame.window = container_interrupt_window @@ -2385,120 +2742,66 @@ do frame.overall_interrupt = container_interrupt_window --> Caixa dos Dispells - + -- ~dispel local container_dispell_window = CreateFrame ("ScrollFrame", "Details_Boss_Containerdispell", frame) + set_backdrop (container_dispell_window) + local container_dispell_frame = CreateFrame ("Frame", "Details_Boss_Framedispell", container_dispell_window) - local mouseOver_dispell_frame = CreateFrame ("Frame", "MouseOverDetails_Boss_FrameDispell", frame) + + local dispell_total_string = DetailsFrameWork:CreateLabel (container_dispell_window, "total dispels") + dispell_total_string.textcolor = "gray" + dispell_total_string.textsize = 9 + dispell_total_string:SetPoint ("bottomright", container_dispell_window, "topright", 0, 3) frame.Widgets [#frame.Widgets+1] = container_dispell_window frame.Widgets [#frame.Widgets+1] = container_dispell_frame - frame.Widgets [#frame.Widgets+1] = mouseOver_dispell_frame - - mouseOver_dispell_frame:SetPoint ("bottom", container_dispell_window, "top") - mouseOver_dispell_frame:SetPoint ("bottomleft", container_dispell_window, "topleft", 0, 5) - mouseOver_dispell_frame:SetPoint ("bottomright", container_dispell_window, "topright", 20, 5) - mouseOver_dispell_frame:SetHeight (30) - - mouseOver_dispell_frame.imagem = mouseOver_dispell_frame:CreateTexture (nil, "overlay") - mouseOver_dispell_frame.imagem:SetPoint ("topright", mouseOver_dispell_frame, "topright", -10, -10) - - mouseOver_dispell_frame.imagem:SetTexture ("Interface\\AddOns\\Details_EncounterDetails\\images\\boss_icons") - mouseOver_dispell_frame.imagem:SetTexCoord (0, 0.15625, 0.4140625, 0.71875) - mouseOver_dispell_frame.imagem:SetWidth (30) - mouseOver_dispell_frame.imagem:SetHeight (29) - - mouseOver_dispell_frame:SetScript ("OnEnter", - function() - if (EncounterDetails.db.opened < 30) then - _G.DetailsBubble:SetOwner (mouseOver_dispell_frame.imagem, nil, nil, -45, -22) - _G.DetailsBubble:FlipHorizontal() - _G.DetailsBubble:SetBubbleText (Loc ["STRING_DISPELL_HELP"]) - _G.DetailsBubble:ShowBubble() - end - mouseOver_dispell_frame.imagem:SetTexCoord (0.1796875, 0.3359375, 0.4140625, 0.71875) - end) - mouseOver_dispell_frame:SetScript ("OnLeave", - function() - _G.DetailsBubble:HideBubble() - mouseOver_dispell_frame.imagem:SetTexCoord (0, 0.15625, 0.4140625, 0.71875) - end) - container_dispell_frame:SetScript ("OnMouseDown", mouse_down) container_dispell_frame:SetScript ("OnMouseUp", mouse_up) - mouseOver_dispell_frame:SetScript ("OnMouseDown", mouse_down) - mouseOver_dispell_frame:SetScript ("OnMouseUp", mouse_up) - container_dispell_frame.barras = {} - + container_dispell_frame:SetAllPoints (container_dispell_window) - container_dispell_frame:SetWidth (190) - container_dispell_frame:SetHeight (62) + container_dispell_frame:SetWidth (BOX_WIDTH) + container_dispell_frame:SetHeight (BOX_HEIGHT) container_dispell_frame:EnableMouse (true) container_dispell_frame:SetResizable (false) container_dispell_frame:SetMovable (true) - container_dispell_window:SetWidth (190) - container_dispell_window:SetHeight (68) + container_dispell_window:SetWidth (BOX_WIDTH) + container_dispell_window:SetHeight (BOX_HEIGHT_UPPER) container_dispell_window:SetScrollChild (container_dispell_frame) - container_dispell_window:SetPoint ("TOPLEFT", frame, "TOPLEFT", 245, -231) + container_dispell_window:SetPoint ("TOPLEFT", container_adds_window, "BOTTOMLEFT", 0, -28) DetailsFrameWork:NewLabel (container_dispell_window, container_dispell_window, nil, "titulo", Loc ["STRING_DISPELLS"], "QuestFont_Large", 16, {1, 1, 1}) - container_dispell_window.titulo:SetPoint ("bottomleft", container_dispell_window, "topleft", 8, 0) + container_dispell_window.titulo:SetPoint ("bottomleft", container_dispell_window, "topleft", 0, 0) - DetailsFrameWork:NewScrollBar (container_dispell_window, container_dispell_frame, -1, -13) - container_dispell_window.slider:Altura (45) + DetailsFrameWork:NewScrollBar (container_dispell_window, container_dispell_frame, 4, -16) + container_dispell_window.slider:Altura (BOX_HEIGHT-31) container_dispell_window.slider:cimaPoint (0, 1) container_dispell_window.slider:baixoPoint (0, -1) container_dispell_frame.slider = container_dispell_window.slider - + _detalhes.gump:ReskinSlider (container_dispell_window) + container_dispell_window.gump = container_dispell_frame container_dispell_frame.window = container_dispell_window container_dispell_window.ultimo = 0 frame.overall_dispell = container_dispell_window --> Caixa das mortes - + -- ~mortes ~deaths ~dead local container_dead_window = CreateFrame ("ScrollFrame", "Details_Boss_ContainerDead", frame) + set_backdrop (container_dead_window) + local container_dead_frame = CreateFrame ("Frame", "Details_Boss_FrameDead", container_dead_window) - local mouseOver_dead_frame = CreateFrame ("Frame", "MouseOverDetails_Boss_FrameDead", frame) + + local dead_total_string = DetailsFrameWork:CreateLabel (container_dead_window, "time of death") + dead_total_string.textcolor = "gray" + dead_total_string.textsize = 9 + dead_total_string:SetPoint ("bottomright", container_dead_window, "topright", 0, 3) frame.Widgets [#frame.Widgets+1] = container_dead_window frame.Widgets [#frame.Widgets+1] = container_dead_frame - frame.Widgets [#frame.Widgets+1] = mouseOver_dead_frame - - mouseOver_dead_frame:SetPoint ("bottom", container_dead_window, "top") - mouseOver_dead_frame:SetPoint ("bottomleft", container_dead_window, "topleft", 0, 5) - mouseOver_dead_frame:SetPoint ("bottomright", container_dead_window, "topright", 20, 5) - mouseOver_dead_frame:SetHeight (50) - - mouseOver_dead_frame.imagem = mouseOver_dead_frame:CreateTexture (nil, "overlay") - mouseOver_dead_frame.imagem:SetPoint ("topright", mouseOver_dead_frame, "topright", -14, -14) - - mouseOver_dead_frame.imagem:SetTexture ("Interface\\AddOns\\Details_EncounterDetails\\images\\boss_icons") - mouseOver_dead_frame.imagem:SetTexCoord (0, 0.1640625, 0.03125, 0.34375) - mouseOver_dead_frame.imagem:SetWidth (42) - mouseOver_dead_frame.imagem:SetHeight (41) - - mouseOver_dead_frame:SetScript ("OnEnter", - function() - if (EncounterDetails.db.opened < 30) then - _G.DetailsBubble:SetOwner (mouseOver_dead_frame.imagem, nil, nil, 40, -18) - _G.DetailsBubble:SetBubbleText (Loc ["STRING_DEATHS_HELP"]) - _G.DetailsBubble:ShowBubble() - end - mouseOver_dead_frame.imagem:SetTexCoord (0.171875, 0.3359375, 0.03125, 0.34375) - end) - mouseOver_dead_frame:SetScript ("OnLeave", - function() - _G.DetailsBubble:HideBubble() - mouseOver_dead_frame.imagem:SetTexCoord (0, 0.1640625, 0.03125, 0.34375) - end) - container_dead_frame:SetScript ("OnMouseDown", mouse_down) container_dead_frame:SetScript ("OnMouseUp", mouse_up) - mouseOver_dead_frame:SetScript ("OnMouseDown", mouse_down) - mouseOver_dead_frame:SetScript ("OnMouseUp", mouse_up) - container_dead_frame.barras = {} container_dead_frame:SetPoint ("left", container_dead_window, "left") @@ -2506,43 +2809,34 @@ do container_dead_frame:SetPoint ("top", container_dead_window, "top") container_dead_frame:SetPoint ("bottom", container_dead_window, "bottom", 0, 10) - container_dead_frame:SetWidth (178) - container_dead_frame:SetHeight (89) - + container_dead_frame:SetWidth (BOX_WIDTH) + container_dead_frame:SetHeight (BOX_HEIGHT) + container_dead_frame:EnableMouse (true) container_dead_frame:SetResizable (false) container_dead_frame:SetMovable (true) - container_dead_window:SetWidth (178) - container_dead_window:SetHeight (88) + container_dead_window:SetWidth (BOX_WIDTH) + container_dead_window:SetHeight (BOX_HEIGHT_UPPER) container_dead_window:SetScrollChild (container_dead_frame) - container_dead_window:SetPoint ("TOPLEFT", frame, "TOPLEFT", 470, -113) + container_dead_window:SetPoint ("TOPLEFT", container_dispell_window, "TOPRIGHT", 28, 0) DetailsFrameWork:NewLabel (container_dead_window, container_dead_window, nil, "titulo", Loc ["STRING_DEATH_LOG"], "QuestFont_Large", 16, {1, 1, 1}) container_dead_window.titulo:SetPoint ("bottomleft", container_dead_window, "topleft", 0, 1) - DetailsFrameWork:NewScrollBar (container_dead_window, container_dead_frame, 6, -12) - container_dead_window.slider:Altura (65) + DetailsFrameWork:NewScrollBar (container_dead_window, container_dead_frame, 4, -16) + container_dead_window.slider:Altura (BOX_HEIGHT-31) container_dead_window.slider:cimaPoint (0, 1) container_dead_window.slider:baixoPoint (0, -1) container_dead_frame.slider = container_dead_window.slider + _detalhes.gump:ReskinSlider (container_dead_window) container_dead_window.gump = container_dead_frame container_dead_frame.window = container_dead_window container_dead_window.ultimo = 0 frame.overall_dead = container_dead_window - --> botão fechar - frame.fechar = CreateFrame ("Button", nil, frame, "UIPanelCloseButton") - frame.fechar:SetWidth (32) - frame.fechar:SetHeight (32) - frame.fechar:SetPoint ("TOPRIGHT", frame, "TOPRIGHT", 5, -8) - frame.fechar:SetText ("X") - frame.fechar:SetScript ("OnClick", function(self) - EncounterDetails:CloseWindow() - end) - frame.fechar:SetFrameLevel (frame:GetFrameLevel()+2) - + --emotes frame local emote_frame = CreateFrame ("frame", "DetailsEncountersEmoteFrame", UIParent) emote_frame:RegisterEvent ("CHAT_MSG_RAID_BOSS_EMOTE") diff --git a/plugins/Details_EncounterDetails/images/boss_frame_buttons.tga b/plugins/Details_EncounterDetails/images/boss_frame_buttons.tga index f9e013b3abb8bdf547ce9aa628e865adcc596c52..84ee6735c0a943c6416117447d9be3d568837659 100644 GIT binary patch literal 20064 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 literal 20210 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 mXK_iFt9cjcSxY*G|D|2Y!bRDO^NRE47lxPS