Files
coa-dbm/DBM-ZulAman/Zul'jin.lua
T
Szyler dc8afd6584 5.19b (#4)
Co-authored-by: Szyler <Szyler@Szyler.com>
2024-03-03 11:23:13 -07:00

279 lines
9.5 KiB
Lua

local mod = DBM:NewMod("ZulJin", "DBM-ZulAman")
local L = mod:GetLocalizedStrings()
mod:SetRevision(("$Revision: 5015 $"):sub(12, -3))
mod:SetCreatureID(23863)
mod:RegisterCombat("combat")
mod:RegisterEvents(
"SPELL_AURA_APPLIED",
"SPELL_CAST_SUCCESS",
"SPELL_CAST_START",
"SPELL_DAMAGE",
"UNIT_DIED",
"UNIT_AURA",
"CHAT_MSG_MONSTER_YELL"
)
local warnThrow = mod:NewTargetAnnounce(43093, 3)
local warnClaw = mod:NewTargetAnnounce(2136377, 3) --2136377, 2136378, 2136379, 2136380, 2136381
local warnFlame = mod:NewSpellAnnounce(2135908, 3) --2135908, 2135909, 2135910, 2135911, 2135912
local warnPhase1 = mod:NewPhaseAnnounce(1)
local warnPhase2 = mod:NewPhaseAnnounce(2)
local warnPhase3 = mod:NewPhaseAnnounce(3)
local warnPhase4 = mod:NewPhaseAnnounce(4)
local warnPhaseBerserk = mod:NewPhaseAnnounce(5) --2136318, 2136319
local warnPhaseEagle = mod:NewSpecialWarningSpell(2136336) --2136336, Shape of the Bear, ASC D0 T5
local timerNextTurbulentWinds = mod:NewNextTimer(15, 2136342) --2136342, 2136343, 2136344, 2136345, 2136346
local timerCastTurbulentWinds = mod:NewCastTimer(5, 2136343) --2136342, 2136343, 2136344, 2136345, 2136346
local timerNextLightningWall = mod:NewNextTimer(10, 2136349) --2136348, 2136349, 2136350, 2136351, 2136352
local timerNextStorm = mod:NewNextTimer(50, 2136429) --2136429, 2136430, 2136431, 2136432, 2136433, 2136434
local timerStorm = mod:NewCastTimer(10, 2136429) --2136429, 2136430, 2136431, 2136432, 2136433, 2136434
local nextLightningStrike = mod:NewNextTimer(10, 2136429)
local specWarnTurbulentWinds = mod:NewSpecialWarningYou(2136342)
local warnTurbulentWindsTarget = mod:NewTargetAnnounce(2136342, 4)
local warnStorm = mod:NewTargetAnnounce(2135724, 4)
local specWarnStorm = mod:NewSpecialWarningSpell(2135724)
local timerNextBladestorm = mod:NewNextTimer(45, 2136315)
local timerBladestorm = mod:NewCastTimer(15, 2136315)
local warnPhaseBear = mod:NewSpecialWarningSpell(2136337) --2136337, Shape of the Eagle, ASC D0 T5
local timerNextDeafeningRoar = mod:NewNextTimer(15, 2135829) --2135829, 2135830, 2135831, 2135832
local timerNextStampede = mod:NewNextTimer(10, 2136332) --2136332, 2136333, 2136334, 2136335
local warnPhaseDragonhawk = mod:NewSpecialWarningSpell(2136357) --2136357, Shape of the Dragonhawk, ASC D0 T5
local timerNextScorchingBreath = mod:NewNextTimer(26, 2136358) --2136358, 2136359, 2136360, 2136361, 2136362
local timerNextArmageddon = mod:NewNextTimer(23, 2136372) --2136372, 2136373, 2136374, 2136375
local specWarnBomb = mod:NewSpecialWarningSpell(2136404) --2136402, 2136403, 2136404, 2136405, 2136406, 2136407
local timerNextBomb = mod:NewNextTimer(37, 2136404) --2136402, 2136403, 2136404, 2136405, 2136406, 2136407
local timerBombCast = mod:NewCastTimer(7, 2136402) --2136402, 2136403, 2136404, 2136405, 2136406, 2136407
local timerNextFlameWhirl = mod:NewNextTimer(50, 2135908)
local timerFlameWhirlCast = mod:NewCastTimer(6, 2135908)
local warnPhaseLynx = mod:NewSpecialWarningSpell(2136376) --2136376, Shape of the Lynx, ASC D0 T5
local timerNextLynxRush = mod:NewNextTimer(24, 2136382) --2136382, 2136383, 2136384, 2136385
local specWarnSpiritLink = mod:NewSpecialWarningRun(2136414) --2136413, 2136414, 2136415, 2136416, 2136417
local timerNextGrievous = mod:NewNextTimer(10, 2136300) --2136301, 2136302, 2136303
local timerNextWhirlwind = mod:NewNextTimer(45, 2136316) --2136316, Whirlwind
local timerNextImpale = mod:NewNextTimer(45, 2136304) --2136304, 2136305, 2136306, 2136307, 2136308, 2136309
local timerNextScentOfCorruption = mod:NewNextTimer(35, 2136464) -- 2136464, 2136465, Scent of Corruption
local specWarnBloodScythe = mod:NewSpecialWarningYou(2136461)
local warnBloodScythe = mod:NewTargetAnnounce(2136461, 4)
mod.vb.phase = 1
local eosSpam = 0
function mod:PhaseIncrease()
if self.vb.phase == 2 then
warnPhase2:Show()
elseif self.vb.phase == 3 then
warnPhase3:Show()
elseif self.vb.phase == 4 then
warnPhase4:Show()
end
end
function mod:WallMechanic(wallType)
if wallType == "Bear" then
timerNextStampede:Start()
self:ScheduleMethod(10, "WallMechanic", "Bear")
elseif wallType == "Lightning" then
timerNextLightningWall:Start()
self:ScheduleMethod(10, "WallMechanic", "Lightning")
end
end
function mod:LightningStrike()
self:UnscheduleMethod("LightningStrike")
nextLightningStrike:Start()
self:ScheduleMethod(10,"LightningStrike")
end
function mod:BloodScythe()
local target = nil
local myName = UnitName("player")
target = mod:GetBossTarget(14982)
if target == myName then
specWarnBloodScythe:Show()
SendChatMessage(L.DBM_BLOOD_SCYTHE, "YELL")
else
warnBloodScythe:Show(target)
end
end
function mod:TurbulentWinds()
local target = nil
local myName = UnitName("player")
target = mod:GetBossTarget(23863) -- need to confirm ID !
if target == myName then
specWarnTurbulentWinds:Show(target)
SendChatMessage(L.DBM_TURBULENT_WINDS, "YELL")
else
warnTurbulentWindsTarget:Show(target)
end
end
function mod:OnCombatStart(delay)
self.vb.phase = 1
timerNextGrievous:Start(5)
timerNextImpale:Start(12)
end
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(2136301) then
warnThrow:Show(args.destName)
elseif args:IsSpellID(2136301, 2136302, 2136303) then
timerNextGrievous:Start()
elseif args:IsSpellID(2136378, 2136379, 2136380, 2136381) then
warnClaw:Show(args.destName)
--elseif args:IsSpellID(2135909) then
-- warnFlame:Show()
elseif args:IsSpellID(2136318, 2136319) then
warnPhaseBerserk:Show()
self.vb.phase = 5
timerNextGrievous:Start(7)
timerNextImpale:Start(15)
timerNextWhirlwind:Start(33)
elseif args:IsSpellID(2136436, 2136196) then --Phase 6-7-8-9
if args.sourceName == "Akil'zon" then
self.vb.phase = self.vb.phase + 1
self:PhaseIncrease()
warnPhaseEagle:Show()
nextLightningStrike:Start(21)
self:ScheduleMethod(21,"LightningStrike")
timerNextStorm:Start(5)
elseif args.sourceName == "Nalorakk" then
self.vb.phase = self.vb.phase + 1
self:PhaseIncrease()
warnPhaseBear:Show()
elseif args.sourceName == "Jan'alai" then
self.vb.phase = self.vb.phase + 1
self:PhaseIncrease()
warnPhaseDragonhawk:Show()
timerNextBomb:Start(7)
timerNextScorchingBreath:Start(22)
elseif args.sourceName == "Halazzi" then
self.vb.phase = self.vb.phase + 1
self:PhaseIncrease()
warnPhaseLynx:Show()
end
elseif args:IsSpellID(2136315) then
timerBladestorm:Start()
timerNextImpale:Start(27)
timerNextBladestorm:Start()
end
end
function mod:SPELL_CAST_SUCCESS(args)
if args:IsSpellID(2136336) then --Phase 2-3-4-5
warnPhaseEagle:Show()
timerNextTurbulentWinds:Start()
self:ScheduleMethod(10, "WallMechanic", "Lightning")
self:PhaseIncrease()
timerNextImpale:Cancel()
timerNextWhirlwind:Cancel()
timerNextScentOfCorruption:Cancel()
elseif args:IsSpellID(2136337) then --Phase 2-3-4-5
warnPhaseBear:Show()
timerNextDeafeningRoar:Start(8)
timerNextStampede:Start()
self:ScheduleMethod(10, "WallMechanic", "Bear")
self:PhaseIncrease()
timerNextImpale:Cancel()
timerNextWhirlwind:Cancel()
timerNextScentOfCorruption:Cancel()
elseif args:IsSpellID(2136357) then --Phase 2-3-4-5
warnPhaseDragonhawk:Show()
timerNextScorchingBreath:Start()
timerNextArmageddon:Start()
timerNextFlameWhirl:Start(1.5)
self:PhaseIncrease()
timerNextImpale:Cancel()
timerNextWhirlwind:Cancel()
timerNextScentOfCorruption:Cancel()
elseif args:IsSpellID(2136376) then --Phase 2-3-4-5
warnPhaseLynx:Show()
self:PhaseIncrease()
timerNextLynxRush:Start()
timerNextWhirlwind:Cancel()
timerNextScentOfCorruption:Cancel()
elseif args:IsSpellID(2136315) then
timerNextImpale:Cancel()
elseif args:IsSpellID(2136402) then
timerBombCast:Start()
specWarnBomb:Show()
elseif args:IsSpellID(2136363) then
timerFlameWhirlCast:Start()
timerNextFlameWhirl:Start() -- timer is probably wrong
elseif args:IsSpellID(2136304,2136305,2136306,2136307) then
timerNextImpale:Start(45)
timerNextWhirlwind:Start(18)
if mod:IsDifficulty("heroic10", "heroic25") then
timerNextScentOfCorruption:Start(20)
end
end
end
function mod:SPELL_CAST_START(args)
if args:IsSpellID(2136342) then
timerNextTurbulentWinds:Start()
timerCastTurbulentWinds:Start()
self:ScheduleMethod(0.2, "TurbulentWinds")
elseif args:IsSpellID(2136461) then
self:ScheduleMethod(0.2, "BloodScythe")
end
end
function mod:SPELL_DAMAGE(args)
if args:IsSpellID(2135829, 2135830, 2135831, 2135832) and DBM:AntiSpam() then
timerNextDeafeningRoar:Start()
elseif args:IsSpellID(2136414, 2136415, 2136416, 2136417) and args:IsPlayer() and DBM:AntiSpam(1) then --2136413, 2136414, 2136415, 2136416, 2136417
specWarnSpiritLink:Show()
end
end
-- function mod:UNIT_AURA(unit) -- triggers from Akilzon (same code)
-- local Name = UnitName(unit)
-- if (UnitDebuff(unit, "Eye of the storm")) and (GetTime() - eosSpam) > 15 then
-- eosSpam = GetTime()
-- timerStorm:Start()
-- warnStorm:Show(Name)
-- specWarnStorm:Show()
-- -- timerNextStorm:Start()
-- if Name == UnitName("player") then
-- SendChatMessage(L.DBM_EOS_PLAYER, "YELL")
-- end
-- end
-- end
function mod:OnCombatEnd()
if self.Options.RangeFrame then
DBM.RangeCheck:Hide()
end
self:UnscheduleMethod("LightningStrike")
end
function mod:UNIT_DIED(args)
if args.destName == "Akil'zon" then
self.vb.phase = self.vb.phase + 1
elseif args.destName == "Nalorakk" then
self.vb.phase = self.vb.phase + 1
elseif args.destName == "Jan'alai" then
self.vb.phase = self.vb.phase + 1
elseif args.destName == "Halazzi" then
self.vb.phase = self.vb.phase + 1
else
return
end
end