Files
coa-dbm/DBM-ZulAman/Akil'zon.lua
T
Szyler 5b3b160e21 5.16 update (#1)
Co-authored-by: Szyler <Szyler@Szyler.com>
2022-12-01 14:16:16 -07:00

154 lines
4.4 KiB
Lua

local mod = DBM:NewMod("Akilzon", "DBM-ZulAman")
local L = mod:GetLocalizedStrings()
mod:SetRevision(("$Revision: 5015 $"):sub(12, -3))
mod:SetCreatureID(23574)
mod:RegisterCombat("combat")
mod:RegisterEvents(
"SPELL_AURA_APPLIED",
"SPELL_CAST_START",
"UNIT_AURA",
"UNIT_HEALTH"
)
local warnVortexSoon = mod:NewSoonAnnounce(2135733, 5, 3)
local timerNextStorm = mod:NewNextTimer(50, 2135724)
local timerStorm = mod:NewCastTimer(10, 2135724)
local nextLightningStrike = mod:NewNextTimer(10, 2135702)
local timerNextVortex = mod:NewNextTimer(10, 2135733)
local timerNextRod = mod:NewNextTimer(20, 2135700)
local timerNextTurbulentWinds = mod:NewNextTimer(3, 2135710)
local timerCastTurbulentWinds = mod:NewCastTimer(5, 2135710)
local specWarnTurbulentWinds = mod:NewSpecialWarningYou(2135710)
local warnTurbulentWindsTarget = mod:NewTargetAnnounce(2135710, 4)
local warnStorm = mod:NewTargetAnnounce(2135724, 4)
local specWarnStorm = mod:NewSpecialWarningSpell(2135724)
local specWarnRodYou = mod:NewSpecialWarningYou(2135700)
local specWarnRod = mod:NewSpecialWarningTarget(2135700, false)
local warnTalon = mod:NewTargetAnnounce(2135747)
local warnTalonStacks = mod:NewSpecialWarningStack(2135747)
local berserkTimer = mod:NewBerserkTimer(600)
local eosSpam = 0
mod:SetUsedIcons(1)
mod:AddBoolOption(L.RodYellOpt)
mod:AddBoolOption("RangeFrame", true)
mod:AddBoolOption("StormIcon")
local platform1, platform2, platform3, platform4 = true , true , true , true
function mod:LightningStrike()
self:UnscheduleMethod("LightningStrike")
nextLightningStrike:Start()
self:ScheduleMethod(10,"LightningStrike")
end
function mod:TurbulentWinds()
local target = nil
target = mod:GetBossTarget(23574)
if target == UnitName("player") then
specWarnTurbulentWinds:Show(target)
SendChatMessage(L.DBM_TURBULENT_WINDS, "YELL")
else
warnTurbulentWindsTarget:Show(target)
end
end
function mod:OnCombatStart(delay)
berserkTimer:Start(-delay)
timerNextStorm:Start(40)
nextLightningStrike:Start(6.5)
timerNextRod:Start(13)
self:ScheduleMethod(6.5,"LightningStrike")
if self.Options.RangeFrame then
DBM.RangeCheck:Show()
end
self.vb.phase = 1
end
function mod:OnCombatEnd()
if self.Options.RangeFrame then
DBM.RangeCheck:Hide()
end
self:UnscheduleMethod("LightningStrike")
end
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(2135700) then
timerNextRod:Start()
specWarnRod:Show(args.destName)
if args:IsPlayer() then
specWarnRodYou:Show()
if self.Options.RodYellOpt and args:IsPlayer() then
SendChatMessage(L.DBM_ROD_PLAYER, "YELL")
end
end
elseif args:IsSpellID(2135747, 2135748, 2135749, 2135750) then
warnTalon:Show(args.destName)
if args.amount and args.amount > 5 then
warnTalonStacks:Show(args.amount,args.destName)
end
elseif args:IsSpellID(2135715) then
self:UnscheduleMethod("LightningStrike")
nextLightningStrike:Cancel()
timerNextRod:Cancel()
self.vb.phase = 2
timerNextTurbulentWinds:Start()
timerNextStorm:Cancel()
end
end
function mod:SPELL_CAST_START(args)
if args:IsSpellID(2135710) then
timerCastTurbulentWinds:Start()
self:ScheduleMethod(0.2, "TurbulentWinds")
end
end
function mod:UNIT_HEALTH(unit)
if (self.vb.phase == 2) and (mod:GetUnitCreatureId(unit) == 23574) then
local hp = (math.max(0,UnitHealth(unit)) / math.max(1, UnitHealthMax(unit))) * 100;
if (hp>60 and hp<=65) and platform1 then
warnVortexSoon:Show()
platform1 = false
timerNextTurbulentWinds:Start(6)
elseif (hp>50 and hp<=55) and platform2 then
warnVortexSoon:Show()
platform2 = false
timerNextTurbulentWinds:Start(6)
elseif (hp>40 and hp<=45) and platform3 then
warnVortexSoon:Show()
platform3 = false
timerNextTurbulentWinds:Start(6)
elseif (hp>30 and hp<=35) and platform4 then
warnVortexSoon:Show()
platform4 = false
timerNextTurbulentWinds:Start(6)
elseif (hp<=30) then
self.vb.phase = 3
timerNextVortex:Start()
nextLightningStrike:Start(21)
self:ScheduleMethod(21, "LightningStrike")
timerNextRod:Start(28)
timerNextStorm:Start(55)
end
end
end
function mod:UNIT_AURA(unit)
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