vanilla-wow-addons – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 local XPerl_Player_Events = {}
2  
3 ----------------------
4 -- Loading Function --
5 ----------------------
6 function XPerl_Player_OnLoad()
7  
8 -- Events
9 CombatFeedback_Initialize(XPerl_PlayerHitIndicator, 30)
10 this:RegisterEvent("PLAYER_ENTERING_WORLD")
11 this:RegisterEvent("PLAYER_LEAVING_WORLD")
12 this:RegisterEvent("VARIABLES_LOADED")
13  
14 XPerl_Player_StatsFrame_DruidBar:SetHeight(1)
15 XPerl_Player_StatsFrame_DruidBar:Hide()
16  
17 --XPerl_Player.PlayerFlash = 0
18 XPerl_Player.EnergyTime = 0
19 XPerl_Player.EnergyLast = 0
20  
21 -- Set here to reduce amount of function calls made - I know it's not much, but we're talking about saving the Universe here!
22 -- ... cough
23 this:SetScript("OnUpdate", XPerl_Player_OnUpdate)
24 this:SetScript("OnEvent", XPerl_Player_OnEvent)
25 this:SetScript("OnShow", XPerl_Player_UpdatePortrait)
26  
27 this.time = 0
28  
29 XPerl_RegisterHighlight(XPerl_Player_CastClickOverlay, 3)
30 XPerl_RegisterPerlFrames(XPerl_Player, {"NameFrame", "StatsFrame", "LevelFrame", "PortraitFrame", "GroupFrame"})
31  
32 this.FlashFrames = {XPerl_Player_PortraitFrame, XPerl_Player_NameFrame,
33 XPerl_Player_LevelFrame, XPerl_Player_StatsFrame}
34 end
35  
36 -------------------------
37 -- The Update Function --
38 -------------------------
39  
40 local function XPerl_Player_CombatFlash(elapsed, argNew, argGreen)
41 if (XPerl_CombatFlashSet (elapsed, XPerl_Player, argNew, argGreen)) then
42 XPerl_CombatFlashSetFrames(XPerl_Player)
43 end
44 end
45  
46 function XPerl_Player_UpdatePortrait()
47 if (XPerlConfig.ShowPlayerPortrait == 1) then
48 if (XPerlConfig.ShowPlayerPortrait3D == 1) then
49 XPerl_Player_PortraitFrame_Portrait:Hide()
50 XPerl_Player_PortraitFrame_Portrait3D:Show()
51 XPerlSetPortrait3D(XPerl_Player_PortraitFrame_Portrait3D, "player")
52 else
53 XPerl_Player_PortraitFrame_Portrait3D.last3DTime = nil
54 XPerl_Player_PortraitFrame_Portrait:Show()
55 XPerl_Player_PortraitFrame_Portrait3D:Hide()
56 SetPortraitTexture(XPerl_Player_PortraitFrame_Portrait, "player")
57 end
58 end
59 end
60  
61 -- XPerl_Player_UpdateManaType
62 local function XPerl_Player_UpdateManaType()
63 XPerl_SetManaBarType("player", XPerl_Player_StatsFrame_ManaBar, XPerl_Player_StatsFrame_ManaBarBG)
64  
65 if (UnitPowerType("player") == 3) then
66 XPerl_Player.EnergyEnabled = true
67 else
68 XPerl_Player.EnergyEnabled = nil
69 end
70 XPerl_Player_TickerShowHide()
71 end
72  
73 -- XPerl_Player_UpdateLeader()
74 function XPerl_Player_UpdateLeader()
75 if (IsPartyLeader()) then
76 XPerl_Player_NameFrame_LeaderIcon:Show()
77 else
78 XPerl_Player_NameFrame_LeaderIcon:Hide()
79 end
80  
81 if (XPerlConfig.ShowPartyNumber == 1 and UnitInRaid("player")) then
82 for i = 1,GetNumRaidMembers() do
83 local name, rank, subgroup = GetRaidRosterInfo(i)
84 if (name == UnitName("player")) then
85 XPerl_Player_GroupFrameGroup:SetText(string.format(XPERL_RAID_GROUP, subgroup))
86 XPerl_Player_GroupFrame:Show()
87 return
88 end
89 end
90 end
91  
92 XPerl_Player_GroupFrame:Hide()
93 end
94  
95 -- XPerl_Player_UpdateMasterLooter()
96 local function XPerl_Player_UpdateMasterLooter()
97 local method, index = GetLootMethod()
98  
99 if (method == "master" and index == 0) then
100 XPerl_Player_NameFrame_MasterIcon:Show()
101 else
102 XPerl_Player_NameFrame_MasterIcon:Hide()
103 end
104 end
105  
106 -- XPerl_Player_UpdateName()
107 local function XPerl_Player_UpdateName()
108 XPerl_Player_NameFrame_NameBarText:SetText(UnitName("player"))
109 end
110  
111 -- XPerl_Player_UpdateRep
112 local function XPerl_Player_UpdateRep()
113 local name, reaction, min, max, value = GetWatchedFactionInfo()
114 local color
115  
116 if (name) then
117 color = FACTION_BAR_COLORS[reaction]
118 else
119 name = "none watched"
120 max = 1
121 min = 0
122 value = 0
123 color = FACTION_BAR_COLORS[4]
124 end
125  
126 value = value - min
127 max = max - min
128 min = 0
129  
130 XPerl_Player_StatsFrame_XPRestBar:SetMinMaxValues(0, 1)
131 XPerl_Player_StatsFrame_XPRestBar:SetValue(0)
132  
133 XPerl_Player_StatsFrame_XPBar:SetMinMaxValues(min, max)
134 XPerl_Player_StatsFrame_XPBar:SetValue(value)
135  
136 XPerl_Player_StatsFrame_XPBar:SetStatusBarColor(color.r, color.g, color.b, 1)
137 XPerl_Player_StatsFrame_XPBarBG:SetVertexColor(color.r, color.g, color.b, 0.25)
138  
139 local perc = (value * 100) / max
140 XPerl_Player_StatsFrame_XPBarPercent:SetText(string.format("%.1f%%", perc))
141 XPerl_Player_StatsFrame_XPBarText:SetText(name)
142 end
143  
144 -- XPerl_Player_UpdateXP
145 local function XPerl_Player_UpdateXP()
146 if (UnitLevel("player") == MAX_PLAYER_LEVEL) then
147 XPerl_Player_UpdateRep()
148 return
149 end
150  
151 local playerxp = UnitXP("player")
152 local playerxpmax = UnitXPMax("player")
153 local playerxprest = GetXPExhaustion() or 0
154 XPerl_Player_StatsFrame_XPBar:SetMinMaxValues(0, playerxpmax)
155 XPerl_Player_StatsFrame_XPRestBar:SetMinMaxValues(0, playerxpmax)
156 XPerl_Player_StatsFrame_XPBar:SetValue(playerxp)
157 local xptext
158  
159 if (playerxpmax > 10000) then
160 xptext = string.format("%.0fK/%.0fK", playerxp / 1000, playerxpmax / 1000)
161 else
162 xptext = playerxp.."/"..playerxpmax
163 end
164  
165 if (playerxprest > 0) then
166 if (playerxpmax > 10000) then
167 xptext = xptext .. string.format("(+%.0fK)", playerxprest / 1000)
168 else
169 xptext = xptext .. string.format("(+%d)", playerxprest)
170 end
171  
172 color = {r = 0.3, g = 0.3, b = 1}
173 else
174 color = {r = 0.6, g = 0, b = 0.6}
175 end
176  
177 XPerl_Player_StatsFrame_XPRestBar:SetValue(playerxp + playerxprest)
178 XPerl_Player_StatsFrame_XPBar:SetStatusBarColor(color.r, color.g, color.b, 1)
179 XPerl_Player_StatsFrame_XPRestBar:SetStatusBarColor(color.r, color.g, color.b, 0.5)
180 XPerl_Player_StatsFrame_XPBarBG:SetVertexColor(color.r, color.g, color.b, 0.25)
181  
182 XPerl_Player_StatsFrame_XPBarText:SetText(xptext)
183  
184 local xppercenttext=((playerxp * 100.0) / playerxpmax)
185 xppercenttext=string.format("%3.0f", xppercenttext)
186 XPerl_Player_StatsFrame_XPBarPercent:SetText(xppercenttext.."%")
187 end
188  
189 -- XPerl_Player_UpdateCombat
190 local function XPerl_Player_UpdateCombat()
191 if (UnitAffectingCombat("player")) then
192 XPerl_Player_NameFrame_NameBarText:SetTextColor(1,0,0)
193 XPerl_Player_NameFrame_ActivityStatus:SetTexCoord(0.5, 1.0, 0.0, 0.5)
194 XPerl_Player_NameFrame_ActivityStatus:Show()
195 else
196 if (UnitIsPVP("player")) then
197 XPerl_Player_NameFrame_NameBarText:SetTextColor(0,1,0)
198 else
199 XPerl_ColourFriendlyUnit(XPerl_Player_NameFrame_NameBarText, "player")
200 end
201  
202 if (IsResting()) then
203 XPerl_Player_NameFrame_ActivityStatus:SetTexCoord(0, 0.5, 0.0, 0.5)
204 XPerl_Player_NameFrame_ActivityStatus:Show()
205 else
206 XPerl_Player_NameFrame_ActivityStatus:Hide()
207 end
208 end
209  
210 --if (XPerl_Player_Pet) then
211 -- XPerl_Player_Pet_UpdateCombat()
212 --end
213 end
214  
215 -- XPerl_Player_UpdatePVP
216 local function XPerl_Player_UpdatePVP()
217 local playerrankname, playerrank=GetPVPRankInfo(UnitPVPRank("player"), "player")
218 if (playerrank and XPerlConfig.ShowPlayerPVPRank==1) then
219 XPerl_Player_NameFrame_PVPRankIcon:Show()
220 if (playerrank==0) then
221 XPerl_Player_NameFrame_PVPRankIcon:Hide()
222 else
223 XPerl_Player_NameFrame_PVPRankIcon:SetTexture(string.format("Interface\\PVPRankBadges\\PVPRank%02d", playerrank))
224 end
225 else
226 XPerl_Player_NameFrame_PVPRankIcon:Hide()
227 end
228  
229 if (XPerlConfig.ShowPlayerClassIcon == 1) then
230 local _, PlayerClass = UnitClass("player")
231 local r, l, t, b = XPerl_ClassPos(PlayerClass)
232 XPerl_Player_ClassTexture:SetTexCoord(r, l, t, b)
233 end
234  
235 -- PVP Status settings
236 if (UnitAffectingCombat("player")) then
237 XPerl_Player_NameFrame_NameBarText:SetTextColor(1,0,0)
238 elseif (UnitIsPVP("player")) then
239 XPerl_Player_NameFrame_NameBarText:SetTextColor(0,1,0);
240 if (XPerlConfig.ShowPlayerPVP == 1) then
241 XPerl_Player_NameFrame_PVPStatus:Show();
242 XPerl_Player_NameFrame_PVPStatus:SetTexture("Interface\\TargetingFrame\\UI-PVP-"..UnitFactionGroup("player"));
243 else
244 XPerl_Player_NameFrame_PVPStatus:Hide();
245 end
246 else
247 XPerl_Player_NameFrame_PVPStatus:Hide()
248 XPerl_ColourFriendlyUnit(XPerl_Player_NameFrame_NameBarText, "player")
249 end
250 end
251  
252 -- XPerl_Player_Feigning
253 local function XPerl_Player_Feigning ()
254 for buffnum=1,16 do
255 local buff = UnitBuff("player", buffnum)
256 if (not buff) then
257 return
258 end
259 if (strfind(strlower(buff), "feigndeath")) then
260 return true
261 end
262 end
263 end
264  
265 -- XPerl_Player_CheckDeadOrGhost
266 local function XPerl_Player_CheckDeadOrGhost()
267 if (UnitIsDead("player")) then
268 if (XPerl_Player_Feigning ()) then
269 XPerl_Player_StatsFrame_HealthBarText:SetText(XPERL_LOC_FEIGNDEATH)
270 XPerl_Player_StatsFrame_HealthBarText:Show()
271 return false
272 else
273 XPerl_Player_StatsFrame_HealthBarText:SetText(XPERL_LOC_DEAD)
274 XPerl_Player_StatsFrame_HealthBarText:Show()
275 XPerl_Player_StatsFrame_ManaBarText:Hide()
276 return true
277 end
278  
279 elseif (UnitIsGhost("player")) then
280 XPerl_Player_StatsFrame_HealthBarText:SetText(XPERL_LOC_GHOST)
281 XPerl_Player_StatsFrame_HealthBarText:Show()
282 XPerl_Player_StatsFrame_ManaBarText:Hide()
283 return true
284 end
285  
286 return false
287 end
288  
289 -- XPerl_Player_DruidBarUpdate
290 local function XPerl_Player_DruidBarUpdate()
291 XPerl_Player_StatsFrame_DruidBar:SetMinMaxValues(0,DruidBarKey.maxmana)
292 XPerl_Player_StatsFrame_DruidBar:SetValue(DruidBarKey.keepthemana)
293 manaPct = (DruidBarKey.keepthemana * 100.0) / DruidBarKey.maxmana
294 manaPct = string.format("%3.0f", manaPct)
295 XPerl_Player_StatsFrame_DruidBarPercent:SetText(manaPct.."%")
296 XPerl_Player_StatsFrame_DruidBarText:SetText(math.floor(DruidBarKey.keepthemana).."/"..DruidBarKey.maxmana)
297 if (UnitPowerType("player")>0) then
298 if XPerlConfig.ShowPlayerXPBar==1 then
299 XPerl_Player_StatsFrame:SetHeight(60)
300 else
301 XPerl_Player_StatsFrame:SetHeight(50)
302 end
303 XPerl_Player_StatsFrame_DruidBarText:Show()
304 XPerl_Player_StatsFrame_DruidBarPercent:Show()
305 XPerl_Player_StatsFrame_DruidBar:Show()
306 XPerl_Player_StatsFrame_DruidBar:SetHeight(10)
307 else
308 if XPerlConfig.ShowPlayerXPBar == 1 then
309 XPerl_Player_StatsFrame:SetHeight(50)
310 else
311 XPerl_Player_StatsFrame:SetHeight(40)
312 end
313 XPerl_Player_StatsFrame_DruidBarPercent:Hide()
314 XPerl_Player_StatsFrame_DruidBarText:Hide()
315 XPerl_Player_StatsFrame_DruidBar:Hide()
316 XPerl_Player_StatsFrame_DruidBar:SetHeight(1)
317 end
318 XPerl_StatsFrameSetup(XPerl_Player_StatsFrame, {"DruidBar", "XPBar"})
319 end
320  
321 -- XPerl_Player_UpdateMana
322 local function XPerl_Player_UpdateMana()
323 local playermana = UnitMana("player")
324 local playermanamax = UnitManaMax("player")
325 XPerl_Player_StatsFrame_ManaBar:SetMinMaxValues(0, playermanamax)
326 XPerl_Player_StatsFrame_ManaBar:SetValue(playermana)
327 manaPct = (playermana * 100.0) / playermanamax
328 manaPct = string.format("%3.0f", manaPct)
329  
330 XPerl_Player_StatsFrame_ManaBarText:SetText(playermana.."/"..playermanamax)
331 if (UnitPowerType("player")>=1) then
332 XPerl_Player_StatsFrame_ManaBarPercent:SetText(playermana)
333 else
334 XPerl_Player_StatsFrame_ManaBarPercent:SetText(manaPct.."%")
335 end
336  
337 if (XPerlConfig.ShowPlayerValues == 1) then
338 XPerl_Player_StatsFrame_ManaBarText:Show()
339 else
340 XPerl_Player_StatsFrame_ManaBarText:Hide()
341 end
342  
343 if (DruidBarKey) then
344 local _, engClass = UnitClass("player")
345 if (engClass == "DRUID") then
346 XPerl_Player_DruidBarUpdate()
347 end
348 end
349 end
350  
351 -- XPerl_Player_UpdateHealth
352 local function XPerl_Player_UpdateHealth()
353 local playerhealth = UnitHealth("player")
354 local playerhealthmax = UnitHealthMax("player")
355  
356 XPerl_SetHealthBar(XPerl_Player_StatsFrame_HealthBar, playerhealth, playerhealthmax)
357  
358 XPerl_Player_CheckDeadOrGhost()
359 PlayerStatus_OnUpdate(playerhealth, playerhealthmax)
360 end
361  
362 -- XPerl_Player_UpdateLevel
363 local function XPerl_Player_UpdateLevel()
364 XPerl_Player_LevelFrame_LevelBarText:SetText(UnitLevel("player"))
365 end
366  
367 -- PlayerStatus_OnUpdate - replaces Blizzard code
368 function PlayerStatus_OnUpdate(val, max)
369 if (XPerlConfig.FullScreenStatus == 1) then
370 if (val and max) then
371 local test = val / max
372  
373 if ( test <= 0.2 and not LowHealthFrame.flashing) then
374 UIFrameFlash(LowHealthFrame, 0.5, 0.5, 100);
375 LowHealthFrame.flashing = 1;
376 elseif ( (test > 0.1 and LowHealthFrame.flashing) or UnitIsDead("player") ) then
377 UIFrameFlash(LowHealthFrame, 1, 1, 0);
378 LowHealthFrame.flashing = nil;
379 end
380 else
381 if ( UIParent.isOutOfControl and not OutOfControlFrame.flashing and not UnitOnTaxi("player")) then
382 UIFrameFlash(OutOfControlFrame, 0.5, 0.5, 100);
383 OutOfControlFrame.flashing = 1;
384 elseif ( not UIParent.isOutOfControl and OutOfControlFrame.flashing ) then
385 UIFrameFlash(OutOfControlFrame, 0.5, 0.5, 0);
386 OutOfControlFrame.flashing = nil;
387 end
388 end
389 else
390 if (LowHealthFrame.flashing) then
391 UIFrameFlash(LowHealthFrame, 1, 1, 0);
392 LowHealthFrame.flashing = nil;
393 end
394 if (OutOfControlFrame.flashing) then
395 UIFrameFlash(OutOfControlFrame, 0.5, 0.5, 0);
396 OutOfControlFrame.flashing = nil;
397 end
398 end
399 end
400  
401 -- XPerl_Player_OnUpdate
402 function XPerl_Player_OnUpdate()
403 CombatFeedback_OnUpdate(arg1)
404 if (this.PlayerFlash) then
405 XPerl_Player_CombatFlash(arg1, false)
406 end
407 end
408  
409 -- XPerl_Player_UpdateDisplay
410 function XPerl_Player_UpdateDisplay ()
411 XPerl_Player_UpdateXP()
412 XPerl_Player_UpdateManaType()
413 XPerl_Player_UpdateLevel()
414 XPerl_Player_UpdateName()
415 XPerl_Player_UpdatePVP()
416 XPerl_Player_UpdateCombat()
417 XPerl_Player_UpdateLeader()
418 XPerl_Player_UpdateMasterLooter()
419 XPerl_Player_UpdateMana()
420 XPerl_Player_UpdateHealth()
421 XPerl_Player_Events:PLAYER_AURAS_CHANGED()
422 end
423  
424 --------------------
425 -- Click Handlers --
426 --------------------
427 function XPerl_Player_OnClick(button)
428 if (XPerl_OnClick_Handler(button, "player")) then
429 return
430 end
431  
432 if (button == "RightButton") then
433 HideDropDownMenu(1)
434 ToggleDropDownMenu(1, nil, PlayerFrameDropDown, "XPerl_Player_StatsFrame", 0, 0)
435 end
436 end
437  
438 -- EVENTS AND STUFF
439  
440 local events = {"PARTY_MEMBERS_CHANGED", "PARTY_LEADER_CHANGED", "PARTY_LOOT_METHOD_CHANGED", "RAID_ROSTER_UPDATE",
441 "UNIT_SPELLMISS", "PLAYER_UPDATE_RESTING", "UNIT_FACTION", "UNIT_MODEL_CHANGED", "PLAYER_REGEN_ENABLED",
442 "PLAYER_REGEN_DISABLED", "PLAYER_ENTER_COMBAT", "PLAYER_LEAVE_COMBAT", "PLAYER_LEVEL_UP", "PLAYER_DEAD",
443 "UNIT_FLAGS", "PLAYER_XP_UPDATE", "UPDATE_FACTION", "PLAYER_AURAS_CHANGED",
444 "UPDATE_SHAPESHIFT_FORMS", "PLAYER_CONTROL_LOST", "PLAYER_CONTROL_GAINED"}
445  
446 local function XPerl_Player_RegisterSome()
447 for i,event in pairs(events) do
448 this:RegisterEvent(event)
449 end
450 XPerl_RegisterBasics()
451 end
452 local function XPerl_Player_UnregisterSome()
453 for i,event in pairs(events) do
454 this:UnregisterEvent(event)
455 end
456 XPerl_UnregisterBasics()
457 end
458  
459 -------------------
460 -- Event Handler --
461 -------------------
462 function XPerl_Player_OnEvent()
463 local func = XPerl_Player_Events[event]
464 if (func) then
465 func()
466 else
467 XPerl_ShowMessage("EXTRA EVENT")
468 end
469 end
470  
471 -- PLAYER_ENTERING_WORLD
472 function XPerl_Player_Events:PLAYER_ENTERING_WORLD()
473 XPerl_Player_RegisterSome()
474 XPerl_Player_UpdateDisplay()
475 end
476  
477 -- PLAYER_LEAVING_WORLD
478 function XPerl_Player_Events:PLAYER_LEAVING_WORLD()
479 XPerl_Player_UnregisterSome()
480 end
481  
482 -- UNIT_COMBAT
483 function XPerl_Player_Events:UNIT_COMBAT()
484 if (arg1 == "player") then
485 if (XPerlConfig.CombatHitIndicator == 1 and XPerlConfig.ShowPlayerPortrait == 1) then
486 CombatFeedback_OnCombatEvent(arg2, arg3, arg4, arg5)
487 end
488  
489 if (arg2 == "HEAL") then
490 XPerl_Player_CombatFlash(elapsed, true, true)
491 elseif (arg4 and arg4 > 0) then
492 XPerl_Player_CombatFlash(elapsed, true)
493 end
494 end
495 end
496  
497 -- UNIT_SPELLMISS
498 function XPerl_Player_Events:UNIT_SPELLMISS()
499 if (arg1 == "player") then
500 if (XPerlConfig.CombatHitIndicator == 1 and XPerlConfig.ShowPlayerPortrait == 1) then
501 CombatFeedback_OnSpellMissEvent(arg2)
502 end
503 end
504 end
505  
506 -- UNIT_MODEL_CHANGED
507 function XPerl_Player_Events:UNIT_MODEL_CHANGED()
508 if (arg1 == "player") then
509 XPerl_Player_UpdatePortrait()
510 end
511 end
512 --XPerl_Player_Events.UNIT_PORTRAIT_UPDATE = XPerl_Player_Events.UNIT_MODEL_CHANGED
513  
514 -- VARIABLES_LOADED
515 function XPerl_Player_Events:VARIABLES_LOADED()
516 XPerl_Player_UpdatePortrait()
517 this:UnregisterEvent(event)
518 end
519  
520 -- PARTY_LOOT_METHOD_CHANGED
521 function XPerl_Player_Events:PARTY_LOOT_METHOD_CHANGED()
522 XPerl_Player_UpdateLeader()
523 XPerl_Player_UpdateMasterLooter()
524 end
525 XPerl_Player_Events.PARTY_MEMBERS_CHANGED = XPerl_Player_Events.PARTY_LOOT_METHOD_CHANGED
526 XPerl_Player_Events.PARTY_LEADER_CHANGED = XPerl_Player_Events.PARTY_LOOT_METHOD_CHANGED
527  
528 function XPerl_Player_Events:RAID_ROSTER_UPDATE()
529 XPerl_Player_UpdateLeader()
530 XPerl_Player_UpdateMasterLooter()
531 end
532  
533 -- UNIT_HEALTH, UNIT_MAXHEALTH
534 function XPerl_Player_Events:UNIT_HEALTH()
535 if (arg1=="player") then
536 XPerl_Player_UpdateHealth()
537 end
538 end
539 XPerl_Player_Events.UNIT_MAXHEALTH = XPerl_Player_Events.UNIT_HEALTH
540 XPerl_Player_Events.PLAYER_DEAD = XPerl_Player_Events.UNIT_HEALTH
541  
542 -- UNIT_MANA, UNIT_MAXMANA, UNIT_RAGE, UNIT_MAXRAGE, UNIT_ENERGY
543 -- UNIT_MAXENERGY
544 function XPerl_Player_Events:UNIT_MANA()
545 if (arg1=="player") then
546 XPerl_Player_UpdateMana()
547 end
548 end
549 XPerl_Player_Events.UNIT_MAXMANA = XPerl_Player_Events.UNIT_MANA
550 XPerl_Player_Events.UNIT_RAGE = XPerl_Player_Events.UNIT_MANA
551 XPerl_Player_Events.UNIT_MAXRAGE = XPerl_Player_Events.UNIT_MANA
552  
553 local function CheckStealth()
554 local i = 0
555 while (GetPlayerBuffTexture(i) ~= nil) do -- check for rogue's stealth and druid's prowl
556 if (GetPlayerBuffTexture(i) == "Interface\\Icons\\Ability_Stealth" or
557 GetPlayerBuffTexture(i) == "Interface\\Icons\\Ability_Ambush") then
558 return true
559 else
560 i = i + 1
561 end
562 end
563 end
564  
565 function XPerl_Player_Events:UNIT_ENERGY()
566 if (arg1=="player") then
567 XPerl_Player_UpdateMana()
568  
569 local e = UnitMana("player")
570 local m = UnitManaMax("player")
571 if (e == XPerl_Player.EnergyLast + 20) then
572 XPerl_Player.EnergyTime = GetTime()
573 end
574 XPerl_Player.EnergyLast = e
575  
576 XPerl_Player_TickerShowHide()
577 end
578 end
579 XPerl_Player_Events.UNIT_MAXENERGY = XPerl_Player_Events.UNIT_ENERGY
580  
581 -- UNIT_DISPLAYPOWER
582 function XPerl_Player_Events:UNIT_DISPLAYPOWER()
583 XPerl_Player_UpdateManaType()
584 XPerl_Player_UpdateMana()
585 end
586  
587 -- UNIT_NAME_UPDATE
588 function XPerl_Player_Events:UNIT_NAME_UPDATE()
589 if (arg1=="player") then
590 XPerl_Player_UpdateName()
591 end
592 end
593  
594 -- UNIT_LEVEL
595 function XPerl_Player_Events:UNIT_LEVEL()
596 if (arg1 == "player") then
597 XPerl_Player_UpdateLevel()
598 XPerl_Player_UpdateXP()
599 end
600 end
601 XPerl_Player_Events.PLAYER_LEVEL_UP = XPerl_Player_Events.UNIT_LEVEL
602  
603 -- PLAYER_XP_UPDATE
604 function XPerl_Player_Events:PLAYER_XP_UPDATE()
605 XPerl_Player_UpdateXP()
606 end
607  
608 function XPerl_Player_Events:UPDATE_FACTION()
609 if (UnitLevel("player") == MAX_PLAYER_LEVEL) then
610 XPerl_Player_UpdateRep()
611 end
612 end
613  
614 -- UNIT_FACTION
615 function XPerl_Player_Events:UNIT_FACTION()
616 if (arg1 == "player") then
617 XPerl_Player_UpdatePVP()
618 end
619 end
620 XPerl_Player_Events.UNIT_FLAGS = XPerl_Player_Events.UNIT_FACTION
621  
622 -- PLAYER_ENTER_COMBAT, PLAYER_LEAVE_COMBAT
623 function XPerl_Player_Events:PLAYER_ENTER_COMBAT()
624 XPerl_Player_UpdateCombat()
625 end
626 XPerl_Player_Events.PLAYER_LEAVE_COMBAT = XPerl_Player_Events.PLAYER_ENTER_COMBAT
627  
628 -- PLAYER_REGEN_ENABLED, PLAYER_REGEN_DISABLED
629 function XPerl_Player_Events:PLAYER_REGEN_ENABLED()
630 XPerl_Player_UpdateCombat()
631 --XPerl_Player_UpdateDisplay()
632 end
633 XPerl_Player_Events.PLAYER_REGEN_DISABLED = XPerl_Player_Events.PLAYER_REGEN_ENABLED
634 XPerl_Player_Events.PLAYER_UPDATE_RESTING = XPerl_Player_Events.PLAYER_REGEN_ENABLED
635  
636 function XPerl_Player_Events:PLAYER_AURAS_CHANGED()
637 XPerl_CheckDebuffs("player", {XPerl_Player_NameFrame, XPerl_Player_PortraitFrame, XPerl_Player_LevelFrame, XPerl_Player_StatsFrame})
638 XPerl_Player_TickerShowHide()
639  
640 if (DruidBarKey) then
641 -- For DruidBar addon, we update the mana bar on shapeshift
642 local _, engClass = UnitClass("player")
643 if (engClass == "DRUID") then
644 XPerl_Player_UpdateMana()
645 end
646 end
647  
648 if (UIParent.isOutOfControl and not UnitOnTaxi("player")) then
649 PlayerStatus_OnUpdate()
650 end
651 end
652  
653 -- PLAYER_CONTROL_LOST
654 function XPerl_Player_Events:PLAYER_CONTROL_LOST()
655 if (not UnitOnTaxi("player")) then
656 UIParent.isOutOfControl = 1
657 end
658 end
659  
660 -- PLAYER_CONTROL_GAINED
661 function XPerl_Player_Events:PLAYER_CONTROL_GAINED()
662 UIParent.isOutOfControl = nil
663 PlayerStatus_OnUpdate()
664 end
665  
666 -- Moving stuff
667 function XPerl_Player_GetGap()
668 if (XPerl_Target) then
669 local playerLeft = XPerl_Player:GetRight() * XPerl_Player:GetEffectiveScale()
670 local targetLeft = XPerl_Target:GetLeft() * XPerl_Target:GetEffectiveScale()
671  
672 local a = targetLeft - playerLeft
673  
674 a = a + 0.01
675 a = a * 100
676 a = math.floor (a)
677 a = a / 100
678  
679 return (math.floor(a + 4))
680 end
681  
682 return 0
683 end
684  
685 function XPerl_Player_SetGap(newGap)
686 if (not XPerl_Target) then
687 return
688 end
689  
690 if (type(newGap) == "number") then
691 newGap = newGap - 4
692  
693 local top = XPerl_Target:GetTop()
694 local left = ((XPerl_Player:GetRight() * XPerl_Player:GetEffectiveScale()) + newGap) / XPerl_Target:GetEffectiveScale()
695  
696 XPerl_Target:ClearAllPoints()
697 XPerl_Target:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", left, top)
698  
699 XPerl_Target:SetUserPlaced(true)
700  
701 if (XPerl_TargetTarget) then
702 top = XPerl_TargetTarget:GetTop()
703 left = ((XPerl_Target:GetRight() * XPerl_Target:GetEffectiveScale()) + newGap) / XPerl_TargetTarget:GetEffectiveScale()
704  
705 -- Can't use the CastClickOverlay for GetRight() as wow doesn't update anchors until it renders the frame, anchors
706 -- are always 1 frame behind. Usually you won't notice, but when moving frames in this manner, it was ugly.
707 -- So, we adjust right a little.
708 if (XPerl_Target_LevelFrame:IsShown()) then
709 left = left + XPerl_Target_LevelFrame:GetWidth()
710 end
711  
712 XPerl_TargetTarget:ClearAllPoints()
713 XPerl_TargetTarget:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", left, top)
714  
715 if (XPerl_TargetTargetTarget) then
716 top = XPerl_TargetTargetTarget:GetTop()
717 left = (XPerl_TargetTarget:GetRight() * XPerl_TargetTarget:GetEffectiveScale()) + newGap
718 if (XPerlConfig.ShowTargetTargetPercent == 0) then
719 left = left - 20
720 end
721 left = left / XPerl_TargetTargetTarget:GetEffectiveScale()
722  
723 XPerl_TargetTargetTarget:ClearAllPoints()
724 XPerl_TargetTargetTarget:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", left, top)
725  
726 XPerl_TargetTargetTarget:SetUserPlaced(true)
727 end
728  
729 XPerl_TargetTarget:SetUserPlaced(true)
730 end
731 end
732 end
733  
734 function XPerl_Player_AlignTop()
735 if (not XPerl_Target) then
736 return
737 end
738  
739 local playerLeft = XPerl_Player:GetLeft()
740 local targetLeft = XPerl_Target:GetLeft()
741 local playerTop = XPerl_Player:GetTop()
742 local top = playerTop * XPerl_Player:GetEffectiveScale()
743 local newTop
744  
745 if (playerLeft == nil) then
746 playerLeft = 5
747 end
748 if (targetLeft == nil) then
749 targetLeft = 220
750 end
751  
752 -- We set this for 1 reason, so that all the related frames scale in the same direction should the user do that...
753 XPerl_Player:ClearAllPoints()
754 XPerl_Player:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", playerLeft, playerTop)
755  
756 XPerl_Target:ClearAllPoints()
757 newTop = top / XPerl_Target:GetEffectiveScale()
758 XPerl_Target:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", targetLeft, newTop)
759  
760 XPerl_Target:StartMoving()
761 XPerl_Target:StopMovingOrSizing()
762  
763 if (XPerl_TargetTarget) then
764 local targettargetLeft = XPerl_TargetTarget:GetLeft()
765  
766 if (targettargetLeft == nil) then
767 targettargetLeft = targetLeft + 200
768 end
769  
770 XPerl_TargetTarget:ClearAllPoints()
771 newTop = top / XPerl_TargetTarget:GetEffectiveScale()
772 XPerl_TargetTarget:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", targettargetLeft, newTop)
773  
774 if (XPerl_TargetTargetTarget) then
775 local targettargettargetLeft = XPerl_TargetTargetTarget:GetLeft()
776 if (targettargettargetLeft == nil) then
777 targettargettargetLeft = targettargetLeft + 200
778 end
779  
780 XPerl_TargetTargetTarget:ClearAllPoints()
781 newTop = top / XPerl_TargetTargetTarget:GetEffectiveScale()
782 XPerl_TargetTargetTarget:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", targettargettargetLeft, newTop)
783  
784 XPerl_TargetTargetTarget:StartMoving()
785 XPerl_TargetTargetTarget:StopMovingOrSizing()
786 end
787  
788 XPerl_TargetTarget:StartMoving()
789 XPerl_TargetTarget:StopMovingOrSizing()
790 end
791 end
792  
793  
794 -- XPerl_Player_Energy_TickWatch
795 function XPerl_Player_Energy_OnUpdate()
796  
797 local time = GetTime()
798 local temp = time - XPerl_Player.EnergyTime
799 local remainder = mod (temp, 2)
800  
801 XPerl_Player_StatsFrame_EnergyTicker:SetValue(remainder)
802  
803 sparkPosition = XPerl_Player_StatsFrame_EnergyTicker:GetWidth() * (remainder / 2)
804  
805 XPerl_Player_StatsFrame_EnergyTicker_Spark:SetPoint("CENTER", XPerl_Player_StatsFrame_EnergyTicker, "LEFT", sparkPosition, 0)
806 end
807  
808 -- XPerl_Player_TickerShowHide
809 function XPerl_Player_TickerShowHide()
810 local e = UnitMana("player")
811 local m = UnitManaMax("player")
812 if (XPerl_Player.EnergyEnabled and (e < m or UnitAffectingCombat("player") or CheckStealth()) and not UnitIsDeadOrGhost("player") and XPerlConfig.EnergyTicker == 1) then
813 XPerl_Player_StatsFrame_EnergyTicker:Show()
814 else
815 XPerl_Player_StatsFrame_EnergyTicker:Hide()
816 end
817 end
818  
819 -- XPerl_Player_Set_Bits()
820 function XPerl_Player_Set_Bits()
821 if (XPerlConfig.ShowPlayerPortrait==0) then
822 XPerl_Player_PortraitFrame:Hide()
823 XPerl_Player_PortraitFrame:SetWidth(3)
824 else
825 XPerl_Player_PortraitFrame:Show()
826 XPerl_Player_PortraitFrame:SetWidth(60)
827 XPerl_Player_UpdatePortrait()
828 end
829  
830 if (XPerlConfig.ShowPlayerLevel==0) then
831 XPerl_Player_LevelFrame:Hide()
832 else
833 XPerl_Player_LevelFrame:Show()
834 end
835  
836 if (XPerlConfig.ShowPlayerPercent == 0) then
837 XPerl_Player_NameFrame:SetWidth(128)
838 XPerl_Player_StatsFrame:SetWidth(128)
839 XPerl_Player_StatsFrame_HealthBarPercent:Hide()
840 XPerl_Player_StatsFrame_ManaBarPercent:Hide()
841 XPerl_Player_StatsFrame_XPBarPercent:Hide()
842 else
843 XPerl_Player_NameFrame:SetWidth(160)
844 XPerl_Player_StatsFrame:SetWidth(160)
845 XPerl_Player_StatsFrame_HealthBarPercent:Show()
846 XPerl_Player_StatsFrame_ManaBarPercent:Show()
847 XPerl_Player_StatsFrame_XPBarPercent:Show()
848 end
849  
850 if (XPerlConfig.ShowPlayerValues == 0) then
851 XPerl_Player_StatsFrame_HealthBarText:Hide()
852 XPerl_Player_StatsFrame_ManaBarText:Hide()
853 XPerl_Player_StatsFrame_XPBarText:Hide()
854 else
855 XPerl_Player_StatsFrame_HealthBarText:Show()
856 XPerl_Player_StatsFrame_ManaBarText:Show()
857 XPerl_Player_StatsFrame_XPBarText:Show()
858 end
859  
860 if (XPerlConfig.ShowPlayerClassIcon == 0) then
861 XPerl_Player_ClassTexture:Hide()
862 else
863 XPerl_Player_ClassTexture:Show()
864 end
865  
866 if (XPerlConfig.ShowPlayerPVPRank==0) then
867 XPerl_Player_NameFrame_PVPRankIcon:Hide()
868 else
869 XPerl_Player_NameFrame_PVPRankIcon:Show()
870 end
871  
872 if (XPerlConfig.ShowPlayerXPBar==0) then
873 XPerl_Player_StatsFrame_XPBar:Hide()
874 XPerl_Player_StatsFrame_XPRestBar:Hide()
875 XPerl_Player_StatsFrame:SetHeight(40)
876 else
877 XPerl_Player_StatsFrame_XPBar:Show()
878 XPerl_Player_StatsFrame_XPRestBar:Show()
879 XPerl_Player_StatsFrame:SetHeight(50)
880 end
881 end