Files
Szyler dc8afd6584 5.19b (#4)
Co-authored-by: Szyler <Szyler@Szyler.com>
2024-03-03 11:23:13 -07:00

210 lines
6.8 KiB
Lua

-- Kazzak:RegisterEvents(
-- "SPELL_AURA_APPLIED",
-- "CHAT_MSG_MONSTER_YELL",
-- "CHAT_MSG_MONSTER_EMOTE"
-- );
local mod = DBM:NewMod("Kazzak", "DBM-Outlands")
local L = mod:GetLocalizedStrings()
mod:SetRevision(("$Revision: 163 $"):sub(12, -3))
mod:SetCreatureID(18728)
mod:RegisterCombat("combat")
mod:RegisterEvents(
"CHAT_MSG_MONSTER_YELL",
"CHAT_MSG_MONSTER_EMOTE",
"SPELL_AURA_APPLIED",
"SPELL_AURA_REMOVED",
"SPELL_CAST_SUCCESS"
)
local WarnEnrageSoon = mod:NewSoonAnnounce(32964, 2)
local WarnEnrage = mod:NewSpellAnnounce(32964, 2)
local WarnThunderclap = mod:NewSpellAnnounce(36706, 3)
local WarnMark = mod:NewTargetAnnounce(32960, 3)
local WarnMarkYou = mod:NewSpecialWarningYou(32960, true)
local WarnTwisted = mod:NewTargetAnnounce(21063, 3)
local WarnTwistedYou = mod:NewSpecialWarningYou(21063, true)
-- local WarnShadowBolt = mod:NewCastAnnounce(32963, 3)
local TimerNextShadowBolt = mod:NewCDTimer(4, 32963)
local TimerNextThunderclap = mod:NewNextTimer(12, 36706)
local TimerNextMark = mod:NewNextTimer(20, 32960)
local TimerNextTwisted = mod:NewNextTimer(30, 21063)
-- local TimerShadowBoltCD = mod:NewCDTimer(20, 32963)
local TimerMark = mod:NewTargetTimer(10, 32960)
local TimerTwisted = mod:NewTargetTimer(15, 21063)
local TimerEnrage = mod:NewBerserkTimer(30, "Berserk Shadowbolt Volley", "Berserk Shadowbolt Volley", nil, 32964)
mod:SetUsedIcons(8)
mod:AddBoolOption(L.KazzakIcon)
mod:AddBoolOption(L.KazzakWhisper, false)
-- local Whisper = mod:NewAnnounce("Giant Boulder soon", 3, "Interface\\Icons\\inv_stone_10")
-- Kazzak:AddOption("EnrageWarn", true, DBM_KAZZAK_OPTION_1);
-- Kazzak:AddOption("TwistedWarn", true, DBM_KAZZAK_OPTION_2);
-- Kazzak:AddOption("MarkWarn", true, DBM_KAZZAK_OPTION_3);
-- Kazzak:AddOption("Icon", true, DBM_KAZZAK_OPTION_4);
-- Kazzak:AddOption("Whisper", false, DBM_KAZZAK_OPTION_5);
-- Kazzak:AddBarOption("Enrage")
-- Kazzak:AddBarOption("Mark of Kazzak")
function mod:EnrageRepeat()
TimerEnrage:Stop()
self:Unschedule("WarnEnrageSoon")
TimerEnrage:Start(-6)
WarnEnrageSoon:Schedule(30-6)
end
function mod:OnCombatStart(delay)
if (GetTime() - LastPull) < 20 then
delay = GetTime() - LastPull; -- use more accurate delay if possible
end
TimerEnrage:Start(60-delay)
WarnEnrageSoon:Schedule(55-delay)
TimerNextShadowBolt:Start(6)
TimerNextThunderclap:Start(16)
TimerNextMark:Start(24)
TimerNextTwisted:Start(32)
end
function mod:SPELL_CAST_SUCCESS(args)
if args:IsSpellID(32963) then
TimerNextShadowBolt:Start()
elseif args:IsSpellID(36706) then
WarnThunderclap:Show()
TimerNextThunderclap:Start()
elseif args:IsSpellID(32960) then
TimerNextMark:Start()
elseif args:IsSpellID(21063) then
TimerNextTwisted:Start()
end
end
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(21063) then
if args:IsPlayer() then
WarnTwistedYou:Show()
end
WarnTwisted:Show(args.destName)
TimerTwisted:Start(args.destName)
elseif args:IsSpellID(32960) then
-- local target = tostring(args.destName)
if args:IsPlayer() then
WarnMarkYou:Show()
else
if self.Options.KazzakWhisper and DBM:GetRaidRank() >= 1 then
SendChatMessage(L.DBM_KAZZAK_MARK_SPEC_WARN, "WHISPER", "COMMON", args.destName)
-- self:sendWhisper(target, DBM_KAZZAK_MARK_SPEC_WARN);
end
end
WarnMark:Show(args.destName)
TimerMark:Start(args.destName)
if self.Options.KazzakIcon then
self:SetIcon(args.destName, 8, 10)
end
elseif args:IsSpellID(32964) then
WarnEnrage:Show()
mod:EnrageRepeat()
-- self:ScheduleMethod(6,"EnrageRepeat");
end
end
function mod:SPELL_AURA_REMOVED(args)
if args:IsSpellID(21063) then
TimerTwisted:Stop(args.destName)
elseif args:IsSpellID(32960) then
TimerMark:Stop(args.destName)
if self.Options.KazzakIcon then
self:RemoveIcon(args.destName);
end
-- elseif args:IsSpellID(32964) then
-- WarnEnrage:Show()
-- -- self:ScheduleMethod(6,"EnrageRepeat");
end
end
function mod:CHAT_MSG_MONSTER_YELL(msg)
if arg1 == DBM_KAZZAK_YELL_PULL or arg1 == DBM_KAZZAK_YELL_PULL2 then
LastPull = GetTime();
end
end
-- function mod:CHAT_MSG_MONSTER_EMOTE(msg)
-- if arg1 == DBM_KAZZAK_EMOTE_ENRAGE and arg2 == DBM_KAZZAK_NAME then
-- mod:EnrageRepeat()
-- -- self:ScheduleMethod(6,"EnrageRepeat");
-- end
-- end
-- function Kazzak:OnCombatStart(delay) -- I don't want to use the yell for start detection because this would trigger the boss mod every time someone pulls Kazzak while you are in hellfire peninsula
-- if (GetTime() - self.LastPull) < 20 then
-- delay = GetTime() - self.LastPull; -- use more accurate delay if possible
-- end
-- local enrageTimer = 56;
-- self:StartStatusBarTimer(enrageTimer - delay, "Enrage", "Interface\\Icons\\Spell_Shadow_UnholyFrenzy"); -- ?
-- self:ScheduleSelf(enrageTimer - 45 - delay, "EnrageWarn", 45);
-- self:ScheduleSelf(enrageTimer - 30 - delay, "EnrageWarn", 30);
-- self:ScheduleSelf(enrageTimer - 15 - delay, "EnrageWarn", 15);
-- self:ScheduleSelf(enrageTimer - 5 - delay, "EnrageWarn", 5);
-- end
-- function Kazzak:OnEvent(event, arg1)
-- if event == "SPELL_AURA_APPLIED" then
-- if arg1.spellId == 21063 then
-- -- if self.Options.TwistedWarn then
-- -- self:Announce(string.format(DBM_KAZZAK_TWISTED_WARN, tostring(arg1.destName)))
-- -- end
-- elseif arg1.spellId == 32960 then
-- local target = tostring(arg1.destName)
-- if target == UnitName("player") then
-- self:AddSpecialWarning(DBM_KAZZAK_MARK_SPEC_WARN);
-- self:StartStatusBarTimer(8, "Mark of Kazzak", "Interface\\Icons\\Spell_Shadow_AntiShadow", true);
-- elseif self.Options.Whisper and target then
-- self:SendHiddenWhisper(DBM_KAZZAK_MARK_SPEC_WARN, target);
-- end
-- if target and self.Options.MarkWarn then
-- self:Announce(string.format(DBM_KAZZAK_MARK_WARN, target))
-- end
-- if target and self.Options.Icon then
-- self:SetIcon(target, 8);
-- end
-- end
-- elseif event == "CHAT_MSG_MONSTER_YELL" then
-- if arg1 == DBM_KAZZAK_YELL_PULL or arg1 == DBM_KAZZAK_YELL_PULL2 then
-- self.LastPull = GetTime();
-- end
-- elseif event == "CHAT_MSG_MONSTER_EMOTE" then
-- if arg1 == DBM_KAZZAK_EMOTE_ENRAGE and arg2 == DBM_KAZZAK_NAME then
-- if self.Options.EnrageWarn then
-- self:Announce(DBM_KAZZAK_WARN_ENRAGE);
-- end
-- self:ScheduleSelf(6, "NextEnrage");
-- end
-- elseif event == "EnrageWarn" and arg1 then
-- if self.Options.EnrageWarn then
-- if arg1 == 5 then
-- self:Announce(DBM_KAZZAK_SUP_SOON);
-- else
-- self:Announce(string.format(DBM_KAZZAK_SUP_SEC, arg1));
-- end
-- end
-- elseif event == "NextEnrage" then
-- self:StartStatusBarTimer(54, "Enrage", "Interface\\Icons\\Spell_Shadow_UnholyFrenzy");
-- self:ScheduleSelf(9, "EnrageWarn", 45);
-- self:ScheduleSelf(24, "EnrageWarn", 30);
-- self:ScheduleSelf(39, "EnrageWarn", 15);
-- self:ScheduleSelf(49, "EnrageWarn", 5);
-- end
-- end