All pastes #90473 Raw Edit

Miscellany

public text v1 · immutable
#90473 ·published 2006-07-17 18:25 UTC
rendered paste body
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()