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.

650 lines
26 KiB

local mod = DBM:NewMod(1819, "DBM-Raids-Legion", 4, 861)
local L = mod:GetLocalizedStrings()
mod:SetRevision("20230618063432")
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:GetSpellInfo(231311), DBM:GetSpellInfo(229584), DBM:GetSpellInfo(228028), DBM:GetSpellInfo(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