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

311 lines
8.6 KiB
Lua

local mod = DBM:NewMod("Thaddius", "DBM-Naxx", 2)
local L = mod:GetLocalizedStrings()
mod:SetRevision(("$Revision: 2869 $"):sub(12, -3))
mod:SetCreatureID(15928)
mod:RegisterCombat("yell", L.Yell)
mod:EnableModel()
mod:RegisterEvents(
"SPELL_CAST_START",
"SPELL_CAST_SUCCESS",
"CHAT_MSG_RAID_BOSS_EMOTE",
"UNIT_AURA",
"PLAYER_ALIVE",
"SPELL_AURA_APPLIED",
"SPELL_AURA_REMOVED",
"UNIT_DIED"
)
-----POLARITY SHIFT-----
local timerShiftCast = mod:NewCastTimer(4, 2124201)
local timerNextShift = mod:NewNextTimer(34, 2124201)
local warnShiftCasting = mod:NewCastAnnounce(2124201, 2)
local specWarnNegative = mod:NewSpecialWarningMove(2124203, 2)
local specWarnPositive = mod:NewSpecialWarningMove(2124202, 2)
local warnMagnetic = mod:NewAnnounce("Magnetic Reversal", 2, 2124245, nil, "Show warning for Magnetic Reversal")
local timerMagnetic = mod:NewTimer(16, "Magnetic Reversal duration", 2124245)
local warnTankOvercharged = mod:NewTargetAnnounce(2124222, 2)
local specWarnTankOvercharged = mod:NewSpecialWarningYou(2124222, 2)
-----THROW-----
local warnThrow = mod:NewSpellAnnounce(2124244, 2)
local warnThrowSoon = mod:NewSoonAnnounce(2124244, 2)
local timerThrow = mod:NewNextTimer(20.6, 2124244)
-----MISC-----
local enrageTimer = mod:NewBerserkTimer(365)
mod:AddBoolOption("HealthFrame", true)
mod:SetBossHealthInfo(
15930, L.Boss1,
15929, L.Boss2
)
local currentCharge
local phase2
local i = 7
-- Polarity shift (2124201)
-- Overcharged (2124222)
-- Magnetic Reversal (2124245)
--TEST REALM--
local negativePolarity = CreateFrame("Frame", nil, UIParent)
negativePolarity:Hide()
local negativeTexture = negativePolarity:CreateTexture(nil, "BACKGROUND")
negativeTexture:SetTexture("Interface\\Icons\\Spell_ChargeNegative")
negativeTexture:SetPoint("CENTER", negativePolarity, "CENTER")
negativePolarity:SetHeight(0.8)
negativePolarity:SetWidth(0.8)
negativePolarity:SetPoint("CENTER", UIParent, "CENTER", 0, 445)
local positivePolarity = CreateFrame("Frame", nil, UIParent)
positivePolarity:Hide()
local positiveTexture = positivePolarity:CreateTexture(nil, "BACKGROUND")
positiveTexture:SetTexture("Interface\\Icons\\Spell_ChargePositive")
positiveTexture:SetPoint("CENTER", positivePolarity, "CENTER")
positivePolarity:SetHeight(0.8)
positivePolarity:SetWidth(0.8)
positivePolarity:SetPoint("CENTER", UIParent, "CENTER", 0, 445)
-- Polarity Positive (2124202)
-- Polarity Negative (2124203)
-----BOSS FUNCTIONS-----
function mod:OnCombatStart(delay)
phase2 = false
self.vb.phase = 1
currentCharge = 0
i = 7
down = 0
self:ScheduleMethod(20.6 - delay, "TankThrow")
timerThrow:Start(-delay)
warnThrowSoon:Schedule(17.6 - delay)
end
function mod:TankThrow()
if not self:IsInCombat() or phase2 then
DBM.BossHealth:Hide()
return
end
timerThrow:Start()
warnThrowSoon:Schedule(17.6)
self:ScheduleMethod(20.6, "TankThrow")
end
function mod:SPELL_CAST_START(args)
if args:IsSpellID(2124201) then
phase2 = true
self.vb.phase = 2
self:ScheduleMethod(0, "ShiftingPolarity")
end
end
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(2124245) and DBM:AntiSpam(2, 6) then
if args:IsPlayer() then
SendChatMessage("Magnetic Reversal on "..UnitName("PLAYER").."!", "Say")
end
warnMagnetic:Show(args.destName)
timerMagnetic:Start()
mod:SetIcon(args.destName, i, 15)
i = i-1
elseif args:IsSpellID(2124222) then
local tanktarget = args.destName
if args:IsPlayer() then
specWarnTankOvercharged:Show()
else
warnTankOvercharged:Show(tanktarget)
end
mod:SetIcon(tanktarget, 8, 15)
end
end
function mod:SPELL_AURA_REMOVED(args)
if args:IsSpellID(2124245) then
i = 7
end
end
function mod:CHAT_MSG_RAID_BOSS_EMOTE(msg)
if msg == L.Emote or msg == L.Emote2 then
self:UnscheduleMethod("TankThrow")
timerThrow:Cancel()
warnThrowSoon:Cancel()
DBM.BossHealth:Hide()
enrageTimer:Start()
end
end
function mod:UNIT_AURA(unit)
if UnitDebuff("Player","Polarity: Negative") then
if currentCharge == 1 or currentCharge == 0 then
specWarnNegative:Show()
end
currentCharge = 2
negativePolarity:Show()
positivePolarity:Hide()
elseif UnitDebuff("Player","Polarity: Positive") then
if currentCharge == 2 or currentCharge == 0 then
specWarnPositive:Show()
end
currentCharge = 1
negativePolarity:Hide()
positivePolarity:Show()
end
end
function mod:ShiftingPolarity()
timerNextShift:Start()
timerShiftCast:Start()
warnShiftCasting:Show()
self:ScheduleMethod(34,"ShiftingPolarity")
end
function mod:UNIT_DIED(args)
local cid = self:GetCIDFromGUID(args.destGUID)
if cid == 15928 or cid == 26629 then
positivePolarity:Hide()
negativePolarity:Hide()
timerShiftCast:Stop()
timerMagnetic:Stop()
self:UnscheduleMethod("ShiftingPolarity")
end
end
function mod:OnCombatEnd()
negativePolarity:Hide()
positivePolarity:Hide()
self:UnscheduleMethod("ShiftingPolarity")
end
--local function PolarityOnShow(self)
-- self.elapsed = 0
-- self:SetAlpha(1)
--end
--function mod:ShowNegativePolarity()
-- negativePolarity:Show()
--end
--function mod:ShowPositivePolarity()
-- positivePolarity:Show()
--end
-----------------------CURRENTLY DEPRECATED-----------------------
--mod:AddBoolOption("ArrowsEnabled", false, "Arrows")
--mod:AddBoolOption("ArrowsRightLeft", false, "Arrows")
--mod:AddBoolOption("ArrowsInverse", false, "Arrows")
--function mod:UNIT_AURA(elapsed)
-- if not phase2 then return end
-- local charge
-- local i = 1
-- while UnitDebuff("player", i) do
-- local _, _, icon, count = UnitDebuff("player", i)
-- if icon == "Interface\\Icons\\Spell_ChargeNegative" then
-- if count > 1 then return end
-- charge = L.Charge1
-- elseif icon == "Interface\\Icons\\Spell_ChargePositive" then
-- if count > 1 then return end
-- charge = L.Charge2
-- end
-- i = i + 1
-- end
-- if charge then
-- lastShift = 0
-- if charge == currentCharge then
-- warnChargeNotChanged:Show()
-- if self.Options.ArrowsEnabled and self.Options.ArrowsRightLeft then
-- if self.Options.ArrowsInverse then
-- self:ShowLeftArrow()
-- else
-- self:ShowRightArrow()
-- end
-- end
-- else
-- warnChargeChanged:Show(charge)
-- if self.Options.ArrowsEnabled then
-- if self.Options.ArrowsRightLeft and self.Options.ArrowsInverse then
-- self:ShowRightArrow()
-- elseif self.Options.ArrowsRightLeft then
-- self:ShowLeftArrow()
-- elseif currentCharge then
-- self:ShowUpArrow()
-- end
-- end
-- end
-- currentCharge = charge
-- end
--end
--local function arrowOnUpdate(self, elapsed)
-- self.elapsed = (self.elapsed or 0) + elapsed
-- if self.elapsed >= 3.5 and self.elapsed < 4.5 then
-- self:SetAlpha(4.5 - self.elapsed)
-- elseif self.elapsed >= 4.5 then
-- self:Hide()
-- end
--end
--local function arrowOnShow(self)
-- self.elapsed = 0
-- self:SetAlpha(1)
--end
-- this file uses the texture Textures/arrow.tga. This image was created by Everaldo Coelho and is licensed under the GNU Lesser General Public License. See Textures/lgpl.txt.
--local arrowLeft = CreateFrame("Frame", nil, UIParent)
--arrowLeft:Hide()
--local arrowLeftTexture = arrowLeft:CreateTexture(nil, "BACKGROUND")
--arrowLeftTexture:SetTexture("Interface\\AddOns\\DBM-Naxx\\ConstructQuarter\\Textures\\arrow")
--arrowLeftTexture:SetPoint("CENTER", arrowLeft, "CENTER")
--arrowLeft:SetHeight(1)
--arrowLeft:SetWidth(1)
--arrowLeft:SetPoint("CENTER", UIParent, "CENTER", -150, -30)
--arrowLeft:SetScript("OnShow", arrowOnShow)
--arrowLeft:SetScript("OnUpdate", arrowOnUpdate)
--local arrowRight = CreateFrame("Frame", nil, UIParent)
--arrowRight:Hide()
--local arrowRightTexture = arrowRight:CreateTexture(nil, "BACKGROUND")
--arrowRightTexture:SetTexture("Interface\\AddOns\\DBM-Naxx\\ConstructQuarter\\Textures\\arrow")
--arrowRightTexture:SetPoint("CENTER", arrowRight, "CENTER")
----arrowRightTexture:SetTexCoord(1, 0, 0, 1)
--arrowRight:SetHeight(1)
--arrowRight:SetWidth(1)
--arrowRight:SetPoint("CENTER", UIParent, "CENTER", 150, -30)
--arrowRight:SetScript("OnShow", arrowOnShow)
--arrowRight:SetScript("OnUpdate", arrowOnUpdate)
--local arrowUp = CreateFrame("Frame", nil, UIParent)
--arrowUp:Hide()
--local arrowUpTexture = arrowUp:CreateTexture(nil, "BACKGROUND")
--arrowUpTexture:SetTexture("Interface\\AddOns\\DBM-Naxx\\ConstructQuarter\\Textures\\arrow")
--arrowUpTexture:SetRotation(math.pi * 3 / 2)
--arrowUpTexture:SetPoint("CENTER", arrowUp, "CENTER")
--arrowUp:SetHeight(1)
--arrowUp:SetWidth(1)
--arrowUp:SetPoint("CENTER", UIParent, "CENTER", 0, 40)
--arrowUp:SetScript("OnShow", arrowOnShow)
--arrowUp:SetScript("OnUpdate", arrowOnUpdate)
--function mod:ShowRightArrow()
-- arrowRight:Show()
--end
--function mod:ShowLeftArrow()
-- arrowLeft:Show()
--end
--
--function mod:ShowUpArrow()
-- arrowUp:Show()
--end