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.

196 lines
6.1 KiB

--File Revision: 1
--Last Modification: 27/07/2013
-- Change Log:
-- 27/07/2013: Finished alpha version.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
local _detalhes = _G.Details
local Loc = LibStub("AceLocale-3.0"):GetLocale ( "Details" )
local _
local addonName, Details222 = ...
--initialize buffs name container
_detalhes.Buffs.BuffsTable = {} -- armazenara o [nome do buff] = { tabela do buff }
_detalhes.Buffs.__index = _detalhes.Buffs
--switch off recording buffs by default
_detalhes.RecordPlayerSelfBuffs = false
_detalhes.RecordPlayerAbilityWithBuffs = false
_detalhes.RecordPlayerSelfDebuffs = false
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--local pointers
local pairs = pairs --lua local
local ipairs = ipairs --lua local
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--details api functions
--return if the buff is already registred or not
function _detalhes.Buffs:IsRegistred (buff)
if (type(buff) == "number") then
for _, buffObject in pairs(_detalhes.Buffs.BuffsTable) do
if (buffObject.id == buff) then
return true
end
end
return false
elseif (type(buff) == "string") then
for name, _ in pairs(_detalhes.Buffs.BuffsTable) do
if (name == buff) then
return true
end
end
return false
end
end
--register a new buff name
function _detalhes.Buffs:NewBuff (BuffName, BuffId)
if (not BuffName) then
BuffName = GetSpellInfo(BuffId)
end
if (_detalhes.Buffs.BuffsTable [BuffName]) then
return false
else
_detalhes.Buffs.BuffsTable [BuffName] = _detalhes.Buffs:BuildBuffTable (BuffName, BuffId)
end
end
--remove a registred buff
function _detalhes.Buffs:RemoveBuff (BuffName)
if (not _detalhes.Buffs.BuffsTable [BuffName]) then
return false
else
_detalhes.Buffs.BuffsTable = _detalhes:tableRemove (_detalhes.Buffs.BuffsTable, BuffName)
return true
end
end
--return a list of registred buffs
function _detalhes.Buffs:GetBuffList()
local list = {}
for name, _ in pairs(_detalhes.Buffs.BuffsTable) do
list [#list+1] = name
end
return list
end
--return a list of registred buffs ids
function _detalhes.Buffs:GetBuffListIds()
local list = {}
for name, buffObject in pairs(_detalhes.Buffs.BuffsTable) do
list [#list+1] = buffObject.id
end
return list
end
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--internal functions
function _detalhes.Buffs:UpdateBuff (method)
-- self = buff table
if (method == "new") then
self.start = _detalhes._tempo
self.castedAmt = self.castedAmt + 1
self.active = true
self.appliedAt [#self.appliedAt+1] = _detalhes.tabela_vigente:GetCombatTime()
_detalhes:SendEvent("BUFF_UPDATE")
elseif (method == "refresh") then
self.refreshAmt = self.refreshAmt + 1
self.duration = self.duration + (_detalhes._tempo - self.start)
self.start = _detalhes._tempo
self.appliedAt [#self.appliedAt+1] = _detalhes.tabela_vigente:GetCombatTime()
_detalhes:SendEvent("BUFF_UPDATE")
elseif (method == "remove") then
if (self.start) then
self.duration = self.duration + (_detalhes._tempo - self.start)
else
self.duration = 0
end
self.droppedAmt = self.droppedAmt + 1
self.start = nil
self.active = false
_detalhes:SendEvent("BUFF_UPDATE")
end
end
--build buffs
function _detalhes.Buffs:BuildTables()
_detalhes.Buffs.built = true
if (_detalhes.savedbuffs) then
for _, BuffId in ipairs(_detalhes.savedbuffs) do
_detalhes.Buffs:NewBuff (nil, BuffId)
end
end
end
--save buff list when addon exit
function _detalhes.Buffs:SaveBuffs()
_detalhes_database.savedbuffs = _detalhes.Buffs:GetBuffListIds()
end
--construct a buff table of the new buff registred
function _detalhes.Buffs:BuildBuffTable (BuffName, BuffId)
local bufftable = {name = BuffName, id = BuffId, duration = 0, start = nil, castedAmt = 0, refreshAmt = 0, droppedAmt = 0, active = false, appliedAt = {}}
bufftable.IsBuff = true
setmetatable(bufftable, _detalhes.Buffs)
return bufftable
end
--update player buffs
function _detalhes.Buffs:CatchBuffs()
if (not _detalhes.Buffs.built) then
_detalhes.Buffs:BuildTables()
end
for _, BuffTable in pairs(_detalhes.Buffs.BuffsTable) do
if (BuffTable.active) then
BuffTable.start = _detalhes._tempo
BuffTable.castedAmt = 1
else
BuffTable.start = nil
BuffTable.castedAmt = 0
end
BuffTable.appliedAt = {}
BuffTable.duration = 0
BuffTable.refreshAmt = 0
BuffTable.droppedAmt = 0
end
--catch buffs untracked yet
for buffIndex = 1, 41 do
local name = UnitAura ("player", buffIndex)
if (name) then
local bufftable = _detalhes.Buffs.BuffsTable [name]
if (bufftable and not bufftable.active) then
bufftable.active = true
bufftable.castedAmt = 1
bufftable.start = _detalhes._tempo
end
--[[
for index, BuffName in pairs(_detalhes.SoloTables.BuffsTableNameCache) do
if (BuffName == name) then
local BuffObject = _detalhes.SoloTables.SoloBuffUptime [name]
if (not BuffObject) then
_detalhes.SoloTables.SoloBuffUptime [name] = {name = name, duration = 0, start = nil, castedAmt = 1, refreshAmt = 0, droppedAmt = 0, Active = true, tableIndex = index, appliedAt = {}}
--_detalhes.SoloTables.BuffTextEntry [index].backgroundFrame:Active()
end
end
end
--]]
end
end
end