vanilla-wow-addons – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1  
2 assert( oRA, "oRA not found!")
3  
4 ------------------------------
5 -- Are you local? --
6 ------------------------------
7  
8 local L = AceLibrary("AceLocale-2.2"):new("oRALDurability")
9  
10 local compost = AceLibrary:HasInstance("Compost-2.0") and AceLibrary("Compost-2.0")
11 local function getnewtable() return compost and compost:Acquire() or {} end
12 local function reclaimtable(t) if compost then compost:Reclaim(t) end end
13  
14 ----------------------------
15 -- Localization --
16 ----------------------------
17  
18 L:RegisterTranslations("enUS", function() return {
19 ["durabilityleader"] = true,
20 ["durability"] = true,
21 ["Durability"] = true,
22 ["Leader/Durability"] = true,
23 ["Options for durability checks."] = true,
24 ["check"] = true,
25 ["Perform durability check"] = true,
26 ["Check the raid's durability."] = true,
27 ["Name"] = true,
28 ["Percent"] = true,
29 ["Broken"] = true,
30 ["Perc"] = true,
31 ["Close"] = true,
32 ["Refresh"] = true,
33 } end )
34  
35 L:RegisterTranslations("koKR", function() return {
36  
37 ["Durability"] = "내구도",
38 ["Leader/Durability"] = "공격대장/내구도",
39 ["Options for durability checks."] = "내구도 확인 설정",
40 ["Perform durability check"] = "내구도 확인 실시",
41 ["Check the raid's durability."] = "공격대원의 아이템의 내구도를 확인합니다",
42 ["Name"] = "이름",
43 ["Percent"] = "백분률",
44 ["Broken"] = "파손",
45 ["Perc"] = "백분률",
46 ["Close"] = "닫기",
47 ["Refresh"] = "갱신",
48 } end )
49  
50 L:RegisterTranslations("zhCN", function() return {
51 ["durabilityleader"] = "durabilityleader",
52 ["durability"] = "装备耐久度",
53 ["Durability"] = "装备耐久度",
54 ["Leader/Durability"] = "Leader/Durability",
55 ["Options for durability checks."] = "耐久度选项",
56 ["check"] = "检查",
57 ["Perform durability check"] = "执行耐久度检查",
58 ["Check the raid's durability."] = "检查团队耐久度",
59 ["Name"] = "姓名",
60 ["Percent"] = "百分比",
61 ["Broken"] = "损坏",
62 ["Perc"] = "百分比",
63 ["Close"] = "关闭",
64 ["Refresh"] = "刷新",
65 } end )
66  
67 L:RegisterTranslations("zhTW", function() return {
68 ["durabilityleader"] = "durabilityleader",
69 ["durability"] = "裝備耐久度",
70 ["Durability"] = "裝備耐久度",
71 ["Leader/Durability"] = "領隊/裝備耐久度",
72 ["Options for durability checks."] = "耐久度選項",
73 ["check"] = "檢查",
74 ["Perform durability check"] = "執行耐久度檢查",
75 ["Check the raid's durability."] = "檢查團隊耐久度",
76 ["Name"] = "姓名",
77 ["Percent"] = "百分比",
78 ["Broken"] = "損壞",
79 ["Perc"] = "百分比",
80 ["Close"] = "關閉",
81 ["Refresh"] = "更新",
82 } end )
83  
84 L:RegisterTranslations("frFR", function() return {
85 --["durabilityleader"] = true,
86 --["durability"] = true,
87 ["Durability"] = "Durabilit\195\169",
88 ["Leader/Durability"] = "Chef/Durabilit\195\169",
89 ["Options for durability checks."] = "Options concernant les v\195\169rifications des durabilit\195\169s.",
90 --["check"] = true,
91 ["Perform durability check"] = "V\195\169rifier les durabilit\195\169s",
92 ["Check the raid's durability."] = "V\195\169rifie les durabilit\195\169s du raid.",
93 ["Name"] = "Nom",
94 ["Percent"] = "Pourcent",
95 ["Broken"] = "Cass\195\169(s)",
96 ["Perc"] = "Pourc",
97 ["Close"] = "Fermer",
98 ["Refresh"] = "Rafra\195\174chir",
99 } end )
100  
101 ----------------------------------
102 -- Module Declaration --
103 ----------------------------------
104  
105 oRALDurability = oRA:NewModule(L["durabilityleader"])
106 oRALDurability.defaults = {
107 }
108 oRALDurability.leader = true
109 oRALDurability.name = L["Leader/Durability"]
110 oRALDurability.consoleCmd = L["durability"]
111 oRALDurability.consoleOptions = {
112 type = "group",
113 desc = L["Options for durability checks."],
114 name = L["Durability"],
115 args = {
116 [L["check"]] = {
117 type="execute", name = L["Perform durability check"],
118 desc = L["Check the raid's durability."],
119 func = function()
120 oRALDurability:PerformDurabilityCheck()
121 end,
122 disabled = function() return not oRA:IsModuleActive(oRALDurability) or not oRALDurability:IsValidRequest() end,
123 },
124 }
125 }
126  
127  
128 ------------------------------
129 -- Initialization --
130 ------------------------------
131  
132 function oRALDurability:OnEnable()
133 self.durability = getnewtable()
134 self.sorting = getnewtable()
135  
136 self.sorting[1] = L["Name"]
137 self.sorting[2] = L["Percent"]
138 self.sorting[3] = L["Broken"]
139  
140 self:SetupFrames()
141 self:RegisterCheck("DUR", "oRA_DurabilityResponse")
142  
143 self:RegisterShorthand("radur", function(item) self:PerformDurabilityCheck() end )
144 end
145  
146 function oRALDurability:OnDisable()
147 self:UnregisterAllEvents()
148  
149 self:UnregisterCheck("DUR")
150  
151 self:UnregisterShorthand("radur")
152  
153 reclaimtable( self.durability )
154 self.durability = nil
155 reclaimtable( self.sorting )
156 self.sorting = nil
157 end
158  
159  
160 --------------------
161 -- Event Handlers --
162 --------------------
163  
164 function oRALDurability:oRA_DurabilityResponse(msg, author)
165 if not self:IsValidRequest(author, true) then return end
166 msg = self:CleanMessage(msg)
167 local _,_,cur,max,broken,requestby = string.find(msg, "^DUR (%d+) (%d+) (%d+) ([^%s]+)$")
168 if cur and requestby and requestby == UnitName("player") then
169 local p = math.floor(cur / max * 100)
170 table.insert(self.durability, {author, p, broken})
171 self:UpdateScrollBar()
172 end
173 end
174  
175 ----------------------
176 -- Command handlers --
177 ----------------------
178  
179 function oRALDurability:PerformDurabilityCheck()
180 if not self:IsPromoted() then return end
181  
182 reclaimtable(self.durability)
183 self.durability = nil
184 self.durability = getnewtable()
185  
186 self:SendMessage("DURC")
187  
188 self.frames.main:Show()
189 self:UpdateScrollBar()
190 end
191  
192 -----------------------
193 -- Utility Functions --
194 -----------------------
195  
196 function oRALDurability:SetupFrames()
197 local f, t, sframe, i, j
198  
199 f, _, _ = GameFontNormal:GetFont()
200  
201 self.frames = {}
202  
203 self.frames.main = CreateFrame("Frame", "oRADurReportFrame", UIParent)
204 self.frames.main:Hide()
205 self.frames.main:SetWidth(325)
206 self.frames.main:SetHeight(350)
207 self.frames.main:EnableMouse(true)
208 self.frames.main:SetMovable(true)
209 self.frames.main:RegisterForDrag("LeftButton")
210 self.frames.main:SetScript("OnDragStart", function() this:StartMoving() end)
211 self.frames.main:SetScript("OnDragStop", function() this:StopMovingOrSizing() end)
212 self.frames.main:SetBackdrop({
213 bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background", tile = true, tileSize = 16,
214 edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", edgeSize = 16,
215 insets = {left = 4, right = 4, top = 4, bottom = 4},
216 })
217 self.frames.main:SetBackdropBorderColor(.5, .5, .5)
218 self.frames.main:SetBackdropColor(0,0,0)
219 self.frames.main:ClearAllPoints()
220 self.frames.main:SetPoint("CENTER", WorldFrame, "CENTER", 0, 0)
221  
222 self.frames.fade = self.frames.main:CreateTexture(nil, "BORDER")
223 self.frames.fade:SetWidth(319)
224 self.frames.fade:SetHeight(25)
225 self.frames.fade:SetTexture("Interface\\ChatFrame\\ChatFrameBackground")
226 self.frames.fade:SetPoint("TOP", self.frames.main, "TOP", 0, -4)
227 self.frames.fade:SetBlendMode("ADD")
228 self.frames.fade:SetGradientAlpha("VERTICAL", .1, .1, .1, 0, .25, .25, .25, 1)
229 self.frames.main.Fade = self.frames.fade
230  
231 self.frames.header = self.frames.main:CreateFontString(nil,"OVERLAY")
232 self.frames.header:SetFont(f, 14)
233 self.frames.header:SetWidth(300)
234 self.frames.header:SetText(L["Durability"])
235 self.frames.header:SetTextColor(1, .8, 0)
236 self.frames.header:ClearAllPoints()
237 self.frames.header:SetPoint("TOP", self.frames.main, "TOP", 0, -10)
238  
239 self.frames.headername = CreateFrame("Button", nil, self.frames.main)
240 self.frames.headername.owner = self
241 self.frames.headername:SetWidth(150)
242 self.frames.headername:SetHeight(16)
243 self.frames.headername:SetPoint("TOPLEFT", self.frames.main, "TOPLEFT", 10, -35)
244 self.frames.headername:SetScript("OnClick",
245 function()
246 this.owner:Sort(self.durability, 1)
247 this.owner:UpdateScrollBar()
248 end)
249  
250 self.frames.headernamehigh = self.frames.headername:CreateTexture(nil, "BORDER")
251 self.frames.headernamehigh:SetWidth(150)
252 self.frames.headernamehigh:SetHeight(16)
253 self.frames.headernamehigh:SetTexture("Interface\\ChatFrame\\ChatFrameBackground")
254 self.frames.headernamehigh:SetAllPoints(self.frames.headername)
255 self.frames.headernamehigh:SetBlendMode("ADD")
256 self.frames.headernamehigh:SetGradientAlpha("VERTICAL", .1, .08, 0, 0, .2, .16, 0, 1)
257 self.frames.headername:SetHighlightTexture(self.frames.headernamehigh)
258  
259 self.frames.headernametext = self.frames.headername:CreateFontString(nil,"OVERLAY")
260 self.frames.headernametext.owner = self
261 self.frames.headernametext:SetFont(f, 14)
262 self.frames.headernametext:SetWidth(150)
263 self.frames.headernametext:SetText(L["Name"])
264 self.frames.headernametext:SetTextColor(1, .8, 0)
265 self.frames.headernametext:ClearAllPoints()
266 self.frames.headernametext:SetJustifyH("LEFT")
267 self.frames.headernametext:SetAllPoints(self.frames.headername)
268  
269 self.frames.headerperc = CreateFrame("Button", nil, self.frames.main)
270 self.frames.headerperc.owner = self
271 self.frames.headerperc:SetWidth(70)
272 self.frames.headerperc:SetHeight(16)
273 self.frames.headerperc:SetPoint("LEFT", self.frames.headername, "RIGHT")
274 self.frames.headerperc:SetScript("OnClick",
275 function()
276 this.owner:Sort(self.durability, 2)
277 this.owner:UpdateScrollBar()
278 end)
279  
280 self.frames.headerperchigh = self.frames.headerperc:CreateTexture(nil, "BORDER")
281 self.frames.headerperchigh:SetWidth(70)
282 self.frames.headerperchigh:SetHeight(16)
283 self.frames.headerperchigh:SetTexture("Interface\\ChatFrame\\ChatFrameBackground")
284 self.frames.headerperchigh:SetAllPoints(self.frames.headerperc)
285 self.frames.headerperchigh:SetBlendMode("ADD")
286 self.frames.headerperchigh:SetGradientAlpha("VERTICAL", .1, .08, 0, 0, .2, .16, 0, 1)
287 self.frames.headerperc:SetHighlightTexture(self.frames.headerperchigh)
288  
289  
290 self.frames.headerperctext = self.frames.main:CreateFontString(nil,"OVERLAY")
291 self.frames.headerperctext:SetFont(f, 14)
292 self.frames.headerperctext:SetWidth(70)
293 self.frames.headerperctext:SetText(L["Perc"])
294 self.frames.headerperctext:SetTextColor(1, .8, 0)
295 self.frames.headerperctext:ClearAllPoints()
296 self.frames.headerperctext:SetJustifyH("LEFT")
297 self.frames.headerperctext:SetAllPoints(self.frames.headerperc)
298  
299 self.frames.headerbroken = CreateFrame("Button", nil, self.frames.main)
300 self.frames.headerbroken.owner = self
301 self.frames.headerbroken:SetWidth(60)
302 self.frames.headerbroken:SetHeight(16)
303 self.frames.headerbroken:SetPoint("LEFT", self.frames.headerperc, "RIGHT")
304 self.frames.headerbroken:SetScript("OnClick",
305 function()
306 this.owner:Sort(self.durability, 3)
307 this.owner:UpdateScrollBar()
308 end)
309  
310 self.frames.headerbrokenhigh = self.frames.headerbroken:CreateTexture(nil, "BORDER")
311 self.frames.headerbrokenhigh:SetWidth(60)
312 self.frames.headerbrokenhigh:SetHeight(16)
313 self.frames.headerbrokenhigh:SetTexture("Interface\\ChatFrame\\ChatFrameBackground")
314 self.frames.headerbrokenhigh:SetAllPoints(self.frames.headerbroken)
315 self.frames.headerbrokenhigh:SetBlendMode("ADD")
316 self.frames.headerbrokenhigh:SetGradientAlpha("VERTICAL", .1, .08, 0, 0, .2, .16, 0, 1)
317 self.frames.headerbroken:SetHighlightTexture(self.frames.headerbrokenhigh)
318  
319  
320 self.frames.headerbrokentext = self.frames.main:CreateFontString(nil,"OVERLAY")
321 self.frames.headerbrokentext.owner = self
322 self.frames.headerbrokentext:SetFont(f, 14)
323 self.frames.headerbrokentext:SetWidth(60)
324 self.frames.headerbrokentext:SetText(L["Broken"])
325 self.frames.headerbrokentext:SetTextColor(1, .8, 0)
326 self.frames.headerbrokentext:ClearAllPoints()
327 self.frames.headerbrokentext:SetJustifyH("LEFT")
328 self.frames.headerbrokentext:SetAllPoints(self.frames.headerbroken)
329  
330  
331  
332  
333 self.frames.leftbutton = CreateFrame("Button", nil, self.frames.main)
334 self.frames.leftbutton.owner = self
335 self.frames.leftbutton:SetWidth(125)
336 self.frames.leftbutton:SetHeight(32)
337 self.frames.leftbutton:SetPoint("BOTTOMRIGHT", self.frames.main, "BOTTOM", -10, 10)
338  
339 t = self.frames.leftbutton:CreateTexture()
340 t:SetWidth(125)
341 t:SetHeight(32)
342 t:SetPoint("CENTER", self.frames.leftbutton, "CENTER")
343 t:SetTexture("Interface\\Buttons\\UI-Panel-Button-Up")
344 t:SetTexCoord(0, 0.625, 0, 0.6875)
345 self.frames.leftbutton:SetNormalTexture(t)
346  
347 t = self.frames.leftbutton:CreateTexture(nil, "BACKGROUND")
348 t:SetTexture("Interface\\Buttons\\UI-Panel-Button-Down")
349 t:SetTexCoord(0, 0.625, 0, 0.6875)
350 t:SetAllPoints(self.frames.leftbutton)
351 self.frames.leftbutton:SetPushedTexture(t)
352  
353 t = self.frames.leftbutton:CreateTexture()
354 t:SetTexture("Interface\\Buttons\\UI-Panel-Button-Highlight")
355 t:SetTexCoord(0, 0.625, 0, 0.6875)
356 t:SetAllPoints(self.frames.leftbutton)
357 t:SetBlendMode("ADD")
358 self.frames.leftbutton:SetHighlightTexture(t)
359 self.frames.leftbuttontext = self.frames.leftbutton:CreateFontString(nil,"OVERLAY")
360 self.frames.leftbuttontext:SetFontObject(GameFontHighlight)
361 self.frames.leftbuttontext:SetText(L["Refresh"])
362 self.frames.leftbuttontext:SetAllPoints(self.frames.leftbutton)
363  
364 self.frames.leftbutton:SetScript("OnClick",
365 function()
366 this.owner:PerformDurabilityCheck()
367 end)
368  
369  
370  
371 self.frames.rightbutton = CreateFrame("Button", nil, self.frames.main)
372 self.frames.rightbutton.owner = self
373 self.frames.rightbutton:SetWidth(125)
374 self.frames.rightbutton:SetHeight(32)
375 self.frames.rightbutton:SetPoint("BOTTOMLEFT", self.frames.main, "BOTTOM", 10, 10)
376  
377 t = self.frames.rightbutton:CreateTexture()
378 t:SetWidth(125)
379 t:SetHeight(32)
380 t:SetPoint("CENTER", self.frames.rightbutton, "CENTER")
381 t:SetTexture("Interface\\Buttons\\UI-Panel-Button-Up")
382 t:SetTexCoord(0, 0.625, 0, 0.6875)
383 self.frames.rightbutton:SetNormalTexture(t)
384  
385 t = self.frames.rightbutton:CreateTexture(nil, "BACKGROUND")
386 t:SetTexture("Interface\\Buttons\\UI-Panel-Button-Down")
387 t:SetTexCoord(0, 0.625, 0, 0.6875)
388 t:SetAllPoints(self.frames.rightbutton)
389 self.frames.rightbutton:SetPushedTexture(t)
390  
391 t = self.frames.rightbutton:CreateTexture()
392 t:SetTexture("Interface\\Buttons\\UI-Panel-Button-Highlight")
393 t:SetTexCoord(0, 0.625, 0, 0.6875)
394 t:SetAllPoints(self.frames.rightbutton)
395 t:SetBlendMode("ADD")
396 self.frames.rightbutton:SetHighlightTexture(t)
397 self.frames.rightbuttontext = self.frames.rightbutton:CreateFontString(nil,"OVERLAY")
398 self.frames.rightbuttontext:SetFontObject(GameFontHighlight)
399 self.frames.rightbuttontext:SetText(L["Close"])
400 self.frames.rightbuttontext:SetAllPoints(self.frames.rightbutton)
401  
402 self.frames.rightbutton:SetScript("OnClick",
403 function()
404 this.owner.frames.main:Hide()
405 end)
406  
407  
408 self.frames.entry = {}
409 self.frames.entry[1] = self:ScrollEntryFrame(1)
410 self.frames.entry[1]:SetPoint("TOPLEFT", self.frames.main, "TOPLEFT", 10, -55 )
411  
412 for i=2, 15 do
413 j = i - 1
414 self.frames.entry[i] = self:ScrollEntryFrame()
415 self.frames.entry[i]:SetPoint("TOPLEFT", self.frames.entry[j], "BOTTOMLEFT")
416 end
417  
418  
419 self.frames.sframe = CreateFrame("ScrollFrame", "oRADurabilityScrollFrame", self.frames.main, "FauxScrollFrameTemplate")
420 self.frames.sframe.owner = self
421 self.frames.sframe:SetParent(self.frames.main)
422 self.frames.sframe:SetWidth(285)
423 self.frames.sframe:SetHeight(240)
424 self.frames.sframe:SetPoint("TOPLEFT", self.frames.main, "TOPLEFT", 5, -55)
425  
426 self.frames.sframe:SetScript("OnVerticalScroll",
427 function()
428 FauxScrollFrame_OnVerticalScroll(16, function() this.owner:UpdateScrollBar() end)
429 end )
430  
431 end
432  
433 function oRALDurability:ScrollEntryFrame()
434 local f = CreateFrame("Button", nil, self.frames.main )
435 f:SetWidth(240)
436 f:SetHeight(16)
437  
438 f.textname = f:CreateFontString(nil,"ARTWORK")
439 f.textname:SetFontObject(GameFontHighlight)
440 f.textname:SetWidth(150)
441 f.textname:SetHeight(16)
442 f.textname:SetJustifyH("LEFT")
443 f.textname:SetNonSpaceWrap(false)
444 f.textname:ClearAllPoints()
445 f.textname:SetPoint( "LEFT", f, "LEFT")
446 f.textname:SetTextColor(1,1,1)
447 f.textname:SetText("Name")
448  
449 f.textperc = f:CreateFontString(nil,"ARTWORK")
450 f.textperc:SetFontObject(GameFontHighlight)
451 f.textperc:SetWidth(70)
452 f.textperc:SetHeight(16)
453 f.textperc:SetJustifyH("LEFT")
454 f.textperc:SetNonSpaceWrap(false)
455 f.textperc:ClearAllPoints()
456 f.textperc:SetPoint("LEFT", f.textname, "RIGHT")
457 f.textperc:SetTextColor(1,1,1)
458 f.textperc:SetText("12%")
459  
460 f.textbroken = f:CreateFontString(nil,"ARTWORK")
461 f.textbroken:SetFontObject(GameFontHighlight)
462 f.textbroken:SetWidth(60)
463 f.textbroken:SetHeight(16)
464 f.textbroken:SetJustifyH("LEFT")
465 f.textbroken:SetNonSpaceWrap(false)
466 f.textbroken:ClearAllPoints()
467 f.textbroken:SetPoint("LEFT", f.textperc, "RIGHT")
468 f.textbroken:SetTextColor(1,1,1)
469 f.textbroken:SetText("3")
470  
471 return f
472 end
473  
474 function oRALDurability:UpdateScrollBar()
475 local i,j
476 local entries = table.getn(self.durability)
477 FauxScrollFrame_Update(self.frames.sframe, entries, 15, 16)
478  
479 for i = 1, 15 do
480 j = i + FauxScrollFrame_GetOffset(self.frames.sframe)
481  
482 if j <= entries then
483 self.frames.entry[i].textname:SetText(self.durability[j][1])
484 self.frames.entry[i].textperc:SetText(self.durability[j][2].."%")
485 self.frames.entry[i].textbroken:SetText(self.durability[j][3])
486 self.frames.entry[i]:Show()
487 else
488 self.frames.entry[i]:Hide()
489 end
490 end
491  
492 end
493  
494  
495  
496 function oRALDurability:Sort(tbl, sortBy)
497 if( sortBy == 2 or sortBy == 1 ) then
498 --percent, lowest to highest
499 table.sort(tbl,
500 function(t1, t2)
501 if (t1[sortBy] == t2[sortBy] ) then
502 return t1[1] > t2[1]
503 else
504 return t1[sortBy] < t2[sortBy]
505 end
506 end
507 )
508 else
509 --broken, highest to lowest
510 table.sort(tbl,
511 function(t1, t2)
512 if (t1[sortBy] == t2[sortBy] ) then
513 return t1[1] < t2[1]
514 else
515 return t1[sortBy] > t2[sortBy]
516 end
517 end
518 )
519 end
520 end