More spell reflection implementations

- added reflected spells in the player tooltip.
- added reflected spell in the player details window.
- reflection spells like Warrior's Spell Reflection now has a new spell school called "Reflection".
- soft tooltips and player details window improvements.
- damage spell object now has the member 'extra' which is a table that can store hash data.
- profile.tooltip.tooltip_max_abilities won't be forced to 6 any more, to set your own amount of spells shown on tooltips use:
/run Details.tooltip.tooltip_max_abilities = number;
This commit is contained in:
Tercio Jose
2020-06-01 20:51:48 -03:00
parent b9be3bbf39
commit fedfe341a3
12 changed files with 309 additions and 171 deletions
+1 -1
View File
@@ -1621,7 +1621,7 @@ function DF:CreateCoolTip()
--> height
if (CoolTip.OptionsTable.AlignAsBlizzTooltip) then
local height = _math_max (8, menuButton.leftText:GetStringHeight(), menuButton.rightText:GetStringHeight(), menuButton.leftIcon:GetHeight(), menuButton.rightIcon:GetHeight())
local height = _math_max (2, menuButton.leftText:GetStringHeight(), menuButton.rightText:GetStringHeight(), menuButton.leftIcon:GetHeight(), menuButton.rightIcon:GetHeight(), CoolTip.OptionsTable.AlignAsBlizzTooltipForceHeight or 2)
menuButton:SetHeight (height)
menuButton:SetPoint ("top", frame1, "top", 0, temp)
temp = temp + ( height * -1)
+1 -1
View File
@@ -1,5 +1,5 @@
local dversion = 183
local dversion = 184
local major, minor = "DetailsFramework-1.0", dversion
local DF, oldminor = LibStub:NewLibrary (major, minor)
+2 -2
View File
@@ -8,7 +8,7 @@
_detalhes.alpha_build_counter = 7334 --if this is higher than the regular counter, use it instead
_detalhes.game_version = "v8.3.0"
_detalhes.userversion = "v8.3.0." .. _detalhes.build_counter
_detalhes.realversion = 140 --core version, this is used to check API version for scripts and plugins (see alias below)
_detalhes.realversion = 141 --core version, this is used to check API version for scripts and plugins (see alias below)
_detalhes.APIVersion = _detalhes.realversion --core version
_detalhes.version = _detalhes.userversion .. " (core " .. _detalhes.realversion .. ")" --simple stirng to show to players
@@ -19,7 +19,7 @@
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--> initialization stuff
do
do
--local f = CreateFrame("frame")
--f:SetSize(300, 300)
+141 -61
View File
@@ -2895,7 +2895,7 @@ function atributo_damage:ToolTip_DamageDone (instancia, numero, barra, keydown)
--> TOP HABILIDADES
--get variables
local ActorDamage = self.total_without_pet --mostrando os pets no tooltip
--local ActorDamage = self.total_without_pet --mostrando os pets no tooltip
local ActorDamage = self.total
local ActorDamageWithPet = self.total
if (ActorDamage == 0) then
@@ -2903,6 +2903,8 @@ function atributo_damage:ToolTip_DamageDone (instancia, numero, barra, keydown)
end
local ActorSkillsContainer = self.spells._ActorTable
local ActorSkillsSortTable = {}
local reflectionSpells = {}
--get time type
local meu_tempo
@@ -2911,11 +2913,15 @@ function atributo_damage:ToolTip_DamageDone (instancia, numero, barra, keydown)
elseif (_detalhes.time_type == 2) then
meu_tempo = instancia.showing:GetCombatTime()
end
--add actor spells
for _spellid, _skill in _pairs (ActorSkillsContainer) do
ActorSkillsSortTable [#ActorSkillsSortTable+1] = {_spellid, _skill.total, _skill.total/meu_tempo}
if (_skill.isReflection) then
reflectionSpells[#reflectionSpells+1] = _skill
end
end
--add actor pets
for petIndex, petName in _ipairs (self:Pets()) do
local petActor = instancia.showing[class_type]:PegarCombatente (nil, petName)
@@ -2941,9 +2947,6 @@ function atributo_damage:ToolTip_DamageDone (instancia, numero, barra, keydown)
--tooltip stuff
local tooltip_max_abilities = _detalhes.tooltip.tooltip_max_abilities
if (instancia.sub_atributo == 2) then
tooltip_max_abilities = 6
end
local is_maximized = false
if (keydown == "shift" or TooltipMaximizedMethod == 2 or TooltipMaximizedMethod == 3) then
@@ -2991,17 +2994,42 @@ function atributo_damage:ToolTip_DamageDone (instancia, numero, barra, keydown)
GameCooltip:AddLine (nome_magia, FormatTooltipNumber (_, _math_floor (totalDPS)) .." (".._cstr("%.1f", totalDamage/ActorDamage*100).."%)")
end
GameCooltip:AddIcon (icone_magia, nil, nil, icon_size.W, icon_size.H, icon_border.L, icon_border.R, icon_border.T, icon_border.B)
GameCooltip:AddIcon (icone_magia, nil, nil, icon_size.W + 4, icon_size.H + 4, icon_border.L, icon_border.R, icon_border.T, icon_border.B)
_detalhes:AddTooltipBackgroundStatusbar (false, totalDamage/topAbility*100)
end
else
GameCooltip:AddLine (Loc ["STRING_NO_SPELL"])
end
--> spell reflected
if (#reflectionSpells > 0) then
--small blank space
_detalhes:AddTooltipSpellHeaderText ("", headerColor, 1, false, 0.1, 0.9, 0.1, 0.9, true) --add a space
_detalhes:AddTooltipSpellHeaderText ("Spells Reflected", headerColor, 1, select(3, _GetSpellInfo(reflectionSpells[1].id)), 0.1, 0.9, 0.1, 0.9) --localize-me
_detalhes:AddTooltipHeaderStatusbar (r, g, b, barAlha)
for i = 1, #reflectionSpells do
local _spell = reflectionSpells[i]
local extraInfo = _spell.extra
for spellId, damageDone in pairs(extraInfo) do
local spellName, _, spellIcon = _GetSpellInfo(spellId)
if (spellName) then
GameCooltip:AddLine (spellName, FormatTooltipNumber (_, damageDone) .. " (" .. _math_floor (damageDone / self.total * 100) .. "%)")
_detalhes:AddTooltipBackgroundStatusbar (false, damageDone / self.total * 100)
GameCooltip:AddIcon (spellIcon, 1, 1, icon_size.W, icon_size.H, 0.1, 0.9, 0.1, 0.9)
end
end
end
end
--> MOSTRA INIMIGOS
local topEnemy = ActorTargetsSortTable [1] and ActorTargetsSortTable [1][2] or 0
if (instancia.sub_atributo == 1 or instancia.sub_atributo == 6) then
--small blank space
_detalhes:AddTooltipSpellHeaderText ("", headerColor, 1, false, 0.1, 0.9, 0.1, 0.9, true)
_detalhes:AddTooltipSpellHeaderText (Loc ["STRING_TARGETS"], headerColor, #ActorTargetsSortTable, [[Interface\Addons\Details\images\icons]], 0, 0.03125, 0.126953125, 0.15625)
local max_targets = _detalhes.tooltip.tooltip_max_targets
@@ -3038,6 +3066,9 @@ function atributo_damage:ToolTip_DamageDone (instancia, numero, barra, keydown)
local alvos = {} --> armazena os alvos
local totais = {} --> armazena o dano total de cada objeto
--small blank space
_detalhes:AddTooltipSpellHeaderText ("", headerColor, 1, false, 0.1, 0.9, 0.1, 0.9, true)
for index, nome in _ipairs (meus_pets) do
if (not quantidade [nome]) then
quantidade [nome] = 1
@@ -3134,10 +3165,10 @@ function atributo_damage:ToolTip_DamageDone (instancia, numero, barra, keydown)
if (bossInfo and phasesInfo) then
if (#phasesInfo > 1) then
--_detalhes:AddTooltipSpellHeaderText ("Phases", headerColor, 1, [[Interface\Garrison\MobileAppIcons]], 2*130/1024, 3*130/1024, 5*130/1024, 6*130/1024)
--_detalhes:AddTooltipSpellHeaderText ("Phases", headerColor, 1, [[Interface\Garrison\orderhall-missions-mechanic10]], 0, 1, 0, 1)
--small blank space
_detalhes:AddTooltipSpellHeaderText ("", headerColor, 1, false, 0.1, 0.9, 0.1, 0.9, true)
_detalhes:AddTooltipSpellHeaderText ("Damage by Encounter Phase", headerColor, 1, [[Interface\Garrison\orderhall-missions-mechanic8]], 11/64, 53/64, 11/64, 53/64) --localize-me
--GameCooltip:AddIcon ([[Interface\AddOns\Details\images\key_shift]], 1, 2, _detalhes.tooltip_key_size_width, _detalhes.tooltip_key_size_height, 0, 1, 0, 0.640625, _detalhes.tooltip_key_overlay1)
_detalhes:AddTooltipHeaderStatusbar (r, g, b, barAlha)
local playerPhases = {}
@@ -3174,7 +3205,7 @@ function atributo_damage:ToolTip_DamageDone (instancia, numero, barra, keydown)
end
end
end
return true
end
@@ -3649,7 +3680,7 @@ end
--------------------------------------------- // JANELA DETALHES // ---------------------------------------------
---------> DETALHES BIFURCAO
---------> DETALHES BIFURCAO ~detalhes ~detailswindow
function atributo_damage:MontaInfo()
if (info.sub_atributo == 1 or info.sub_atributo == 2 or info.sub_atributo == 6) then --> damage done & dps
return self:MontaInfoDamageDone()
@@ -4239,12 +4270,12 @@ function atributo_damage:MontaInfoDamageDone()
if (barra.mouse_over) then --> atualizar o tooltip
if (barra.isAlvo) then
GameTooltip:Hide()
GameTooltip:SetOwner (barra, "ANCHOR_TOPRIGHT")
--GameTooltip:Hide()
--GameTooltip:SetOwner (barra, "ANCHOR_TOPRIGHT")
if (not barra.minha_tabela:MontaTooltipAlvos (barra, index, instancia)) then
return
end
GameTooltip:Show()
--GameTooltip:Show()
end
end
@@ -4895,34 +4926,48 @@ function atributo_damage:MontaTooltipDamageTaken (esta_barra, index)
end
local targets_tooltips_table = {}
function atributo_damage:MontaTooltipAlvos (esta_barra, index, instancia)
local inimigo = esta_barra.nome_inimigo
local habilidades = targets_tooltips_table
for i = 1, #habilidades do
local t = habilidades [i]
t[1], t[2], t[3] = "", 0, "" --name, total, icon
end
local habilidades = {}
local total = self.total
local i = 1
_detalhes:FormatCooltipForSpells()
GameCooltip:SetOwner(esta_barra, "bottom", "top", 4, -2)
GameCooltip:SetOption ("MinWidth", _math_max (230, esta_barra:GetWidth()*0.98))
for spellid, spell in _pairs (self.spells._ActorTable) do
for target_name, amount in _pairs (spell.targets) do
if (target_name == inimigo) then
local nome, _, icone = _GetSpellInfo (spellid)
local t = habilidades [i]
if (not t) then
habilidades [i] = {}
t = habilidades [i]
if (spell.isReflection) then
for target_name, amount in _pairs (spell.targets) do
if (target_name == inimigo) then
for reflectedSpellId, amount in _pairs (spell.extra) do
local spellName, _, spellIcon = _GetSpellInfo(reflectedSpellId)
local t = habilidades [i]
if (not t) then
habilidades [i] = {}
t = habilidades [i]
end
t[1], t[2], t[3] = spellName .. " (|cFFCCBBBBreflected|r)", amount, spellIcon
i = i + 1
end
end
end
else
for target_name, amount in _pairs (spell.targets) do
if (target_name == inimigo) then
local nome, _, icone = _GetSpellInfo (spellid)
local t = habilidades [i]
if (not t) then
habilidades [i] = {}
t = habilidades [i]
end
t[1], t[2], t[3] = nome, amount, icone
i = i + 1
end
t[1], t[2], t[3] = nome, amount, icone
i = i + 1
end
end
end
@@ -4967,35 +5012,39 @@ function atributo_damage:MontaTooltipAlvos (esta_barra, index, instancia)
local is_dps = info.instancia.sub_atributo == 2
if (is_dps) then
GameTooltip:AddLine (index..". "..inimigo)
GameTooltip:AddLine (Loc ["STRING_DAMAGE_DPS_IN"] .. ":")
GameTooltip:AddLine (" ")
_detalhes:AddTooltipSpellHeaderText (Loc ["STRING_DAMAGE_DPS_IN"] .. ":", {1, 0.9, 0.0, 1}, 1, _detalhes.tooltip_spell_icon.file, unpack (_detalhes.tooltip_spell_icon.coords))
_detalhes:AddTooltipHeaderStatusbar (1, 1, 1, 1)
else
GameTooltip:AddLine (index..". "..inimigo)
GameTooltip:AddLine (Loc ["STRING_DAMAGE_FROM"] .. ":")
GameTooltip:AddLine (" ")
_detalhes:AddTooltipSpellHeaderText (Loc ["STRING_DAMAGE_FROM"] .. ":", {1, 0.9, 0.0, 1}, 1, _detalhes.tooltip_spell_icon.file, unpack (_detalhes.tooltip_spell_icon.coords))
_detalhes:AddTooltipHeaderStatusbar (1, 1, 1, 1)
end
for index, tabela in _ipairs (habilidades) do
if (tabela [2] < 1) then
break
end
if (index < 8) then
if (is_dps) then
GameTooltip:AddDoubleLine (index..". |T"..tabela[3]..":0|t "..tabela[1], _detalhes:comma_value ( _math_floor (tabela[2] / meu_tempo) ).." (".._cstr("%.1f", tabela[2]/total*100).."%)", 1, 1, 1, 1, 1, 1)
else
GameTooltip:AddDoubleLine (index..". |T"..tabela[3]..":0|t " .. tabela[1], SelectedToKFunction (_, tabela[2]) .. " (".._cstr("%.1f", tabela[2]/total*100).."%)", 1, 1, 1, 1, 1, 1)
local icon_size = _detalhes.tooltip.icon_size
local icon_border = _detalhes.tooltip.icon_border_texcoord
local topSpellDamage = habilidades[1] and habilidades[1][2]
if (topSpellDamage) then
for index, tabela in _ipairs (habilidades) do
if (tabela [2] < 1) then
break
end
else
if (is_dps) then
GameTooltip:AddDoubleLine (index..". "..tabela[1], _detalhes:comma_value ( _math_floor (tabela[2] / meu_tempo) ).." (".._cstr("%.1f", tabela[2]/total*100).."%)", .65, .65, .65, .65, .65, .65)
--GameCooltip:AddDoubleLine (index..". |T"..tabela[3]..":0|t "..tabela[1], _detalhes:comma_value ( _math_floor (tabela[2] / meu_tempo) ).." (".._cstr("%.1f", tabela[2]/total*100).."%)", 1, 1, 1, 1, 1, 1)
GameCooltip:AddLine (tabela[1], _detalhes:comma_value ( _math_floor (tabela[2] / meu_tempo) ).." (".._cstr("%.1f", tabela[2]/total*100).."%)")
else
GameTooltip:AddDoubleLine (index..". "..tabela[1], SelectedToKFunction (_, tabela[2]).." (".._cstr("%.1f", tabela[2]/total*100).."%)", .65, .65, .65, .65, .65, .65)
--GameCooltip:AddDoubleLine (index..". |T"..tabela[3]..":0|t " .. tabela[1], SelectedToKFunction (_, tabela[2]) .. " (".._cstr("%.1f", tabela[2]/total*100).."%)", 1, 1, 1, 1, 1, 1)
GameCooltip:AddLine (tabela[1], SelectedToKFunction (_, tabela[2]) .. " (".._cstr("%.1f", tabela[2]/total*100).."%)")
end
GameCooltip:AddIcon (tabela[3], nil, nil, icon_size.W + 4, icon_size.H + 4, icon_border.L, icon_border.R, icon_border.T, icon_border.B)
_detalhes:AddTooltipBackgroundStatusbar (false, tabela[2] / topSpellDamage * 100)
end
end
GameCooltip:Show()
return true
@@ -5107,14 +5156,21 @@ end
for spellid, habilidade in _pairs (actor.spells._ActorTable) do
--> cria e soma o valor
local habilidade_shadow = shadow.spells:PegaHabilidade (spellid, true, nil, true)
--> refresh e soma os valores dos alvos
--> create the target value
for target_name, amount in _pairs (habilidade.targets) do
--> cria e soma o valor do total
if (not habilidade_shadow.targets [target_name]) then
habilidade_shadow.targets [target_name] = 0
end
end
--> create the extra value
for spellId, amount in _pairs (habilidade.extra) do
if (not habilidade_shadow.extra [spellId]) then
habilidade_shadow.extra [spellId] = 0
end
end
end
--> copia o container de friendly fire (captura de dados)
@@ -5224,10 +5280,17 @@ end
for spellid, habilidade in _pairs (actor.spells._ActorTable) do
--> cria e soma o valor
local habilidade_shadow = shadow.spells:PegaHabilidade (spellid, true, nil, true)
--> refresh e soma os valores dos alvos
for target_name, amount in _pairs (habilidade.targets) do
habilidade_shadow.targets [target_name] = (habilidade_shadow.targets [target_name] or 0) + amount
end
--> refresh and add extra values
for spellId, amount in _pairs (habilidade.extra) do
habilidade_shadow.extra [spellId] = (habilidade_shadow.extra [spellId] or 0) + amount
end
--> soma todos os demais valores
for key, value in _pairs (habilidade) do
if (_type (value) == "number") then
@@ -5322,10 +5385,17 @@ atributo_damage.__add = function (tabela1, tabela2)
for spellid, habilidade in _pairs (tabela2.spells._ActorTable) do
--> pega a habilidade no primeiro ator
local habilidade_tabela1 = tabela1.spells:PegaHabilidade (spellid, true, "SPELL_DAMAGE", false)
--> soma os alvos
for target_name, amount in _pairs (habilidade.targets) do
habilidade_tabela1.targets = (habilidade_tabela1.targets [target_name] or 0) + amount
end
--> soma os extras
for spellId, amount in _pairs (habilidade.extra) do
habilidade_tabela1.extra = (habilidade_tabela1.extra [spellId] or 0) + amount
end
--> soma os valores da habilidade
for key, value in _pairs (habilidade) do
if (_type (value) == "number") then
@@ -5401,15 +5471,25 @@ atributo_damage.__sub = function (tabela1, tabela2)
--> reduz o container de habilidades
for spellid, habilidade in _pairs (tabela2.spells._ActorTable) do
--> pega a habilidade no primeiro ator
--> get the spell from the first actor
local habilidade_tabela1 = tabela1.spells:PegaHabilidade (spellid, true, "SPELL_DAMAGE", false)
--> soma os alvos
for target_name, amount in _pairs (habilidade.targets._ActorTable) do
--> subtract targets
for target_name, amount in _pairs (habilidade.targets) do
local alvo_tabela1 = habilidade_tabela1.targets [target_name]
if (alvo_tabela1) then
habilidade_tabela1.targets [target_name] = habilidade_tabela1.targets [target_name] - amount
end
end
--> subtract extra table
for spellId, amount in _pairs (habilidade.extra) do
local extra_tabela1 = habilidade_tabela1.extra [spellId]
if (extra_tabela1) then
habilidade_tabela1.extra [spellId] = habilidade_tabela1.extra [spellId] - amount
end
end
--> subtrai os valores da habilidade
for key, value in _pairs (habilidade) do
if (_type (value) == "number") then
+45 -50
View File
@@ -32,7 +32,7 @@
id = id, --spellid
successful_casted = 0, --successful casted times (only for enemies)
--> multistrike
--> multistrike (deprecated)
m_amt = 0,
m_dmg = 0,
m_crit = 0,
@@ -68,7 +68,8 @@
a_amt = 0,
a_dmg = 0,
targets = {}
targets = {},
extra = {}
}
if (token == "SPELL_PERIODIC_DAMAGE") then
@@ -85,66 +86,60 @@
self.targets [nome] = self.targets [nome] or 0
end
function habilidade_dano:Add (serial, nome, flag, amount, who_nome, resisted, blocked, absorbed, critical, glacing, token, isoffhand)
function habilidade_dano:Add (serial, nome, flag, amount, who_nome, resisted, blocked, absorbed, critical, glacing, token, isoffhand, isreflected)
self.total = self.total + amount
--if is reflected add the spellId into the extra table
--this is too show which spells has been reflected
if (isreflected) then
self.extra [isreflected] = (self.extra [isreflected] or 0) + amount
end
self.targets [nome] = (self.targets [nome] or 0) + amount
if (multistrike) then
self.counter = self.counter + 1
if (resisted and resisted > 0) then
self.r_dmg = self.r_dmg+amount --> tabela.total o total de dano
self.r_amt = self.r_amt+1 --> tabela.total o total de dano
end
self.m_amt = self.m_amt + 1
self.m_dmg = self.m_dmg + amount
if (critical) then
self.m_crit = self.m_crit + 1
if (blocked and blocked > 0) then
self.b_dmg = self.b_dmg+amount --> amount o total de dano
self.b_amt = self.b_amt+1 --> amount o total de dano
end
if (absorbed and absorbed > 0) then
self.a_dmg = self.a_dmg+amount --> amount o total de dano
self.a_amt = self.a_amt+1 --> amount o total de dano
end
if (glacing) then
self.g_dmg = self.g_dmg+amount --> amount o total de dano
self.g_amt = self.g_amt+1 --> amount o total de dano
elseif (critical) then
self.c_dmg = self.c_dmg+amount --> amount o total de dano
self.c_amt = self.c_amt+1 --> amount o total de dano
if (amount > self.c_max) then
self.c_max = amount
end
if (self.c_min > amount or self.c_min == 0) then
self.c_min = amount
end
else
self.counter = self.counter + 1
if (resisted and resisted > 0) then
self.r_dmg = self.r_dmg+amount --> tabela.total o total de dano
self.r_amt = self.r_amt+1 --> tabela.total o total de dano
self.n_dmg = self.n_dmg+amount
self.n_amt = self.n_amt+1
if (amount > self.n_max) then
self.n_max = amount
end
if (blocked and blocked > 0) then
self.b_dmg = self.b_dmg+amount --> amount o total de dano
self.b_amt = self.b_amt+1 --> amount o total de dano
if (self.n_min > amount or self.n_min == 0) then
self.n_min = amount
end
if (absorbed and absorbed > 0) then
self.a_dmg = self.a_dmg+amount --> amount o total de dano
self.a_amt = self.a_amt+1 --> amount o total de dano
end
if (glacing) then
self.g_dmg = self.g_dmg+amount --> amount o total de dano
self.g_amt = self.g_amt+1 --> amount o total de dano
elseif (critical) then
self.c_dmg = self.c_dmg+amount --> amount o total de dano
self.c_amt = self.c_amt+1 --> amount o total de dano
if (amount > self.c_max) then
self.c_max = amount
end
if (self.c_min > amount or self.c_min == 0) then
self.c_min = amount
end
else
self.n_dmg = self.n_dmg+amount
self.n_amt = self.n_amt+1
if (amount > self.n_max) then
self.n_max = amount
end
if (self.n_min > amount or self.n_min == 0) then
self.n_min = amount
end
end
end
if (_recording_ability_with_buffs) then
if (who_nome == _detalhes.playername) then --aqui ele vai detalhar tudo sobre a magia usada
+4 -6
View File
@@ -1390,7 +1390,7 @@ function atributo_heal:ToolTip_HealingDone (instancia, numero, barra, keydown)
end
GameCooltip:AddIcon (ActorHealingTable[i][4][3], nil, nil, icon_size.W, icon_size.H, icon_border.L, icon_border.R, icon_border.T, icon_border.B)
GameCooltip:AddIcon (ActorHealingTable[i][4][3], nil, nil, icon_size.W+4, icon_size.H+4, icon_border.L, icon_border.R, icon_border.T, icon_border.B)
_detalhes:AddTooltipBackgroundStatusbar (false, ActorHealingTable[i][2] / topAbility * 100)
end
@@ -1407,7 +1407,7 @@ function atributo_heal:ToolTip_HealingDone (instancia, numero, barra, keydown)
local topTarget = ActorHealingTargets [1] and ActorHealingTargets [1][2] or 0
if (instancia.sub_atributo == 1) then -- 1 or 2 -> healing done or hps
_detalhes:AddTooltipSpellHeaderText ("", headerColor, 1, false, 0.1, 0.9, 0.1, 0.9, true) --add a space
_detalhes:AddTooltipSpellHeaderText (Loc ["STRING_TARGETS"], headerColor, #ActorHealingTargets, [[Interface\TUTORIALFRAME\UI-TutorialFrame-LevelUp]], 0.10546875, 0.89453125, 0.05859375, 0.6796875)
local ismaximized = false
@@ -1504,6 +1504,7 @@ function atributo_heal:ToolTip_HealingDone (instancia, numero, barra, keydown)
if (not added_logo) then
added_logo = true
_detalhes:AddTooltipSpellHeaderText ("", headerColor, 1, false, 0.1, 0.9, 0.1, 0.9, true) --add a space
_detalhes:AddTooltipSpellHeaderText (Loc ["STRING_PETS"], headerColor, #totais, [[Interface\COMMON\friendship-heart]], 0.21875, 0.78125, 0.09375, 0.6875)
if (ismaximized) then
@@ -1540,11 +1541,8 @@ function atributo_heal:ToolTip_HealingDone (instancia, numero, barra, keydown)
local phasesInfo = segment:GetPhases()
if (bossInfo and phasesInfo) then
if (#phasesInfo > 1) then
--_detalhes:AddTooltipSpellHeaderText ("Phases", headerColor, 1, [[Interface\Garrison\MobileAppIcons]], 2*130/1024, 3*130/1024, 5*130/1024, 6*130/1024)
--_detalhes:AddTooltipSpellHeaderText ("Phases", headerColor, 1, [[Interface\Garrison\orderhall-missions-mechanic10]], 0, 1, 0, 1)
_detalhes:AddTooltipSpellHeaderText ("", headerColor, 1, false, 0.1, 0.9, 0.1, 0.9, true) --add a space
_detalhes:AddTooltipSpellHeaderText ("Healing by Encounter Phase", headerColor, 1, [[Interface\Garrison\orderhall-missions-mechanic8]], 11/64, 53/64, 11/64, 53/64)
--GameCooltip:AddIcon ([[Interface\AddOns\Details\images\key_shift]], 1, 2, _detalhes.tooltip_key_size_width, _detalhes.tooltip_key_size_height, 0, 1, 0, 0.640625, _detalhes.tooltip_key_overlay1)
_detalhes:AddTooltipHeaderStatusbar (r, g, b, barAlha)
local playerPhases = {}
+19 -7
View File
@@ -1578,7 +1578,14 @@
-- /run local a,b=_detalhes.tooltip.header_statusbar,0.3;a[1]=b;a[2]=b;a[3]=b;a[4]=0.8;
function _detalhes:AddTooltipSpellHeaderText (headerText, headerColor, amount, iconTexture, L, R, T, B)
function _detalhes:AddTooltipSpellHeaderText (headerText, headerColor, amount, iconTexture, L, R, T, B, separator)
if (separator and separator == true) then
GameCooltip:AddLine ("", "", nil, nil, 1, 1, 1, 1, 8)
return
end
if (_detalhes.tooltip.show_amount) then
GameCooltip:AddLine (headerText, "x" .. amount .. "", nil, headerColor, 1, 1, 1, .4, _detalhes.tooltip.fontsize_title)
else
@@ -1592,13 +1599,12 @@
local bgColor, borderColor = {0, 0, 0, 0.8}, {0, 0, 0, 0} --{0.37, 0.37, 0.37, .75}, {.30, .30, .30, .3}
function _detalhes:BuildInstanceBarTooltip (frame)
function _detalhes:FormatCooltipForSpells()
local GameCooltip = GameCooltip
GameCooltip:Reset()
GameCooltip:SetType ("tooltip")
GameCooltip:SetOption ("MinWidth", _math_max (230, self.baseframe:GetWidth()*0.98))
GameCooltip:SetOption ("StatusBarTexture", [[Interface\AddOns\Details\images\bar_background]])
GameCooltip:SetOption ("TextSize", _detalhes.tooltip.fontsize)
@@ -1607,16 +1613,22 @@
GameCooltip:SetOption ("TextColorRight", _detalhes.tooltip.fontcolor_right)
GameCooltip:SetOption ("TextShadow", _detalhes.tooltip.fontshadow and "OUTLINE")
GameCooltip:SetOption ("LeftBorderSize", -4)
GameCooltip:SetOption ("RightBorderSize", 4)
GameCooltip:SetOption ("LeftBorderSize", -5)
GameCooltip:SetOption ("RightBorderSize", 5)
GameCooltip:SetOption ("RightTextMargin", 0)
GameCooltip:SetOption ("VerticalOffset", 8)
GameCooltip:SetOption ("VerticalOffset", 9)
GameCooltip:SetOption ("AlignAsBlizzTooltip", true)
GameCooltip:SetOption ("AlignAsBlizzTooltipFrameHeightOffset", -8)
GameCooltip:SetOption ("LineHeightSizeOffset", 4)
GameCooltip:SetOption ("VerticalPadding", -4)
GameCooltip:SetBackdrop (1, _detalhes.cooltip_preset2_backdrop, bgColor, borderColor)
end
function _detalhes:BuildInstanceBarTooltip (frame)
local GameCooltip = GameCooltip
_detalhes:FormatCooltipForSpells()
GameCooltip:SetOption ("MinWidth", _math_max (230, self.baseframe:GetWidth()*0.98))
local myPoint = _detalhes.tooltip.anchor_point
local anchorPoint = _detalhes.tooltip.anchor_relative
+26 -13
View File
@@ -466,7 +466,7 @@
--]=]
function parser:spell_dmg (token, time, who_serial, who_name, who_flags, alvo_serial, alvo_name, alvo_flags, alvo_flags2, spellid, spellname, spelltype, amount, overkill, school, resisted, blocked, absorbed, critical, glacing, crushing, isoffhand)
function parser:spell_dmg (token, time, who_serial, who_name, who_flags, alvo_serial, alvo_name, alvo_flags, alvo_flags2, spellid, spellname, spelltype, amount, overkill, school, resisted, blocked, absorbed, critical, glacing, crushing, isoffhand, isreflected)
------------------------------------------------------------------------------------------------
--> early checks and fixes
@@ -502,7 +502,8 @@
------------------------------------------------------------------------------------------------
--> spell reflection
if (who_serial == alvo_serial and not reflection_ignore[spellid]) then
if (who_serial == alvo_serial and not reflection_ignore[spellid]) then --~reflect
--> this spell could've been reflected, check it
if (reflection_events[who_serial] and reflection_events[who_serial][spellid] and time-reflection_events[who_serial][spellid].time > 3.5 and (not reflection_debuffs[who_serial] or (reflection_debuffs[who_serial] and not reflection_debuffs[who_serial][spellid]))) then
--> here we check if we have to filter old reflection data
@@ -518,23 +519,27 @@
reflection_events[who_serial] = nil
end
end
local reflection = reflection_events[who_serial] and reflection_events[who_serial][spellid]
if (reflection) then
--> if we still have the reflection data then we conclude it was reflected
--extend the duration of the timer to catch the rare channelling spells
reflection_events[who_serial][spellid].time = time
--> extend the duration of the timer to catch the rare channelling spells
--crediting the source of the reflection aura
who_serial = reflection.who_serial
who_name = reflection.who_name
who_flags = reflection.who_flags
-- crediting the source of the reflection aura
spellid = reflection.spellid
--data of the aura that caused the reflection
print("2", spellid, GetSpellInfo(spellid))
isreflected = spellid --which spell was reflected
spellid = reflection.spellid --which spell made the reflection
spellname = reflection.spellname
spelltype = reflection.spelltype
--> data of the aura that caused the reflection
return parser:spell_dmg(token,time,who_serial,who_name,who_flags,alvo_serial,alvo_name,alvo_flags,alvo_flags2,spellid,spellname,spelltype,amount,-1,nil,nil,nil,nil,false,false,false,false)
return parser:spell_dmg(token,time,who_serial,who_name,who_flags,alvo_serial,alvo_name,alvo_flags,alvo_flags2,spellid,spellname,0x400,amount,-1,nil,nil,nil,nil,false,false,false,false, isreflected)
else
--> saving information about this damage because it may occurred before a reflect event
reflection_damage[who_serial] = reflection_damage[who_serial] or {}
@@ -1080,6 +1085,10 @@
if (_current_combat.is_boss and who_flags and _bit_band (who_flags, OBJECT_TYPE_ENEMY) ~= 0) then
_detalhes.spell_school_cache [spellname] = spelltype or school
end
if (isreflected) then
spell.isReflection = true
end
end
if (_is_storing_cleu) then
@@ -1087,7 +1096,7 @@
_current_combat_cleu_events.n = _current_combat_cleu_events.n + 1
end
return spell_damage_func (spell, alvo_serial, alvo_name, alvo_flags, amount, who_name, resisted, blocked, absorbed, critical, glacing, token, isoffhand)
return spell_damage_func (spell, alvo_serial, alvo_name, alvo_flags, amount, who_name, resisted, blocked, absorbed, critical, glacing, token, isoffhand, isreflected)
end
@@ -1443,6 +1452,7 @@
local este_jogador = damage_cache [who_serial]
if (not este_jogador) then
--este_jogador, meu_dono, who_name = _current_damage_container:PegarCombatente (nil, who_name)
local meu_dono
este_jogador, meu_dono, who_name = _current_damage_container:PegarCombatente (who_serial, who_name, who_flags, true)
if (not este_jogador) then
return --> just return if actor doen't exist yet
@@ -1517,7 +1527,7 @@
------------------------------------------------------------------------------------------------
--> spell reflection
elseif (missType == "REFLECT" and reflection_auras[alvo_serial]) then
elseif (missType == "REFLECT" and reflection_auras[alvo_serial]) then --~reflect
--> a reflect event and we have the reflecting aura data
if (reflection_damage[who_serial] and reflection_damage[who_serial][spellid] and time-reflection_damage[who_serial][spellid].time > 3.5 and (not reflection_debuffs[who_serial] or (reflection_debuffs[who_serial] and not reflection_debuffs[who_serial][spellid]))) then
--> here we check if we have to filter old damage data
@@ -1537,8 +1547,10 @@
local reflection = reflection_auras[alvo_serial]
if (damage) then
--> damage ocurred first, so we have its data
amount = reflection_damage[who_serial][spellid].amount
local amount = reflection_damage[who_serial][spellid].amount
print("1", spellid, GetSpellInfo(spellid))
local isreflected = spellid --which spell was reflected
alvo_serial = reflection.who_serial
alvo_name = reflection.who_name
alvo_flags = reflection.who_flags
@@ -1553,7 +1565,8 @@
--> this is so bad at clearing, there should be a better way of handling this
reflection_damage[who_serial] = nil
end
return parser:spell_dmg(token,time,alvo_serial,alvo_name,alvo_flags,who_serial,who_name,who_flags,nil,spellid,spellname,spelltype,amount,-1,nil,nil,nil,nil,false,false,false,false)
return parser:spell_dmg(token,time,alvo_serial,alvo_name,alvo_flags,who_serial,who_name,who_flags,nil,spellid,spellname,spelltype,amount,-1,nil,nil,nil,nil,false,false,false,false, isreflected)
else
--> saving information about this reflect because it occurred before the damage event
reflection_events[who_serial] = reflection_events[who_serial] or {}
@@ -2090,7 +2103,7 @@
------------------------------------------------------------------------------------------------
--> spell reflection
if (reflection_spellid[spellid]) then
if (reflection_spellid[spellid]) then --~reflect
--> this is a spell reflect aura
--> we save the info on who received this aura and from whom
--> this will be used to credit this spell as the one doing the damage
+1 -1
View File
@@ -1134,7 +1134,7 @@ local default_profile = {
border_color = {0, 0, 0, 1},
border_size = 14,
tooltip_max_abilities = 8,
tooltip_max_abilities = 7,
tooltip_max_targets = 2,
tooltip_max_pets = 2,
+1
View File
@@ -3360,6 +3360,7 @@ do
[124] = {name = STRING_SCHOOL_CHROMATIC, formated = "|cFFC0C0C0" .. STRING_SCHOOL_CHROMATIC .. "|r", hex = "FFC0C0C0", rgb = {192, 192, 192}, decimals = {0.7529, 0.7529, 0.7529}},
[126] = {name = STRING_SCHOOL_MAGIC , formated = "|cFF1111FF" .. STRING_SCHOOL_MAGIC .. "|r", hex = "FF1111FF", rgb = {17, 255, 255}, decimals = {0.0667, 0.0667, 1.0000}},
[127] = {name = STRING_SCHOOL_CHAOS, formated = "|cFFFF1111" .. STRING_SCHOOL_CHAOS .. "|r", hex = "FFFF1111", rgb = {255, 17, 17}, decimals = {1.0000, 0.0667, 0.0667}},
--[[custom]] [1024] = {name = "Reflection", formated = "|cFFFFFFFF" .. "Reflection" .. "|r", hex = "FFFFFFFF", rgb = {255, 255, 255}, decimals = {1, 1, 1}},
}
_detalhes.OverrideSpellSchool = {
+67 -28
View File
@@ -5327,14 +5327,15 @@ local row_on_enter = function (self)
if (not self.minha_tabela or not self.minha_tabela:MontaTooltipDamageTaken (self, self._index, info.instancia)) then -- > poderia ser aprimerado para uma tailcall
return
end
elseif (not self.minha_tabela or not self.minha_tabela:MontaTooltipAlvos (self, self._index, info.instancia)) then -- > poderia ser aprimerado para uma tailcall
GameTooltip:Show()
self:SetHeight (CONST_TARGET_HEIGHT + 1)
return
end
self:SetHeight (CONST_TARGET_HEIGHT + 1)
GameTooltip:Show()
if (not self.minha_tabela or not self.minha_tabela:MontaTooltipAlvos (self, self._index, info.instancia)) then -- > poderia ser aprimerado para uma tailcall
return
end
elseif (self.isMain) then
if (IsShiftKeyDown()) then
@@ -5573,17 +5574,22 @@ local target_on_enter = function (self)
local ActorTargetsSortTable = {}
local ActorTargetsContainer
local total = 0
local attribute, sub_attribute = info.instancia:GetDisplay()
if (attribute == 1 or attribute == 3) then
ActorTargetsContainer = spell.targets
if (spell.isReflection) then
ActorTargetsContainer = spell.extra
else
if (sub_attribute == 3) then --overheal
ActorTargetsContainer = spell.targets_overheal
elseif (sub_attribute == 6) then --absorbs
ActorTargetsContainer = spell.targets_absorbs
else
local attribute, sub_attribute = info.instancia:GetDisplay()
if (attribute == 1 or attribute == 3) then
ActorTargetsContainer = spell.targets
else
if (sub_attribute == 3) then --overheal
ActorTargetsContainer = spell.targets_overheal
elseif (sub_attribute == 6) then --absorbs
ActorTargetsContainer = spell.targets_absorbs
else
ActorTargetsContainer = spell.targets
end
end
end
@@ -5591,6 +5597,7 @@ local target_on_enter = function (self)
for target_name, amount in _pairs (ActorTargetsContainer) do
--print (target_name, amount)
ActorTargetsSortTable [#ActorTargetsSortTable+1] = {target_name, amount or 0}
total = total + (amount or 0)
end
table.sort (ActorTargetsSortTable, _detalhes.Sort2)
@@ -5611,21 +5618,52 @@ local target_on_enter = function (self)
local SelectedToKFunction = _detalhes.ToKFunctions [_detalhes.ps_abbreviation]
for index, target in ipairs (ActorTargetsSortTable) do
if (target [2] > 0) then
local class = _detalhes:GetClass (target [1])
if (class and _detalhes.class_coords [class]) then
local cords = _detalhes.class_coords [class]
if (info.target_persecond) then
GameTooltip:AddDoubleLine (index .. ". |TInterface\\AddOns\\Details\\images\\classes_small_alpha:14:14:0:0:128:128:"..cords[1]*128 ..":"..cords[2]*128 ..":"..cords[3]*128 ..":"..cords[4]*128 .."|t " .. target [1], _detalhes:comma_value ( _math_floor (target [2] / meu_tempo) ), 1, 1, 1, 1, 1, 1)
if (spell.isReflection) then
_detalhes:FormatCooltipForSpells()
GameCooltip:SetOwner(self, "bottomright", "top", 4, -2)
_detalhes:AddTooltipSpellHeaderText ("Spells Reflected", {1, 0.9, 0.0, 1}, 1, select(3, _GetSpellInfo(spell.id)), 0.1, 0.9, 0.1, 0.9) --localize-me
_detalhes:AddTooltipHeaderStatusbar (1, 1, 1, 0.4)
GameCooltip:AddIcon(select(3, _GetSpellInfo(spell.id)), 1, 1, 16, 16, .1, .9, .1, .9)
_detalhes:AddTooltipHeaderStatusbar (1, 1, 1, 0.5)
local topDamage = ActorTargetsSortTable[1] and ActorTargetsSortTable[1][2]
for index, target in ipairs (ActorTargetsSortTable) do
if (target [2] > 0) then
local spellId = target[1]
local damageDone = target[2]
local spellName, _, spellIcon = _GetSpellInfo(spellId)
GameCooltip:AddLine(spellName, SelectedToKFunction (_, damageDone) .. " (" .. floor(damageDone / topDamage * 100) .. "%)")
GameCooltip:AddIcon(spellIcon, 1, 1, 16, 16, .1, .9, .1, .9)
_detalhes:AddTooltipBackgroundStatusbar (false, damageDone / topDamage * 100)
end
end
GameCooltip:Show()
self.texture:SetAlpha (1)
self:SetAlpha (1)
barra:GetScript("OnEnter")(barra)
return
else
for index, target in ipairs (ActorTargetsSortTable) do
if (target [2] > 0) then
local class = _detalhes:GetClass (target [1])
if (class and _detalhes.class_coords [class]) then
local cords = _detalhes.class_coords [class]
if (info.target_persecond) then
GameTooltip:AddDoubleLine (index .. ". |TInterface\\AddOns\\Details\\images\\classes_small_alpha:14:14:0:0:128:128:"..cords[1]*128 ..":"..cords[2]*128 ..":"..cords[3]*128 ..":"..cords[4]*128 .."|t " .. target [1], _detalhes:comma_value ( _math_floor (target [2] / meu_tempo) ), 1, 1, 1, 1, 1, 1)
else
GameTooltip:AddDoubleLine (index .. ". |TInterface\\AddOns\\Details\\images\\classes_small_alpha:14:14:0:0:128:128:"..cords[1]*128 ..":"..cords[2]*128 ..":"..cords[3]*128 ..":"..cords[4]*128 .."|t " .. target [1], SelectedToKFunction (_, target [2]), 1, 1, 1, 1, 1, 1)
end
else
GameTooltip:AddDoubleLine (index .. ". |TInterface\\AddOns\\Details\\images\\classes_small_alpha:14:14:0:0:128:128:"..cords[1]*128 ..":"..cords[2]*128 ..":"..cords[3]*128 ..":"..cords[4]*128 .."|t " .. target [1], SelectedToKFunction (_, target [2]), 1, 1, 1, 1, 1, 1)
end
else
if (info.target_persecond) then
GameTooltip:AddDoubleLine (index .. ". " .. target [1], _detalhes:comma_value ( _math_floor (target [2] / meu_tempo)), 1, 1, 1, 1, 1, 1)
else
GameTooltip:AddDoubleLine (index .. ". " .. target [1], SelectedToKFunction (_, target [2]), 1, 1, 1, 1, 1, 1)
if (info.target_persecond) then
GameTooltip:AddDoubleLine (index .. ". " .. target [1], _detalhes:comma_value ( _math_floor (target [2] / meu_tempo)), 1, 1, 1, 1, 1, 1)
else
GameTooltip:AddDoubleLine (index .. ". " .. target [1], SelectedToKFunction (_, target [2]), 1, 1, 1, 1, 1, 1)
end
end
end
end
@@ -5656,6 +5694,7 @@ end
local target_on_leave = function (self)
GameTooltip:Hide()
GameCooltip:Hide()
self:GetParent():GetParent():GetScript("OnLeave")(self:GetParent():GetParent())
self.texture:SetAlpha (.7)
self:SetAlpha (.7)
+1 -1
View File
@@ -1739,7 +1739,7 @@ function _G._detalhes:Start()
end
--enforce to show 6 abilities on the tooltip
_detalhes.tooltip.tooltip_max_abilities = 6
--_detalhes.tooltip.tooltip_max_abilities = 6 freeeeeedooommmmm
--enforce to use the new animation code
if (_detalhes.streamer_config) then