172 lines
5.5 KiB
Lua
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
|