vanilla-wow-addons – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 ----------------------
2 -- Loading Function --
3 ----------------------
4  
5 local myClass
6  
7 -- XPerl_SetFrameSides
8 function XPerl_SetFrameSides()
9 if (XPerl_Assists_Frame.LastSetView and XPerl_Assists_Frame.LastSetView[1] == XPerlConfigHelper.AssistsFrame and XPerl_Assists_Frame.LastSetView[2] == XPerlConfigHelper.TargettingFrame) then
10 -- Frames the same from last time
11 return
12 end
13  
14 if (XPerlConfigHelper.AssistsFrame == 1 or XPerlConfigHelper.TargettingFrame == 1) then
15 XPerl_Assists_Frame:Show()
16  
17 XPerl_Target_Targetting_ScrollFrame:ClearAllPoints()
18 XPerl_Target_Assists_ScrollFrame:ClearAllPoints()
19  
20 if (XPerlConfigHelper.AssistsFrame == 1 and XPerlConfigHelper.TargettingFrame == 1) then
21 XPerl_Target_Targetting_ScrollFrame:SetPoint("TOPLEFT", 4, -5)
22 XPerl_Target_Targetting_ScrollFrame:SetPoint("BOTTOMRIGHT", XPerl_Assists_Frame, "BOTTOM", -1, 5)
23 XPerl_Target_Targetting_ScrollFrame:Show()
24  
25 XPerl_Target_Assists_ScrollFrame:SetPoint("TOPLEFT", XPerl_Assists_Frame, "TOP", 0, -5)
26 XPerl_Target_Assists_ScrollFrame:SetPoint("BOTTOMRIGHT", -4, 5)
27 XPerl_Target_Assists_ScrollFrame:Show()
28  
29 XPerlScrollSeperator:Show()
30 XPerlScrollSeperator:ClearAllPoints()
31 XPerlScrollSeperator:SetPoint("TOPLEFT", XPerl_Target_Targetting_ScrollFrame, "TOPRIGHT", 0, 0)
32 XPerlScrollSeperator:SetPoint("BOTTOMRIGHT", XPerl_Target_Assists_ScrollFrame, "BOTTOMLEFT", 0, 0)
33 else
34 XPerlScrollSeperator:Hide()
35  
36 if (XPerlConfigHelper.AssistsFrame == 1) then
37 XPerl_Target_Assists_ScrollFrame:SetPoint("TOPLEFT", 4, -5)
38 XPerl_Target_Assists_ScrollFrame:SetPoint("BOTTOMRIGHT", -4, 5)
39 XPerl_Target_Assists_ScrollFrame:Show()
40 XPerl_Target_Targetting_ScrollFrame:Hide()
41 else
42 XPerl_Target_Targetting_ScrollFrame:SetPoint("TOPLEFT", 4, -5)
43 XPerl_Target_Targetting_ScrollFrame:SetPoint("BOTTOMRIGHT", -4, 5)
44 XPerl_Target_Targetting_ScrollFrame:Show()
45 XPerl_Target_Assists_ScrollFrame:Hide()
46 end
47 end
48 else
49 XPerl_Assists_Frame:Hide()
50 end
51  
52 XPerl_Assists_Frame.LastSetView = {XPerlConfigHelper.AssistsFrame, XPerlConfigHelper.TargettingFrame}
53 end
54  
55 -- ToggleAssistsFrame()
56 function XPerl_ToggleAssistsFrame(param)
57 if (param == "assists") then
58 if (XPerlConfigHelper.AssistsFrame == 1) then
59 XPerlConfigHelper.AssistsFrame = 0
60 else
61 XPerlConfigHelper.AssistsFrame = 1
62 end
63 else
64 if (XPerlConfigHelper.TargettingFrame == 1) then
65 XPerlConfigHelper.TargettingFrame = 0
66 else
67 XPerlConfigHelper.TargettingFrame = 1
68 end
69 end
70 end
71  
72 -- XPerl_AssistsView_Close
73 function XPerl_AssistsView_Open()
74 XPerlConfigHelper.AssistsFrame = 1
75 XPerlConfigHelper.TargettingFrame = 1
76 XPerl_SetFrameSides()
77 return true
78 end
79  
80 function XPerl_AssistsView_Close()
81 XPerlConfigHelper.AssistsFrame = 0
82 XPerlConfigHelper.TargettingFrame = 0
83 XPerl_SetFrameSides()
84 end
85  
86 -- SortByClass(t1, t2)
87 local function SortByClass(t1, t2)
88 if (t1[2] == t2[2]) then
89 return t1[1] < t2[1]
90 else
91 local t1c = t1[2]
92 local t2c = t2[2]
93 if (t1c == myClass) then
94 t1c = "A"..t1c
95 elseif (t1c ~= "") then
96 t1c = "B"..t1c
97 else
98 t1c = "Z"
99 end
100 if (t2c == myClass) then
101 t2c = "A"..t2c
102 elseif (t2c ~= "") then
103 t2c = "B"..t2c
104 else
105 t1c = "Z"
106 end
107  
108 return t1c..t1[1] < t2c..t2[1]
109 end
110 end
111  
112 -- XPerl_MakeAssistsString
113 function XPerl_MakeAssistsString(List, title)
114 local text = title
115  
116 if (List ~= nil) then
117 local lastClass
118 local any = false
119 local nAssists = getn(List)
120 if (nAssists > 0) then
121 text = text.." "..nAssists
122 end
123 text = text.."\13"
124  
125 sort(List, SortByClass)
126  
127 for i,unit in pairs(List) do
128 if (not any) then
129 if (unit[2] == "") then
130 text = text.."|c00FF0000"..unit[1]
131 else
132 text = text..XPerlColourTable[unit[2]]..unit[1]
133 end
134 lastClass, any = unit[2], true
135 else
136 if (lastClass) then
137 if (unit[2] == "" or lastClass ~= unit[2]) then
138 lastClass = unit[2]
139  
140 if (unit[2] == "") then
141 text = text.."\r|c00FF0000"..unit[1]
142 else
143 text = text.."\r"..XPerlColourTable[unit[2]]..unit[1]
144 end
145 else
146 text = text.." "..unit[1]
147 end
148 else
149 text = text.." "..unit[1]
150  
151 lastClass = unit[2]
152 end
153 end
154 end
155 end
156  
157 return (text)
158 end
159  
160 -- FillList
161 local function FillList(List, cFrame, title)
162 local text = XPerl_MakeAssistsString(List, title)
163 getglobal("XPerl_Target_Assists_ScrollChild_"..cFrame.."Text"):SetText(text)
164 end
165  
166 -- XPerl_ShowAssists()
167 function XPerl_ShowAssists()
168 if (XPerlConfigHelper.AssistsFrame == 1 or XPerlConfigHelper.TargettingFrame == 1) then
169 if (XPerlConfigHelper.AssistsFrame == 1 and XPerl_Assists_Frame.assists ~= nil) then
170 FillList(XPerl_Assists_Frame.assists, "Assists", XPERL_TOOLTIP_ASSISTING)
171 end
172  
173 if (XPerlConfigHelper.TargettingFrame == 1 and XPerl_Assists_Frame.targetting ~= nil) then
174 local title
175 if (getn(XPerl_Assists_Frame.targetting) > 0 and XPerl_Assists_Frame.targetting[1][2] == "") then
176 title = XPERL_TOOLTIP_ENEMYONME
177 else
178 if (XPerlConfigHelper.TargetCountersSelf == 0) then
179 title = XPERL_TOOLTIP_ALLONME
180 else
181 title = XPERL_TOOLTIP_HEALERS
182 end
183 end
184  
185 FillList(XPerl_Assists_Frame.targetting, "Targetting", title)
186 end
187 end
188 end
189  
190 -- XPerl_Assists_MouseDown
191 function XPerl_Assists_MouseDown(button,param)
192 if (button == "LeftButton") then
193 if (not XPerlConfigHelper or not XPerlConfigHelper.AssistPinned or (IsAltKeyDown() and IsControlKeyDown() and IsShiftKeyDown())) then
194 if (param and (param == "TOPLEFT" or param == "BOTTOMLEFT" or param == "BOTTOMRIGHT")) then
195 XPerl_Assists_Frame:StartSizing(param)
196 else
197 XPerl_Assists_Frame:StartMoving()
198 end
199 end
200  
201 elseif (button == "RightButton") then
202 if (strfind (this:GetName(), "XPerl_Target_Assists_ScrollChild_Targetting")) then
203 param = "targetFrame"
204 end
205  
206 if (param and param == "targetFrame") then
207 if (XPerlConfigHelper.TargetCountersSelf == 1) then
208 XPerlConfigHelper.TargetCountersSelf = 0
209 else
210 XPerlConfigHelper.TargetCountersSelf = 1
211 end
212 end
213 end
214 end
215  
216 -- XPerl_Assists_MouseUp
217 function XPerl_Assists_MouseUp(button)
218 XPerl_Assists_Frame:StopMovingOrSizing()
219 end
220  
221 -- Events
222 function XPerl_Assists_OnEvent()
223 if (event == "PLAYER_TARGET_CHANGED") then
224 XPerl_UpdateAssists()
225 XPerl_ShowAssists()
226 end
227 end
228  
229 -- XPerl_Assists_OnUpdate
230 local UpdateTime = 0
231 function XPerl_Assists_OnUpdate()
232  
233 UpdateTime = arg1 + UpdateTime
234 if (UpdateTime >= 0.2) then
235 XPerl_UpdateAssists()
236 XPerl_ShowAssists()
237 UpdateTime = 0
238 end
239 end
240  
241 ---------------------------------
242 -- Targetting counters --
243 ---------------------------------
244  
245 local assists
246 local targetting
247  
248 -- XPerl_FoundEnemyBefore
249 local function XPerl_FoundEnemyBefore(FoundEnemy, name)
250 for previous in pairs(FoundEnemy) do
251 if (UnitIsUnit(previous.."target", name.."target")) then
252 return true
253 end
254 end
255 return false
256 end
257  
258 -- XPerl_AddEnemy
259 local function XPerl_AddEnemy(anyEnemy, FoundEnemy, name)
260 if (UnitIsUnit("player", name.."targettarget")) then
261 if (not XPerl_FoundEnemyBefore(FoundEnemy, name)) then
262 FoundEnemy[name] = true
263 tinsert(targetting, {UnitName(name.."target"), ""})
264 return true
265 end
266  
267 -- 1.8.3 Added check to see if mob is targetting our target, and add to that list
268 elseif (UnitIsUnit("target", name.."targettarget")) then
269 -- We can still use the FoundEnemy list, because it's not too important if
270 -- we're targetting ourself and the mob doesn't show on both self and target lists
271 if (not XPerl_FoundEnemyBefore(FoundEnemy, name)) then
272 FoundEnemy[name] = true
273 tinsert(assists, {UnitName(name.."target"), ""})
274 return true
275 end
276 end
277  
278 return false
279 end
280  
281 local HealerClasses = {PRIEST = true, SHAMAN = true, PALADIN = true, DRUID = true}
282  
283 -- XPerl_UpdateAssists
284 function XPerl_UpdateAssists()
285  
286 if (XPerlConfigHelper.TargetCounters == 0) then
287 if (XPerl_Target_AssistFrame) then XPerl_Target_AssistFrame:Hide(); end
288 if (XPerl_Player_TargettingFrame) then XPerl_Player_TargettingFrame:Hide(); end
289 return
290 end
291  
292 local selfFlag = XPerlConfigHelper.TargetCountersSelf == 1
293 local enemyFlag = XPerlConfigHelper.TargetCountersEnemy == 1
294 local assistCount, targettingCount, anyEnemy = 0, 0, false
295 local start,i,total,prefix,name,petname,raidMembers
296  
297 local FoundEnemy = {}
298 raidMembers = 0
299  
300 if (UnitInRaid("player")) then
301 start, prefix, total = 1, "raid", GetNumRaidMembers()
302 else
303 start, prefix, total = 0, "party", 4
304 end
305  
306 assists, targetting = {}, {}
307 XPerl_Assists_Frame.assists, XPerl_Assists_Frame.targetting = assists, targetting
308  
309 local targetname = UnitName("target")
310 for i = start,total do
311 if (i == 0) then
312 name, petname = "player", "pet"
313 else
314 name, petname = prefix..i, prefix.."pet"..i
315 end
316  
317 if (UnitExists(name) and not UnitIsDeadOrGhost(name)) then
318 local class, engClass = UnitClass(name)
319 raidMembers = raidMembers + 1
320  
321 local hasPet = UnitExists(petname)
322  
323 if (targetname) then
324 if (UnitIsUnit("target", name.."target")) then
325 assistCount = assistCount + 1
326 tinsert (assists, {UnitName(name), engClass})
327 end
328 if (hasPet and UnitIsUnit("target", petname.."target")) then
329 assistCount = assistCount + 1
330 tinsert (assists, {string.format(XPERL_TOOLTIP_PET, UnitName(name)), "pet"})
331 end
332 end
333  
334 -- 0 for Anyone, 1 for Healers
335 if (not selfFlag or HealerClasses[engClass]) then
336 if (UnitIsUnit("player", name.."target")) then
337 targettingCount = targettingCount + 1
338 tinsert(targetting, {UnitName(name), engClass})
339 end
340 end
341  
342 -- Count enemy targetting us?
343 if (enemyFlag) then
344 if (not UnitIsFriend("player", name.."target")) then
345 if (XPerl_AddEnemy(anyEnemy, FoundEnemy, name)) then
346 anyEnemy = true
347 targettingCount = targettingCount + 1
348 end
349 if (hasPet) then
350 if (XPerl_AddEnemy(anyEnemy, FoundEnemy, petname)) then
351 anyEnemy = true
352 targettingCount = targettingCount + 1
353 end
354 end
355 end
356 end
357 end
358 end
359  
360 if (UnitExists("mouseover") and not UnitIsFriend("player", "mouseover")) then
361 if (UnitIsUnit("mouseovertarget", "player")) then
362 local foundBefore
363 for previous in pairs(FoundEnemy) do
364 if (UnitIsUnit(previous.."target", "mouseover")) then
365 foundBefore = true
366 end
367 end
368  
369 if (not foundBefore) then
370 tinsert(targetting, {UnitName("mouseover"), ""})
371 anyEnemy = true
372 targettingCount = targettingCount + 1
373 end
374 end
375 end
376  
377 if (XPerl_Player_TargettingFrame) then
378 local conf = XPerlConfig or XPerlConfigHelper
379 conf = conf.BorderColour
380  
381 if (anyEnemy) then
382 XPerl_Player_TargettingFrame:SetBackdropBorderColor(1, 0.2, 0.2, conf.a)
383 else
384 XPerl_Player_TargettingFrame:SetBackdropBorderColor(conf.r, conf.g, conf.b, conf.a)
385 end
386  
387 if (targettingCount == 0) then
388 XPerl_Player_TargettingFrame:SetTextColor(1,0.5,0.5)
389 elseif (targettingCount > 5) then
390 XPerl_Player_TargettingFrame:SetTextColor(0.5,1,0.5)
391 else
392 XPerl_Player_TargettingFrame:SetTextColor(0.5,0.5,1)
393 end
394  
395 XPerl_Player_TargettingFrame:SetText(targettingCount)
396 XPerl_Player_TargettingFrame:Show()
397 end
398  
399 if (XPerl_Target_AssistFrame) then
400 if (assistCount < 2) then
401 XPerl_Target_AssistFrame:SetTextColor(1,0.5,0.5)
402 elseif (assistCount > (raidMembers / 2)) then
403 XPerl_Target_AssistFrame:SetTextColor(0.5,1,0.5)
404 else
405 XPerl_Target_AssistFrame:SetTextColor(0.5,0.5,1)
406 end
407  
408 if (targetname) then
409 XPerl_Target_AssistFrame:SetText(assistCount)
410 end
411 XPerl_Target_AssistFrame:Show()
412 end
413 end
414  
415 -- XPerl_StartAssists
416 function XPerl_StartAssists()
417 local _
418 _, myClass = UnitClass("player")
419  
420 if (not XPerlColourTable.pet) then
421 XPerlColourTable.pet = "|c008080FF"
422 end
423  
424 XPerl_SetFrameSides()
425 end