vanilla-wow-addons – Rev 1
?pathlinks?
local dewdrop = AceLibrary("Dewdrop-2.0")
local tablet = AceLibrary("Tablet-2.0")
local parser = ParserLib:GetInstance('1.1')
local compost = AceLibrary("Compost-2.0")
local L = AceLibrary("AceLocale-2.0"):new("FuBar_DPS")
FuBar_DPS = AceLibrary("AceAddon-2.0"):new("FuBarPlugin-2.0", "AceEvent-2.0", "AceConsole-2.0", "AceDB-2.0", "Metrognome-2.0" )
FuBar_DPS:RegisterDB("FuBar_DPS_DB")
FuBar_DPS:RegisterDefaults('profile', {
myDmgDone = true,
myDmgTaken = true
})
local _, isPetClass = UnitClass('player')
if not (isPetClass == "WARLOCK" or isPetClass == "HUNTER" ) then
isPetClass = nil
end
local OnCombatEvent = function(event, info)
FuBar_DPS:OnCombatEvent(event, info);
end
local optionsTable = {
type = 'group',
args = {
player = {
order = 1,
type = 'group',
name = L["MENU_PLAYER"],
desc = L["TOOLTIP_PLAYER"],
args = {
dps = {
order = 1,
type = 'toggle',
name = L["myDmgDone"],
desc = L["myDmgDone"],
set = 'SetMyDmgDone',
get = 'IsMyDmgDone',
},
dtps = {
order = 2,
type = 'toggle',
name = L["myDmgTaken"],
desc = L["myDmgTaken"],
set = 'SetMyDmgTaken',
get = 'IsMyDmgTaken',
},
hps = {
order = 3,
type = 'toggle',
name = L["myHealDone"],
desc = L["myHealDone"],
set = 'SetMyHealDone',
get = 'IsMyHealDone',
},
htps = {
order = 4,
type = 'toggle',
name = L["myHealTaken"],
desc = L["myHealTaken"],
set = 'SetMyHealTaken',
get = 'IsMyHealTaken',
},
},
},
hideLabel = {
order = 5,
type = 'toggle',
name = L["MENU_HIDE_LABEL"],
desc = L["MENU_HIDE_LABEL"],
set = 'SetHideLabel',
get = "IsHideLabel",
},
reset = {
order = 7,
type = 'execute',
name = L["MENU_RESET"],
desc = L["MENU_RESET"],
func = 'ResetSession',
}
}
}
FuBar_DPS.eventList = {
"CHAT_MSG_COMBAT_CREATURE_VS_SELF_HITS",
"CHAT_MSG_COMBAT_HOSTILEPLAYER_HITS",
"CHAT_MSG_COMBAT_SELF_HITS",
"CHAT_MSG_SPELL_CREATURE_VS_SELF_BUFF",
"CHAT_MSG_SPELL_CREATURE_VS_SELF_DAMAGE",
"CHAT_MSG_SPELL_DAMAGESHIELDS_ON_OTHERS",
"CHAT_MSG_SPELL_DAMAGESHIELDS_ON_SELF",
"CHAT_MSG_SPELL_FRIENDLYPLAYER_BUFF",
-- "CHAT_MSG_SPELL_FRIENDLYPLAYER_DAMAGE",
"CHAT_MSG_SPELL_HOSTILEPLAYER_BUFF",
-- "CHAT_MSG_SPELL_HOSTILEPLAYER_DAMAGE",
"CHAT_MSG_SPELL_PARTY_BUFF",
-- "CHAT_MSG_SPELL_PARTY_DAMAGE",
"CHAT_MSG_SPELL_PERIODIC_CREATURE_BUFFS",
"CHAT_MSG_SPELL_PERIODIC_CREATURE_DAMAGE",
"CHAT_MSG_SPELL_PERIODIC_FRIENDLYPLAYER_BUFFS",
"CHAT_MSG_SPELL_PERIODIC_FRIENDLYPLAYER_DAMAGE",
"CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_BUFFS",
"CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_DAMAGE",
"CHAT_MSG_SPELL_PERIODIC_PARTY_BUFFS",
"CHAT_MSG_SPELL_PERIODIC_PARTY_DAMAGE",
"CHAT_MSG_SPELL_PERIODIC_SELF_BUFFS",
"CHAT_MSG_SPELL_PERIODIC_SELF_DAMAGE",
"CHAT_MSG_SPELL_SELF_BUFF",
"CHAT_MSG_SPELL_SELF_DAMAGE",
"CHAT_MSG_COMBAT_PET_HITS",
"CHAT_MSG_SPELL_PET_BUFF",
"CHAT_MSG_SPELL_PET_DAMAGE",
}
FuBar_DPS.myDPS = { "myDmgDone", "myDmgTaken", "myHealDone", "myHealTaken" }
FuBar_DPS.petDPS = {}
FuBar_DPS.colors = {
myDmgDone = "ff0000",
myDmgTaken = "ff7f00",
myHealDone = "00ff00",
myHealTaken = "2020ff",
petDmgDone = "ff3030",
petDmgTaken = "ff7f30",
petHealDone = "30ff30",
petHealTaken = "5050ff",
}
FuBar_DPS.stats = {
session = {
myDmgDone = 0,
myDmgTaken = 0,
myHealDone = 0,
myHealTaken = 0,
duration = 0,
},
last = {
myDmgDone = 0,
myDmgTaken = 0,
myHealDone = 0,
myHealTaken = 0,
duration = 0,
},
}
FuBar_DPS.vars = {
inCombat = false
}
function FuBar_DPS:OnInitialize()
self:RegisterEvent("PLAYER_REGEN_DISABLED")
self:RegisterEvent("PLAYER_REGEN_ENABLED")
self:RegisterMetro(self.name, self.TickCombat, 1, self)
if isPetClass then
self:InitializePetClass()
end
end
function FuBar_DPS:OnEnable()
for i, event in self.eventList do
parser:RegisterEvent(self.name, event, OnCombatEvent)
end
end
function FuBar_DPS:OnDisable()
parser:UnregisterAllEvents(self.name)
end
function FuBar_DPS:PLAYER_REGEN_DISABLED()
for i in self.stats.last do
self.stats.last[i] = 0
end
self.vars.inCombat = true;
self:StartMetro(self.name)
end
function FuBar_DPS:PLAYER_REGEN_ENABLED()
self:StopMetro(self.name)
for i, v in self.stats.last do
self.stats.session[i] = self.stats.session[i] + v
end
self.vars.inCombat = false
end
function FuBar_DPS:OnCombatEvent(event, info)
if self.vars.inCombat then
if info.type == "hit" then
if info.source == ParserLib_SELF then
self.stats.last.myDmgDone = self.stats.last.myDmgDone + tonumber(info.amount);
elseif isPetClass and info.source == UnitName("pet") then
self.stats.last.petDmgDone = self.stats.last.petDmgDone + tonumber(info.amount);
end
if info.victim == ParserLib_SELF then
self.stats.last.myDmgTaken = self.stats.last.myDmgTaken + tonumber(info.amount);
elseif isPetClass and info.victim == UnitName("pet") then
self.stats.last.petDmgTaken = self.stats.last.petDmgTaken + tonumber(info.amount);
end
elseif info.type == "heal" then
if info.source == ParserLib_SELF then
self.stats.last.myHealDone = self.stats.last.myHealDone + tonumber(info.amount);
elseif isPetClass and info.source == UnitName("pet") then
self.stats.last.petHealDone = self.stats.last.petHealDone + tonumber(info.amount);
end
if info.victim == ParserLib_SELF then
self.stats.last.myHealTaken = self.stats.last.myHealTaken + tonumber(info.amount);
elseif isPetClass and info.victim == UnitName("pet") then
self.stats.last.petHealTaken = self.stats.last.petHealTaken + tonumber(info.amount);
end
end
end
end
function FuBar_DPS:TickCombat(difference)
self.stats.last.duration = self.stats.last.duration + difference
self:Update()
end
function FuBar_DPS:GetDPS(category, field)
local duration = self.stats[category].duration
if duration < 1 then duration = 1 end
return string.format("|cff%s%.1f|r", self.colors[field], self.stats[category][field] / duration)
end
function FuBar_DPS:ResetSession()
for i in self.stats.session do
self.stats.session[i] = 0
end
end
function FuBar_DPS:OnTextUpdate()
local label, text, petLabel, petText
if not self.db.profile.hideLabel then
label = L.LABEL_DPS
petLabel = L.LABEL_PET
end
if isPetClass and self.db.profile.mergeDPS then
self:SetAddedStats();
end
text = ""
for i, v in self.myDPS do
if self.db.profile[v] then text = text .. "/" .. self:GetDPS("last", v) end
end
if string.sub(text, 1, 1) == "/" then text = string.sub(text, 2) end
if text == "" then label = "" end
if isPetClass and self.db.profile.mergeDPS then
self:UnsetAddedStats();
end
petText = ""
for i, v in self.petDPS do
if self.db.profile[v] then petText = petText .. "/" .. self:GetDPS("last", v) end
end
if string.sub(petText, 1, 1) == "/" then petText = string.sub(petText, 2) end
if petText == "" then petLabel = nil end
-- Do not turn everything off!
if text == "" and not label and petText == "" and not petLabel then
label = L.LABEL_DPS
end
local t = compost:Acquire()
if label then table.insert(t, label) end
if text ~= "" then table.insert(t, text) end
if petLabel then table.insert(t, petLabel) end
if petText ~= "" then table.insert(t, petText) end
self:SetText( table.concat(t, " ") )
compost:Reclaim(t)
end
function FuBar_DPS:OnTooltipUpdate()
if not self.statsCats then
self.statsCats = { 'session', 'last' }
end
for i, statsCat in self.statsCats do
local cat = tablet:AddCategory(
'columns', 3,
'text', L[statsCat],
'text2', string.format("%ds", self.stats[statsCat].duration),
'text3', L.TOTAL,
'child_textR', 1,
'child_textG', 1,
'child_textB', 0
);
if isPetClass and self.db.profile.showPetTooltip then
cat:AddLine(
'text', string.format("|cffeda55f%s|r", L.MENU_PLAYER)
)
end
for i, statsType in self.myDPS do
cat:AddLine(
'text', L[statsType],
'text2', self:GetDPS(statsCat, statsType),
'text3', self.stats[statsCat][statsType]
);
end
if isPetClass and self.db.profile.showPetTooltip then
cat:AddLine(
'text', string.format("|cffeda55f%s|r", L.MENU_PET)
)
for i, statsType in self.petDPS do
cat:AddLine(
'text', L[statsType],
'text2', self:GetDPS(statsCat, statsType),
'text3', self.stats[statsCat][statsType]
);
end
end
end
end
-- Set()s and Get()S
function FuBar_DPS:SetHideLabel(v)
self.db.profile.hideLabel = v
self:Update()
end
function FuBar_DPS:SetMyDmgDone(v)
self.db.profile.myDmgDone = v
self:Update()
end
function FuBar_DPS:SetMyDmgTaken(v)
self.db.profile.myDmgTaken = v
self:Update()
end
function FuBar_DPS:SetMyHealDone(v)
self.db.profile.myHealDone = v
self:Update()
end
function FuBar_DPS:SetMyHealTaken(v)
self.db.profile.myHealTaken = v
self:Update()
end
function FuBar_DPS:IsHideLabel()
return self.db.profile.hideLabel
end
function FuBar_DPS:IsMyDmgDone()
return self.db.profile.myDmgDone
end
function FuBar_DPS:IsMyDmgTaken()
return self.db.profile.myDmgTaken
end
function FuBar_DPS:IsMyHealDone()
return self.db.profile.myHealDone
end
function FuBar_DPS:IsMyHealTaken()
return self.db.profile.myHealTaken
end
if isPetClass then
function FuBar_DPS:SetMergeDPS(v)
self.db.profile.mergeDPS = v
self:Update()
end
function FuBar_DPS:SetShowPetTooltip(v)
self.db.profile.showPetTooltip = v
self:Update()
end
function FuBar_DPS:IsMergeDPS()
return self.db.profile.mergeDPS
end
function FuBar_DPS:IsShowPetTooltip()
return self.db.profile.showPetTooltip
end
function FuBar_DPS:SetPetDmgDone(v)
self.db.profile.petDmgDone = v
self:Update()
end
function FuBar_DPS:SetPetDmgTaken(v)
self.db.profile.petDmgTaken = v
self:Update()
end
function FuBar_DPS:SetPetHealDone(v)
self.db.profile.petHealDone = v
self:Update()
end
function FuBar_DPS:SetPetHealTaken(v)
self.db.profile.petHealTaken = v
self:Update()
end
function FuBar_DPS:IsPetDmgDone()
return self.db.profile.petDmgDone
end
function FuBar_DPS:IsPetDmgTaken()
return self.db.profile.petDmgTaken
end
function FuBar_DPS:IsPetHealDone()
return self.db.profile.petHealDone
end
function FuBar_DPS:IsPetHealTaken()
return self.db.profile.petHealTaken
end
function FuBar_DPS:SetAddedStats()
if not self.stats.oldLast then self.stats.oldLast = {} end
-- Switch stats to oldStats.
local tmp = self.stats.oldLast
self.stats.oldLast = self.stats.last
self.stats.last = tmp
local stats = self.stats.last
local oldStats = self.stats.oldLast
stats.myDmgDone = oldStats.myDmgDone + oldStats.petDmgDone
stats.myDmgTaken = oldStats.myDmgTaken + oldStats.petDmgTaken
stats.myHealDone = oldStats.myHealDone + oldStats.petHealDone
stats.myHealTaken = oldStats.myHealTaken + oldStats.petHealTaken
stats.duration = oldStats.duration
end
function FuBar_DPS:UnsetAddedStats()
-- Switch back.
local tmp = self.stats.last
self.stats.last = self.stats.oldLast
self.stats.oldLast = tmp
end
function FuBar_DPS:InitializePetClass()
self.stats.session.petDmgDone = 0
self.stats.session.petDmgTaken = 0
self.stats.session.petHealDone = 0
self.stats.session.petHealTaken = 0
self.stats.last.petDmgDone = 0
self.stats.last.petDmgTaken = 0
self.stats.last.petHealDone = 0
self.stats.last.petHealTaken = 0
self.petDPS = { "petDmgDone", "petDmgTaken", "petHealDone", "petHealTaken" }
end
optionsTable.args.mergeDPS = {
order = 3,
type = 'toggle',
name = L["MENU_MERGE_DPS"],
desc = L["MENU_MERGE_DPS"],
set = 'SetMergeDPS',
get = "IsMergeDPS",
}
optionsTable.args.showPetTooltip = {
order = 4,
type = 'toggle',
name = L["MENU_SHOW_PET_TOOLTIP"],
desc = L["MENU_SHOW_PET_TOOLTIP"],
set = 'SetShowPetTooltip',
get = "IsShowPetTooltip",
}
optionsTable.args.pet = {
order = 2,
type = 'group',
name = L["MENU_PET"],
desc = L["TOOLTIP_PET"],
args = {
petDmgDone = {
order = 1,
type = 'toggle',
name = L["petDmgDone"],
desc = L["petDmgDone"],
set = 'SetPetDmgDone',
get = 'IsPetDmgDone',
},
petDmgTaken = {
order = 2,
type = 'toggle',
name = L["petDmgTaken"],
desc = L["petDmgTaken"],
set = 'SetPetDmgTaken',
get = 'IsPetDmgTaken',
},
petHealDone = {
order = 3,
type = 'toggle',
name = L["petHealDone"],
desc = L["petHealDone"],
set = 'SetPetHealDone',
get = 'IsPetHealDone',
},
petHealTaken = {
order = 4,
type = 'toggle',
name = L["petHealTaken"],
desc = L["petHealTaken"],
set = 'SetPetHealTaken',
get = 'IsPetHealTaken',
},
},
}
end
FuBar_DPS.OnMenuRequest = optionsTable
FuBar_DPS:RegisterChatCommand( { "/fbdps" }, optionsTable )
Generated by GNU Enscript 1.6.5.90.