vanilla-wow-addons – Blame information for rev 1
?pathlinks?
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 |