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", "CHAT_MSG_RAID_BOSS_EMOTE", "UNIT_AURA", "PLAYER_ALIVE" ) -----POLARITY SHIFT----- local timerShiftCast = mod:NewCastTimer(3, 28089) local timerNextShift = mod:NewNextTimer(30, 28089) local warnShiftCasting = mod:NewCastAnnounce(28089, 3) -----THROW----- local warnThrow = mod:NewSpellAnnounce(28338, 2) local warnThrowSoon = mod:NewSoonAnnounce(28338, 1) local timerThrow = mod:NewNextTimer(20.6, 28338) -----MISC----- local warnChargeChanged = mod:NewSpecialWarning("WarningChargeChanged") local warnChargeNotChanged = mod:NewSpecialWarning("WarningChargeNotChanged", false) local enrageTimer = mod:NewBerserkTimer(365) mod:AddBoolOption("ArrowsEnabled", false, "Arrows") mod:AddBoolOption("ArrowsRightLeft", false, "Arrows") mod:AddBoolOption("ArrowsInverse", false, "Arrows") mod:AddBoolOption("HealthFrame", true) mod:SetBossHealthInfo( 15930, L.Boss1, 15929, L.Boss2 ) local currentCharge local phase2 local down = 0 -----BOSS FUNCTIONS----- function mod:OnCombatStart(delay) phase2 = false self.vb.phase = 1 currentCharge = nil down = 0 self:ScheduleMethod(20.6 - delay, "TankThrow") timerThrow:Start(-delay) warnThrowSoon:Schedule(17.6 - delay) end local lastShift = 0 function mod:SPELL_CAST_START(args) if args:IsSpellID(28089) then phase2 = true self.vb.phase = 2 timerNextShift:Start() timerShiftCast:Start() warnShiftCasting:Show() lastShift = GetTime() end end 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 function mod:CHAT_MSG_RAID_BOSS_EMOTE(msg) if msg == L.Emote or msg == L.Emote2 then down = down + 1 if down >= 2 then self:UnscheduleMethod("TankThrow") timerThrow:Cancel() warnThrowSoon:Cancel() DBM.BossHealth:Hide() enrageTimer:Start() end end 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 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