Files
coa-dbm/DBM-Naxx/MilitaryQuarter/Horsemen.lua
T
2023-11-25 17:31:26 -07:00

172 lines
5.5 KiB
Lua

local mod = DBM:NewMod("Horsemen", "DBM-Naxx", 4)
local L = mod:GetLocalizedStrings()
mod:SetRevision(("$Revision: 2248 $"):sub(12, -3))
mod:SetCreatureID(16063, 16064, 16065, 30549)
mod:RegisterCombat("combat", 16063, 16064, 16065, 30549)
mod:EnableModel()
mod:RegisterEvents(
"SPELL_CAST_SUCCESS",
"SPELL_CAST_START",
"SPELL_AURA_APPLIED",
"SPELL_AURA_APPLIED_DOSE",
"PLAYER_ALIVE",
"UNIT_DIED"
)
-----MARKS-----
local warnMarkSoon = mod:NewAnnounce("WarningMarkSoon", 1, 28835, false)
local warnMarkNow = mod:NewAnnounce("WarningMarkNow", 2, 28835)
local specWarnMarkOnPlayer = mod:NewSpecialWarning("SpecialWarningMarkOnPlayer", nil, false, true)
local specWarnHolyWrathYou = mod:NewSpecialWarningYou(2124141,2)
local warnHolyWrath = mod:NewTargetAnnounce(2124141,2)
local specWarnDeepChillYou = mod:NewSpecialWarningYou(2124167,2)
local warnDeepChill = mod:NewTargetAnnounce(2124167,2)
local specWarnMeteorYou = mod:NewSpecialWarningYou(2124128,2)
local warnMeteor = mod:NewTargetAnnounce(2124128,2)
local specWarnFamineYou = mod:NewSpecialWarningYou(2124166,2)
local warnFamine = mod:NewTargetAnnounce(2124166,2)
----timers----
local timerMark = mod:NewTimer(12, "Mark of the Apocalypse", 2124107)
local timerHolyWrath = mod:NewTargetTimer(3.8, 2124141)
local timerNextHolyWrath = mod:NewNextTimer(20, 2124141)
local timerDeepChill = mod:NewTargetTimer(3.8, 2124167)
local timerNextDeepChill = mod:NewNextTimer(20, 2124167)
local timerMeteor = mod:NewTargetTimer(7.8, 2124128)
local timerNextMeteor = mod:NewNextTimer(20, 2124128)
local timerFamine = mod:NewTargetTimer(3.8, 2124166)
local timerNextFamine = mod:NewNextTimer(20, 2124166)
-----MISC-----
local berserkTimer = mod:NewBerserkTimer(606)
local meteorTarget = nil
mod:AddBoolOption("HealthFrame", true)
mod:SetBossHealthInfo(
16064, L.Korthazz,
30549, L.Rivendare,
16065, L.Blaumeux,
16063, L.Zeliek
)
local markCounter = 0
-----BOSS FUNCTIONS-----
function mod:OnCombatStart(delay)
berserkTimer:Start()
timerMark:Start(18-delay)
timerNextMeteor:Start(21-delay)
timerNextDeepChill:Start(11-delay)
timerNextHolyWrath:Start(25-delay)
timerNextFamine:Start(16-delay)
markCounter = 0
end
function mod:Meteor()
local myName = UnitName("player")
if meteorTarget == myName then
specWarnMeteorYou:Show()
SendChatMessage("Meteor on "..UnitName("PLAYER").."!", "Say")
else
warnMeteor:Show(meteorTarget)
end
timerMeteor:Start(meteorTarget)
timerNextMeteor:Start()
self:SetIcon(meteorTarget, 7, 8)
end
function mod:DeepChill()
local targetDC = mod:GetBossTarget(30549) or mod:GetBossTarget(26622)
if targetDC == UnitName("player") then
specWarnDeepChillYou:Show()
SendChatMessage("Deep Chill on "..UnitName("PLAYER").."!", "Say")
else
warnDeepChill:Show(targetDC)
end
timerDeepChill:Start(targetDC)
timerNextDeepChill:Start()
self:SetIcon(targetDC, 6, 4)
end
function mod:HolyWrath()
local targetHW = mod:GetBossTarget(16063) or mod:GetBossTarget(26624)
if targetHW == UnitName("player") then
specWarnHolyWrathYou:Show()
SendChatMessage("Holy Wrath on "..UnitName("PLAYER").."!", "Say")
else
warnHolyWrath:Show(targetHW)
end
timerHolyWrath:Start(targetHW)
timerNextHolyWrath:Start()
self:SetIcon(targetHW, 1, 4)
end
function mod:Famine()
local famineTarget = mod:GetBossTarget(16065) or mod:GetBossTarget(26625) --Finds target of boss (if exsists) otherwise, find target of shade (if exists)
if famineTarget == UnitName("player") then --if target == player
specWarnFamineYou:Show()
SendChatMessage("Field of Famine on "..UnitName("PLAYER").."!", "Say")
else
warnFamine:Show(famineTarget)
end
timerFamine:Start(famineTarget) --we want timers to start even if player is the target, you had the timers only in the "if not player".
timerNextFamine:Start()
self:SetIcon(famineTarget, 3, 4)
end
local markSpam = 0
function mod:SPELL_CAST_SUCCESS(args)
if args:IsSpellID(2124103,2124107,2124111,2124115) and (GetTime() - markSpam) > 5 then
markSpam = GetTime()
markCounter = markCounter + 1
end
end
function mod:SPELL_CAST_START(args)
if args:IsSpellID(2124141) then
self:ScheduleMethod(0.25, "HolyWrath")
end
if args:IsSpellID(2124167) then
self:ScheduleMethod(0.25, "DeepChill")
end
if args:IsSpellID(2124166) then
self:ScheduleMethod(0.25, "Famine")
end
end
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(2124128) then
self:ScheduleMethod(0.25, "Meteor")
meteorTarget = args.destName
elseif args:IsSpellID(2124103, 2124104, 2124105, 2124106) or args:IsSpellID(2124107, 2124108, 2124109, 2124110) or args:IsSpellID(2124111, 2124112, 2124113, 2124114) or args:IsSpellID(2124115, 2124116, 2124117, 2124118) then
timerMark:Start()
end
end
function mod:SPELL_AURA_APPLIED_DOSE(args)
if args:IsSpellID(2124103,2124107,2124111,2124115) and args:IsPlayer() then
if args.amount >= 3 then
specWarnMarkOnPlayer:Show(args.spellName, args.amount)
end
elseif args:IsSpellID(2124103, 2124104, 2124105, 2124106) or args:IsSpellID(2124107, 2124108, 2124109, 2124110) or args:IsSpellID(2124111, 2124112, 2124113, 2124114) or args:IsSpellID(2124115, 2124116, 2124117, 2124118) then
timerMark:Start()
end
end
function mod:UNIT_DIED(args)
local cid = self:GetCIDFromGUID(args.destGUID)
if cid == 16063 or 26624 then
timerNextHolyWrath:Stop()
end
if cid == 16064 or 26623 then
timerNextMeteor:Stop()
end
if cid == 16065 or 26625 then
timerNextFamine:Stop()
end
if cid == 30549 or 26622 then
timerNextDeepChill:Stop()
end
if cid >= 26622 and cid <= 26625 then
timerMark:Stop()
end
end