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.

768 lines
36 KiB

local mod = DBM:NewMod(2491, "DBM-VaultoftheIncarnates", nil, 1200)
local L = mod:GetLocalizedStrings()
mod:SetRevision("20221021202926")
mod:SetCreatureID(184986)
mod:SetEncounterID(2605)
mod:SetUsedIcons(1, 2, 3, 4, 5, 6, 7, 8)
--mod:SetHotfixNoticeRev(20220322000000)
--mod:SetMinSyncRevision(20211203000000)
--mod.respawnTime = 29
mod:RegisterCombat("combat")
mod:RegisterEventsInCombat(
"SPELL_CAST_START 390548 373678 382563 373487 374022 372456 375450 374691 374215 376669 374427 374430 374623 374624 374622 391019 392125 392192 392152 391268 393314 393295 393296 392098 393459 391267 393429 395893",
"SPELL_CAST_SUCCESS 373415",
"SPELL_SUMMON 374935 374931 374939 374943 393295 392098 393459",
"SPELL_AURA_APPLIED 371971 372158 373487 372458 372514 372517 374779 374380 374427 391056 390921 391419 391265 396109 396113 396106 396085 396241",
"SPELL_AURA_APPLIED_DOSE 372158 374321",
"SPELL_AURA_REMOVED 371971 373487 373494 372458 372514 374779 374380 374427 390921 391419 391265 391056",
"SPELL_PERIODIC_DAMAGE 374554 391555",
"SPELL_PERIODIC_MISSED 374554 391555",
"UNIT_DIED",
"UNIT_SPELLCAST_SUCCEEDED boss1"
)
--TODO, also add a stack too high warning on https://www.wowhead.com/beta/spell=373535/lightning-crash when strategies and tuning are established
--TODO, See how things play out with WA/BW on handling some of this bosses mechanics, right now drycode is steering clear of computational/solving for things and sticking to just showing them
--TODO, is https://www.wowhead.com/beta/npc=190807/seismic-rupture tangible or invisible script bunny
--TODO, is https://www.wowhead.com/beta/npc=190586/seismic-pillar tangible/in need of killing or no?
--TODO, GTFO https://www.wowhead.com/beta/spell=374705/seismic-rupture ?
--TODO, revisit thunder strike automation. May want to combine warnings to generalized warning instead of saying soak/avoid
--TODO, target scan https://www.wowhead.com/beta/spell=374622/storm-front ?
--TODO, announce https://www.wowhead.com/beta/spell=391555/raging-inferno spawns on mythic? They spawn from Searing
--TODO, smart change checker for https://www.wowhead.com/beta/spell=391272/icy-tempest on mythic
--TODO, is Sundering smash (391268) dodgable by tank? is it even aimed at tank?
--TODO, the abilities that are used by boss and add during stage 1/3, review if they are cast independantly and need independant Cds or if they're just cast at same time
--TODO, verify Dark Clouds mechanic on mythic
--TODO, add https://www.wowhead.com/beta/spell=374321/breaking-gravel if requires an actual tank swap to clear
--[[
(ability.id = 390548 or ability.id = 373678 or ability.id = 382563 or ability.id = 392125 or ability.id = 373487
or ability.id = 374022 or ability.id = 392192 or ability.id = 392152 or ability.id = 372456 or ability.id = 375450 or ability.id = 395893
or ability.id = 374691 or ability.id = 376669 or ability.id = 374215 or ability.id = 374427 or ability.id = 374430 or ability.id = 390920
or ability.id = 374623 or ability.id = 374624 or ability.id = 374622 or ability.id = 391019 or ability.id = 391055
or ability.id = 391268 or ability.id = 393314 or ability.id = 393309 or ability.id = 393295
or ability.id = 393296 or ability.id = 392098 or ability.id = 393459 or ability.id = 391267 or ability.id = 393429) and type = "begincast"
or ability.id = 373415 and type = "cast" or ability.id = 396241 and type = "applybuff"
or ability.id = 374779
--]]
--General
local specWarnGTFO = mod:NewSpecialWarningGTFO(374554, nil, nil, nil, 1, 8)
--local berserkTimer = mod:NewBerserkTimer(600)
--Stage One: Elemental Mastery
mod:AddTimerLine(DBM:EJ_GetSectionInfo(25036))
--local warnElementalShift = mod:NewSpellAnnounce(374861, 3)--Cast not logged, so removed for now
local warnSplinteredBones = mod:NewStackAnnounce(372158, 2, nil, "Tank|Healer")
local specWarnSunderStrike = mod:NewSpecialWarningDefensive(390548, nil, nil, nil, 1, 2)
local specWarnSplinteredBones = mod:NewSpecialWarningTaunt(372158, nil, nil, nil, 1, 2)
local timerSunderStrikeCD = mod:NewCDTimer(30.3, 390548, nil, "Tank|Healer", nil, 5, nil, DBM_COMMON_L.TANK_ICON)
--General timers for handling of bosses ability rotation
local timerDamageCD = mod:NewTimer(30, "timerDamageCD", 391096, nil, nil, 3)--Magma Burst, Biting Chill, Enveloping Earth, Lightning Crash
local timerAvoidCD = mod:NewTimer(60, "timerAvoidCD", 391100, nil, nil, 3)--Molten Rupture, Frigid Torrent, Erupting Bedrock, Shocking Burst
local timerUltimateCD = mod:NewTimer(60, "timerUltimateCD", 374680, nil, nil, 3)--Searing Carnage, Absolute Zero, Seismic Rupture, Thunder Strike
local timerAddsCD = mod:NewAddsTimer(60, 393314, nil, nil, nil, 1, nil, DBM_COMMON_L.MYTHIC_ICON)--60-66, blizz might have been playing with energy gains, or it's just that bad due to queuing
--mod:AddInfoFrameOption(361651, true)
mod:AddSetIconOption("SetIconOnLightningCrash", 373487, false, false, {1, 2, 3, 4, 5, 6, 7, 8})
mod:AddNamePlateOption("NPAuraOnSurge", 371971, true)
mod:GroupSpells(390548, 372158)--Tank cast with tank debuff
--Fire Altar An altar of primal fire
mod:AddTimerLine(DBM:EJ_GetSectionInfo(25040))
--local warnBlisteringDominance = mod:NewStackAnnounce(374881, 2)
--local warnSearingCarnage = mod:NewTargetNoFilterAnnounce(374022, 3)
local specWarnMagmaBurst = mod:NewSpecialWarningDodge(382563, nil, nil, nil, 2, 2)
local specWarnMoltenRupture = mod:NewSpecialWarningDodge(373329, nil, nil, nil, 2, 2)
local specWarnSearingCarnage = mod:NewSpecialWarningDodge(374022, nil, nil, nil, 2, 2)--Just warn everyone since it targets most of raid, even if it's not on YOU, you need to avoid it
----Mythic Only (Flamewrought Eradicator)
local specWarnFlamewroughtEradicator = mod:NewSpecialWarningSwitch(393314, "-Healer", nil, nil, 1, 2)
local specWarnSunderingFlame = mod:NewSpecialWarningDodge(393309, nil, nil, nil, 2, 2)
local timerFlamewroughtEradicatorCD = mod:NewAITimer(35, 393314, nil, nil, nil, 1, nil, DBM_COMMON_L.MYTHIC_ICON)--Granyth Ability Selection
local timerSunderingFlameCD = mod:NewAITimer(35, 393309, nil, nil, nil, 3)
--Frost Altar An altar of primal frost.
mod:AddTimerLine(DBM:EJ_GetSectionInfo(25061))
--local warnChillingDominance = mod:NewStackAnnounce(374916, 2)
local warnBitingChill = mod:NewCountAnnounce(373678, 2)
local warnAbsoluteZero = mod:NewTargetNoFilterAnnounce(372456, 3)
local warnFrostBite = mod:NewFadesAnnounce(372514, 1)
local warnFrozenSolid = mod:NewTargetNoFilterAnnounce(372517, 4, nil, false)--RL kinda thing
local specWarnFrigidTorrent = mod:NewSpecialWarningDodge(391019, nil, nil, nil, 2, 2)--Cast by boss AND Dominator
local specWarnAbsoluteZero = mod:NewSpecialWarningYouPos(372456, nil, nil, nil, 1, 2)
local yellAbsoluteZero = mod:NewShortPosYell(372456)
local yellAbsoluteZeroFades = mod:NewIconFadesYell(372456)
local timerFrostBite = mod:NewBuffFadesTimer(30, 372514, nil, false, nil, 5)
mod:AddSetIconOption("SetIconOnAbsoluteZero", 372456, true, false, {1, 2})
mod:GroupSpells(372456, 372514, 372517)--Group all Below Zero mechanics together
----Mythic Only (Icebound Dominator)
local specWarnIceboundDominator = mod:NewSpecialWarningSwitch(393295, "-Healer", nil, nil, 1, 2)
local specWarnFreezing = mod:NewSpecialWarningMoveTo(391419, nil, nil, nil, 1, 2)--Effect of Icy Tempest (391425)
local specWarnSunderingFrost = mod:NewSpecialWarningDodge(393296, nil, nil, nil, 2, 2)
local timerIceboundDominatorCD = mod:NewAITimer(35, 393295, nil, nil, nil, 1, nil, DBM_COMMON_L.MYTHIC_ICON)--Granyth Ability Selection
local timerSunderingFrostCD = mod:NewAITimer(35, 393296, nil, nil, nil, 3)
local timerFrigidTorrentCD = mod:NewAITimer(60, 391019, nil, nil, nil, 3, nil, DBM_COMMON_L.MYTHIC_ICON)
--Earth Altar An altar of primal earth.
mod:AddTimerLine(DBM:EJ_GetSectionInfo(25064))
--local warnShatteringDominance = mod:NewStackAnnounce(374917, 2)
local warnEnvelopingEarth = mod:NewTargetNoFilterAnnounce(391055, 4, nil, "Healer")
local specWarnEnvelopingEarth = mod:NewSpecialWarningYou(391055, nil, nil, nil, 1, 2)
local specWarnEruptingBedrock = mod:NewSpecialWarningRun(395893, "Melee", nil, nil, 2, 2)--Cast by boss AND Doppelboulder
local specWarnSeismicRupture = mod:NewSpecialWarningDodge(374691, nil, nil, nil, 2, 2)
----Mythic Only (Ironwrought Smasher)
local specWarnIronwroughtSmasher = mod:NewSpecialWarningSwitch(392098, "-Healer", nil, nil, 1, 2)
local specWarnSunderingSmash = mod:NewSpecialWarningSpell(391268, nil, nil, nil, 1, 2)
local timerIronwroughtSmasherCD = mod:NewAITimer(35, 392098, nil, nil, nil, 1, nil, DBM_COMMON_L.MYTHIC_ICON)--Granyth Ability Selection
local timerSunderingSmashCD = mod:NewAITimer(35, 391268, nil, nil, nil, 3)--Ironwrought Smasher
local timerEruptingBedrockCD = mod:NewCDTimer(60, 395893, nil, nil, nil, 2, nil, DBM_COMMON_L.MYTHIC_ICON)
mod:AddSetIconOption("SetIconOnEnvelopingEarth", 391055, false, false, {1, 2, 3})
--Storm Altar An altar of primal storm
mod:AddTimerLine(DBM:EJ_GetSectionInfo(25068))
--local warnThunderingDominance = mod:NewStackAnnounce(374918, 2)
local warnLightningCrash = mod:NewTargetNoFilterAnnounce(373487, 4)
local warnShockingBurst = mod:NewTargetNoFilterAnnounce(390920, 3)
local specWarnLightningCrash = mod:NewSpecialWarningYouPos(373487, nil, nil, nil, 1, 2)
local yellLightningCrash = mod:NewShortPosYell(373487)
local yellLightningCrashFades = mod:NewIconFadesYell(373487)
--local specWarnLightningCrashStacks = mod:NewSpecialWarningStack(373535, nil, 8, nil, nil, 1, 6)
local specWarnShockingBurst = mod:NewSpecialWarningMoveAway(390920, nil, nil, nil, 1, 2)
local yellShockingBurst = mod:NewShortYell(390920)
local yellShockingBurstFades = mod:NewShortFadesYell(390920)
local specWarnThunderStrike = mod:NewSpecialWarningSoak(374215, nil, nil, nil, 2, 2)--No Debuff
local specWarnThunderStrikeBad = mod:NewSpecialWarningDodge(374215, nil, nil, nil, 2, 2)--Debuff
mod:AddSetIconOption("SetIconOnShockingBurst", 390920, false, false, {4, 5})
--mod:GroupSpells(373487, 373535)--Group Lighting crash source debuff with dest (nearest player) debuff
----Mythic Only (Stormwrought Despoiler)
local warnOrbLightning = mod:NewTargetAnnounce(391267, 3)
local specWarnStormwroughtDespoiler = mod:NewSpecialWarningSwitch(393459, "-Healer", nil, nil, 1, 2)
local specWarnOrbLightning = mod:NewSpecialWarningMoveAway(373487, nil, nil, nil, 1, 2)
local yellOrbLightning = mod:NewShortYell(391267)
local yellOrbLightningFades = mod:NewShortFadesYell(391267)
local specWarnSunderingPeal = mod:NewSpecialWarningDodge(393429, nil, nil, nil, 2, 2)
local timerStormwroughtDespoilerCD = mod:NewAITimer(35, 393459, nil, nil, nil, 1, nil, DBM_COMMON_L.MYTHIC_ICON)--Granyth Ability Selection
local timerOrbLightningCD = mod:NewAITimer(35, 391267, nil, nil, nil, 3)
local timerSunderingPealCD = mod:NewAITimer(35, 393429, nil, nil, nil, 3)
--Stage Two: Summoning Incarnates
mod:AddTimerLine(DBM:EJ_GetSectionInfo(25071))
mod:AddNamePlateOption("NPAuraOnElementalBond", 374380, true)
----Tectonic Crusher
mod:AddTimerLine(DBM:EJ_GetSectionInfo(25073))
local warnBreakingGravel = mod:NewStackAnnounce(374321, 2, nil, "Tank|Healer")
local specWarnGroundShatter = mod:NewSpecialWarningMoveAway(374427, nil, nil, nil, 1, 2)
local yellGroundShatter = mod:NewShortYell(374427, nil, false)
local yellGroundShatterFades = mod:NewShortFadesYell(374427)
local specWarnViolentUpheavel = mod:NewSpecialWarningDodge(374430, nil, nil, nil, 2, 2)
local timerGroundShatterCD = mod:NewCDTimer(33.4, 374427, nil, nil, nil, 3)
local timerViolentUpheavelCD = mod:NewCDTimer(33.4, 374430, nil, nil, nil, 3)
local timerSeismicRuptureCD = mod:NewAITimer(60, 374691, nil, nil, nil, 3, nil, DBM_COMMON_L.MYTHIC_ICON)--Mythic Add version
----Frozen Destroyer
mod:AddTimerLine(DBM:EJ_GetSectionInfo(25076))
local specWarnFrostBinds = mod:NewSpecialWarningInterrupt(374623, "HasInterrupt", nil, nil, 1, 2)
local specWarnFreezingTempest = mod:NewSpecialWarningMoveTo(374624, nil, nil, nil, 3, 2)
local timerFreezingTempestCD = mod:NewCDTimer(37.7, 374624, nil, nil, nil, 2)
local timerAbsoluteZeroCD = mod:NewAITimer(60, 372456, nil, nil, nil, 3, nil, DBM_COMMON_L.MYTHIC_ICON)--Mythic Add version
----Blazing Fiend
mod:AddTimerLine(DBM:EJ_GetSectionInfo(25079))
local timerSearingCarnageCD = mod:NewAITimer(60, 374022, nil, nil, nil, 3, nil, DBM_COMMON_L.MYTHIC_ICON)--Mythic Add version
----Thundering Destroyer
mod:AddTimerLine(DBM:EJ_GetSectionInfo(25083))
local warnStormBreak = mod:NewSpellAnnounce(374622, 3)
local timerStormBreakCD = mod:NewCDTimer(20.8, 374622, nil, nil, nil, 2)
local timerThunderStrikeCD = mod:NewAITimer(60, 374215, nil, nil, nil, 5, nil, DBM_COMMON_L.MYTHIC_ICON)--Mythic Add version
mod:AddRangeFrameOption(10, 374620)
mod.vb.chillCast = 0
mod.vb.litCrashIcon = 1
mod.vb.zeroIcon = 1
mod.vb.curAltar = false
mod.vb.damageSpell = "?"
mod.vb.avoidSpell = "?"
mod.vb.ultimateSpell = "?"
local updateAltar
function mod:OnCombatStart(delay)
self:SetStage(1)
self.vb.chillCast = 0
self.vb.curAltar = false
self.vb.damageSpell = "?"
self.vb.avoidSpell = "?"
self.vb.ultimateSpell = "?"
timerSunderStrikeCD:Start(10.7-delay)
timerDamageCD:Start(20.4-delay, "?")
timerAvoidCD:Start(30.2-delay, "?")
timerUltimateCD:Start(63.1-delay, "?")
--if self:IsMythic() then
-- timerAddsCD:Start(1-delay)
--end
if self.Options.NPAuraOnSurge or self.Options.NPAuraOnElementalBond 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.NPAuraOnSurge or self.Options.NPAuraOnElementalBond then
DBM.Nameplate:Hide(true, nil, nil, nil, true, true)
end
end
function mod:SPELL_CAST_START(args)
local spellId = args.spellId
if spellId == 390548 then
if self:IsTanking("player", "boss1", nil, true) then
specWarnSunderStrike:Show()
specWarnSunderStrike:Play("defensive")
end
timerSunderStrikeCD:Start()
elseif spellId == 373678 then
self.vb.chillCast = self.vb.chillCast + 1
warnBitingChill:Show(self.vb.chillCast)
elseif spellId == 382563 or spellId == 392125 then--Non Mythic, Mythic
specWarnMagmaBurst:Show()
specWarnMagmaBurst:Play("watchstep")
elseif spellId == 373487 then
self.vb.litCrashIcon = 1
elseif spellId == 374022 or spellId == 392192 or spellId == 392152 then--Normal/Heroic, LFR, Mythic (assumed)
specWarnSearingCarnage:Show()
specWarnSearingCarnage:Play("watchstep")
if args:GetSrcCreatureID() ~= 184986 then--Mythic Add
timerSearingCarnageCD:Start(nil, args.sourceGUID)
end
elseif spellId == 372456 or spellId == 375450 then--Hard, easy (assumed)
self.vb.zeroIcon = 1
if args:GetSrcCreatureID() ~= 184986 then--Mythic Add
timerAbsoluteZeroCD:Start(nil, args.sourceGUID)
end
elseif spellId == 374691 then
specWarnSeismicRupture:Show()
specWarnSeismicRupture:Play("watchstep")
if args:GetSrcCreatureID() ~= 184986 then--Mythic Add
timerSeismicRuptureCD:Start(nil, args.sourceGUID)
end
elseif spellId == 376669 or spellId == 374215 then--Mythic, Non (assumed)
if DBM:UnitDebuff("player", 373494) then--Vulnerable to nature damage
specWarnThunderStrikeBad:Show()
specWarnThunderStrikeBad:Play("watchstep")
else
specWarnThunderStrike:Show()
specWarnThunderStrike:Play("helpsoak")
end
if args:GetSrcCreatureID() ~= 184986 then--Mythic Add
timerThunderStrikeCD:Start(nil, args.sourceGUID)
end
elseif spellId == 374427 then
timerGroundShatterCD:Start(nil, args.sourceGUID)
elseif spellId == 374430 then
specWarnViolentUpheavel:Show()
specWarnViolentUpheavel:Play("watchstep")
timerViolentUpheavelCD:Start(nil, args.sourceGUID)
elseif spellId == 374623 and self:CheckInterruptFilter(args.sourceGUID, false, true) then
specWarnFrostBinds:Show(args.sourceName)
specWarnFrostBinds:Play("kickcast")
elseif spellId == 374624 then
specWarnFreezingTempest:Show(args.sourceName)
specWarnFreezingTempest:Play("runin")
timerFreezingTempestCD:Start(nil, args.sourceGUID)
elseif spellId == 374622 then
warnStormBreak:Show()
timerStormBreakCD:Start(nil, args.sourceGUID)
elseif spellId == 391019 then
specWarnFrigidTorrent:Show()
specWarnFrigidTorrent:Play("watchorb")
if args:GetSrcCreatureID() ~= 184986 then--Mythic Add
timerFrigidTorrentCD:Start(nil, args.sourceGUID)
end
-- elseif spellId == 391055 then
elseif spellId == 395893 then--Hard, Easy
specWarnEruptingBedrock:Show()
specWarnEruptingBedrock:Play("justrun")
if args:GetSrcCreatureID() ~= 184986 then--Mythic Add
timerEruptingBedrockCD:Start(nil, args.sourceGUID)
end
--Mythic Stuff
elseif spellId == 391268 then
timerSunderingSmashCD:Start(nil, args.sourceGUID)
if self:IsTanking("player", nil, nil, nil, args.sourceGUID) then
specWarnSunderingSmash:Show()
specWarnSunderingSmash:Play("carefly")
end
elseif spellId == 393314 then
specWarnFlamewroughtEradicator:Show()
specWarnFlamewroughtEradicator:Play("bigmob")
timerFlamewroughtEradicatorCD:Start()
elseif spellId == 393309 then
specWarnSunderingFlame:Show()
specWarnSunderingFlame:Play("shockwave")
timerSunderingFlameCD:Start(nil, args.sourceGUID)
elseif spellId == 393295 then
specWarnIceboundDominator:Show()
specWarnIceboundDominator:Play("bigmob")
timerIceboundDominatorCD:Start()
elseif spellId == 393296 then
specWarnSunderingFrost:Show()
specWarnSunderingFrost:Play("shockwave")
timerSunderingFrostCD:Start(nil, args.sourceGUID)
elseif spellId == 392098 then
specWarnIronwroughtSmasher:Show()
specWarnIronwroughtSmasher:Play("bigmob")
timerIronwroughtSmasherCD:Start()
elseif spellId == 393459 then
specWarnStormwroughtDespoiler:Show()
specWarnStormwroughtDespoiler:Play("bigmob")
timerStormwroughtDespoilerCD:Start()
elseif spellId == 391267 then
timerOrbLightningCD:Start(nil, args.sourceGUID)
elseif spellId == 393429 then
specWarnSunderingPeal:Show()
specWarnSunderingPeal:Play("shockwave")
timerSunderingPealCD:Start(nil, args.sourceGUID)
end
end
function mod:SPELL_CAST_SUCCESS(args)
local spellId = args.spellId
if spellId == 373415 then
DBM:AddMsg("373415 is combat logging now, notify DBM author")
--specWarnMoltenRupture:Show()
--specWarnMoltenRupture:Play("farfromline")
end
end
function mod:SPELL_SUMMON(args)
local spellId = args.spellId
if args:IsSpellID(374935, 374931, 374939, 374943) then--Not logged
if spellId == 374935 then--Frozen Incarnation
timerFreezingTempestCD:Start(1, args.destGUID)
--if self:IsMythic() then
-- timerAbsoluteZeroCD:Start()
--end
elseif spellId == 374931 then--Blazing Incarnation
--if self:IsMythic() then
-- timerSearingCarnageCD:Start()
--end
elseif spellId == 374939 then--Tectonic Incarnation
timerGroundShatterCD:Start(1, args.destGUID)
timerViolentUpheavelCD:Start(1, args.destGUID)
--if self:IsMythic() then
-- timerSeismicRuptureCD:Start()
--end
elseif spellId == 374943 then--Thundering Incarnation
timerStormBreakCD:Start(1, args.destGUID)
--if self:IsMythic() then
-- timerThunderStrikeCD:Start()
--end
end
elseif spellId == 393314 then--Flamewrought Eradicator
timerSunderingFlameCD:Start(1, args.destGUID)
elseif spellId == 393295 then--Icewrought Dominator
timerSunderingFrostCD:Start(1, args.destGUID)
elseif spellId == 392098 then--Ironwrought Smasher
timerSunderingSmashCD:Start(1, args.destGUID)
elseif spellId == 393459 then--Stormwrought Despoiler
timerOrbLightningCD:Start(1, args.destGUID)
timerSunderingPealCD:Start(1, args.destGUID)
end
end
function mod:SPELL_AURA_APPLIED(args)
local spellId = args.spellId
if spellId == 371971 then
if self.Options.NPAuraOnSurge then
DBM.Nameplate:Show(true, args.destGUID, spellId)
end
elseif spellId == 374321 then
local amount = args.amount or 1
if amount % 3 == 0 then
warnBreakingGravel:Show(args.destName, amount)
end
elseif spellId == 396109 and (not self.vb.curAltar or self.vb.curAltar ~= 1) then--Freezing Dominance
self.vb.curAltar = 1
updateAltar(self)
elseif spellId == 396113 and (not self.vb.curAltar or self.vb.curAltar ~= 2) then--Thundering Dominance
self.vb.curAltar = 2
updateAltar(self)
elseif spellId == 396106 and (not self.vb.curAltar or self.vb.curAltar ~= 3) then--Flaming Dominance
self.vb.curAltar = 3
updateAltar(self)
elseif spellId == 396085 and (not self.vb.curAltar or self.vb.curAltar ~= 4) then--Earthen Dominance
self.vb.curAltar = 4
updateAltar(self)
elseif spellId == 372158 and not args:IsPlayer() then
local amount = args.amount or 1
local _, _, _, _, _, expireTime = DBM:UnitDebuff("player", spellId)
local remaining
if expireTime then
remaining = expireTime-GetTime()
end
if (not remaining or remaining and remaining < 6.1) and not UnitIsDeadOrGhost("player") and not self:IsHealer() then
specWarnSplinteredBones:Show(args.destName)
specWarnSplinteredBones:Play("tauntboss")
else
warnSplinteredBones:Show(args.destName, amount)
end
elseif spellId == 373487 then
local icon = self.vb.litCrashIcon
if self.Options.SetIconOnLightningCrash and icon < 9 then--On 30 man it's 9 icons :\
self:SetIcon(args.destName, icon)
end
if args:IsPlayer() then
specWarnLightningCrash:Show(self:IconNumToTexture(icon))
specWarnLightningCrash:Play("mm"..icon)
yellLightningCrash:Yell(icon, icon)
yellLightningCrashFades:Countdown(spellId, nil, icon)
end
warnLightningCrash:CombinedShow(0.5, args.destName)
self.vb.litCrashIcon = self.vb.litCrashIcon + 1
elseif spellId == 372458 then
local icon = self.vb.zeroIcon
if self.Options.SetIconOnAbsoluteZero then
self:SetIcon(args.destName, icon)
end
if args:IsPlayer() then
specWarnAbsoluteZero:Show(self:IconNumToTexture(icon))
specWarnAbsoluteZero:Play("mm"..icon)
yellAbsoluteZero:Yell(icon, icon)
yellAbsoluteZeroFades:Countdown(spellId, nil, icon)
else
warnAbsoluteZero:CombinedShow(0.5, args.destName)
end
self.vb.zeroIcon = self.vb.zeroIcon + 1
elseif spellId == 372514 and args:IsPlayer() then
timerFrostBite:Start()
elseif spellId == 372517 then
warnFrozenSolid:CombinedShow(1, args.destName)
elseif spellId == 374779 then--Primal Barrier
self:SetStage(2)
--Base
timerSunderStrikeCD:Stop()
timerDamageCD:Stop()
timerAvoidCD:Stop()
timerUltimateCD:Stop()
timerAddsCD:Stop()
elseif spellId == 374380 then
if self.Options.NPAuraOnElementalBond then
DBM.Nameplate:Show(true, args.destGUID, spellId)
end
elseif spellId == 374427 then
if args:IsPlayer() then
specWarnGroundShatter:Show()
specWarnGroundShatter:Play("runout")
yellGroundShatter:Yell()
yellGroundShatterFades:Countdown(spellId)
end
elseif spellId == 391056 then
if self.Options.SetIconOnEnvelopingEarth then
self:SetUnsortedIcon(0.3, args.destName, 1, 3, false)
end
if args:IsPlayer() then
specWarnEnvelopingEarth:Show()
specWarnEnvelopingEarth:Play("checkhp")
end
warnEnvelopingEarth:CombinedShow(0.3, args.destName)
elseif spellId == 390921 then
if self.Options.SetIconOnShockingBurst then
self:SetUnsortedIcon(0.3, args.destName, 4, 2, false)
end
if args:IsPlayer() then
specWarnShockingBurst:Show()
specWarnShockingBurst:Play("runout")
yellShockingBurst:Yell()
yellShockingBurstFades:Countdown(spellId)
end
warnShockingBurst:CombinedShow(0.5, args.destName)
elseif spellId == 391419 and args:IsPlayer() then
--Players will get debuff a lot for momentary moves, we don't want to spam them to death
--So we schedule a check after 2.5 seconds (to give them 3.5 to find allies)
specWarnFreezing:Cancel()
specWarnFreezing:Schedule(2.5, DBM_COMMON_L.ALLIES)--Might adjust timing
specWarnFreezing:ScheduleVoice(2.5, "gathershare")
elseif spellId == 391265 then
if args:IsPlayer() then
specWarnOrbLightning:Show()
specWarnOrbLightning:Play("runout")
yellOrbLightning:Yell()
yellOrbLightningFades:Countdown(spellId)
end
warnOrbLightning:CombinedShow(0.5, args.destName)
elseif spellId == 396241 and self.vb.phase < 2 then
self:SetStage(3)
timerSunderStrikeCD:Stop()
timerDamageCD:Stop()
timerAvoidCD:Stop()
timerUltimateCD:Stop()
timerAddsCD:Stop()
timerSunderStrikeCD:Start(10)
timerDamageCD:Start(15, "?")
timerAvoidCD:Start(22, "?")--28.4 now?
--timerUltimateCD:Start(30, "?")
--if self:IsMythic() then
-- timerAddsCD:Start()
--end
end
end
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
function mod:SPELL_AURA_REMOVED(args)
local spellId = args.spellId
if spellId == 371971 then
if self.Options.NPAuraOnSurge then
DBM.Nameplate:Hide(true, args.destGUID, spellId)
end
elseif spellId == 373487 then
-- if self.Options.SetIconOnLightningCrash then
-- self:SetIcon(args.destName, 0)
-- end
if args:IsPlayer() then
yellLightningCrashFades:Cancel()
end
elseif spellId == 373494 then--Icon removed off secondary debuff
if self.Options.SetIconOnLightningCrash then
self:SetIcon(args.destName, 0)
end
elseif spellId == 372458 then
if self.Options.SetIconOnAbsoluteZero then
self:SetIcon(args.destName, 0)
end
if args:IsPlayer() then
yellAbsoluteZeroFades:Cancel()
end
elseif spellId == 372514 and args:IsPlayer() then
warnFrostBite:Show()
timerFrostBite:Stop()
elseif spellId == 374779 then--Primal Barrier
self.vb.curAltar = false--Reset on intermission end because we don't want initial timers to show an altar spell when there isn't one yet
-- if self.vb.stageTotality == 2 then
self:SetStage(1)
--Base
timerSunderStrikeCD:Start(11)
timerDamageCD:Start(20, "?")
timerAvoidCD:Start(30, "?")
--timerUltimateCD:Start(60, "?")
--Boss retains power from previous stage
--Hopefully this is temp
--Alternatively could just pause timer going into intermission and resume it here with 4 seconds added?
-- local currentPower = UnitPower("boss1")
-- if currentPower then
-- local percent = currentPower / 100
-- local elapsed = percent * 60
-- timerUltimateCD:Update(elapsed, 64, "?")--Power updates resume after 4 seconds, so 4 sec added to total
-- end
--if self:IsMythic() then
-- timerAddsCD:Start()
--end
-- else--4, which means stage 3, totality 5
-- self:SetStage(3)
-- timerSunderStrikeCD:Start(10)
-- timerDamageCD:Start(15, " ")
-- timerAvoidCD:Start(22, " ")--28.4 now?
-- --Boss retains power from previous stage
-- --Hopefully this is temp
-- --Alternatively could just pause timer going into intermission and resume it here with 4 seconds added?
-- local currentPower = UnitPower("boss1")
-- if currentPower then
-- local percent = currentPower / 100
-- local elapsed = percent * 60
-- timerUltimateCD:Update(elapsed, 64, "?")--Power updates resume after 4 seconds, so 4 sec added to total
-- end
-- --if self:IsMythic() then
-- -- timerAddsCD:Start()
-- --end
-- end
elseif spellId == 374380 then
if self.Options.NPAuraOnElementalBond then
DBM.Nameplate:Hide(true, args.destGUID, spellId)
end
elseif spellId == 374427 then
if args:IsPlayer() then
yellGroundShatterFades:Cancel()
end
elseif spellId == 390921 then
if self.Options.SetIconOnShockingBurst then
self:SetIcon(args.destName, 0)
end
if args:IsPlayer() then
yellShockingBurstFades:Cancel()
end
elseif spellId == 391419 and args:IsPlayer() then
specWarnFreezing:Cancel()
specWarnFreezing:CancelVoice()
elseif spellId == 391265 then
if args:IsPlayer() then
yellOrbLightningFades:Cancel()
end
elseif spellId == 391056 then
if self.Options.SetIconOnEnvelopingEarth then
self:SetIcon(args.destName, 0)
end
end
end
function mod:UNIT_DIED(args)
local cid = self:GetCIDFromGUID(args.destGUID)
--Intermission Adds
if cid == 190688 then--Blazing Fiend
timerSearingCarnageCD:Stop(args.destGUID)
elseif cid == 190686 then--Frozen Destroyer
timerFreezingTempestCD:Stop(args.destGUID)
timerAbsoluteZeroCD:Stop(args.destGUID)
elseif cid == 190588 then--Tectonic Crusher
timerGroundShatterCD:Stop(args.destGUID)
timerViolentUpheavelCD:Stop(args.destGUID)
timerSeismicRuptureCD:Stop()
elseif cid == 190690 then--Thundering Tempest
timerStormBreakCD:Stop(args.destGUID)
timerThunderStrikeCD:Stop(args.destGUID)
--Mythic Adds
elseif cid == 198311 then--Flamewrought Eradicator
timerSunderingFlameCD:Stop(args.destGUID)
elseif cid == 198308 then--Icewrought Dominator
timerSunderingFrostCD:Stop(args.destGUID)
timerFrigidTorrentCD:Stop(args.destGUID)
elseif cid == 197595 then--Ironwrought Smasher
timerSunderingSmashCD:Stop(args.destGUID)
elseif cid == 198326 then--Stormwrought Despoiler
timerOrbLightningCD:Stop(args.destGUID)
timerSunderingPealCD:Stop(args.destGUID)
-- elseif cid == 190586 then--seismic-pillar
end
end
function mod:SPELL_PERIODIC_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId, spellName)
if (spellId == 374554 or spellId == 391555) and destGUID == UnitGUID("player") and self:AntiSpam(2, 4) then
specWarnGTFO:Show(spellName)
specWarnGTFO:Play("watchfeet")
end
end
mod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE
do
local spellEasyMapping = {
--Biting Chill, Shocking Burst, Magma Burst, Erupting Bedrock
[391096] = {DBM:GetSpellInfo(373678), DBM:GetSpellInfo(373487), DBM:GetSpellInfo(382563), (DBM:GetSpellInfo(395893))},
--Biting Chill, Shocking Burst, Magma Burst, Erupting Bedrock
[391100] = {DBM:GetSpellInfo(373678), DBM:GetSpellInfo(390920), DBM:GetSpellInfo(382563), (DBM:GetSpellInfo(395893))},
--Ultimate Selection (Absolute Zero, Thunder Strike, Searing Carnage, Seismic Rupture
[374680] = {DBM:GetSpellInfo(372456), DBM:GetSpellInfo(374217), DBM:GetSpellInfo(374022), (DBM:GetSpellInfo(374705))}
}
local iconEasyMapping = {
--Biting Chill, Shocking Burst, Magma Burst, Erupting Bedrock
[391096] = {GetSpellTexture(373678), GetSpellTexture(373487), GetSpellTexture(382563), (GetSpellTexture(395893))},
--Biting Chill, Shocking Burst, Magma Burst, Erupting Bedrock
[391100] = {GetSpellTexture(373678), GetSpellTexture(390920), GetSpellTexture(382563), (GetSpellTexture(395893))},
--Ultimate Selection (Absolute Zero, Thunder Strike, Searing Carnage, Seismic Rupture
[374680] = {GetSpellTexture(372456), GetSpellTexture(374217), GetSpellTexture(374022), (GetSpellTexture(374705))}
}
local spellMapping = {
--Biting Chill, Lightning Crash, Magma Burst, Enveloping Earth
[391096] = {DBM:GetSpellInfo(373678), DBM:GetSpellInfo(373487), DBM:GetSpellInfo(382563), (DBM:GetSpellInfo(391055))},
--Frigid Torrent, Shocking Burst, Molten Rupture, Erupting Bedrock
[391100] = {DBM:GetSpellInfo(391019), DBM:GetSpellInfo(390920), DBM:GetSpellInfo(373329), (DBM:GetSpellInfo(395893))},
--Ultimate Selection (Absolute Zero, Thunder Strike, Searing Carnage, Seismic Rupture
[374680] = {DBM:GetSpellInfo(372456), DBM:GetSpellInfo(374217), DBM:GetSpellInfo(374022), (DBM:GetSpellInfo(374705))}
}
local iconMapping = {
--Biting Chill, Lightning Crash, Magma Burst, Enveloping Earth
[391096] = {GetSpellTexture(373678), GetSpellTexture(373487), GetSpellTexture(382563), (GetSpellTexture(391055))},
--Frigid Torrent, Shocking Burst, Molten Rupture, Erupting Bedrock
[391100] = {GetSpellTexture(391019), GetSpellTexture(390920), GetSpellTexture(373329), (GetSpellTexture(395893))},
--Ultimate Selection (Absolute Zero, Thunder Strike, Searing Carnage, Seismic Rupture
[374680] = {GetSpellTexture(372456), GetSpellTexture(374217), GetSpellTexture(374022), (GetSpellTexture(374705))}
}
function updateAltar(self)
--Collect current timers usiing cached spellname reference so it's actually possible to find timer with API (before we change it)
local dElapsed, dTotal = timerDamageCD:GetTime(self.vb.damageSpell)
local aElapsed, aTotal = timerAvoidCD:GetTime(self.vb.avoidSpell)
local uElapsed, uTotal = timerUltimateCD:GetTime(self.vb.ultimateSpell)
--Terminate old timers
timerDamageCD:Stop()
timerAvoidCD:Stop()
timerUltimateCD:Stop()
--Gather new spellNames and Icons and update bars
if dTotal and dTotal > 0 then
self.vb.damageSpell = self.vb.curAltar and (self:IsEasy() and spellEasyMapping[391096][self.vb.curAltar] or spellMapping[391096][self.vb.curAltar]) or "?"
local dSpellIcon = self.vb.curAltar and (self:IsEasy() and iconEasyMapping[391096][self.vb.curAltar] or iconMapping[391096][self.vb.curAltar]) or 136116
timerDamageCD:Update(dElapsed, dTotal, self.vb.damageSpell)
timerDamageCD:UpdateIcon(dSpellIcon, self.vb.damageSpell)
end
if aTotal and aTotal > 0 then
self.vb.avoidSpell = self.vb.curAltar and (self:IsEasy() and spellEasyMapping[391100][self.vb.curAltar] or spellMapping[391100][self.vb.curAltar]) or "?"
local aSpellIcon = self.vb.curAltar and (self:IsEasy() and iconEasyMapping[391100][self.vb.curAltar] or iconMapping[391100][self.vb.curAltar]) or 136116
timerAvoidCD:Update(aElapsed, aTotal, self.vb.avoidSpell)
timerAvoidCD:UpdateIcon(aSpellIcon, self.vb.avoidSpell)
end
if uTotal and uTotal > 0 then
self.vb.ultimateSpell = self.vb.curAltar and (self:IsEasy() and spellEasyMapping[374680][self.vb.curAltar] or spellMapping[374680][self.vb.curAltar]) or "?"
local uSpellIcon = self.vb.curAltar and (self:IsEasy() and iconEasyMapping[374680][self.vb.curAltar] or iconMapping[374680][self.vb.curAltar]) or 136116
timerUltimateCD:Update(uElapsed, uTotal, self.vb.ultimateSpell)
timerUltimateCD:UpdateIcon(uSpellIcon, self.vb.ultimateSpell)
end
end
--Problematic Notes:
--Molten Rupture and Frigid Torrent flagged heroic+ only. So on normal and LFR Avoid Selection only has a 2/4 spells.
--Lightning Crash and Enveloping Earth flagged heroic+ only. So on normal and LFR "Damage Selection" only has a 2/4 spells.
function mod:UNIT_SPELLCAST_SUCCEEDED(uId, _, spellId)
if spellId == 373415 then
specWarnMoltenRupture:Show()
specWarnMoltenRupture:Play("farfromline")
elseif spellId == 391096 then--Damage Selection (Biting Chill, Lightning Crash, Magma Burst, Enveloping Earth)
self.vb.damageSpell = self.vb.curAltar and (self:IsEasy() and spellEasyMapping[spellId][self.vb.curAltar] or spellMapping[spellId][self.vb.curAltar]) or "?"
local spellIcon = self.vb.curAltar and (self:IsEasy() and iconEasyMapping[spellId][self.vb.curAltar] or iconMapping[spellId][self.vb.curAltar]) or 136116
timerDamageCD:Start(self.vb.phase == 3 and 32.9 or 30, self.vb.damageSpell)
timerDamageCD:UpdateIcon(spellIcon, self.vb.damageSpell)
elseif spellId == 391100 then--Avoid Selection (Frigid Torrent, Shocking Burst, Molten Rupture, Erupting Bedrock)
self.vb.avoidSpell = self.vb.curAltar and (self:IsEasy() and spellEasyMapping[spellId][self.vb.curAltar] or spellMapping[spellId][self.vb.curAltar]) or "?"
local spellIcon = self.vb.curAltar and (self:IsEasy() and iconEasyMapping[spellId][self.vb.curAltar] or iconMapping[spellId][self.vb.curAltar]) or 136116
timerAvoidCD:Start(self.vb.phase == 3 and 32.9 or 30, self.vb.avoidSpell)
timerAvoidCD:UpdateIcon(spellIcon, self.vb.avoidSpell)
elseif spellId == 374680 then--Ultimate Selection (Absolute Zero, Thunder Strike, Searing Carnage, Seismic Rupture)
self.vb.ultimateSpell = self.vb.curAltar and (self:IsEasy() and spellEasyMapping[spellId][self.vb.curAltar] or spellMapping[spellId][self.vb.curAltar]) or "?"
local spellIcon = self.vb.curAltar and (self:IsEasy() and iconEasyMapping[spellId][self.vb.curAltar] or iconMapping[spellId][self.vb.curAltar]) or 136116
timerUltimateCD:Start(self.vb.phase == 3 and 32.9 or 60, self.vb.ultimateSpell)
timerUltimateCD:UpdateIcon(spellIcon, self.vb.ultimateSpell)
elseif spellId == 386432 then--Granyth Ability Selection (Mythic add selection)
timerAddsCD:Start()
end
end
end