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.
195 lines
5.3 KiB
195 lines
5.3 KiB
|
3 years ago
|
--- ============================ HEADER ============================
|
||
|
|
--- ======= LOCALIZE =======
|
||
|
|
-- Addon
|
||
|
|
local addonName, addonTable = ...
|
||
|
|
-- HeroLib
|
||
|
|
local HL = HeroLib
|
||
|
|
local Cache, Utils = HeroCache, HL.Utils
|
||
|
|
local Unit = HL.Unit
|
||
|
|
local Player, Pet, Target = Unit.Player, Unit.Pet, Unit.Target
|
||
|
|
local Focus, MouseOver = Unit.Focus, Unit.MouseOver
|
||
|
|
local Arena, Boss, Nameplate = Unit.Arena, Unit.Boss, Unit.Nameplate
|
||
|
|
local Party, Raid = Unit.Party, Unit.Raid
|
||
|
|
local Spell = HL.Spell
|
||
|
|
local Item = HL.Item
|
||
|
|
-- Lua
|
||
|
|
local C_Timer = C_Timer
|
||
|
|
local tableremove = table.remove
|
||
|
|
local tableinsert = table.insert
|
||
|
|
-- WoW API
|
||
|
|
local GetTime = GetTime
|
||
|
|
-- File Locals
|
||
|
|
|
||
|
|
--- ============================ CONTENT ============================
|
||
|
|
--- ======= NON-COMBATLOG =======
|
||
|
|
|
||
|
|
|
||
|
|
--- ======= COMBATLOG =======
|
||
|
|
--- Combat Log Arguments
|
||
|
|
------- Base -------
|
||
|
|
-- 1 2 3 4 5 6 7 8 9 10 11
|
||
|
|
-- TimeStamp, Event, HideCaster, SourceGUID, SourceName, SourceFlags, SourceRaidFlags, DestGUID, DestName, DestFlags, DestRaidFlags
|
||
|
|
|
||
|
|
------- Prefixes -------
|
||
|
|
--- SWING
|
||
|
|
-- N/A
|
||
|
|
|
||
|
|
--- SPELL & SPELL_PACIODIC
|
||
|
|
-- 12 13 14
|
||
|
|
-- SpellID, SpellName, SpellSchool
|
||
|
|
|
||
|
|
------- Suffixes -------
|
||
|
|
--- _CAST_START & _CAST_SUCCESS & _SUMMON & _RESURRECT
|
||
|
|
-- N/A
|
||
|
|
|
||
|
|
--- _CAST_FAILED
|
||
|
|
-- 15
|
||
|
|
-- FailedType
|
||
|
|
|
||
|
|
--- _AURA_APPLIED & _AURA_REMOVED & _AURA_REFRESH
|
||
|
|
-- 15
|
||
|
|
-- AuraType
|
||
|
|
|
||
|
|
--- _AURA_APPLIED_DOSE
|
||
|
|
-- 15 16
|
||
|
|
-- AuraType, Charges
|
||
|
|
|
||
|
|
--- _INTERRUPT
|
||
|
|
-- 15 16 17
|
||
|
|
-- ExtraSpellID, ExtraSpellName, ExtraSchool
|
||
|
|
|
||
|
|
--- _HEAL
|
||
|
|
-- 15 16 17 18
|
||
|
|
-- Amount, Overhealing, Absorbed, Critical
|
||
|
|
|
||
|
|
--- _DAMAGE
|
||
|
|
-- 15 16 17 18 19 20 21 22 23
|
||
|
|
-- Amount, Overkill, School, Resisted, Blocked, Absorbed, Critical, Glancing, Crushing
|
||
|
|
|
||
|
|
--- _MISSED
|
||
|
|
-- 15 16 17
|
||
|
|
-- MissType, IsOffHand, AmountMissed
|
||
|
|
|
||
|
|
------- Special -------
|
||
|
|
--- UNIT_DIED, UNIT_DESTROYED
|
||
|
|
-- N/A
|
||
|
|
|
||
|
|
--- End Combat Log Arguments
|
||
|
|
|
||
|
|
-- Arguments Variables
|
||
|
|
|
||
|
|
--------------------------
|
||
|
|
------- Brewmaster -------
|
||
|
|
--------------------------
|
||
|
|
|
||
|
|
-- Stagger Tracker
|
||
|
|
local StaggerSpellID = 115069
|
||
|
|
local StaggerDoTID = 124255
|
||
|
|
local BobandWeave = Spell(280515)
|
||
|
|
local StaggerFull = 0
|
||
|
|
local StaggerDamage = {}
|
||
|
|
local IncomingDamage = {}
|
||
|
|
|
||
|
|
local function RegisterStaggerFullAbsorb(Amount)
|
||
|
|
local StaggerDuration = 10 + (BobandWeave:IsAvailable() and 3 or 0)
|
||
|
|
StaggerFull = StaggerFull + Amount
|
||
|
|
C_Timer.After(StaggerDuration, function() StaggerFull = StaggerFull - Amount; end)
|
||
|
|
end
|
||
|
|
|
||
|
|
local function RegisterStaggerDamageTaken(Amount)
|
||
|
|
if #StaggerDamage == 10 then
|
||
|
|
tableremove(StaggerDamage, 10)
|
||
|
|
end
|
||
|
|
tableinsert(StaggerDamage, 1, Amount)
|
||
|
|
end
|
||
|
|
|
||
|
|
local function RegisterIncomingDamageTaken(Amount)
|
||
|
|
while #IncomingDamage > 0 and IncomingDamage[#IncomingDamage][1] < GetTime() - 6 do
|
||
|
|
tableremove(IncomingDamage, #IncomingDamage)
|
||
|
|
end
|
||
|
|
tableinsert(IncomingDamage, 1, {GetTime(), Amount})
|
||
|
|
end
|
||
|
|
|
||
|
|
function Player:StaggerFull()
|
||
|
|
return StaggerFull
|
||
|
|
end
|
||
|
|
|
||
|
|
function Player:StaggerLastTickDamage(Count)
|
||
|
|
local TickDamage = 0
|
||
|
|
if Count > #StaggerDamage then
|
||
|
|
Count = #StaggerDamage
|
||
|
|
end
|
||
|
|
for i=1, Count do
|
||
|
|
TickDamage = TickDamage + StaggerDamage[i]
|
||
|
|
end
|
||
|
|
return TickDamage
|
||
|
|
end
|
||
|
|
|
||
|
|
function Player:IncomingDamageTaken(Milliseconds)
|
||
|
|
local DamageTaken = 0
|
||
|
|
local TimeOffset = Milliseconds / 1000
|
||
|
|
for i=1, #IncomingDamage do
|
||
|
|
if IncomingDamage[i][1] > GetTime() - TimeOffset then
|
||
|
|
DamageTaken = DamageTaken + IncomingDamage[i][2]
|
||
|
|
end
|
||
|
|
end
|
||
|
|
return DamageTaken
|
||
|
|
end
|
||
|
|
|
||
|
|
HL:RegisterForCombatEvent(
|
||
|
|
function (...)
|
||
|
|
local args = {...}
|
||
|
|
-- Absorb is coming from a spell damage
|
||
|
|
if #args == 23 then
|
||
|
|
local _, _, _, _, _, _, _, DestGUID, _, _, _, _, _, _, _, _, _, _, SpellID, _, _, Amount = ...
|
||
|
|
if DestGUID == Player:GUID() and SpellID == StaggerSpellID then
|
||
|
|
RegisterStaggerFullAbsorb(Amount)
|
||
|
|
end
|
||
|
|
else
|
||
|
|
local _, _, _, _, _, _, _, DestGUID, _, _, _, _, _, _, _, SpellID, _, _, Amount = ...
|
||
|
|
if DestGUID == Player:GUID() and SpellID == StaggerSpellID then
|
||
|
|
RegisterStaggerFullAbsorb(Amount)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
, "SPELL_ABSORBED"
|
||
|
|
)
|
||
|
|
|
||
|
|
HL:RegisterForCombatEvent(
|
||
|
|
function(...)
|
||
|
|
local _, _, _, _, _, _, _, DestGUID, _, _, _, SpellID, _, _, Amount = ...
|
||
|
|
if DestGUID == Player:GUID() and SpellID == StaggerDoTID and Amount > 0 then
|
||
|
|
RegisterStaggerDamageTaken(Amount)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
, "SPELL_PERIODIC_DAMAGE"
|
||
|
|
)
|
||
|
|
|
||
|
|
HL:RegisterForCombatEvent(
|
||
|
|
function(...)
|
||
|
|
local _, _, _, _, _, _, _, DestGUID, _, _, _, _, _, _, Amount = ...
|
||
|
|
if Cache.Persistent.Player.Spec[1] == 268 and DestGUID == Player:GUID() and Amount ~= nil and Amount > 0 then
|
||
|
|
RegisterIncomingDamageTaken(Amount)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
, "SWING_DAMAGE"
|
||
|
|
, "SPELL_DAMAGE"
|
||
|
|
, "SPELL_PERIODIC_DAMAGE"
|
||
|
|
)
|
||
|
|
|
||
|
|
HL:RegisterForEvent(
|
||
|
|
function()
|
||
|
|
if #StaggerDamage > 0 then
|
||
|
|
for i=0, #StaggerDamage do
|
||
|
|
StaggerDamage[i]=nil
|
||
|
|
end
|
||
|
|
end
|
||
|
|
if #IncomingDamage > 0 then
|
||
|
|
for i=0, #IncomingDamage do
|
||
|
|
IncomingDamage[i]=nil
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
, "PLAYER_REGEN_ENABLED"
|
||
|
|
)
|