local bboss = BabbleLib:GetInstance("Boss 1.2")
local metro = Metrognome:GetInstance("1")
BigWigsRazuvious = AceAddon:new({
name = "BigWigsRazuvious",
cmd = AceChatCmd:new({}, {}),
zonename = BabbleLib:GetInstance("Zone 1.2")("Naxxramas"),
enabletrigger = bboss("Instructor Razuvious"),
bossname = bboss("Instructor Razuvious"),
toggleoptions = {
notShoutWarn = "Warn when Razuvious uses Disrupting Shout",
notShoutBar = "Show the Time Bar for Disrupting Shout",
notBosskill = "Boss death",
},
optionorder = {"notShoutWarn", "notShoutBar", "notBosskill"},
loc = {
disabletrigger = "Instructor Razuvious dies.",
bosskill = "Razuvious has been defeated!",
startwarn = "Instructor Razuvious engaged!, ~25secs until shout!",
starttrigger1 = "The time for practice is over! Show me what you have learned!",
starttrigger2 = "Sweep the leg... Do you have a problem with that?",
starttrigger3 = "Show them no mercy!",
starttrigger4 = "Do as I taught you!",
shouttrigger = "Instructor Razuvious's Disrupting Shout hits (.+) for (.+)",
shout7secwarn = "7 seconds until Disrupting Shout",
shout3secwarn = "3 seconds until Disrupting Shout",
shoutwarn = "Disrupting Shout!",
noshoutwarn = "No shout! next in ~20secs",
shoutbar = "Disrupting Shout",
},
timeShout = 30
})
function BigWigsRazuvious:Initialize()
self.disabled = true
self:TriggerEvent("BIGWIGS_REGISTER_MODULE", self)
end
function BigWigsRazuvious:Enable()
self.disabled = nil
self:RegisterEvent("CHAT_MSG_COMBAT_HOSTILE_DEATH")
self:RegisterEvent("CHAT_MSG_MONSTER_YELL")
self:RegisterEvent("CHAT_MSG_SPELL_CREATURE_VS_CREATURE_DAMAGE", "Shout")
self:RegisterEvent("CHAT_MSG_SPELL_CREATURE_VS_SELF_DAMAGE", "Shout")
self:RegisterEvent("CHAT_MSG_SPELL_CREATURE_VS_PARTY_DAMAGE", "Shout")
self:RegisterEvent("PLAYER_REGEN_ENABLED")
self:RegisterEvent("BIGWIGS_MESSAGE")
self:RegisterEvent("BIGWIGS_SYNC_SHOUTWARN")
self:RegisterEvent("BIGWIGS_SYNC_NOSHOUT")
self:TriggerEvent("BIGWIGS_SYNC_THROTTLE", "SHOUTWARN", 5)
self:TriggerEvent("BIGWIGS_SYNC_THROTTLE", "NOSHOUT", 5)
metro:Register("BigWigs_Razuvious_CheckWipe", self.PLAYER_REGEN_ENABLED, 2, self)
metro:Unregister("BigWigs Razuvious Shout")
metro:Register("BigWigs Razuvious Shout", self.noShout, self.timeShout, self )
end
function BigWigsRazuvious:Disable()
self.disabled = true
metro:Unregister("BigWigs Razuvious Shout")
metro:Unregister("BigWigs_Razuvious_CheckWipe")
self:UnregisterAllEvents()
self:TriggerEvent("BIGWIGS_BAR_CANCEL", self.loc.shoutbar)
self:TriggerEvent("BIGWIGS_DELAYEDMESSAGE_CANCEL", self.loc.shout7secwarn)
self:TriggerEvent("BIGWIGS_DELAYEDMESSAGE_CANCEL", self.loc.shout3secwarn)
self:TriggerEvent("BIGWIGS_BAR_DELAYEDSETCOLOR_CANCEL", self.loc.shoutbar, 5)
self:TriggerEvent("BIGWIGS_BAR_DELAYEDSETCOLOR_CANCEL", self.loc.shoutbar, 10)
self:TriggerEvent("BIGWIGS_BAR_DELAYEDSETCOLOR_CANCEL", self.loc.shoutbar, 13)
self:TriggerEvent("BIGWIGS_BAR_DELAYEDSETCOLOR_CANCEL", self.loc.shoutbar, 18)
self.prior = nil
end
function BigWigsRazuvious:CHAT_MSG_COMBAT_HOSTILE_DEATH()
if (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 BigWigsRazuvious:BIGWIGS_SYNC_SHOUTWARN()
if (not self:GetOpt("notShoutWarn")) then
self:TriggerEvent("BIGWIGS_MESSAGE", self.loc.shoutwarn, "Orange", nil, "Alarm")
self:TriggerEvent("BIGWIGS_DELAYEDMESSAGE_START", self.loc.shout7secwarn, 18, "Yellow", nil, "Alert")
self:TriggerEvent("BIGWIGS_DELAYEDMESSAGE_START", self.loc.shout3secwarn, 22, "Red", nil, "Alert")
end
if (not self:GetOpt("notShoutBar")) then
self:TriggerEvent("BIGWIGS_BAR_START", self.loc.shoutbar, 25, 1, "Yellow", "Interface\\Icons\\Ability_Warrior_WarCry")
self:TriggerEvent("BIGWIGS_BAR_DELAYEDSETCOLOR_START", self.loc.shoutbar, 10, "Orange")
self:TriggerEvent("BIGWIGS_BAR_DELAYEDSETCOLOR_START", self.loc.shoutbar, 18, "Red")
end
self.prior = true
end
function BigWigsRazuvious:BIGWIGS_SYNC_NOSHOUT()
if (not self:GetOpt("notShoutWarn")) then
self:TriggerEvent("BIGWIGS_MESSAGE", self.loc.noshoutwarn, "Yellow")
self:TriggerEvent("BIGWIGS_DELAYEDMESSAGE_START", self.loc.shout7secwarn, 13, "Yellow", nil, "Alert")
self:TriggerEvent("BIGWIGS_DELAYEDMESSAGE_START", self.loc.shout3secwarn, 17, "Red", nil, "Alert")
end
if (not self:GetOpt("notShoutBar")) then
self:TriggerEvent("BIGWIGS_BAR_START", self.loc.shoutbar, 20, 1, "Yellow", "Interface\\Icons\\Ability_Warrior_WarCry")
self:TriggerEvent("BIGWIGS_BAR_DELAYEDSETCOLOR_START", self.loc.shoutbar, 5, "Orange")
self:TriggerEvent("BIGWIGS_BAR_DELAYEDSETCOLOR_START", self.loc.shoutbar, 13, "Red")
end
end
function BigWigsRazuvious:noShout()
metro:Stop("BigWigs Razuvious Shout")
metro:Start("BigWigs Razuvious Shout")
self:TriggerEvent("BIGWIGS_SYNC_SEND", "NOSHOUT")
end
function BigWigsRazuvious:Shout()
if (string.find(arg1, self.loc.shouttrigger) and not self.prior) then
self:TriggerEvent("BIGWIGS_SYNC_SEND", "SHOUTWARN")
metro:Stop("BigWigs Razuvious Shout")
metro:Start("BigWigs Razuvious Shout")
end
end
function BigWigsRazuvious:CHAT_MSG_MONSTER_YELL()
if (arg1 == self.loc.starttrigger1 or arg1 == self.loc.starttrigger2 or arg1 == self.loc.starttrigger3 or arg1 == self.loc.starttrigger4) then
if (not self:GetOpt("notShoutWarn")) then
self:TriggerEvent("BIGWIGS_MESSAGE", self.loc.startwarn, "Orange", nil, "Alarm")
self:TriggerEvent("BIGWIGS_DELAYEDMESSAGE_START", self.loc.shout7secwarn, 18, "Yellow", nil, "Alert")
self:TriggerEvent("BIGWIGS_DELAYEDMESSAGE_START", self.loc.shout2secwarn, 22, "Red", nil, "Alert")
end
if (not self:GetOpt("notShoutBar")) then
self:TriggerEvent("BIGWIGS_BAR_START", self.loc.shoutbar, 25, 1, "Yellow", "Interface\\Icons\\Ability_Warrior_WarCry")
self:TriggerEvent("BIGWIGS_BAR_DELAYEDSETCOLOR_START", self.loc.shoutbar, 10, "Orange")
self:TriggerEvent("BIGWIGS_BAR_DELAYEDSETCOLOR_START", self.loc.shoutbar, 18, "Red")
end
metro:Start("BigWigs Razuvious Shout")
end
end
function BigWigsRazuvious:PLAYER_REGEN_ENABLED()
local go = self:Scan()
local _,_,running,_ = metro:Status("BigWigs_Razuvious_CheckWipe")
if (not go) then
metro:Stop("BigWigs Razuvious Shout")
metro:Stop("BigWigs_Razuvious_CheckWipe")
elseif (not running) then
metro:Start("BigWigs_Razuvious_CheckWipe")
end
end
function BigWigsRazuvious: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 BigWigsRazuvious:BIGWIGS_MESSAGE(text)
if text == self.loc.shout7secwarn then self.prior = nil end
end
--------------------------------
-- Load this bitch! --
--------------------------------
BigWigsRazuvious:RegisterForLoad()