vanilla-wow-addons – Rev 1
?pathlinks?
---------------
-- Variables --
---------------
Perl_Target_Config = {};
-- Default Saved Variables (also set in Perl_Target_GetVars)
local locked = 0; -- unlocked by default
local showcp = 1; -- combo points displayed by default
local showclassicon = 1; -- show the class icon
local showclassframe = 1; -- show the class frame
local showpvpicon = 1; -- show the pvp icon
local numbuffsshown = 16; -- buff row is 16 long
local numdebuffsshown = 16; -- debuff row is 16 long
local mobhealthsupport = 1; -- mobhealth support is on by default
local scale = 1; -- default scale
local showpvprank = 0; -- hide the pvp rank by default
local transparency = 1; -- transparency for frames
local buffdebuffscale = 1; -- default scale for buffs and debuffs
local showportrait = 0; -- portrait is hidden by default
local threedportrait = 0; -- 3d portraits are off by default
local portraitcombattext = 1; -- Combat text is enabled by default on the portrait frame
local showrareeliteframe = 0; -- rare/elite frame is hidden by default
local nameframecombopoints = 0; -- combo points are not displayed in the name frame by default
local comboframedebuffs = 0; -- combo point frame will not be used for debuffs by default
local framestyle = 1; -- default frame style is "classic"
local compactmode = 0; -- compact mode is disabled by default
local compactpercent = 0; -- percents are not shown in compact mode by default
local hidebuffbackground = 0; -- buff and debuff backgrounds are shown by default
-- Default Local Variables
local Initialized = nil; -- waiting to be initialized
-- Variables for position of the class icon texture.
local Perl_Target_ClassPosRight = {};
local Perl_Target_ClassPosLeft = {};
local Perl_Target_ClassPosTop = {};
local Perl_Target_ClassPosBottom = {};
----------------------
-- Loading Function --
----------------------
function Perl_Target_OnLoad()
-- Combat Text
CombatFeedback_Initialize(Perl_Target_HitIndicator, 30);
-- Events
this:RegisterEvent("ADDON_LOADED");
this:RegisterEvent("PARTY_LEADER_CHANGED");
this:RegisterEvent("PARTY_MEMBER_DISABLE");
this:RegisterEvent("PARTY_MEMBER_ENABLE");
this:RegisterEvent("PARTY_MEMBERS_CHANGED");
this:RegisterEvent("PLAYER_COMBO_POINTS");
this:RegisterEvent("PLAYER_ENTERING_WORLD");
this:RegisterEvent("PLAYER_TARGET_CHANGED");
this:RegisterEvent("UNIT_AURA");
this:RegisterEvent("UNIT_COMBAT");
this:RegisterEvent("UNIT_DISPLAYPOWER");
this:RegisterEvent("UNIT_DYNAMIC_FLAGS");
this:RegisterEvent("UNIT_ENERGY");
this:RegisterEvent("UNIT_FOCUS");
this:RegisterEvent("UNIT_HEALTH");
this:RegisterEvent("UNIT_LEVEL");
this:RegisterEvent("UNIT_MANA");
this:RegisterEvent("UNIT_MAXENERGY");
this:RegisterEvent("UNIT_MAXFOCUS");
this:RegisterEvent("UNIT_MAXHEALTH");
this:RegisterEvent("UNIT_MAXMANA");
this:RegisterEvent("UNIT_MAXRAGE");
this:RegisterEvent("UNIT_PORTRAIT_UPDATE");
this:RegisterEvent("UNIT_PVP_UPDATE");
this:RegisterEvent("UNIT_RAGE");
this:RegisterEvent("UNIT_SPELLMISS");
this:RegisterEvent("VARIABLES_LOADED");
-- Button Click Overlays (in order of occurrence in XML)
Perl_Target_NameFrame_CastClickOverlay:SetFrameLevel(Perl_Target_NameFrame:GetFrameLevel() + 2);
Perl_Target_Name:SetFrameLevel(Perl_Target_NameFrame:GetFrameLevel() + 1);
Perl_Target_LevelFrame_CastClickOverlay:SetFrameLevel(Perl_Target_LevelFrame:GetFrameLevel() + 1);
Perl_Target_RareEliteFrame_CastClickOverlay:SetFrameLevel(Perl_Target_RareEliteFrame:GetFrameLevel() + 1);
Perl_Target_PortraitFrame_CastClickOverlay:SetFrameLevel(Perl_Target_PortraitFrame:GetFrameLevel() + 2);
Perl_Target_ClassNameFrame_CastClickOverlay:SetFrameLevel(Perl_Target_ClassNameFrame:GetFrameLevel() + 1);
Perl_Target_CivilianFrame_CastClickOverlay:SetFrameLevel(Perl_Target_CivilianFrame:GetFrameLevel() + 1);
Perl_Target_CPFrame_CastClickOverlay:SetFrameLevel(Perl_Target_CPFrame:GetFrameLevel() + 1);
Perl_Target_StatsFrame_CastClickOverlay:SetFrameLevel(Perl_Target_StatsFrame:GetFrameLevel() + 1);
if (DEFAULT_CHAT_FRAME) then
DEFAULT_CHAT_FRAME:AddMessage("|cffffff00Perl Classic: Target loaded successfully.");
end
end
-------------------
-- Event Handler --
-------------------
function Perl_Target_OnEvent(event)
if ((event == "PLAYER_TARGET_CHANGED") or (event == "PARTY_MEMBERS_CHANGED") or (event == "PARTY_LEADER_CHANGED") or (event == "PARTY_MEMBER_ENABLE") or (event == "PARTY_MEMBER_DISABLE")) then
if (UnitExists("target")) then
Perl_Target_Update_Once(); -- Set the unchanging info for the target
else
Perl_Target_Frame:Hide(); -- There is no target, hide the frame
end
return;
elseif (event == "UNIT_HEALTH" or event == "UNIT_MAXHEALTH") then
if (arg1 == "target") then
Perl_Target_Update_Health(); -- Update health values
end
return;
elseif ((event == "UNIT_ENERGY") or (event == "UNIT_MANA") or (event == "UNIT_RAGE") or (event == "UNIT_FOCUS") or (event == "UNIT_MAXMANA") or (event == "UNIT_MAXENERGY") or (event == "UNIT_MAXRAGE") or (event == "UNIT_MAXFOCUS")) then
if (arg1 == "target") then
Perl_Target_Update_Mana(); -- Update energy/mana/rage values
end
return;
elseif (event == "UNIT_AURA") then
if (arg1 == "target") then
Perl_Target_Buff_UpdateAll(); -- Update the buffs
end
return;
elseif (event == "UNIT_DYNAMIC_FLAGS") then
if (arg1 == "target") then
Perl_Target_Update_Text_Color(); -- Has the target been tapped by someone else?
end
return;
elseif (event == "UNIT_COMBAT") then
if (arg1 == "target") then
CombatFeedback_OnCombatEvent(arg2, arg3, arg4, arg5);
end
return;
elseif (event == "UNIT_SPELLMISS") then
if (arg1 == "target") then
CombatFeedback_OnSpellMissEvent(arg2);
end
return;
elseif (event == "UNIT_PVP_UPDATE") then
Perl_Target_Update_Text_Color(); -- Is the character PvP flagged?
Perl_Target_Update_PvP_Status_Icon(); -- Set pvp status icon
return;
elseif (event == "UNIT_PORTRAIT_UPDATE") then
if (arg1 == "target") then
Perl_Target_Update_Portrait();
end
return;
elseif (event == "UNIT_LEVEL") then
if (arg1 == "target") then
Perl_Target_Frame_Set_Level(); -- What level is it and is it rare/elite/boss
end
return;
elseif (event == "PLAYER_COMBO_POINTS") then
Perl_Target_Update_Combo_Points(); -- How many combo points are we at?
return;
elseif (event == "UNIT_DISPLAYPOWER") then
if (arg1 == "target") then
Perl_Target_Update_Mana_Bar(); -- What type of energy are they using now?
Perl_Target_Update_Mana(); -- Update the energy info immediately
end
return;
elseif (event == "VARIABLES_LOADED") or (event=="PLAYER_ENTERING_WORLD") then
Perl_Target_Initialize();
return;
elseif (event == "ADDON_LOADED") then
if (arg1 == "Perl_Target") then
Perl_Target_myAddOns_Support(); -- Attempt to load MyAddOns support
end
return;
else
return;
end
end
-------------------------------
-- Loading Settings Function --
-------------------------------
function Perl_Target_Initialize()
if (Initialized) then
Perl_Target_Set_Scale();
return;
end
-- Check if a previous exists, if not, enable by default.
if (type(Perl_Target_Config[UnitName("player")]) == "table") then
Perl_Target_GetVars();
else
Perl_Target_UpdateVars();
end
-- Major config options.
Perl_Target_Initialize_Frame_Color();
Perl_Target_Frame_Style();
Perl_Target_Buff_Debuff_Background();
Perl_Target_Frame:Hide();
Perl_Target_Set_Localized_ClassIcons();
-- Unregister the Blizzard frames via the 1.8 function
TargetFrame:UnregisterAllEvents();
TargetFrameHealthBar:UnregisterAllEvents();
TargetFrameManaBar:UnregisterAllEvents();
ComboFrame:UnregisterAllEvents();
Initialized = 1;
end
function Perl_Target_Initialize_Frame_Color()
Perl_Target_StatsFrame:SetBackdropColor(0, 0, 0, 1);
Perl_Target_StatsFrame:SetBackdropBorderColor(0.5, 0.5, 0.5, 1);
Perl_Target_NameFrame:SetBackdropColor(0, 0, 0, 1);
Perl_Target_NameFrame:SetBackdropBorderColor(0.5, 0.5, 0.5, 1);
Perl_Target_ClassNameFrame:SetBackdropColor(0, 0, 0, 1);
Perl_Target_ClassNameFrame:SetBackdropBorderColor(0.5, 0.5, 0.5, 1);
Perl_Target_CivilianFrame:SetBackdropColor(1, 1, 1, 1);
Perl_Target_CivilianFrame:SetBackdropBorderColor(0.5, 0.5, 0.5, 1);
Perl_Target_LevelFrame:SetBackdropColor(0, 0, 0, 1);
Perl_Target_LevelFrame:SetBackdropBorderColor(0.5, 0.5, 0.5, 1);
Perl_Target_BuffFrame:SetBackdropColor(0, 0, 0, 1);
Perl_Target_BuffFrame:SetBackdropBorderColor(0.5, 0.5, 0.5, 1);
Perl_Target_DebuffFrame:SetBackdropColor(0, 0, 0, 1);
Perl_Target_DebuffFrame:SetBackdropBorderColor(0.5, 0.5, 0.5, 1);
Perl_Target_CPFrame:SetBackdropColor(0, 0, 0, 1);
Perl_Target_CPFrame:SetBackdropBorderColor(0.5, 0.5, 0.5, 1);
Perl_Target_PortraitFrame:SetBackdropColor(0, 0, 0, 1);
Perl_Target_PortraitFrame:SetBackdropBorderColor(0.5, 0.5, 0.5, 1);
Perl_Target_RareEliteFrame:SetBackdropColor(0, 0, 0, 1);
Perl_Target_RareEliteFrame:SetBackdropBorderColor(0.5, 0.5, 0.5, 1);
Perl_Target_HealthBarText:SetTextColor(1, 1, 1, 1);
Perl_Target_ManaBarText:SetTextColor(1, 1, 1, 1);
Perl_Target_ClassNameBarText:SetTextColor(1, 1, 1);
end
--------------------------
-- The Update Functions --
--------------------------
function Perl_Target_Update_Once()
if (UnitExists("target")) then
Perl_Target_Frame:Show(); -- Show frame
Perl_Target_Set_Scale(); -- Set the scale (easier ways exist, but this is the safest)
Perl_Target_Set_Transparency(); -- Set the transparency (fix this method along with scale)
ComboFrame:Hide(); -- Hide default Combo Points
Perl_Target_Update_Combo_Points(); -- Do we have any combo points (we shouldn't)
Perl_Target_Frame_Set_Name(); -- Set the target's name
Perl_Target_Update_Portrait(); -- Set the target's portrait and adjust the combo point frame
Perl_Target_Update_Text_Color(); -- Has the target been tapped by someone else?
Perl_Target_Update_Health(); -- Set the target's health
Perl_Target_Update_Mana_Bar(); -- What type of mana bar is it?
Perl_Target_Update_Mana(); -- Set the target's mana
Perl_Target_Update_PvP_Status_Icon(); -- Set pvp status icon
Perl_Target_Frame_Set_PvPRank(); -- Set the pvp rank icon
Perl_Target_Frame_Set_Level(); -- What level is it and is it rare/elite/boss
Perl_Target_Set_Character_Class_Icon(); -- Draw the class icon?
Perl_Target_Set_Target_Class(); -- Set the target's class in the class frame
Perl_Target_Buff_UpdateAll(); -- Update the buffs
end
end
function Perl_Target_Update_Health()
local targethealth = UnitHealth("target");
local targethealthmax = UnitHealthMax("target");
local targethealthpercent = floor(targethealth/targethealthmax*100+0.5);
if (UnitIsDead("target") or UnitIsGhost("target")) then -- This prevents negative health
targethealth = 0;
targethealthpercent = 0;
end
-- Set Dead Icon
if (UnitIsDead("target") or UnitIsGhost("target")) then
Perl_Target_DeadStatus:Show();
else
Perl_Target_DeadStatus:Hide();
end
Perl_Target_HealthBar:SetMinMaxValues(0, targethealthmax);
Perl_Target_HealthBar:SetValue(targethealth);
if (PCUF_COLORHEALTH == 1) then
if ((targethealthpercent <= 100) and (targethealthpercent > 75)) then
Perl_Target_HealthBar:SetStatusBarColor(0, 0.8, 0);
Perl_Target_HealthBarBG:SetStatusBarColor(0, 0.8, 0, 0.25);
elseif ((targethealthpercent <= 75) and (targethealthpercent > 50)) then
Perl_Target_HealthBar:SetStatusBarColor(1, 1, 0);
Perl_Target_HealthBarBG:SetStatusBarColor(1, 1, 0, 0.25);
elseif ((targethealthpercent <= 50) and (targethealthpercent > 25)) then
Perl_Target_HealthBar:SetStatusBarColor(1, 0.5, 0);
Perl_Target_HealthBarBG:SetStatusBarColor(1, 0.5, 0, 0.25);
else
Perl_Target_HealthBar:SetStatusBarColor(1, 0, 0);
Perl_Target_HealthBarBG:SetStatusBarColor(1, 0, 0, 0.25);
end
else
Perl_Target_HealthBar:SetStatusBarColor(0, 0.8, 0);
Perl_Target_HealthBarBG:SetStatusBarColor(0, 0.8, 0, 0.25);
end
if (targethealthmax == 100) then
-- Begin Mobhealth support
if (mobhealthsupport == 1) then
if (MobHealthFrame) then
MobHealthFrame:Hide();
local index;
if UnitIsPlayer("target") then
index = UnitName("target");
else
index = UnitName("target")..":"..UnitLevel("target");
end
if ((MobHealthDB and MobHealthDB[index]) or (MobHealthPlayerDB and MobHealthPlayerDB[index])) then
local s, e;
local pts;
local pct;
if MobHealthDB[index] then
if (type(MobHealthDB[index]) ~= "string") then
Perl_Target_HealthBarText:SetText(targethealth.."%");
end
s, e, pts, pct = string.find(MobHealthDB[index], "^(%d+)/(%d+)$");
else
if (type(MobHealthPlayerDB[index]) ~= "string") then
Perl_Target_HealthBarText:SetText(targethealth.."%");
end
s, e, pts, pct = string.find(MobHealthPlayerDB[index], "^(%d+)/(%d+)$");
end
if (pts and pct) then
pts = pts + 0;
pct = pct + 0;
if (pct ~= 0) then
pointsPerPct = pts / pct;
else
pointsPerPct = 0;
end
end
local currentPct = UnitHealth("target");
if (pointsPerPct > 0) then
-- Stored unit info from the DB
if (framestyle == 1) then
Perl_Target_HealthBarTextRight:SetText(); -- Hide this text in this frame style
Perl_Target_HealthBarTextCompactPercent:SetText(); -- Hide this text in this frame style
Perl_Target_HealthBarText:SetText(string.format("%d", (currentPct * pointsPerPct) + 0.5).."/"..string.format("%d", (100 * pointsPerPct) + 0.5).." | "..targethealth.."%");
elseif (framestyle == 2) then
if (compactmode == 0) then
Perl_Target_HealthBarTextCompactPercent:SetText(); -- Hide this text in this frame style
if (tonumber(string.format("%d", (100 * pointsPerPct) + 0.5)) > 9999) then
Perl_Target_HealthBarText:SetText(string.format("%d", (currentPct * pointsPerPct) + 0.5).."/"..string.format("%d", (100 * pointsPerPct) + 0.5));
Perl_Target_HealthBarTextRight:SetText(targethealth.."%");
else
Perl_Target_HealthBarText:SetText(targethealth.."%");
Perl_Target_HealthBarTextRight:SetText(string.format("%d", (currentPct * pointsPerPct) + 0.5).."/"..string.format("%d", (100 * pointsPerPct) + 0.5));
end
else
if (compactpercent == 0) then
Perl_Target_HealthBarTextRight:SetText(); -- Hide this text in this frame style
Perl_Target_HealthBarTextCompactPercent:SetText(); -- Hide this text in this frame style
Perl_Target_HealthBarText:SetText(string.format("%d", (currentPct * pointsPerPct) + 0.5).."/"..string.format("%d", (100 * pointsPerPct) + 0.5));
else
Perl_Target_HealthBarTextRight:SetText(); -- Hide this text in this frame style
Perl_Target_HealthBarText:SetText(string.format("%d", (currentPct * pointsPerPct) + 0.5).."/"..string.format("%d", (100 * pointsPerPct) + 0.5));
Perl_Target_HealthBarTextCompactPercent:SetText(targethealth.."%");
end
end
end
end
else
-- Unit not in MobHealth DB
if (framestyle == 1) then -- This chunk of code is the same as the next two blocks in case you customize this
Perl_Target_HealthBarTextRight:SetText(); -- Hide this text in this frame style
Perl_Target_HealthBarTextCompactPercent:SetText(); -- Hide this text in this frame style
Perl_Target_HealthBarText:SetText(targethealth.."%");
elseif (framestyle == 2) then
if (compactmode == 0) then
Perl_Target_HealthBarTextCompactPercent:SetText(); -- Hide this text in this frame style
Perl_Target_HealthBarText:SetText(targethealth.."%");
Perl_Target_HealthBarTextRight:SetText(targethealth.."%");
else
if (compactpercent == 0) then
Perl_Target_HealthBarTextRight:SetText(); -- Hide this text in this frame style
Perl_Target_HealthBarTextCompactPercent:SetText(); -- Hide this text in this frame style
Perl_Target_HealthBarText:SetText(targethealth.."%");
else
Perl_Target_HealthBarTextRight:SetText(); -- Hide this text in this frame style
Perl_Target_HealthBarText:SetText(targethealth.."%");
Perl_Target_HealthBarTextCompactPercent:SetText(targethealth.."%");
end
end
end
end
-- End MobHealth Support
else
-- MobHealth isn't installed
if (framestyle == 1) then
Perl_Target_HealthBarTextRight:SetText(); -- Hide this text in this frame style
Perl_Target_HealthBarTextCompactPercent:SetText(); -- Hide this text in this frame style
Perl_Target_HealthBarText:SetText(targethealth.."%");
elseif (framestyle == 2) then
if (compactmode == 0) then
Perl_Target_HealthBarTextCompactPercent:SetText(); -- Hide this text in this frame style
Perl_Target_HealthBarText:SetText(targethealth.."%");
Perl_Target_HealthBarTextRight:SetText(targethealth.."%");
else
if (compactpercent == 0) then
Perl_Target_HealthBarTextRight:SetText(); -- Hide this text in this frame style
Perl_Target_HealthBarTextCompactPercent:SetText(); -- Hide this text in this frame style
Perl_Target_HealthBarText:SetText(targethealth.."%");
else
Perl_Target_HealthBarTextRight:SetText(); -- Hide this text in this frame style
Perl_Target_HealthBarText:SetText(targethealth.."%");
Perl_Target_HealthBarTextCompactPercent:SetText(targethealth.."%");
end
end
end
end
else -- mobhealthsupport == 0
if (MobHealthFrame) then
MobHealthFrame:Show();
end
-- MobHealth support is disabled
if (framestyle == 1) then
Perl_Target_HealthBarTextRight:SetText(); -- Hide this text in this frame style
Perl_Target_HealthBarTextCompactPercent:SetText(); -- Hide this text in this frame style
Perl_Target_HealthBarText:SetText(targethealth.."%");
elseif (framestyle == 2) then
if (compactmode == 0) then
Perl_Target_HealthBarTextCompactPercent:SetText(); -- Hide this text in this frame style
Perl_Target_HealthBarText:SetText(targethealth.."%");
Perl_Target_HealthBarTextRight:SetText(targethealth.."%");
else
if (compactpercent == 0) then
Perl_Target_HealthBarTextRight:SetText(); -- Hide this text in this frame style
Perl_Target_HealthBarTextCompactPercent:SetText(); -- Hide this text in this frame style
Perl_Target_HealthBarText:SetText(targethealth.."%");
else
Perl_Target_HealthBarTextRight:SetText(); -- Hide this text in this frame style
Perl_Target_HealthBarText:SetText(targethealth.."%");
Perl_Target_HealthBarTextCompactPercent:SetText(targethealth.."%");
end
end
end
end
else
-- Self/Party/Raid member
if (framestyle == 1) then
Perl_Target_HealthBarTextRight:SetText(); -- Hide this text in this frame style
Perl_Target_HealthBarTextCompactPercent:SetText(); -- Hide this text in this frame style
Perl_Target_HealthBarText:SetText(targethealth.."/"..targethealthmax);
elseif (framestyle == 2) then
if (compactmode == 0) then
Perl_Target_HealthBarTextCompactPercent:SetText(); -- Hide this text in this frame style
Perl_Target_HealthBarText:SetText(targethealthpercent.."%");
Perl_Target_HealthBarTextRight:SetText(targethealth.."/"..targethealthmax);
else
if (compactpercent == 0) then
Perl_Target_HealthBarTextRight:SetText(); -- Hide this text in this frame style
Perl_Target_HealthBarTextCompactPercent:SetText(); -- Hide this text in this frame style
Perl_Target_HealthBarText:SetText(targethealth.."/"..targethealthmax);
else
Perl_Target_HealthBarTextRight:SetText(); -- Hide this text in this frame style
Perl_Target_HealthBarText:SetText(targethealth.."/"..targethealthmax);
Perl_Target_HealthBarTextCompactPercent:SetText(targethealthpercent.."%");
end
end
end
end
end
function Perl_Target_Update_Mana()
local targetmana = UnitMana("target");
local targetmanamax = UnitManaMax("target");
local targetpower = UnitPowerType("target");
if (UnitIsDead("target") or UnitIsGhost("target")) then -- This prevents negative mana
targetmana = 0;
end
Perl_Target_ManaBar:SetMinMaxValues(0, targetmanamax);
Perl_Target_ManaBar:SetValue(targetmana);
if (framestyle == 1) then
Perl_Target_ManaBarTextRight:SetText(); -- Hide this text in this frame style
Perl_Target_ManaBarTextCompactPercent:SetText(); -- Hide this text in this frame style
if (targetpower == 1 or targetpower == 2) then
Perl_Target_ManaBarText:SetText(targetmana);
else
Perl_Target_ManaBarText:SetText(targetmana.."/"..targetmanamax);
end
elseif (framestyle == 2) then
local targetmanapercent = floor(targetmana/targetmanamax*100+0.5);
if (compactmode == 0) then
Perl_Target_ManaBarTextCompactPercent:SetText(); -- Hide this text in this frame style
if (targetpower == 1 or targetpower == 2) then
Perl_Target_ManaBarText:SetText(targetmana.."%");
Perl_Target_ManaBarTextRight:SetText(targetmana);
else
Perl_Target_ManaBarText:SetText(targetmanapercent.."%");
Perl_Target_ManaBarTextRight:SetText(targetmana.."/"..targetmanamax);
end
else
if (compactpercent == 0) then
Perl_Target_ManaBarTextRight:SetText(); -- Hide this text in this frame style
Perl_Target_ManaBarTextCompactPercent:SetText(); -- Hide this text in this frame style
if (targetpower == 1 or targetpower == 2) then
Perl_Target_ManaBarText:SetText(targetmana);
else
Perl_Target_ManaBarText:SetText(targetmana.."/"..targetmanamax);
end
else
Perl_Target_ManaBarTextRight:SetText(); -- Hide this text in this frame style
if (targetpower == 1 or targetpower == 2) then
Perl_Target_ManaBarText:SetText(targetmana);
Perl_Target_ManaBarTextCompactPercent:SetText(targetmana.."%");
else
Perl_Target_ManaBarText:SetText(targetmana.."/"..targetmanamax);
Perl_Target_ManaBarTextCompactPercent:SetText(targetmanapercent.."%");
end
end
end
end
end
function Perl_Target_Update_Mana_Bar()
local targetmanamax = UnitManaMax("target");
local targetpower = UnitPowerType("target");
-- Set mana bar color
if (targetmanamax == 0) then
Perl_Target_ManaBar:Hide();
Perl_Target_ManaBarBG:Hide();
Perl_Target_StatsFrame:SetHeight(30);
Perl_Target_StatsFrame_CastClickOverlay:SetHeight(30);
elseif (targetpower == 1) then
Perl_Target_ManaBar:SetStatusBarColor(1, 0, 0, 1);
Perl_Target_ManaBarBG:SetStatusBarColor(1, 0, 0, 0.25);
Perl_Target_ManaBar:Show();
Perl_Target_ManaBarBG:Show();
Perl_Target_StatsFrame:SetHeight(42);
Perl_Target_StatsFrame_CastClickOverlay:SetHeight(42);
elseif (targetpower == 2) then
Perl_Target_ManaBar:SetStatusBarColor(1, 0.5, 0, 1);
Perl_Target_ManaBarBG:SetStatusBarColor(1, 0.5, 0, 0.25);
Perl_Target_ManaBar:Show();
Perl_Target_ManaBarBG:Show();
Perl_Target_StatsFrame:SetHeight(42);
Perl_Target_StatsFrame_CastClickOverlay:SetHeight(42);
elseif (targetpower == 3) then
Perl_Target_ManaBar:SetStatusBarColor(1, 1, 0, 1);
Perl_Target_ManaBarBG:SetStatusBarColor(1, 1, 0, 0.25);
Perl_Target_ManaBar:Show();
Perl_Target_ManaBarBG:Show();
Perl_Target_StatsFrame:SetHeight(42);
Perl_Target_StatsFrame_CastClickOverlay:SetHeight(42);
else
Perl_Target_ManaBar:SetStatusBarColor(0, 0, 1, 1);
Perl_Target_ManaBarBG:SetStatusBarColor(0, 0, 1, 0.25);
Perl_Target_ManaBar:Show();
Perl_Target_ManaBarBG:Show();
Perl_Target_StatsFrame:SetHeight(42);
Perl_Target_StatsFrame_CastClickOverlay:SetHeight(42);
end
end
function Perl_Target_Update_Combo_Points()
local combopoints = GetComboPoints(); -- How many Combo Points does the player have?
ComboFrame:Hide(); -- Hide default Combo Points
if (showcp == 1) then
Perl_Target_CPText:SetText(combopoints);
Perl_Target_CPText:SetTextHeight(20);
if (combopoints == 5) then
Perl_Target_CPFrame:Show();
Perl_Target_CPText:SetTextColor(1, 0, 0); -- red text
elseif (combopoints == 4) then
Perl_Target_CPFrame:Show();
Perl_Target_CPText:SetTextColor(1, 0.5, 0); -- orange text
elseif (combopoints == 3) then
Perl_Target_CPFrame:Show();
Perl_Target_CPText:SetTextColor(1, 1, 0); -- yellow text
elseif (combopoints == 2) then
Perl_Target_CPFrame:Show();
Perl_Target_CPText:SetTextColor(0.5, 1, 0); -- yellow-green text
elseif (combopoints == 1) then
Perl_Target_CPFrame:Show();
Perl_Target_CPText:SetTextColor(0, 1, 0); -- green text
else
Perl_Target_CPFrame:Hide();
end
else
Perl_Target_CPFrame:Hide();
end
if (nameframecombopoints == 1) then -- this isn't nested since you can have both combo point styles on at the same time
Perl_Target_NameFrame_CPMeter:SetMinMaxValues(0, 5);
Perl_Target_NameFrame_CPMeter:SetValue(combopoints);
if (combopoints == 5) then
Perl_Target_NameFrame_CPMeter:Show();
elseif (combopoints == 4) then
Perl_Target_NameFrame_CPMeter:Show();
elseif (combopoints == 3) then
Perl_Target_NameFrame_CPMeter:Show();
elseif (combopoints == 2) then
Perl_Target_NameFrame_CPMeter:Show();
elseif (combopoints == 1) then
Perl_Target_NameFrame_CPMeter:Show();
else
Perl_Target_NameFrame_CPMeter:Hide();
end
else
Perl_Target_NameFrame_CPMeter:Hide();
end
end
function Perl_Target_Update_PvP_Status_Icon()
if (showpvpicon == 1) then
local factionGroup = UnitFactionGroup("target");
if (UnitIsPVPFreeForAll("target")) then
Perl_Target_PVPStatus:SetTexture("Interface\\TargetingFrame\\UI-PVP-FFA");
Perl_Target_PVPStatus:Show();
elseif (factionGroup and UnitIsPVP("target")) then
Perl_Target_PVPStatus:SetTexture("Interface\\TargetingFrame\\UI-PVP-"..factionGroup);
Perl_Target_PVPStatus:Show();
else
Perl_Target_PVPStatus:Hide();
end
else
Perl_Target_PVPStatus:Hide();
end
end
function Perl_Target_Update_Text_Color()
if (UnitIsPlayer("target") or UnitPlayerControlled("target")) then -- is it a player
local r, g, b;
if (UnitCanAttack("target", "player")) then -- are we in an enemy controlled zone
-- Hostile players are red
if (not UnitCanAttack("player", "target")) then -- enemy is not pvp enabled
r = 0.5;
g = 0.5;
b = 1.0;
else -- enemy is pvp enabled
r = 1.0;
g = 0.0;
b = 0.0;
end
elseif (UnitCanAttack("player", "target")) then -- enemy in a zone controlled by friendlies or when we're a ghost
-- Players we can attack but which are not hostile are yellow
r = 1.0;
g = 1.0;
b = 0.0;
elseif (UnitIsPVP("target")) then -- friendly pvp enabled character
-- Players we can assist but are PvP flagged are green
r = 0.0;
g = 1.0;
b = 0.0;
else -- friendly non pvp enabled character
-- All other players are blue (the usual state on the "blue" server)
r = 0.5;
g = 0.5;
b = 1.0;
end
Perl_Target_NameBarText:SetTextColor(r, g, b);
elseif (UnitIsTapped("target") and not UnitIsTappedByPlayer("target")) then
Perl_Target_NameBarText:SetTextColor(0.5,0.5,0.5); -- not our tap
else
local reaction = UnitReaction("target", "player");
if (reaction) then
local r, g, b;
r = UnitReactionColor[reaction].r;
g = UnitReactionColor[reaction].g;
b = UnitReactionColor[reaction].b;
Perl_Target_NameBarText:SetTextColor(r, g, b);
else
Perl_Target_NameBarText:SetTextColor(0.5, 0.5, 1.0);
end
end
end
function Perl_Target_Frame_Set_Name()
local targetname = UnitName("target");
-- Set name
if (framestyle == 1) then
if (strlen(targetname) > 19) then
targetname = strsub(targetname, 1, 18).."...";
end
elseif (framestyle == 2) then
if (compactmode == 0) then
if (strlen(targetname) > 19) then
targetname = strsub(targetname, 1, 18).."...";
end
else
if (compactpercent == 1) then
if (strlen(targetname) > 15) then
targetname = strsub(targetname, 1, 14).."...";
end
else
if (strlen(targetname) > 11) then
targetname = strsub(targetname, 1, 10).."...";
end
end
end
end
Perl_Target_NameBarText:SetText(targetname);
end
function Perl_Target_Frame_Set_PvPRank()
if (showpvprank == 1) then
if (UnitIsPlayer("target")) then
local rankNumber = UnitPVPRank("target");
if (rankNumber == 0) then
Perl_Target_PVPRank:Hide();
elseif (rankNumber < 14) then
rankNumber = rankNumber - 4;
Perl_Target_PVPRank:SetTexture("Interface\\PvPRankBadges\\PvPRank0"..rankNumber);
Perl_Target_PVPRank:Show();
else
rankNumber = rankNumber - 4;
Perl_Target_PVPRank:SetTexture("Interface\\PvPRankBadges\\PvPRank"..rankNumber);
Perl_Target_PVPRank:Show();
end
else
Perl_Target_PVPRank:Hide();
end
else
Perl_Target_PVPRank:Hide();
end
end
function Perl_Target_Frame_Set_Level()
local targetlevel = UnitLevel("target"); -- Get and store the level of the target
local targetlevelcolor = GetDifficultyColor(targetlevel); -- Get the "con color" of the target
local targetclassification = UnitClassification("target"); -- Get the type of character the target is (rare, elite, worldboss)
local targetclassificationframetext = nil; -- Variable set to nil so we can easily track if target is a player or not elite
Perl_Target_LevelBarText:SetVertexColor(targetlevelcolor.r, targetlevelcolor.g, targetlevelcolor.b);
Perl_Target_RareEliteBarText:SetVertexColor(targetlevelcolor.r, targetlevelcolor.g, targetlevelcolor.b);
if ((targetclassification == "worldboss") or (targetlevel < 0)) then
Perl_Target_LevelBarText:SetTextColor(1, 0, 0);
if (UnitIsPlayer("target")) then
targetclassificationframetext = nil;
else
Perl_Target_RareEliteBarText:SetTextColor(1, 0, 0);
targetclassificationframetext = "Boss";
end
targetlevel = "??";
end
if (targetclassification == "rareelite") then
targetclassificationframetext = "Rare+";
targetlevel = targetlevel.."r+";
elseif (targetclassification == "elite") then
targetclassificationframetext = "Elite";
targetlevel = targetlevel.."+";
elseif (targetclassification == "rare") then
targetclassificationframetext = "Rare";
targetlevel = targetlevel.."r";
end
Perl_Target_LevelBarText:SetText(targetlevel); -- Set level frame text
if (showrareeliteframe == 1) then
if (targetclassificationframetext == nil) then
Perl_Target_RareEliteFrame:Hide(); -- RareElite is hidden if target is a player
else
Perl_Target_RareEliteFrame:Show(); -- RareElite is hidden if shown if target is a npc
Perl_Target_RareEliteBarText:SetText(targetclassificationframetext); -- Set the text
end
else
Perl_Target_RareEliteFrame:Hide(); -- RareElite is hidden if disabled
end
end
function Perl_Target_Set_Character_Class_Icon()
if (showclassicon == 1) then
if (UnitIsPlayer("target")) then
local PlayerClass = UnitClass("target");
Perl_Target_ClassTexture:SetTexCoord(Perl_Target_ClassPosRight[PlayerClass], Perl_Target_ClassPosLeft[PlayerClass], Perl_Target_ClassPosTop[PlayerClass], Perl_Target_ClassPosBottom[PlayerClass]);
Perl_Target_ClassTexture:Show();
else
Perl_Target_ClassTexture:Hide();
end
else
Perl_Target_ClassTexture:Hide();
end
end
function Perl_Target_Set_Target_Class()
if (showclassframe == 1) then
if (UnitIsPlayer("target")) then
local targetClass = UnitClass("target");
Perl_Target_ClassNameBarText:SetText(targetClass);
Perl_Target_ClassNameFrame:Show();
Perl_Target_CivilianFrame:Hide();
else
local targetCreatureType = UnitCreatureType("target");
if (targetCreatureType == PERL_LOCALIZED_NOTSPECIFIED) then
targetCreatureType = PERL_LOCALIZED_CREATURE;
end
Perl_Target_ClassNameBarText:SetText(targetCreatureType);
Perl_Target_ClassNameFrame:Show();
if (UnitIsCivilian("target")) then
Perl_Target_CivilianBarText:SetText(PERL_LOCALIZED_CIVILIAN);
Perl_Target_CivilianBarText:SetTextColor(1, 0, 0);
Perl_Target_CivilianFrame:Show();
else
Perl_Target_CivilianFrame:Hide();
end
end
else
Perl_Target_ClassNameFrame:Hide();
Perl_Target_CivilianFrame:Hide();
end
end
function Perl_Target_Update_Portrait()
if (showportrait == 1) then
local level = Perl_Target_PortraitFrame:GetFrameLevel(); -- Get the frame level of the main portrait frame
Perl_Target_PortraitTextFrame:SetFrameLevel(level + 1); -- Put the combat text above it so the portrait graphic doesn't go on top of it
Perl_Target_CPFrame:SetPoint("TOPLEFT", Perl_Target_PortraitFrame, "TOPRIGHT", -4, -31); -- Reposition the combo point frame
Perl_Target_PortraitFrame:Show(); -- Show the main portrait frame
if (threedportrait == 0) then
SetPortraitTexture(Perl_Target_Portrait, "target"); -- Load the correct 2d graphic
Perl_Target_PortraitFrame_TargetModel:Hide(); -- Hide the 3d graphic
Perl_Target_Portrait:Show(); -- Show the 2d graphic
else
if UnitIsVisible("target") then
Perl_Target_PortraitFrame_TargetModel:SetUnit("target"); -- Load the correct 3d graphic
Perl_Target_Portrait:Hide(); -- Hide the 2d graphic
Perl_Target_PortraitFrame_TargetModel:Show(); -- Show the 3d graphic
Perl_Target_PortraitFrame_TargetModel:SetCamera(0);
else
SetPortraitTexture(Perl_Target_Portrait, "target"); -- Load the correct 2d graphic
Perl_Target_PortraitFrame_TargetModel:Hide(); -- Hide the 3d graphic
Perl_Target_Portrait:Show(); -- Show the 2d graphic
end
end
Perl_Target_PortraitTextFrame:Show(); -- Show the combat text frame
else
Perl_Target_CPFrame:SetPoint("TOPLEFT", Perl_Target_StatsFrame, "TOPRIGHT", -4, 0); -- Reposition the combo point frame
Perl_Target_PortraitFrame:Hide(); -- Hide the frame and 2d/3d portion
Perl_Target_PortraitTextFrame:Hide(); -- Hide the combat text
end
end
function Perl_Target_Portrait_Combat_Text()
if (portraitcombattext == 1) then
CombatFeedback_OnUpdate(arg1);
end
end
function Perl_Target_Buff_Debuff_Background()
if (hidebuffbackground == 0) then
Perl_Target_BuffFrame:SetBackdrop({bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", tile = true, tileSize = 16, edgeSize = 16, insets = { left = 5, right = 5, top = 5, bottom = 5 }});
Perl_Target_DebuffFrame:SetBackdrop({bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", tile = true, tileSize = 16, edgeSize = 16, insets = { left = 5, right = 5, top = 5, bottom = 5 }});
Perl_Target_BuffFrame:SetBackdropColor(0, 0, 0, 1);
Perl_Target_BuffFrame:SetBackdropBorderColor(0.5, 0.5, 0.5, 1);
Perl_Target_DebuffFrame:SetBackdropColor(0, 0, 0, 1);
Perl_Target_DebuffFrame:SetBackdropBorderColor(0.5, 0.5, 0.5, 1);
else
Perl_Target_BuffFrame:SetBackdrop(nil);
Perl_Target_DebuffFrame:SetBackdrop(nil);
end
end
function Perl_Target_Frame_Style()
Perl_Target_RareEliteFrame:SetPoint("TOPLEFT", "Perl_Target_CivilianFrame", "TOPRIGHT", -5, 0);
if (framestyle == 1) then
Perl_Target_HealthBar:SetWidth(200);
Perl_Target_HealthBarBG:SetWidth(200);
Perl_Target_ManaBar:SetWidth(200);
Perl_Target_ManaBarBG:SetWidth(200);
Perl_Target_HealthBar:SetPoint("TOP", "Perl_Target_StatsFrame", "TOP", 0, -10);
Perl_Target_ManaBar:SetPoint("TOP", "Perl_Target_HealthBar", "BOTTOM", 0, -2);
Perl_Target_CivilianFrame:SetWidth(95);
Perl_Target_ClassNameFrame:SetWidth(90);
Perl_Target_LevelFrame:SetWidth(46);
Perl_Target_Name:SetWidth(180);
Perl_Target_NameFrame:SetWidth(180);
Perl_Target_RareEliteFrame:SetWidth(46);
Perl_Target_StatsFrame:SetWidth(221);
Perl_Target_NameFrame_CPMeter:SetWidth(170);
Perl_Target_CivilianFrame_CastClickOverlay:SetWidth(95);
Perl_Target_NameFrame_CastClickOverlay:SetWidth(180);
Perl_Target_StatsFrame_CastClickOverlay:SetWidth(221);
elseif (framestyle == 2) then
Perl_Target_HealthBar:SetWidth(150);
Perl_Target_HealthBarBG:SetWidth(150);
Perl_Target_ManaBar:SetWidth(150);
Perl_Target_ManaBarBG:SetWidth(150);
Perl_Target_HealthBar:SetPoint("TOPLEFT", "Perl_Target_StatsFrame", "TOPLEFT", 10, -10);
Perl_Target_ManaBar:SetPoint("TOP", "Perl_Target_HealthBar", "BOTTOM", 0, -2);
if (compactmode == 0) then
Perl_Target_CivilianFrame:SetWidth(114);
Perl_Target_ClassNameFrame:SetWidth(90);
Perl_Target_LevelFrame:SetWidth(46);
Perl_Target_Name:SetWidth(199);
Perl_Target_NameFrame:SetWidth(199);
Perl_Target_RareEliteFrame:SetWidth(46);
Perl_Target_StatsFrame:SetWidth(240);
Perl_Target_NameFrame_CPMeter:SetWidth(189);
Perl_Target_CivilianFrame_CastClickOverlay:SetWidth(114);
Perl_Target_NameFrame_CastClickOverlay:SetWidth(199);
Perl_Target_StatsFrame_CastClickOverlay:SetWidth(240);
else
if (compactpercent == 0) then
Perl_Target_CivilianFrame:SetWidth(85);
Perl_Target_ClassNameFrame:SetWidth(90);
Perl_Target_LevelFrame:SetWidth(46);
Perl_Target_Name:SetWidth(129);
Perl_Target_NameFrame:SetWidth(129);
Perl_Target_RareEliteFrame:SetWidth(46);
Perl_Target_StatsFrame:SetWidth(170);
Perl_Target_RareEliteFrame:SetPoint("TOPLEFT", "Perl_Target_CivilianFrame", "TOPRIGHT", -46, 0);
Perl_Target_NameFrame_CPMeter:SetWidth(119);
Perl_Target_CivilianFrame_CastClickOverlay:SetWidth(85);
Perl_Target_NameFrame_CastClickOverlay:SetWidth(129);
Perl_Target_StatsFrame_CastClickOverlay:SetWidth(170);
else
Perl_Target_CivilianFrame:SetWidth(79);
Perl_Target_ClassNameFrame:SetWidth(90);
Perl_Target_LevelFrame:SetWidth(46);
Perl_Target_Name:SetWidth(164);
Perl_Target_NameFrame:SetWidth(164);
Perl_Target_RareEliteFrame:SetWidth(46);
Perl_Target_StatsFrame:SetWidth(205);
Perl_Target_NameFrame_CPMeter:SetWidth(154);
Perl_Target_CivilianFrame_CastClickOverlay:SetWidth(79);
Perl_Target_NameFrame_CastClickOverlay:SetWidth(164);
Perl_Target_StatsFrame_CastClickOverlay:SetWidth(205);
end
end
end
end
function Perl_Target_Set_Localized_ClassIcons()
Perl_Target_ClassPosRight = {
[PERL_LOCALIZED_DRUID] = 0.75,
[PERL_LOCALIZED_HUNTER] = 0,
[PERL_LOCALIZED_MAGE] = 0.25,
[PERL_LOCALIZED_PALADIN] = 0,
[PERL_LOCALIZED_PRIEST] = 0.5,
[PERL_LOCALIZED_ROGUE] = 0.5,
[PERL_LOCALIZED_SHAMAN] = 0.25,
[PERL_LOCALIZED_WARLOCK] = 0.75,
[PERL_LOCALIZED_WARRIOR] = 0,
};
Perl_Target_ClassPosLeft = {
[PERL_LOCALIZED_DRUID] = 1,
[PERL_LOCALIZED_HUNTER] = 0.25,
[PERL_LOCALIZED_MAGE] = 0.5,
[PERL_LOCALIZED_PALADIN] = 0.25,
[PERL_LOCALIZED_PRIEST] = 0.75,
[PERL_LOCALIZED_ROGUE] = 0.75,
[PERL_LOCALIZED_SHAMAN] = 0.5,
[PERL_LOCALIZED_WARLOCK] = 1,
[PERL_LOCALIZED_WARRIOR] = 0.25,
};
Perl_Target_ClassPosTop = {
[PERL_LOCALIZED_DRUID] = 0,
[PERL_LOCALIZED_HUNTER] = 0.25,
[PERL_LOCALIZED_MAGE] = 0,
[PERL_LOCALIZED_PALADIN] = 0.5,
[PERL_LOCALIZED_PRIEST] = 0.25,
[PERL_LOCALIZED_ROGUE] = 0,
[PERL_LOCALIZED_SHAMAN] = 0.25,
[PERL_LOCALIZED_WARLOCK] = 0.25,
[PERL_LOCALIZED_WARRIOR] = 0,
};
Perl_Target_ClassPosBottom = {
[PERL_LOCALIZED_DRUID] = 0.25,
[PERL_LOCALIZED_HUNTER] = 0.5,
[PERL_LOCALIZED_MAGE] = 0.25,
[PERL_LOCALIZED_PALADIN] = 0.75,
[PERL_LOCALIZED_PRIEST] = 0.5,
[PERL_LOCALIZED_ROGUE] = 0.25,
[PERL_LOCALIZED_SHAMAN] = 0.5,
[PERL_LOCALIZED_WARLOCK] = 0.5,
[PERL_LOCALIZED_WARRIOR] = 0.25,
};
end
--------------------------
-- GUI Config Functions --
--------------------------
function Perl_Target_Set_Buffs(newbuffnumber)
if (newbuffnumber == nil) then
newbuffnumber = 16;
end
numbuffsshown = newbuffnumber;
Perl_Target_UpdateVars();
Perl_Target_Reset_Buffs(); -- Reset the buff icons
Perl_Target_Buff_UpdateAll(); -- Repopulate the buff icons
end
function Perl_Target_Set_Debuffs(newdebuffnumber)
if (newdebuffnumber == nil) then
newdebuffnumber = 16;
end
numdebuffsshown = newdebuffnumber;
Perl_Target_UpdateVars();
Perl_Target_Reset_Buffs(); -- Reset the buff icons
Perl_Target_Buff_UpdateAll(); -- Repopulate the buff icons
end
function Perl_Target_Set_Class_Icon(newvalue)
showclassicon = newvalue;
Perl_Target_UpdateVars();
Perl_Target_Update_Once();
end
function Perl_Target_Set_PvP_Rank_Icon(newvalue)
showpvprank = newvalue;
Perl_Target_UpdateVars();
Perl_Target_Update_Once();
end
function Perl_Target_Set_PvP_Status_Icon(newvalue)
showpvpicon = newvalue;
Perl_Target_UpdateVars();
Perl_Target_Update_Once();
end
function Perl_Target_Set_Class_Frame(newvalue)
showclassframe = newvalue;
Perl_Target_UpdateVars();
Perl_Target_Update_Once();
end
function Perl_Target_Set_Combo_Points(newvalue)
showcp = newvalue;
Perl_Target_UpdateVars();
Perl_Target_Update_Once();
end
function Perl_Target_Set_MobHealth(newvalue)
mobhealthsupport = newvalue;
Perl_Target_UpdateVars();
Perl_Target_Update_Once();
end
function Perl_Target_Set_Lock(newvalue)
locked = newvalue;
Perl_Target_UpdateVars();
end
function Perl_Target_Set_Portrait(newvalue)
showportrait = newvalue;
Perl_Target_UpdateVars();
Perl_Target_Update_Once();
end
function Perl_Target_Set_3D_Portrait(newvalue)
threedportrait = newvalue;
Perl_Target_UpdateVars();
Perl_Target_Update_Once();
end
function Perl_Target_Set_Rare_Elite(newvalue)
showrareeliteframe = newvalue;
Perl_Target_UpdateVars();
Perl_Target_Update_Once();
end
function Perl_Target_Set_Portrait_Combat_Text(newvalue)
portraitcombattext = newvalue;
Perl_Target_UpdateVars();
end
function Perl_Target_Set_Combo_Name_Frame(newvalue)
nameframecombopoints = newvalue;
Perl_Target_UpdateVars();
Perl_Target_Update_Once();
end
function Perl_Target_Set_Combo_Frame_Debuffs(newvalue)
comboframedebuffs = newvalue;
Perl_Target_UpdateVars();
Perl_Target_Update_Once();
end
function Perl_Target_Set_Frame_Style(newvalue)
framestyle = newvalue;
Perl_Target_UpdateVars();
Perl_Target_Frame_Style();
Perl_Target_Update_Once();
end
function Perl_Target_Set_Compact_Mode(newvalue)
compactmode = newvalue;
Perl_Target_UpdateVars();
Perl_Target_Frame_Style();
Perl_Target_Update_Once();
end
function Perl_Target_Set_Compact_Percents(newvalue)
compactpercent = newvalue;
Perl_Target_UpdateVars();
Perl_Target_Frame_Style();
Perl_Target_Update_Once();
end
function Perl_Target_Set_Buff_Debuff_Background(newvalue)
hidebuffbackground = newvalue;
Perl_Target_UpdateVars();
Perl_Target_Buff_Debuff_Background();
end
function Perl_Target_Set_Scale(number)
local unsavedscale;
if (number ~= nil) then
scale = (number / 100); -- convert the user input to a wow acceptable value
end
unsavedscale = 1 - UIParent:GetEffectiveScale() + scale; -- run it through the scaling formula introduced in 1.9
Perl_Target_Frame:SetScale(unsavedscale);
Perl_Target_Set_BuffDebuff_Scale(buffdebuffscale*100); -- maintain the buff/debuff scale
Perl_Target_UpdateVars();
end
function Perl_Target_Set_BuffDebuff_Scale(number)
local unsavedscale;
if (number ~= nil) then
buffdebuffscale = (number / 100); -- convert the user input to a wow acceptable value
end
unsavedscale = 1 - UIParent:GetEffectiveScale() + buffdebuffscale; -- run it through the scaling formula introduced in 1.9
Perl_Target_BuffFrame:SetScale(buffdebuffscale);
Perl_Target_DebuffFrame:SetScale(buffdebuffscale);
Perl_Target_UpdateVars();
end
function Perl_Target_Set_Transparency(number)
if (number ~= nil) then
transparency = (number / 100); -- convert the user input to a wow acceptable value
end
Perl_Target_Frame:SetAlpha(transparency);
Perl_Target_UpdateVars();
end
------------------------------
-- Saved Variable Functions --
------------------------------
function Perl_Target_GetVars()
locked = Perl_Target_Config[UnitName("player")]["Locked"];
showcp = Perl_Target_Config[UnitName("player")]["ComboPoints"];
showclassicon = Perl_Target_Config[UnitName("player")]["ClassIcon"];
showclassframe = Perl_Target_Config[UnitName("player")]["ClassFrame"];
showpvpicon = Perl_Target_Config[UnitName("player")]["PvPIcon"];
numbuffsshown = Perl_Target_Config[UnitName("player")]["Buffs"];
numdebuffsshown = Perl_Target_Config[UnitName("player")]["Debuffs"];
mobhealthsupport = Perl_Target_Config[UnitName("player")]["MobHealthSupport"];
scale = Perl_Target_Config[UnitName("player")]["Scale"];
showpvprank = Perl_Target_Config[UnitName("player")]["ShowPvPRank"];
transparency = Perl_Target_Config[UnitName("player")]["Transparency"];
buffdebuffscale = Perl_Target_Config[UnitName("player")]["BuffDebuffScale"];
showportrait = Perl_Target_Config[UnitName("player")]["ShowPortrait"];
threedportrait = Perl_Target_Config[UnitName("player")]["ThreeDPortrait"];
portraitcombattext = Perl_Target_Config[UnitName("player")]["PortraitCombatText"];
showrareeliteframe = Perl_Target_Config[UnitName("player")]["ShowRareEliteFrame"];
nameframecombopoints = Perl_Target_Config[UnitName("player")]["NameFrameComboPoints"];
comboframedebuffs = Perl_Target_Config[UnitName("player")]["ComboFrameDebuffs"];
framestyle = Perl_Target_Config[UnitName("player")]["FrameStyle"];
compactmode = Perl_Target_Config[UnitName("player")]["CompactMode"];
compactpercent = Perl_Target_Config[UnitName("player")]["CompactPercent"];
hidebuffbackground = Perl_Target_Config[UnitName("player")]["HideBuffBackground"];
if (locked == nil) then
locked = 0;
end
if (showcp == nil) then
showcp = 1;
end
if (showclassicon == nil) then
showclassicon = 1;
end
if (showclassframe == nil) then
showclassframe = 1;
end
if (showpvpicon == nil) then
showpvpicon = 1;
end
if (numbuffsshown == nil) then
numbuffsshown = 16;
end
if (numdebuffsshown == nil) then
numdebuffsshown = 16;
end
if (mobhealthsupport == nil) then
mobhealthsupport = 1;
end
if (scale == nil) then
scale = 1;
end
if (showpvprank == nil) then
showpvprank = 0;
end
if (transparency == nil) then
transparency = 1;
end
if (buffdebuffscale == nil) then
buffdebuffscale = 1;
end
if (showportrait == nil) then
showportrait = 0;
end
if (threedportrait == nil) then
threedportrait = 0;
end
if (portraitcombattext == nil) then
portraitcombattext = 1;
end
if (showrareeliteframe == nil) then
showrareeliteframe = 0;
end
if (nameframecombopoints == nil) then
nameframecombopoints = 0;
end
if (comboframedebuffs == nil) then
comboframedebuffs = 0;
end
if (framestyle == nil) then
framestyle = 1;
end
if (compactmode == nil) then
compactmode = 0;
end
if (compactpercent == nil) then
compactpercent = 0;
end
if (hidebuffbackground == nil) then
hidebuffbackground = 0;
end
local vars = {
["locked"] = locked,
["showcp"] = showcp,
["showclassicon"] = showclassicon,
["showclassframe"] = showclassframe,
["showpvpicon"] = showpvpicon,
["numbuffsshown"] = numbuffsshown,
["numdebuffsshown"] = numdebuffsshown,
["mobhealthsupport"] = mobhealthsupport,
["scale"] = scale,
["showpvprank"] = showpvprank,
["transparency"] = transparency,
["buffdebuffscale"] = buffdebuffscale,
["showportrait"] = showportrait,
["threedportrait"] = threedportrait,
["portraitcombattext"] = portraitcombattext,
["showrareeliteframe"] = showrareeliteframe,
["nameframecombopoints"] = nameframecombopoints,
["comboframedebuffs"] = comboframedebuffs,
["framestyle"] = framestyle,
["compactmode"] = compactmode,
["compactpercent"] = compactpercent,
["hidebuffbackground"] = hidebuffbackground,
}
return vars;
end
function Perl_Target_UpdateVars(vartable)
if (vartable ~= nil) then
-- Sanity checks in case you use a load from an old version
if (vartable["Global Settings"] ~= nil) then
if (vartable["Global Settings"]["Locked"] ~= nil) then
locked = vartable["Global Settings"]["Locked"];
else
locked = nil;
end
if (vartable["Global Settings"]["ComboPoints"] ~= nil) then
showcp = vartable["Global Settings"]["ComboPoints"];
else
showcp = nil;
end
if (vartable["Global Settings"]["ClassIcon"] ~= nil) then
showclassicon = vartable["Global Settings"]["ClassIcon"];
else
showclassicon = nil;
end
if (vartable["Global Settings"]["ClassFrame"] ~= nil) then
showclassframe = vartable["Global Settings"]["ClassFrame"];
else
showclassframe = nil;
end
if (vartable["Global Settings"]["PvPIcon"] ~= nil) then
showpvpicon = vartable["Global Settings"]["PvPIcon"];
else
showpvpicon = nil;
end
if (vartable["Global Settings"]["Buffs"] ~= nil) then
numbuffsshown = vartable["Global Settings"]["Buffs"];
else
numbuffsshown = nil;
end
if (vartable["Global Settings"]["Debuffs"] ~= nil) then
numdebuffsshown = vartable["Global Settings"]["Debuffs"];
else
numdebuffsshown = nil;
end
if (vartable["Global Settings"]["MobHealthSupport"] ~= nil) then
mobhealthsupport = vartable["Global Settings"]["MobHealthSupport"];
else
mobhealthsupport = nil;
end
if (vartable["Global Settings"]["Scale"] ~= nil) then
scale = vartable["Global Settings"]["Scale"];
else
scale = nil;
end
if (vartable["Global Settings"]["ShowPvPRank"] ~= nil) then
showpvprank = vartable["Global Settings"]["ShowPvPRank"];
else
showpvprank = nil;
end
if (vartable["Global Settings"]["Transparency"] ~= nil) then
transparency = vartable["Global Settings"]["Transparency"];
else
transparency = nil;
end
if (vartable["Global Settings"]["BuffDebuffScale"] ~= nil) then
buffdebuffscale = vartable["Global Settings"]["BuffDebuffScale"];
else
buffdebuffscale = nil;
end
if (vartable["Global Settings"]["ShowPortrait"] ~= nil) then
showportrait = vartable["Global Settings"]["ShowPortrait"];
else
showportrait = nil;
end
if (vartable["Global Settings"]["ThreeDPortrait"] ~= nil) then
threedportrait = vartable["Global Settings"]["ThreeDPortrait"];
else
threedportrait = nil;
end
if (vartable["Global Settings"]["PortraitCombatText"] ~= nil) then
portraitcombattext = vartable["Global Settings"]["PortraitCombatText"];
else
portraitcombattext = nil;
end
if (vartable["Global Settings"]["ShowRareEliteFrame"] ~= nil) then
showrareeliteframe = vartable["Global Settings"]["ShowRareEliteFrame"];
else
showrareeliteframe = nil;
end
if (vartable["Global Settings"]["NameFrameComboPoints"] ~= nil) then
nameframecombopoints = vartable["Global Settings"]["NameFrameComboPoints"];
else
nameframecombopoints = nil;
end
if (vartable["Global Settings"]["ComboFrameDebuffs"] ~= nil) then
comboframedebuffs = vartable["Global Settings"]["ComboFrameDebuffs"];
else
comboframedebuffs = nil;
end
if (vartable["Global Settings"]["FrameStyle"] ~= nil) then
framestyle = vartable["Global Settings"]["FrameStyle"];
else
framestyle = nil;
end
if (vartable["Global Settings"]["CompactMode"] ~= nil) then
compactmode = vartable["Global Settings"]["CompactMode"];
else
compactmode = nil;
end
if (vartable["Global Settings"]["CompactPercent"] ~= nil) then
compactpercent = vartable["Global Settings"]["CompactPercent"];
else
compactpercent = nil;
end
if (vartable["Global Settings"]["HideBuffBackground"] ~= nil) then
hidebuffbackground = vartable["Global Settings"]["HideBuffBackground"];
else
hidebuffbackground = nil;
end
end
-- Set the new values if any new values were found, same defaults as above
if (locked == nil) then
locked = 0;
end
if (showcp == nil) then
showcp = 1;
end
if (showclassicon == nil) then
showclassicon = 1;
end
if (showclassframe == nil) then
showclassframe = 1;
end
if (showpvpicon == nil) then
showpvpicon = 1;
end
if (numbuffsshown == nil) then
numbuffsshown = 16;
end
if (numdebuffsshown == nil) then
numdebuffsshown = 16;
end
if (mobhealthsupport == nil) then
mobhealthsupport = 1;
end
if (scale == nil) then
scale = 1;
end
if (showpvprank == nil) then
showpvprank = 0;
end
if (transparency == nil) then
transparency = 1;
end
if (buffdebuffscale == nil) then
buffdebuffscale = 1;
end
if (showportrait == nil) then
showportrait = 0;
end
if (threedportrait == nil) then
threedportrait = 0;
end
if (portraitcombattext == nil) then
portraitcombattext = 1;
end
if (showrareeliteframe == nil) then
showrareeliteframe = 0;
end
if (nameframecombopoints == nil) then
nameframecombopoints = 0;
end
if (comboframedebuffs == nil) then
comboframedebuffs = 0;
end
if (framestyle == nil) then
framestyle = 1;
end
if (compactmode == nil) then
compactmode = 0;
end
if (compactpercent == nil) then
compactpercent = 0;
end
if (hidebuffbackground == nil) then
hidebuffbackground = 0;
end
-- Call any code we need to activate them
Perl_Target_Reset_Buffs(); -- Reset the buff icons
Perl_Target_Frame_Style(); -- Reposition the frames
Perl_Target_Buff_Debuff_Background(); -- Hide/Show the background frame
Perl_Target_Update_Once();
end
Perl_Target_Config[UnitName("player")] = {
["Locked"] = locked,
["ComboPoints"] = showcp,
["ClassIcon"] = showclassicon,
["ClassFrame"] = showclassframe,
["PvPIcon"] = showpvpicon,
["Buffs"] = numbuffsshown,
["Debuffs"] = numdebuffsshown,
["MobHealthSupport"] = mobhealthsupport,
["Scale"] = scale,
["ShowPvPRank"] = showpvprank,
["Transparency"] = transparency,
["BuffDebuffScale"] = buffdebuffscale,
["ShowPortrait"] = showportrait,
["ThreeDPortrait"] = threedportrait,
["PortraitCombatText"] = portraitcombattext,
["ShowRareEliteFrame"] = showrareeliteframe,
["NameFrameComboPoints"] = nameframecombopoints,
["ComboFrameDebuffs"] = comboframedebuffs,
["FrameStyle"] = framestyle,
["CompactMode"] = compactmode,
["CompactPercent"] = compactpercent,
["HideBuffBackground"] = hidebuffbackground,
};
end
--------------------
-- Buff Functions --
--------------------
function Perl_Target_Buff_UpdateAll()
local friendly;
if (UnitName("target")) then
if (nameframecombopoints == 1 or comboframedebuffs == 1) then
Perl_Target_Buff_UpdateCPMeter();
end
if (UnitIsFriend("player", "target")) then
friendly = 1;
else
friendly = 0;
end
local buffmax = 0;
for buffnum=1,numbuffsshown do
local button = getglobal("Perl_Target_Buff"..buffnum);
local icon = getglobal(button:GetName().."Icon");
local debuff = getglobal(button:GetName().."DebuffBorder");
if (UnitBuff("target", buffnum)) then
icon:SetTexture(UnitBuff("target", buffnum));
button.isdebuff = 0;
debuff:Hide();
button:Show();
buffmax = buffnum;
else
button:Hide();
end
end
local debuffmax = 0;
local debuffCount, debuffTexture, debuffApplications;
for debuffnum=1,numdebuffsshown do
debuffTexture, debuffApplications = UnitDebuff("target", debuffnum);
local button = getglobal("Perl_Target_Debuff"..debuffnum);
local icon = getglobal(button:GetName().."Icon");
local debuff = getglobal(button:GetName().."DebuffBorder");
if (UnitDebuff("target", debuffnum)) then
icon:SetTexture(debuffTexture);
button.isdebuff = 1;
debuff:Show();
button:Show();
debuffCount = getglobal("Perl_Target_Debuff"..debuffnum.."Count");
if (debuffApplications > 1) then
debuffCount:SetText(debuffApplications);
debuffCount:Show();
else
debuffCount:Hide();
end
debuffmax = debuffnum;
else
button:Hide();
end
end
if (buffmax == 0) then
Perl_Target_BuffFrame:Hide();
else
if (friendly == 1) then
Perl_Target_BuffFrame:SetPoint("TOPLEFT", "Perl_Target_StatsFrame", "BOTTOMLEFT", 0, 5);
else
if (debuffmax > 8) then
Perl_Target_BuffFrame:SetPoint("TOPLEFT", "Perl_Target_StatsFrame", "BOTTOMLEFT", 0, -51);
else
Perl_Target_BuffFrame:SetPoint("TOPLEFT", "Perl_Target_StatsFrame", "BOTTOMLEFT", 0, -25);
end
end
Perl_Target_BuffFrame:Show();
if (buffmax > 8) then
Perl_Target_BuffFrame:SetWidth(221); -- 5 + 8 * (24 + 3) 5 = border gap, 8 buffs across, 24 = icon size + 3 for pixel alignment, only holds true for default size
Perl_Target_BuffFrame:SetHeight(61);
else
Perl_Target_BuffFrame:SetWidth(5 + buffmax * 27);
Perl_Target_BuffFrame:SetHeight(34);
end
end
if (debuffmax == 0) then
Perl_Target_DebuffFrame:Hide();
else
if (friendly == 1) then
if (buffmax > 8) then
Perl_Target_DebuffFrame:SetPoint("TOPLEFT", "Perl_Target_StatsFrame", "BOTTOMLEFT", 0, -51);
else
Perl_Target_DebuffFrame:SetPoint("TOPLEFT", "Perl_Target_StatsFrame", "BOTTOMLEFT", 0, -25);
end
else
Perl_Target_DebuffFrame:SetPoint("TOPLEFT", "Perl_Target_StatsFrame", "BOTTOMLEFT", 0, 5);
end
Perl_Target_DebuffFrame:Show();
if (debuffmax > 8) then
Perl_Target_DebuffFrame:SetWidth(221); -- 5 + 8 * 27
Perl_Target_DebuffFrame:SetHeight(61);
else
Perl_Target_DebuffFrame:SetWidth(5 + debuffmax * 27);
Perl_Target_DebuffFrame:SetHeight(34);
end
end
end
end
function Perl_Target_Buff_UpdateCPMeter()
local debuffapplications;
local playerclass = UnitClass("player");
if (playerclass == PERL_LOCALIZED_MAGE) then
debuffapplications = Perl_Target_Buff_GetApplications("Fire Vulnerability");
elseif (playerclass == PERL_LOCALIZED_PRIEST) then
debuffapplications = Perl_Target_Buff_GetApplications("Shadow Vulnerability");
elseif (playerclass == PERL_LOCALIZED_WARRIOR) then
debuffapplications = Perl_Target_Buff_GetApplications("Sunder Armor");
elseif ((playerclass == PERL_LOCALIZED_ROGUE) or (playerclass == PERL_LOCALIZED_DRUID)) then
return;
else
Perl_Target_NameFrame_CPMeter:Hide();
return;
end
if (debuffapplications == 0) then
Perl_Target_CPFrame:Hide();
Perl_Target_NameFrame_CPMeter:Hide();
else
if (comboframedebuffs == 1) then
Perl_Target_CPText:SetText(debuffapplications);
Perl_Target_CPText:SetTextHeight(20);
if (debuffapplications == 5) then
Perl_Target_CPFrame:Show();
Perl_Target_CPText:SetTextColor(1, 0, 0); -- red text
elseif (debuffapplications == 4) then
Perl_Target_CPFrame:Show();
Perl_Target_CPText:SetTextColor(1, 0.5, 0); -- orange text
elseif (debuffapplications == 3) then
Perl_Target_CPFrame:Show();
Perl_Target_CPText:SetTextColor(1, 1, 0); -- yellow text
elseif (debuffapplications == 2) then
Perl_Target_CPFrame:Show();
Perl_Target_CPText:SetTextColor(0.5, 1, 0); -- yellow-green text
elseif (debuffapplications == 1) then
Perl_Target_CPFrame:Show();
Perl_Target_CPText:SetTextColor(0, 1, 0); -- green text
else
Perl_Target_CPFrame:Hide();
end
else
Perl_Target_CPFrame:Hide();
end
if (nameframecombopoints == 1) then -- this isn't nested since you can have both combo point styles on at the same time
Perl_Target_NameFrame_CPMeter:SetMinMaxValues(0, 5);
Perl_Target_NameFrame_CPMeter:SetValue(debuffapplications);
if (debuffapplications == 5) then
Perl_Target_NameFrame_CPMeter:Show();
elseif (debuffapplications == 4) then
Perl_Target_NameFrame_CPMeter:Show();
elseif (debuffapplications == 3) then
Perl_Target_NameFrame_CPMeter:Show();
elseif (debuffapplications == 2) then
Perl_Target_NameFrame_CPMeter:Show();
elseif (debuffapplications == 1) then
Perl_Target_NameFrame_CPMeter:Show();
else
Perl_Target_NameFrame_CPMeter:Hide();
end
else
Perl_Target_NameFrame_CPMeter:Hide();
end
end
end
function Perl_Target_Buff_GetApplications(debuffname)
local debuffApplications;
local i = 1;
while UnitDebuff("target", i) do
Perl_Target_Tooltip:SetOwner(this, "ANCHOR_BOTTOMRIGHT");
Perl_Target_Tooltip:SetUnitDebuff("target", i);
if (Perl_Target_TooltipTextLeft1:GetText() == debuffname) then
_, debuffApplications = UnitDebuff("target", i);
Perl_Target_Tooltip:Hide();
return debuffApplications;
end
i = i + 1;
end
Perl_Target_Tooltip:Hide();
return 0;
end
function Perl_Target_Reset_Buffs()
local button;
for buffnum=1,16 do
button = getglobal("Perl_Target_Buff"..buffnum);
button:Hide();
button = getglobal("Perl_Target_Debuff"..buffnum);
button:Hide();
end
end
function Perl_Target_SetBuffTooltip()
local buffmapping = 0;
GameTooltip:SetOwner(this, "ANCHOR_BOTTOMRIGHT");
if (this.isdebuff == 1) then
GameTooltip:SetUnitDebuff("target", this:GetID()-buffmapping);
else
GameTooltip:SetUnitBuff("target", this:GetID());
end
end
--------------------
-- Click Handlers --
--------------------
function Perl_TargetDropDown_OnLoad()
UIDropDownMenu_Initialize(this, Perl_TargetDropDown_Initialize, "MENU");
end
function Perl_TargetDropDown_Initialize()
local menu = nil;
if (UnitIsEnemy("target", "player")) then
return;
end
if (UnitIsUnit("target", "player")) then
menu = "SELF";
elseif (UnitIsUnit("target", "pet")) then
menu = "PET";
elseif (UnitIsPlayer("target")) then
if (UnitInParty("target")) then
menu = "PARTY";
else
menu = "PLAYER";
end
end
if (menu) then
UnitPopup_ShowMenu(Perl_Target_DropDown, menu, "target");
end
end
function Perl_Target_MouseClick(button)
if (CastPartyConfig and PCUF_CASTPARTYSUPPORT == 1) then
if (not string.find(GetMouseFocus():GetName(), "Name")) then
CastParty_OnClickByUnit(button, "target");
end
elseif (Genesis_data and PCUF_CASTPARTYSUPPORT == 1) then
if (not string.find(GetMouseFocus():GetName(), "Name")) then
Genesis_MouseHeal("target", button);
end
else
if (SpellIsTargeting() and button == "RightButton") then
SpellStopTargeting();
return;
end
if (button == "LeftButton") then
if (SpellIsTargeting()) then
SpellTargetUnit("target");
elseif (CursorHasItem()) then
DropItemOnUnit("target");
end
end
end
end
function Perl_Target_MouseDown(button)
if (button == "LeftButton" and locked == 0) then
Perl_Target_Frame:StartMoving();
end
end
function Perl_Target_MouseUp(button)
if (button == "RightButton") then
if ((CastPartyConfig or Genesis_data) and PCUF_CASTPARTYSUPPORT == 1) then
if (not (IsAltKeyDown() or IsControlKeyDown() or IsShiftKeyDown()) and string.find(GetMouseFocus():GetName(), "Name")) then -- if alt, ctrl, or shift ARE NOT held AND we are clicking the name frame, show the menu
ToggleDropDownMenu(1, nil, Perl_Target_DropDown, "Perl_Target_NameFrame", 40, 0);
end
else
if (not (IsAltKeyDown() or IsControlKeyDown() or IsShiftKeyDown())) then -- if alt, ctrl, or shift ARE NOT held, show the menu
ToggleDropDownMenu(1, nil, Perl_Target_DropDown, "Perl_Target_NameFrame", 40, 0);
end
end
end
Perl_Target_Frame:StopMovingOrSizing();
end
function Perl_Target_OnShow()
if ( UnitIsEnemy("target", "player") ) then
PlaySound("igCreatureAggroSelect");
elseif ( UnitIsFriend("player", "target") ) then
PlaySound("igCharacterNPCSelect");
else
PlaySound("igCreatureNeutralSelect");
end
end
-------------
-- Tooltip --
-------------
function Perl_Target_Tip()
UnitFrame_Initialize("target")
end
function UnitFrame_Initialize(unit) -- Hopefully this doesn't break any mods
this.unit = unit;
end
----------------------
-- myAddOns Support --
----------------------
function Perl_Target_myAddOns_Support()
-- Register the addon in myAddOns
if (myAddOnsFrame_Register) then
local Perl_Target_myAddOns_Details = {
name = "Perl_Target",
version = "Version 0.58",
releaseDate = "April 15, 2006",
author = "Perl; Maintained by Global",
email = "global@g-ball.com",
website = "http://www.curse-gaming.com/mod.php?addid=2257",
category = MYADDONS_CATEGORY_OTHERS
};
Perl_Target_myAddOns_Help = {};
Perl_Target_myAddOns_Help[1] = "/perl";
myAddOnsFrame_Register(Perl_Target_myAddOns_Details, Perl_Target_myAddOns_Help);
end
end
Generated by GNU Enscript 1.6.5.90.