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.
171 lines
7.2 KiB
171 lines
7.2 KiB
|
|
local Details = _G.Details
|
|
local addonName, Details222 = ...
|
|
|
|
--get the total of damage and healing of a phase of an encounter
|
|
function Details:OnCombatPhaseChanged()
|
|
|
|
local current_combat = Details:GetCurrentCombat()
|
|
local current_phase = current_combat.PhaseData [#current_combat.PhaseData][1]
|
|
|
|
local phase_damage_container = current_combat.PhaseData.damage [current_phase]
|
|
local phase_healing_container = current_combat.PhaseData.heal [current_phase]
|
|
|
|
local phase_damage_section = current_combat.PhaseData.damage_section
|
|
local phase_healing_section = current_combat.PhaseData.heal_section
|
|
|
|
if (not phase_damage_container) then
|
|
phase_damage_container = {}
|
|
current_combat.PhaseData.damage [current_phase] = phase_damage_container
|
|
end
|
|
if (not phase_healing_container) then
|
|
phase_healing_container = {}
|
|
current_combat.PhaseData.heal [current_phase] = phase_healing_container
|
|
end
|
|
|
|
for index, damage_actor in ipairs(Details.cache_damage_group) do
|
|
local phase_damage = damage_actor.total - (phase_damage_section [damage_actor.nome] or 0)
|
|
phase_damage_section [damage_actor.nome] = damage_actor.total
|
|
phase_damage_container [damage_actor.nome] = (phase_damage_container [damage_actor.nome] or 0) + phase_damage
|
|
end
|
|
|
|
for index, healing_actor in ipairs(Details.cache_healing_group) do
|
|
local phase_heal = healing_actor.total - (phase_healing_section [healing_actor.nome] or 0)
|
|
phase_healing_section [healing_actor.nome] = healing_actor.total
|
|
phase_healing_container [healing_actor.nome] = (phase_healing_container [healing_actor.nome] or 0) + phase_heal
|
|
end
|
|
end
|
|
|
|
function Details:BossModsLink()
|
|
if (_G.DBM) then
|
|
local DBM = _G.DBM
|
|
local DBMCallbackPhase2 = function(event, mod, modId, phase, encounterId, stageTotal)
|
|
local encounterTable = Details.encounter_table
|
|
|
|
if (phase and encounterTable.phase ~= phase) then
|
|
--Details:Msg("Current phase is now:", phase)
|
|
Details:OnCombatPhaseChanged()
|
|
encounterTable.phase = phase
|
|
local currentCombat = Details:GetCurrentCombat()
|
|
local combatTime = currentCombat:GetCombatTime()
|
|
if (combatTime > 5) then
|
|
tinsert(currentCombat.PhaseData, {phase, combatTime})
|
|
end
|
|
Details:SendEvent("COMBAT_ENCOUNTER_PHASE_CHANGED", nil, phase)
|
|
end
|
|
end
|
|
|
|
local DBMCallbackPull = function(event, mod, delay, synced, startHp)
|
|
local encounterTable = Details.encounter_table
|
|
encounterTable.DBM_Mod = mod
|
|
encounterTable.DBM_ModTime = time()
|
|
end
|
|
|
|
DBM:RegisterCallback("pull", DBMCallbackPull)
|
|
DBM:RegisterCallback("DBM_SetStage", DBMCallbackPhase2)
|
|
end
|
|
|
|
if (BigWigsLoader and not _G.DBM) then
|
|
|
|
--Bigwigs change the phase of an encounter
|
|
function Details:BigWigs_SetStage (event, module, phase)
|
|
phase = tonumber(phase)
|
|
|
|
if (phase and type(phase) == "number" and Details.encounter_table.phase ~= phase) then
|
|
Details:OnCombatPhaseChanged()
|
|
|
|
Details.encounter_table.phase = phase
|
|
|
|
local currentCombat = Details:GetCurrentCombat()
|
|
local combatTime = currentCombat:GetCombatTime()
|
|
if (combatTime > 5) then
|
|
tinsert(currentCombat.PhaseData, {phase, combatTime})
|
|
end
|
|
|
|
Details:SendEvent("COMBAT_ENCOUNTER_PHASE_CHANGED", nil, phase)
|
|
--Details:Msg("Current phase is now:", phase)
|
|
end
|
|
end
|
|
|
|
if (BigWigsLoader.RegisterMessage) then
|
|
BigWigsLoader.RegisterMessage (Details, "BigWigs_SetStage")
|
|
end
|
|
end
|
|
|
|
Details:CreateCallbackListeners()
|
|
end
|
|
|
|
|
|
function Details:CreateCallbackListeners()
|
|
|
|
Details.DBM_timers = {}
|
|
|
|
local current_encounter = false
|
|
local current_table_dbm = {}
|
|
local current_table_bigwigs = {}
|
|
|
|
local event_frame = CreateFrame("frame", nil, UIParent, "BackdropTemplate")
|
|
event_frame:SetScript("OnEvent", function(self, event, ...)
|
|
if (event == "ENCOUNTER_START") then
|
|
local encounterID, encounterName, difficultyID, raidSize = select(1, ...)
|
|
current_encounter = encounterID
|
|
|
|
elseif (event == "ENCOUNTER_END" or event == "PLAYER_REGEN_ENABLED") then
|
|
if (current_encounter) then
|
|
if (_G.DBM) then
|
|
local db = Details.boss_mods_timers
|
|
for spell, timer_table in pairs(current_table_dbm) do
|
|
if (not db.encounter_timers_dbm [timer_table[1]]) then
|
|
timer_table.id = current_encounter
|
|
db.encounter_timers_dbm [timer_table[1]] = timer_table
|
|
end
|
|
end
|
|
end
|
|
if (BigWigs) then
|
|
local db = Details.boss_mods_timers
|
|
for timer_id, timer_table in pairs(current_table_bigwigs) do
|
|
if (not db.encounter_timers_bw [timer_id]) then
|
|
timer_table.id = current_encounter
|
|
db.encounter_timers_bw [timer_id] = timer_table
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
current_encounter = false
|
|
wipe (current_table_dbm)
|
|
wipe (current_table_bigwigs)
|
|
end
|
|
end)
|
|
event_frame:RegisterEvent("ENCOUNTER_START")
|
|
event_frame:RegisterEvent("ENCOUNTER_END")
|
|
event_frame:RegisterEvent("PLAYER_REGEN_ENABLED")
|
|
|
|
if (_G.DBM) then
|
|
local dbm_timer_callback = function(bar_type, id, msg, timer, icon, bartype, spellId, colorId, modid)
|
|
local spell = tostring(spellId)
|
|
if (spell and not current_table_dbm [spell]) then
|
|
current_table_dbm [spell] = {spell, id, msg, timer, icon, bartype, spellId, colorId, modid}
|
|
end
|
|
end
|
|
DBM:RegisterCallback ("DBM_TimerStart", dbm_timer_callback)
|
|
end
|
|
|
|
--record Bigwigs timers shown at /details spells.
|
|
--this is also usage to create weakauras directly from details!
|
|
function Details:RegisterBigWigsCallBack()
|
|
if (BigWigsLoader) then
|
|
function Details:BigWigs_StartBar (event, module, spellid, bar_text, time, icon, ...)
|
|
spellid = tostring(spellid)
|
|
if (not current_table_bigwigs [spellid]) then
|
|
current_table_bigwigs [spellid] = {(type(module) == "string" and module) or (module and module.moduleName) or "", spellid or "", bar_text or "", time or 0, icon or ""}
|
|
end
|
|
end
|
|
if (BigWigsLoader.RegisterMessage) then
|
|
BigWigsLoader.RegisterMessage (Details, "BigWigs_StartBar")
|
|
end
|
|
end
|
|
end
|
|
|
|
Details.Schedules.NewTimer(5, Details.RegisterBigWigsCallBack, Details)
|
|
end
|
|
|