vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
------------------------------
--      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