local Metro = Metrognome:GetInstance("1")
local bboss = BabbleLib:GetInstance("Boss 1.2")
BigWigsThaddius = AceAddon:new({
name = "BigWigsThaddius",
cmd = AceChatCmd:new({}, {}),
zonename = BabbleLib:GetInstance("Zone 1.2")("Naxxramas"),
enabletrigger = { bboss("Feugen"), bboss("Stalagg"), bboss("Thaddius") },
bossname = "Thaddius and company - " .. bboss("Feugen") .. ", ".. bboss("Stalagg") .. " & ".. bboss("Thaddius"),
toggleoptions = {
notStartWarn = "Phase 1 warning",
notPowerSurge = "Power Surge warning from Stalagg",
notStartWarn2 = "Phase 2 warning",
notPolarityShift = "Warn for Polarity Shift",
notYouPositive = "Warn when you are a Positive Charge",
notYouNegative = "Warn when you are a Negative Charge",
notEnrageWarn = "Warn for Enrage",
notEnrageBar = "Enrage timerbar",
notEnrageSec = "Enrage x-sec warnings",
notBosskill = "Boss death",
},
optionorder = {"notStartWarn", "notPowerSurge", "notStartWarn2", "notPolarityShift", "notYouPositive", "notYouNegative", "notEnrageBar", "notEnrageSec", "notEnrageWarn", "notBosskill"},
loc = {
disabletrigger = "Thank... you...",
bosskill = "Thaddius has been defeated!",
enragetrigger = "goes into a berserker rage!",
starttrigger = "Stalagg crush you!",
starttrigger1 = "Feed you to master!",
starttrigger2 = "Eat... your... bones...",
pstrigger = "Now you feel pain...",
trigger1 = "Thaddius begins to cast Polarity Shift",
postrigger = "^([^%s]+) ([^%s]+) afflicted by Positive Charge",
negtrigger = "^([^%s]+) ([^%s]+) afflicted by Negative Charge",
stalaggtrigger = "Stalagg gains Power Surge.",
you = "You",
are = "are",
enragewarn = "Enrage!",
startwarn = "Thaddius Phase 1",
startwarn2 = "Thaddius Phase 2, Enrage in 5 minutes!",
pswarn1 = "Thaddius begins to cast Polarity Shift!",
pswarn2 = "30 seconds till next Polarity Shift!",
pswarn3 = "3 seconds before Thaddius casts Polarity Shift!",
poswarn = "You are a Positive Charge!",
negwarn = "You are a Negative Charge!",
enragebartext = "Enrage",
warn1 = "Enrage in 3 minutes",
warn2 = "Enrage in 90 seconds",
warn3 = "Enrage in 60 seconds",
warn4 = "Enrage in 30 seconds",
warn5 = "Enrage in 10 seconds",
stalaggwarn = "Power Surge",
bar1text = "PolarityShift",
},
})
function BigWigsThaddius:Initialize()
self.disabled = true
self:TriggerEvent("BIGWIGS_REGISTER_MODULE", self)
end
function BigWigsThaddius:Enable()
self.disabled = nil
self.enrageStarted = nil
self:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_CREATURE_BUFFS")
self:RegisterEvent("CHAT_MSG_MONSTER_YELL")
self:RegisterEvent("PLAYER_REGEN_ENABLED")
self:RegisterEvent("CHAT_MSG_SPELL_CREATURE_VS_CREATURE_DAMAGE")
self:RegisterEvent("CHAT_MSG_MONSTER_EMOTE")
self:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_SELF_DAMAGE", "Event")
self:RegisterEvent("BIGWIGS_SYNC_THADDIUS_POLARITY_SHIFT")
self:TriggerEvent("BIGWIGS_SYNC_THROTTLE", "THADDIUS_POLARITY_SHIFT", 10)
Metro:Register("BigWigs_Thaddius_CheckWipe", self.PLAYER_REGEN_ENABLED, 2, self)
end
function BigWigsThaddius:Disable()
self.disabled = true
self:UnregisterAllEvents()
self:TriggerEvent("BIGWIGS_BAR_CANCEL", self.loc.bar1text)
self:TriggerEvent("BIGWIGS_DELAYEDMESSAGE_CANCEL", self.loc.pswarn3)
self:TriggerEvent("BIGWIGS_BAR_DELAYEDSETCOLOR_CANCEL", self.loc.bar1text, 10)
self:TriggerEvent("BIGWIGS_BAR_DELAYEDSETCOLOR_CANCEL", self.loc.bar1text, 20)
self:StopEnrage()
Metro:Unregister("BigWigs_Thaddius_CheckWipe")
end
function BigWigsThaddius:Scan()
if (UnitName("target") == self.bossname and UnitAffectingCombat("target")) then
return true
elseif (UnitName("playertarget") == self.bossname and UnitAffectingCombat("playertarget")) then
return true
else
local i
for i = 1, GetNumRaidMembers(), 1 do
if (UnitName("raid"..i.."target") == self.bossname and UnitAffectingCombat("raid"..i.."target")) then
return true
end
end
end
return false
end
function BigWigsThaddius:CHAT_MSG_SPELL_PERIODIC_CREATURE_BUFFS()
if (not self:GetOpt("notPowerSurge") and arg1 == self.loc.stalaggtrigger) then
self:TriggerEvent("BIGWIGS_MESSAGE", self.loc.stalaggwarn, "Red")
end
end
function BigWigsThaddius:CHAT_MSG_MONSTER_YELL()
if (string.find(arg1, self.loc.pstrigger)) then
self:TriggerEvent("BIGWIGS_SYNC_SEND", "THADDIUS_POLARITY_SHIFT")
elseif arg1 == self.loc.starttrigger or arg1 == self.loc.starttrigger1 then
if not self:GetOpt("notStartWarn") then self:TriggerEvent("BIGWIGS_MESSAGE", self.loc.startwarn, "Red") end
elseif arg1 == self.loc.starttrigger2 then
if not self:GetOpt("notStartWarn2") then self:TriggerEvent("BIGWIGS_MESSAGE", self.loc.startwarn2, "Red") end
if not self:GetOpt("notEnrageBar") then
self:TriggerEvent("BIGWIGS_BAR_START", self.loc.enragebartext, 300, 2, "Green", "Interface\\Icons\\Spell_Shadow_UnholyFrenzy")
self:TriggerEvent("BIGWIGS_BAR_DELAYEDSETCOLOR", self.loc.enragebartext, 75, "Yellow")
self:TriggerEvent("BIGWIGS_BAR_DELAYEDSETCOLOR", self.loc.enragebartext, 150, "Orange")
self:TriggerEvent("BIGWIGS_BAR_DELAYEDSETCOLOR", self.loc.enragebartext, 225, "Red")
end
if not self:GetOpt("notEnrageSec") then
self:TriggerEvent("BIGWIGS_DELAYEDMESSAGE_START", self.loc.warn1, 120, "Green")
self:TriggerEvent("BIGWIGS_DELAYEDMESSAGE_START", self.loc.warn2, 210, "Yellow")
self:TriggerEvent("BIGWIGS_DELAYEDMESSAGE_START", self.loc.warn3, 240, "Orange")
self:TriggerEvent("BIGWIGS_DELAYEDMESSAGE_START", self.loc.warn4, 270, "Red")
self:TriggerEvent("BIGWIGS_DELAYEDMESSAGE_START", self.loc.warn5, 290, "Red")
end
elseif (string.find(arg1, self.loc.disabletrigger)) then
if not self:GetOpt("notBosskill") then self:TriggerEvent("BIGWIGS_MESSAGE", self.loc.bosskill, "Green", nil, "Victory") end
self:Disable()
end
end
function BigWigsThaddius:PLAYER_REGEN_ENABLED()
local go = self:Scan()
local _,_,running,_ = Metro:Status("BigWigs_Thaddius_CheckWipe")
if (not go) then
self:Disable()
Metro:Stop("BigWigs_Thaddius_CheckWipe")
elseif (not running) then
Metro:Start("BigWigs_Thaddius_CheckWipe")
end
end
function BigWigsThaddius:CHAT_MSG_MONSTER_EMOTE()
if ( arg1 == self.loc.enragetrigger) then
if not self:GetOpt("notEnrageWarn") then self:TriggerEvent("BIGWIGS_MESSAGE", self.loc.enragewarn, "Red") end
self:StopEnrage()
end
end
function BigWigsThaddius:StopEnrage()
self:TriggerEvent("BIGWIGS_BAR_CANCEL", self.loc.enragebartext)
self:TriggerEvent("BIGWIGS_DELAYEDMESSAGE_CANCEL", self.loc.warn1)
self:TriggerEvent("BIGWIGS_DELAYEDMESSAGE_CANCEL", self.loc.warn2)
self:TriggerEvent("BIGWIGS_DELAYEDMESSAGE_CANCEL", self.loc.warn3)
self:TriggerEvent("BIGWIGS_DELAYEDMESSAGE_CANCEL", self.loc.warn4)
self:TriggerEvent("BIGWIGS_DELAYEDMESSAGE_CANCEL", self.loc.warn5)
self:TriggerEvent("BIGWIGS_DELAYEDMESSAGE_CANCEL", self.loc.warn6)
self:TriggerEvent("BIGWIGS_BAR_DELAYEDSETCOLOR_CANCEL", self.loc.enragebartext, 120)
self:TriggerEvent("BIGWIGS_BAR_DELAYEDSETCOLOR_CANCEL", self.loc.enragebartext, 240)
self:TriggerEvent("BIGWIGS_BAR_DELAYEDSETCOLOR_CANCEL", self.loc.enragebartext, 360)
end
function BigWigsThaddius:CHAT_MSG_SPELL_CREATURE_VS_CREATURE_DAMAGE()
if (string.find(arg1, self.loc.trigger1)) then
self:TriggerEvent("BIGWIGS_MESSAGE", self.loc.pswarn1, "Red")
end
end
function BigWigsThaddius:BIGWIGS_SYNC_THADDIUS_POLARITY_SHIFT()
if (not self:GetOpt("notPolarityShift")) then
self:TriggerEvent("BIGWIGS_MESSAGE", self.loc.pswarn2, "Yellow")
self:TriggerEvent("BIGWIGS_DELAYEDMESSAGE_START", self.loc.pswarn3, 27, "Red")
self:TriggerEvent("BIGWIGS_BAR_START", self.loc.bar1text, 30, 1, "Yellow", "Interface\\Icons\\Spell_Nature_CallStorm")
self:TriggerEvent("BIGWIGS_BAR_DELAYEDSETCOLOR_START", self.loc.bar1text, 10, "Orange")
self:TriggerEvent("BIGWIGS_BAR_DELAYEDSETCOLOR_START", self.loc.bar1text, 20, "Red")
end
end
function BigWigsThaddius:Event()
local _, _, EPlayer = string.find(arg1, self.loc.postrigger)
if (EPlayer) then
if (EPlayer == self.loc.you and not self:GetOpt("notYouPositive")) then
self:TriggerEvent("BIGWIGS_MESSAGE", self.loc.poswarn, "Red", true)
elseif local _, _, EPlayer = string.find(arg1, self.loc.negtrigger)
if (EPlayer) then
if (EPlayer == self.loc.you and not self:GetOpt("notYouNegative")) then
self:TriggerEvent("BIGWIGS_MESSAGE", self.loc.negwarn, "Red", true)
end
end
end
end
--------------------------------
-- Load this bitch! --
--------------------------------
BigWigsThaddius:RegisterForLoad()