local bboss = BabbleLib:GetInstance("Boss 1.2")
local metro = Metrognome:GetInstance("1")
BigWigsHeigan = AceAddon:new({
name = "BigWigsHeigan",
cmd = AceChatCmd:new({}, {}),
zonename = BabbleLib:GetInstance("Zone 1.2")("Naxxramas"),
enabletrigger = bboss("Heigan the Unclean"),
bossname = bboss("Heigan the Unclean"),
toggleoptions = {
notStartWarn = "Start warning",
notTeleport = "Teleport warning",
notTeleport10Sec = "Teleport 10-sec warning",
notTeleportBar = "Teleport bar",
notBosskill = "Boss death",
},
optionorder = {"notStartWarn", "notTeleport", "notTeleport10Sec", "notTeleportBar", "notBosskill"},
loc = {
disabletrigger = "Heigan the Unclean takes his last breath.",
bosskill = "Heigan the Unclean has been defeated!",
starttrigger = "You are mine now.",
starttrigger2 = "You are next.",
starttrigger3 = "I see you.",
teleporttrigger = "The end is upon you.",
startwarn = "Heigan the Unclean engaged! 90 seconds till teleport",
teleportwarn = "Teleport! He's on the platform!",
teleportwarn2 = "Teleport in 10 seconds!",
teleportbar = "Teleport!",
backbar = "Back in room!",
backwarn = "He's back in the room! Teleport in 90 seconds!",
backwarn2 = "10 seconds until he's back in the room!",
},
})
function BigWigsHeigan:Initialize()
self.disabled = true
self:TriggerEvent("BIGWIGS_REGISTER_MODULE", self)
end
function BigWigsHeigan:Enable()
self.disabled = nil
self.timeroom = 90
self.timeplatform = 45
self:RegisterEvent("PLAYER_REGEN_ENABLED")
self:RegisterEvent("CHAT_MSG_MONSTER_YELL")
self:RegisterEvent("CHAT_MSG_MONSTER_EMOTE")
self:RegisterEvent("BIGWIGS_MESSAGE")
metro:Unregister("BigWigs Heigan ToPlatform")
metro:Unregister("BigWigs Heigan ToRoom")
metro:Register("BigWigs Heigan ToPlatform", self.teleportToPlatform, self.timeroom, self)
metro:Register("BigWigs Heigan ToRoom", self.teleportToRoom, self.timeplatform, self)
metro:Register("BigWigs_Heigan_CheckWipe", self.PLAYER_REGEN_ENABLED, 2, self)
end
function BigWigsHeigan:Disable()
self.disabled = true
self:UnregisterAllEvents()
self:TriggerEvent("BIGWIGS_DELAYEDMESSAGE_CANCEL", self.loc.teleportwarn2)
self:TriggerEvent("BIGWIGS_DELAYEDMESSAGE_CANCEL", self.loc.backwarn2)
self:TriggerEvent("BIGWIGS_BAR_CANCEL", self.loc.teleportbar)
self:TriggerEvent("BIGWIGS_BAR_CANCEL", self.loc.backbar)
metro:Unregister("BigWigs Heigan ToPlatform")
metro:Unregister("BigWigs Heigan ToRoom")
metro:Unregister("BigWigs_Heigan_CheckWipe")
self.prior = nil
end
function BigWigsHeigan: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 BigWigsHeigan:PLAYER_REGEN_ENABLED()
local go = self:Scan()
local _,_,running = Metro:Status("BigWigs_Heigan_CheckWipe")
if (not go) then
self:Disable()
Metro:Stop("BigWigs_Heigan_CheckWipe")
elseif (not running) then
Metro:Start("BigWigs_Heigan_CheckWipe")
end
end
function BigWigsHeigan:CHAT_MSG_MONSTER_EMOTE()
if (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 BigWigsHeigan:teleportToPlatform()
if not self:GetOpt("notTeleport") then self:TriggerEvent("BIGWIGS_MESSAGE", self.loc.teleportwarn, "Red") end
if not self:GetOpt("notTeleportBar") then self:TriggerEvent("BIGWIGS_BAR_START", self.loc.backbar, self.timeplatform, 2, "Orange", "Interface\\Icons\\Spell_Magic_LesserInvisibilty") end
if not self:GetOpt("notTeleport10Sec") then self:TriggerEvent("BIGWIGS_DELAYEDMESSAGE_START", self.loc.backwarn2, self.timeplatform - 10) end
-- Trigger the Timers
metro:Stop("BigWigs Heigan ToPlatform")
metro:Start("BigWigs Heigan ToRoom")
end
function BigWigsHeigan:teleportToRoom()
if not self:GetOpt("notTeleport") then self:TriggerEvent("BIGWIGS_MESSAGE", string.format(self.loc.backwarn, self.timeroom), "Red") end
if not self:GetOpt("notTeleportBar") then self:TriggerEvent("BIGWIGS_BAR_START", self.loc.teleportbar, self.timeroom, 2, "Yellow", "Interface\\Icons\\Spell_Magic_LesserInvisibilty") end
if not self:GetOpt("notTeleport10Sec") then self:TriggerEvent("BIGWIGS_DELAYEDMESSAGE_START", self.loc.teleportwarn2, self.timeroom - 10) end
-- Trigger the Timers
metro:Stop("BigWigs Heigan ToRoom")
metro:Start("BigWigs Heigan ToPlatform")
end
function BigWigsHeigan:CHAT_MSG_MONSTER_YELL()
if (arg1 == self.loc.starttrigger1 or arg1 == self.loc.starttrigger2 or arg1 == self.loc.starttrigger3) then
if not self:GetOpt("notStartWarn") then self:TriggerEvent("BIGWIGS_MESSAGE", self.loc.startwarn, "Red") end
if not self:GetOpt("notTeleportBar") then self:TriggerEvent("BIGWIGS_BAR_START", self.loc.teleportbar, self.timeroom, 0, "Yellow", "Interface\\Icons\\Spell_Magic_LesserInvisibilty") end
if not self:GetOpt("notTeleport10Sec") then self:TriggerEvent("BIGWIGS_DELAYEDMESSAGE_START", self.loc.teleportwarn2, self.timeroom - 10, "Orange") end
-- make sure if a engage trigger fires the teleport timer can fire
self.prior = nil
end
if (string.find(arg1, self.loc.teleporttrigger) and not self.prior) then
metro:Start("BigWigs Heigan ToPlatform")
-- we only want this to start the timer once
self.prior = true
end
end
--------------------------------
-- Load this bitch! --
--------------------------------
BigWigsHeigan:RegisterForLoad()