--lua locals
local _cstr = string.format
local _math_floor = math.floor
local _table_sort = table.sort
local tinsert = table.insert
local setmetatable = setmetatable
local ipairs = ipairs
local pairs = pairs
local _unpack = unpack
local type = type
--api locals
local _GetSpellInfo = Details.getspellinfo
local GameTooltip = GameTooltip
local IsInRaid = IsInRaid
local IsInGroup = IsInGroup
local _string_replace = Details.string . replace --details api
local _detalhes = _G.Details
local AceLocale = LibStub ( " AceLocale-3.0 " )
local Loc = AceLocale : GetLocale ( " Details " )
local _
local addonName , Details222 = ...
local detailsFramework = DetailsFramework
local gump = _detalhes.gump
local container_habilidades = _detalhes.container_habilidades
local atributo_energy = _detalhes.atributo_energy
local container_energy = _detalhes.container_type . CONTAINER_ENERGY_CLASS
--local modo_ALONE = _detalhes.modos.alone
local modo_GROUP = _detalhes.modos . group
local modo_ALL = _detalhes.modos . all
local class_type = _detalhes.atributos . e_energy
local ToKFunctions = _detalhes.ToKFunctions
local SelectedToKFunction = ToKFunctions [ 1 ]
local UsingCustomLeftText = false
local UsingCustomRightText = false
local FormatTooltipNumber = ToKFunctions [ 8 ]
local TooltipMaximizedMethod = 1
local headerColor = " yellow "
local actor_class_color_r , actor_class_color_g , actor_class_color_b
local breakdownWindowFrame = Details.BreakdownWindowFrame
local keyName
function atributo_energy : NovaTabela ( serial , nome , link )
--constructor
local alphabetical = _detalhes : GetOrderNumber ( nome )
local _new_energyActor = {
last_event = 0 ,
tipo = class_type ,
total = alphabetical ,
totalover = alphabetical ,
passiveover = alphabetical ,
received = alphabetical ,
resource = alphabetical ,
alternatepower = alphabetical ,
last_value = nil ,
pets = { } ,
targets = { } ,
spells = container_habilidades : NovoContainer ( container_energy ) ,
}
detailsFramework : Mixin ( _new_energyActor , Details222.Mixins . ActorMixin )
setmetatable ( _new_energyActor , atributo_energy )
return _new_energyActor
end
--resources sort
function _detalhes . SortGroupResource ( container , keyName2 )
keyName = keyName2
return _table_sort ( container , _detalhes.SortKeyGroupResources )
end
function _detalhes . SortKeyGroupResources ( table1 , table2 )
if ( table1.grupo and table2.grupo ) then
return table1 [ keyName ] > table2 [ keyName ]
elseif ( table1.grupo and not table2.grupo ) then
return true
elseif ( not table1.grupo and table2.grupo ) then
return false
else
return table1 [ keyName ] > table2 [ keyName ]
end
end
function _detalhes . SortKeySimpleResources ( table1 , table2 )
return table1 [ keyName ] > table2 [ keyName ]
end
function _detalhes : ContainerSortResources ( container , amount , keyName2 )
keyName = keyName2
_table_sort ( container , _detalhes.SortKeySimpleResources )
if ( amount ) then
for i = amount , 1 , - 1 do --de tr�s pra frente
if ( container [ i ] [ keyName ] < 1 ) then
amount = amount - 1
else
break
end
end
return amount
end
end
--power types sort
local power_table = { 0 , 1 , 3 , 6 }
local power_type
local sort_energy = function ( t1 , t2 )
if ( t1.powertype == power_type and t2.powertype == power_type ) then
return t1.received > t2.received
elseif ( t1.powertype == power_type ) then
return true
elseif ( t2.powertype == power_type ) then
return false
else
return t1.received > t2.received
end
end
local sort_energyalternate = function ( t1 , t2 )
return t1.alternatepower > t2.alternatepower
end
local sort_energy_group = function ( t1 , t2 )
if ( t1.grupo and t2.grupo ) then
if ( t1.powertype == power_type and t2.powertype == power_type ) then
return t1.received > t2.received
elseif ( t1.powertype == power_type ) then
return true
elseif ( t2.powertype == power_type ) then
return false
else
return t1.received > t2.received
end
else
if ( t1.grupo ) then
return true
elseif ( t2.grupo ) then
return false
else
return t1.received > t2.received
end
end
end
local sort_alternateenergy_group = function ( t1 , t2 )
if ( t1.grupo and t2.grupo ) then
return t1.alternatepower > t2.alternatepower
else
if ( t1.grupo ) then
return true
elseif ( t2.grupo ) then
return false
else
return t1.alternatepower > t2.alternatepower
end
end
end
--resource refresh
local function RefreshBarraResources ( tabela , barra , instancia )
tabela : AtualizarResources ( tabela.minha_barra , barra.colocacao , instancia )
end
function atributo_energy : AtualizarResources ( whichRowLine , colocacao , instancia )
local esta_barra = instancia.barras [ whichRowLine ]
if ( not esta_barra ) then
print ( " DEBUG: problema com <instancia.esta_barra> " .. whichRowLine .. " " .. colocacao )
return
end
self._refresh_window = RefreshBarraResources
local tabela_anterior = esta_barra.minha_tabela
esta_barra.minha_tabela = self
self.minha_barra = whichRowLine
esta_barra.colocacao = colocacao
local total = instancia.showing . totals.resources
local combat_time = instancia.showing : GetCombatTime ( )
local rps = _math_floor ( self.resource / combat_time )
local formated_resource = SelectedToKFunction ( _ , self.resource )
local formated_rps = _cstr ( " %.2f " , self.resource / combat_time )
local porcentagem
if ( instancia.row_info . percent_type == 1 ) then
porcentagem = _cstr ( " %.1f " , self.resource / total * 100 )
elseif ( instancia.row_info . percent_type == 2 ) then
porcentagem = _cstr ( " %.1f " , self.resource / instancia.top * 100 )
end
local bars_show_data = instancia.row_info . textR_show_data
local bars_brackets = instancia : GetBarBracket ( )
local bars_separator = instancia : GetBarSeparator ( )
if ( not bars_show_data [ 1 ] ) then
formated_resource = " "
end
if ( not bars_show_data [ 2 ] ) then
formated_rps = " "
end
if ( not bars_show_data [ 3 ] ) then
porcentagem = " "
else
porcentagem = porcentagem .. " % "
end
local rightText = formated_resource .. bars_brackets [ 1 ] .. formated_rps .. " r/s " .. bars_separator .. porcentagem .. bars_brackets [ 2 ]
if ( UsingCustomRightText ) then
esta_barra.lineText4 : SetText ( _string_replace ( instancia.row_info . textR_custom_text , formated_resource , formated_rps , porcentagem , self , instancia.showing , instancia , rightText ) )
else
if ( instancia.use_multi_fontstrings ) then
instancia : SetInLineTexts ( esta_barra , formated_resource , formated_rps .. " r/s " , porcentagem .. " % " )
else
esta_barra.lineText4 : SetText ( rightText )
end
end
esta_barra.lineText1 : SetText ( colocacao .. " . " .. self.nome )
esta_barra.lineText1 : SetSize ( esta_barra : GetWidth ( ) - esta_barra.lineText4 : GetStringWidth ( ) - 20 , 15 )
esta_barra : SetValue ( 100 )
if ( esta_barra.hidden or esta_barra.fading_in or esta_barra.faded ) then
Details.FadeHandler . Fader ( esta_barra , " out " )
end
--texture color
actor_class_color_r , actor_class_color_g , actor_class_color_b = self : GetBarColor ( )
self : SetBarColors ( esta_barra , instancia , actor_class_color_r , actor_class_color_g , actor_class_color_b )
--icon
self : SetClassIcon ( esta_barra.icone_classe , instancia , self.classe )
if ( esta_barra.mouse_over ) then
local classIcon = esta_barra : GetClassIcon ( )
esta_barra.iconHighlight : SetTexture ( classIcon : GetTexture ( ) )
esta_barra.iconHighlight : SetTexCoord ( classIcon : GetTexCoord ( ) )
esta_barra.iconHighlight : SetVertexColor ( classIcon : GetVertexColor ( ) )
end
end
--refresh function
function atributo_energy : RefreshWindow ( instancia , tabela_do_combate , forcar , exportar )
local showing = tabela_do_combate [ class_type ]
if ( # showing._ActorTable < 1 ) then --n�o h� barras para mostrar
return _detalhes : HideBarsNotInUse ( instancia , showing ) , " " , 0 , 0
end
local total = 0
instancia.top = 0
local sub_atributo = instancia.sub_atributo
local conteudo = showing._ActorTable
local amount = # conteudo
local modo = instancia.modo
if ( sub_atributo == 5 ) then
--showing resources
keyName = " resource "
if ( modo == modo_ALL ) then
amount = _detalhes : ContainerSortResources ( conteudo , amount , " resource " )
instancia.top = conteudo [ 1 ] . resource
for index , player in ipairs ( conteudo ) do
if ( player.resource >= 1 ) then
total = total + player.resource
else
break
end
end
elseif ( modo == modo_GROUP ) then
_table_sort ( conteudo , _detalhes.SortKeyGroupResources )
for index , player in ipairs ( conteudo ) do
if ( player.grupo ) then --� um player e esta em grupo
if ( player.resource < 1 ) then --dano menor que 1, interromper o loop
amount = index - 1
break
end
total = total + player.resource
else
amount = index - 1
break
end
end
instancia.top = conteudo [ 1 ] . resource
end
showing : remapear ( )
if ( exportar ) then
return total , keyName , instancia.top , amount
end
if ( total < 1 ) then
instancia : EsconderScrollBar ( )
return _detalhes : EndRefresh ( instancia , total , tabela_do_combate , showing )
end
tabela_do_combate.totals . resources = total
instancia : RefreshScrollBar ( amount )
local whichRowLine = 1
local barras_container = instancia.barras
for i = instancia.barraS [ 1 ] , instancia.barraS [ 2 ] , 1 do
conteudo [ i ] : AtualizarResources ( whichRowLine , i , instancia )
whichRowLine = whichRowLine + 1
end
--beta, hidar barras n�o usadas durante um refresh for�ado
if ( forcar ) then
if ( instancia.modo == 2 ) then --group
for i = whichRowLine , instancia.rows_fit_in_window do
Details.FadeHandler . Fader ( instancia.barras [ i ] , " in " , Details.fade_speed )
end
end
end
return _detalhes : EndRefresh ( instancia , total , tabela_do_combate , showing )
end
power_type = power_table [ sub_atributo ]
keyName = " received "
if ( sub_atributo == 6 ) then
keyName = " alternatepower "
end
if ( exportar ) then
if ( type ( exportar ) == " boolean " ) then
--keyName = "received"
else
keyName = exportar.key
modo = exportar.modo
end
else
--keyName = "received"
end
if ( modo == modo_ALL ) then
_table_sort ( conteudo , sort_energyalternate )
if ( keyName == " alternatepower " ) then
for i = amount , 1 , - 1 do
if ( conteudo [ i ] . alternatepower < 1 ) then
amount = amount - 1
else
break
end
end
total = tabela_do_combate.totals [ class_type ] [ " alternatepower " ]
instancia.top = conteudo [ 1 ] . alternatepower
else
for i = amount , 1 , - 1 do
if ( conteudo [ i ] . received < 1 ) then
amount = amount - 1
elseif ( conteudo [ i ] . powertype ~= power_type ) then
amount = amount - 1
else
break
end
end
total = tabela_do_combate.totals [ class_type ] [ power_type ]
instancia.top = conteudo [ 1 ] . received
end
elseif ( modo == modo_GROUP ) then
if ( keyName == " alternatepower " ) then
_table_sort ( conteudo , sort_alternateenergy_group )
for index , player in ipairs ( conteudo ) do
if ( player.grupo ) then
if ( player.alternatepower < 1 ) then
amount = index - 1
break
end
total = total + player.alternatepower
else
amount = index - 1
break
end
end
instancia.top = conteudo [ 1 ] . alternatepower
else
_table_sort ( conteudo , sort_energy_group )
for index , player in ipairs ( conteudo ) do
if ( player.grupo ) then
if ( player.received < 1 ) then
amount = index - 1
break
elseif ( player.powertype ~= power_type ) then
amount = index - 1
break
end
total = total + player.received
else
amount = index - 1
break
end
end
instancia.top = conteudo [ 1 ] . received
end
end
showing : remapear ( )
if ( exportar ) then
return total , keyName , instancia.top , amount
end
if ( amount < 1 ) then --n�o h� barras para mostrar
instancia : EsconderScrollBar ( )
return _detalhes : EndRefresh ( instancia , total , tabela_do_combate , showing ) --retorna a tabela que precisa ganhar o refresh
end
instancia : RefreshScrollBar ( amount )
local whichRowLine = 1
local barras_container = instancia.barras
local percentage_type = instancia.row_info . percent_type
local bars_show_data = instancia.row_info . textR_show_data
local bars_brackets = instancia : GetBarBracket ( )
local bars_separator = instancia : GetBarSeparator ( )
local baseframe = instancia.baseframe
local use_animations = _detalhes.is_using_row_animations and ( not baseframe.isStretching and not forcar and not baseframe.isResizing )
if ( total == 0 ) then
total = 0.00000001
end
local myPos
local following = instancia.following . enabled
if ( following ) then
if ( using_cache ) then
local pname = _detalhes.playername
for i , actor in ipairs ( conteudo ) do
if ( actor.nome == pname ) then
myPos = i
break
end
end
else
myPos = showing._NameIndexTable [ _detalhes.playername ]
end
end
local combat_time = instancia.showing : GetCombatTime ( )
UsingCustomLeftText = instancia.row_info . textL_enable_custom_text
UsingCustomRightText = instancia.row_info . textR_enable_custom_text
local use_total_bar = false
if ( instancia.total_bar . enabled ) then
use_total_bar = true
if ( instancia.total_bar . only_in_group and ( not IsInGroup ( ) and not IsInRaid ( ) ) ) then
use_total_bar = false
end
end
if ( instancia.bars_sort_direction == 1 ) then --top to bottom
if ( use_total_bar and instancia.barraS [ 1 ] == 1 ) then
whichRowLine = 2
local iter_last = instancia.barraS [ 2 ]
if ( iter_last == instancia.rows_fit_in_window ) then
iter_last = iter_last - 1
end
local row1 = barras_container [ 1 ]
row1.minha_tabela = nil
row1.lineText1 : SetText ( Loc [ " STRING_TOTAL " ] )
if ( instancia.use_multi_fontstrings ) then
instancia : SetInLineTexts ( row1 , " " , _detalhes : ToK2 ( total , _detalhes : ToK ( total / combat_time ) ) )
else
row1.lineText4 : SetText ( _detalhes : ToK2 ( total ) .. " ( " .. _detalhes : ToK ( total / combat_time ) .. " ) " )
end
row1 : SetValue ( 100 )
local r , g , b = unpack ( instancia.total_bar . color )
row1.textura : SetVertexColor ( r , g , b )
row1.icone_classe : SetTexture ( instancia.total_bar . icon )
row1.icone_classe : SetTexCoord ( 0.0625 , 0.9375 , 0.0625 , 0.9375 )
Details.FadeHandler . Fader ( row1 , " out " )
if ( following and myPos and myPos + 1 > instancia.rows_fit_in_window and instancia.barraS [ 2 ] < myPos + 1 ) then
for i = instancia.barraS [ 1 ] , iter_last - 1 , 1 do --vai atualizar s� o range que esta sendo mostrado
conteudo [ i ] : RefreshLine ( instancia , barras_container , whichRowLine , i , total , sub_atributo , forcar , keyName , combat_time , percentage_type , use_animations , bars_show_data , bars_brackets , bars_separator ) --inst�ncia, index, total, valor da 1� barra
whichRowLine = whichRowLine + 1
end
conteudo [ myPos ] : RefreshLine ( instancia , barras_container , whichRowLine , myPos , total , sub_atributo , forcar , keyName , combat_time , percentage_type , use_animations , bars_show_data , bars_brackets , bars_separator ) --inst�ncia, index, total, valor da 1� barra
whichRowLine = whichRowLine + 1
else
for i = instancia.barraS [ 1 ] , iter_last , 1 do --vai atualizar s� o range que esta sendo mostrado
conteudo [ i ] : RefreshLine ( instancia , barras_container , whichRowLine , i , total , sub_atributo , forcar , keyName , combat_time , percentage_type , use_animations , bars_show_data , bars_brackets , bars_separator ) --inst�ncia, index, total, valor da 1� barra
whichRowLine = whichRowLine + 1
end
end
else
if ( following and myPos and myPos > instancia.rows_fit_in_window and instancia.barraS [ 2 ] < myPos ) then
for i = instancia.barraS [ 1 ] , instancia.barraS [ 2 ] - 1 , 1 do --vai atualizar s� o range que esta sendo mostrado
conteudo [ i ] : RefreshLine ( instancia , barras_container , whichRowLine , i , total , sub_atributo , forcar , keyName , combat_time , percentage_type , use_animations , bars_show_data , bars_brackets , bars_separator ) --inst�ncia, index, total, valor da 1� barra
whichRowLine = whichRowLine + 1
end
conteudo [ myPos ] : RefreshLine ( instancia , barras_container , whichRowLine , myPos , total , sub_atributo , forcar , keyName , combat_time , percentage_type , use_animations , bars_show_data , bars_brackets , bars_separator ) --inst�ncia, index, total, valor da 1� barra
whichRowLine = whichRowLine + 1
else
for i = instancia.barraS [ 1 ] , instancia.barraS [ 2 ] , 1 do --vai atualizar s� o range que esta sendo mostrado
conteudo [ i ] : RefreshLine ( instancia , barras_container , whichRowLine , i , total , sub_atributo , forcar , keyName , combat_time , percentage_type , use_animations , bars_show_data , bars_brackets , bars_separator ) --inst�ncia, index, total, valor da 1� barra
whichRowLine = whichRowLine + 1
end
end
end
elseif ( instancia.bars_sort_direction == 2 ) then --bottom to top
if ( use_total_bar and instancia.barraS [ 1 ] == 1 ) then
whichRowLine = 2
local iter_last = instancia.barraS [ 2 ]
if ( iter_last == instancia.rows_fit_in_window ) then
iter_last = iter_last - 1
end
local row1 = barras_container [ 1 ]
row1.minha_tabela = nil
row1.lineText1 : SetText ( Loc [ " STRING_TOTAL " ] )
if ( instancia.use_multi_fontstrings ) then
instancia : SetInLineTexts ( row1 , " " , _detalhes : ToK2 ( total ) , _detalhes : ToK ( total / combat_time ) )
else
row1.lineText4 : SetText ( _detalhes : ToK2 ( total ) .. " ( " .. _detalhes : ToK ( total / combat_time ) .. " ) " )
end
row1 : SetValue ( 100 )
local r , g , b = unpack ( instancia.total_bar . color )
row1.textura : SetVertexColor ( r , g , b )
row1.icone_classe : SetTexture ( instancia.total_bar . icon )
row1.icone_classe : SetTexCoord ( 0.0625 , 0.9375 , 0.0625 , 0.9375 )
Details.FadeHandler . Fader ( row1 , " out " )
if ( following and myPos and myPos + 1 > instancia.rows_fit_in_window and instancia.barraS [ 2 ] < myPos + 1 ) then
conteudo [ myPos ] : RefreshLine ( instancia , barras_container , whichRowLine , myPos , total , sub_atributo , forcar , keyName , combat_time , percentage_type , use_animations , bars_show_data , bars_brackets , bars_separator ) --inst�ncia, index, total, valor da 1� barra
whichRowLine = whichRowLine + 1
for i = iter_last - 1 , instancia.barraS [ 1 ] , - 1 do --vai atualizar s� o range que esta sendo mostrado
conteudo [ i ] : RefreshLine ( instancia , barras_container , whichRowLine , i , total , sub_atributo , forcar , keyName , combat_time , percentage_type , use_animations , bars_show_data , bars_brackets , bars_separator ) --inst�ncia, index, total, valor da 1� barra
whichRowLine = whichRowLine + 1
end
else
for i = iter_last , instancia.barraS [ 1 ] , - 1 do --vai atualizar s� o range que esta sendo mostrado
conteudo [ i ] : RefreshLine ( instancia , barras_container , whichRowLine , i , total , sub_atributo , forcar , keyName , combat_time , percentage_type , use_animations , bars_show_data , bars_brackets , bars_separator ) --inst�ncia, index, total, valor da 1� barra
whichRowLine = whichRowLine + 1
end
end
else
if ( following and myPos and myPos > instancia.rows_fit_in_window and instancia.barraS [ 2 ] < myPos ) then
conteudo [ myPos ] : RefreshLine ( instancia , barras_container , whichRowLine , myPos , total , sub_atributo , forcar , keyName , combat_time , percentage_type , use_animations , bars_show_data , bars_brackets , bars_separator ) --inst�ncia, index, total, valor da 1� barra
whichRowLine = whichRowLine + 1
for i = instancia.barraS [ 2 ] - 1 , instancia.barraS [ 1 ] , - 1 do --vai atualizar s� o range que esta sendo mostrado
conteudo [ i ] : RefreshLine ( instancia , barras_container , whichRowLine , i , total , sub_atributo , forcar , keyName , combat_time , percentage_type , use_animations , bars_show_data , bars_brackets , bars_separator ) --inst�ncia, index, total, valor da 1� barra
whichRowLine = whichRowLine + 1
end
else
for i = instancia.barraS [ 2 ] , instancia.barraS [ 1 ] , - 1 do --vai atualizar s� o range que esta sendo mostrado
conteudo [ i ] : RefreshLine ( instancia , barras_container , whichRowLine , i , total , sub_atributo , forcar , keyName , combat_time , percentage_type , use_animations , bars_show_data , bars_brackets , bars_separator ) --inst�ncia, index, total, valor da 1� barra
whichRowLine = whichRowLine + 1
end
end
end
end
if ( use_animations ) then
instancia : PerformAnimations ( whichRowLine - 1 )
end
if ( forcar ) then
if ( instancia.modo == 2 ) then --group
for i = whichRowLine , instancia.rows_fit_in_window do
Details.FadeHandler . Fader ( instancia.barras [ i ] , " in " , Details.fade_speed )
end
end
end
return _detalhes : EndRefresh ( instancia , total , tabela_do_combate , showing ) --retorna a tabela que precisa ganhar o refresh
end
function atributo_energy : RefreshLine ( instancia , barras_container , whichRowLine , lugar , total , sub_atributo , forcar , keyName , combat_time , percentage_type , use_animations , bars_show_data , bars_brackets , bars_separator )
local esta_barra = instancia.barras [ whichRowLine ] --pega a refer�ncia da barra na janela
if ( not esta_barra ) then
print ( " DEBUG: problema com <instancia.esta_barra> " .. whichRowLine .. " " .. lugar )
return
end
local tabela_anterior = esta_barra.minha_tabela
esta_barra.minha_tabela = self
esta_barra.colocacao = lugar
self.minha_barra = esta_barra
self.colocacao = lugar
local esta_e_energy_total = self [ keyName ] --total de dano que este jogador deu
-- local porcentagem = esta_e_energy_total / total * 100
local porcentagem
if ( percentage_type == 1 ) then
porcentagem = _cstr ( " %.1f " , esta_e_energy_total / total * 100 )
elseif ( percentage_type == 2 ) then
porcentagem = _cstr ( " %.1f " , esta_e_energy_total / instancia.top * 100 )
end
local esta_porcentagem = _math_floor ( ( esta_e_energy_total / instancia.top ) * 100 )
local formated_energy = SelectedToKFunction ( _ , esta_e_energy_total )
if ( not bars_show_data [ 1 ] ) then
formated_energy = " "
end
if ( not bars_show_data [ 3 ] ) then
porcentagem = " "
else
porcentagem = porcentagem .. " % "
end
local rightText = formated_energy .. bars_brackets [ 1 ] .. porcentagem .. bars_brackets [ 2 ]
if ( UsingCustomRightText ) then
esta_barra.lineText4 : SetText ( _string_replace ( instancia.row_info . textR_custom_text , formated_energy , " " , porcentagem , self , instancia.showing , instancia , rightText ) )
else
if ( instancia.use_multi_fontstrings ) then
instancia : SetInLineTexts ( esta_barra , " " , formated_energy , porcentagem )
else
esta_barra.lineText4 : SetText ( rightText )
end
end
if ( esta_barra.mouse_over and not instancia.baseframe . isMoving ) then --precisa atualizar o tooltip
gump : UpdateTooltip ( whichRowLine , esta_barra , instancia )
end
actor_class_color_r , actor_class_color_g , actor_class_color_b = self : GetBarColor ( )
return self : RefreshBarra2 ( esta_barra , instancia , tabela_anterior , forcar , esta_porcentagem , whichRowLine , barras_container , use_animations )
end
function atributo_energy : RefreshBarra2 ( esta_barra , instancia , tabela_anterior , forcar , esta_porcentagem , whichRowLine , barras_container , use_animations )
--primeiro colocado
if ( esta_barra.colocacao == 1 ) then
if ( not tabela_anterior or tabela_anterior ~= esta_barra.minha_tabela or forcar ) then
esta_barra : SetValue ( 100 )
if ( esta_barra.hidden or esta_barra.fading_in or esta_barra.faded ) then
Details.FadeHandler . Fader ( esta_barra , " out " )
end
return self : RefreshBarra ( esta_barra , instancia )
else
return
end
else
if ( esta_barra.hidden or esta_barra.fading_in or esta_barra.faded ) then
if ( use_animations ) then
esta_barra.animacao_fim = esta_porcentagem
else
esta_barra : SetValue ( esta_porcentagem )
esta_barra.animacao_ignorar = true
end
Details.FadeHandler . Fader ( esta_barra , " out " )
if ( instancia.row_info . texture_class_colors ) then
esta_barra.textura : SetVertexColor ( actor_class_color_r , actor_class_color_g , actor_class_color_b )
end
if ( instancia.row_info . texture_background_class_color ) then
esta_barra.background : SetVertexColor ( actor_class_color_r , actor_class_color_g , actor_class_color_b )
end
return self : RefreshBarra ( esta_barra , instancia )
else
--agora esta comparando se a tabela da barra � diferente da tabela na atualiza��o anterior
if ( not tabela_anterior or tabela_anterior ~= esta_barra.minha_tabela or forcar ) then --aqui diz se a barra do jogador mudou de posi��o ou se ela apenas ser� atualizada
if ( use_animations ) then
esta_barra.animacao_fim = esta_porcentagem
else
esta_barra : SetValue ( esta_porcentagem )
esta_barra.animacao_ignorar = true
end
esta_barra.last_value = esta_porcentagem --reseta o ultimo valor da barra
return self : RefreshBarra ( esta_barra , instancia )
elseif ( esta_porcentagem ~= esta_barra.last_value ) then --continua mostrando a mesma tabela ent�o compara a porcentagem
--apenas atualizar
if ( use_animations ) then
esta_barra.animacao_fim = esta_porcentagem
else
esta_barra : SetValue ( esta_porcentagem )
end
esta_barra.last_value = esta_porcentagem
return self : RefreshBarra ( esta_barra , instancia )
end
end
end
end
function atributo_energy : RefreshBarra ( esta_barra , instancia , from_resize )
local class , enemy , arena_enemy , arena_ally = self.classe , self.enemy , self.arena_enemy , self.arena_ally
if ( from_resize ) then
actor_class_color_r , actor_class_color_g , actor_class_color_b = self : GetBarColor ( )
end
--icon
self : SetClassIcon ( esta_barra.icone_classe , instancia , class )
if ( esta_barra.mouse_over ) then
local classIcon = esta_barra : GetClassIcon ( )
esta_barra.iconHighlight : SetTexture ( classIcon : GetTexture ( ) )
esta_barra.iconHighlight : SetTexCoord ( classIcon : GetTexCoord ( ) )
esta_barra.iconHighlight : SetVertexColor ( classIcon : GetVertexColor ( ) )
end
--texture color
self : SetBarColors ( esta_barra , instancia , actor_class_color_r , actor_class_color_g , actor_class_color_b )
--left text
self : SetBarLeftText ( esta_barra , instancia , enemy , arena_enemy , arena_ally , UsingCustomLeftText )
esta_barra.lineText1 : SetSize ( esta_barra : GetWidth ( ) - esta_barra.lineText4 : GetStringWidth ( ) - 20 , 15 )
end
--------------------------------------------- // TOOLTIPS // ---------------------------------------------
function atributo_energy : KeyNames ( sub_atributo )
return " total "
end
---------TOOLTIPS BIFURCA��O ~tooltip
local resource_bg_color = { .1 , .1 , .1 , 0.6 }
local resource_bg_coords = { .6 , 0.1 , 0 , 0.64453125 }
function atributo_energy : ToolTip ( instancia , numero , barra , keydown )
if ( instancia.sub_atributo <= 4 ) then
return self : ToolTipRegenRecebido ( instancia , numero , barra , keydown )
elseif ( instancia.sub_atributo == 5 ) then --resources
local resource_string = _detalhes.resource_strings [ self.resource_type ]
if ( resource_string ) then
local icon = _detalhes.resource_icons [ self.resource_type ]
GameCooltip : AddLine ( resource_string , floor ( self.resource ) .. " ( " .. _cstr ( " %.2f " , self.resource / instancia.showing : GetCombatTime ( ) ) .. " per second) " , 1 , " white " )
GameCooltip : AddIcon ( icon.file , 1 , 1 , 16 , 16 , unpack ( icon.coords ) )
GameCooltip : SetWallpaper ( 1 , [[Interface\SPELLBOOK\Spellbook-Page-1]] , resource_bg_coords , resource_bg_color , true )
return true
end
end
end
--tooltip locals
local r , g , b
local barAlha = .6
local energy_tooltips_table = { }
local energy_tooltips_hash = { }
local reset_tooltips_table = function ( )
for i = 1 , # energy_tooltips_table do
local t = energy_tooltips_table [ i ]
t [ 1 ] , t [ 2 ] , t [ 3 ] = " " , 0 , " "
end
for k , v in pairs ( energy_tooltips_hash ) do
energy_tooltips_hash [ k ] = nil
end
end
function atributo_energy : ToolTipRegenRecebido ( instancia , numero , barra , keydown )
reset_tooltips_table ( )
local owner = self.owner
if ( owner and owner.classe ) then
r , g , b = unpack ( _detalhes.class_colors [ owner.classe ] )
else
r , g , b = unpack ( _detalhes.class_colors [ self.classe ] )
end
local powertype = self.powertype
local tabela_do_combate = instancia.showing
local container = tabela_do_combate [ class_type ]
local total_regenerado = self.received
local name = self.nome
--spells:
local i = 1
for index , actor in ipairs ( container._ActorTable ) do
if ( actor.powertype == powertype ) then
for spellid , spell in pairs ( actor.spells . _ActorTable ) do
local on_self = spell.targets [ name ]
if ( on_self ) then
local already_tracked = energy_tooltips_hash [ spellid ]
if ( already_tracked ) then
local t = energy_tooltips_table [ already_tracked ]
t [ 2 ] = t [ 2 ] + on_self
else
local t = energy_tooltips_table [ i ]
if ( not t ) then
energy_tooltips_table [ i ] = { }
t = energy_tooltips_table [ i ]
end
t [ 1 ] , t [ 2 ] , t [ 3 ] = spellid , on_self , " "
energy_tooltips_hash [ spellid ] = i
i = i + 1
end
end
end
end
end
i = i - 1
_table_sort ( energy_tooltips_table , _detalhes.Sort2 )
_detalhes : AddTooltipSpellHeaderText ( Loc [ " STRING_SPELLS " ] , headerColor , i , [[Interface\HELPFRAME\ReportLagIcon-Spells]] , 0.21875 , 0.78125 , 0.21875 , 0.78125 )
local ismaximized = false
if ( keydown == " shift " or TooltipMaximizedMethod == 2 or TooltipMaximizedMethod == 3 ) then
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_overlay2 )
_detalhes : AddTooltipHeaderStatusbar ( r , g , b , 1 )
ismaximized = true
else
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 )
end
local max = i
if ( max > 3 ) then
max = 3
end
if ( ismaximized ) then
max = 99
end
local icon_size = _detalhes.tooltip . icon_size
local icon_border = _detalhes.tooltip . icon_border_texcoord
for o = 1 , math.min ( i , max ) do
local spell = energy_tooltips_table [ o ]
if ( spell [ 2 ] < 1 ) then
break
end
local nome_magia , _ , icone_magia = _GetSpellInfo ( spell [ 1 ] )
GameCooltip : AddLine ( nome_magia , FormatTooltipNumber ( _ , spell [ 2 ] ) .. " ( " .. _cstr ( " %.1f " , ( spell [ 2 ] / total_regenerado ) * 100 ) .. " %) " )
GameCooltip : AddIcon ( icone_magia , nil , nil , icon_size.W , icon_size.H , icon_border.L , icon_border.R , icon_border.T , icon_border.B )
_detalhes : AddTooltipBackgroundStatusbar ( false , spell [ 2 ] / energy_tooltips_table [ 1 ] [ 2 ] * 100 )
end
--players
reset_tooltips_table ( )
i = 1
for index , actor in ipairs ( container._ActorTable ) do
if ( actor.powertype == powertype ) then
local on_self = actor.targets [ name ]
if ( on_self ) then
local t = energy_tooltips_table [ i ]
if ( not t ) then
energy_tooltips_table [ i ] = { }
t = energy_tooltips_table [ i ]
end
t [ 1 ] , t [ 2 ] , t [ 3 ] = actor.nome , on_self , actor.classe
i = i + 1
end
end
end
i = i - 1
_table_sort ( energy_tooltips_table , _detalhes.Sort2 )
_detalhes : AddTooltipSpellHeaderText ( Loc [ " STRING_PLAYERS " ] , headerColor , i , [[Interface\HELPFRAME\HelpIcon-HotIssues]] , 0.21875 , 0.78125 , 0.21875 , 0.78125 )
local ismaximized = false
if ( keydown == " ctrl " or TooltipMaximizedMethod == 2 or TooltipMaximizedMethod == 4 ) then
GameCooltip : AddIcon ( [[Interface\AddOns\Details\images\key_ctrl]] , 1 , 2 , _detalhes.tooltip_key_size_width , _detalhes.tooltip_key_size_height , 0 , 1 , 0 , 0.640625 , _detalhes.tooltip_key_overlay2 )
_detalhes : AddTooltipHeaderStatusbar ( r , g , b , 1 )
ismaximized = true
else
GameCooltip : AddIcon ( [[Interface\AddOns\Details\images\key_ctrl]] , 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 )
end
max = i
if ( max > 3 ) then
max = 3
end
if ( ismaximized ) then
max = 99
end
for o = 1 , math.min ( i , max ) do
local source = energy_tooltips_table [ o ]
if ( source [ 2 ] < 1 ) then
break
end
GameCooltip : AddLine ( source [ 1 ] , FormatTooltipNumber ( _ , source [ 2 ] ) .. " ( " .. _cstr ( " %.1f " , ( source [ 2 ] / total_regenerado ) * 100 ) .. " %) " )
_detalhes : AddTooltipBackgroundStatusbar ( )
local classe = source [ 3 ]
if ( not classe ) then
classe = " UNKNOW "
end
if ( classe == " UNKNOW " ) then
GameCooltip : AddIcon ( " Interface \\ LFGFRAME \\ LFGROLE_BW " , nil , nil , icon_size.W , icon_size.H , .25 , .5 , 0 , 1 )
else
GameCooltip : AddIcon ( " Interface \\ AddOns \\ Details \\ images \\ classes_small " , nil , nil , icon_size.W , icon_size.H , _unpack ( _detalhes.class_coords [ classe ] ) )
end
end
--player generators
local allGeneratorSpells = { }
local allGenerated = 0
for spellid , spellObject in pairs ( self.spells . _ActorTable ) do
tinsert ( allGeneratorSpells , { spellObject , spellObject.total , spellObject.totalover } )
allGenerated = allGenerated + spellObject.total
end
table.sort ( allGeneratorSpells , _detalhes.Sort2 )
_detalhes : AddTooltipSpellHeaderText ( self.nome .. " Generators " , headerColor , # allGeneratorSpells , [[Interface\HELPFRAME\HelpIcon-HotIssues]] , 0.21875 , 0.78125 , 0.21875 , 0.78125 )
_detalhes : AddTooltipHeaderStatusbar ( r , g , b , 1 )
for i = 1 , # allGeneratorSpells do
local thisGenerator = allGeneratorSpells [ i ]
local spellName , _ , spellIcon = _GetSpellInfo ( thisGenerator [ 1 ] . id )
GameCooltip : AddLine ( spellName , FormatTooltipNumber ( _ , thisGenerator [ 2 ] ) .. " (|cFFFF5555overflow: " .. FormatTooltipNumber ( _ , thisGenerator [ 3 ] ) .. " |r | " .. _cstr ( " %.1f " , ( thisGenerator [ 2 ] / allGenerated ) * 100 ) .. " %) " )
GameCooltip : AddIcon ( spellIcon , nil , nil , icon_size.W , icon_size.H , .1 , .9 , .1 , .9 )
_detalhes : AddTooltipBackgroundStatusbar ( )
end
--auto regen overflow
_detalhes : AddTooltipSpellHeaderText ( self.nome .. " Auto Regen Overflow " , headerColor , 1 , [[Interface\CHARACTERFRAME\Disconnect-Icon]] , 0.3 , 0.7 , 0.3 , 0.7 )
_detalhes : AddTooltipHeaderStatusbar ( r , g , b , 1 )
GameCooltip : AddLine ( " Auto Regen Overflow " , FormatTooltipNumber ( _ , self.passiveover ) .. " ( " .. _cstr ( " %.1f " , self.passiveover / ( self.passiveover + self.total ) * 100 ) .. " %) " )
GameCooltip : AddIcon ( [[Interface\COMMON\Indicator-Red]] , nil , nil , icon_size.W , icon_size.H )
_detalhes : AddTooltipBackgroundStatusbar ( )
return true
end
--------------------------------------------- // JANELA DETALHES // ---------------------------------------------
---------DETALHES BIFURCA��O
function atributo_energy : MontaInfo ( )
if ( breakdownWindowFrame.sub_atributo <= 4 ) then
return self : MontaInfoRegenRecebido ( )
end
end
---------DETALHES bloco da direita BIFURCA��O
function atributo_energy : MontaDetalhes ( spellid , barra )
if ( breakdownWindowFrame.sub_atributo <= 4 ) then
return self : MontaDetalhesRegenRecebido ( spellid , barra )
end
end
function atributo_energy : MontaInfoRegenRecebido ( )
if true then return end
reset_tooltips_table ( )
local barras = breakdownWindowFrame.barras1
local barras2 = breakdownWindowFrame.barras2
local barras3 = breakdownWindowFrame.barras3
local instancia = breakdownWindowFrame.instancia
local tabela_do_combate = instancia.showing
local container = tabela_do_combate [ class_type ]
local total_regenerado = self.received
local my_name = self.nome
local powertype = self.powertype
--spells:
local i = 1
for index , actor in ipairs ( container._ActorTable ) do
if ( actor.powertype == powertype ) then
for spellid , spell in pairs ( actor.spells . _ActorTable ) do
local on_self = spell.targets [ my_name ]
if ( on_self ) then
local already_tracked = energy_tooltips_hash [ spellid ]
if ( already_tracked ) then
local t = energy_tooltips_table [ already_tracked ]
t [ 2 ] = t [ 2 ] + on_self
else
local t = energy_tooltips_table [ i ]
if ( not t ) then
energy_tooltips_table [ i ] = { }
t = energy_tooltips_table [ i ]
end
t [ 1 ] , t [ 2 ] , t [ 3 ] = spellid , on_self , " "
energy_tooltips_hash [ spellid ] = i
i = i + 1
end
end
end
end
end
i = i - 1
_table_sort ( energy_tooltips_table , _detalhes.Sort2 )
local amt = i
if ( amt < 1 ) then
return true
end
gump : JI_AtualizaContainerBarras ( amt )
local max_ = energy_tooltips_table [ 1 ] [ 2 ]
for index , tabela in ipairs ( energy_tooltips_table ) do
if ( tabela [ 2 ] < 1 ) then
break
end
local barra = barras [ index ]
if ( not barra ) then
barra = gump : CriaNovaBarraInfo1 ( instancia , index )
barra.textura : SetStatusBarColor ( 1 , 1 , 1 , 1 )
barra.on_focus = false
end
self : FocusLock ( barra , tabela [ 1 ] )
local spellname , _ , spellicon = _GetSpellInfo ( tabela [ 1 ] )
local percent = tabela [ 2 ] / total_regenerado * 100
self : UpdadeInfoBar ( barra , index , tabela [ 1 ] , spellname , tabela [ 2 ] , _detalhes : comma_value ( tabela [ 2 ] ) , max_ , percent , spellicon , true )
barra.minha_tabela = self
barra.show = tabela [ 1 ]
barra : Show ( )
if ( self.detalhes and self.detalhes == barra.show ) then
self : MontaDetalhes ( self.detalhes , barra )
end
end
--players:
reset_tooltips_table ( )
i = 1
for index , actor in ipairs ( container._ActorTable ) do
if ( actor.powertype == powertype ) then
local on_self = actor.targets [ my_name ]
if ( on_self ) then
local t = energy_tooltips_table [ i ]
if ( not t ) then
energy_tooltips_table [ i ] = { }
t = energy_tooltips_table [ i ]
end
t [ 1 ] , t [ 2 ] , t [ 3 ] = actor.nome , on_self , actor.classe
i = i + 1
end
end
end
i = i - 1
_table_sort ( energy_tooltips_table , _detalhes.Sort2 )
local amt_fontes = i
gump : JI_AtualizaContainerAlvos ( amt_fontes )
local max_fontes = energy_tooltips_table [ 1 ] [ 2 ]
local barra
for index , tabela in ipairs ( energy_tooltips_table ) do
if ( tabela [ 2 ] < 1 ) then
break
end
barra = breakdownWindowFrame.barras2 [ index ]
if ( not barra ) then
barra = gump : CriaNovaBarraInfo2 ( instancia , index )
barra.textura : SetStatusBarColor ( 1 , 1 , 1 , 1 )
end
if ( index == 1 ) then
barra.textura : SetValue ( 100 )
else
barra.textura : SetValue ( tabela [ 2 ] / max_fontes * 100 )
end
barra.lineText1 : SetText ( index .. instancia.divisores . colocacao .. tabela [ 1 ] )
barra.lineText4 : SetText ( _detalhes : comma_value ( tabela [ 2 ] ) .. " ( " .. _cstr ( " %.1f " , tabela [ 2 ] / total_regenerado * 100 ) .. " ) " )
if ( barra.mouse_over ) then --atualizar o tooltip
if ( barra.isAlvo ) then
GameTooltip : Hide ( )
GameTooltip : SetOwner ( barra , " ANCHOR_TOPRIGHT " )
if ( not barra.minha_tabela : MontaTooltipAlvos ( barra , index ) ) then
return
end
GameTooltip : Show ( )
end
end
barra.minha_tabela = self
--print("nome_inimigo = ", tabela [1])
barra.nome_inimigo = tabela [ 1 ]
barra : Show ( )
end
end
function atributo_energy : MontaDetalhesRegenRecebido ( nome , barra )
if true then return end
reset_tooltips_table ( )
local barras = breakdownWindowFrame.barras3
local instancia = breakdownWindowFrame.instancia
local tabela_do_combate = breakdownWindowFrame.instancia . showing
local container = tabela_do_combate [ class_type ]
local total_regenerado = self.received
local spellid = nome
local who_name = self.nome
--who is regenerating with the spell -> nome
--spells:
local i = 1
for index , actor in ipairs ( container._ActorTable ) do
if ( actor.powertype == powertype ) then
local spell = actor.spells . _ActorTable [ spellid ]
if ( spell ) then
local on_self = spell.targets [ who_name ]
if ( on_self ) then
local t = energy_tooltips_table [ i ]
if ( not t ) then
energy_tooltips_table [ i ] = { }
t = energy_tooltips_table [ i ]
end
t [ 1 ] , t [ 2 ] , t [ 3 ] = actor.nome , on_self , actor.classe
i = i + 1
end
end
end
end
i = i - 1
if ( i < 1 ) then
return
end
_table_sort ( energy_tooltips_table , _detalhes.Sort2 )
local max_ = energy_tooltips_table [ 1 ] [ 2 ]
local lastIndex = 1
local barra
for index , tabela in ipairs ( from ) do
if ( tabela [ 2 ] < 1 ) then
break
end
lastIndex = index
barra = barras [ index ]
if ( not barra ) then --se a barra n�o existir, criar ela ent�o
barra = gump : CriaNovaBarraInfo3 ( instancia , index )
barra.textura : SetStatusBarColor ( 1 , 1 , 1 , 1 )
end
barra.show = tabela [ 1 ]
if ( index == 1 ) then
barra.textura : SetValue ( 100 )
else
barra.textura : SetValue ( tabela [ 2 ] / max_ * 100 )
end
barra.lineText1 : SetText ( index .. " . " .. tabela [ 1 ] )
barra.lineText4 : SetText ( _detalhes : comma_value ( tabela [ 2 ] ) .. " ( " .. _cstr ( " %.1f " , tabela [ 2 ] / total_regenerado * 100 ) .. " %) " )
barra.textura : SetStatusBarColor ( _unpack ( _detalhes.class_colors [ tabela [ 3 ] ] ) )
barra.icone : SetTexture ( " Interface \\ AddOns \\ Details \\ images \\ classes_small " )
barra.icone : SetTexCoord ( _unpack ( _detalhes.class_coords [ tabela [ 3 ] ] ) )
barra : Show ( ) --mostra a barra
if ( index == 15 ) then
break
end
end
for i = lastIndex + 1 , # barras do
barras [ i ] : Hide ( )
end
end
function atributo_energy : MontaTooltipAlvos ( esta_barra , index )
local instancia = breakdownWindowFrame.instancia
local tabela_do_combate = instancia.showing
local container = tabela_do_combate [ class_type ]
local total_regenerado = self.received
local my_name = self.nome
reset_tooltips_table ( )
-- actor nome
local actor = container._ActorTable [ container._NameIndexTable [ esta_barra.nome_inimigo ] ]
--print("Mouse Over", actor, esta_barra.nome_inimigo, self.tipo)
if ( actor ) then
--spells:
local i = 1
for spellid , spell in pairs ( actor.spells . _ActorTable ) do
local on_self = spell.targets [ my_name ]
if ( on_self ) then
local t = energy_tooltips_table [ i ]
if ( not t ) then
energy_tooltips_table [ i ] = { }
t = energy_tooltips_table [ i ]
end
t [ 1 ] , t [ 2 ] , t [ 3 ] = spellid , on_self , " "
i = i + 1
end
end
i = i - 1
_table_sort ( energy_tooltips_table , _detalhes.Sort2 )
--print(i, #energy_tooltips_table)
for index , spell in ipairs ( energy_tooltips_table ) do
if ( spell [ 2 ] < 1 ) then
break
end
local spellname , _ , spellicon = _GetSpellInfo ( spell [ 1 ] )
GameTooltip : AddDoubleLine ( spellname .. " : " , _detalhes : comma_value ( spell [ 2 ] ) .. " ( " .. _cstr ( " %.1f " , ( spell [ 2 ] / total_regenerado ) * 100 ) .. " %) " , 1 , 1 , 1 , 1 , 1 , 1 )
GameTooltip : AddTexture ( spellicon )
end
end
return true
end
--controla se o dps do jogador esta travado ou destravado
function atributo_energy : GetOrChangeActivityStatus ( iniciar )
return false --retorna se o dps esta aberto ou fechado para este jogador
end
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--core functions
--atualize a funcao de abreviacao
function atributo_energy : UpdateSelectedToKFunction ( )
SelectedToKFunction = ToKFunctions [ _detalhes.ps_abbreviation ]
FormatTooltipNumber = ToKFunctions [ _detalhes.tooltip . abbreviation ]
TooltipMaximizedMethod = _detalhes.tooltip . maximize_method
headerColor = _detalhes.tooltip . header_text_color
end
--subtract total from a combat table
function atributo_energy : subtract_total ( combat_table )
--print("reduce total:", combat_table.totals [class_type] [self.powertype], self.total, self.powertype, self.nome)
if ( self.powertype and combat_table.totals [ class_type ] [ self.powertype ] ) then
combat_table.totals [ class_type ] [ self.powertype ] = combat_table.totals [ class_type ] [ self.powertype ] - self.total
if ( self.grupo ) then
combat_table.totals_grupo [ class_type ] [ self.powertype ] = combat_table.totals_grupo [ class_type ] [ self.powertype ] - self.total
end
end
end
function atributo_energy : add_total ( combat_table )
--print("add total:", combat_table.totals [class_type] [self.powertype], self.total)
if ( self.powertype and combat_table.totals [ class_type ] [ self.powertype ] ) then
combat_table.totals [ class_type ] [ self.powertype ] = combat_table.totals [ class_type ] [ self.powertype ] + self.total
if ( self.grupo ) then
combat_table.totals_grupo [ class_type ] [ self.powertype ] = combat_table.totals_grupo [ class_type ] [ self.powertype ] + self.total
end
end
end
--restaura e liga o ator com a sua shadow durante a inicializa��o
function atributo_energy : r_onlyrefresh_shadow ( actor )
--criar uma shadow desse ator se ainda n�o tiver uma
local overall_energy = _detalhes.tabela_overall [ 3 ]
local shadow = overall_energy._ActorTable [ overall_energy._NameIndexTable [ actor.nome ] ]
if ( not shadow ) then
shadow = overall_energy : PegarCombatente ( actor.serial , actor.nome , actor.flag_original , true )
shadow.classe = actor.classe
shadow : SetSpecId ( actor.spec )
shadow.grupo = actor.grupo
shadow.pvp = actor.pvp
shadow.isTank = actor.isTank
shadow.boss = actor.boss
shadow.boss_fight_component = actor.boss_fight_component
shadow.fight_component = actor.fight_component
end
--restaura a meta e indexes ao ator
_detalhes.refresh : r_atributo_energy ( actor , shadow )
shadow.powertype = actor.powertype
if ( actor.resource ) then
shadow.resource = ( shadow.resource or 0 ) + actor.resource
shadow.resource_type = actor.resource_type
end
--targets
for target_name , amount in pairs ( actor.targets ) do
shadow.targets [ target_name ] = 0
end
--spells
for spellid , habilidade in pairs ( actor.spells . _ActorTable ) do
local habilidade_shadow = shadow.spells : PegaHabilidade ( spellid , true , " SPELL_ENERGY " , false )
--spell targets
for target_name , amount in pairs ( habilidade.targets ) do
habilidade_shadow.targets [ target_name ] = 0
end
end
return shadow
end
function atributo_energy : r_connect_shadow ( actor , no_refresh , combat_object )
local host_combat = combat_object or _detalhes.tabela_overall
--criar uma shadow desse ator se ainda n�o tiver uma
local overall_energy = host_combat [ 3 ]
local shadow = overall_energy._ActorTable [ overall_energy._NameIndexTable [ actor.nome ] ]
if ( not shadow ) then
shadow = overall_energy : PegarCombatente ( actor.serial , actor.nome , actor.flag_original , true )
shadow.classe = actor.classe
shadow : SetSpecId ( actor.spec )
shadow.grupo = actor.grupo
shadow.pvp = actor.pvp
shadow.isTank = actor.isTank
shadow.boss = actor.boss
shadow.boss_fight_component = actor.boss_fight_component
shadow.fight_component = actor.fight_component
end
--restaura a meta e indexes ao ator
if ( not no_refresh ) then
_detalhes.refresh : r_atributo_energy ( actor , shadow )
end
--pets (add unique pet names)
for _ , petName in ipairs ( actor.pets ) do
DetailsFramework.table . addunique ( shadow.pets , petName )
end
--total das energias (captura de dados)
shadow.total = shadow.total + actor.total
shadow.received = shadow.received + actor.received
shadow.alternatepower = shadow.alternatepower + actor.alternatepower
if ( not actor.powertype ) then
--print("actor without powertype", actor.nome, actor.powertype)
actor.powertype = 1
end
shadow.powertype = actor.powertype
if ( actor.resource ) then
shadow.resource = ( shadow.resource or 0 ) + actor.resource
shadow.resource_type = actor.resource_type
end
--total no combate overall (captura de dados)
host_combat.totals [ 3 ] [ actor.powertype ] = host_combat.totals [ 3 ] [ actor.powertype ] + actor.total
if ( actor.grupo ) then
host_combat.totals_grupo [ 3 ] [ actor.powertype ] = host_combat.totals_grupo [ 3 ] [ actor.powertype ] + actor.total
end
--targets
for target_name , amount in pairs ( actor.targets ) do
shadow.targets [ target_name ] = ( shadow.targets [ target_name ] or 0 ) + amount
end
--spells
for spellid , habilidade in pairs ( actor.spells . _ActorTable ) do
local habilidade_shadow = shadow.spells : PegaHabilidade ( spellid , true , " SPELL_ENERGY " , false )
habilidade_shadow.total = habilidade_shadow.total + habilidade.total
habilidade_shadow.counter = habilidade_shadow.counter + habilidade.counter
--spell targets
for target_name , amount in pairs ( habilidade.targets ) do
habilidade_shadow.targets [ target_name ] = ( habilidade_shadow.targets [ target_name ] or 0 ) + amount
end
end
return shadow
end
function _detalhes . refresh : r_atributo_energy ( este_jogador , shadow )
detailsFramework : Mixin ( este_jogador , Details222.Mixins . ActorMixin )
setmetatable ( este_jogador , _detalhes.atributo_energy )
este_jogador.__index = _detalhes.atributo_energy
_detalhes.refresh : r_container_habilidades ( este_jogador.spells , shadow and shadow.spells )
if ( shadow and not shadow.powertype ) then
shadow.powertype = este_jogador.powertype
end
end
function _detalhes . clear : c_atributo_energy ( este_jogador )
este_jogador.__index = nil
este_jogador.links = nil
este_jogador.minha_barra = nil
_detalhes.clear : c_container_habilidades ( este_jogador.spells )
end
atributo_energy.__add = function ( tabela1 , tabela2 )
if ( not tabela1.powertype ) then
tabela1.powertype = tabela2.powertype
end
if ( tabela1.resource ) then
tabela1.resource = tabela1.resource + ( tabela2.resource or 0 )
end
--total and received
tabela1.total = tabela1.total + tabela2.total
tabela1.received = tabela1.received + tabela2.received
tabela1.alternatepower = tabela1.alternatepower + tabela2.alternatepower
--targets
for target_name , amount in pairs ( tabela2.targets ) do
tabela1.targets [ target_name ] = ( tabela1.targets [ target_name ] or 0 ) + amount
end
--spells
for spellid , habilidade in pairs ( tabela2.spells . _ActorTable ) do
local habilidade_tabela1 = tabela1.spells : PegaHabilidade ( spellid , true , " SPELL_ENERGY " , false )
habilidade_tabela1.total = habilidade_tabela1.total + habilidade.total
habilidade_tabela1.counter = habilidade_tabela1.counter + habilidade.counter
--spell targets
for target_name , amount in pairs ( habilidade.targets ) do
habilidade_tabela1.targets [ target_name ] = ( habilidade_tabela1.targets [ target_name ] or 0 ) + amount
end
end
return tabela1
end
atributo_energy.__sub = function ( tabela1 , tabela2 )
if ( not tabela1.powertype ) then
tabela1.powertype = tabela2.powertype
end
if ( tabela1.resource ) then
tabela1.resource = tabela1.resource - ( tabela2.resource or 0 )
end
--total and received
tabela1.total = tabela1.total - tabela2.total
tabela1.received = tabela1.received - tabela2.received
tabela1.alternatepower = tabela1.alternatepower - tabela2.alternatepower
--targets
for target_name , amount in pairs ( tabela2.targets ) do
if ( tabela1.targets [ target_name ] ) then
tabela1.targets [ target_name ] = tabela1.targets [ target_name ] - amount
end
end
--spells
for spellid , habilidade in pairs ( tabela2.spells . _ActorTable ) do
local habilidade_tabela1 = tabela1.spells : PegaHabilidade ( spellid , true , " SPELL_ENERGY " , false )
habilidade_tabela1.total = habilidade_tabela1.total - habilidade.total
habilidade_tabela1.counter = habilidade_tabela1.counter - habilidade.counter
--spell targets
for target_name , amount in pairs ( habilidade.targets ) do
if ( habilidade_tabela1.targets [ target_name ] ) then
habilidade_tabela1.targets [ target_name ] = habilidade_tabela1.targets [ target_name ] - amount
end
end
end
return tabela1
end