You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1639 lines
52 KiB

--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 alvo_da_habilidade = _detalhes.alvo_da_habilidade
local container_habilidades = _detalhes.container_habilidades
local container_combatentes = _detalhes.container_combatentes
local container_pets = _detalhes.container_pets
local atributo_energy = _detalhes.atributo_energy
local habilidade_energy = _detalhes.habilidade_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 DATA_TYPE_START = _detalhes._detalhes_props.DATA_TYPE_START
local DATA_TYPE_END = _detalhes._detalhes_props.DATA_TYPE_END
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:EsconderBarrasNaoUsadas (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)
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