vanilla-wow-addons – Rev 1
?pathlinks?
local XPerl_Player_Events = {}
----------------------
-- Loading Function --
----------------------
function XPerl_Player_OnLoad()
-- Events
CombatFeedback_Initialize(XPerl_PlayerHitIndicator, 30)
this:RegisterEvent("PLAYER_ENTERING_WORLD")
this:RegisterEvent("PLAYER_LEAVING_WORLD")
this:RegisterEvent("VARIABLES_LOADED")
XPerl_Player_StatsFrame_DruidBar:SetHeight(1)
XPerl_Player_StatsFrame_DruidBar:Hide()
--XPerl_Player.PlayerFlash = 0
XPerl_Player.EnergyTime = 0
XPerl_Player.EnergyLast = 0
-- Set here to reduce amount of function calls made - I know it's not much, but we're talking about saving the Universe here!
-- ... cough
this:SetScript("OnUpdate", XPerl_Player_OnUpdate)
this:SetScript("OnEvent", XPerl_Player_OnEvent)
this:SetScript("OnShow", XPerl_Player_UpdatePortrait)
this.time = 0
XPerl_RegisterHighlight(XPerl_Player_CastClickOverlay, 3)
XPerl_RegisterPerlFrames(XPerl_Player, {"NameFrame", "StatsFrame", "LevelFrame", "PortraitFrame", "GroupFrame"})
this.FlashFrames = {XPerl_Player_PortraitFrame, XPerl_Player_NameFrame,
XPerl_Player_LevelFrame, XPerl_Player_StatsFrame}
end
-------------------------
-- The Update Function --
-------------------------
local function XPerl_Player_CombatFlash(elapsed, argNew, argGreen)
if (XPerl_CombatFlashSet (elapsed, XPerl_Player, argNew, argGreen)) then
XPerl_CombatFlashSetFrames(XPerl_Player)
end
end
function XPerl_Player_UpdatePortrait()
if (XPerlConfig.ShowPlayerPortrait == 1) then
if (XPerlConfig.ShowPlayerPortrait3D == 1) then
XPerl_Player_PortraitFrame_Portrait:Hide()
XPerl_Player_PortraitFrame_Portrait3D:Show()
XPerlSetPortrait3D(XPerl_Player_PortraitFrame_Portrait3D, "player")
else
XPerl_Player_PortraitFrame_Portrait3D.last3DTime = nil
XPerl_Player_PortraitFrame_Portrait:Show()
XPerl_Player_PortraitFrame_Portrait3D:Hide()
SetPortraitTexture(XPerl_Player_PortraitFrame_Portrait, "player")
end
end
end
-- XPerl_Player_UpdateManaType
local function XPerl_Player_UpdateManaType()
XPerl_SetManaBarType("player", XPerl_Player_StatsFrame_ManaBar, XPerl_Player_StatsFrame_ManaBarBG)
if (UnitPowerType("player") == 3) then
XPerl_Player.EnergyEnabled = true
else
XPerl_Player.EnergyEnabled = nil
end
XPerl_Player_TickerShowHide()
end
-- XPerl_Player_UpdateLeader()
function XPerl_Player_UpdateLeader()
if (IsPartyLeader()) then
XPerl_Player_NameFrame_LeaderIcon:Show()
else
XPerl_Player_NameFrame_LeaderIcon:Hide()
end
if (XPerlConfig.ShowPartyNumber == 1 and UnitInRaid("player")) then
for i = 1,GetNumRaidMembers() do
local name, rank, subgroup = GetRaidRosterInfo(i)
if (name == UnitName("player")) then
XPerl_Player_GroupFrameGroup:SetText(string.format(XPERL_RAID_GROUP, subgroup))
XPerl_Player_GroupFrame:Show()
return
end
end
end
XPerl_Player_GroupFrame:Hide()
end
-- XPerl_Player_UpdateMasterLooter()
local function XPerl_Player_UpdateMasterLooter()
local method, index = GetLootMethod()
if (method == "master" and index == 0) then
XPerl_Player_NameFrame_MasterIcon:Show()
else
XPerl_Player_NameFrame_MasterIcon:Hide()
end
end
-- XPerl_Player_UpdateName()
local function XPerl_Player_UpdateName()
XPerl_Player_NameFrame_NameBarText:SetText(UnitName("player"))
end
-- XPerl_Player_UpdateRep
local function XPerl_Player_UpdateRep()
local name, reaction, min, max, value = GetWatchedFactionInfo()
local color
if (name) then
color = FACTION_BAR_COLORS[reaction]
else
name = "none watched"
max = 1
min = 0
value = 0
color = FACTION_BAR_COLORS[4]
end
value = value - min
max = max - min
min = 0
XPerl_Player_StatsFrame_XPRestBar:SetMinMaxValues(0, 1)
XPerl_Player_StatsFrame_XPRestBar:SetValue(0)
XPerl_Player_StatsFrame_XPBar:SetMinMaxValues(min, max)
XPerl_Player_StatsFrame_XPBar:SetValue(value)
XPerl_Player_StatsFrame_XPBar:SetStatusBarColor(color.r, color.g, color.b, 1)
XPerl_Player_StatsFrame_XPBarBG:SetVertexColor(color.r, color.g, color.b, 0.25)
local perc = (value * 100) / max
XPerl_Player_StatsFrame_XPBarPercent:SetText(string.format("%.1f%%", perc))
XPerl_Player_StatsFrame_XPBarText:SetText(name)
end
-- XPerl_Player_UpdateXP
local function XPerl_Player_UpdateXP()
if (UnitLevel("player") == MAX_PLAYER_LEVEL) then
XPerl_Player_UpdateRep()
return
end
local playerxp = UnitXP("player")
local playerxpmax = UnitXPMax("player")
local playerxprest = GetXPExhaustion() or 0
XPerl_Player_StatsFrame_XPBar:SetMinMaxValues(0, playerxpmax)
XPerl_Player_StatsFrame_XPRestBar:SetMinMaxValues(0, playerxpmax)
XPerl_Player_StatsFrame_XPBar:SetValue(playerxp)
local xptext
if (playerxpmax > 10000) then
xptext = string.format("%.0fK/%.0fK", playerxp / 1000, playerxpmax / 1000)
else
xptext = playerxp.."/"..playerxpmax
end
if (playerxprest > 0) then
if (playerxpmax > 10000) then
xptext = xptext .. string.format("(+%.0fK)", playerxprest / 1000)
else
xptext = xptext .. string.format("(+%d)", playerxprest)
end
color = {r = 0.3, g = 0.3, b = 1}
else
color = {r = 0.6, g = 0, b = 0.6}
end
XPerl_Player_StatsFrame_XPRestBar:SetValue(playerxp + playerxprest)
XPerl_Player_StatsFrame_XPBar:SetStatusBarColor(color.r, color.g, color.b, 1)
XPerl_Player_StatsFrame_XPRestBar:SetStatusBarColor(color.r, color.g, color.b, 0.5)
XPerl_Player_StatsFrame_XPBarBG:SetVertexColor(color.r, color.g, color.b, 0.25)
XPerl_Player_StatsFrame_XPBarText:SetText(xptext)
local xppercenttext=((playerxp * 100.0) / playerxpmax)
xppercenttext=string.format("%3.0f", xppercenttext)
XPerl_Player_StatsFrame_XPBarPercent:SetText(xppercenttext.."%")
end
-- XPerl_Player_UpdateCombat
local function XPerl_Player_UpdateCombat()
if (UnitAffectingCombat("player")) then
XPerl_Player_NameFrame_NameBarText:SetTextColor(1,0,0)
XPerl_Player_NameFrame_ActivityStatus:SetTexCoord(0.5, 1.0, 0.0, 0.5)
XPerl_Player_NameFrame_ActivityStatus:Show()
else
if (UnitIsPVP("player")) then
XPerl_Player_NameFrame_NameBarText:SetTextColor(0,1,0)
else
XPerl_ColourFriendlyUnit(XPerl_Player_NameFrame_NameBarText, "player")
end
if (IsResting()) then
XPerl_Player_NameFrame_ActivityStatus:SetTexCoord(0, 0.5, 0.0, 0.5)
XPerl_Player_NameFrame_ActivityStatus:Show()
else
XPerl_Player_NameFrame_ActivityStatus:Hide()
end
end
--if (XPerl_Player_Pet) then
-- XPerl_Player_Pet_UpdateCombat()
--end
end
-- XPerl_Player_UpdatePVP
local function XPerl_Player_UpdatePVP()
local playerrankname, playerrank=GetPVPRankInfo(UnitPVPRank("player"), "player")
if (playerrank and XPerlConfig.ShowPlayerPVPRank==1) then
XPerl_Player_NameFrame_PVPRankIcon:Show()
if (playerrank==0) then
XPerl_Player_NameFrame_PVPRankIcon:Hide()
else
XPerl_Player_NameFrame_PVPRankIcon:SetTexture(string.format("Interface\\PVPRankBadges\\PVPRank%02d", playerrank))
end
else
XPerl_Player_NameFrame_PVPRankIcon:Hide()
end
if (XPerlConfig.ShowPlayerClassIcon == 1) then
local _, PlayerClass = UnitClass("player")
local r, l, t, b = XPerl_ClassPos(PlayerClass)
XPerl_Player_ClassTexture:SetTexCoord(r, l, t, b)
end
-- PVP Status settings
if (UnitAffectingCombat("player")) then
XPerl_Player_NameFrame_NameBarText:SetTextColor(1,0,0)
elseif (UnitIsPVP("player")) then
XPerl_Player_NameFrame_NameBarText:SetTextColor(0,1,0);
if (XPerlConfig.ShowPlayerPVP == 1) then
XPerl_Player_NameFrame_PVPStatus:Show();
XPerl_Player_NameFrame_PVPStatus:SetTexture("Interface\\TargetingFrame\\UI-PVP-"..UnitFactionGroup("player"));
else
XPerl_Player_NameFrame_PVPStatus:Hide();
end
else
XPerl_Player_NameFrame_PVPStatus:Hide()
XPerl_ColourFriendlyUnit(XPerl_Player_NameFrame_NameBarText, "player")
end
end
-- XPerl_Player_Feigning
local function XPerl_Player_Feigning ()
for buffnum=1,16 do
local buff = UnitBuff("player", buffnum)
if (not buff) then
return
end
if (strfind(strlower(buff), "feigndeath")) then
return true
end
end
end
-- XPerl_Player_CheckDeadOrGhost
local function XPerl_Player_CheckDeadOrGhost()
if (UnitIsDead("player")) then
if (XPerl_Player_Feigning ()) then
XPerl_Player_StatsFrame_HealthBarText:SetText(XPERL_LOC_FEIGNDEATH)
XPerl_Player_StatsFrame_HealthBarText:Show()
return false
else
XPerl_Player_StatsFrame_HealthBarText:SetText(XPERL_LOC_DEAD)
XPerl_Player_StatsFrame_HealthBarText:Show()
XPerl_Player_StatsFrame_ManaBarText:Hide()
return true
end
elseif (UnitIsGhost("player")) then
XPerl_Player_StatsFrame_HealthBarText:SetText(XPERL_LOC_GHOST)
XPerl_Player_StatsFrame_HealthBarText:Show()
XPerl_Player_StatsFrame_ManaBarText:Hide()
return true
end
return false
end
-- XPerl_Player_DruidBarUpdate
local function XPerl_Player_DruidBarUpdate()
XPerl_Player_StatsFrame_DruidBar:SetMinMaxValues(0,DruidBarKey.maxmana)
XPerl_Player_StatsFrame_DruidBar:SetValue(DruidBarKey.keepthemana)
manaPct = (DruidBarKey.keepthemana * 100.0) / DruidBarKey.maxmana
manaPct = string.format("%3.0f", manaPct)
XPerl_Player_StatsFrame_DruidBarPercent:SetText(manaPct.."%")
XPerl_Player_StatsFrame_DruidBarText:SetText(math.floor(DruidBarKey.keepthemana).."/"..DruidBarKey.maxmana)
if (UnitPowerType("player")>0) then
if XPerlConfig.ShowPlayerXPBar==1 then
XPerl_Player_StatsFrame:SetHeight(60)
else
XPerl_Player_StatsFrame:SetHeight(50)
end
XPerl_Player_StatsFrame_DruidBarText:Show()
XPerl_Player_StatsFrame_DruidBarPercent:Show()
XPerl_Player_StatsFrame_DruidBar:Show()
XPerl_Player_StatsFrame_DruidBar:SetHeight(10)
else
if XPerlConfig.ShowPlayerXPBar == 1 then
XPerl_Player_StatsFrame:SetHeight(50)
else
XPerl_Player_StatsFrame:SetHeight(40)
end
XPerl_Player_StatsFrame_DruidBarPercent:Hide()
XPerl_Player_StatsFrame_DruidBarText:Hide()
XPerl_Player_StatsFrame_DruidBar:Hide()
XPerl_Player_StatsFrame_DruidBar:SetHeight(1)
end
XPerl_StatsFrameSetup(XPerl_Player_StatsFrame, {"DruidBar", "XPBar"})
end
-- XPerl_Player_UpdateMana
local function XPerl_Player_UpdateMana()
local playermana = UnitMana("player")
local playermanamax = UnitManaMax("player")
XPerl_Player_StatsFrame_ManaBar:SetMinMaxValues(0, playermanamax)
XPerl_Player_StatsFrame_ManaBar:SetValue(playermana)
manaPct = (playermana * 100.0) / playermanamax
manaPct = string.format("%3.0f", manaPct)
XPerl_Player_StatsFrame_ManaBarText:SetText(playermana.."/"..playermanamax)
if (UnitPowerType("player")>=1) then
XPerl_Player_StatsFrame_ManaBarPercent:SetText(playermana)
else
XPerl_Player_StatsFrame_ManaBarPercent:SetText(manaPct.."%")
end
if (XPerlConfig.ShowPlayerValues == 1) then
XPerl_Player_StatsFrame_ManaBarText:Show()
else
XPerl_Player_StatsFrame_ManaBarText:Hide()
end
if (DruidBarKey) then
local _, engClass = UnitClass("player")
if (engClass == "DRUID") then
XPerl_Player_DruidBarUpdate()
end
end
end
-- XPerl_Player_UpdateHealth
local function XPerl_Player_UpdateHealth()
local playerhealth = UnitHealth("player")
local playerhealthmax = UnitHealthMax("player")
XPerl_SetHealthBar(XPerl_Player_StatsFrame_HealthBar, playerhealth, playerhealthmax)
XPerl_Player_CheckDeadOrGhost()
PlayerStatus_OnUpdate(playerhealth, playerhealthmax)
end
-- XPerl_Player_UpdateLevel
local function XPerl_Player_UpdateLevel()
XPerl_Player_LevelFrame_LevelBarText:SetText(UnitLevel("player"))
end
-- PlayerStatus_OnUpdate - replaces Blizzard code
function PlayerStatus_OnUpdate(val, max)
if (XPerlConfig.FullScreenStatus == 1) then
if (val and max) then
local test = val / max
if ( test <= 0.2 and not LowHealthFrame.flashing) then
UIFrameFlash(LowHealthFrame, 0.5, 0.5, 100);
LowHealthFrame.flashing = 1;
elseif ( (test > 0.1 and LowHealthFrame.flashing) or UnitIsDead("player") ) then
UIFrameFlash(LowHealthFrame, 1, 1, 0);
LowHealthFrame.flashing = nil;
end
else
if ( UIParent.isOutOfControl and not OutOfControlFrame.flashing and not UnitOnTaxi("player")) then
UIFrameFlash(OutOfControlFrame, 0.5, 0.5, 100);
OutOfControlFrame.flashing = 1;
elseif ( not UIParent.isOutOfControl and OutOfControlFrame.flashing ) then
UIFrameFlash(OutOfControlFrame, 0.5, 0.5, 0);
OutOfControlFrame.flashing = nil;
end
end
else
if (LowHealthFrame.flashing) then
UIFrameFlash(LowHealthFrame, 1, 1, 0);
LowHealthFrame.flashing = nil;
end
if (OutOfControlFrame.flashing) then
UIFrameFlash(OutOfControlFrame, 0.5, 0.5, 0);
OutOfControlFrame.flashing = nil;
end
end
end
-- XPerl_Player_OnUpdate
function XPerl_Player_OnUpdate()
CombatFeedback_OnUpdate(arg1)
if (this.PlayerFlash) then
XPerl_Player_CombatFlash(arg1, false)
end
end
-- XPerl_Player_UpdateDisplay
function XPerl_Player_UpdateDisplay ()
XPerl_Player_UpdateXP()
XPerl_Player_UpdateManaType()
XPerl_Player_UpdateLevel()
XPerl_Player_UpdateName()
XPerl_Player_UpdatePVP()
XPerl_Player_UpdateCombat()
XPerl_Player_UpdateLeader()
XPerl_Player_UpdateMasterLooter()
XPerl_Player_UpdateMana()
XPerl_Player_UpdateHealth()
XPerl_Player_Events:PLAYER_AURAS_CHANGED()
end
--------------------
-- Click Handlers --
--------------------
function XPerl_Player_OnClick(button)
if (XPerl_OnClick_Handler(button, "player")) then
return
end
if (button == "RightButton") then
HideDropDownMenu(1)
ToggleDropDownMenu(1, nil, PlayerFrameDropDown, "XPerl_Player_StatsFrame", 0, 0)
end
end
-- EVENTS AND STUFF
local events = {"PARTY_MEMBERS_CHANGED", "PARTY_LEADER_CHANGED", "PARTY_LOOT_METHOD_CHANGED", "RAID_ROSTER_UPDATE",
"UNIT_SPELLMISS", "PLAYER_UPDATE_RESTING", "UNIT_FACTION", "UNIT_MODEL_CHANGED", "PLAYER_REGEN_ENABLED",
"PLAYER_REGEN_DISABLED", "PLAYER_ENTER_COMBAT", "PLAYER_LEAVE_COMBAT", "PLAYER_LEVEL_UP", "PLAYER_DEAD",
"UNIT_FLAGS", "PLAYER_XP_UPDATE", "UPDATE_FACTION", "PLAYER_AURAS_CHANGED",
"UPDATE_SHAPESHIFT_FORMS", "PLAYER_CONTROL_LOST", "PLAYER_CONTROL_GAINED"}
local function XPerl_Player_RegisterSome()
for i,event in pairs(events) do
this:RegisterEvent(event)
end
XPerl_RegisterBasics()
end
local function XPerl_Player_UnregisterSome()
for i,event in pairs(events) do
this:UnregisterEvent(event)
end
XPerl_UnregisterBasics()
end
-------------------
-- Event Handler --
-------------------
function XPerl_Player_OnEvent()
local func = XPerl_Player_Events[event]
if (func) then
func()
else
XPerl_ShowMessage("EXTRA EVENT")
end
end
-- PLAYER_ENTERING_WORLD
function XPerl_Player_Events:PLAYER_ENTERING_WORLD()
XPerl_Player_RegisterSome()
XPerl_Player_UpdateDisplay()
end
-- PLAYER_LEAVING_WORLD
function XPerl_Player_Events:PLAYER_LEAVING_WORLD()
XPerl_Player_UnregisterSome()
end
-- UNIT_COMBAT
function XPerl_Player_Events:UNIT_COMBAT()
if (arg1 == "player") then
if (XPerlConfig.CombatHitIndicator == 1 and XPerlConfig.ShowPlayerPortrait == 1) then
CombatFeedback_OnCombatEvent(arg2, arg3, arg4, arg5)
end
if (arg2 == "HEAL") then
XPerl_Player_CombatFlash(elapsed, true, true)
elseif (arg4 and arg4 > 0) then
XPerl_Player_CombatFlash(elapsed, true)
end
end
end
-- UNIT_SPELLMISS
function XPerl_Player_Events:UNIT_SPELLMISS()
if (arg1 == "player") then
if (XPerlConfig.CombatHitIndicator == 1 and XPerlConfig.ShowPlayerPortrait == 1) then
CombatFeedback_OnSpellMissEvent(arg2)
end
end
end
-- UNIT_MODEL_CHANGED
function XPerl_Player_Events:UNIT_MODEL_CHANGED()
if (arg1 == "player") then
XPerl_Player_UpdatePortrait()
end
end
--XPerl_Player_Events.UNIT_PORTRAIT_UPDATE = XPerl_Player_Events.UNIT_MODEL_CHANGED
-- VARIABLES_LOADED
function XPerl_Player_Events:VARIABLES_LOADED()
XPerl_Player_UpdatePortrait()
this:UnregisterEvent(event)
end
-- PARTY_LOOT_METHOD_CHANGED
function XPerl_Player_Events:PARTY_LOOT_METHOD_CHANGED()
XPerl_Player_UpdateLeader()
XPerl_Player_UpdateMasterLooter()
end
XPerl_Player_Events.PARTY_MEMBERS_CHANGED = XPerl_Player_Events.PARTY_LOOT_METHOD_CHANGED
XPerl_Player_Events.PARTY_LEADER_CHANGED = XPerl_Player_Events.PARTY_LOOT_METHOD_CHANGED
function XPerl_Player_Events:RAID_ROSTER_UPDATE()
XPerl_Player_UpdateLeader()
XPerl_Player_UpdateMasterLooter()
end
-- UNIT_HEALTH, UNIT_MAXHEALTH
function XPerl_Player_Events:UNIT_HEALTH()
if (arg1=="player") then
XPerl_Player_UpdateHealth()
end
end
XPerl_Player_Events.UNIT_MAXHEALTH = XPerl_Player_Events.UNIT_HEALTH
XPerl_Player_Events.PLAYER_DEAD = XPerl_Player_Events.UNIT_HEALTH
-- UNIT_MANA, UNIT_MAXMANA, UNIT_RAGE, UNIT_MAXRAGE, UNIT_ENERGY
-- UNIT_MAXENERGY
function XPerl_Player_Events:UNIT_MANA()
if (arg1=="player") then
XPerl_Player_UpdateMana()
end
end
XPerl_Player_Events.UNIT_MAXMANA = XPerl_Player_Events.UNIT_MANA
XPerl_Player_Events.UNIT_RAGE = XPerl_Player_Events.UNIT_MANA
XPerl_Player_Events.UNIT_MAXRAGE = XPerl_Player_Events.UNIT_MANA
local function CheckStealth()
local i = 0
while (GetPlayerBuffTexture(i) ~= nil) do -- check for rogue's stealth and druid's prowl
if (GetPlayerBuffTexture(i) == "Interface\\Icons\\Ability_Stealth" or
GetPlayerBuffTexture(i) == "Interface\\Icons\\Ability_Ambush") then
return true
else
i = i + 1
end
end
end
function XPerl_Player_Events:UNIT_ENERGY()
if (arg1=="player") then
XPerl_Player_UpdateMana()
local e = UnitMana("player")
local m = UnitManaMax("player")
if (e == XPerl_Player.EnergyLast + 20) then
XPerl_Player.EnergyTime = GetTime()
end
XPerl_Player.EnergyLast = e
XPerl_Player_TickerShowHide()
end
end
XPerl_Player_Events.UNIT_MAXENERGY = XPerl_Player_Events.UNIT_ENERGY
-- UNIT_DISPLAYPOWER
function XPerl_Player_Events:UNIT_DISPLAYPOWER()
XPerl_Player_UpdateManaType()
XPerl_Player_UpdateMana()
end
-- UNIT_NAME_UPDATE
function XPerl_Player_Events:UNIT_NAME_UPDATE()
if (arg1=="player") then
XPerl_Player_UpdateName()
end
end
-- UNIT_LEVEL
function XPerl_Player_Events:UNIT_LEVEL()
if (arg1 == "player") then
XPerl_Player_UpdateLevel()
XPerl_Player_UpdateXP()
end
end
XPerl_Player_Events.PLAYER_LEVEL_UP = XPerl_Player_Events.UNIT_LEVEL
-- PLAYER_XP_UPDATE
function XPerl_Player_Events:PLAYER_XP_UPDATE()
XPerl_Player_UpdateXP()
end
function XPerl_Player_Events:UPDATE_FACTION()
if (UnitLevel("player") == MAX_PLAYER_LEVEL) then
XPerl_Player_UpdateRep()
end
end
-- UNIT_FACTION
function XPerl_Player_Events:UNIT_FACTION()
if (arg1 == "player") then
XPerl_Player_UpdatePVP()
end
end
XPerl_Player_Events.UNIT_FLAGS = XPerl_Player_Events.UNIT_FACTION
-- PLAYER_ENTER_COMBAT, PLAYER_LEAVE_COMBAT
function XPerl_Player_Events:PLAYER_ENTER_COMBAT()
XPerl_Player_UpdateCombat()
end
XPerl_Player_Events.PLAYER_LEAVE_COMBAT = XPerl_Player_Events.PLAYER_ENTER_COMBAT
-- PLAYER_REGEN_ENABLED, PLAYER_REGEN_DISABLED
function XPerl_Player_Events:PLAYER_REGEN_ENABLED()
XPerl_Player_UpdateCombat()
--XPerl_Player_UpdateDisplay()
end
XPerl_Player_Events.PLAYER_REGEN_DISABLED = XPerl_Player_Events.PLAYER_REGEN_ENABLED
XPerl_Player_Events.PLAYER_UPDATE_RESTING = XPerl_Player_Events.PLAYER_REGEN_ENABLED
function XPerl_Player_Events:PLAYER_AURAS_CHANGED()
XPerl_CheckDebuffs("player", {XPerl_Player_NameFrame, XPerl_Player_PortraitFrame, XPerl_Player_LevelFrame, XPerl_Player_StatsFrame})
XPerl_Player_TickerShowHide()
if (DruidBarKey) then
-- For DruidBar addon, we update the mana bar on shapeshift
local _, engClass = UnitClass("player")
if (engClass == "DRUID") then
XPerl_Player_UpdateMana()
end
end
if (UIParent.isOutOfControl and not UnitOnTaxi("player")) then
PlayerStatus_OnUpdate()
end
end
-- PLAYER_CONTROL_LOST
function XPerl_Player_Events:PLAYER_CONTROL_LOST()
if (not UnitOnTaxi("player")) then
UIParent.isOutOfControl = 1
end
end
-- PLAYER_CONTROL_GAINED
function XPerl_Player_Events:PLAYER_CONTROL_GAINED()
UIParent.isOutOfControl = nil
PlayerStatus_OnUpdate()
end
-- Moving stuff
function XPerl_Player_GetGap()
if (XPerl_Target) then
local playerLeft = XPerl_Player:GetRight() * XPerl_Player:GetEffectiveScale()
local targetLeft = XPerl_Target:GetLeft() * XPerl_Target:GetEffectiveScale()
local a = targetLeft - playerLeft
a = a + 0.01
a = a * 100
a = math.floor (a)
a = a / 100
return (math.floor(a + 4))
end
return 0
end
function XPerl_Player_SetGap(newGap)
if (not XPerl_Target) then
return
end
if (type(newGap) == "number") then
newGap = newGap - 4
local top = XPerl_Target:GetTop()
local left = ((XPerl_Player:GetRight() * XPerl_Player:GetEffectiveScale()) + newGap) / XPerl_Target:GetEffectiveScale()
XPerl_Target:ClearAllPoints()
XPerl_Target:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", left, top)
XPerl_Target:SetUserPlaced(true)
if (XPerl_TargetTarget) then
top = XPerl_TargetTarget:GetTop()
left = ((XPerl_Target:GetRight() * XPerl_Target:GetEffectiveScale()) + newGap) / XPerl_TargetTarget:GetEffectiveScale()
-- Can't use the CastClickOverlay for GetRight() as wow doesn't update anchors until it renders the frame, anchors
-- are always 1 frame behind. Usually you won't notice, but when moving frames in this manner, it was ugly.
-- So, we adjust right a little.
if (XPerl_Target_LevelFrame:IsShown()) then
left = left + XPerl_Target_LevelFrame:GetWidth()
end
XPerl_TargetTarget:ClearAllPoints()
XPerl_TargetTarget:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", left, top)
if (XPerl_TargetTargetTarget) then
top = XPerl_TargetTargetTarget:GetTop()
left = (XPerl_TargetTarget:GetRight() * XPerl_TargetTarget:GetEffectiveScale()) + newGap
if (XPerlConfig.ShowTargetTargetPercent == 0) then
left = left - 20
end
left = left / XPerl_TargetTargetTarget:GetEffectiveScale()
XPerl_TargetTargetTarget:ClearAllPoints()
XPerl_TargetTargetTarget:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", left, top)
XPerl_TargetTargetTarget:SetUserPlaced(true)
end
XPerl_TargetTarget:SetUserPlaced(true)
end
end
end
function XPerl_Player_AlignTop()
if (not XPerl_Target) then
return
end
local playerLeft = XPerl_Player:GetLeft()
local targetLeft = XPerl_Target:GetLeft()
local playerTop = XPerl_Player:GetTop()
local top = playerTop * XPerl_Player:GetEffectiveScale()
local newTop
if (playerLeft == nil) then
playerLeft = 5
end
if (targetLeft == nil) then
targetLeft = 220
end
-- We set this for 1 reason, so that all the related frames scale in the same direction should the user do that...
XPerl_Player:ClearAllPoints()
XPerl_Player:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", playerLeft, playerTop)
XPerl_Target:ClearAllPoints()
newTop = top / XPerl_Target:GetEffectiveScale()
XPerl_Target:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", targetLeft, newTop)
XPerl_Target:StartMoving()
XPerl_Target:StopMovingOrSizing()
if (XPerl_TargetTarget) then
local targettargetLeft = XPerl_TargetTarget:GetLeft()
if (targettargetLeft == nil) then
targettargetLeft = targetLeft + 200
end
XPerl_TargetTarget:ClearAllPoints()
newTop = top / XPerl_TargetTarget:GetEffectiveScale()
XPerl_TargetTarget:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", targettargetLeft, newTop)
if (XPerl_TargetTargetTarget) then
local targettargettargetLeft = XPerl_TargetTargetTarget:GetLeft()
if (targettargettargetLeft == nil) then
targettargettargetLeft = targettargetLeft + 200
end
XPerl_TargetTargetTarget:ClearAllPoints()
newTop = top / XPerl_TargetTargetTarget:GetEffectiveScale()
XPerl_TargetTargetTarget:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", targettargettargetLeft, newTop)
XPerl_TargetTargetTarget:StartMoving()
XPerl_TargetTargetTarget:StopMovingOrSizing()
end
XPerl_TargetTarget:StartMoving()
XPerl_TargetTarget:StopMovingOrSizing()
end
end
-- XPerl_Player_Energy_TickWatch
function XPerl_Player_Energy_OnUpdate()
local time = GetTime()
local temp = time - XPerl_Player.EnergyTime
local remainder = mod (temp, 2)
XPerl_Player_StatsFrame_EnergyTicker:SetValue(remainder)
sparkPosition = XPerl_Player_StatsFrame_EnergyTicker:GetWidth() * (remainder / 2)
XPerl_Player_StatsFrame_EnergyTicker_Spark:SetPoint("CENTER", XPerl_Player_StatsFrame_EnergyTicker, "LEFT", sparkPosition, 0)
end
-- XPerl_Player_TickerShowHide
function XPerl_Player_TickerShowHide()
local e = UnitMana("player")
local m = UnitManaMax("player")
if (XPerl_Player.EnergyEnabled and (e < m or UnitAffectingCombat("player") or CheckStealth()) and not UnitIsDeadOrGhost("player") and XPerlConfig.EnergyTicker == 1) then
XPerl_Player_StatsFrame_EnergyTicker:Show()
else
XPerl_Player_StatsFrame_EnergyTicker:Hide()
end
end
-- XPerl_Player_Set_Bits()
function XPerl_Player_Set_Bits()
if (XPerlConfig.ShowPlayerPortrait==0) then
XPerl_Player_PortraitFrame:Hide()
XPerl_Player_PortraitFrame:SetWidth(3)
else
XPerl_Player_PortraitFrame:Show()
XPerl_Player_PortraitFrame:SetWidth(60)
XPerl_Player_UpdatePortrait()
end
if (XPerlConfig.ShowPlayerLevel==0) then
XPerl_Player_LevelFrame:Hide()
else
XPerl_Player_LevelFrame:Show()
end
if (XPerlConfig.ShowPlayerPercent == 0) then
XPerl_Player_NameFrame:SetWidth(128)
XPerl_Player_StatsFrame:SetWidth(128)
XPerl_Player_StatsFrame_HealthBarPercent:Hide()
XPerl_Player_StatsFrame_ManaBarPercent:Hide()
XPerl_Player_StatsFrame_XPBarPercent:Hide()
else
XPerl_Player_NameFrame:SetWidth(160)
XPerl_Player_StatsFrame:SetWidth(160)
XPerl_Player_StatsFrame_HealthBarPercent:Show()
XPerl_Player_StatsFrame_ManaBarPercent:Show()
XPerl_Player_StatsFrame_XPBarPercent:Show()
end
if (XPerlConfig.ShowPlayerValues == 0) then
XPerl_Player_StatsFrame_HealthBarText:Hide()
XPerl_Player_StatsFrame_ManaBarText:Hide()
XPerl_Player_StatsFrame_XPBarText:Hide()
else
XPerl_Player_StatsFrame_HealthBarText:Show()
XPerl_Player_StatsFrame_ManaBarText:Show()
XPerl_Player_StatsFrame_XPBarText:Show()
end
if (XPerlConfig.ShowPlayerClassIcon == 0) then
XPerl_Player_ClassTexture:Hide()
else
XPerl_Player_ClassTexture:Show()
end
if (XPerlConfig.ShowPlayerPVPRank==0) then
XPerl_Player_NameFrame_PVPRankIcon:Hide()
else
XPerl_Player_NameFrame_PVPRankIcon:Show()
end
if (XPerlConfig.ShowPlayerXPBar==0) then
XPerl_Player_StatsFrame_XPBar:Hide()
XPerl_Player_StatsFrame_XPRestBar:Hide()
XPerl_Player_StatsFrame:SetHeight(40)
else
XPerl_Player_StatsFrame_XPBar:Show()
XPerl_Player_StatsFrame_XPRestBar:Show()
XPerl_Player_StatsFrame:SetHeight(50)
end
end