- Pet dispell and interrupts count for the owner too.

- More fixes for comparison panel.
This commit is contained in:
tercio
2014-06-10 14:39:50 -03:00
parent e2d2910944
commit 73c62f0626
5 changed files with 240 additions and 41 deletions
+1 -1
View File
@@ -8,7 +8,7 @@
_ = nil
_detalhes = LibStub("AceAddon-3.0"):NewAddon("_detalhes", "AceTimer-3.0", "AceComm-3.0", "AceSerializer-3.0", "NickTag-1.0", "LibHotCorners")
_detalhes.userversion = "v1.16.0"
_detalhes.userversion = "v1.16.1"
_detalhes.version = "Alpha 019"
_detalhes.realversion = 19
+132 -32
View File
@@ -952,7 +952,7 @@ function atributo_misc:ToolTipDispell (instancia, numero, barra)
for _spellid, _tabela in _pairs (habilidades) do
meus_dispells [#meus_dispells+1] = {_spellid, _tabela.dispell}
end
_table_sort (meus_dispells, function(a, b) return a[2] > b[2] end)
_table_sort (meus_dispells, _detalhes.Sort2)
_detalhes:AddTooltipSpellHeaderText (Loc ["STRING_SPELLS"], headerColor, r, g, b, #meus_dispells)
@@ -976,7 +976,7 @@ function atributo_misc:ToolTipDispell (instancia, numero, barra)
for _spellid, amt in _pairs (self.dispell_oque) do
buffs_dispelados [#buffs_dispelados+1] = {_spellid, amt}
end
_table_sort (buffs_dispelados, function(a, b) return a[2] > b[2] end)
_table_sort (buffs_dispelados, _detalhes.Sort2)
_detalhes:AddTooltipSpellHeaderText (Loc ["STRING_DISPELLED"], headerColor, r, g, b, #buffs_dispelados)
@@ -1026,6 +1026,59 @@ function atributo_misc:ToolTipDispell (instancia, numero, barra)
end
end
--> Pet
local meus_pets = self.pets
if (#meus_pets > 0) then --> teve ajudantes
local quantidade = {} --> armazena a quantidade de pets iguais
local interrupts = {} --> armazena as habilidades
local alvos = {} --> armazena os alvos
local totais = {} --> armazena o dano total de cada objeto
for index, nome in _ipairs (meus_pets) do
if (not quantidade [nome]) then
quantidade [nome] = 1
local my_self = instancia.showing[class_type]:PegarCombatente (nil, nome)
if (my_self) then
totais [#totais+1] = {nome, my_self.dispell}
end
else
quantidade [nome] = quantidade [nome]+1
end
end
local _quantidade = 0
local added_logo = false
_table_sort (totais, _detalhes.Sort2)
local ismaximized = false
if (keydown == "alt" or TooltipMaximizedMethod == 2 or TooltipMaximizedMethod == 5) then
ismaximized = true
end
for index, _table in _ipairs (totais) do
if (_table [2] > 0 and (index < 3 or ismaximized)) then
if (not added_logo) then
added_logo = true
_detalhes:AddTooltipSpellHeaderText (Loc ["STRING_PETS"], headerColor, r, g, b, #totais)
GameCooltip:AddIcon ([[Interface\COMMON\friendship-heart]], 1, 1, 14, 14, 0.21875, 0.78125, 0.09375, 0.6875)
GameCooltip:AddStatusBar (100, 1, r, g, b, barAlha)
end
local n = _table [1]:gsub (("%s%<.*"), "")
GameCooltip:AddLine (n, _table [2] .. " (" .. _math_floor (_table [2]/self.dispell*100) .. "%)")
_detalhes:AddTooltipBackgroundStatusbar()
GameCooltip:AddIcon ([[Interface\AddOns\Details\images\classes_small]], 1, 1, 14, 14, 0.25, 0.49609375, 0.75, 1)
end
end
end
return true
end
@@ -1367,7 +1420,7 @@ function atributo_misc:ToolTipDefensiveCooldowns (instancia, numero, barra)
for _spellid, _tabela in _pairs (minha_tabela) do
cooldowns_usados [#cooldowns_usados+1] = {_spellid, _tabela.counter}
end
_table_sort (cooldowns_usados, function(a, b) return a[2] > b[2] end)
_table_sort (cooldowns_usados, _detalhes.Sort2)
_detalhes:AddTooltipSpellHeaderText (Loc ["STRING_SPELLS"], headerColor, r, g, b, #cooldowns_usados)
GameCooltip:AddIcon ([[Interface\ICONS\Ability_Warrior_Safeguard]], 1, 1, 14, 14, 0.9375, 0.078125, 0.078125, 0.953125)
@@ -1392,7 +1445,7 @@ function atributo_misc:ToolTipDefensiveCooldowns (instancia, numero, barra)
for _, _tabela in _ipairs (meus_alvos) do
alvos [#alvos+1] = {_tabela.nome, _tabela.total}
end
_table_sort (alvos, function(a, b) return a[2] > b[2] end)
_table_sort (alvos, _detalhes.Sort2)
_detalhes:AddTooltipSpellHeaderText (Loc ["STRING_TARGETS"], headerColor, r, g, b, #alvos)
GameCooltip:AddIcon ([[Interface\ICONS\Ability_Warrior_DefensiveStance]], 1, 1, 14, 14, 0.9375, 0.125, 0.0625, 0.9375)
@@ -1443,7 +1496,7 @@ function atributo_misc:ToolTipRess (instancia, numero, barra)
for _spellid, _tabela in _pairs (minha_tabela) do
meus_ress [#meus_ress+1] = {_spellid, _tabela.ress}
end
_table_sort (meus_ress, function(a, b) return a[2] > b[2] end)
_table_sort (meus_ress, _detalhes.Sort2)
_detalhes:AddTooltipSpellHeaderText (Loc ["STRING_SPELLS"], headerColor, r, g, b, #meus_ress)
GameCooltip:AddIcon ([[Interface\ICONS\Ability_Paladin_BlessedMending]], 1, 1, 14, 14, 0.098125, 0.828125, 0.953125, 0.168125)
@@ -1468,7 +1521,7 @@ function atributo_misc:ToolTipRess (instancia, numero, barra)
for _, _tabela in _ipairs (meus_alvos) do
alvos [#alvos+1] = {_tabela.nome, _tabela.total}
end
_table_sort (alvos, function(a, b) return a[2] > b[2] end)
_table_sort (alvos, _detalhes.Sort2)
_detalhes:AddTooltipSpellHeaderText (Loc ["STRING_TARGETS"], headerColor, r, g, b, #alvos)
--GameCooltip:AddIcon ([[Interface\ICONS\Ability_DeathKnight_IcyGrip]], 1, 1, 14, 14, 0.9375, 0.078125, 0.953125, 0.078125)
@@ -1519,7 +1572,7 @@ function atributo_misc:ToolTipInterrupt (instancia, numero, barra)
for _spellid, _tabela in _pairs (minha_tabela) do
meus_interrupts [#meus_interrupts+1] = {_spellid, _tabela.counter}
end
_table_sort (meus_interrupts, function(a, b) return a[2] > b[2] end)
_table_sort (meus_interrupts, _detalhes.Sort2)
_detalhes:AddTooltipSpellHeaderText (Loc ["STRING_SPELLS"], headerColor, r, g, b, #meus_interrupts)
GameCooltip:AddIcon ([[Interface\ICONS\Ability_Warrior_PunishingBlow]], 1, 1, 14, 14, 0.9375, 0.078125, 0.078125, 0.953125)
@@ -1543,7 +1596,7 @@ function atributo_misc:ToolTipInterrupt (instancia, numero, barra)
for _spellid, amt in _pairs (self.interrompeu_oque) do
habilidades_interrompidas [#habilidades_interrompidas+1] = {_spellid, amt}
end
_table_sort (habilidades_interrompidas, function(a, b) return a[2] > b[2] end)
_table_sort (habilidades_interrompidas, _detalhes.Sort2)
_detalhes:AddTooltipSpellHeaderText (Loc ["STRING_SPELL_INTERRUPTED"] .. ":", headerColor, r, g, b, #habilidades_interrompidas)
GameCooltip:AddIcon ([[Interface\ICONS\Ability_Warrior_Sunder]], 1, 1, 14, 14, 0.078125, 0.9375, 0.128125, 0.913125)
@@ -1559,6 +1612,59 @@ function atributo_misc:ToolTipInterrupt (instancia, numero, barra)
end
end
--> Pet
local meus_pets = self.pets
if (#meus_pets > 0) then --> teve ajudantes
local quantidade = {} --> armazena a quantidade de pets iguais
local interrupts = {} --> armazena as habilidades
local alvos = {} --> armazena os alvos
local totais = {} --> armazena o dano total de cada objeto
for index, nome in _ipairs (meus_pets) do
if (not quantidade [nome]) then
quantidade [nome] = 1
local my_self = instancia.showing[class_type]:PegarCombatente (nil, nome)
if (my_self) then
totais [#totais+1] = {nome, my_self.interrupt}
end
else
quantidade [nome] = quantidade [nome]+1
end
end
local _quantidade = 0
local added_logo = false
_table_sort (totais, _detalhes.Sort2)
local ismaximized = false
if (keydown == "alt" or TooltipMaximizedMethod == 2 or TooltipMaximizedMethod == 5) then
ismaximized = true
end
for index, _table in _ipairs (totais) do
if (_table [2] > 0 and (index < 3 or ismaximized)) then
if (not added_logo) then
added_logo = true
_detalhes:AddTooltipSpellHeaderText (Loc ["STRING_PETS"], headerColor, r, g, b, #totais)
GameCooltip:AddIcon ([[Interface\COMMON\friendship-heart]], 1, 1, 14, 14, 0.21875, 0.78125, 0.09375, 0.6875)
GameCooltip:AddStatusBar (100, 1, r, g, b, barAlha)
end
local n = _table [1]:gsub (("%s%<.*"), "")
GameCooltip:AddLine (n, _table [2] .. " (" .. _math_floor (_table [2]/self.interrupt*100) .. "%)")
_detalhes:AddTooltipBackgroundStatusbar()
GameCooltip:AddIcon ([[Interface\AddOns\Details\images\classes_small]], 1, 1, 14, 14, 0.25, 0.49609375, 0.75, 1)
end
end
end
return true
end
@@ -1583,26 +1689,6 @@ end
------ Interrupt
function atributo_misc:MontaInfoInterrupt()
--[[
--> quais habilidades foram interrompidas
local habilidades_interrompidas = {}
for _spellid, amt in _pairs (self.interrompeu_oque) do
habilidades_interrompidas [#habilidades_interrompidas+1] = {_spellid, amt}
end
_table_sort (habilidades_interrompidas, function(a, b) return a[2] > b[2] end)
GameTooltip:AddLine ("Habilidades Interrompidas:")
if (#habilidades_interrompidas > 0) then
for i = 1, _math_min (3, #habilidades_interrompidas) do
local esta_habilidade = habilidades_interrompidas[i]
local nome_magia, _, icone_magia = _GetSpellInfo (esta_habilidade[1])
GameTooltip:AddDoubleLine (nome_magia..": ", esta_habilidade[2].." (".._cstr("%.1f", esta_habilidade[2]/meu_total*100).."%)", 1, 1, 1, 1, 1, 1)
GameTooltip:AddTexture (icone_magia)
end
end
--]]
local meu_total = self ["interrupt"]
local minha_tabela = self.interrupt_spell_tables._ActorTable
@@ -1611,12 +1697,26 @@ function atributo_misc:MontaInfoInterrupt()
local meus_interrupts = {}
--player
for _spellid, _tabela in _pairs (minha_tabela) do --> da foreach em cada spellid do container
local nome, _, icone = _GetSpellInfo (_spellid)
_table_insert (meus_interrupts, {_spellid, _tabela.counter, _tabela.counter/meu_total*100, nome, icone})
end
_table_sort (meus_interrupts, function(a, b) return a[2] > b[2] end)
--pet
local ActorPets = self.pets
local class_color = "FFDDDDDD"
for _, PetName in _ipairs (ActorPets) do
local PetActor = instancia.showing (class_type, PetName)
if (PetActor and PetActor.interrupt and PetActor.interrupt > 0) then
local PetSkillsContainer = PetActor.interrupt_spell_tables._ActorTable
for _spellid, _skill in _pairs (PetSkillsContainer) do --> da foreach em cada spellid do container
local nome, _, icone = _GetSpellInfo (_spellid)
_table_insert (meus_interrupts, {_spellid, _skill.counter, _skill.counter/meu_total*100, nome .. " (|c" .. class_color .. PetName:gsub ((" <.*"), "") .. "|r)", icone, PetActor})
end
end
end
_table_sort (meus_interrupts, _detalhes.Sort2)
local amt = #meus_interrupts
gump:JI_AtualizaContainerBarras (amt)
@@ -1684,7 +1784,7 @@ function atributo_misc:MontaInfoInterrupt()
for _, tabela in _pairs (self.interrupt_targets._ActorTable) do
meus_alvos [#meus_alvos+1] = {tabela.nome, tabela.total}
end
_table_sort (meus_alvos, function(a, b) return a[2] > b[2] end)
_table_sort (meus_alvos, _detalhes.Sort2)
local amt_alvos = #meus_alvos
if (amt_alvos < 1) then
@@ -1776,7 +1876,7 @@ function atributo_misc:MontaDetalhesInterrupt (spellid, barra)
for spellid, amt in pairs (esta_magia.interrompeu_oque) do
habilidades_alvos [#habilidades_alvos+1] = {spellid, amt}
end
_table_sort (habilidades_alvos, function(a, b) return a[2] > b[2] end)
_table_sort (habilidades_alvos, _detalhes.Sort2)
local max_ = habilidades_alvos[1][2]
local barra
+92 -5
View File
@@ -395,7 +395,7 @@
------------------------------------------------------------------------------------------------
--> amount add
--> actor owner (if any)
if (meu_dono) then --> se for dano de um Pet
meu_dono.total = meu_dono.total + amount --> e adiciona o dano ao pet
@@ -1597,8 +1597,7 @@
este_jogador.interrupt_targets.shadow = este_jogador.shadow.interrupt_targets
este_jogador.interrupt_spell_tables.shadow = este_jogador.shadow.interrupt_spell_tables
end
end
------------------------------------------------------------------------------------------------
--> add amount
@@ -1638,7 +1637,50 @@
if (not spell) then
spell = este_jogador.interrupt_spell_tables:PegaHabilidade (spellid, true, token)
end
return spell:Add (alvo_serial, alvo_name, alvo_flags, who_name, token, extraSpellID, extraSpellName)
spell:Add (alvo_serial, alvo_name, alvo_flags, who_name, token, extraSpellID, extraSpellName)
--> verifica se tem dono e adiciona o interrupt para o dono
if (meu_dono) then
if (not meu_dono.interrupt) then
meu_dono.interrupt = 0
meu_dono.interrupt_targets = container_combatentes:NovoContainer (container_damage_target) --> pode ser um container de alvo de dano, pois irá usar apenas o .total
meu_dono.interrupt_spell_tables = container_habilidades:NovoContainer (container_misc) --> cria o container das habilidades usadas para interromper
meu_dono.interrompeu_oque = {}
if (not meu_dono.shadow.interrupt_targets) then
meu_dono.shadow.interrupt = 0
meu_dono.shadow.interrupt_targets = container_combatentes:NovoContainer (container_damage_target) --> pode ser um container de alvo de dano, pois irá usar apenas o .total
meu_dono.shadow.interrupt_spell_tables = container_habilidades:NovoContainer (container_misc) --> cria o container das habilidades usadas para interromper
meu_dono.shadow.interrompeu_oque = {}
end
meu_dono.interrupt_targets.shadow = meu_dono.shadow.interrupt_targets
meu_dono.interrupt_spell_tables.shadow = meu_dono.shadow.interrupt_spell_tables
end
-- adiciona ao total
meu_dono.interrupt = meu_dono.interrupt + 1
-- adiciona aos alvos
local este_alvo = meu_dono.interrupt_targets._NameIndexTable [alvo_name]
if (not este_alvo) then
este_alvo = meu_dono.interrupt_targets:PegarCombatente (alvo_serial, alvo_name, alvo_flags, true)
else
este_alvo = meu_dono.interrupt_targets._ActorTable [este_alvo]
end
este_alvo.total = este_alvo.total + 1
-- update last event
meu_dono.last_event = _tempo
-- spells interrupted
if (not meu_dono.interrompeu_oque [extraSpellID]) then
meu_dono.interrompeu_oque [extraSpellID] = 1
else
meu_dono.interrompeu_oque [extraSpellID] = meu_dono.interrompeu_oque [extraSpellID] + 1
end
end
end
@@ -1846,7 +1888,52 @@
if (not spell) then
spell = este_jogador.dispell_spell_tables:PegaHabilidade (spellid, true, token)
end
return spell:Add (alvo_serial, alvo_name, alvo_flags, who_name, token, extraSpellID, extraSpellName)
spell:Add (alvo_serial, alvo_name, alvo_flags, who_name, token, extraSpellID, extraSpellName)
--> verifica se tem dono e adiciona o interrupt para o dono
if (meu_dono) then
if (not meu_dono.dispell) then
--> constrói aqui a tabela dele
meu_dono.dispell = 0
meu_dono.dispell_targets = container_combatentes:NovoContainer (container_damage_target)
meu_dono.dispell_spell_tables = container_habilidades:NovoContainer (container_misc)
meu_dono.dispell_oque = {}
if (not meu_dono.shadow.dispell_targets) then
meu_dono.shadow.dispell = 0
meu_dono.shadow.dispell_targets = container_combatentes:NovoContainer (container_damage_target)
meu_dono.shadow.dispell_spell_tables = container_habilidades:NovoContainer (container_misc)
meu_dono.shadow.dispell_oque = {}
end
meu_dono.dispell_targets.shadow = meu_dono.shadow.dispell_targets
meu_dono.dispell_spell_tables.shadow = meu_dono.shadow.dispell_spell_tables
end
-- adiciona ao total
meu_dono.dispell = meu_dono.dispell + 1
-- adiciona aos alvos
local este_alvo = meu_dono.dispell_targets._NameIndexTable [alvo_name]
if (not este_alvo) then
este_alvo = meu_dono.dispell_targets:PegarCombatente (alvo_serial, alvo_name, alvo_flags, true)
else
este_alvo = meu_dono.dispell_targets._ActorTable [este_alvo]
end
este_alvo.total = este_alvo.total + 1
-- update last event
meu_dono.last_event = _tempo
-- spells interrupted
if (not meu_dono.dispell_oque [extraSpellID]) then
meu_dono.dispell_oque [extraSpellID] = 1
else
meu_dono.dispell_oque [extraSpellID] = meu_dono.dispell_oque [extraSpellID] + 1
end
end
end
--serach key: ~ress
+14 -2
View File
@@ -1655,7 +1655,11 @@ function gump:CriaJanelaInfo()
player_2_target_pool [#player_2_target_pool+1] = {target.nome, target.total}
end
table.sort (player_2_target_pool, function (t1, t2) return t1[2] > t2[2] end)
player_2_top = player_2_target_pool [1] [2]
if (player_2_target_pool [1]) then
player_2_top = player_2_target_pool [1] [2]
else
player_2_top = 0
end
--1 skill,
end
@@ -1670,7 +1674,11 @@ function gump:CriaJanelaInfo()
player_3_target_pool [#player_3_target_pool+1] = {target.nome, target.total}
end
table.sort (player_3_target_pool, function (t1, t2) return t1[2] > t2[2] end)
player_3_top = player_3_target_pool [1] [2]
if (player_3_target_pool [1]) then
player_3_top = player_3_target_pool [1] [2]
else
player_3_top = 0
end
end
for i = 1, 4 do
@@ -2751,6 +2759,10 @@ function gump:CriaJanelaInfo()
_detalhes:CreatePlayerDetailsTab ("Compare", --[1] tab name
function (tabOBject, playerObject) --[2] condition
if (info.atributo > 2) then
return false
end
local same_class = {}
local class = playerObject.classe
local my_spells = {}
File diff suppressed because one or more lines are too long