local mod = DBM:NewMod(1819, "DBM-Raids-Legion", 4, 861) local L = mod:GetLocalizedStrings() mod:SetRevision("20240426185020") mod:SetCreatureID(114263, 114361, 114360)--114263 Odyn, 114361 Hymdall, 114360 Hyrja mod:SetEncounterID(1958) --mod:SetBossHPInfoToHighest() mod:SetMainBossID(114263) mod:SetUsedIcons(1) mod:SetHotfixNoticeRev(15581) mod.respawnTime = 29 mod:RegisterCombat("combat") mod:RegisterEventsInCombat( "SPELL_CAST_START 228003 228012 228171 231013", "SPELL_CAST_SUCCESS 228012 228028 228162 231350 227629", "SPELL_AURA_APPLIED 228029 227807 227959 227626 228918 227490 227491 227498 227499 227500 231311 231342 231344 231345 231346 229579 229580 229581 229582 229583 229584", "SPELL_AURA_APPLIED_DOSE 227626", "SPELL_AURA_REMOVED 228029 227807 227959 227490 227491 227498 227499 227500 231311 231342 231344 231345 231346 229584", "SPELL_PERIODIC_DAMAGE 228007 228683", "SPELL_PERIODIC_MISSED 228007 228683", "CHAT_MSG_RAID_BOSS_EMOTE", "UNIT_SPELLCAST_SUCCEEDED boss1 boss2 boss3" ) --TODO, phase 3 storms (area of affect). not in combat log or even transcriptor. appears every 30 seconds give or take. verify in more attempts and add scheduler for it --TODO, Cleansing flame timers/target announces? --Stage 1: Halls of Valor was merely a set back local hymdall = DBM:EJ_GetSectionInfo(14005) local hyrja = DBM:EJ_GetSectionInfo(14006) local warnDancingBlade = mod:NewCountAnnounce(228003, 3)--Change if target scanning works, but considering it doesn't in 5 man version of this spell, omitting for now local warnRevivify = mod:NewCastAnnounce(228171, 4) local warnExpelLight = mod:NewTargetAnnounce(228028, 3) local warnShieldofLight = mod:NewTargetCountAnnounce(228270, 3, nil, nil, nil, nil, nil, nil, true) --Stage 2: Stuff local warnPhase2 = mod:NewPhaseAnnounce(2, 2) --Stage 3: Odyn immitates lei shen local warnPhase3 = mod:NewPhaseAnnounce(3, 2) local warnStormofJustice = mod:NewTargetAnnounce(227807, 3) --Stage 1: Halls of Valor was merely a set back local specWarnDancingBlade = mod:NewSpecialWarningMove(228003, nil, nil, nil, 1, 2) --local yellDancingBlade = mod:NewYell(228003) local specWarnHornOfValor = mod:NewSpecialWarningMoveAway(228012, nil, nil, nil, 1, 2) local specWarnExpelLight = mod:NewSpecialWarningMoveAway(228028, nil, nil, nil, 1, 2) local yellExpelLight = mod:NewYell(228028) local specWarnShieldofLight = mod:NewSpecialWarningYou(228270, nil, nil, nil, 1, 2) local yellShieldofLightFades = mod:NewFadesYell(228270) local specWarnBranded = mod:NewSpecialWarningMoveTo(227503, nil, nil, nil, 3, 6) local yellBranded = mod:NewPosYell(227490, DBM_CORE_L.AUTO_YELL_CUSTOM_POSITION) --Stage 2: Odyn immitates margok local specWarnOdynsTest = mod:NewSpecialWarningCount(227626, nil, DBM_CORE_L.AUTO_SPEC_WARN_OPTIONS.stack:format(5, 159515), nil, 1, 2) local specWarnOdynsTestOther = mod:NewSpecialWarningTaunt(227626, nil, nil, nil, 1, 2) local specWarnShatterSpears = mod:NewSpecialWarningDodge(231013, false, nil, 2, 2, 2)--Every 8 seconds, so off by default local specWarnHyrja = mod:NewSpecialWarningSwitch("ej14006", nil, nil, nil, 1, 2) local specWarnHymall = mod:NewSpecialWarningSwitch("ej14005", nil, nil, nil, 1, 2) --Stage 3: Odyn immitates lei shen local specWarnStormofJustice = mod:NewSpecialWarningMoveAway(227807, nil, nil, nil, 1, 2) local yellStormofJustice = mod:NewYell(227807) local specWarnStormforgedSpear = mod:NewSpecialWarningRun(228918, nil, nil, nil, 4, 2) local specWarnStormforgedSpearOther = mod:NewSpecialWarningTaunt(228918, nil, nil, nil, 1, 2) local specWarnCleansingFlame = mod:NewSpecialWarningMove(228683, nil, nil, nil, 1, 2) --Mythic local specWarnRunicBrand = mod:NewSpecialWarningYouPos(231297, nil, nil, 2, 3, 6) local yellRunicBrand = mod:NewPosYell(231297, DBM_CORE_L.AUTO_YELL_CUSTOM_POSITION) --Adds (stage 1 and 2) mod:AddTimerLine(hymdall) local timerDancingBladeCD = mod:NewNextTimer(31, 228003, nil, nil, nil, 3)--Alternating two times local timerHornOfValorCD = mod:NewNextCountTimer(32, 228012, nil, nil, nil, 2, nil, nil, nil, 2, 4)--Alternating two times mod:AddTimerLine(hyrja) local timerExpelLightCD = mod:NewNextTimer(32, 228028, nil, nil, nil, 3)--Alternating two times local timerShieldofLightCD = mod:NewNextCountTimer(32, 228270, nil, nil, nil, 3, nil, nil, nil, 3, 4)--Alternating two times --Stage 1: Halls of Valor was merely a set back mod:AddTimerLine(SCENARIO_STAGE:format(1)) local timerDrawPowerCD = mod:NewNextTimer(70, 227503, nil, nil, nil, 6, nil, nil, nil, 1, 4) local timerDrawPower = mod:NewCastTimer(33, 227629, nil, nil, nil, 2, nil, DBM_COMMON_L.DEADLY_ICON, nil, 1, 4) --Stage 2: Odyn immitates margok mod:AddTimerLine(SCENARIO_STAGE:format(2)) local timerSpearCD = mod:NewNextTimer(8, 227697, nil, nil, nil, 3) local timerHymdallCD = mod:NewNextTimer(70, "ej14005", nil, nil, nil, 1, 228012, DBM_COMMON_L.DAMAGE_ICON) local timerHyrjaCD = mod:NewNextTimer(70, "ej14006", nil, nil, nil, 1, 228270, DBM_COMMON_L.DAMAGE_ICON) --Stage 3: Odyn immitates lei shen mod:AddTimerLine(SCENARIO_STAGE:format(3)) local timerStormOfJusticeCD = mod:NewNextTimer(10.9, 227807, nil, nil, nil, 3) local timerStormforgedSpearCD = mod:NewNextTimer(10.9, 228918, 71466, "Tank|Healer", nil, 5, nil, DBM_COMMON_L.TANK_ICON..DBM_COMMON_L.DEADLY_ICON, nil, 2, 4) --Mythic mod:AddTimerLine(ENCOUNTER_JOURNAL_SECTION_FLAG12) local timerRunicBrandCD = mod:NewNextTimer(35, 231297, nil, nil, nil, 3, nil, DBM_COMMON_L.HEROIC_ICON, nil, 1, 4) local timerRadiantSmite = mod:NewCastTimer(7.5, 231350, nil, nil, nil, 2, nil, DBM_COMMON_L.HEROIC_ICON) --local berserkTimer = mod:NewBerserkTimer(300) mod:AddSetIconOption("SetIconOnShield", 228270, true) mod:AddInfoFrameOption(227503, true) mod:AddRangeFrameOption("5/8/15") mod:AddNamePlateOption("NPAuraOnBranded", 227503, true) mod.vb.phase = 1 mod.vb.hornCasting = false mod.vb.hornCast = 0 mod.vb.shieldCast = 0 mod.vb.expelLightCast = 0 mod.vb.dancingBladeCast = 0 mod.vb.brandActive = false local drawTable = {} local playerProtected = false --Mythic Timers local dancingBladeTimers = {15.0, 20.1, 19.9, 25.0, 20.0} local hornTimers = {8.1, 22.0, 20.0, 35.0} local shieldTimers = {20.0, 20.0, 33.0, 22.0, 20.0} local expelLightTimers = {25.0, 20.0, 15.0, 30.0, 20.0} local debuffFilter local playerDebuff = nil local spellName, protected, expelLight, stormOfJustice = DBM:GetSpellName(231311), DBM:GetSpellName(229584), DBM:GetSpellName(228028), DBM:GetSpellName(227807) do debuffFilter = function(uId) if not playerDebuff then return true end if not DBM:UnitDebuff(uId, playerDebuff) then return true end end end local function updateRangeFrame(self) if not self.Options.RangeFrame then return end if self.vb.brandActive then DBM.RangeCheck:Show(15, debuffFilter)--There are no 15 yard items that are actually 15 yard, this will round to 18 :\ elseif DBM:UnitDebuff("player", expelLight) or DBM:UnitDebuff("player", stormOfJustice) then DBM.RangeCheck:Show(8) elseif self.vb.hornCasting then--Spread for Horn of Valor DBM.RangeCheck:Show(5) else DBM.RangeCheck:Hide() end end local updateInfoFrame do local lines = {} local sortedLines = {} local function addLine(key, value) -- sort by insertion order lines[key] = value sortedLines[#sortedLines + 1] = key end updateInfoFrame = function() local total = 0 table.wipe(lines) table.wipe(sortedLines) if drawTable[227490] then--Purple K (NE) addLine(drawTable[227490], "|TInterface\\Icons\\Boss_OdunRunes_Purple.blp:12:12|tNE|TInterface\\Icons\\Boss_OdunRunes_Purple.blp:12:12|t") end if drawTable[227491] then--Orange N (SE) addLine(drawTable[227491], "|TInterface\\Icons\\Boss_OdunRunes_Orange.blp:12:12|tSE|TInterface\\Icons\\Boss_OdunRunes_Orange.blp:12:12|t") end if drawTable[227498] then--Yellow H (SW) addLine(drawTable[227498], "|TInterface\\Icons\\Boss_OdunRunes_Yellow.blp:12:12|tSW|TInterface\\Icons\\Boss_OdunRunes_Yellow.blp:12:12|t") end if drawTable[227499] then--Blue fishies (NW) addLine(drawTable[227499], "|TInterface\\Icons\\Boss_OdunRunes_Blue.blp:12:12|tNW|TInterface\\Icons\\Boss_OdunRunes_Blue.blp:12:12|t") end if drawTable[227500] then--Green box (N) addLine(drawTable[227500], "|TInterface\\Icons\\Boss_OdunRunes_Green.blp:12:12|tN|TInterface\\Icons\\Boss_OdunRunes_Green.blp:12:12|t") end if mod:IsMythic() then if playerProtected then addLine(protected, "|cFF088A08"..YES.."|r") else addLine(protected, "|cffff0000"..NO.."|r") end else if #sortedLines == 0 then DBM.InfoFrame:Hide() end end return lines, sortedLines end end function mod:OnCombatStart(delay) self.vb.phase = 1 self.vb.hornCasting = false self.vb.hornCast = 0 self.vb.shieldCast = 0 self.vb.expelLightCast = 0 self.vb.dancingBladeCast = 0 self.vb.brandActive = false table.wipe(drawTable) playerDebuff = nil if self:IsMythic() then timerHornOfValorCD:Start(8-delay, 1) timerDancingBladeCD:Start(15-delay) timerShieldofLightCD:Start(20-delay, 1) timerExpelLightCD:Start(25-delay) timerDrawPowerCD:Start(35-delay) elseif not self:IsEasy() then timerHornOfValorCD:Start(8-delay, 1) timerDancingBladeCD:Start(16-delay) timerShieldofLightCD:Start(23-delay, 1) timerExpelLightCD:Start(32-delay) timerDrawPowerCD:Start(40-delay) else--LFR/Normal timerHornOfValorCD:Start(10-delay, 1) timerDancingBladeCD:Start(20-delay) timerShieldofLightCD:Start(30-delay, 1) timerExpelLightCD:Start(40-delay) if self:IsNormal() then timerDrawPowerCD:Start(45-delay) end end if self.Options.NPAuraOnBranded then DBM:FireEvent("BossMod_EnableHostileNameplates") end end function mod:OnCombatEnd() if self.Options.RangeFrame then DBM.RangeCheck:Hide() end if self.Options.InfoFrame then DBM.InfoFrame:Hide() end if self.Options.NPAuraOnBranded then DBM.Nameplate:Hide(false, nil, nil, nil, true, true) end end function mod:SPELL_CAST_START(args) local spellId = args.spellId if spellId == 228003 then self.vb.dancingBladeCast = self.vb.dancingBladeCast + 1 warnDancingBlade:Show(self.vb.dancingBladeCast) if self.vb.phase == 1 then if self:IsMythic() then local timer = dancingBladeTimers[self.vb.dancingBladeCast+1] if timer then timerDancingBladeCD:Start(timer) end elseif self:IsEasy() then if self.vb.dancingBladeCast == 1 or self.vb.dancingBladeCast == 5 or self.vb.dancingBladeCast == 9 then timerDancingBladeCD:Start(30) else timerDancingBladeCD:Start(20) end else if self.vb.dancingBladeCast % 2 == 0 then timerDancingBladeCD:Start(39) else timerDancingBladeCD:Start(31) end end else timerDancingBladeCD:Start(12) end elseif spellId == 228012 then self.vb.hornCasting = true self.vb.hornCast = self.vb.hornCast + 1 specWarnHornOfValor:Show() specWarnHornOfValor:Play("scatter") if self.vb.phase == 1 then if self:IsMythic() then local timer = hornTimers[self.vb.hornCast+1] if timer then timerHornOfValorCD:Start(timer, self.vb.hornCast+1) end elseif self:IsEasy() then if self.vb.hornCast % 2 == 0 then --timerHornOfValorCD:Start(43, self.vb.hornCast+1)--More data needed. Probably has an alternation else timerHornOfValorCD:Start(70) end else if self.vb.hornCast % 2 == 0 then timerHornOfValorCD:Start(43, self.vb.hornCast+1) else timerHornOfValorCD:Start(27, self.vb.hornCast+1) end end else timerHornOfValorCD:Start(30, self.vb.hornCast+1)--Need more data end updateRangeFrame(self) elseif spellId == 228171 and self:AntiSpam(2, 2) then warnRevivify:Show() elseif spellId == 231013 then specWarnShatterSpears:Show() specWarnHornOfValor:Play("watchorb") end end function mod:SPELL_CAST_SUCCESS(args) local spellId = args.spellId if spellId == 228012 then self.vb.hornCasting = false updateRangeFrame(self) elseif spellId == 228028 then self.vb.expelLightCast = self.vb.expelLightCast + 1 if self.vb.phase == 1 then if self:IsMythic() then local timer = expelLightTimers[self.vb.expelLightCast+1] if timer then timerExpelLightCD:Start(timer) end elseif self:IsEasy() then if self.vb.expelLightCast % 2 == 0 then timerExpelLightCD:Start(50) else timerExpelLightCD:Start(20) end else if self.vb.expelLightCast % 2 == 0 then timerExpelLightCD:Start(38) else timerExpelLightCD:Start(32) end end else timerExpelLightCD:Start(18.2) end elseif spellId == 228162 then--Cast finished, cleanup icons if self.Options.SetIconOnShield then self:SetIcon(args.destName, 0) end elseif spellId == 231350 then self.vb.brandActive = false updateRangeFrame(self) elseif spellId == 227629 and self.Options.InfoFrame then DBM.InfoFrame:Hide() end end function mod:SPELL_AURA_APPLIED(args) local spellId = args.spellId if spellId == 228029 then warnExpelLight:CombinedShow(0.3, args.destName)--TODO: Confirm can be more than one target if args:IsPlayer() then specWarnExpelLight:Show() specWarnExpelLight:Play("runout") yellExpelLight:Yell() updateRangeFrame(self) end elseif spellId == 227807 or spellId == 227959 then--Add and non add version warnStormofJustice:CombinedShow(0.3, args.destName) if args:IsPlayer() then specWarnStormofJustice:Show() specWarnStormofJustice:Play("runout") yellStormofJustice:Yell() updateRangeFrame(self) end elseif spellId == 227626 then local amount = args.amount or 1 if (amount == 5 or amount >= 9) and self:AntiSpam(3, 3) then--First warning at 5, then a decent amount of time until 8. then spam every 3 seconds at 8 and above. if self:IsTanking("player", "boss1", nil, true) then specWarnOdynsTest:Show(amount) specWarnOdynsTest:Play("changemt") else specWarnOdynsTestOther:Show(L.name) specWarnOdynsTestOther:Play("changemt") end end elseif spellId == 228918 then timerStormforgedSpearCD:Start()--If this can miss, move it to a success event. if args:IsPlayer() then specWarnStormforgedSpear:Show() specWarnStormforgedSpear:Play("justrun") else specWarnStormforgedSpearOther:Show(args.destName) specWarnStormforgedSpearOther:Play("tauntboss") end elseif spellId == 227490 or spellId == 227491 or spellId == 227498 or spellId == 227499 or spellId == 227500 then--Branded (Draw Power Runes) drawTable[spellId] = args.destName if spellId == 227490 and args:IsPlayer() then--Purple K (NE) specWarnBranded:Show("|TInterface\\Icons\\Boss_OdunRunes_Purple.blp:12:12|tNE|TInterface\\Icons\\Boss_OdunRunes_Purple.blp:12:12|t") specWarnBranded:Play("mm3") yellBranded:Yell(3, args.spellName, 3) elseif spellId == 227491 and args:IsPlayer() then--Orange N (SE) specWarnBranded:Show("|TInterface\\Icons\\Boss_OdunRunes_Orange.blp:12:12|tSE|TInterface\\Icons\\Boss_OdunRunes_Orange.blp:12:12|t") specWarnBranded:Play("mm2") yellBranded:Yell(2, args.spellName, 2) elseif spellId == 227498 and args:IsPlayer() then--Yellow H (SW) specWarnBranded:Show("|TInterface\\Icons\\Boss_OdunRunes_Yellow.blp:12:12|tSW|TInterface\\Icons\\Boss_OdunRunes_Yellow.blp:12:12|t") specWarnBranded:Play("mm1") yellBranded:Yell(1, args.spellName, 1) elseif spellId == 227499 and args:IsPlayer() then--Blue fishies (NW) specWarnBranded:Show("|TInterface\\Icons\\Boss_OdunRunes_Blue.blp:12:12|tNW|TInterface\\Icons\\Boss_OdunRunes_Blue.blp:12:12|t") specWarnBranded:Play("mm6") yellBranded:Yell(6, args.spellName, 6) elseif spellId == 227500 and args:IsPlayer() then--Green box (N) specWarnBranded:Show("|TInterface\\Icons\\Boss_OdunRunes_Green.blp:12:12|tN|TInterface\\Icons\\Boss_OdunRunes_Green.blp:12:12|t") specWarnBranded:Play("mm4") yellBranded:Yell(4, args.spellName, 4) end if self.Options.InfoFrame then if not DBM.InfoFrame:IsShown() then DBM.InfoFrame:SetHeader(args.spellName) DBM.InfoFrame:Show(6, "function", updateInfoFrame, false, false, true) else DBM.InfoFrame:Update() end end if self.Options.NPAuraOnBranded then DBM.Nameplate:Show(true, args.sourceGUID, spellId) end elseif spellId == 229579 or spellId == 229580 or spellId == 229581 or spellId == 229582 or spellId == 229583 then--Branded (Mythic Phase 1/2 non fixate rune debuffs) if spellId == 229579 and args:IsPlayer() then--Purple K (NE) specWarnBranded:Show("|TInterface\\Icons\\Boss_OdunRunes_Purple.blp:12:12|tNE|TInterface\\Icons\\Boss_OdunRunes_Purple.blp:12:12|t") specWarnBranded:Play("mm3") elseif spellId == 229580 and args:IsPlayer() then--Orange N (SE) specWarnBranded:Show("|TInterface\\Icons\\Boss_OdunRunes_Orange.blp:12:12|tSE|TInterface\\Icons\\Boss_OdunRunes_Orange.blp:12:12|t") specWarnBranded:Play("mm2") elseif spellId == 229581 and args:IsPlayer() then--Yellow H (SW) specWarnBranded:Show("|TInterface\\Icons\\Boss_OdunRunes_Yellow.blp:12:12|tSW|TInterface\\Icons\\Boss_OdunRunes_Yellow.blp:12:12|t") specWarnBranded:Play("mm1") elseif spellId == 229582 and args:IsPlayer() then--Blue fishies (NW) specWarnBranded:Show("|TInterface\\Icons\\Boss_OdunRunes_Blue.blp:12:12|tNW|TInterface\\Icons\\Boss_OdunRunes_Blue.blp:12:12|t") specWarnBranded:Play("mm6") elseif spellId == 229583 and args:IsPlayer() then--Green box (N) specWarnBranded:Show("|TInterface\\Icons\\Boss_OdunRunes_Green.blp:12:12|tN|TInterface\\Icons\\Boss_OdunRunes_Green.blp:12:12|t") specWarnBranded:Play("mm4") end elseif spellId == 231311 or spellId == 231342 or spellId == 231344 or spellId == 231345 or spellId == 231346 then--Runic Brand (Phase 3 Mythic) if args:IsPlayer() then playerDebuff = spellId if spellId == 231311 then--Purple K (NE) specWarnRunicBrand:Show("|TInterface\\Icons\\Boss_OdunRunes_Purple.blp:12:12|t") specWarnRunicBrand:Play("mm3") yellRunicBrand:Yell(3, args.spellName, 3) elseif spellId == 231342 then--Orange N (SE) specWarnRunicBrand:Show("|TInterface\\Icons\\Boss_OdunRunes_Orange.blp:12:12|t") specWarnRunicBrand:Play("mm2") yellRunicBrand:Yell(2, args.spellName, 2) elseif spellId == 231344 then--Yellow H (SW) specWarnRunicBrand:Show("|TInterface\\Icons\\Boss_OdunRunes_Yellow.blp:12:12|t") specWarnRunicBrand:Play("mm1") yellRunicBrand:Yell(1, args.spellName, 1) elseif spellId == 231345 then--Blue fishies (NW) specWarnRunicBrand:Show("|TInterface\\Icons\\Boss_OdunRunes_Blue.blp:12:12|t") specWarnRunicBrand:Play("mm6") yellRunicBrand:Yell(6, args.spellName, 6) elseif spellId == 231346 then--Green box (N) specWarnRunicBrand:Show("|TInterface\\Icons\\Boss_OdunRunes_Green.blp:12:12|t") specWarnRunicBrand:Play("mm4") yellRunicBrand:Yell(4, args.spellName, 4) end updateRangeFrame(self) end elseif spellId == 229584 and args:IsPlayer() then playerProtected = true if self.Options.InfoFrame then DBM.InfoFrame:Update() end end end mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED function mod:SPELL_AURA_REMOVED(args) local spellId = args.spellId if spellId == 228029 then if args:IsPlayer() then updateRangeFrame(self) end elseif spellId == 227807 or spellId == 227959 then--Add and non add version if args:IsPlayer() then updateRangeFrame(self) end elseif spellId == 227490 or spellId == 227491 or spellId == 227498 or spellId == 227499 or spellId == 227500 then--Branded (Draw Power Runes) drawTable[spellId] = nil if self.Options.InfoFrame then DBM.InfoFrame:Update() end if self.Options.NPAuraOnBranded then DBM.Nameplate:Hide(true, args.sourceGUID, spellId) end elseif spellId == 231311 or spellId == 231342 or spellId == 231344 or spellId == 231345 or spellId == 231346 then--Branded (Draw Power Runes) if args:IsPlayer() then playerDebuff = nil end elseif spellId == 229584 and args:IsPlayer() then playerProtected = false if self.Options.InfoFrame then DBM.InfoFrame:Update() end end end function mod:SPELL_PERIODIC_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId) if spellId == 228007 and destGUID == UnitGUID("player") and self:AntiSpam(2, 1) then specWarnDancingBlade:Show() specWarnDancingBlade:Play("runaway") elseif spellId == 228683 and destGUID == UnitGUID("player") and self:AntiSpam(2, 4) then specWarnCleansingFlame:Show() specWarnCleansingFlame:Play("runaway") end end mod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE --"<35.57 16:56:12> [CHAT_MSG_RAID_BOSS_EMOTE] |TInterface\\Icons\\ABILITY_PRIEST_FLASHOFLIGHT.BLP:20|t Hyrja targets |cFFFF0000Wakmagic|r with |cFFFF0404|Hspell:228162|h[Shield of Light]|h|r!#Hyrja###Wakmagic##0#0##0#476#nil#0#false#false#false#false", -- [241] function mod:CHAT_MSG_RAID_BOSS_EMOTE(msg, npc, _, _, target) if msg:find("spell:228162") then self.vb.shieldCast = self.vb.shieldCast + 1 if self.vb.phase == 1 then if self:IsMythic() then local timer = shieldTimers[self.vb.shieldCast+1] if timer then timerShieldofLightCD:Start(timer, self.vb.shieldCast+1) end else if self.vb.shieldCast % 2 == 0 then timerShieldofLightCD:Start(38, self.vb.shieldCast+1) else timerShieldofLightCD:Start(32, self.vb.shieldCast+1) end end else timerShieldofLightCD:Start(25) end local targetname = DBM:GetUnitFullName(target) if targetname then if targetname == UnitName("player") then specWarnShieldofLight:Show() specWarnShieldofLight:Play("targetyou") yellShieldofLightFades:Schedule(2.8, 1) yellShieldofLightFades:Schedule(1.8, 2) yellShieldofLightFades:Schedule(0.8, 3) else warnShieldofLight:Show(self.vb.shieldCast, targetname) end if self.Options.SetIconOnShield then self:SetIcon(targetname, 1) end end --"<269.72 17:21:06> [CHAT_MSG_RAID_BOSS_EMOTE] |cFFFF0000Hyrja|r leaps back into battle!#Hyrja###Odyn##0#0##0#344#nil#0#false#false#false#false", -- [1538] elseif npc and target and target == L.name then--Odyn only target when it's a leap into battle. if npc == hyrja then self.vb.shieldCast = 0 specWarnHyrja:Show() specWarnHyrja:Play("bigmob") timerExpelLightCD:Start(4.7) timerShieldofLightCD:Start(9.7) if self:IsMythic() then timerHymdallCD:Start(64) elseif self:IsHeroic() then timerHymdallCD:Start(67) end elseif npc == hymdall then self.vb.hornCast = 0 specWarnHymall:Show() specWarnHymall:Play("bigmob") timerDancingBladeCD:Start(5) timerHornOfValorCD:Start(9.5, 1) if self:IsMythic() then timerHyrjaCD:Start(67) elseif self:IsHeroic() then timerHyrjaCD:Start(70) end end end end function mod:UNIT_SPELLCAST_SUCCEEDED(uId, _, spellId) --"<51.36 16:56:28> [UNIT_SPELLCAST_SUCCEEDED] Odyn(??) [[boss1:Draw Power::3-3198-1648-10280-227503-000A6050FC:227503]]", -- [376] if spellId == 227503 or spellId == 229576 then--Draw Power timerDrawPower:Start() if self:IsEasy() then timerDrawPowerCD:Start(75)--LFR phase 2 verified. Might still be 70 in heroic though. no logs long enough for phase 2 elseif self:IsMythic() then timerDrawPowerCD:Start(65)--65 in phase 1, 66 in phase 2 but i'm ok with using 65 for both for now else timerDrawPowerCD:Start() end --if self.vb.phase == 2 then -- timerSpearCD:Stop() -- timerSpearCD:Start(35) --end --"<150.12 16:58:07> [UNIT_SPELLCAST_SUCCEEDED] Odyn(??) [[boss1:Test for Players::3-3198-1648-10280-229168-000660515F:229168]]", -- [1347] --"<156.10 16:58:13> [UNIT_SPELLCAST_SUCCEEDED] Odyn(??) [[boss1:Leap into Battle::3-3198-1648-10280-227882-0001605165:227882]]", -- [1382] --"<159.34 16:58:16> [UNIT_SPELLCAST_SUCCEEDED] Odyn(??) [[boss1:Spear Transition - Holy::3-3198-1648-10280-228734-0004E05168:228734]]", -- [1395] elseif spellId == 231297 then--Phase 3 mythic runic Brand self.vb.brandActive = true timerRadiantSmite:Start() timerRunicBrandCD:Start() elseif spellId == 229168 then--Test for Players (Phase 1 end) warnPhase2:Show() self.vb.hornCast = 0--Verify self.vb.shieldCast = 0--Verify self.vb.expelLightCast = 0--Verify self.vb.dancingBladeCast = 0--Verify timerDancingBladeCD:Stop() timerHornOfValorCD:Stop() timerExpelLightCD:Stop() timerShieldofLightCD:Stop() timerDrawPowerCD:Stop() timerDrawPower:Stop() timerSpearCD:Start(13) if self:IsEasy() then timerDrawPowerCD:Start(53) elseif self:IsMythic() then timerDrawPowerCD:Start(45) else timerDrawPowerCD:Start(48) end --Timers above started in earliest possible place --Timer started at jump though has to be delayed to avoid phase 1 ClearAllDebuffs events if self.Options.InfoFrame then DBM.InfoFrame:Hide() end elseif spellId == 227882 then--Jump into Battle (phase 2 begin) self.vb.phase = 2 if not self:IsEasy() then timerHyrjaCD:Start(16) end elseif spellId == 34098 and self.vb.phase == 2 then--ClearAllDebuffs (any of bosses leaving) local cid = self:GetUnitCreatureId(uId) if cid == 114361 then--Hymdall timerDancingBladeCD:Stop() timerHornOfValorCD:Stop() elseif cid == 114360 then--Hyrja timerExpelLightCD:Stop() timerShieldofLightCD:Stop() end elseif spellId == 227697 then--Spear of Light if self:IsMythic() then timerSpearCD:Start(7) else timerSpearCD:Start() end specWarnShatterSpears:Show() specWarnShatterSpears:Play("watchorb") --"<487.37 21:38:02> [CHAT_MSG_MONSTER_YELL] It seems I have been too gentle. Have at thee!#Odyn#####0#0##0#191#nil#0#false#false#false#false", -- [2839] --"<489.60 21:38:04> [UNIT_SPELLCAST_SUCCEEDED] Odyn(??) [[boss1:Spear Transition - Thunder::3-2012-1648-3815-228740-00058AC2FC:228740]]", -- [2940] --"<489.60 21:38:04> [UNIT_SPELLCAST_SUCCEEDED] Odyn(??) [[boss1:Arcing Storm::3-2012-1648-3815-229254-00060AC2FC:229254]]", -- [2941] elseif spellId == 228740 then--Spear Transition - Thunder (Phase 3 begin) self.vb.phase = 3 timerHymdallCD:Stop() timerHyrjaCD:Stop() timerDrawPower:Stop() timerDrawPowerCD:Stop() warnPhase3:Show() timerStormOfJusticeCD:Start(4) timerStormforgedSpearCD:Start(9) if self:IsMythic() then timerRunicBrandCD:Start(21) end end end