local Details = _G.Details --> 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_callback_phase = function (event, msg, ...) --print("D!", event, msg, ...) local mod = Details.encounter_table.DBM_Mod if (not mod) then local id = Details:GetEncounterIdFromBossIndex (Details.encounter_table.mapid, Details.encounter_table.id) if (id) then for index, tmod in ipairs (DBM.Mods) do if (tmod.id == id) then Details.encounter_table.DBM_Mod = tmod mod = tmod end end end end local newPhase = 1 --D! DBM_Announce Stage 3 136116 stagechange 0 2429 false if (event == "DBM_Announce") then if (msg:find("Stage")) then msg = msg:gsub("%a", "") msg = msg:gsub("%s+", "") newPhase = tonumber(msg) --print("New Phase: ", newPhase) local ID, msg2, someId, someNumber, aBool = ... if (msg2 == "stagechange") then --print("D! yeash", msg2) end local phase = newPhase if (phase and Details.encounter_table.phase ~= phase) then Details:Msg ("Current phase is now:", phase) Details:OnCombatPhaseChanged() Details.encounter_table.phase = phase local cur_combat = Details:GetCurrentCombat() local time = cur_combat:GetCombatTime() if (time > 5) then tinsert (cur_combat.PhaseData, {phase, time}) end Details:SendEvent ("COMBAT_ENCOUNTER_PHASE_CHANGED", nil, phase) end end end end local dbm_callback_pull = function (event, mod, delay, synced, startHp) Details.encounter_table.DBM_Mod = mod Details.encounter_table.DBM_ModTime = time() end DBM:RegisterCallback ("DBM_Announce", dbm_callback_phase) DBM:RegisterCallback ("pull", dbm_callback_pull) 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 cur_combat = Details:GetCurrentCombat() local time = cur_combat:GetCombatTime() if (time > 5) then tinsert (cur_combat.PhaseData, {phase, time}) 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