vanilla-wow-addons – Rev 1
?pathlinks?
------------------------------
-- Are you local? --
------------------------------
local thane = AceLibrary("Babble-Boss-2.2")["Thane Korth'azz"]
local mograine = AceLibrary("Babble-Boss-2.2")["Highlord Mograine"]
local zeliek = AceLibrary("Babble-Boss-2.2")["Sir Zeliek"]
local blaumeux = AceLibrary("Babble-Boss-2.2")["Lady Blaumeux"]
local boss = AceLibrary("Babble-Boss-2.2")["The Four Horsemen"]
local L = AceLibrary("AceLocale-2.2"):new("BigWigs"..boss)
local times = nil
local started = nil
----------------------------
-- Localization --
----------------------------
L:RegisterTranslations("enUS", function() return {
cmd = "Horsemen",
mark_cmd = "mark",
mark_name = "Mark Alerts",
mark_desc = "Warn for marks",
shieldwall_cmd = "shieldwall",
shieldwall_name = "Shieldwall Alerts",
shieldwall_desc = "Warn for shieldwall",
void_cmd = "void",
void_name = "Void Zone Alerts",
void_desc = "Warn on Lady Blaumeux casting Void Zone.",
meteor_cmd = "meteor",
meteor_name = "Meteor Alerts",
meteor_desc = "Warn on Thane casting Meteor.",
wrath_cmd = "wrath",
wrath_name = "Holy Wrath Alerts",
wrath_desc = "Warn on Zeliek casting Wrath.",
markbar = "Mark %d",
markwarn1 = "Mark %d!",
markwarn2 = "Mark %d in 5 sec",
marktrigger = "is afflicted by Mark of ",
voidtrigger = "Lady Blaumeux casts Void Zone.",
voidwarn = "Void Zone Incoming",
voidbar = "Void Zone",
meteortrigger = "Thane Korth'azz's Meteor hits ",
meteorwarn = "Meteor!",
meteorbar = "Meteor",
wrathtrigger = "Sir Zeliek's Holy Wrath hits ",
wrathwarn = "Holy Wrath!",
wrathbar = "Holy Wrath",
startwarn = "The Four Horsemen Engaged! Mark in ~17 sec",
shieldwallbar = "%s - Shield Wall",
shieldwalltrigger = "(.*) gains Shield Wall.",
shieldwallwarn = "%s - Shield Wall for 20 sec",
shieldwallwarn2 = "%s - Shield Wall GONE!",
} end )
L:RegisterTranslations("koKR", function() return {
mark_name = "징표 경고",
mark_desc = "징표에 대한 경고",
shieldwall_name = "방패의벽 경고",
shieldwall_desc = "방패의벽에 대한 경고",
void_name = "공허의 지대 경고",
void_desc = "여군주 블라미우스 공허의 지대 시전 경고.",
meteor_name = "유성 경고",
meteor_desc = "영주 코스아즈 유성 시전 경고.",
wrath_name = "성스러운 격노 경고",
wrath_desc = "젤리에크 경 신성한 격노 시전 경고",
markbar = "징표 %d",
markwarn1 = "%d 징표!",
markwarn2 = "%d 징표 - 5 초",
--marktrigger = "is afflicted by Mark of (Korth'azz|Blaumeux|Mograine|Zeliek)",
marktrigger = "의 징표에 걸렸습니다.",
voidtrigger = "여군주 블라미우스|1이;가; 공허의 지대|1을;를; 시전합니다.",
voidwarn = "블라미우스 공허의 지대 생성!",
voidbar = "공허의 지대",
meteortrigger = "영주 코스아즈|1이;가; 유성|1으로;로; ",
meteorwarn = "코스아즈 유성!",
meteorbar = "유성",
wrathtrigger = "젤리에크 경|1이;가; 신의 격노|1으로;로;",
wrathwarn = "젤리에크 신의 격노!",
wrathbar = "신의 격노",
startwarn = "4인의 기병대 전투 시작! 약 17 초내에 징표",
shieldwallbar = "%s - 방패의 벽",
shieldwalltrigger = "(.*)|1이;가; 방패의 벽 효과를 얻었습니다.",
shieldwallwarn = "%s - 20초간 방패의 벽",
shieldwallwarn2 = "%s - 방패의 벽 사라짐!",
} end )
L:RegisterTranslations("deDE", function() return {
mark_name = "Mal Alarm",
mark_desc = "Warnt vor den Mal Debuffs",
shieldwall_name = "Schildwall",
shieldwall_desc = "Warnung vor Schildwall.",
void_name = "Zone der Leere Warnung",
void_desc = "Warnt, wenn Lady Blaumeux Zone der Leere zaubert.",
meteor_name = "Meteor Alarm",
meteor_desc = "Warnt, wenn Thane Meteor zaubert.",
wrath_name = "Heiliger Zorn Alarm",
wrath_desc = "Warnt, wenn Sire Zeliek Heiliger Zorn zaubert.",
markbar = "Mal",
markwarn1 = "Mal (%d)!",
markwarn2 = "Mal (%d) - 5 Sekunden",
marktrigger = "ist von Mal von .+ betroffen",
voidtrigger = "Lady Blaumeux wirkt Zone der Leere.",
voidwarn = "Zone der Leere kommt",
voidbar = "Zone der Leere",
meteortrigger = "Thane Korth'azzs Meteor trifft ",
meteorwarn = "Meteor!",
meteorbar = "Meteor",
wrathtrigger = "Sire Zelieks Heiliger Zorn trifft ",
wrathwarn = "Heiliger Zorn!",
wrathbar = "Heiliger Zorn",
startwarn = "Die Vier Reiter angegriffen! Mal in ~17 Sekunden",
shieldwallbar = "%s - Schildwall",
shieldwalltrigger = "(.+) bekommt 'Schildwall'.",
shieldwallwarn = "%s - Schildwall f\195\188r 20 Sekunden",
shieldwallwarn2 = "%s - Schildwall Vorbei!",
} end )
L:RegisterTranslations("zhCN", function() return {
mark_name = "标记警报",
mark_desc = "标记警报",
shieldwall_name = "盾墙警报",
shieldwall_desc = "盾墙警报",
void_name = "虚空领域警报",
void_desc = "当施放虚空领域时警报",
meteor_name = "流星警报",
meteor_desc = "库尔塔兹领主的流星警报",
wrath_name = "神圣之怒警报",
wrath_desc = "瑟里耶克爵士的神圣之怒警报",
markbar = "标记 %d",
markwarn1 = "标记(%d)!",
markwarn2 = "标记(%d) - 5秒",
marktrigger = "受到了库尔塔兹印记效果的影响。",
voidtrigger = "女公爵布劳缪克丝施放了虚空领域。",
voidwarn = "5秒后虚空领域",
voidbar = "虚空领域",
meteortrigger = "库尔塔兹领主的流星击中 ",
meteorwarn = "流星",
meteorbar = "流星",
wrathtrigger = "瑟里耶克爵士的神圣之怒击中 ",
wrathwarn = "神圣之怒",
wrathbar = "神圣之怒",
startwarn = "四骑士已激活 - ~17秒后标记",
shieldwallbar = "%s - 盾墙",
shieldwalltrigger = "获得了盾墙",
shieldwallwarn = "%s - 20秒盾墙效果",
shieldwallwarn2 = "%s - 盾墙消失了!",
} end )
L:RegisterTranslations("zhTW", function() return {
mark_name = "標記警報",
mark_desc = "標記警報",
shieldwall_name = "盾牆警報",
shieldwall_desc = "盾牆警報",
void_name = "虛空地區警報",
void_desc = "當布洛莫斯爵士施放虛空地區時警報",
meteor_name = "隕石術警報",
meteor_desc = "寇斯艾茲族長的隕石術警報",
wrath_name = "神聖之怒警報",
wrath_desc = "札里克爵士的神聖之怒警報",
markbar = "標記 %d",
markwarn1 = "標記(%d)!",
markwarn2 = "標記(%d) - 5秒",
marktrigger = "受到了庫爾塔茲印記效果的影響。",
voidtrigger = "布洛莫斯爵士施放了虛空地區。",
voidwarn = "5秒後虛空地區",
voidbar = "虛空地區",
meteortrigger = "寇斯艾茲族長的隕石術擊中",
meteorwarn = "隕石術",
meteorbar = "隕石術",
wrathtrigger = "札里克爵士的神聖之怒擊中",
wrathwarn = "神聖之怒",
wrathbar = "神聖之怒",
startwarn = "四騎士已進入戰鬥 - 17秒後標記",
shieldwallbar = "%s - 盾牆",
shieldwalltrigger = "獲得了盾牆",
shieldwallwarn = "%s - 20秒盾牆效果",
shieldwallwarn2 = "%s - 盾牆消失了!",
} end )
----------------------------------
-- Module Declaration --
----------------------------------
BigWigsHorsemen = BigWigs:NewModule(boss)
BigWigsHorsemen.zonename = AceLibrary("Babble-Zone-2.2")["Naxxramas"]
BigWigsHorsemen.enabletrigger = { thane, mograine, zeliek, blaumeux }
BigWigsHorsemen.toggleoptions = {"mark", "shieldwall", -1, "meteor", "void", "wrath", "bosskill"}
BigWigsHorsemen.revision = tonumber(string.sub("$Revision: 16494 $", 12, -3))
------------------------------
-- Initialization --
------------------------------
function BigWigsHorsemen:OnEnable()
self.marks = 1
self.deaths = 0
times = {}
started = nil
self:RegisterEvent("PLAYER_REGEN_ENABLED", "CheckForWipe")
self:RegisterEvent("PLAYER_REGEN_DISABLED", "CheckForEngage")
self:RegisterEvent("CHAT_MSG_COMBAT_HOSTILE_DEATH")
self:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_CREATURE_BUFFS")
self:RegisterEvent("CHAT_MSG_SPELL_CREATURE_VS_CREATURE_BUFF")
self:RegisterEvent("CHAT_MSG_SPELL_CREATURE_VS_CREATURE_DAMAGE", "SkillEvent")
self:RegisterEvent("CHAT_MSG_SPELL_CREATURE_VS_PARTY_DAMAGE", "SkillEvent")
self:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_SELF_DAMAGE", "MarkEvent")
self:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_FRIENDLYPLAYER_DAMAGE", "MarkEvent")
self:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_PARTY_DAMAGE", "MarkEvent")
self:RegisterEvent("BigWigs_RecvSync")
self:TriggerEvent("BigWigs_ThrottleSync", "HorsemenShieldWall", 3)
-- Upgraded to HorsemenMark2 so that we don't get blocked by throttled syncs
-- from older revisions.
self:TriggerEvent("BigWigs_ThrottleSync", "HorsemenMark2", 8)
self:TriggerEvent("BigWigs_ThrottleSync", "HorsemenVoid", 5)
self:TriggerEvent("BigWigs_ThrottleSync", "HorsemenWrath", 5)
self:TriggerEvent("BigWigs_ThrottleSync", "HorsemenMeteor", 5)
end
function BigWigsHorsemen:MarkEvent( msg )
if string.find(msg, L["marktrigger"]) then
local t = GetTime()
if not times["mark"] or (times["mark"] and (times["mark"] + 8) < t) then
self:TriggerEvent("BigWigs_SendSync", "HorsemenMark2 "..tostring(self.marks + 1))
times["mark"] = t
end
end
end
function BigWigsHorsemen:SkillEvent( msg )
local t = GetTime()
if string.find(msg, L["meteortrigger"]) then
if not times["meteor"] or (times["meteor"] and (times["meteor"] + 8) < t) then
self:TriggerEvent("BigWigs_SendSync", "HorsemenMeteor")
times["meteor"] = t
end
elseif string.find(msg, L["wrathtrigger"]) then
if not times["wrath"] or (times["wrath"] and (times["wrath"] + 8) < t) then
self:TriggerEvent("BigWigs_SendSync", "HorsemenWrath")
times["wrath"] = t
end
elseif msg == L["voidtrigger"] then
if not times["void"] or (times["void"] and (times["void"] + 8) < t) then
self:TriggerEvent("BigWigs_SendSync", "HorsemenVoid" )
times["void"] = t
end
end
end
function BigWigsHorsemen:BigWigs_RecvSync(sync, rest)
if sync == self:GetEngageSync() and rest and rest == boss and not started then
started = true
if self:IsEventRegistered("PLAYER_REGEN_DISABLED") then
self:UnregisterEvent("PLAYER_REGEN_DISABLED")
end
if self.db.profile.mark then
self:TriggerEvent("BigWigs_Message", L["startwarn"], "Attention")
self:TriggerEvent("BigWigs_StartBar", self, string.format( L["markbar"], self.marks), 17, "Interface\\Icons\\Spell_Shadow_CurseOfAchimonde")
self:ScheduleEvent("bwhorsemenmark2", "BigWigs_Message", 12, string.format( L["markwarn2"], self.marks ), "Urgent")
end
elseif sync == "HorsemenMark2" and rest then
rest = tonumber(rest)
if rest == nil then return end
if rest == (self.marks + 1) then
if self.db.profile.mark then
self:TriggerEvent("BigWigs_Message", string.format( L["markwarn1"], self.marks ), "Important")
end
self.marks = self.marks + 1
if self.db.profile.mark then
self:TriggerEvent("BigWigs_StartBar", self, string.format( L["markbar"], self.marks ), 12, "Interface\\Icons\\Spell_Shadow_CurseOfAchimonde")
self:ScheduleEvent("bwhorsemenmark2", "BigWigs_Message", 7, string.format( L["markwarn2"], self.marks ), "Urgent")
end
end
elseif sync == "HorsemenMeteor" then
if self.db.profile.meteor then
self:TriggerEvent("BigWigs_Message", L["meteorwarn"], "Important")
self:TriggerEvent("BigWigs_StartBar", self, L["meteorbar"], 12, "Interface\\Icons\\Spell_Fire_Fireball02")
end
elseif sync == "HorsemenWrath" then
if self.db.profile.wrath then
self:TriggerEvent("BigWigs_Message", L["wrathwarn"], "Important")
self:TriggerEvent("BigWigs_StartBar", self, L["wrathbar"], 12, "Interface\\Icons\\Spell_Holy_Excorcism")
end
elseif sync == "HorsemenVoid" then
if self.db.profile.void then
self:TriggerEvent("BigWigs_Message", L["voidwarn"], "Important")
self:TriggerEvent("BigWigs_StartBar", self, L["voidbar"], 12, "Interface\\Icons\\Spell_Frost_IceStorm")
end
elseif sync == "HorsemenShieldWall" and self.db.profile.shieldwall and rest then
self:TriggerEvent("BigWigs_Message", string.format(L["shieldwallwarn"], rest), "Attention")
self:ScheduleEvent("BigWigs_Message", 20, string.format(L["shieldwallwarn2"], rest), "Positive")
self:TriggerEvent("BigWigs_StartBar", self, string.format(L["shieldwallbar"], rest), 20, "Interface\\Icons\\Ability_Warrior_ShieldWall")
end
end
function BigWigsHorsemen:CHAT_MSG_SPELL_PERIODIC_CREATURE_BUFFS( msg )
local _,_, mob = string.find(msg, L["shieldwalltrigger"])
if mob then self:TriggerEvent("BigWigs_SendSync", "HorsemenShieldWall "..mob) end
end
function BigWigsHorsemen:CHAT_MSG_SPELL_CREATURE_VS_CREATURE_BUFF(msg)
if msg == L["voidtrigger"] then
self:TriggerEvent("BigWigs_SendSync", "HorsemenVoid" )
end
end
function BigWigsHorsemen:CHAT_MSG_COMBAT_HOSTILE_DEATH( msg )
if msg == string.format(UNITDIESOTHER, thane ) or
msg == string.format(UNITDIESOTHER, zeliek) or
msg == string.format(UNITDIESOTHER, mograine) or
msg == string.format(UNITDIESOTHER, blaumeux) then
self.deaths = self.deaths + 1
if self.deaths == 4 then
if self.db.profile.bosskill then self:TriggerEvent("BigWigs_Message", string.format(AceLibrary("AceLocale-2.2"):new("BigWigs")["%s have been defeated"], boss), "Bosskill", nil, "Victory") end
self.core:ToggleModuleActive(self, false)
end
end
end