diff --git a/Details.toc b/Details.toc index 3556c99e..d89ef965 100644 --- a/Details.toc +++ b/Details.toc @@ -14,6 +14,8 @@ locales\Details-enUS.lua boot.lua core\util.lua +functions\hooks.lua +functions\skins.lua functions\boss.lua functions\spells.lua functions\events.lua diff --git a/boot.lua b/boot.lua index 219a1191..cee84316 100644 --- a/boot.lua +++ b/boot.lua @@ -2,15 +2,15 @@ --Last Modification: 27/07/2013 -- Change Log: -- 27/07/2013: Finished alpha version. - + ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --> global name declaration _ = nil _detalhes = LibStub("AceAddon-3.0"):NewAddon("_detalhes", "AceTimer-3.0", "AceComm-3.0", "AceSerializer-3.0", "NickTag-1.0") - _detalhes.userversion = "v1.6.7" - _detalhes.version = "Alpha 010" - _detalhes.realversion = 10 + _detalhes.userversion = "v1.7.0" + _detalhes.version = "Alpha 011" + _detalhes.realversion = 11 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --> initialization stuff @@ -60,31 +60,9 @@ do _detalhes.pets_ignored = {} _detalhes.pets_no_owner = {} --> armazena as skins disponíveis para as janelas - _detalhes.skins = {["Default Skin"] = {file = "default_skin", author = "Details!", version = "1.0", site = "unknown", desc = "default skin for Details!", can_change_alpha_head = false, icon_anchor_main = {-1, 1}, icon_anchor_plugins = {-9, -7}, icon_plugins_size = {19, 19}}} - _detalhes.skin_path = "Interface\\AddOns\\Details\\images\\skins\\" - - -- temporariamente aqui, precisa migrar para um arquivo separado - function _detalhes:InstallSkin (skin_name, skin_table) - if (not skin_name) then - return false -- sem nome - elseif (_detalhes.skins [skin_name]) then - return false -- ja existe - end - - if (not skin_table.file) then - return false -- sem arquivo - end - - skin_table.author = skin_table.author or "" - skin_table.version = skin_table.version or "" - skin_table.site = skin_table.site or "" - skin_table.desc = skin_table.desc or "" - - _detalhes.skins [skin_name] = skin_table - return true - end - - _detalhes:InstallSkin ("Flat Color", {file = "flat_skin", author = "Details!", version = "1.0", site = "unknown", desc = "a flat skin", can_change_alpha_head = true, icon_anchor_main = {-1, -5}, icon_anchor_plugins = {-7, -13}, icon_plugins_size = {19, 18}}) + _detalhes.skins = {} + --> armazena os hooks das funções do parser + _detalhes.hooks = {} --> Plugins --> raid ------------------------------------------------------------------- diff --git a/classes/classe_combate.lua b/classes/classe_combate.lua index c1c84563..af2a9690 100644 --- a/classes/classe_combate.lua +++ b/classes/classe_combate.lua @@ -207,6 +207,10 @@ function combate:UltimaAcao (tempo) end end +function combate:GetDate() + return self.data_inicio, self.data_fim +end + function combate:seta_data (tipo) if (tipo == _detalhes._detalhes_props.DATA_TYPE_START) then self.data_inicio = _date ("%H:%M:%S") diff --git a/classes/classe_damage.lua b/classes/classe_damage.lua index 1026cc74..0d6638d9 100644 --- a/classes/classe_damage.lua +++ b/classes/classe_damage.lua @@ -32,6 +32,7 @@ local container_habilidades = _detalhes.container_habilidades local container_combatentes = _detalhes.container_combatentes local container_pets = _detalhes.container_pets local atributo_damage = _detalhes.atributo_damage +local atributo_misc = _detalhes.atributo_misc local habilidade_dano = _detalhes.habilidade_dano local container_damage_target = _detalhes.container_type.CONTAINER_DAMAGETARGET_CLASS @@ -191,14 +192,6 @@ end for index, player in _ipairs (container) do if (_bit_band (player.flag_original, 0x00000040) ~= 0) then --> é um inimigo - - -- ele vai contar os inimigos com 0 tbm - - --if (player[keyName] < 1) then --> dano menor que 1, interromper o loop - -- amount = index - 1 - -- break - --end - total = total + player [keyName] else amount = index-1 @@ -367,17 +360,15 @@ function atributo_damage:AtualizarFrags (tabela, qual_barra, colocacao, instanci end --> ele nao come o texto quando a instância esta muito pequena - esta_barra.textura:SetVertexColor (_unpack (_detalhes.class_colors [tabela [3]])) - esta_barra.icone_classe:SetTexture ("Interface\\AddOns\\Details\\images\\classes_small") - if (tabela [3] == "UNKNOW" or tabela [3] == "UNGROUPPLAYER") then + if (tabela [3] == "UNKNOW" or tabela [3] == "UNGROUPPLAYER" or tabela [3] == "ENEMY") then esta_barra.icone_classe:SetTexture ("Interface\\LFGFRAME\\LFGROLE_BW") esta_barra.icone_classe:SetTexCoord (.25, .5, 0, 1) esta_barra.icone_classe:SetVertexColor (1, 1, 1) else esta_barra.icone_classe:SetTexture ("Interface\\AddOns\\Details\\images\\classes_small") - esta_barra.icone_classe:SetTexCoord (_unpack (_detalhes.class_coords [tabela [3]])) --very slow method + esta_barra.icone_classe:SetTexCoord (_unpack (_detalhes.class_coords [tabela [3]])) esta_barra.icone_classe:SetVertexColor (1, 1, 1) end @@ -387,7 +378,155 @@ function atributo_damage:AtualizarFrags (tabela, qual_barra, colocacao, instanci end +function atributo_damage:ReportSingleVoidZoneLine (actor, instancia) + local barra = instancia.barras [actor.minha_barra] + + local reportar = {"Details! " .. Loc ["STRING_ATTRIBUTE_DAMAGE_DEBUFFS_REPORT"] .. ": " .. actor.nome} --> localize-me + for i = 1, GameCooltip:GetNumLines() do + local texto_left, texto_right = GameCooltip:GetText (i) + if (texto_left and texto_right) then + texto_left = texto_left:gsub (("|T(.*)|t "), "") + reportar [#reportar+1] = ""..texto_left.." "..texto_right.."" + end + end + + return _detalhes:Reportar (reportar, {_no_current = true, _no_inverse = true, _custom = true}) +end + +function _detalhes:ToolTipVoidZones (instancia, actor, barra) + + local damage_actor = instancia.showing[1]:PegarCombatente (_, actor.damage_twin) + local habilidade + local alvos + + if (damage_actor) then + habilidade = damage_actor.spell_tables._ActorTable [actor.damage_spellid] + end + + if (habilidade) then + alvos = habilidade.targets + end + + local container = actor.debuff_uptime_targets._ActorTable + + for _, alvo in _ipairs (container) do + if (alvos) then + local damage_alvo = alvos._NameIndexTable [alvo.nome] + if (damage_alvo) then + damage_alvo = alvos._ActorTable [damage_alvo] + alvo.damage = damage_alvo.total + else + alvo.damage = 0 + end + else + alvo.damage = 0 + end + end + + --> sort no container: + _table_sort (container, function (tabela1, tabela2) + if (tabela1.damage > tabela2.damage) then + return true; + elseif (tabela1.damage == tabela2.damage) then + return tabela1.uptime > tabela2.uptime; + end + return false; + end) + + actor.debuff_uptime_targets:remapear() + + --> monta o cooltip + + local GameCooltip = GameCooltip + + GameCooltip:Reset() + GameCooltip:SetType ("tooltip") + GameCooltip:SetOwner (barra) + GameCooltip:SetOption ("LeftBorderSize", -5) + GameCooltip:SetOption ("RightBorderSize", 5) + GameCooltip:SetOption ("StatusBarTexture", [[Interface\WorldStateFrame\WORLDSTATEFINALSCORE-HIGHLIGHT]]) + + for _, alvo in _ipairs (container) do + + local minutos, segundos = _math_floor (alvo.uptime / 60), _math_floor (alvo.uptime % 60) + if (minutos > 0) then + GameCooltip:AddLine (alvo.nome, _detalhes:comma_value (alvo.damage) .. " (" .. minutos .. "m " .. segundos .. "s" .. ")") + else + GameCooltip:AddLine (alvo.nome, _detalhes:comma_value (alvo.damage) .. " (" .. segundos .. "s" .. ")") + end + + local classe = _detalhes:GetClass (alvo.nome) + if (classe) then + GameCooltip:AddIcon ([[Interface\AddOns\Details\images\classes_small]], nil, nil, 14, 14, unpack (_detalhes.class_coords [classe])) + else + GameCooltip:AddIcon ("Interface\\LFGFRAME\\LFGROLE_BW", nil, nil, 14, 14, .25, .5, 0, 1) + end + + GameCooltip:AddStatusBar (100, 1, .1, .1, .1, .3) + + end + + GameCooltip:AddLine (Loc ["STRING_REPORT_LEFTCLICK"], nil, 1, "white") + GameCooltip:AddIcon ([[Interface\TUTORIALFRAME\UI-TUTORIAL-FRAME]], 1, 1, 12, 16, 0.015625, 0.13671875, 0.4375, 0.59765625) + GameCooltip:ShowCooltip() + +end + +local function RefreshBarraVoidZone (tabela, barra, instancia) + tabela:AtualizarVoidZone (tabela.minha_barra, barra.colocacao, instancia) +end + +function atributo_misc:AtualizarVoidZone (qual_barra, colocacao, instancia) + + local esta_barra = instancia.barras [qual_barra] --> pega a referência da barra na janela + + if (not esta_barra) then + print ("DEBUG: problema com "..qual_barra.." "..lugar) + return + end + + self._refresh_window = RefreshBarraVoidZone + + local tabela_anterior = esta_barra.minha_tabela + + esta_barra.minha_tabela = self + + self.minha_barra = qual_barra + esta_barra.colocacao = colocacao + + esta_barra.texto_esquerdo:SetText (colocacao .. ". " .. self.nome) + esta_barra.texto_direita:SetText (self.debuff_uptime) + + --if (colocacao == 1) then + esta_barra.statusbar:SetValue (100) + --else + -- esta_barra.statusbar:SetValue (self.debuff_uptime / instancia.top * 100) + --end + + if (esta_barra.hidden or esta_barra.fading_in or esta_barra.faded) then + gump:Fade (esta_barra, "out") + end + + local _, _, icon = GetSpellInfo (self.damage_spellid) + local school_color = _detalhes.school_colors [self.spellschool] + if (not school_color) then + school_color = _detalhes.school_colors ["unknown"] + end + + esta_barra.textura:SetVertexColor (_unpack (school_color)) + esta_barra.icone_classe:SetTexture (icon) + esta_barra.icone_classe:SetTexCoord (0, 1, 0, 1) + esta_barra.icone_classe:SetVertexColor (1, 1, 1) + + if (esta_barra.mouse_over and not instancia.baseframe.isMoving) then --> precisa atualizar o tooltip + --gump:UpdateTooltip (qual_barra, esta_barra, instancia) + end + +end + local ntable = {} +local vtable = {} + function atributo_damage:RefreshWindow (instancia, tabela_do_combate, forcar, exportar) local showing = tabela_do_combate [class_type] --> o que esta sendo mostrado -> [1] - dano [2] - cura --> pega o container com ._NameIndexTable ._ActorTable @@ -426,6 +565,8 @@ function atributo_damage:RefreshWindow (instancia, tabela_do_combate, forcar, ex keyName = "frags" elseif (sub_atributo == 6) then --> ENEMIES keyName = "enemies" + elseif (sub_atributo == 7) then --> AURAS VOIDZONES + keyName = "voidzones" end else keyName = exportar.key @@ -447,6 +588,8 @@ function atributo_damage:RefreshWindow (instancia, tabela_do_combate, forcar, ex keyName = "frags" elseif (sub_atributo == 6) then --> ENEMIES keyName = "enemies" + elseif (sub_atributo == 7) then --> AURAS VOIDZONES + keyName = "voidzones" end end @@ -459,13 +602,16 @@ function atributo_damage:RefreshWindow (instancia, tabela_do_combate, forcar, ex index = index + 1 - local actor_classe = showing._NameIndexTable [fragName] --> get index - if (actor_classe) then - actor_classe = showing._ActorTable [actor_classe] --> get object - actor_classe = actor_classe.classe + local fragged_actor = showing._NameIndexTable [fragName] --> get index + local actor_classe + if (fragged_actor) then + fragged_actor = showing._ActorTable [fragged_actor] --> get object + actor_classe = fragged_actor.classe end - if (not actor_classe) then + if (fragged_actor and fragged_actor.monster) then + actor_classe = "ENEMY" + elseif (not actor_classe) then actor_classe = "UNGROUPPLAYER" end @@ -523,6 +669,69 @@ function atributo_damage:RefreshWindow (instancia, tabela_do_combate, forcar, ex return _detalhes:EndRefresh (instancia, total, tabela_do_combate, showing) --> retorna a tabela que precisa ganhar o refresh + elseif (keyName == "voidzones") then + + local index = 0 + local misc_container = tabela_do_combate [4] + + for _, actor in _ipairs (misc_container._ActorTable) do + if (actor.boss_debuff) then + + index = index + 1 + + local twin_damage_actor = showing._NameIndexTable [actor.damage_twin] + if (twin_damage_actor) then + twin_damage_actor = showing._ActorTable [twin_damage_actor] + actor.damage = twin_damage_actor.total + else + actor.damage = 0 + end + + vtable [index] = actor + + end + end + + local tsize = #vtable + if (index < tsize) then + for i = index+1, tsize do + vtable [i] = nil + end + end + + --print ("size: ", tsize) + + if (tsize > 0 and vtable[1]) then + _table_sort (vtable, function (t1, t2) + return t1.damage > t2.damage + end) + instancia.top = vtable [1].damage + end + total = index + + if (exportar) then + return vtable + end + + if (total < 1) then + instancia:EsconderScrollBar() + return _detalhes:EndRefresh (instancia, total, tabela_do_combate, showing) --> retorna a tabela que precisa ganhar o refresh + end + + --esta mostrando ALL então posso seguir o padrão correto? primeiro, atualiza a scroll bar... + instancia:AtualizarScrollBar (total) + + --depois faz a atualização normal dele através dos iterators + local qual_barra = 1 + local barras_container = instancia.barras + + for i = instancia.barraS[1], instancia.barraS[2], 1 do --> vai atualizar só o range que esta sendo mostrado + vtable[i]:AtualizarVoidZone (qual_barra, i, instancia) + qual_barra = qual_barra+1 + end + + return _detalhes:EndRefresh (instancia, total, tabela_do_combate, showing) --> retorna a tabela que precisa ganhar o refresh + else if (instancia.atributo == 5) then --> custom @@ -535,6 +744,7 @@ function atributo_damage:RefreshWindow (instancia, tabela_do_combate, forcar, ex elseif (keyName == "enemies") then amount, total = _detalhes:ContainerSortEnemies (conteudo, amount, "total") + --keyName = "enemies" --> grava o total instancia.top = conteudo[1][keyName] @@ -831,8 +1041,11 @@ function atributo_damage:AtualizaBarra (instancia, barras_container, qual_barra, forcar = true end + if (self.owner) then actor_class_color_r, actor_class_color_g, actor_class_color_b = _unpack (_detalhes.class_colors [self.owner.classe]) + elseif (self.monster) then + actor_class_color_r, actor_class_color_g, actor_class_color_b = _unpack (_detalhes.class_colors.ENEMY) else actor_class_color_r, actor_class_color_g, actor_class_color_b = _unpack (_detalhes.class_colors [self.classe]) end @@ -973,7 +1186,7 @@ end end if (instancia.row_texture_class_colors) then - esta_barra.textura:SetVertexColor (240/255, 0, 5/255, 1) + esta_barra.textura:SetVertexColor (0.94117, 0, 0.01960, 1) end else esta_barra.texto_esquerdo:SetText (esta_barra.colocacao..". "..self.displayName) --seta o texto da esqueda diff --git a/classes/classe_instancia.lua b/classes/classe_instancia.lua index 28b448e4..67235fc5 100644 --- a/classes/classe_instancia.lua +++ b/classes/classe_instancia.lua @@ -1241,6 +1241,7 @@ function _detalhes:TrocaTabela (instancia, segmento, atributo, sub_atributo, ini local atributo_changed = false --> verifica possiveis valores não passados + if (not segmento) then segmento = instancia.segmento end @@ -1548,7 +1549,7 @@ function _detalhes:ChangeIcon (icon) --> normal local half = 0.00048828125 local size = 0.03125 - self.baseframe.cabecalho.atributo_icon:SetTexture (_detalhes.skin_path .. skin.file) + self.baseframe.cabecalho.atributo_icon:SetTexture (skin.file) self.baseframe.cabecalho.atributo_icon:SetTexCoord ( (0.03125 * (self.atributo-1)) + half, (0.03125 * self.atributo) - half, 0.35693359375, 0.38720703125) local icon_anchor = skin.icon_anchor_main diff --git a/classes/classe_others.lua b/classes/classe_others.lua index 94c16494..710d8f00 100644 --- a/classes/classe_others.lua +++ b/classes/classe_others.lua @@ -224,7 +224,7 @@ function _detalhes:ToolTipDead (instancia, morte, esta_barra) if (battleress) then --_table_insert (linhas, 2, {{"Interface\\AddOns\\Details\\images\\small_icons", .75, 1, 0, 1}, morte [6] .. " Morreu", "-- -- -- ", 100, {75/255, 75/255, 75/255, 1}, {noglow = true}}) --> localize-me - GameCooltip:AddSpecial ("line", 2, nil, morte [6] .. " Morreu", "-- -- -- ", 1, "white") + GameCooltip:AddSpecial ("line", 2, nil, morte [6] .. " " .. Loc ["STRING_TIME_OF_DEATH"] , "-- -- -- ", 1, "white") GameCooltip:AddSpecial ("icon", 2, nil, "Interface\\AddOns\\Details\\images\\small_icons", 1, 1, nil, nil, .75, 1, 0, 1) GameCooltip:AddSpecial ("statusbar", 2, nil, 100, 1, "darkgray", false) else @@ -842,42 +842,46 @@ function atributo_misc:ToolTipCC (instancia, numero, barra) local meu_total = self ["cc_break"] local habilidades = self.cc_break_spell_tables._ActorTable ---> habilidade usada para dispelar - local meus_cc_breaks = {} + --> habilidade usada para tirar o CC + for _spellid, _tabela in _pairs (habilidades) do - meus_cc_breaks [#meus_cc_breaks+1] = {_spellid, _tabela.cc_break} - end - _table_sort (meus_cc_breaks, function(a, b) return a[2] > b[2] end) - - GameTooltip:AddLine (Loc ["STRING_SPELLS"]..":") - if (#meus_cc_breaks > 0) then - for i = 1, _math_min (3, #meus_cc_breaks) do - local esta_habilidade = meus_cc_breaks[i] - local nome_magia, _, icone_magia = _GetSpellInfo (esta_habilidade[1]) - GameCooltip:AddLine (nome_magia..": ", esta_habilidade[2].." (".._cstr("%.1f", esta_habilidade[2]/meu_total*100).."%)") - GameCooltip:AddIcon (icone_magia, nil, nil, 14, 14) + + --> quantidade + local nome_magia, _, icone_magia = _GetSpellInfo (_spellid) + GameCooltip:AddLine (nome_magia, _tabela.cc_break .. " (" .. _cstr ("%.1f", _tabela.cc_break / meu_total * 100) .. "%)") + GameCooltip:AddIcon (icone_magia, nil, nil, 14, 14) + GameCooltip:AddStatusBar (100, 1, r, g, b, barAlha) + + --> o que quebrou + local quebrou_oque = _tabela.cc_break_oque + for spellid_quebrada, amt_quebrada in _pairs (_tabela.cc_break_oque) do + local nome_magia, _, icone_magia = _GetSpellInfo (spellid_quebrada) + GameCooltip:AddLine (nome_magia..": ", amt_quebrada) + GameCooltip:AddIcon ([[Interface\Buttons\UI-GroupLoot-Pass-Down]], nil, 1, 14, 14) + GameCooltip:AddIcon (icone_magia, nil, 2, 14, 14) + GameCooltip:AddStatusBar (100, 1, 1, 0, 0, .2) end - else - GameTooltip:AddLine (Loc ["STRING_NO_SPELL"]) - end - ---> quais habilidades foram dispaladas - local buffs_dispelados = {} - for _spellid, amt in _pairs (self.cc_break_oque) do - buffs_dispelados [#buffs_dispelados+1] = {_spellid, amt} - end - _table_sort (buffs_dispelados, function(a, b) return a[2] > b[2] end) - - GameTooltip:AddLine (Loc ["STRING_CCBROKE"] .. ":") - if (#buffs_dispelados > 0) then - for i = 1, _math_min (3, #buffs_dispelados) do - local esta_habilidade = buffs_dispelados[i] - local nome_magia, _, icone_magia = _GetSpellInfo (esta_habilidade[1]) - GameCooltip:AddLine (nome_magia..": ", esta_habilidade[2].." (".._cstr("%.1f", esta_habilidade[2]/meu_total*100).."%)") - GameCooltip:AddIcon (icone_magia, nil, nil, 14, 14) + + --> em quem quebrou + --GameCooltip:AddLine (Loc ["STRING_TARGETS"] .. ":") + for _, target in _ipairs (_tabela.targets._ActorTable) do + + GameCooltip:AddLine (target.nome..": ", target.total) + + local classe = _detalhes:GetClass (target.nome) + GameCooltip:AddIcon ([[Interface\AddOns\Details\images\espadas]], nil, 1, 14, 14) + if (classe) then + GameCooltip:AddIcon ([[Interface\AddOns\Details\images\classes_small]], nil, 2, 14, 14, unpack (_detalhes.class_coords [classe])) + else + GameCooltip:AddIcon ("Interface\\LFGFRAME\\LFGROLE_BW", nil, 2, 14, 14, .25, .5, 0, 1) + end + + GameCooltip:AddStatusBar (100, 1, .1, .1, .1, .3) + end end + return true end @@ -1881,14 +1885,17 @@ local sub_list = {"cc_break", "ress", "interrupt", "cooldowns_defensive", "dispe local somar_alvos = function (container) for index, alvo in _ipairs (actor [container]._ActorTable) do --> cria e soma o valor do total - local alvo_shadow = shadow [container]:PegarCombatente (nil, alvo.nome, nil, true) - alvo_shadow.total = alvo_shadow.total + alvo.total - if (alvo.uptime) then --> boss debuff - alvo_shadow.uptime = alvo_shadow.uptime + alvo.uptime - alvo_shadow.activedamt = alvo_shadow.activedamt + alvo.activedamt - end + --if (shadow [container]) then -- index ?? a nil value + local alvo_shadow = shadow [container]:PegarCombatente (nil, alvo.nome, nil, true) + alvo_shadow.total = alvo_shadow.total + alvo.total + if (alvo.uptime) then --> boss debuff + alvo_shadow.uptime = alvo_shadow.uptime + alvo.uptime + alvo_shadow.activedamt = alvo_shadow.activedamt + alvo.activedamt + end + --end --> refresh no alvo _detalhes.refresh:r_alvo_da_habilidade (alvo, shadow [container]) + end end --> somar as habilidades do ator @@ -1941,9 +1948,6 @@ local sub_list = {"cc_break", "ress", "interrupt", "cooldowns_defensive", "dispe --> soma o total (captura de dados) shadow.debuff_uptime = shadow.debuff_uptime + actor.debuff_uptime --> copia o container de alvos (captura de dados) - if (actor.boss_debuff) then - actor.debuff_uptime_targets.tipo = _detalhes.container_type.CONTAINER_ENEMYDEBUFFTARGET_CLASS - end somar_alvos ("debuff_uptime_targets", shadow) --> copia o container de habilidades (captura de dados) somar_habilidades ("debuff_uptime_spell_tables", shadow) @@ -2117,10 +2121,19 @@ function _detalhes.refresh:r_atributo_misc (este_jogador, shadow) --> refresh buff uptime if (este_jogador.debuff_uptime_targets) then --> constrói os containers na shadow se não existir - if (not shadow.debuff_uptime_spell_targets) then + if (not shadow.debuff_uptime_targets) then shadow.debuff_uptime = 0 - shadow.debuff_uptime_spell_targets = container_combatentes:NovoContainer (container_damage_target) --> pode ser um container de alvo de dano, pois irá usar apenas o .total - shadow.debuff_uptime_spell_tables = container_habilidades:NovoContainer (_detalhes.container_type.CONTAINER_MISC_CLASS) --> cria o container das habilidades usadas para interromper + if (este_jogador.boss_debuff) then + shadow.debuff_uptime_targets = container_combatentes:NovoContainer (_detalhes.container_type.CONTAINER_ENEMYDEBUFFTARGET_CLASS) + shadow.boss_debuff = true + shadow.damage_twin = este_jogador.damage_twin + shadow.spellschool = este_jogador.spellschool + shadow.damage_spellid = este_jogador.damage_spellid + shadow.debuff_uptime = 0 + else + shadow.debuff_uptime_targets = container_combatentes:NovoContainer (container_damage_target) + end + shadow.debuff_uptime_spell_tables = container_habilidades:NovoContainer (_detalhes.container_type.CONTAINER_MISC_CLASS) end --> recupera metas e indexes _detalhes.refresh:r_container_combatentes (este_jogador.debuff_uptime_targets, shadow.debuff_uptime_targets) @@ -2324,9 +2337,19 @@ atributo_misc.__add = function (tabela1, tabela2) if (tabela2.debuff_uptime) then if (not tabela1.debuff_uptime) then + + if (tabela2.boss_debuff) then + tabela1.debuff_uptime_targets = container_combatentes:NovoContainer (_detalhes.container_type.CONTAINER_ENEMYDEBUFFTARGET_CLASS) + tabela1.boss_debuff = true + tabela1.damage_twin = tabela2.damage_twin + tabela1.spellschool = tabela2.spellschool + tabela1.damage_spellid = tabela2.damage_spellid + else + tabela1.debuff_uptime_targets = container_combatentes:NovoContainer (container_damage_target) + end + tabela1.debuff_uptime = 0 - tabela1.debuff_uptime_targets = container_combatentes:NovoContainer (container_damage_target) --> pode ser um container de alvo de dano, pois irá usar apenas o .total - tabela1.debuff_uptime_spell_tables = container_habilidades:NovoContainer (container_misc) --> cria o container das habilidades usadas + tabela1.debuff_uptime_spell_tables = container_habilidades:NovoContainer (container_misc) end tabela1.debuff_uptime = tabela1.debuff_uptime + tabela2.debuff_uptime diff --git a/classes/container_combatentes.lua b/classes/container_combatentes.lua index 65e3ab87..1c90692a 100644 --- a/classes/container_combatentes.lua +++ b/classes/container_combatentes.lua @@ -175,11 +175,18 @@ local read_flag_ = function (novo_objeto, shadow_objeto, dono_do_pet, serial, fl -- 0x00000060 --> inimigo neutro if (_bit_band (flag, 0x00000010) ~= 0) then --> é amigo details_flag = details_flag+0x00000010 + elseif (_bit_band (flag, 0x00000020) ~= 0) then --> é neutro details_flag = details_flag+0x00000020 --print ("neutro -> " .. nome) + elseif (_bit_band (flag, 0x00000040) ~= 0) then --> é inimigo + details_flag = details_flag+0x00000040 + + if (_bit_band (flag, 0x00000400) == 0 and _bit_band (flag, OBJECT_TYPE_PETGUARDIAN) == 0) then + novo_objeto.monster = true + end --print ("inimigos -> " .. nome) end else diff --git a/core/control.lua b/core/control.lua index 3a8a88c2..95cdad28 100644 --- a/core/control.lua +++ b/core/control.lua @@ -296,7 +296,7 @@ _detalhes:CatchRaidBuffUptime ("BUFF_UPTIME_OUT") _detalhes:CatchRaidDebuffUptime ("DEBUFF_UPTIME_OUT") - --_detalhes:CloseEnemyDebuffsUptime() + _detalhes:CloseEnemyDebuffsUptime() --> pega a zona do jogador e vê se foi uma luta contra um Boss -- identifica se a luta foi com um boss if (not _detalhes.tabela_vigente.is_boss) then @@ -764,6 +764,8 @@ return _detalhes:ToolTipDead (self, objeto, esta_barra) --> instância, [morte], barra elseif (objeto.frags) then return _detalhes:ToolTipFrags (self, objeto, esta_barra) + elseif (objeto.boss_debuff) then + return _detalhes:ToolTipVoidZones (self, objeto, esta_barra) end local t = objeto:ToolTip (self, qual_barra, esta_barra) --> instância, nº barra, objeto barra diff --git a/core/parser.lua b/core/parser.lua index c63056db..efef1327 100644 --- a/core/parser.lua +++ b/core/parser.lua @@ -101,6 +101,9 @@ local _recording_buffs_and_debuffs = false --> in combat shortcut local _in_combat = false + --> hooks + local _hook_cooldowns = false + local _hook_cooldowns_container = _detalhes.hooks ["HOOK_COOLDOWN"] @@ -671,7 +674,7 @@ --> BUFFS & DEBUFFS serach key: ~buff ~aura ~shield | ----------------------------------------------------------------------------------------------------------------------------------------- - function parser:buff (token, time, who_serial, who_name, who_flags, alvo_serial, alvo_name, alvo_flags, spellid, spellname, _, tipo, amount) + function parser:buff (token, time, who_serial, who_name, who_flags, alvo_serial, alvo_name, alvo_flags, spellid, spellname, spellschool, tipo, amount) --> not yet well know about unnamed buff casters if (not alvo_name) then @@ -746,8 +749,8 @@ --> call record debuffs uptime --[[not tail call, need to fix this]] parser:add_debuff_uptime (token, time, who_serial, who_name, who_flags, alvo_serial, alvo_name, alvo_flags, spellid, spellname, "DEBUFF_UPTIME_IN") - --elseif (raid_members_cache [alvo_serial] and _bit_band (who_flags, 0x00000040) ~= 0) then --> alvo é da raide e o caster é inimigo - --[[not tail call, need to fix this]] --parser:add_bad_debuff_uptime (token, time, who_serial, who_name, who_flags, alvo_serial, alvo_name, alvo_flags, spellid, spellname, "DEBUFF_UPTIME_IN") + elseif (raid_members_cache [alvo_serial] and not raid_members_cache [who_serial]) then --> alvo é da raide é alguem de fora da raide + --[[not tail call, need to fix this]] parser:add_bad_debuff_uptime (token, time, who_serial, who_name, who_flags, alvo_serial, alvo_name, alvo_flags, spellid, spellname, spellschool, "DEBUFF_UPTIME_IN") end end @@ -818,7 +821,7 @@ end end - function parser:buff_refresh (token, time, who_serial, who_name, who_flags, alvo_serial, alvo_name, alvo_flags, spellid, spellname, _, tipo, amount) + function parser:buff_refresh (token, time, who_serial, who_name, who_flags, alvo_serial, alvo_name, alvo_flags, spellid, spellname, spellschool, tipo, amount) ------------------------------------------------------------------------------------------------ --> handle shields @@ -890,8 +893,8 @@ if (raid_members_cache [who_serial]) then --> call record debuffs uptime --[[not tail call, need to fix this]] parser:add_debuff_uptime (token, time, who_serial, who_name, who_flags, alvo_serial, alvo_name, alvo_flags, spellid, spellname, "DEBUFF_UPTIME_REFRESH") - --elseif (raid_members_cache [alvo_serial] and _bit_band (who_flags, 0x00000040) ~= 0) then --> alvo é da raide e o caster é inimigo - --[[not tail call, need to fix this]] --parser:add_bad_debuff_uptime (token, time, who_serial, who_name, who_flags, alvo_serial, alvo_name, alvo_flags, spellid, spellname, "DEBUFF_UPTIME_REFRESH") + elseif (raid_members_cache [alvo_serial] and not raid_members_cache [who_serial]) then --> alvo é da raide e o caster é inimigo + --[[not tail call, need to fix this]] parser:add_bad_debuff_uptime (token, time, who_serial, who_name, who_flags, alvo_serial, alvo_name, alvo_flags, spellid, spellname, spellschool, "DEBUFF_UPTIME_REFRESH") end end @@ -947,7 +950,7 @@ end end - function parser:unbuff (token, time, who_serial, who_name, who_flags, alvo_serial, alvo_name, alvo_flags, spellid, spellname, _, tipo, amount) + function parser:unbuff (token, time, who_serial, who_name, who_flags, alvo_serial, alvo_name, alvo_flags, spellid, spellname, spellschool, tipo, amount) ------------------------------------------------------------------------------------------------ --> handle shields @@ -1013,8 +1016,8 @@ if (raid_members_cache [who_serial]) then --> call record debuffs uptime --[[not tail call, need to fix this]] parser:add_debuff_uptime (token, time, who_serial, who_name, who_flags, alvo_serial, alvo_name, alvo_flags, spellid, spellname, "DEBUFF_UPTIME_OUT") - --elseif (raid_members_cache [alvo_serial] and _bit_band (who_flags, 0x00000040) ~= 0) then --> alvo é da raide e o caster é inimigo - --[[not tail call, need to fix this]] --parser:add_bad_debuff_uptime (token, time, who_serial, who_name, who_flags, alvo_serial, alvo_name, alvo_flags, spellid, spellname, "DEBUFF_UPTIME_OUT") + elseif (raid_members_cache [alvo_serial] and not raid_members_cache [who_serial]) then --> alvo é da raide e o caster é inimigo + --[[not tail call, need to fix this]] parser:add_bad_debuff_uptime (token, time, who_serial, who_name, who_flags, alvo_serial, alvo_name, alvo_flags, spellid, spellname, spellschool, "DEBUFF_UPTIME_OUT") end end @@ -1059,7 +1062,7 @@ --> MISC search key: ~buffuptime ~buffsuptime | ----------------------------------------------------------------------------------------------------------------------------------------- - function parser:add_bad_debuff_uptime (token, time, who_serial, who_name, who_flags, alvo_serial, alvo_name, alvo_flags, spellid, spellname, in_out) + function parser:add_bad_debuff_uptime (token, time, who_serial, who_name, who_flags, alvo_serial, alvo_name, alvo_flags, spellid, spellname, spellschool, in_out) if (not alvo_name) then --> no target name, just quit @@ -1084,14 +1087,18 @@ if (not este_jogador.debuff_uptime) then este_jogador.boss_debuff = true - este_jogador.owner = who_name + este_jogador.damage_twin = who_name + este_jogador.spellschool = spellschool + este_jogador.damage_spellid = spellid este_jogador.debuff_uptime = 0 este_jogador.debuff_uptime_spell_tables = container_habilidades:NovoContainer (container_misc) este_jogador.debuff_uptime_targets = container_combatentes:NovoContainer (container_enemydebufftarget_target) if (not shadow.debuff_uptime_targets) then shadow.boss_debuff = true - shadow.owner = who_name + shadow.damage_twin = who_name + shadow.spellschool = spellschool + shadow.damage_spellid = spellid shadow.debuff_uptime = 0 shadow.debuff_uptime_spell_tables = container_habilidades:NovoContainer (container_misc) shadow.debuff_uptime_targets = container_combatentes:NovoContainer (container_enemydebufftarget_target) @@ -1527,6 +1534,13 @@ spell = este_jogador.cooldowns_defensive_spell_tables:PegaHabilidade (spellid, true, token) end + if (_hook_cooldowns) then + --> send event to registred functions + for _, func in _ipairs (_hook_cooldowns_container) do + func (nil, token, time, who_serial, who_name, who_flags, alvo_serial, alvo_name, alvo_flags, spellid, spellname) + end + end + return spell:Add (alvo_serial, alvo_name, alvo_flags, who_name, token, "BUFF_OR_DEBUFF", "COOLDOWN") end @@ -1960,12 +1974,12 @@ ------------------------------------------------------------------------------------------------ --> early checks and fixes - - if (not cc_spell_list [extraSpellID]) then - return + if (not cc_spell_list [spellid]) then + --return print ("nao ta na lista") end if (_bit_band (who_flags, AFFILIATION_GROUP) == 0) then + --print (who_name.. " nao eh do grupo") return end @@ -2037,16 +2051,16 @@ shadow.cc_break = shadow.cc_break + 1 --> broke what - if (not este_jogador.cc_break_oque [extraSpellID]) then - este_jogador.cc_break_oque [extraSpellID] = 1 + if (not este_jogador.cc_break_oque [spellid]) then + este_jogador.cc_break_oque [spellid] = 1 else - este_jogador.cc_break_oque [extraSpellID] = este_jogador.cc_break_oque [extraSpellID] + 1 + este_jogador.cc_break_oque [spellid] = este_jogador.cc_break_oque [spellid] + 1 end - if (not shadow.cc_break_oque [extraSpellID]) then - shadow.cc_break_oque [extraSpellID] = 1 + if (not shadow.cc_break_oque [spellid]) then + shadow.cc_break_oque [spellid] = 1 else - shadow.cc_break_oque [extraSpellID] = shadow.cc_break_oque [extraSpellID] + 1 + shadow.cc_break_oque [spellid] = shadow.cc_break_oque [spellid] + 1 end --> actor targets @@ -2059,11 +2073,11 @@ este_alvo.total = este_alvo.total + 1 --> actor spells table - local spell = este_jogador.cc_break_spell_tables._ActorTable [spellid] + local spell = este_jogador.cc_break_spell_tables._ActorTable [extraSpellID] if (not spell) then - spell = este_jogador.cc_break_spell_tables:PegaHabilidade (spellid, true, token) + spell = este_jogador.cc_break_spell_tables:PegaHabilidade (extraSpellID, true, token) end - return spell:Add (alvo_serial, alvo_name, alvo_flags, who_name, token, extraSpellID, extraSpellName) + return spell:Add (alvo_serial, alvo_name, alvo_flags, who_name, token, spellid, spellname) end --serach key: ~dead ~death ~morte @@ -2716,6 +2730,12 @@ --_recording_took_damage = _detalhes.RecordRealTimeTookDamage _recording_ability_with_buffs = _detalhes.RecordPlayerAbilityWithBuffs _in_combat = _detalhes.in_combat + + if (_detalhes.hooks ["HOOK_COOLDOWN"].enabled) then + _hook_cooldowns = true + else + _hook_cooldowns = false + end return _detalhes:ClearParserCache() end diff --git a/core/windows.lua b/core/windows.lua index d44b6148..3c2927f6 100644 --- a/core/windows.lua +++ b/core/windows.lua @@ -463,6 +463,8 @@ if (tabela._custom) then tabela (esta_barra, self) + elseif (tabela._refresh_window) then + tabela:_refresh_window (esta_barra, self) else tabela:RefreshBarra (esta_barra, self, true) end diff --git a/functions/attributes.lua b/functions/attributes.lua index f08af52e..7057e6cc 100644 --- a/functions/attributes.lua +++ b/functions/attributes.lua @@ -17,6 +17,7 @@ do "damage", --friendly fire "miscdata", --frags "damage", --enemy damage + "aura", --auras "heal", --healing done "heal", --hps @@ -48,7 +49,7 @@ do --[[ DAMAGE ]] dano = 1, --> identifier - [1] = 6, --> sub attributes + [1] = 7, --> sub attributes --[[ HEALING ]] cura = 2, --> identifier @@ -87,13 +88,15 @@ do friendly_fire = 4, frags = 5, enemies = 6, + voidzones = 7, lista = { --[[ String Names ]] Loc ["STRING_ATTRIBUTE_DAMAGE_DONE"], Loc ["STRING_ATTRIBUTE_DAMAGE_DPS"], Loc ["STRING_ATTRIBUTE_DAMAGE_TAKEN"], Loc ["STRING_ATTRIBUTE_DAMAGE_FRIENDLYFIRE"], Loc ["STRING_ATTRIBUTE_DAMAGE_FRAGS"], - Loc ["STRING_ATTRIBUTE_DAMAGE_ENEMIES"] + Loc ["STRING_ATTRIBUTE_DAMAGE_ENEMIES"], + Loc ["STRING_ATTRIBUTE_DAMAGE_DEBUFFS"], }, icones = { {"Interface\\AddOns\\Details\\images\\atributos_icones_damage", {0, .125, 0, 1}}, @@ -101,9 +104,10 @@ do {"Interface\\AddOns\\Details\\images\\atributos_icones_damage", {.25, .375, 0, 1}}, {"Interface\\AddOns\\Details\\images\\atributos_icones_damage", {.375, .5, 0, 1}}, {"Interface\\AddOns\\Details\\images\\atributos_icones_damage", {.5, 0.625, 0, 1}}, - {"Interface\\AddOns\\Details\\images\\atributos_icones_damage", {0.625, .75, 0, 1}} + {"Interface\\AddOns\\Details\\images\\atributos_icones_damage", {0.625, .75, 0, 1}}, + {"Interface\\AddOns\\Details\\images\\atributos_icones_damage", {.75, 0.875, 0, 1}} }, - internal = {"total", "last_dps", "damage_taken", "friendlyfire_total", "frags", "enemies"} + internal = {"total", "last_dps", "damage_taken", "friendlyfire_total", "frags", "enemies", "voidzones"} }, { diff --git a/functions/hooks.lua b/functions/hooks.lua new file mode 100644 index 00000000..655d8e96 --- /dev/null +++ b/functions/hooks.lua @@ -0,0 +1,50 @@ +--File Revision: 1 +--Last Modification: 06/12/2013 +-- Change Log: + -- 06/12/2013: file added. + +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + + --[[global]] DETAILS_HOOK_COOLDOWN = "HOOK_COOLDOWN" + + local _detalhes = _G._detalhes + local _ + + _detalhes.hooks ["HOOK_COOLDOWN"] = {} + + function _detalhes:InstallHook (hook_type, func) + + if (not _detalhes.hooks [hook_type]) then + return false, "Invalid hook type." + end + + _detalhes.hooks [hook_type] [#_detalhes.hooks [hook_type] + 1] = func + + _detalhes.hooks [hook_type].enabled = true + + _detalhes:UpdateParserGears() + return true + end + + function _detalhes:UnInstallHook (hook_type, func) + + if (not _detalhes.hooks [hook_type]) then + return false, "Invalid hook type." + end + + for index, this_func in ipairs (_detalhes.hooks [hook_type]) do + + if (this_func == func) then + + table.remove (_detalhes.hooks [hook_type], index) + + if (#_detalhes.hooks [hook_type] == 0) then + _detalhes.hooks [hook_type].enabled = false + end + + _detalhes:UpdateParserGears() + return true + end + end + + end \ No newline at end of file diff --git a/functions/savedata.lua b/functions/savedata.lua index 8e6dfd9f..50aad62b 100644 --- a/functions/savedata.lua +++ b/functions/savedata.lua @@ -288,7 +288,7 @@ end --]] ["heal"] = true, ["energy"] = false, ["miscdata"] = true, - ["aura"] = false, + ["aura"] = true, ["spellcast"] = true, } diff --git a/functions/skins.lua b/functions/skins.lua new file mode 100644 index 00000000..cf354438 --- /dev/null +++ b/functions/skins.lua @@ -0,0 +1,55 @@ +--File Revision: 1 +--Last Modification: 05/12/07/2013 +-- Change Log: + -- 05/12/07/2013: This file has been introduced. + + +local _detalhes = _G._detalhes +local _ + + --> install skin function: + function _detalhes:InstallSkin (skin_name, skin_table) + if (not skin_name) then + return false -- sem nome + elseif (_detalhes.skins [skin_name]) then + return false -- ja existe + end + + if (not skin_table.file) then + return false -- sem arquivo + end + + skin_table.author = skin_table.author or "" + skin_table.version = skin_table.version or "" + skin_table.site = skin_table.site or "" + skin_table.desc = skin_table.desc or "" + + _detalhes.skins [skin_name] = skin_table + return true + end + + --> install default skins: + _detalhes:InstallSkin ("Default Skin", { + file = [[Interface\AddOns\Details\images\skins\default_skin]], + author = "Details!", + version = "1.0", + site = "unknown", + desc = "default skin for Details!", + can_change_alpha_head = false, + icon_anchor_main = {-1, 1}, + icon_anchor_plugins = {-9, -7}, + icon_plugins_size = {19, 19} + }) + + _detalhes:InstallSkin ("Flat Color", { + file = [[Interface\AddOns\Details\images\skins\flat_skin]], + author = "Details!", + version = "1.0", + site = "unknown", + desc = "a flat skin", + can_change_alpha_head = true, + icon_anchor_main = {-1, -5}, + icon_anchor_plugins = {-7, -13}, + icon_plugins_size = {19, 18} + }) + \ No newline at end of file diff --git a/functions/slash.lua b/functions/slash.lua index 982458c8..c56ae14b 100644 --- a/functions/slash.lua +++ b/functions/slash.lua @@ -108,6 +108,29 @@ function SlashCmdList.DETAILS (msg, editbox) print ("GetTime()", GetTime()) print ("time()", time()) + elseif (msg == "malkorok") then + + print ("nome | count | unitCaster | spellId | isBossDebuff | value1 | value2 | value3") + + do + local name, rank, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable, shouldConsolidate, spellId, canApplyAura, isBossDebuff, value1, value2, value3 = UnitDebuff ("player", 1) + if (name) then + print (name, " | ", count, " | ", unitCaster, " | ",spellId, " | ", isBossDebuff, " | ", value1, " | ", value2, " | ", value3) + end + end + do + local name, rank, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable, shouldConsolidate, spellId, canApplyAura, isBossDebuff, value1, value2, value3 = UnitDebuff ("player", 2) + if (name) then + print (name, " | ", count, " | ", unitCaster, " | ",spellId, " | ", isBossDebuff, " | ", value1, " | ", value2, " | ", value3) + end + end + do + local name, rank, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable, shouldConsolidate, spellId, canApplyAura, isBossDebuff, value1, value2, value3 = UnitDebuff ("player", 3) + if (name) then + print (name, " | ", count, " | ", unitCaster, " | ",spellId, " | ", isBossDebuff, " | ", value1, " | ", value2, " | ", value3) + end + end + elseif (msg == "copy") then _G.DetailsCopy:Show() _G.DetailsCopy.MyObject.text:HighlightText() diff --git a/gumps/janela_info.lua b/gumps/janela_info.lua index 1b76de23..2c06de73 100644 --- a/gumps/janela_info.lua +++ b/gumps/janela_info.lua @@ -539,7 +539,7 @@ local function cria_textos (este_gump) este_gump.targets = este_gump:CreateFontString (nil, "OVERLAY", "QuestFont_Large") este_gump.targets:SetPoint ("TOPLEFT", este_gump, "TOPLEFT", 24, -235) - este_gump.targets:SetText ("Alvos:") + este_gump.targets:SetText (Loc ["STRING_TARGETS"] .. ":") end diff --git a/gumps/janela_options.lua b/gumps/janela_options.lua index 6a981b26..794fc7a7 100644 --- a/gumps/janela_options.lua +++ b/gumps/janela_options.lua @@ -215,8 +215,8 @@ function _detalhes:OpenOptionsWindow (instance) _detalhes:AtualizaGumpPrincipal (-1, true) end local timetypeOptions = { - {value = 1, label = "Chronometer", onclick = onSelectTimeType, icon = "Interface\\Icons\\INV_Misc_PocketWatch_01", desc = "The effective time are based on the actions of the actor\nand his activity time are paused when he is idle during combat."}, - {value = 2, label = "Continuous", onclick = onSelectTimeType, icon = "Interface\\Icons\\INV_Misc_Gear_03", desc = "Activity time is the same for all the actors where the\ncombat time is used to measure the effectiveness of all actors."} + {value = 1, label = "Activity Time", onclick = onSelectTimeType, icon = "Interface\\Icons\\INV_Misc_PocketWatch_01", desc = "Activity time are based on the actions of the actor\nand his activity time are paused when he is idle during combat."}, + {value = 2, label = "Effective Time", onclick = onSelectTimeType, icon = "Interface\\Icons\\INV_Misc_Gear_03", desc = "The effective time is the same for all the actors where the\ncombat time is used to measure the effectiveness of all actors."} } local buildTimeTypeMenu = function() return timetypeOptions @@ -298,7 +298,7 @@ function _detalhes:OpenOptionsWindow (instance) g:NewSwitch (window, _, "$parentCaptureAuraSlider", "auraCaptureSlider", 60, 20, _, _, _detalhes.capture_real ["aura"]) window.auraCaptureSlider:SetPoint ("left", window.auraCaptureLabel, "right", 2) - window.auraCaptureSlider.tooltip = "Pause or enable capture of:\n- buffs uptime" + window.auraCaptureSlider.tooltip = "Pause or enable capture of:\n- buffs uptime\n- debuffs uptime\n- void zones\n- cooldowns" window.auraCaptureSlider.OnSwitch = function (self, _, value) _detalhes:CaptureSet (value, "aura", true) switch_icon_color (window.auraCaptureImage, value) @@ -340,6 +340,7 @@ function _detalhes:OpenOptionsWindow (instance) window.fragsPvpSlider.tooltip = "Only record frags from player characters." --------------- Concatenate Trash + --[[ g:NewLabel (window, _, "$parentConcatenateTrash", "concatenateTrashLabel", "concatenate clean up segments") window.concatenateTrashLabel:SetPoint (10, -344) -- @@ -349,7 +350,7 @@ function _detalhes:OpenOptionsWindow (instance) _detalhes.trash_concatenate = amount end window.concatenateTrashSlider.tooltip = "Concatenate the next boss segments into only one." - + --]] --------------- Erase Trash g:NewLabel (window, _, "$parentEraseTrash", "eraseTrashLabel", "remove clean up segments") window.eraseTrashLabel:SetPoint (10, -359) diff --git a/gumps/janela_principal.lua b/gumps/janela_principal.lua index 88c54622..0dd7138c 100644 --- a/gumps/janela_principal.lua +++ b/gumps/janela_principal.lua @@ -56,7 +56,7 @@ end -- 0.00048828125 - local DEFAULT_SKIN = _detalhes.skin_path .. _detalhes.skins ["Default Skin"].file + local DEFAULT_SKIN = [[Interface\AddOns\Details\images\skins\default_skin]] local COORDS_LEFT_BALL = {0.15673828125, 0.28076171875, 0.08251953125, 0.20654296875} -- x1 160 y1 84 x2 288 y2 212 local COORDS_LEFT_CONNECTOR = {0.29541015625, 0.30224609375, 0.08251953125, 0.20654296875} --302 84 310 212 @@ -2452,6 +2452,73 @@ function _detalhes:InstanceColor (red, green, blue, alpha) self.color[1], self.color[2], self.color[3], self.color[4] = red, green, blue, alpha end +function _detalhes:StatusBarAlertTime (instance) + instance.baseframe.statusbar:Hide() +end + +function _detalhes:StatusBarAlert (text, icon, color, time) + + local statusbar = self.baseframe.statusbar + + if (text) then + if (type (text) == "table") then + if (text.color) then + statusbar.text:SetTextColor (gump:ParseColors (text.color)) + else + statusbar.text:SetTextColor (1, 1, 1, 1) + end + + statusbar.text:SetText (text.text or "") + + if (text.size) then + _detalhes:SetFontSize (statusbar.text, text.size) + else + _detalhes:SetFontSize (statusbar.text, 9) + end + else + statusbar.text:SetText (text) + statusbar.text:SetTextColor (1, 1, 1, 1) + _detalhes:SetFontSize (statusbar.text, 9) + end + else + statusbar.text:SetText ("") + end + + if (icon) then + if (type (icon) == "table") then + local texture, w, h, l, r, t, b = unpack (icon) + statusbar.icon:SetTexture (texture) + statusbar.icon:SetWidth (w or 14) + statusbar.icon:SetHeight (h or 14) + if (l and r and t and b) then + statusbar.icon:SetTexCoord (l, r, t, b) + end + else + statusbar.icon:SetTexture (icon) + statusbar.icon:SetWidth (14) + statusbar.icon:SetHeight (14) + statusbar.icon:SetTexCoord (0, 1, 0, 1) + end + else + statusbar.icon:SetTexture (nil) + end + + if (color) then + statusbar:SetBackdropColor (gump:ParseColors (color)) + else + statusbar:SetBackdropColor (0, 0, 0, 1) + end + + if (icon or text) then + statusbar:Show() + if (time) then + _detalhes:ScheduleTimer ("StatusBarAlertTime", time, self) + end + else + statusbar:Hide() + end +end + function gump:CriaRodape (BaseFrame, instancia) BaseFrame.rodape = {} @@ -2496,8 +2563,34 @@ function gump:CriaRodape (BaseFrame, instancia) BaseFrame.rodape.StatusBarCenterAnchor = StatusBarCenterAnchor + --> display frame + BaseFrame.statusbar = _CreateFrame ("frame", nil, BaseFrame.cabecalho.fechar) + BaseFrame.statusbar:SetFrameLevel (BaseFrame.cabecalho.fechar:GetFrameLevel()+2) + BaseFrame.statusbar:SetPoint ("LEFT", BaseFrame.rodape.esquerdo, "RIGHT", -13, 10) + BaseFrame.statusbar:SetPoint ("RIGHT", BaseFrame.rodape.direita, "LEFT", 13, 10) + BaseFrame.statusbar:SetHeight (14) + + local statusbar_icon = BaseFrame.statusbar:CreateTexture (nil, "overlay") + statusbar_icon:SetWidth (14) + statusbar_icon:SetHeight (14) + statusbar_icon:SetPoint ("left", BaseFrame.statusbar, "left") + + local statusbar_text = BaseFrame.statusbar:CreateFontString (nil, "overlay", "GameFontNormal") + statusbar_text:SetPoint ("left", statusbar_icon, "right", 2, 0) + + BaseFrame.statusbar:SetBackdrop ({ + bgFile = "Interface\\AddOns\\Details\\images\\background", tile = true, tileSize = 16, + insets = {left = 0, right = 0, top = 0, bottom = 0}}) + BaseFrame.statusbar:SetBackdropColor (0, 0, 0, 1) + + BaseFrame.statusbar.icon = statusbar_icon + BaseFrame.statusbar.text = statusbar_text + BaseFrame.statusbar.instancia = instancia + + BaseFrame.statusbar:Hide() + --> frame invisível - BaseFrame.DOWNFrame = _CreateFrame ("frame", nil, BaseFrame) + BaseFrame.DOWNFrame = _CreateFrame ("frame", nil, BaseFrame) BaseFrame.DOWNFrame:SetPoint ("LEFT", BaseFrame.rodape.esquerdo, "RIGHT", 0, 10) BaseFrame.DOWNFrame:SetPoint ("RIGHT", BaseFrame.rodape.direita, "LEFT", 0, 10) BaseFrame.DOWNFrame:SetHeight (14) @@ -2927,10 +3020,11 @@ function _detalhes:ChangeSkin (skin_name) end self.skin = skin_name - local skin_file = _detalhes.skin_path .. this_skin.file + local skin_file = this_skin.file self.baseframe.cabecalho.ball:SetTexture (skin_file) --> bola esquerda self.baseframe.cabecalho.emenda:SetTexture (skin_file) --> emenda que liga a bola a textura do centro + self.baseframe.cabecalho.ball_r:SetTexture (skin_file) --> bola direita onde fica o botão de fechar self.baseframe.cabecalho.top_bg:SetTexture (skin_file) --> top background diff --git a/gumps/janela_welcome.lua b/gumps/janela_welcome.lua index a4fe8c51..3003d4b1 100644 --- a/gumps/janela_welcome.lua +++ b/gumps/janela_welcome.lua @@ -162,18 +162,18 @@ function _detalhes:OpenWelcomeWindow () local texto2 = window:CreateFontString (nil, "overlay", "GameFontNormal") texto2:SetPoint ("topleft", window, "topleft", 20, -80) - texto2:SetText ("Damage & Healing per Second Timing:") + texto2:SetText ("Choose your DPS and HPS prefered method:") local chronometer = CreateFrame ("CheckButton", "WelcomeWindowChronometer", window, "ChatConfigCheckButtonTemplate") chronometer:SetPoint ("topleft", window, "topleft", 40, -110) local continuous = CreateFrame ("CheckButton", "WelcomeWindowContinuous", window, "ChatConfigCheckButtonTemplate") continuous:SetPoint ("topleft", window, "topleft", 40, -160) - _G ["WelcomeWindowChronometerText"]:SetText ("Chronometer"..": ") - _G ["WelcomeWindowContinuousText"]:SetText ("Continuous"..": ") + _G ["WelcomeWindowChronometerText"]:SetText ("Activity Time"..": ") + _G ["WelcomeWindowContinuousText"]:SetText ("Effective Time"..": ") local chronometer_text = window:CreateFontString (nil, "overlay", "GameFontNormal") - chronometer_text:SetText ("standard way of measuring time, the timer of each raid member is put on hold if his activity is ceased and back again to count when actor activity is resumed.") + chronometer_text:SetText ("the timer of each raid member is put on hold if his activity is ceased and back again to count when is resumed, common way of mensure Dps and Hps.") chronometer_text:SetWidth (360) chronometer_text:SetHeight (40) chronometer_text:SetJustifyH ("left") @@ -182,8 +182,8 @@ function _detalhes:OpenWelcomeWindow () chronometer_text:SetPoint ("topleft", _G ["WelcomeWindowChronometerText"], "topright", 0, 0) local continuous_text = window:CreateFontString (nil, "overlay", "GameFontNormal") - continuous_text:SetText ("also know as 'effective time', this method uses the elapsed combat time for mensure the Dps and Hps of all raid members.") - continuous_text:SetWidth (360) + continuous_text:SetText ("used for rankings, this method uses the elapsed combat time for mensure the Dps and Hps of all raid members.") + continuous_text:SetWidth (340) continuous_text:SetHeight (40) continuous_text:SetJustifyH ("left") continuous_text:SetJustifyV ("top") @@ -227,10 +227,10 @@ function _detalhes:OpenWelcomeWindow () local texto3 = window:CreateFontString (nil, "overlay", "GameFontNormal") texto3:SetPoint ("topleft", window, "topleft", 20, -80) - texto3:SetText ("Reading combat data:") + texto3:SetText ("Which parts of a fight is important to you?") local data_text = window:CreateFontString (nil, "overlay", "GameFontNormal") - data_text:SetText ("Details! reads and calculate combat data in a very fast way, but if you are unconfortable with you compunter performance, you can drop some types of data which isn't important to you:") + data_text:SetText ("Details! reads and calculate combat numbers in a very fast way, but if some kind of data is irrelevant for you, you can disable/enable it 'on-the-fly'.") data_text:SetWidth (460) data_text:SetHeight (40) data_text:SetJustifyH ("left") @@ -313,7 +313,7 @@ function _detalhes:OpenWelcomeWindow () g:NewSwitch (window, _, "$parentCaptureMiscSlider", "miscCaptureSlider", 60, 20, _, _, _detalhes.capture_real ["miscdata"]) window.miscCaptureSlider:SetPoint ("left", window.miscCaptureLabel, "right", 2) - window.miscCaptureSlider.tooltip = "Pause or enable capture of:\n- cc breaks\n- dispell\n- interrupts\n- ress\n- deaths" + window.miscCaptureSlider.tooltip = "Pause or enable capture of:\n- cc breaks\n- dispell\n- interrupts\n- ress\n- deaths\n- frags" window.miscCaptureSlider.OnSwitch = function (self, _, value) _detalhes:CaptureSet (value, "miscdata", true) switch_icon_color (window.miscCaptureImage, value) @@ -322,7 +322,7 @@ function _detalhes:OpenWelcomeWindow () g:NewSwitch (window, _, "$parentCaptureAuraSlider", "auraCaptureSlider", 60, 20, _, _, _detalhes.capture_real ["aura"]) window.auraCaptureSlider:SetPoint ("left", window.auraCaptureLabel, "right", 2) - window.auraCaptureSlider.tooltip = "Pause or enable capture of:\n- buffs uptime" + window.auraCaptureSlider.tooltip = "Pause or enable capture of:\n- buffs uptime\n- debuffs uptime\n- void zones\n- cooldowns" window.auraCaptureSlider.OnSwitch = function (self, _, value) _detalhes:CaptureSet (value, "aura", true) switch_icon_color (window.auraCaptureImage, value) @@ -355,10 +355,10 @@ function _detalhes:OpenWelcomeWindow () local texto4 = window:CreateFontString (nil, "overlay", "GameFontNormal") texto4:SetPoint ("topleft", window, "topleft", 20, -80) - texto4:SetText ("Interface Tweaks:") + texto4:SetText ("Some Cool Interface Tweaks:") local interval_text = window:CreateFontString (nil, "overlay", "GameFontNormal") - interval_text:SetText ("You can also adjust the interval (in seconds) between window updates, high values may save some performance.") + interval_text:SetText ("Here you can choose the uptime speed of all opened windows. Low values with dance bars enabled may create cool effects, but may consume more cpu.") interval_text:SetWidth (460) interval_text:SetHeight (40) interval_text:SetJustifyH ("left") @@ -367,13 +367,13 @@ function _detalhes:OpenWelcomeWindow () interval_text:SetPoint ("topleft", window, "topleft", 30, -110) local dance_text = window:CreateFontString (nil, "overlay", "GameFontNormal") - dance_text:SetText ("Keeping 'Dance Bars' disabled also may help with performance.") + dance_text:SetText ("Enable 'Dance Bars' for bars animations.") dance_text:SetWidth (460) dance_text:SetHeight (40) dance_text:SetJustifyH ("left") dance_text:SetJustifyV ("top") dance_text:SetTextColor (1, 1, 1, 1) - dance_text:SetPoint ("topleft", window, "topleft", 30, -170) + dance_text:SetPoint ("topleft", window, "topleft", 30, -175) --------------- Update Speed g:NewLabel (window, _, "$parentUpdateSpeedLabel", "updatespeedLabel", "Update Speed") diff --git a/gumps/switch.lua b/gumps/switch.lua index 5803b05f..2b47975a 100644 --- a/gumps/switch.lua +++ b/gumps/switch.lua @@ -30,6 +30,7 @@ do function _detalhes.switch:CloseMe() _detalhes.switch.frame:Hide() _detalhes.switch.frame:SetBackdropColor (24/255, 24/255, 24/255, .8) + _detalhes.switch.current_instancia:StatusBarAlert (nil) end --> limitação: não tenho como pegar o base frame da instância por aqui @@ -50,21 +51,23 @@ _detalhes.switch.current_instancia = nil _detalhes.switch.current_button = nil _detalhes.switch.height_necessary = (30*_detalhes.switch.slots)/2 ---_detalhes:DelayMsg ("altura necessaria: " .. _detalhes.switch.height_necessary) ---_detalhes:DelayMsg ("slots: " .. _detalhes.switch.slots) +local right_click_text = {text = Loc ["STRING_SHORTCUT_RIGHTCLICK"], size = 9, color = {.9, .9, .9}} +local right_click_texture = {[[Interface\TUTORIALFRAME\UI-TUTORIAL-FRAME]], 14, 14, 0.0019531, 0.1484375, 0.6269531, 0.8222656} function _detalhes.switch:ShowMe (instancia) + _detalhes.switch.current_instancia = instancia + _detalhes.switch.frame:SetFrameLevel (instancia.baseframe:GetFrameLevel() + 5) _detalhes.switch.frame:SetPoint ("topleft", instancia.baseframe, "topleft", 2, 0) _detalhes.switch.frame:SetPoint ("bottomright", instancia.baseframe, "bottomright", -2, 0) - _detalhes.switch.frame:SetBackdropColor (24/255, 24/255, 24/255, .8) + _detalhes.switch.frame:SetBackdropColor (0.094, 0.094, 0.094, .8) local _r, _g, _b, _a = _detalhes.switch.frame:GetBackdropColor() gump:GradientEffect (_detalhes.switch.frame, "frame", _r, _g, _b, _a, _r, _g, _b, 1, 1) local altura = instancia.baseframe:GetHeight() - local mostrar_quantas = _math_floor (altura / 30)*2 + local mostrar_quantas = _math_floor (altura / 30) * 2 if (_detalhes.switch.mostrar_quantas ~= mostrar_quantas) then for i = 1, #_detalhes.switch.buttons do @@ -86,6 +89,7 @@ function _detalhes.switch:ShowMe (instancia) _detalhes.switch:Resize() _detalhes.switch.frame:Show() + instancia:StatusBarAlert (right_click_text, right_click_texture) --icon, color, time end function _detalhes.switch:Config (_,_, atributo, sub_atributo) @@ -111,16 +115,19 @@ function _detalhes:FastSwitch (_this) GameCooltip:SetColor (1, nil) GameCooltip:SetColor (2, nil) GameCooltip:ShowCooltip() - - --_detalhes.popup:ShowMe (_detalhes.switch.buttons [_this.button], _detalhes.switch.current_instancia, menu, sub_menu, "Interface\\AddOns\\Details\\images\\atributos_icones", 256, _, _, _, {["NoFade"] = true}) + else --> botão esquerdo if (_detalhes.switch.current_instancia.modo == _detalhes._detalhes_props["MODO_ALONE"]) then _detalhes.switch.current_instancia:AlteraModo (_detalhes.switch.current_instancia, _detalhes.switch.current_instancia.LastModo) + elseif (_detalhes.switch.current_instancia.modo == _detalhes._detalhes_props["MODO_RAID"]) then _detalhes.switch.current_instancia:AlteraModo (_detalhes.switch.current_instancia, _detalhes.switch.current_instancia.LastModo) + end - _detalhes.switch.current_instancia:TrocaTabela (_detalhes.switch.current_instancia.segmento, _this.atributo, _this.sub_atributo) + + _detalhes.switch.current_instancia:TrocaTabela (_detalhes.switch.current_instancia, true, _this.atributo, _this.sub_atributo) _detalhes.switch.CloseMe() + end end diff --git a/images/atributos_icones_damage.tga b/images/atributos_icones_damage.tga index 22b577f7..9840a13e 100644 Binary files a/images/atributos_icones_damage.tga and b/images/atributos_icones_damage.tga differ diff --git a/images/skins/default_skin.tga b/images/skins/default_skin.tga index a09481d8..96e0ee67 100644 Binary files a/images/skins/default_skin.tga and b/images/skins/default_skin.tga differ diff --git a/locales/Details-enUS.lua b/locales/Details-enUS.lua index d4210116..65502489 100644 --- a/locales/Details-enUS.lua +++ b/locales/Details-enUS.lua @@ -3,8 +3,7 @@ if not Loc then return end -------------------------------------------------------------------------------------------------------------------------------------------- -- \n\n|cFFFFFF00-|r - - Loc ["STRING_VERSION_LOG"] = "|cFFFFFF00v1.6.7|r\n\n- Added support to skins, you can change over options panel.\n\n|cFFFFFF00v1.6.5|r\n\n|cFFFFFF00-|r Added sub attribute 'Enemies' which shows, of course, only enemies.\n\n|cFFFFFF00-|r Fixed issue with successful spell cast.\n\n|cFFFFFF00v1.6.3|r\n\n|cFFFFFF00-|r data capture now runs 4% faster.\n\n|cFFFFFF00-|r Fixed issue with pets were wasn't uptading owner activity time.\n\n|cFFFFFF00-|r Fixed healing being counted even out of combat.\n\n|cFFFFFF00-|r Fixed some problems with multi-boss encountes like Twin Consorts.\n\n|cFFFFFF00-|r Added options for concatenate trash segments.\n\n|cFFFFFF00-|r Added options for auto remove trash segments. \n\n|cFFFFFF00-|r Added options for change bar height. \n\n|cFFFFFF00-|r Encounter Details now display how many interrupted and successful cast of a boss skill.\n\n|cFFFFFF00v1.6.1|r\n\n|cFFFFFF00-|r Fixed:\n- a issue with debuff uptime.\n- overall data dps and hps for overall data on micro display.\n- many bugs involving sword and book menus.\n- garbage collector erasing actors with interactions with your group members.\n\n|cFFFFFF00-|r overall data now always use the combat data for measure dps and hps.\n\n|cFFFFFF00v1.6.0|r\n\n|cFFFFFF00-|r Added debuff uptime at misc attribute.\n\n|cFFFFFF00-|r Disabled attributes now have a darkness effect over sword menu.\n\n|cFFFFFF00-|r Fixed a issue were sometimes you need to /reload before change a talent.\n\n|cFFFFFF00v1.5.3|r\n\n|cFFFFFF00-|r Fixed a issue with report data during combat lockdown.\n\n|cFFFFFF00-|r Improved pet owner recognition and added a ignore list if couldn't find his owner.\n\n|cFFFFFF00-|r Added an option to display only frags on enemy players.\n\n|cFFFFFF00-|r Added class colors for frags.\n\n|cFFFFFF00v1.5.2|r\n\n|cFFFFFF00-|r Fixed a issue were turning off buff uptime was disabling healing done too.\n\n|cFFFFFF00-|r Avoidance statistics will not be recorded for pets, ungrouped players and monsters.\n\n|cFFFFFF00-|r Fixed a issue were sometimes buff uptime was taking too long to save data on logout.\n\n|cFFFFFF00v1.5.1|r\n\n|cFFFFFF00-|r Fixed a issue with report data were sometimes wasn't working.\n\n|cFFFFFF00v1.5.0|r\n\n|cFFFFFF00-|r Buff Uptime was been implemented over Miscellaneous attribute.\n\n|cFFFFFF00-|r Death Logs now also display cooldowns and last cooldown used.\n\n|cFFFFFF00-|r Added this window showing the latest changes.\n\n|cFFFFFF00-|r Fixed the issue were sometimes the instance stops to update when clicking on the attribute name over sword menu.\n\n|cFFFFFF00-|r Disabling Healing now shutdown the absorbs too, disabling auras doesn't interrupt absorbs any more.\n\n|cFFFFFF00-|r Friendly Fire now only track players which is inside a group.\n\n|cFFFFFF00-|r Fixed a issue were pet damage on target isn't added to owner target.\n\n|cFFFFFF00-|r Fixed a bug were refreshing a cooldown isn't counting.\n\n|cFFFFFF00-|r Added absorbs for shammy and monk 2P tier 16.\n\n|cFFFFFF00-|r Added slash command 'worldboss' and 'updates'.\n\n" + Loc ["STRING_VERSION_LOG"] = "|cFFFFFF00v1.7.0|r\n\n- Fixed some colors issues with enimies bars.\n\n|cFFFFFF00-|r Fixed some phrases which isn't still not translated to enUS.\n\n|cFFFFFF00-|r Major rewrite on CC-Breaks, now it's working properly.\n\n|cFFFFFF00-|r Added new sub attribute for damage: Voidzones & Debuffs.|cFFFFFF00v1.6.7|r\n\n- Added support to skins, you can change over options panel.\n\n|cFFFFFF00v1.6.5|r\n\n|cFFFFFF00-|r Added sub attribute 'Enemies' which shows, of course, only enemies.\n\n|cFFFFFF00-|r Fixed issue with successful spell cast.\n\n|cFFFFFF00v1.6.3|r\n\n|cFFFFFF00-|r data capture now runs 4% faster.\n\n|cFFFFFF00-|r Fixed issue with pets were wasn't uptading owner activity time.\n\n|cFFFFFF00-|r Fixed healing being counted even out of combat.\n\n|cFFFFFF00-|r Fixed some problems with multi-boss encountes like Twin Consorts.\n\n|cFFFFFF00-|r Added options for concatenate trash segments.\n\n|cFFFFFF00-|r Added options for auto remove trash segments. \n\n|cFFFFFF00-|r Added options for change bar height. \n\n|cFFFFFF00-|r Encounter Details now display how many interrupted and successful cast of a boss skill.\n\n|cFFFFFF00v1.6.1|r\n\n|cFFFFFF00-|r Fixed:\n- a issue with debuff uptime.\n- overall data dps and hps for overall data on micro display.\n- many bugs involving sword and book menus.\n- garbage collector erasing actors with interactions with your group members.\n\n|cFFFFFF00-|r overall data now always use the combat data for measure dps and hps.\n\n|cFFFFFF00v1.6.0|r\n\n|cFFFFFF00-|r Added debuff uptime at misc attribute.\n\n|cFFFFFF00-|r Disabled attributes now have a darkness effect over sword menu.\n\n|cFFFFFF00-|r Fixed a issue were sometimes you need to /reload before change a talent.\n\n|cFFFFFF00v1.5.3|r\n\n|cFFFFFF00-|r Fixed a issue with report data during combat lockdown.\n\n|cFFFFFF00-|r Improved pet owner recognition and added a ignore list if couldn't find his owner.\n\n|cFFFFFF00-|r Added an option to display only frags on enemy players.\n\n|cFFFFFF00-|r Added class colors for frags.\n\n|cFFFFFF00v1.5.2|r\n\n|cFFFFFF00-|r Fixed a issue were turning off buff uptime was disabling healing done too.\n\n|cFFFFFF00-|r Avoidance statistics will not be recorded for pets, ungrouped players and monsters.\n\n|cFFFFFF00-|r Fixed a issue were sometimes buff uptime was taking too long to save data on logout.\n\n|cFFFFFF00v1.5.1|r\n\n|cFFFFFF00-|r Fixed a issue with report data were sometimes wasn't working.\n\n|cFFFFFF00v1.5.0|r\n\n|cFFFFFF00-|r Buff Uptime was been implemented over Miscellaneous attribute.\n\n|cFFFFFF00-|r Death Logs now also display cooldowns and last cooldown used.\n\n|cFFFFFF00-|r Added this window showing the latest changes.\n\n|cFFFFFF00-|r Fixed the issue were sometimes the instance stops to update when clicking on the attribute name over sword menu.\n\n|cFFFFFF00-|r Disabling Healing now shutdown the absorbs too, disabling auras doesn't interrupt absorbs any more.\n\n|cFFFFFF00-|r Friendly Fire now only track players which is inside a group.\n\n|cFFFFFF00-|r Fixed a issue were pet damage on target isn't added to owner target.\n\n|cFFFFFF00-|r Fixed a bug were refreshing a cooldown isn't counting.\n\n|cFFFFFF00-|r Added absorbs for shammy and monk 2P tier 16.\n\n|cFFFFFF00-|r Added slash command 'worldboss' and 'updates'.\n\n" Loc ["STRING_DETAILS1"] = "|cffffaeaeDetails:|r " --> color and details name @@ -21,6 +20,8 @@ if not Loc then return end Loc ["STRING_SEGMENT_TRASH"] = "Next Boss Cleanup" Loc ["STRING_VERSION_UPDATE"] = "new version: what's changed? click here" Loc ["STRING_NEWS_TITLE"] = "What's New In This Version" + Loc ["STRING_TIME_OF_DEATH"] = "Death" + Loc ["STRING_SHORTCUT_RIGHTCLICK"] = "Shortcut Menu (right click to close)" Loc ["STRING_NO_DATA"] = "data already has been cleaned" Loc ["STRING_ISA_PET"] = "This Actor is a Pet" @@ -154,6 +155,8 @@ if not Loc then return end Loc ["STRING_ATTRIBUTE_DAMAGE_FRIENDLYFIRE"] = "Friendly Fire" Loc ["STRING_ATTRIBUTE_DAMAGE_FRAGS"] = "Frags" Loc ["STRING_ATTRIBUTE_DAMAGE_ENEMIES"] = "Enemies" + Loc ["STRING_ATTRIBUTE_DAMAGE_DEBUFFS"] = "Auras & Voidzones" + Loc ["STRING_ATTRIBUTE_DAMAGE_DEBUFFS_REPORT"] = "Debuff Damage and Uptime" Loc ["STRING_ATTRIBUTE_HEAL"] = "Heal" Loc ["STRING_ATTRIBUTE_HEAL_DONE"] = "Healing Done" diff --git a/locales/Details-ptBR.lua b/locales/Details-ptBR.lua index f86d2c77..8f7db10c 100644 --- a/locales/Details-ptBR.lua +++ b/locales/Details-ptBR.lua @@ -3,7 +3,7 @@ if not Loc then return end -------------------------------------------------------------------------------------------------------------------------------------------- - Loc ["STRING_VERSION_LOG"] = "|cFFFFFF00v1.6.7|r\n\n- Adicionado suporte a skins, troque ela atraves do painel de opcoes.\n\n|cFFFFFF00v1.6.5|r\n\n|cFFFFFF00-|r Adicionado o sub atributo 'Inimigos' que mostra, eh claro, somente inimigos.\n\n|cFFFFFF00-|r Corrigido um problema na captura das magias conjuradas.|cFFFFFF00v1.6.3|r\n\n|cFFFFFF00-|r captura de dados agora roda 4% mais rapido.\n\n|cFFFFFF00-|r Corrigido problema onde os ajudantes nao atualizavam o tempo de atividade do dono.\n\n|cFFFFFF00-|r Corrigido problema onde o healing era contado mesmo fora do combate.\n\n|cFFFFFF00-|r Corrigido problema com chefes multiplos como Twin Consorts.\n\n|cFFFFFF00-|r Adicionada opcao para juntar os segmentos de trash mobs.\n\n|cFFFFFF00-|r Adicionada opcao para auto remover os segmentos de trash mobs. \n\n|cFFFFFF00-|r Adicionada opcao para alterar a altura das barras.\n\n|cFFFFFF00-|r Plugin Encounter Details agora mostra quantos cast bem sucedidos as magias interrompidas tiveram.\n\n|cFFFFFF00v1.6.1|r\n\n|cFFFFFF00-|r Corrigido:\n- problema com o tempo de debuffs.\n- dps dos dados gerais e o dps no micro display .\n- varios bugs envolvendo o menu da espada e do livro.\n- o coletor de lixo nao ira mais apagar jogadores com vinculo a membros do grupo.\n\n|cFFFFFF00-|r dados gerais agora sempre ira usar o tempo do combate para medir dps e hps.\n\n|cFFFFFF00v1.6.0|r\n\n|cFFFFFF00-|r Adicionado tempo de debuff no atributo miscelanea.\n\n|cFFFFFF00-|r Atributos desativados agora ficam escurecidos no menu da espada.\n\n|cFFFFFF00-|r Corrigido um problema aonde algumas vezes era necessario dar /reload para trocar um talento.\n\n|cFFFFFF00v1.5.3|r\n\n|cFFFFFF00-|r Corrigido problema ao reportar durante o combate.\n\n|cFFFFFF00-|r Melhorado a reconhecimento dos donos de ajudantes.\n\n|cFFFFFF00-|r Adicionada uma opcao para mostrar apenas frags em cima de jogadores inimigos.\n\n|cFFFFFF00-|r Adicionado cor e icone aos frags.\n\n|cFFFFFF00v1.5.2|r\n\n|cFFFFFF00-|r Corrigido problema onde desativando o tempo dos buffs estava desativando tambem a cura feita.\n\n|cFFFFFF00-|r Estatisticas de Avoidance nao seram mais capturadas para pessoas foram do grupo, monstros ou ajudantes.\n\n|cFFFFFF00-|r Corrigido problema onde as vezes estava demorando muito para salvar o tempo dos buffs ao sair do jogo.\n\n|cFFFFFF00v1.5.1|r\n\n|cFFFFFF00-|r Corrigido problema ao reportar o Dps onde as vezes nao mostrava nenhum jogador.\n\n|cFFFFFF00v1.5.0|r\n\n|cFFFFFF00-|r Buff Uptime foi implementado no atributo miscelanea.\n\n|cFFFFFF00-|r Cooldowns usados agora aparecem nos registros da morte.\n\n|cFFFFFF00-|r Implementado esta janela mostrando as atualizacoes.\n\n|cFFFFFF00-|r Corrigido problema onde algumas vezes clicando no nome do atributo fazia a instancia parar de atualizar.\n\n|cFFFFFF00-|r Desativando a cura agora para as absorcoes tambem. Desligando as Auras nao interrompe as absorcoes. \n\n|cFFFFFF00-|r Fogo Amigo agora conta apenas jogadores dentro do grupo.\n\n|cFFFFFF00-|r Corrigido problema onde o dano feito por um ajudando nao estava contando no alvo do dono.\n\n|cFFFFFF00-|r Corrigido problema onde a atualizacao de um cooldown nao estava sendo contada.\n\n|cFFFFFF00-|r Adicionada as magias de absorcao para 2P tier 16.\n\n|cFFFFFF00-|r Adicionado os comandos de barra 'worldboss' e 'updates'.\n\n|cFFFFFF00-|r Corrigido problema ao reportar onde algumas vezes nao estava funcionando." + Loc ["STRING_VERSION_LOG"] = "|cFFFFFF00v1.7.0|r\n\n- Corrigido alguns problemas com as cores das barras de inimigos.\n\n|cFFFFFF00-|r CC Quebrado foi inteiramente reescrito e agora deve funcionar corretamente.\n\n|cFFFFFF00-|r Adicionado novo sub atributo ao dano: Voidzones & Debuffs.|cFFFFFF00v1.6.7|r\n\n- Adicionado suporte a skins, troque ela atraves do painel de opcoes.\n\n|cFFFFFF00v1.6.5|r\n\n|cFFFFFF00-|r Adicionado o sub atributo 'Inimigos' que mostra, eh claro, somente inimigos.\n\n|cFFFFFF00-|r Corrigido um problema na captura das magias conjuradas.|cFFFFFF00v1.6.3|r\n\n|cFFFFFF00-|r captura de dados agora roda 4% mais rapido.\n\n|cFFFFFF00-|r Corrigido problema onde os ajudantes nao atualizavam o tempo de atividade do dono.\n\n|cFFFFFF00-|r Corrigido problema onde o healing era contado mesmo fora do combate.\n\n|cFFFFFF00-|r Corrigido problema com chefes multiplos como Twin Consorts.\n\n|cFFFFFF00-|r Adicionada opcao para juntar os segmentos de trash mobs.\n\n|cFFFFFF00-|r Adicionada opcao para auto remover os segmentos de trash mobs. \n\n|cFFFFFF00-|r Adicionada opcao para alterar a altura das barras.\n\n|cFFFFFF00-|r Plugin Encounter Details agora mostra quantos cast bem sucedidos as magias interrompidas tiveram.\n\n|cFFFFFF00v1.6.1|r\n\n|cFFFFFF00-|r Corrigido:\n- problema com o tempo de debuffs.\n- dps dos dados gerais e o dps no micro display .\n- varios bugs envolvendo o menu da espada e do livro.\n- o coletor de lixo nao ira mais apagar jogadores com vinculo a membros do grupo.\n\n|cFFFFFF00-|r dados gerais agora sempre ira usar o tempo do combate para medir dps e hps.\n\n|cFFFFFF00v1.6.0|r\n\n|cFFFFFF00-|r Adicionado tempo de debuff no atributo miscelanea.\n\n|cFFFFFF00-|r Atributos desativados agora ficam escurecidos no menu da espada.\n\n|cFFFFFF00-|r Corrigido um problema aonde algumas vezes era necessario dar /reload para trocar um talento.\n\n|cFFFFFF00v1.5.3|r\n\n|cFFFFFF00-|r Corrigido problema ao reportar durante o combate.\n\n|cFFFFFF00-|r Melhorado a reconhecimento dos donos de ajudantes.\n\n|cFFFFFF00-|r Adicionada uma opcao para mostrar apenas frags em cima de jogadores inimigos.\n\n|cFFFFFF00-|r Adicionado cor e icone aos frags.\n\n|cFFFFFF00v1.5.2|r\n\n|cFFFFFF00-|r Corrigido problema onde desativando o tempo dos buffs estava desativando tambem a cura feita.\n\n|cFFFFFF00-|r Estatisticas de Avoidance nao seram mais capturadas para pessoas foram do grupo, monstros ou ajudantes.\n\n|cFFFFFF00-|r Corrigido problema onde as vezes estava demorando muito para salvar o tempo dos buffs ao sair do jogo.\n\n|cFFFFFF00v1.5.1|r\n\n|cFFFFFF00-|r Corrigido problema ao reportar o Dps onde as vezes nao mostrava nenhum jogador.\n\n|cFFFFFF00v1.5.0|r\n\n|cFFFFFF00-|r Buff Uptime foi implementado no atributo miscelanea.\n\n|cFFFFFF00-|r Cooldowns usados agora aparecem nos registros da morte.\n\n|cFFFFFF00-|r Implementado esta janela mostrando as atualizacoes.\n\n|cFFFFFF00-|r Corrigido problema onde algumas vezes clicando no nome do atributo fazia a instancia parar de atualizar.\n\n|cFFFFFF00-|r Desativando a cura agora para as absorcoes tambem. Desligando as Auras nao interrompe as absorcoes. \n\n|cFFFFFF00-|r Fogo Amigo agora conta apenas jogadores dentro do grupo.\n\n|cFFFFFF00-|r Corrigido problema onde o dano feito por um ajudando nao estava contando no alvo do dono.\n\n|cFFFFFF00-|r Corrigido problema onde a atualizacao de um cooldown nao estava sendo contada.\n\n|cFFFFFF00-|r Adicionada as magias de absorcao para 2P tier 16.\n\n|cFFFFFF00-|r Adicionado os comandos de barra 'worldboss' e 'updates'.\n\n|cFFFFFF00-|r Corrigido problema ao reportar onde algumas vezes nao estava funcionando." Loc ["STRING_DETAILS1"] = "|cffffaeaeDetalhes:|r " --> color and details name @@ -20,6 +20,8 @@ if not Loc then return end Loc ["STRING_SEGMENT_TRASH"] = "Caminho do Proximo Boss" Loc ["STRING_VERSION_UPDATE"] = "nova versao: clique para ver o que mudou" Loc ["STRING_NEWS_TITLE"] = "Quais As Novidades Desta Versao" + Loc ["STRING_TIME_OF_DEATH"] = "Morreu" + Loc ["STRING_SHORTCUT_RIGHTCLICK"] = "Menu de Atalho (botao direito para fechar)" Loc ["STRING_NO_DATA"] = "data já foi limpada" Loc ["STRING_ISA_PET"] = "Este Ator e um Ajudante" @@ -149,8 +151,10 @@ if not Loc then return end Loc ["STRING_DAMAGE_TAKEN_FROM"] = "Dano Recebido Vindo De" Loc ["STRING_DAMAGE_TAKEN_FROM2"] = "aplicou dano com" Loc ["STRING_ATTRIBUTE_DAMAGE_FRIENDLYFIRE"] = "Fogo Amigo" - Loc ["STRING_ATTRIBUTE_DAMAGE_FRAGS"] = "Inimigos Abatidos" + Loc ["STRING_ATTRIBUTE_DAMAGE_FRAGS"] = "Abatimentos" Loc ["STRING_ATTRIBUTE_DAMAGE_ENEMIES"] = "Inimigos" + Loc ["STRING_ATTRIBUTE_DAMAGE_DEBUFFS"] = "Auras & Voidzones" + Loc ["STRING_ATTRIBUTE_DAMAGE_DEBUFFS_REPORT"] = "Dano e Tempo de Atividade da Aura" Loc ["STRING_ATTRIBUTE_HEAL"] = "Cura" Loc ["STRING_ATTRIBUTE_HEAL_DONE"] = "Cura Feita" diff --git a/startup.lua b/startup.lua index 2f3f39a7..0d934d67 100644 --- a/startup.lua +++ b/startup.lua @@ -120,11 +120,11 @@ function _G._detalhes:Start() for classe, tabela_cor in pairs ( RAID_CLASS_COLORS ) do self.class_colors [classe] = {tabela_cor.r, tabela_cor.g, tabela_cor.b} end - --self.class_colors ["UNKNOW"] = {0.3921, 0.0980, 0.0980} self.class_colors ["UNKNOW"] = {0.2, 0.2, 0.2} self.class_colors ["UNGROUPPLAYER"] = {0.4, 0.4, 0.4} self.class_colors ["PET"] = {0.3, 0.4, 0.5} end + self.class_colors ["ENEMY"] = self.class_colors ["ENEMY"] or {0.94117, 0, 0.01960, 1} self.class_coords = {} for class, tcoord in pairs (_G.CLASS_ICON_TCOORDS) do @@ -136,13 +136,25 @@ function _G._detalhes:Start() self.class_coords ["Horde"] = {0.7421875, 0.98828125, 0.75, 1} self.class_coords ["PET"] = {0.25, 0.49609375, 0.75, 1} self.class_coords ["MONSTER"] = {0, 0.25, 0.75, 1} + self.class_coords ["ENEMY"] = {0, 0.25, 0.75, 1} self.class_coords ["UNKNOW"] = {0.5, 0.75, 0.75, 1} self.class_coords ["UNGROUPPLAYER"] = {0.5, 0.75, 0.75, 1} + + self.school_colors = { + [1] = {1.00, 1.00, 0.00}, + [2] = {1.00, 0.90, 0.50}, + [4] = {1.00, 0.50, 0.00}, + [8] = {0.30, 1.00, 0.30}, + [16] = {0.50, 1.00, 1.00}, + [32] = {0.50, 0.50, 1.00}, + [64] = {1.00, 0.50, 1.00}, + ["unknown"] = {0.5, 0.75, 0.75, 1} + } --> single click row function replace --damage, dps, damage taken, friendly fire - self.row_singleclick_overwrite [1] = {true, true, true, true, self.atributo_damage.ReportSingleFragsLine, true} + self.row_singleclick_overwrite [1] = {true, true, true, true, self.atributo_damage.ReportSingleFragsLine, true, self.atributo_damage.ReportSingleVoidZoneLine} --healing, hps, overheal, healing taken self.row_singleclick_overwrite [2] = {true, true, true, true, false, self.atributo_heal.ReportSingleDamagePreventedLine} --mana, rage, energy, runepower