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.
1028 lines
42 KiB
1028 lines
42 KiB
local mod = DBM:NewMod(2520, "DBM-Raids-Dragonflight", 2, 1208)
|
|
local L = mod:GetLocalizedStrings()
|
|
|
|
mod:SetRevision("20240629030018")
|
|
mod:SetCreatureID(201754)
|
|
mod:SetEncounterID(2685)
|
|
mod:SetUsedIcons(1, 2, 3, 4, 5, 6, 7, 8)
|
|
mod:SetHotfixNoticeRev(20230620000000)
|
|
--mod:SetMinSyncRevision(20221215000000)
|
|
mod.respawnTime = 29
|
|
|
|
mod:RegisterCombat("combat")
|
|
|
|
mod:RegisterEventsInCombat(
|
|
"SPELL_CAST_START 401383 401810 401500 401642 402050 401325 404027 404456 404769 411302 404754 404403 411030 407496 404288 411236 403741 405022 403625 403517 408422 401704",
|
|
"SPELL_SUMMON 404505 404507",
|
|
"SPELL_AURA_APPLIED 401951 401215 403997 407576 401905 401680 401330 404218 404705 407496 404288 411241 405486 403520 408429 403284 410654 410625",
|
|
"SPELL_AURA_APPLIED_DOSE 401951 403997 407576 401330 404269 411241 408429",
|
|
"SPELL_AURA_REMOVED 401951 401680 401330 404218 404705 407496 404288 404269 411241 403520 408429 401215 405486 410654 410625",
|
|
"SPELL_AURA_REMOVED_DOSE 401951",
|
|
"SPELL_DAMAGE 401621 402746 403524 404062 406428",
|
|
"SPELL_MISSED 401621 402746 403524 404062 406428",
|
|
"SPELL_PERIODIC_DAMAGE 406989",
|
|
"SPELL_PERIODIC_MISSED 406989",
|
|
"UNIT_DIED"
|
|
)
|
|
|
|
--[[
|
|
(ability.id = 401383 or ability.id = 401810 or ability.id = 401500 or ability.id = 401642 or ability.id = 402050 or ability.id = 401325 or ability.id = 404027 or ability.id = 404456 or ability.id = 404769 or ability.id = 411302 or ability.id = 404403 or ability.id = 411030 or ability.id = 407496 or ability.id = 404288 or ability.id = 411236 or ability.id = 403741 or ability.id = 405022 or ability.id = 403625 or ability.id = 408422 or ability.id = 401704) and type = "begincast"
|
|
or ability.id = 403517 and type = "cast"
|
|
or (ability.id = 403284 or ability.id = 410654) and (type = "applybuff" or type = "removebuff")
|
|
or (ability.id = 404505 or ability.id = 404507) and type = "summon"
|
|
or ability.id = 410625
|
|
or ability.id = 404754 and type = "begincast"
|
|
or (ability.id = 401383 or ability.id = 401215 or ability.id = 403997 or ability.id = 407576 or ability.id = 401905 or ability.id = 401680 or ability.id = 401330 or ability.id = 404218 or ability.id = 410642 or ability.id = 404705 or ability.id = 407496 or ability.id = 404288 or ability.id = 411241 or ability.id = 405486 or ability.id = 403520 or ability.id = 408429) and type = "applydebuff"
|
|
--]]
|
|
--General
|
|
local warnPhase = mod:NewPhaseChangeAnnounce(2, 2, nil, nil, nil, nil, nil, 2)
|
|
local warnOblivionStack = mod:NewCountAnnounce(401951, 2, nil, nil, DBM_CORE_L.AUTO_ANNOUNCE_OPTIONS.stack:format(401951))
|
|
local warnMindFragment = mod:NewAddsLeftAnnounce(403997, 1)--Not technically adds, but wording of option and alert text is ambigious that it doesn't matter, it fits
|
|
local warnEmptynessBetweenStars = mod:NewFadesAnnounce(401215, 1)
|
|
local warnAstralFlare = mod:NewCountAnnounce(407576, 1, nil, false, DBM_CORE_L.AUTO_ANNOUNCE_OPTIONS.stack:format(407576))--Optional, don't want it to drown out the important messages of collecting mind fragments
|
|
|
|
local specWarnOblivionStack = mod:NewSpecialWarningStack(401951, nil, 6, nil, nil, 1, 6)
|
|
local specWarnEmptynessBetweenStars = mod:NewSpecialWarningYou(401215, nil, nil, nil, 1, 5)
|
|
local specWarnGTFO = mod:NewSpecialWarningGTFO(406989, nil, nil, nil, 1, 8)
|
|
|
|
local timerPhaseCD = mod:NewStageTimer(30)
|
|
local timerEmptynessBetweenStars = mod:NewBuffFadesTimer(15, 401215, nil, nil, nil, 3)
|
|
local berserkTimer = mod:NewBerserkTimer(600)
|
|
|
|
mod:AddInfoFrameOption(401951, false)
|
|
mod:AddDropdownOption("InfoFrameBehaviorTwo", {"OblivionOnly", "HowlOnly", "Hybrid"}, "OblivionOnly", "misc", nil, 401951)
|
|
--Stage One: The Legacy of the Dracthyr
|
|
mod:AddTimerLine(DBM:EJ_GetSectionInfo(26140))
|
|
local warnOppressingHowl = mod:NewSpellAnnounce(401383, 3, nil, nil, nil, nil, nil, 2)
|
|
local warnDazzled = mod:NewTargetNoFilterAnnounce(401905, 4, nil, false)--Not entirely much you can do about it's a lot but if it's a couple, a healer might want to see this to TRY and save them
|
|
local warnMassDisintegrate = mod:NewTargetCountAnnounce(401680, 3, nil, nil, 405391, nil, nil, nil, true)
|
|
local warnBurningClaws = mod:NewStackAnnounce(401330, 2, nil, "Tank|Healer")
|
|
|
|
local specWarnGlitteringSurge = mod:NewSpecialWarningCount(401810, nil, nil, nil, 2, 2)
|
|
local specWarnScorchingBomb = mod:NewSpecialWarningCount(401500, nil, 167180, nil, 2, 2)
|
|
|
|
local specWarnMassDisintegrateYou = mod:NewSpecialWarningYou(401680, nil, 405391, nil, 1, 2)
|
|
local yellMassDisintegrate = mod:NewShortPosYell(401680, 405391)
|
|
local yellMassDisintegrateFades = mod:NewIconFadesYell(401680)
|
|
local specWarnSearingBreath = mod:NewSpecialWarningCount(402050, nil, 18357, nil, 2, 2)
|
|
local specWarnBurningClaws = mod:NewSpecialWarningDefensive(401330, nil, nil, nil, 1, 2)
|
|
local specWarnBurningClawsTaunt = mod:NewSpecialWarningTaunt(401330, nil, nil, nil, 1, 2)
|
|
|
|
local timerOppressingHowlCD = mod:NewNextTimer(29.9, 401383, nil, nil, nil, 2)
|
|
local timerGlitteringSurgeCD = mod:NewCDCountTimer(29.9, 401810, nil, nil, nil, 2)
|
|
local timerScorchingBombCD = mod:NewCDCountTimer(29.9, 401500, 167180, nil, nil, 3)
|
|
local timerMassDisintegrateCD = mod:NewCDCountTimer(29.9, 401680, 405391, nil, nil, 3)--"Disintegrate"
|
|
local timerSearingBreathCD = mod:NewCDCountTimer(29.9, 402050, 18357, nil, nil, 3, nil, DBM_COMMON_L.MAGIC_ICON)--"Breath"
|
|
local timerBurningClawsCD = mod:NewCDCountTimer(29.9, 401330, nil, "Tank|Healer", nil, 5, nil, DBM_COMMON_L.TANK_ICON)
|
|
local timerBurningClaws = mod:NewTargetTimer(27, 401330, nil, "Tank|Healer", nil, 2, nil, DBM_COMMON_L.TANK_ICON)--AOE damage from expiring
|
|
|
|
mod:AddSetIconOption("SetIconOnMassDisintegrate", 401680, true, 0, {1, 2, 3, 4})
|
|
--Stage Two: A Touch of the Forbidden
|
|
mod:AddTimerLine(DBM:EJ_GetSectionInfo(26142))
|
|
local warnVoidFracture = mod:NewTargetAnnounce(404218, 3, nil, false)
|
|
local warnInfiniteDuress = mod:NewTargetCountAnnounce(404288, 3, nil, nil, nil, nil, nil, nil, true)
|
|
local warnVoidClaws = mod:NewStackAnnounce(411241, 2, nil, "Tank|Healer")
|
|
|
|
local specWarnVoidBomb = mod:NewSpecialWarningCount(404027, nil, 167180, nil, 2, 2)
|
|
local specWarnVoidFracture = mod:NewSpecialWarningYou(404218, nil, nil, nil, 1, 2)--Maybe change to MoveTo alert to say move to emptyness?
|
|
local yellVoidFractureFades = mod:NewShortFadesYell(404218)
|
|
local specWarnAbyssalBreath = mod:NewSpecialWarningCount(404456, nil, 18357, nil, 2, 2)
|
|
local specWarnEmptyStrike = mod:NewSpecialWarningDefensive(404769, nil, nil, nil, 1, 2, 4)
|
|
local specWarnCosmicVolley = mod:NewSpecialWarningInterruptCount(411302, "HasInterrupt", 31295, nil, 1, 2, 4)
|
|
local specWarnBlastingScream = mod:NewSpecialWarningInterruptCount(404754, "HasInterrupt", nil, nil, 1, 2)
|
|
local specWarnDesolateBlossom = mod:NewSpecialWarningDodgeCount(404403, nil, nil, nil, 2, 2)
|
|
local specWarnInfiniteDuressYou = mod:NewSpecialWarningYou(404288, nil, nil, nil, 1, 2, 3)
|
|
local yellInfiniteDuress = mod:NewShortPosYell(404288)
|
|
local yellInfiniteDuressFades = mod:NewIconFadesYell(404288)
|
|
local specWarnVoidClaws = mod:NewSpecialWarningDefensive(411241, nil, nil, nil, 1, 2)
|
|
local specWarnVoidClawsOut = mod:NewSpecialWarningMoveAway(411241, nil, nil, nil, 1, 2)--For Void Blast (411238) effect
|
|
local yellVoidClawsFades = mod:NewShortFadesYell(411241, 37859)--For Void Blast (411238) effect
|
|
local specWarnVoidClawsTaunt = mod:NewSpecialWarningTaunt(411241, nil, nil, nil, 1, 2)
|
|
|
|
local timerEndExistenceCast = mod:NewCastTimer(15, 410625, nil, "HasInterrupt", nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)
|
|
local timerVoidBombCD = mod:NewCDCountTimer(29.9, 404027, 167180, nil, nil, 3)--"Bombs"
|
|
local timerAbyssalBreathCD = mod:NewCDCountTimer(29.9, 404456, 18357, nil, nil, 1)
|
|
local timerEmptyStrikeCD = mod:NewCDTimer(12.2, 404769, nil, "Tank|Healer", nil, 5, nil, DBM_COMMON_L.TANK_ICON)--Mythic Add
|
|
--local timerCosmicVolleyCD = mod:NewCDTimer(4.8, 411302, nil, "HasInterrupt", nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)--Mythic Add
|
|
local timerBlastingScreamCD = mod:NewCDTimer(7.3, 404754, 31295, false, 2, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)--Spammy so off by default
|
|
local timerDesolateBlossomCD = mod:NewCDCountTimer(29.9, 404403, nil, nil, nil, 3)
|
|
local timerInfiniteDuressCD = mod:NewCDCountTimer(29.9, 404288, nil, nil, nil, 3, nil, DBM_COMMON_L.HEROIC_ICON..DBM_COMMON_L.MAGIC_ICON)
|
|
local timerVoidClawsCD = mod:NewCDCountTimer(29.9, 411241, nil, "Tank|Healer", nil, 5, nil, DBM_COMMON_L.TANK_ICON)
|
|
local timerVoidClaws = mod:NewTargetTimer(18, 411241, nil, "Tank|Healer", nil, 2, nil, DBM_COMMON_L.TANK_ICON)--AOE damage from expiring
|
|
local timerEbonMight = mod:NewCastCountTimer("d29.9", 404269, 299144, nil, nil, 5, nil, DBM_COMMON_L.DAMAGE_ICON)--"Immune"
|
|
|
|
mod:AddSetIconOption("SetIconOnEmptyRecollection", 404505, true, 5, {8})
|
|
mod:AddSetIconOption("SetIconOnNullGlimmer", 404507, true, 5, {7, 6, 5, 4, 3})
|
|
mod:AddSetIconOption("SetIconOnInfiniteDuress", 404288, true, 0, {1})
|
|
mod:AddNamePlateOption("NPAuraOnRescind", 404705)
|
|
mod:AddNamePlateOption("NPAuraOnMight", 404269)
|
|
--Stage Three: The Seas of Infinity
|
|
mod:AddTimerLine(DBM:EJ_GetSectionInfo(26145))
|
|
local warnEmbraceofNothingness = mod:NewTargetCountAnnounce(403520, 3, nil, nil, nil, nil, nil, nil, true)
|
|
local warnVoidSlash = mod:NewStackAnnounce(408429, 2, nil, "Tank|Healer")
|
|
local warnHurtlingBarrageSoon = mod:NewIncomingCountAnnounce(405486, 2)
|
|
local warnHurtlingBarrage = mod:NewTargetCountAnnounce(405486, 3, nil, nil, nil, nil, nil, nil, true)
|
|
|
|
local specWarnCosmicAscension = mod:NewSpecialWarningDodgeCount(403741, nil, 161862, nil, 2, 2)
|
|
local specWarnHurtlingBarrage = mod:NewSpecialWarningYou(405486, nil, nil, nil, 1, 2)
|
|
local yellHurtlingBarrage = mod:NewShortPosYell(405486)
|
|
local yellHurtlingBarrageFades = mod:NewIconFadesYell(405486)
|
|
local specWarnScouringEternity = mod:NewSpecialWarningDodgeCount(403625, nil, 123244, nil, 3, 2)
|
|
local specWarnEmbraceofNothingness = mod:NewSpecialWarningYou(403520, nil, 229042, nil, 1, 2)
|
|
local yellEmbraceofNothingness = mod:NewShortYell(403520, 229042, nil, nil, "YELL")
|
|
local yellEmbraceofNothingnessFades = mod:NewShortFadesYell(403520, 229042, nil, nil, "YELL")
|
|
local specWarnVoidSlash = mod:NewSpecialWarningDefensive(408429, nil, nil, nil, 1, 2)
|
|
local specWarnVoidSlashOut = mod:NewSpecialWarningMoveAway(408429, nil, nil, nil, 1, 2)
|
|
local yellVoidSlashFades = mod:NewShortFadesYell(408429)
|
|
local specWarnVoidSlashTaunt = mod:NewSpecialWarningTaunt(408429, nil, nil, nil, 1, 2)
|
|
|
|
local timerCosmicAscensionCD = mod:NewCDCountTimer(29.9, 403741, 161862, nil, nil, 1)
|
|
local timerAstralFormation = mod:NewCDCountTimer(29.9, 403510, 370470, nil, nil, 5)--Shorttext Pillar
|
|
local timerHurtlingBarrageCD = mod:NewCDCountTimer(29.9, 405486, nil, nil, nil, 3)
|
|
local timerScouringEternityCD = mod:NewCDCountTimer(29.9, 403625, 123244, nil, nil, 3, nil, DBM_COMMON_L.DEADLY_ICON)--Shortname "Hide"
|
|
local timerEmbraceofNothingnessCD = mod:NewCDCountTimer(29.9, 403520, 229042, nil, nil, 3)--"Black Hole"
|
|
local timerVoidSlashCD = mod:NewCDCountTimer(29.9, 408429, nil, "Tank|Healer", nil, 5, nil, DBM_COMMON_L.TANK_ICON)
|
|
local timerVoidSlash = mod:NewTargetTimer(18, 408429, nil, "Tank|Healer", nil, 2, nil, DBM_COMMON_L.TANK_ICON)--AOE damage from expiring
|
|
|
|
mod:AddSetIconOption("SetIconOnHurtling", 405486, true, 0, {3, 4})--2 on heroic
|
|
|
|
--P1 Variables
|
|
mod.vb.surgeCount = 0
|
|
mod.vb.bombCount = 0
|
|
mod.vb.disintegrateCount = 0
|
|
mod.vb.disintegrateIcon = 1--Also used for infinite
|
|
mod.vb.breathCount = 0
|
|
mod.vb.tankCount = 0
|
|
--P2 Variables
|
|
mod.vb.addIcon = 7
|
|
mod.vb.blossomCount = 0
|
|
--P3 Variables
|
|
mod.vb.nothingnessCount = 0
|
|
mod.vb.hurtlingIcon = 3
|
|
mod.vb.bigAddKilled = 0
|
|
--Non Synced Variables
|
|
local oblivionStacks = {}
|
|
local castsPerGUID = {}
|
|
local oblivionDisabled = false--Cache to avoid constant option table spamming
|
|
local playerVoidFracture = false
|
|
local difficultyName = "lfr"
|
|
local allTimers = {
|
|
["mythic"] = {
|
|
[1] = {
|
|
--Scorching Bomb
|
|
[401500] = {0.8, 29.6, 23.4, 17.0},
|
|
--Glittering Surge
|
|
[401810] = {2.8, 88.0},
|
|
--Burning Claws
|
|
[401325] = {17.9, 18.0, 16.0, 15.0},
|
|
--Mass Disintegrate
|
|
[401642] = {20.8, 22.1, 19.9, 19.0},
|
|
--Searing Breath
|
|
[402050] = {25.4, 12.5, 18.0},
|
|
},
|
|
[2] = {
|
|
--Abyssal Breath
|
|
[404456] = {3.4, 42.2, 31.1},
|
|
--Ebon Might (5 stacks)
|
|
[404269] = {32.3, 30, 27.4},
|
|
--Desolate Blossom
|
|
[404403] = {10.0, 41.1, 35.5},
|
|
--Void Bomb
|
|
[404027] = {14.5, 56.6},
|
|
--Void Claws
|
|
[411236] = {17.8, 16.7, 20.0, 20.0, 20.0},
|
|
--Infinite Duress
|
|
[407496] = {27.8, 33.4, 30.0},
|
|
},
|
|
[3] = {
|
|
--Infinite Duress (P2 ability returning)
|
|
[407496] = {4.5, 53.0, 78.8, 35.3, 34.1},
|
|
--Void Bomb (P2 ability returning)
|
|
[404027] = {24.5, 60.0, 57.6},
|
|
--Cosmic Ascension
|
|
[403741] = {6.8, 57.6, 93.0, 60},
|
|
--Ebon Might (5 stacks)
|
|
--[404269] = {},
|
|
--Hurtling Barrage
|
|
[405022] = {18.6, 80.0, 84.0},
|
|
--Void Slash
|
|
[408422] = {19.8, 17.7, 36.4, 15.3, 55.2, 35.3},
|
|
--Scouring Eternity
|
|
[403625] = {44.6, 73.0, 76.5},
|
|
--Embrace of Nothingness
|
|
[403517] = {23.3, 38.2, 26.5, 40.0, 47.0, 34.7},
|
|
},
|
|
},
|
|
["heroic"] = {--Heroic Confirmed
|
|
[1] = {
|
|
--Scorching Bomb
|
|
[401500] = {1, 32.2, 26.6, 18.9},
|
|
--Glittering Surge
|
|
[401810] = {3.3, 97.6},
|
|
--Burning Claws
|
|
[401325] = {20, 18.8, 18.8, 16.6},
|
|
--Mass Disintegrate
|
|
[401642] = {23.3, 24, 22.6, 21.1},
|
|
--Searing Breath
|
|
[402050] = {26.6, 15.5, 19.9},
|
|
},
|
|
[2] = {
|
|
--Abyssal Breath
|
|
[404456] = {3.5, 43.5, 35.3},
|
|
--Desolate Blossom
|
|
[404403] = {10.6, 43.4, 37.6},
|
|
--Void Bomb
|
|
[404027] = {15.3, 59.9},
|
|
--Void Claws
|
|
[411236] = {18.8, 17.6, 21.2, 42.3},
|
|
--Infinite Duress
|
|
[407496] = {29.4, 35.2},
|
|
},
|
|
[3] = {
|
|
--Infinite Duress (P2 ability returning)
|
|
[407496] = {4.7, 56.2, 83.7, 37.5, 36.3},
|
|
--Void Bomb (P2 ability returning)
|
|
[404027] = {28.5, 61.2, 61.2, 96.3},
|
|
--Cosmic Ascension
|
|
[403741] = {7.2, 61.2, 98.7, 58.7},
|
|
--Hurtling Barrage
|
|
[405022] = {19.7, 84.9, 54.9, 35, 67.5},
|
|
--Void Slash
|
|
[408422] = {21, 36.2, 37.5, 85.0, 11.2, 61.3},
|
|
--Scouring Eternity
|
|
[403625] = {46.2, 76.5, 80.2, 77.9},
|
|
--Embrace of Nothingness
|
|
[403517] = {24.7, 111.2, 50.0},
|
|
},
|
|
},
|
|
["normal"] = {--Normal confirmed, LFR assumed
|
|
[1] = {
|
|
--Scorching Bomb
|
|
[401500] = {1, 58.8},
|
|
--Glittering Surge
|
|
[401810] = {3.3, 97.6},
|
|
--Burning Claws
|
|
[401325] = {20, 18.8, 18.8, 16.6},
|
|
--Mass Disintegrate
|
|
[401642] = {23.3, 23.3, 44.4},
|
|
--Searing Breath
|
|
[402050] = {26.6, 35.5},
|
|
},
|
|
[2] = {
|
|
--Abyssal Breath
|
|
[404456] = {3.7, 46.2},
|
|
--Desolate Blossom
|
|
[404403] = {11.2, 46.2, 39.9},
|
|
--Void Bomb
|
|
[404027] = {16.2, 63.7},
|
|
--Void Claws
|
|
[411236] = {19.9, 18.7, 22.4, 22.5, 22.5},
|
|
--Infinite Duress (Doesn't exist on normal/LFR)
|
|
},
|
|
[3] = {
|
|
--Infinite Duress (P2 ability that still isn't in normal/LFR)
|
|
--Void Bomb (P2 ability returning)
|
|
[404027] = {30.3, 65.3, 65.3, 102.7, 65.3},
|
|
--Cosmic Ascension
|
|
[403741] = {7.7, 65.3, 105.3, 62.6, 105.3},
|
|
--Hurtling Barrage
|
|
[405022] = {21, 46.6, 102.6, 65.3, 102.6},
|
|
--Void Slash
|
|
[408422] = {22.3, 38.6, 39.9, 90.6, 11.9, 25.3, 39.9, 90.6, 11.9, 25.3},
|
|
--Scouring Eternity
|
|
[403625] = {49.7, 82.5, 86.1, 81.3, 82.5},
|
|
--Embrace of Nothingness
|
|
[403517] = {26.3, 118.6, 53.3, 114.7, 53.3},
|
|
},
|
|
},
|
|
["lfr"] = {--Normal confirmed, LFR assumed
|
|
[1] = {
|
|
--Scorching Bomb
|
|
[401500] = {1.1, 62.3},
|
|
--Glittering Surge
|
|
[401810] = {3.5, 97.4},
|
|
--Burning Claws
|
|
[401325] = {21.1, 20, 20, 17.6},
|
|
--Mass Disintegrate
|
|
[401642] = {24.7, 24.7, 47},
|
|
--Searing Breath
|
|
[402050] = {28.2, 37.6},
|
|
},
|
|
[2] = {
|
|
--Abyssal Breath
|
|
[404456] = {4, 49.3},
|
|
--Desolate Blossom
|
|
[404403] = {12, 49.3, 42.6},
|
|
--Void Bomb
|
|
[404027] = {17.3, 67.9},
|
|
--Void Claws
|
|
[411236] = {21.3, 19.9, 23.9, 23.9, 23.9},
|
|
--Infinite Duress (Doesn't exist on normal/LFR)
|
|
},
|
|
[3] = {
|
|
--Infinite Duress (P2 ability that still isn't in normal/LFR)
|
|
--Void Bomb (P2 ability does NOT return in LFR)
|
|
--Cosmic Ascension
|
|
[403741] = {7.2, 61.2, 98.7, 58.7, 98.7, 58.7, 98.7, 58.7, 98.7},
|
|
--Hurtling Barrage (Doesn't exist on LFR)
|
|
--Void Slash
|
|
[408422] = {21, 36.2, 37.4, 85, 11.2, 61.2, 85, 11.2, 23.7, 37.4, 84.9, 11.2, 23.7, 37.5},
|
|
--Scouring Eternity
|
|
[403625] = {46.1, 77.8, 81.4, 76.4, 80.1, 76.4, 81.3, 76.5},
|
|
--Embrace of Nothingness (Doesn't exist on LFR)
|
|
},
|
|
},
|
|
}
|
|
|
|
function mod:OnCombatStart(delay)
|
|
table.wipe(oblivionStacks)
|
|
table.wipe(castsPerGUID)
|
|
self:SetStage(1)
|
|
self.vb.surgeCount = 0
|
|
self.vb.bombCount = 0
|
|
self.vb.disintegrateCount = 0
|
|
self.vb.breathCount = 0
|
|
self.vb.tankCount = 0
|
|
self.vb.blossomCount = 0
|
|
self.vb.nothingnessCount = 0
|
|
self.vb.hurtlingIcon = 3
|
|
self.vb.bigAddKilled = 0
|
|
playerVoidFracture = false
|
|
-- timerScorchingBombCD:Start(1-delay, 1)--Used 1 second into pull
|
|
if self:IsMythic() then
|
|
difficultyName = "mythic"
|
|
timerGlitteringSurgeCD:Start(2.8-delay, 1)
|
|
timerOppressingHowlCD:Start(13-delay)
|
|
timerBurningClawsCD:Start(17.9-delay, 1)
|
|
timerMassDisintegrateCD:Start(20.8-delay, 1)
|
|
timerSearingBreathCD:Start(25.4-delay, 1)
|
|
timerPhaseCD:Start(101.9, 2)--Mythic Confirmed
|
|
berserkTimer:Start(480)
|
|
else
|
|
if self:IsLFR() then
|
|
difficultyName = "lfr"
|
|
timerGlitteringSurgeCD:Start(3.5-delay, 1)
|
|
timerOppressingHowlCD:Start(15.3-delay)
|
|
timerBurningClawsCD:Start(21.1-delay, 1)
|
|
timerMassDisintegrateCD:Start(24.7-delay, 1)
|
|
timerSearingBreathCD:Start(28.2-delay, 1)
|
|
else--Normal and heroic have same p1 timers
|
|
timerGlitteringSurgeCD:Start(3.3-delay, 1)
|
|
timerOppressingHowlCD:Start(14.4-delay)
|
|
timerBurningClawsCD:Start(20-delay, 1)
|
|
timerMassDisintegrateCD:Start(23.3-delay, 1)
|
|
timerSearingBreathCD:Start(26.6-delay, 1)
|
|
if self:IsHeroic() then
|
|
difficultyName = "heroic"
|
|
else
|
|
difficultyName = "normal"
|
|
end
|
|
end
|
|
timerPhaseCD:Start(112, 2)--Same on LFR, Normal, and Heroic
|
|
end
|
|
if self.Options.NPAuraOnRescind or self.Options.NPAuraOnMight then
|
|
DBM:FireEvent("BossMod_EnableHostileNameplates")
|
|
end
|
|
if self.Options.InfoFrame then
|
|
if self.Options.InfoFrameBehaviorTwo == "OblivionOnly" then
|
|
oblivionDisabled = false
|
|
DBM.InfoFrame:SetHeader(DBM:GetSpellName(401951))
|
|
DBM.InfoFrame:Show(20, "table", oblivionStacks, 1)
|
|
else
|
|
if self.Options.InfoFrameBehaviorTwo == "HowlOnly" then
|
|
oblivionDisabled = true--Means in phase 2 and 3 infoframe just closes
|
|
--If hybrid is enabled, oblivionDisabled will be set to false on stage 2 trigger
|
|
end
|
|
DBM.InfoFrame:SetHeader(DBM:GetSpellName(401383))
|
|
DBM.InfoFrame:Show(20, "playerdebuffstacks", 401383)--Stacks aren't in combat log so has to use less efficient UnitAura method
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:OnTimerRecovery()
|
|
if self:IsMythic() then
|
|
difficultyName = "mythic"
|
|
elseif self:IsHeroic() then
|
|
difficultyName = "heroic"
|
|
elseif self:IsNormal() then
|
|
difficultyName = "normal"
|
|
else
|
|
difficultyName = "lfr"
|
|
end
|
|
end
|
|
|
|
function mod:OnCombatEnd()
|
|
if self.Options.InfoFrame then
|
|
DBM.InfoFrame:Hide()
|
|
end
|
|
if self.Options.NPAuraOnRescind or self.Options.NPAuraOnMight then
|
|
DBM.Nameplate:Hide(true, nil, nil, nil, true, true)
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_CAST_START(args)
|
|
local spellId = args.spellId
|
|
if spellId == 401383 then
|
|
warnOppressingHowl:Show()
|
|
warnOppressingHowl:Play("carefly")
|
|
elseif spellId == 401810 then
|
|
self.vb.surgeCount = self.vb.surgeCount + 1
|
|
specWarnGlitteringSurge:Show(self.vb.surgeCount)
|
|
specWarnGlitteringSurge:Play("aesoon")
|
|
local timer = self:GetFromTimersTable(allTimers, difficultyName, self.vb.phase, spellId, self.vb.surgeCount+1)
|
|
if timer then
|
|
timerGlitteringSurgeCD:Start(timer, self.vb.surgeCount+1)
|
|
else--Early push, abort timers even earlier
|
|
DBM:ShowTestSpecialWarning(L.EarlyStaging, 1, nil, true)
|
|
timerOppressingHowlCD:Stop()
|
|
timerGlitteringSurgeCD:Stop()
|
|
timerScorchingBombCD:Stop()
|
|
timerMassDisintegrateCD:Stop()
|
|
timerSearingBreathCD:Stop()
|
|
timerBurningClawsCD:Stop()
|
|
timerPhaseCD:Stop()
|
|
timerPhaseCD:Start(11)
|
|
end
|
|
elseif spellId == 401500 then
|
|
self.vb.bombCount = self.vb.bombCount + 1
|
|
specWarnScorchingBomb:Show(self.vb.bombCount)
|
|
specWarnScorchingBomb:Play("bombsoon")
|
|
local timer = self:GetFromTimersTable(allTimers, difficultyName, self.vb.phase, spellId, self.vb.bombCount+1)
|
|
if timer then
|
|
timerScorchingBombCD:Start(timer, self.vb.bombCount+1)
|
|
end
|
|
elseif (spellId == 401642 or spellId == 401704) and self:AntiSpam(8, 1) then
|
|
self.vb.disintegrateCount = self.vb.disintegrateCount + 1
|
|
self.vb.disintegrateIcon = 1
|
|
local timer = self:GetFromTimersTable(allTimers, difficultyName, self.vb.phase, 401642, self.vb.disintegrateCount+1)
|
|
if timer then
|
|
timerMassDisintegrateCD:Start(timer, self.vb.disintegrateCount+1)
|
|
end
|
|
elseif spellId == 402050 then
|
|
self.vb.breathCount = self.vb.breathCount + 1
|
|
specWarnSearingBreath:Show(self.vb.breathCount)
|
|
specWarnSearingBreath:Play("breathsoon")
|
|
local timer = self:GetFromTimersTable(allTimers, difficultyName, self.vb.phase, spellId, self.vb.breathCount+1)
|
|
if timer then
|
|
timerSearingBreathCD:Start(timer, self.vb.breathCount+1)
|
|
end
|
|
elseif spellId == 401325 then
|
|
self.vb.tankCount = self.vb.tankCount + 1
|
|
local timer = self:GetFromTimersTable(allTimers, difficultyName, self.vb.phase, spellId, self.vb.tankCount+1)
|
|
if timer then
|
|
timerBurningClawsCD:Start(timer, self.vb.tankCount+1)
|
|
end
|
|
if self:IsTanking("player", nil, nil, true, args.sourceGUID) then
|
|
specWarnBurningClaws:Show()
|
|
specWarnBurningClaws:Play("defensive")
|
|
end
|
|
elseif spellId == 404027 then
|
|
self.vb.bombCount = self.vb.bombCount + 1
|
|
specWarnVoidBomb:Show(self.vb.bombCount)
|
|
specWarnVoidBomb:Play("bombsoon")
|
|
local timer = self:GetFromTimersTable(allTimers, difficultyName, self.vb.phase, spellId, self.vb.bombCount+1)
|
|
if timer then
|
|
timerVoidBombCD:Start(timer, self.vb.bombCount+1)
|
|
end
|
|
elseif spellId == 404456 then
|
|
self.vb.addIcon = 7
|
|
self.vb.breathCount = self.vb.breathCount + 1
|
|
specWarnAbyssalBreath:Show(self.vb.breathCount)
|
|
specWarnAbyssalBreath:Play("breathsoon")
|
|
local timer = self:GetFromTimersTable(allTimers, difficultyName, self.vb.phase, spellId, self.vb.breathCount+1)
|
|
if timer then
|
|
timerAbyssalBreathCD:Start(timer, self.vb.breathCount+1)
|
|
end
|
|
if self:IsMythic() then
|
|
local mightTimer = self:GetFromTimersTable(allTimers, difficultyName, self.vb.phase, 404269, self.vb.breathCount+1)
|
|
if mightTimer then
|
|
timerEbonMight:Start(mightTimer, self.vb.breathCount)
|
|
end
|
|
end
|
|
elseif spellId == 411302 then
|
|
if not castsPerGUID[args.sourceGUID] then
|
|
castsPerGUID[args.sourceGUID] = 0
|
|
if self.Options.SetIconOnEmptyRecollection then
|
|
self:ScanForMobs(args.sourceGUID, 2, 8, 1, nil, 12, "SetIconOnEmptyRecollection")
|
|
end
|
|
end
|
|
castsPerGUID[args.sourceGUID] = castsPerGUID[args.sourceGUID] + 1
|
|
local count = castsPerGUID[args.sourceGUID]
|
|
if self:CheckInterruptFilter(args.sourceGUID, false, false) then--Count interrupt, so cooldown is not checked
|
|
specWarnCosmicVolley:Show(args.sourceName, count)
|
|
if count < 6 then
|
|
specWarnCosmicVolley:Play("kick"..count.."r")
|
|
else
|
|
specWarnCosmicVolley:Play("kickcast")
|
|
end
|
|
end
|
|
-- timerCosmicVolleyCD:Start(nil, args.sourceGUID)
|
|
elseif spellId == 404754 then
|
|
if not castsPerGUID[args.sourceGUID] then
|
|
castsPerGUID[args.sourceGUID] = 0
|
|
end
|
|
castsPerGUID[args.sourceGUID] = castsPerGUID[args.sourceGUID] + 1
|
|
local count = castsPerGUID[args.sourceGUID]
|
|
if self:CheckInterruptFilter(args.sourceGUID, false, false) then--Count interrupt, so cooldown is not checked
|
|
specWarnBlastingScream:Show(args.sourceName, count)
|
|
if count < 6 then
|
|
specWarnBlastingScream:Play("kick"..count.."r")
|
|
else
|
|
specWarnBlastingScream:Play("kickcast")
|
|
end
|
|
end
|
|
timerBlastingScreamCD:Start(self:IsLFR() and 12 or 7, args.sourceGUID)
|
|
elseif spellId == 404769 then
|
|
timerEmptyStrikeCD:Start(nil, args.sourceGUID)
|
|
if self:IsTanking("player", nil, nil, true, args.sourceGUID) then
|
|
specWarnEmptyStrike:Show()
|
|
specWarnEmptyStrike:Play("defensive")
|
|
end
|
|
elseif spellId == 404403 or spellId == 411030 then--404403 confirmed, 411030 unknown (probably LFR)
|
|
self.vb.blossomCount = self.vb.blossomCount + 1
|
|
specWarnDesolateBlossom:Show(self.vb.blossomCount)
|
|
specWarnDesolateBlossom:Play("watchstep")
|
|
local timer = self:GetFromTimersTable(allTimers, difficultyName, self.vb.phase, 404403, self.vb.blossomCount+1)
|
|
if timer then
|
|
timerDesolateBlossomCD:Start(timer, self.vb.blossomCount+1)
|
|
end
|
|
elseif spellId == 407496 or spellId == 404288 then--407496 confirmed, 404288 unknown (mythic?)
|
|
self.vb.disintegrateCount = self.vb.disintegrateCount + 1
|
|
self.vb.disintegrateIcon = 1
|
|
local timer = self:GetFromTimersTable(allTimers, difficultyName, self.vb.phase, 407496, self.vb.disintegrateCount+1)
|
|
if timer then
|
|
timerInfiniteDuressCD:Start(timer, self.vb.disintegrateCount+1)
|
|
end
|
|
elseif spellId == 411236 then
|
|
self.vb.tankCount = self.vb.tankCount + 1
|
|
local timer = self:GetFromTimersTable(allTimers, difficultyName, self.vb.phase, spellId, self.vb.tankCount+1)
|
|
if timer then
|
|
timerVoidClawsCD:Start(timer, self.vb.tankCount+1)
|
|
end
|
|
if self:IsTanking("player", nil, nil, true, args.sourceGUID) then
|
|
specWarnVoidClaws:Show()
|
|
specWarnVoidClaws:Play("defensive")
|
|
end
|
|
elseif spellId == 403741 then
|
|
self.vb.addIcon = 7
|
|
self.vb.breathCount = self.vb.breathCount + 1
|
|
specWarnCosmicAscension:Show(self.vb.breathCount)
|
|
specWarnCosmicAscension:Play("watchstep")
|
|
timerAstralFormation:Start(9.5)
|
|
local timer = self:GetFromTimersTable(allTimers, difficultyName, self.vb.phase, spellId, self.vb.breathCount+1)
|
|
if timer then
|
|
timerCosmicAscensionCD:Start(timer, self.vb.breathCount+1)
|
|
end
|
|
--if self:IsMythic() then
|
|
-- local mightTimer = self:GetFromTimersTable(allTimers, difficultyName, self.vb.phase, 404269, self.vb.breathCount+1)
|
|
-- if mightTimer then
|
|
-- timerEbonMight:Start(mightTimer)
|
|
-- end
|
|
--end
|
|
elseif spellId == 405022 then
|
|
self.vb.surgeCount = self.vb.surgeCount + 1
|
|
self.vb.hurtlingIcon = 3
|
|
warnHurtlingBarrageSoon:Show(self.vb.surgeCount)
|
|
local timer = self:GetFromTimersTable(allTimers, difficultyName, self.vb.phase, spellId, self.vb.surgeCount+1)
|
|
if timer then
|
|
timerHurtlingBarrageCD:Start(timer, self.vb.surgeCount+1)
|
|
end
|
|
elseif spellId == 403625 then
|
|
self.vb.blossomCount = self.vb.blossomCount + 1
|
|
specWarnScouringEternity:Show(self.vb.blossomCount)
|
|
specWarnScouringEternity:Play("watchstep")
|
|
local timer = self:GetFromTimersTable(allTimers, difficultyName, self.vb.phase, spellId, self.vb.blossomCount+1)
|
|
if timer then
|
|
timerScouringEternityCD:Start(timer, self.vb.blossomCount+1)
|
|
end
|
|
elseif spellId == 403517 then
|
|
self.vb.nothingnessCount = self.vb.nothingnessCount + 1
|
|
--TODO, add incoming debuff alert if target aura is hidden
|
|
local timer = self:GetFromTimersTable(allTimers, difficultyName, self.vb.phase, spellId, self.vb.nothingnessCount+1)
|
|
if timer then
|
|
timerEmbraceofNothingnessCD:Start(timer, self.vb.nothingnessCount+1)
|
|
end
|
|
elseif spellId == 408422 then
|
|
self.vb.tankCount = self.vb.tankCount + 1
|
|
local timer = self:GetFromTimersTable(allTimers, difficultyName, self.vb.phase, spellId, self.vb.tankCount+1)
|
|
if timer then
|
|
timerVoidSlashCD:Start(timer, self.vb.tankCount+1)
|
|
end
|
|
if self:IsTanking("player", nil, nil, true, args.sourceGUID) then
|
|
specWarnVoidSlash:Show()
|
|
specWarnVoidSlash:Play("defensive")
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_SUMMON(args)
|
|
local spellId = args.spellId
|
|
if spellId == 404505 then--Empty Recollection (Mythic Add)
|
|
if not castsPerGUID[args.destGUID] then
|
|
castsPerGUID[args.destGUID] = 0
|
|
if self.Options.SetIconOnEmptyRecollection then
|
|
self:ScanForMobs(args.destGUID, 2, 8, 1, nil, 12, "SetIconOnEmptyRecollection")
|
|
end
|
|
end
|
|
-- timerCosmicVolleyCD:Start(2.1, args.destGUID)
|
|
timerEmptyStrikeCD:Start(7, args.destGUID)
|
|
elseif spellId == 404507 then--Null Glimmer (regular adds)
|
|
if not castsPerGUID[args.destGUID] then
|
|
castsPerGUID[args.destGUID] = 0
|
|
if self.Options.SetIconOnNullGlimmer then
|
|
self:ScanForMobs(args.destGUID, 2, self.vb.addIcon, 1, nil, 12, "SetIconOnNullGlimmer")
|
|
end
|
|
self.vb.addIcon = self.vb.addIcon - 1
|
|
end
|
|
timerBlastingScreamCD:Start(8.2, args.destGUID)
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_AURA_APPLIED(args)
|
|
local spellId = args.spellId
|
|
if spellId == 401951 then
|
|
local amount = args.amount or 1
|
|
oblivionStacks[args.destName] = amount
|
|
if args:IsPlayer() and amount % 3 == 0 then--3, 6, 9
|
|
if amount < 6 then--3
|
|
warnOblivionStack:Show(amount)
|
|
else--6 and 9
|
|
specWarnOblivionStack:Show(amount)
|
|
specWarnOblivionStack:Play("stackhigh")
|
|
end
|
|
end
|
|
if self.Options.InfoFrame and not oblivionDisabled then
|
|
DBM.InfoFrame:UpdateTable(oblivionStacks, 0.2)
|
|
end
|
|
elseif spellId == 401215 then
|
|
if args:IsPlayer() then
|
|
specWarnEmptynessBetweenStars:Show()
|
|
specWarnEmptynessBetweenStars:Play("teleyou")
|
|
yellVoidFractureFades:Cancel()
|
|
local _, _, _, _, _, expireTime = DBM:UnitDebuff("player", spellId)
|
|
if expireTime then--Buff has various durations based on difficulty, 15-25, this is just easiest
|
|
local remaining = expireTime-GetTime()
|
|
timerEmptynessBetweenStars:Start(remaining)
|
|
end
|
|
end
|
|
elseif spellId == 403997 and args:IsPlayer() then
|
|
local amount = args.amount or 1
|
|
if amount < 3 then
|
|
warnMindFragment:Show(3-amount)
|
|
end
|
|
elseif spellId == 407576 and args:IsPlayer() then
|
|
local amount = args.amount or 1
|
|
if amount % 2 == 0 then
|
|
warnAstralFlare:Show(amount)
|
|
end
|
|
elseif spellId == 404269 then
|
|
if (args.amount or 1) == 5 then
|
|
if self.Options.NPAuraOnMight then
|
|
DBM.Nameplate:Show(true, args.destGUID, spellId)
|
|
end
|
|
end
|
|
elseif spellId == 401905 then
|
|
warnDazzled:CombinedShow(0.5, args.destName)
|
|
elseif spellId == 401680 then
|
|
local icon = self.vb.disintegrateIcon
|
|
if self.Options.SetIconOnMassDisintegrate then
|
|
self:SetIcon(args.destName, icon)
|
|
end
|
|
if args:IsPlayer() then
|
|
specWarnMassDisintegrateYou:Show()
|
|
specWarnMassDisintegrateYou:Play("targetyou")
|
|
yellMassDisintegrate:Yell(icon, icon)
|
|
yellMassDisintegrateFades:Countdown(spellId, nil, icon)
|
|
end
|
|
warnMassDisintegrate:CombinedShow(0.3, self.vb.disintegrateCount, args.destName)
|
|
self.vb.disintegrateIcon = self.vb.disintegrateIcon + 1
|
|
elseif spellId == 407496 or spellId == 404288 then
|
|
local icon = self.vb.disintegrateIcon
|
|
if self.Options.SetIconOnInfiniteDuress then
|
|
self:SetIcon(args.destName, icon)
|
|
end
|
|
if args:IsPlayer() then
|
|
specWarnInfiniteDuressYou:Show()
|
|
specWarnInfiniteDuressYou:Play("targetyou")
|
|
yellInfiniteDuress:Yell(icon, icon)
|
|
yellInfiniteDuressFades:Countdown(spellId, nil, icon)
|
|
end
|
|
warnInfiniteDuress:CombinedShow(0.3, self.vb.disintegrateCount, args.destName)
|
|
self.vb.disintegrateIcon = self.vb.disintegrateIcon + 1
|
|
elseif spellId == 401330 then
|
|
if not args:IsPlayer() and not UnitIsDeadOrGhost("player") then--and not DBM:UnitDebuff("player", spellId)
|
|
specWarnBurningClawsTaunt:Show(args.destName)
|
|
specWarnBurningClawsTaunt:Play("tauntboss")
|
|
else
|
|
if args.event == "SPELL_AURA_APPLIED" then--Blizzard is shoving non stack into stack arg
|
|
warnBurningClaws:Show(args.destName, 1)
|
|
else
|
|
local amount = args.amount or 1
|
|
warnBurningClaws:Show(args.destName, amount)
|
|
end
|
|
end
|
|
timerBurningClaws:Stop()
|
|
timerBurningClaws:Start(27, args.destName)
|
|
elseif spellId == 411241 then
|
|
if not args:IsPlayer() and not UnitIsDeadOrGhost("player") then--and not DBM:UnitDebuff("player", spellId)
|
|
specWarnVoidClawsTaunt:Show(args.destName)
|
|
specWarnVoidClawsTaunt:Play("tauntboss")
|
|
else
|
|
if args.event == "SPELL_AURA_APPLIED" then--Blizzard is shoving non stack into stack arg
|
|
warnVoidClaws:Show(args.destName, 1)
|
|
else
|
|
local amount = args.amount or 1
|
|
warnVoidClaws:Show(args.destName, amount)
|
|
end
|
|
if args:IsPlayer() then
|
|
specWarnVoidClawsOut:Cancel()
|
|
specWarnVoidClawsOut:Schedule(12)
|
|
specWarnVoidClawsOut:ScheduleVoice(12, "runout")
|
|
yellVoidClawsFades:Cancel()
|
|
yellVoidClawsFades:Countdown(spellId)
|
|
end
|
|
end
|
|
timerVoidClaws:Stop()
|
|
timerVoidClaws:Start(18, args.destName)
|
|
elseif spellId == 408429 then
|
|
local uId = DBM:GetRaidUnitId(args.destName)
|
|
if self:IsTanking(uId) then--Frontal filter, in case it can hit anyone that's in front of boss
|
|
if not args:IsPlayer() and not UnitIsDeadOrGhost("player") then--and not DBM:UnitDebuff("player", spellId)
|
|
specWarnVoidSlashTaunt:Show(args.destName)
|
|
specWarnVoidSlashTaunt:Play("tauntboss")
|
|
else
|
|
if args.event == "SPELL_AURA_APPLIED" then--Blizzard is shoving non stack into stack arg
|
|
warnVoidSlash:Show(args.destName, 1)
|
|
else
|
|
local amount = args.amount or 1
|
|
warnVoidSlash:Show(args.destName, amount)
|
|
end
|
|
if args:IsPlayer() then
|
|
specWarnVoidSlashOut:Cancel()
|
|
specWarnVoidSlashOut:Schedule(12)
|
|
specWarnVoidSlashOut:ScheduleVoice(12, "runout")
|
|
yellVoidClawsFades:Cancel()
|
|
yellVoidClawsFades:Countdown(spellId)
|
|
end
|
|
end
|
|
end
|
|
timerVoidSlash:Stop()
|
|
timerVoidSlash:Start(21, args.destName)--Needs to show for even non tanks getting hit though
|
|
elseif spellId == 404218 then
|
|
if args:IsPlayer() then
|
|
playerVoidFracture = true
|
|
specWarnVoidFracture:Show()
|
|
specWarnVoidFracture:Play("bombyou")
|
|
if self:IsMythic() then
|
|
--schedule for Dimensional Puncture
|
|
yellVoidFractureFades:Countdown(spellId)
|
|
end
|
|
else
|
|
warnVoidFracture:Show(args.destName)
|
|
end
|
|
elseif spellId == 404705 then
|
|
if self.Options.NPAuraOnRescind then
|
|
DBM.Nameplate:Show(true, args.destGUID, spellId)
|
|
end
|
|
elseif spellId == 405486 then
|
|
local icon = self.vb.hurtlingIcon
|
|
if self.Options.SetIconOnHurtling then
|
|
self:SetIcon(args.destName, icon)
|
|
end
|
|
if args:IsPlayer() then
|
|
specWarnHurtlingBarrage:Show()
|
|
specWarnHurtlingBarrage:Play("targetyou")
|
|
yellHurtlingBarrage:Yell(icon, icon-2)
|
|
yellHurtlingBarrageFades:Countdown(spellId, nil, icon)
|
|
end
|
|
warnHurtlingBarrage:CombinedShow(0.3, self.vb.surgeCount, args.destName)
|
|
self.vb.hurtlingIcon = self.vb.hurtlingIcon + 1
|
|
elseif spellId == 403520 then
|
|
if args:IsPlayer() then
|
|
specWarnEmbraceofNothingness:Show()
|
|
specWarnEmbraceofNothingness:Play("gathershare")
|
|
yellEmbraceofNothingness:Yell()
|
|
yellEmbraceofNothingnessFades:Countdown(spellId)
|
|
else
|
|
warnEmbraceofNothingness:Show(self.vb.nothingnessCount, args.destName)
|
|
end
|
|
elseif spellId == 403284 then--Stage 1-2 Intermission
|
|
timerOppressingHowlCD:Stop()
|
|
timerGlitteringSurgeCD:Stop()
|
|
timerScorchingBombCD:Stop()
|
|
timerMassDisintegrateCD:Stop()
|
|
timerSearingBreathCD:Stop()
|
|
timerBurningClawsCD:Stop()
|
|
timerPhaseCD:Stop()--Boss phases on a timer, or health percent
|
|
elseif spellId == 410654 then--Stage 2-3 Intermission
|
|
timerVoidBombCD:Stop()
|
|
timerAbyssalBreathCD:Stop()
|
|
timerDesolateBlossomCD:Stop()
|
|
timerInfiniteDuressCD:Stop()
|
|
timerVoidClawsCD:Stop()
|
|
timerPhaseCD:Stop()--Boss phases on a timer, or health percent
|
|
timerPhaseCD:Start(10)
|
|
elseif spellId == 410625 then
|
|
timerEndExistenceCast:Start()
|
|
end
|
|
end
|
|
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
|
|
|
|
function mod:SPELL_AURA_REMOVED(args)
|
|
local spellId = args.spellId
|
|
if spellId == 401951 then
|
|
oblivionStacks[args.destName] = nil
|
|
if self.Options.InfoFrame and not oblivionDisabled then
|
|
DBM.InfoFrame:UpdateTable(oblivionStacks, 0.2)
|
|
end
|
|
elseif spellId == 401215 then
|
|
if args:IsPlayer() then
|
|
warnEmptynessBetweenStars:Show()
|
|
timerEmptynessBetweenStars:Stop()
|
|
end
|
|
elseif spellId == 401680 then
|
|
if self.Options.SetIconOnMassDisintegrate then
|
|
self:SetIcon(args.destName, 0)
|
|
end
|
|
if args:IsPlayer() then
|
|
yellMassDisintegrateFades:Cancel()
|
|
end
|
|
elseif spellId == 407496 or spellId == 404288 then
|
|
if self.Options.SetIconOnInfiniteDuress then
|
|
self:SetIcon(args.destName, 0)
|
|
end
|
|
if args:IsPlayer() then
|
|
yellInfiniteDuressFades:Cancel()
|
|
end
|
|
elseif spellId == 401330 then
|
|
timerBurningClaws:Stop(args.destName)
|
|
elseif spellId == 411241 then
|
|
if args:IsPlayer() then
|
|
specWarnVoidClawsOut:Cancel()
|
|
specWarnVoidClawsOut:CancelVoice()
|
|
yellVoidClawsFades:Cancel()
|
|
end
|
|
timerVoidClaws:Stop(args.destName)
|
|
elseif spellId == 408429 then
|
|
if args:IsPlayer() then
|
|
specWarnVoidSlashOut:Cancel()
|
|
specWarnVoidSlashOut:CancelVoice()
|
|
yellVoidClawsFades:Cancel()
|
|
end
|
|
timerVoidSlash:Stop(args.destName)--Needs to show for even non tanks getting hit though
|
|
elseif spellId == 404218 then
|
|
if args:IsPlayer() then
|
|
playerVoidFracture = false
|
|
yellVoidFractureFades:Cancel()
|
|
end
|
|
elseif spellId == 404705 then
|
|
if self.Options.NPAuraOnRescind then
|
|
DBM.Nameplate:Hide(true, args.destGUID, spellId)
|
|
end
|
|
elseif spellId == 404269 then
|
|
if self.Options.NPAuraOnMight then
|
|
DBM.Nameplate:Show(true, args.destGUID, spellId)
|
|
end
|
|
elseif spellId == 403520 then
|
|
if args:IsPlayer() then
|
|
yellEmbraceofNothingnessFades:Cancel()
|
|
end
|
|
elseif spellId == 405486 then
|
|
if self.Options.SetIconOnHurtling then
|
|
self:SetIcon(args.destName, 0)
|
|
end
|
|
if args:IsPlayer() then
|
|
yellHurtlingBarrageFades:Cancel()
|
|
end
|
|
elseif spellId == 410654 then--Stage 3 Begin
|
|
self:SetStage(3)
|
|
warnPhase:Show(DBM_CORE_L.AUTO_ANNOUNCE_TEXTS.stage:format(3))
|
|
warnPhase:Play("pthree")
|
|
self.vb.bombCount = 0--Reused for Void Bombs
|
|
self.vb.breathCount = 0--Reused for Cosmic Ascension
|
|
self.vb.surgeCount = 0--Reused for Hurtling Barrage
|
|
self.vb.blossomCount = 0--Reused for Scouring Eternity
|
|
self.vb.disintegrateCount = 0--Reused for Inifinite Duress
|
|
self.vb.tankCount = 0----Reused for Void Slash
|
|
timerEbonMight:Start(11)
|
|
if self:IsMythic() then
|
|
timerInfiniteDuressCD:Start(4.5, 1)
|
|
timerCosmicAscensionCD:Start(6.8, 1)
|
|
timerHurtlingBarrageCD:Start(18.6, 1)
|
|
timerVoidSlashCD:Start(19.8, 1)
|
|
timerEmbraceofNothingnessCD:Start(23.3, 1)
|
|
timerVoidBombCD:Start(24.5, 1)
|
|
--timerScouringEternityCD:Start(46.2, 1)
|
|
elseif self:IsHeroic() then
|
|
timerInfiniteDuressCD:Start(4.7, 1)
|
|
timerCosmicAscensionCD:Start(7.2, 1)
|
|
timerHurtlingBarrageCD:Start(19.7, 1)
|
|
timerVoidSlashCD:Start(21, 1)
|
|
timerEmbraceofNothingnessCD:Start(24.7, 1)
|
|
timerVoidBombCD:Start(28.5, 1)
|
|
timerScouringEternityCD:Start(46.2, 1)
|
|
elseif self:IsNormal() then
|
|
timerCosmicAscensionCD:Start(7.7, 1)
|
|
timerHurtlingBarrageCD:Start(21, 1)
|
|
timerVoidSlashCD:Start(22.3, 1)
|
|
timerEmbraceofNothingnessCD:Start(26.3, 1)
|
|
timerVoidBombCD:Start(30.3, 1)
|
|
timerScouringEternityCD:Start(48.6, 1)
|
|
else--LFR
|
|
timerCosmicAscensionCD:Start(7.2, 1)
|
|
timerVoidSlashCD:Start(21, 1)
|
|
timerScouringEternityCD:Start(46.1, 1)
|
|
end
|
|
elseif spellId == 410625 then
|
|
timerEndExistenceCast:Stop()
|
|
--True start of phase 2 timers
|
|
self:SetStage(2)
|
|
warnPhase:Show(DBM_CORE_L.AUTO_ANNOUNCE_TEXTS.stage:format(2))
|
|
warnPhase:Play("ptwo")
|
|
self.vb.bombCount = 0--Reused for Void Bombs
|
|
self.vb.breathCount = 0--Reused for Abyssal Breath
|
|
self.vb.disintegrateCount = 0--Reused for Inifinite Duress
|
|
self.vb.tankCount = 0----Reused for Void Claws
|
|
if self:IsMythic() then
|
|
timerAbyssalBreathCD:Start(3.4, 1)
|
|
timerDesolateBlossomCD:Start(10, 1)
|
|
timerVoidBombCD:Start(14.5, 1)
|
|
timerVoidClawsCD:Start(17.8, 1)
|
|
timerInfiniteDuressCD:Start(27.8, 1)
|
|
timerPhaseCD:Start(103, 3)
|
|
elseif self:IsHeroic() then
|
|
timerAbyssalBreathCD:Start(3.5, 1)
|
|
timerDesolateBlossomCD:Start(10.6, 1)
|
|
timerVoidBombCD:Start(15.3, 1)
|
|
timerVoidClawsCD:Start(18.8, 1)
|
|
timerInfiniteDuressCD:Start(29.4, 1)
|
|
timerPhaseCD:Start(110, 3)
|
|
elseif self:IsNormal() then
|
|
timerAbyssalBreathCD:Start(3.7, 1)
|
|
timerDesolateBlossomCD:Start(11.2, 1)
|
|
timerVoidBombCD:Start(16.2, 1)
|
|
timerVoidClawsCD:Start(19.9, 1)
|
|
timerPhaseCD:Start(110, 3)
|
|
else
|
|
timerAbyssalBreathCD:Start(4, 1)
|
|
timerDesolateBlossomCD:Start(12, 1)
|
|
timerVoidBombCD:Start(17.3, 1)
|
|
timerVoidClawsCD:Start(21.3, 1)
|
|
-- timerPhaseCD:Start(96.7, 3)--Unknown, LFR pushes health threshold before timed threshold can be triggered
|
|
end
|
|
if self.Options.InfoFrame then
|
|
--If oblivion only, no changes need to run on Phase 2
|
|
if self.Options.InfoFrameBehaviorTwo == "Hybrid" then
|
|
--Transition from Howl to Oblivion for phase 2 and phase 3
|
|
oblivionDisabled = false
|
|
DBM.InfoFrame:SetHeader(DBM:GetSpellName(401951))
|
|
DBM.InfoFrame:Show(20, "table", oblivionStacks, 1)
|
|
else
|
|
--Just close it out, It was howl only
|
|
if self.Options.InfoFrameBehaviorTwo == "HowlOnly" then
|
|
DBM.InfoFrame:Hide()
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_AURA_REMOVED_DOSE(args)
|
|
local spellId = args.spellId
|
|
if spellId == 401951 then
|
|
oblivionStacks[args.destName] = args.amount or 1
|
|
if self.Options.InfoFrame and not oblivionDisabled then
|
|
DBM.InfoFrame:UpdateTable(oblivionStacks, 0.2)
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId, spellName)
|
|
if (spellId == 401621 or spellId == 402746 or spellId == 403524 or spellId == 404062 or (spellId == 406428 and not playerVoidFracture)) and destGUID == UnitGUID("player") and self:AntiSpam(3, 3) then
|
|
specWarnGTFO:Show(spellName)
|
|
specWarnGTFO:Play("watchfeet")
|
|
end
|
|
end
|
|
mod.SPELL_MISSED = mod.SPELL_DAMAGE
|
|
|
|
function mod:SPELL_PERIODIC_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId, spellName)
|
|
if spellId == 406989 and destGUID == UnitGUID("player") and self:AntiSpam(3, 3) then
|
|
specWarnGTFO:Show(spellName)
|
|
specWarnGTFO:Play("watchfeet")
|
|
end
|
|
end
|
|
mod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE
|
|
|
|
function mod:UNIT_DIED(args)
|
|
local cid = self:GetCIDFromGUID(args.destGUID)
|
|
if cid == 202971 then--Null Glimmer
|
|
castsPerGUID[args.destGUID] = nil
|
|
timerBlastingScreamCD:Stop(args.destGUID)
|
|
elseif cid == 202969 then--Empty Recollection
|
|
self.vb.bigAddKilled = self.vb.bigAddKilled + 1
|
|
castsPerGUID[args.destGUID] = nil
|
|
timerEmptyStrikeCD:Stop(args.destGUID)
|
|
-- timerCosmicVolleyCD:Stop(args.destGUID)
|
|
timerEbonMight:Stop(self.vb.bigAddKilled)
|
|
end
|
|
end
|
|
|