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.
316 lines
11 KiB
316 lines
11 KiB
local mod = DBM:NewMod("CataEvent", "DBM-WorldEvents", 4)
|
|
local L = mod:GetLocalizedStrings()
|
|
|
|
mod:SetRevision("20240426175442")
|
|
mod:SetCreatureID(52409, 41376, 43324)
|
|
mod:SetEncounterID(2320)
|
|
mod:SetBossHPInfoToHighest()
|
|
--mod:SetModelSound("Sound\\Creature\\RAGNAROS\\VO_FL_RAGNAROS_AGGRO.ogg", "Sound\\Creature\\RAGNAROS\\VO_FL_RAGNAROS_KILL_03.ogg")
|
|
--Long: blah blah blah (didn't feel like transcribing it)
|
|
--Short: This is my realm
|
|
|
|
mod:RegisterCombat("combat")
|
|
mod:SetWipeTime(60)
|
|
|
|
mod:RegisterEventsInCombat(
|
|
"SPELL_CAST_START 98710 98951 98952 98953 99172 99235 99236 80734 81713 81628",
|
|
"SPELL_CAST_SUCCESS 100460 99268",
|
|
"SPELL_AURA_APPLIED 99399 82518",
|
|
"SPELL_AURA_APPLIED_DOSE 99399 82518",
|
|
"UNIT_AURA player",
|
|
"UNIT_SPELLCAST_SUCCEEDED boss1",
|
|
"UNIT_DIED",
|
|
"INSTANCE_ENCOUNTER_ENGAGE_UNIT",
|
|
"ZONE_CHANGED_NEW_AREA"
|
|
)
|
|
|
|
--Chogal
|
|
local warnFury = mod:NewStackAnnounce(82524, 2, nil, "Tank|Healer")
|
|
--Ragnaros
|
|
local warnBurningWound = mod:NewStackAnnounce(99399, 3, nil, "Tank|Healer")
|
|
local warnSulfurasSmash = mod:NewSpellAnnounce(98710, 4)--Phase 1-3 ability.
|
|
local warnSonsLeft = mod:NewAddsLeftAnnounce("ej2637", 2, 99014)
|
|
local warnBlazingHeat = mod:NewTargetAnnounce(100460, 4)
|
|
local warnSplittingBlow = mod:NewAnnounce("warnSplittingBlow", 3, 98951)
|
|
local warnEngulfingFlame = mod:NewAnnounce("warnEngulfingFlame", 4, 99171)
|
|
local warnLivingMeteor = mod:NewTargetNoFilterAnnounce(99268, 4)--Phase 3 only ability
|
|
|
|
--Chogal
|
|
local specWarnFury = mod:NewSpecialWarningStack(82524, nil, 2, nil, nil, 1, 6)
|
|
local specWarnFuryTaunt = mod:NewSpecialWarningTaunt(82524, nil, nil, nil, 1, 2)
|
|
local specWarnAdherent = mod:NewSpecialWarningSwitch(81628, "-Healer", nil, nil, 1, 2)
|
|
local specWarnDepravity = mod:NewSpecialWarningInterrupt(81713, "HasInterrupt", nil, nil, 1, 2)
|
|
local specWarnSickness = mod:NewSpecialWarningMoveAway(82235, nil, nil, nil, 1, 2)
|
|
local yellSickness = mod:NewYell(82235, nil, false)
|
|
--Nef
|
|
local specWarnBlastsNova = mod:NewSpecialWarningInterrupt(80734, "HasInterrupt", nil, nil, 1, 2)
|
|
--Ragnaros
|
|
local specWarnBurningWound = mod:NewSpecialWarningStack(99399, nil, 4, nil, nil, 1, 6)
|
|
local specWarnBurningWoundTaunt = mod:NewSpecialWarningTaunt(99399, nil, nil, nil, 1, 2)
|
|
local specWarnSplittingBlow = mod:NewSpecialWarningSpell(98951, nil, nil, nil, 1, 2)
|
|
local specWarnBlazingHeat = mod:NewSpecialWarningYou(100460)--Debuff on you
|
|
local yellBlazingHeat = mod:NewYell(100460)
|
|
local specWarnMoltenSeed = mod:NewSpecialWarningRun(98495, nil, nil, 2, 3, 2)
|
|
local specWarnEngulfing = mod:NewSpecialWarningDodge(99171, nil, nil, nil, 2, 2)
|
|
local specWarnMeteor = mod:NewSpecialWarningDodge(99268, nil, nil, nil, 1, 2)--Spawning on you
|
|
local specWarnMeteorNear = mod:NewSpecialWarningClose(99268, nil, nil, nil, 1, 2)--Spawning near you
|
|
local yellMeteor = mod:NewYell(99268)
|
|
local specWarnFixate = mod:NewSpecialWarningRun(99849, nil, nil, nil, 4, 2)--Chasing you after it spawned
|
|
local yellFixate = mod:NewYell(99849)
|
|
|
|
local timerMoltenSeedCD = mod:NewCDTimer(60, 98495, nil, nil, nil, 3, nil, DBM_COMMON_L.DEADLY_ICON, nil, 1, 5)--60-63
|
|
local timerFlamesCD = mod:NewNextTimer(40, 99171, nil, nil, nil, 3, nil, nil, nil, 2, 4)
|
|
local timerLivingMeteorCD = mod:NewNextTimer(45, 99268, nil, nil, nil, 1, nil, nil, nil, 3, 4)
|
|
|
|
mod:AddInfoFrameOption(99849, true)
|
|
mod:AddRangeFrameOption(6, 98495)
|
|
mod:GroupSpells(99268, 99849)--Living Meteor with Fixate
|
|
|
|
local meteorWarned = false
|
|
local meteorTarget = DBM:GetSpellName(99849)
|
|
local seenAdds = {}
|
|
mod.vb.seedsActive = false
|
|
mod.vb.meteorSpawned = 0
|
|
mod.vb.sonsLeft = 0
|
|
mod.vb.postSons = false
|
|
mod.vb.phase = 0
|
|
|
|
function mod:LivingMeteorTarget(targetname)
|
|
if targetname == UnitName("player") then
|
|
specWarnMeteor:Show()
|
|
specWarnMeteor:Play("targetyou")
|
|
yellMeteor:Yell()
|
|
else
|
|
local uId = DBM:GetRaidUnitId(targetname)
|
|
if uId then
|
|
local inRange = DBM.RangeCheck:GetDistance("player", uId)
|
|
if inRange and inRange < 12 then
|
|
specWarnMeteorNear:Show(targetname)
|
|
specWarnMeteorNear:Play("runaway")
|
|
else
|
|
warnLivingMeteor:Show(targetname)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:OnCombatStart()
|
|
table.wipe(seenAdds)
|
|
self.vb.seedsActive = false
|
|
self.vb.meteorSpawned = 0
|
|
self.vb.sonsLeft = 0
|
|
self.vb.postSons = false
|
|
self.vb.phase = 0
|
|
self.vb.bossLeft = 4--Because we change it to 3 right away
|
|
self.numBoss = 3
|
|
end
|
|
|
|
function mod:OnCombatEnd()
|
|
if self.Options.InfoFrame then
|
|
DBM.InfoFrame:Hide()
|
|
end
|
|
if self.Options.RangeFrame then
|
|
DBM.RangeCheck:Hide()
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_CAST_START(args)
|
|
local spellId = args.spellId
|
|
if spellId == 98710 then
|
|
warnSulfurasSmash:Show()
|
|
elseif args:IsSpellID(98951, 98952, 98953) then--This has 3 spellids, 1 for each possible location for hammer.
|
|
self.vb.sonsLeft = 8
|
|
timerMoltenSeedCD:Stop()
|
|
timerFlamesCD:Stop()
|
|
specWarnSplittingBlow:Show()
|
|
specWarnSplittingBlow:Play("phasechange")
|
|
if spellId == 98951 then--West
|
|
warnSplittingBlow:Show(args.spellName, DBM_COMMON_L.WEST)
|
|
elseif spellId == 98952 then--Middle
|
|
warnSplittingBlow:Show(args.spellName, DBM_COMMON_L.MIDDLE)
|
|
elseif spellId == 98953 then--East
|
|
warnSplittingBlow:Show(args.spellName, DBM_COMMON_L.EAST)
|
|
end
|
|
if self.Options.RangeFrame then
|
|
DBM.RangeCheck:Hide()
|
|
end
|
|
elseif args:IsSpellID(99172, 99235, 99236) then--Another scripted spell with a ton of spellids based on location of room.
|
|
--North: 99172
|
|
--Middle: 99235
|
|
--South: 99236
|
|
if self.vb.postSons then
|
|
timerFlamesCD:Start(30)--30 second CD in phase 3 (phase 2 with how this event is scripted)
|
|
else
|
|
timerFlamesCD:Start()--40 second CD in phase 2 (phase 1 with how this event is scripted)
|
|
end
|
|
if spellId == 99172 then--North
|
|
warnEngulfingFlame:Show(args.spellName, DBM_COMMON_L.NORTH)
|
|
specWarnEngulfing:Show()
|
|
specWarnEngulfing:Play("watchstep")
|
|
elseif spellId == 99235 then--Middle
|
|
warnEngulfingFlame:Show(args.spellName, DBM_COMMON_L.MIDDLE)
|
|
elseif spellId == 99236 then--South
|
|
warnEngulfingFlame:Show(args.spellName, DBM_COMMON_L.SOUTH)
|
|
end
|
|
elseif spellId == 80734 and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
|
specWarnBlastsNova:Show(args.sourceName)
|
|
specWarnBlastsNova:Play("kickcast")
|
|
elseif spellId == 81713 and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
|
specWarnDepravity:Show(args.sourceName)
|
|
specWarnDepravity:Play("kickcast")
|
|
elseif spellId == 81628 then
|
|
specWarnAdherent:Show()
|
|
specWarnAdherent:Play("killmob")
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_CAST_SUCCESS(args)
|
|
local spellId = args.spellId
|
|
if spellId == 100460 then -- Blazing heat
|
|
if args:IsPlayer() then
|
|
specWarnBlazingHeat:Show()
|
|
specWarnBlazingHeat:Play("targetyou")
|
|
yellBlazingHeat:Yell()
|
|
else
|
|
warnBlazingHeat:Show(args.destName)
|
|
end
|
|
elseif spellId == 99268 then
|
|
self.vb.meteorSpawned = self.vb.meteorSpawned + 1
|
|
if self.vb.meteorSpawned == 1 or self.vb.meteorSpawned % 2 == 0 then--Spam filter, announce at 1, 2, 4, 6, 8, 10 etc. The way that they spawn
|
|
self:BossTargetScanner(args.sourceGUID, "LivingMeteorTarget", 0.025, 12)
|
|
timerLivingMeteorCD:Start(45)
|
|
end
|
|
if self.Options.InfoFrame and self.vb.meteorSpawned == 1 then--Show meteor frame and clear any health or aggro frame because nothing is more important then meteors.
|
|
DBM.InfoFrame:SetHeader(meteorTarget)
|
|
DBM.InfoFrame:Show(6, "playerbaddebuff", meteorTarget)--If you get more then 6 chances are you're screwed unless it's normal mode and he's at like 11%. Really anything more then 4 is chaos and wipe waiting to happen.
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_AURA_APPLIED(args)
|
|
local spellId = args.spellId
|
|
if spellId == 99399 then
|
|
local amount = args.amount or 1
|
|
if amount >= 4 then
|
|
if args:IsPlayer() then
|
|
specWarnBurningWound:Show(amount)
|
|
specWarnBurningWound:Play("stackhigh")
|
|
else
|
|
if not UnitIsDeadOrGhost("player") and not DBM:UnitDebuff("player", spellId) then
|
|
specWarnBurningWoundTaunt:Show(args.destName)
|
|
specWarnBurningWoundTaunt:Play("tauntboss")
|
|
else
|
|
warnBurningWound:Show(args.destName, amount)
|
|
end
|
|
end
|
|
else
|
|
warnBurningWound:Show(args.destName, amount)
|
|
end
|
|
elseif args.spellId == 82518 then
|
|
local uId = DBM:GetRaidUnitId(args.destName)
|
|
if self:IsTanking(uId) then
|
|
local amount = args.amount or 1
|
|
if amount >= 2 then
|
|
if args:IsPlayer() then
|
|
specWarnFury:Show(amount)
|
|
specWarnFury:Play("stackhigh")
|
|
else
|
|
if not UnitIsDeadOrGhost("player") and not DBM:UnitDebuff("player", spellId) then--Can't taunt less you've dropped yours off, period.
|
|
specWarnFuryTaunt:Show(args.destName)
|
|
specWarnFuryTaunt:Play("tauntboss")
|
|
else
|
|
warnFury:Show(args.destName, amount)
|
|
end
|
|
end
|
|
else
|
|
warnFury:Show(args.destName, amount)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
|
|
|
|
function mod:UNIT_AURA()
|
|
if DBM:UnitDebuff("player", meteorTarget) and not meteorWarned then--Warn you that you have a meteor
|
|
specWarnFixate:Show()
|
|
specWarnFixate:Play("justrun")
|
|
yellFixate:Yell()
|
|
meteorWarned = true
|
|
elseif not DBM:UnitDebuff("player", meteorTarget) and meteorWarned then--reset warned status if you don't have debuff
|
|
meteorWarned = false
|
|
elseif DBM:UnitDebuff("player", 82235) and self:AntiSpam(7, 2) then
|
|
specWarnSickness:Show()
|
|
specWarnSickness:Play("scatter")
|
|
yellSickness:Yell()
|
|
end
|
|
end
|
|
|
|
local function clearSeedsActive(self)
|
|
self.vb.seedsActive = false
|
|
end
|
|
|
|
function mod:UNIT_SPELLCAST_SUCCEEDED(_, _, spellId)
|
|
if spellId == 98333 then -- The true molten seeds cast.
|
|
self.vb.seedsActive = true
|
|
specWarnMoltenSeed:Show()
|
|
specWarnMoltenSeed:Play("justrun")
|
|
timerMoltenSeedCD:Start()
|
|
self:Schedule(17.5, clearSeedsActive, self)--Clear active/warned seeds after they have all blown up.
|
|
elseif spellId == 98860 then--Base Visual
|
|
self.vb.postSons = true
|
|
timerLivingMeteorCD:Start(9)
|
|
timerFlamesCD:Start(30)
|
|
end
|
|
end
|
|
|
|
function mod:UNIT_DIED(args)
|
|
local cid = self:GetCIDFromGUID(args.destGUID)
|
|
if cid == 53140 then--Son of Flame
|
|
self.vb.sonsLeft = self.vb.sonsLeft - 1
|
|
if self.vb.sonsLeft < 3 then
|
|
warnSonsLeft:Show(self.vb.sonsLeft)
|
|
end
|
|
elseif cid == 53500 then--Meteors
|
|
self.vb.meteorSpawned = self.vb.meteorSpawned - 1
|
|
if self.vb.meteorSpawned == 0 and self.Options.InfoFrame then--Meteors all gone, hide info frame
|
|
DBM.InfoFrame:Hide()
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:INSTANCE_ENCOUNTER_ENGAGE_UNIT()
|
|
for i = 1, 5 do
|
|
local unitID = "boss"..i
|
|
local GUID = UnitGUID(unitID)
|
|
if GUID and not seenAdds[GUID] then
|
|
seenAdds[GUID] = true
|
|
local cid = self:GetCIDFromGUID(GUID)
|
|
if cid == 52409 then--Ragnaros
|
|
self.vb.phase = self.vb.phase + 1
|
|
self.vb.bossLeft = self.vb.bossLeft - 1
|
|
--Seems to activate timers as if P2 just started
|
|
timerMoltenSeedCD:Start(21.5)
|
|
timerFlamesCD:Start(40)
|
|
if self.Options.RangeFrame then
|
|
DBM.RangeCheck:Show(6)
|
|
end
|
|
elseif cid == 41376 then--Nefarian
|
|
self.vb.phase = self.vb.phase + 1
|
|
self.vb.bossLeft = self.vb.bossLeft - 1
|
|
elseif cid == 43324 then--Chogal
|
|
self.vb.phase = self.vb.phase + 1
|
|
self.vb.bossLeft = self.vb.bossLeft - 1
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:ZONE_CHANGED_NEW_AREA()
|
|
--Cleanup timers and scheduled events
|
|
timerMoltenSeedCD:Stop()
|
|
timerFlamesCD:Stop()
|
|
timerLivingMeteorCD:Stop()
|
|
if self.Options.RangeFrame then
|
|
DBM.RangeCheck:Hide()
|
|
end
|
|
end
|
|
|