vanilla-wow-addons – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 ------------------------------
2 -- Are you local? --
3 ------------------------------
4  
5 local thane = AceLibrary("Babble-Boss-2.2")["Thane Korth'azz"]
6 local mograine = AceLibrary("Babble-Boss-2.2")["Highlord Mograine"]
7 local zeliek = AceLibrary("Babble-Boss-2.2")["Sir Zeliek"]
8 local blaumeux = AceLibrary("Babble-Boss-2.2")["Lady Blaumeux"]
9 local boss = AceLibrary("Babble-Boss-2.2")["The Four Horsemen"]
10  
11 local L = AceLibrary("AceLocale-2.2"):new("BigWigs"..boss)
12  
13 local times = nil
14  
15 local started = nil
16  
17 ----------------------------
18 -- Localization --
19 ----------------------------
20  
21 L:RegisterTranslations("enUS", function() return {
22 cmd = "Horsemen",
23  
24 mark_cmd = "mark",
25 mark_name = "Mark Alerts",
26 mark_desc = "Warn for marks",
27  
28 shieldwall_cmd = "shieldwall",
29 shieldwall_name = "Shieldwall Alerts",
30 shieldwall_desc = "Warn for shieldwall",
31  
32 void_cmd = "void",
33 void_name = "Void Zone Alerts",
34 void_desc = "Warn on Lady Blaumeux casting Void Zone.",
35  
36 meteor_cmd = "meteor",
37 meteor_name = "Meteor Alerts",
38 meteor_desc = "Warn on Thane casting Meteor.",
39  
40 wrath_cmd = "wrath",
41 wrath_name = "Holy Wrath Alerts",
42 wrath_desc = "Warn on Zeliek casting Wrath.",
43  
44 markbar = "Mark %d",
45 markwarn1 = "Mark %d!",
46 markwarn2 = "Mark %d in 5 sec",
47 marktrigger = "is afflicted by Mark of ",
48  
49 voidtrigger = "Lady Blaumeux casts Void Zone.",
50 voidwarn = "Void Zone Incoming",
51 voidbar = "Void Zone",
52  
53 meteortrigger = "Thane Korth'azz's Meteor hits ",
54 meteorwarn = "Meteor!",
55 meteorbar = "Meteor",
56  
57 wrathtrigger = "Sir Zeliek's Holy Wrath hits ",
58 wrathwarn = "Holy Wrath!",
59 wrathbar = "Holy Wrath",
60  
61 startwarn = "The Four Horsemen Engaged! Mark in ~17 sec",
62  
63 shieldwallbar = "%s - Shield Wall",
64 shieldwalltrigger = "(.*) gains Shield Wall.",
65 shieldwallwarn = "%s - Shield Wall for 20 sec",
66 shieldwallwarn2 = "%s - Shield Wall GONE!",
67 } end )
68  
69 L:RegisterTranslations("koKR", function() return {
70  
71 mark_name = "징표 경고",
72 mark_desc = "징표에 대한 경고",
73  
74 shieldwall_name = "방패의벽 경고",
75 shieldwall_desc = "방패의벽에 대한 경고",
76  
77 void_name = "공허의 지대 경고",
78 void_desc = "여군주 블라미우스 공허의 지대 시전 경고.",
79  
80 meteor_name = "유성 경고",
81 meteor_desc = "영주 코스아즈 유성 시전 경고.",
82  
83 wrath_name = "성스러운 격노 경고",
84 wrath_desc = "젤리에크 경 신성한 격노 시전 경고",
85  
86 markbar = "징표 %d",
87 markwarn1 = "%d 징표!",
88 markwarn2 = "%d 징표 - 5 초",
89 --marktrigger = "is afflicted by Mark of (Korth'azz|Blaumeux|Mograine|Zeliek)",
90 marktrigger = "의 징표에 걸렸습니다.",
91  
92 voidtrigger = "여군주 블라미우스|1이;가; 공허의 지대|1을;를; 시전합니다.",
93 voidwarn = "블라미우스 공허의 지대 생성!",
94 voidbar = "공허의 지대",
95  
96 meteortrigger = "영주 코스아즈|1이;가; 유성|1으로;로; ",
97 meteorwarn = "코스아즈 유성!",
98 meteorbar = "유성",
99  
100 wrathtrigger = "젤리에크 경|1이;가; 신의 격노|1으로;로;",
101 wrathwarn = "젤리에크 신의 격노!",
102 wrathbar = "신의 격노",
103  
104 startwarn = "4인의 기병대 전투 시작! 약 17 초내에 징표",
105  
106 shieldwallbar = "%s - 방패의 벽",
107 shieldwalltrigger = "(.*)|1이;가; 방패의 벽 효과를 얻었습니다.",
108 shieldwallwarn = "%s - 20초간 방패의 벽",
109 shieldwallwarn2 = "%s - 방패의 벽 사라짐!",
110 } end )
111  
112 L:RegisterTranslations("deDE", function() return {
113 mark_name = "Mal Alarm",
114 mark_desc = "Warnt vor den Mal Debuffs",
115  
116 shieldwall_name = "Schildwall",
117 shieldwall_desc = "Warnung vor Schildwall.",
118  
119 void_name = "Zone der Leere Warnung",
120 void_desc = "Warnt, wenn Lady Blaumeux Zone der Leere zaubert.",
121  
122 meteor_name = "Meteor Alarm",
123 meteor_desc = "Warnt, wenn Thane Meteor zaubert.",
124  
125 wrath_name = "Heiliger Zorn Alarm",
126 wrath_desc = "Warnt, wenn Sire Zeliek Heiliger Zorn zaubert.",
127  
128 markbar = "Mal",
129 markwarn1 = "Mal (%d)!",
130 markwarn2 = "Mal (%d) - 5 Sekunden",
131 marktrigger = "ist von Mal von .+ betroffen",
132  
133 voidtrigger = "Lady Blaumeux wirkt Zone der Leere.",
134 voidwarn = "Zone der Leere kommt",
135 voidbar = "Zone der Leere",
136  
137 meteortrigger = "Thane Korth'azzs Meteor trifft ",
138 meteorwarn = "Meteor!",
139 meteorbar = "Meteor",
140  
141 wrathtrigger = "Sire Zelieks Heiliger Zorn trifft ",
142 wrathwarn = "Heiliger Zorn!",
143 wrathbar = "Heiliger Zorn",
144  
145 startwarn = "Die Vier Reiter angegriffen! Mal in ~17 Sekunden",
146  
147 shieldwallbar = "%s - Schildwall",
148 shieldwalltrigger = "(.+) bekommt 'Schildwall'.",
149 shieldwallwarn = "%s - Schildwall f\195\188r 20 Sekunden",
150 shieldwallwarn2 = "%s - Schildwall Vorbei!",
151 } end )
152  
153 L:RegisterTranslations("zhCN", function() return {
154 mark_name = "标记警报",
155 mark_desc = "标记警报",
156  
157 shieldwall_name = "盾墙警报",
158 shieldwall_desc = "盾墙警报",
159  
160 void_name = "虚空领域警报",
161 void_desc = "当施放虚空领域时警报",
162  
163 meteor_name = "流星警报",
164 meteor_desc = "库尔塔兹领主的流星警报",
165  
166 wrath_name = "神圣之怒警报",
167 wrath_desc = "瑟里耶克爵士的神圣之怒警报",
168  
169 markbar = "标记 %d",
170 markwarn1 = "标记(%d)!",
171 markwarn2 = "标记(%d) - 5秒",
172  
173 marktrigger = "受到了库尔塔兹印记效果的影响。",
174  
175 voidtrigger = "女公爵布劳缪克丝施放了虚空领域。",
176 voidwarn = "5秒后虚空领域",
177 voidbar = "虚空领域",
178  
179 meteortrigger = "库尔塔兹领主的流星击中 ",
180 meteorwarn = "流星",
181 meteorbar = "流星",
182  
183 wrathtrigger = "瑟里耶克爵士的神圣之怒击中 ",
184 wrathwarn = "神圣之怒",
185 wrathbar = "神圣之怒",
186  
187 startwarn = "四骑士已激活 - ~17秒后标记",
188  
189 shieldwallbar = "%s - 盾墙",
190 shieldwalltrigger = "获得了盾墙",
191 shieldwallwarn = "%s - 20秒盾墙效果",
192 shieldwallwarn2 = "%s - 盾墙消失了!",
193 } end )
194  
195 L:RegisterTranslations("zhTW", function() return {
196 mark_name = "標記警報",
197 mark_desc = "標記警報",
198  
199 shieldwall_name = "盾牆警報",
200 shieldwall_desc = "盾牆警報",
201  
202 void_name = "虛空地區警報",
203 void_desc = "當布洛莫斯爵士施放虛空地區時警報",
204  
205 meteor_name = "隕石術警報",
206 meteor_desc = "寇斯艾茲族長的隕石術警報",
207  
208 wrath_name = "神聖之怒警報",
209 wrath_desc = "札里克爵士的神聖之怒警報",
210  
211 markbar = "標記 %d",
212 markwarn1 = "標記(%d)!",
213 markwarn2 = "標記(%d) - 5秒",
214  
215 marktrigger = "受到了庫爾塔茲印記效果的影響。",
216  
217 voidtrigger = "布洛莫斯爵士施放了虛空地區。",
218 voidwarn = "5秒後虛空地區",
219 voidbar = "虛空地區",
220  
221 meteortrigger = "寇斯艾茲族長的隕石術擊中",
222 meteorwarn = "隕石術",
223 meteorbar = "隕石術",
224  
225 wrathtrigger = "札里克爵士的神聖之怒擊中",
226 wrathwarn = "神聖之怒",
227 wrathbar = "神聖之怒",
228  
229 startwarn = "四騎士已進入戰鬥 - 17秒後標記",
230  
231 shieldwallbar = "%s - 盾牆",
232 shieldwalltrigger = "獲得了盾牆",
233 shieldwallwarn = "%s - 20秒盾牆效果",
234 shieldwallwarn2 = "%s - 盾牆消失了!",
235 } end )
236  
237 ----------------------------------
238 -- Module Declaration --
239 ----------------------------------
240  
241 BigWigsHorsemen = BigWigs:NewModule(boss)
242 BigWigsHorsemen.zonename = AceLibrary("Babble-Zone-2.2")["Naxxramas"]
243 BigWigsHorsemen.enabletrigger = { thane, mograine, zeliek, blaumeux }
244 BigWigsHorsemen.toggleoptions = {"mark", "shieldwall", -1, "meteor", "void", "wrath", "bosskill"}
245 BigWigsHorsemen.revision = tonumber(string.sub("$Revision: 16494 $", 12, -3))
246  
247 ------------------------------
248 -- Initialization --
249 ------------------------------
250  
251 function BigWigsHorsemen:OnEnable()
252 self.marks = 1
253 self.deaths = 0
254  
255 times = {}
256 started = nil
257  
258 self:RegisterEvent("PLAYER_REGEN_ENABLED", "CheckForWipe")
259 self:RegisterEvent("PLAYER_REGEN_DISABLED", "CheckForEngage")
260 self:RegisterEvent("CHAT_MSG_COMBAT_HOSTILE_DEATH")
261 self:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_CREATURE_BUFFS")
262 self:RegisterEvent("CHAT_MSG_SPELL_CREATURE_VS_CREATURE_BUFF")
263 self:RegisterEvent("CHAT_MSG_SPELL_CREATURE_VS_CREATURE_DAMAGE", "SkillEvent")
264 self:RegisterEvent("CHAT_MSG_SPELL_CREATURE_VS_PARTY_DAMAGE", "SkillEvent")
265 self:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_SELF_DAMAGE", "MarkEvent")
266 self:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_FRIENDLYPLAYER_DAMAGE", "MarkEvent")
267 self:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_PARTY_DAMAGE", "MarkEvent")
268  
269 self:RegisterEvent("BigWigs_RecvSync")
270 self:TriggerEvent("BigWigs_ThrottleSync", "HorsemenShieldWall", 3)
271 -- Upgraded to HorsemenMark2 so that we don't get blocked by throttled syncs
272 -- from older revisions.
273 self:TriggerEvent("BigWigs_ThrottleSync", "HorsemenMark2", 8)
274 self:TriggerEvent("BigWigs_ThrottleSync", "HorsemenVoid", 5)
275 self:TriggerEvent("BigWigs_ThrottleSync", "HorsemenWrath", 5)
276 self:TriggerEvent("BigWigs_ThrottleSync", "HorsemenMeteor", 5)
277 end
278  
279 function BigWigsHorsemen:MarkEvent( msg )
280 if string.find(msg, L["marktrigger"]) then
281 local t = GetTime()
282 if not times["mark"] or (times["mark"] and (times["mark"] + 8) < t) then
283 self:TriggerEvent("BigWigs_SendSync", "HorsemenMark2 "..tostring(self.marks + 1))
284 times["mark"] = t
285 end
286 end
287 end
288  
289 function BigWigsHorsemen:SkillEvent( msg )
290 local t = GetTime()
291 if string.find(msg, L["meteortrigger"]) then
292 if not times["meteor"] or (times["meteor"] and (times["meteor"] + 8) < t) then
293 self:TriggerEvent("BigWigs_SendSync", "HorsemenMeteor")
294 times["meteor"] = t
295 end
296 elseif string.find(msg, L["wrathtrigger"]) then
297 if not times["wrath"] or (times["wrath"] and (times["wrath"] + 8) < t) then
298 self:TriggerEvent("BigWigs_SendSync", "HorsemenWrath")
299 times["wrath"] = t
300 end
301 elseif msg == L["voidtrigger"] then
302 if not times["void"] or (times["void"] and (times["void"] + 8) < t) then
303 self:TriggerEvent("BigWigs_SendSync", "HorsemenVoid" )
304 times["void"] = t
305 end
306 end
307 end
308  
309 function BigWigsHorsemen:BigWigs_RecvSync(sync, rest)
310 if sync == self:GetEngageSync() and rest and rest == boss and not started then
311 started = true
312 if self:IsEventRegistered("PLAYER_REGEN_DISABLED") then
313 self:UnregisterEvent("PLAYER_REGEN_DISABLED")
314 end
315 if self.db.profile.mark then
316 self:TriggerEvent("BigWigs_Message", L["startwarn"], "Attention")
317 self:TriggerEvent("BigWigs_StartBar", self, string.format( L["markbar"], self.marks), 17, "Interface\\Icons\\Spell_Shadow_CurseOfAchimonde")
318 self:ScheduleEvent("bwhorsemenmark2", "BigWigs_Message", 12, string.format( L["markwarn2"], self.marks ), "Urgent")
319 end
320 elseif sync == "HorsemenMark2" and rest then
321 rest = tonumber(rest)
322 if rest == nil then return end
323 if rest == (self.marks + 1) then
324 if self.db.profile.mark then
325 self:TriggerEvent("BigWigs_Message", string.format( L["markwarn1"], self.marks ), "Important")
326 end
327 self.marks = self.marks + 1
328 if self.db.profile.mark then
329 self:TriggerEvent("BigWigs_StartBar", self, string.format( L["markbar"], self.marks ), 12, "Interface\\Icons\\Spell_Shadow_CurseOfAchimonde")
330 self:ScheduleEvent("bwhorsemenmark2", "BigWigs_Message", 7, string.format( L["markwarn2"], self.marks ), "Urgent")
331 end
332 end
333 elseif sync == "HorsemenMeteor" then
334 if self.db.profile.meteor then
335 self:TriggerEvent("BigWigs_Message", L["meteorwarn"], "Important")
336 self:TriggerEvent("BigWigs_StartBar", self, L["meteorbar"], 12, "Interface\\Icons\\Spell_Fire_Fireball02")
337 end
338 elseif sync == "HorsemenWrath" then
339 if self.db.profile.wrath then
340 self:TriggerEvent("BigWigs_Message", L["wrathwarn"], "Important")
341 self:TriggerEvent("BigWigs_StartBar", self, L["wrathbar"], 12, "Interface\\Icons\\Spell_Holy_Excorcism")
342 end
343 elseif sync == "HorsemenVoid" then
344 if self.db.profile.void then
345 self:TriggerEvent("BigWigs_Message", L["voidwarn"], "Important")
346 self:TriggerEvent("BigWigs_StartBar", self, L["voidbar"], 12, "Interface\\Icons\\Spell_Frost_IceStorm")
347 end
348 elseif sync == "HorsemenShieldWall" and self.db.profile.shieldwall and rest then
349 self:TriggerEvent("BigWigs_Message", string.format(L["shieldwallwarn"], rest), "Attention")
350 self:ScheduleEvent("BigWigs_Message", 20, string.format(L["shieldwallwarn2"], rest), "Positive")
351 self:TriggerEvent("BigWigs_StartBar", self, string.format(L["shieldwallbar"], rest), 20, "Interface\\Icons\\Ability_Warrior_ShieldWall")
352 end
353 end
354  
355 function BigWigsHorsemen:CHAT_MSG_SPELL_PERIODIC_CREATURE_BUFFS( msg )
356 local _,_, mob = string.find(msg, L["shieldwalltrigger"])
357 if mob then self:TriggerEvent("BigWigs_SendSync", "HorsemenShieldWall "..mob) end
358 end
359  
360 function BigWigsHorsemen:CHAT_MSG_SPELL_CREATURE_VS_CREATURE_BUFF(msg)
361 if msg == L["voidtrigger"] then
362 self:TriggerEvent("BigWigs_SendSync", "HorsemenVoid" )
363 end
364 end
365  
366 function BigWigsHorsemen:CHAT_MSG_COMBAT_HOSTILE_DEATH( msg )
367 if msg == string.format(UNITDIESOTHER, thane ) or
368 msg == string.format(UNITDIESOTHER, zeliek) or
369 msg == string.format(UNITDIESOTHER, mograine) or
370 msg == string.format(UNITDIESOTHER, blaumeux) then
371 self.deaths = self.deaths + 1
372 if self.deaths == 4 then
373 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
374 self.core:ToggleModuleActive(self, false)
375 end
376 end
377 end
378