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.

222 lines
7.7 KiB

local mod = DBM:NewMod("WrathEvent", "DBM-WorldEvents", 4)
local L = mod:GetLocalizedStrings()
mod:SetRevision("20240315080105")
mod:SetCreatureID(36597, 34564, 15936)
mod:SetEncounterID(2321)
mod:SetModelID(30721)--Lich King
mod:SetBossHPInfoToHighest()
mod:SetMinSyncRevision(20191108000000)--2019, November 8th
mod:RegisterCombat("combat")
mod:SetWipeTime(60)
mod:RegisterEventsInCombat(
"SPELL_CAST_START 68981 72259 72262 70498 72762",
"SPELL_CAST_SUCCESS 69200",
"SPELL_SUMMON 69037",
"SPELL_AURA_APPLIED 72754 67574 66012",
"SPELL_DAMAGE 68983",
"SPELL_MISSED 68983",
"RAID_BOSS_EMOTE",
"UNIT_SPELLCAST_SUCCEEDED boss1",
"INSTANCE_ENCOUNTER_ENGAGE_UNIT",
"ZONE_CHANGED_NEW_AREA"
)
--TODO, switch defile to even faster UNIT_TARGET scanner if boss unitIDs check out from transcriptor
--Heigan
local warnTeleportSoon = mod:NewAnnounce("WarningTeleportSoon", 2, "135736")
local warnTeleportNow = mod:NewAnnounce("WarningTeleportNow", 3, "135736")
--Anub
local warnEmerge = mod:NewAnnounce("WarnEmerge", 3, "Interface\\AddOns\\DBM-Core\\textures\\CryptFiendUnBurrow.blp")
local warnEmergeSoon = mod:NewAnnounce("WarnEmergeSoon", 1, "Interface\\AddOns\\DBM-Core\\textures\\CryptFiendUnBurrow.blp")
local warnSubmerge = mod:NewAnnounce("WarnSubmerge", 3, "Interface\\AddOns\\DBM-Core\\textures\\CryptFiendBurrow.blp")
local warnSubmergeSoon = mod:NewAnnounce("WarnSubmergeSoon", 2, "Interface\\AddOns\\DBM-Core\\textures\\CryptFiendBurrow.blp")
local warnPursue = mod:NewTargetNoFilterAnnounce(67574, 4)
local warnFreezingSlash = mod:NewTargetNoFilterAnnounce(66012, 2, nil, "Tank|Healer")
--Lich King
local warnRemorselessWinter = mod:NewSpellAnnounce(68981, 3) --Phase Transition Start Ability
local warnQuake = mod:NewSpellAnnounce(72262, 4) --Phase Transition End Ability
local warnRagingSpirit = mod:NewTargetNoFilterAnnounce(69200, 3) --Transition Add
local warnDefileSoon = mod:NewSoonAnnounce(72762, 3) --Phase 2+ Ability
local warnDefileCast = mod:NewTargetNoFilterAnnounce(72762, 4) --Phase 2+ Ability
local warnSummonValkyr = mod:NewSpellAnnounce(69037, 3, 71844) --Phase 2 Add
local warnSummonVileSpirit = mod:NewSpellAnnounce(70498, 2) --Phase 3 Add
--Anub
local specWarnPursue = mod:NewSpecialWarningRun(67574, nil, nil, nil, 4, 2)
local yellPursue = mod:NewYell(67574)
--Lich King
local specWarnRagingSpirit = mod:NewSpecialWarningYou(69200, nil, nil, nil, 1, 2) --Transition Add
local specWarnDefileCast = mod:NewSpecialWarningMoveAway(72762, nil, nil, nil, 3, 2) --Phase 2+ Ability
local yellDefile = mod:NewYell(72762)
local specWarnDefileNear = mod:NewSpecialWarningClose(72762, nil, nil, nil, 1, 2) --Phase 2+ Ability
local specWarnGTFO = mod:NewSpecialWarningGTFO(72762, nil, nil, nil, 1, 8) --Phase 2+ Ability
--Heigan
local timerTeleport = mod:NewTimer(90, "TimerTeleport", "135736", nil, nil, 6)
--Anub
local timerSubmerge = mod:NewTimer(75, "TimerSubmerge", "Interface\\AddOns\\DBM-Core\\textures\\CryptFiendBurrow.blp", nil, nil, 6)
local timerEmerge = mod:NewTimer(65, "TimerEmerge", "Interface\\AddOns\\DBM-Core\\textures\\CryptFiendUnBurrow.blp", nil, nil, 6)
--Lich King
local timerDefileCD = mod:NewCDTimer(32.5, 72762, nil, nil, nil, 3, nil, DBM_COMMON_L.DEADLY_ICON, nil, 1, 6)
local seenAdds = {}
mod.vb.phase = 0
function mod:OnCombatStart()
table.wipe(seenAdds)
self.vb.phase = 0
self.vb.bossLeft = 4--Because we change it to 3 right away
self.numBoss = 3
end
--function mod:OnCombatEnd()
--end
function mod:DefileTarget(targetname, uId)
if not targetname then return end
if targetname == UnitName("player") then
specWarnDefileCast:Show()
specWarnDefileCast:Play("runout")
yellDefile:Yell()
elseif self:IsClassic() and self:CheckNearby(10, targetname) then
specWarnDefileNear:Show(targetname)
specWarnDefileNear:Play("runaway")
else
warnDefileCast:Show(targetname)
end
end
function mod:SPELL_CAST_START(args)
if args:IsSpellID(68981, 72259) then -- Remorseless Winter (phase transition start)
warnRemorselessWinter:Show()
timerDefileCD:Stop()
warnDefileSoon:Cancel()
elseif args.spellId == 72262 then -- Quake (phase transition end)
warnQuake:Show()
warnDefileSoon:Schedule(32.3)
timerDefileCD:Start(37.3)
elseif args.spellId == 70498 then -- Vile Spirits
warnSummonVileSpirit:Show()
elseif args.spellId == 72762 then -- Defile
self:BossTargetScanner(args.sourceGUID, "DefileTarget", 0.02, 15)
warnDefileSoon:Cancel()
warnDefileSoon:Schedule(27.5)
timerDefileCD:Start()
end
end
function mod:SPELL_CAST_SUCCESS(args)
if args.spellId == 69200 then -- Raging Spirit
if args:IsPlayer() then
specWarnRagingSpirit:Show()
specWarnRagingSpirit:Play("targetyou")
else
warnRagingSpirit:Show(args.destName)
end
end
end
function mod:SPELL_SUMMON(args)
if args.spellId == 69037 and self:AntiSpam(3, 1) then -- Summon Val'kyr
warnSummonValkyr:Show()
end
end
function mod:SPELL_AURA_APPLIED(args)
if args.spellId == 72754 and args:IsPlayer() and self:AntiSpam(2, 2) then -- Defile Damage
specWarnGTFO:Show(args.spellName)
specWarnGTFO:Play("watchfeet")
elseif args.spellId == 67574 then
if args:IsPlayer() then
specWarnPursue:Show()
specWarnPursue:Play("justrun")
specWarnPursue:ScheduleVoice(1.5, "keepmove")
yellPursue:Yell()
else
warnPursue:Show(args.destName)
end
elseif args.spellId == 66012 then
warnFreezingSlash:Show(args.destName)
end
end
function mod:SPELL_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId, spellName)
if spellId == 68983 and destGUID == UnitGUID("player") and self:AntiSpam(2, 3) then -- Remorseless Winter
specWarnGTFO:Show(spellName)
specWarnGTFO:Play("watchfeet")
end
end
mod.SPELL_MISSED = mod.SPELL_DAMAGE
function mod:RAID_BOSS_EMOTE(msg)
if msg and msg:find(L.Burrow) then
warnSubmerge:Show()
warnEmergeSoon:Schedule(55)
timerEmerge:Start()
elseif msg and msg:find(L.Emerge) then
warnEmerge:Show()
warnSubmergeSoon:Schedule(65)
timerSubmerge:Start()
end
end
do
--Back in room has an emote, but that requires translation, scheduling works better
local function BackInRoom()
warnTeleportNow:Show()
timerTeleport:Start(88.5)
warnTeleportSoon:Schedule(78.5)
end
function mod:UNIT_SPELLCAST_SUCCEEDED(_, _, spellId)
if spellId == 30211 then--Teleport Self
warnTeleportNow:Show()
warnTeleportSoon:Schedule(37.5)
timerTeleport:Start(47.5)
self:Schedule(47.5, BackInRoom)
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 == 36597 then--Lich King
self.vb.bossLeft = self.vb.bossLeft - 1
self.vb.phase = self.vb.phase + 1
timerDefileCD:Start(29.1)
elseif cid == 34564 then--Anub'arak
self.vb.bossLeft = self.vb.bossLeft - 1
self.vb.phase = self.vb.phase + 1
warnSubmergeSoon:Schedule(5.5)
timerSubmerge:Start(15.5)
elseif cid == 15936 then--Heigan
self.vb.bossLeft = self.vb.bossLeft - 1
self.vb.phase = self.vb.phase + 1
timerTeleport:Start(16)
warnTeleportSoon:Schedule(6)
end
end
end
end
function mod:ZONE_CHANGED_NEW_AREA()
--Cleanup timers and scheduled events
if IsEncounterInProgress() then return end--On frozen throne this event fires when near edge of area, we need to filter that canceling timers by mistake
timerDefileCD:Stop()
timerEmerge:Stop()
timerSubmerge:Stop()
timerTeleport:Stop()
warnTeleportSoon:Cancel()
warnEmergeSoon:Cancel()
warnSubmergeSoon:Cancel()
warnDefileSoon:Cancel()
end