vanilla-wow-addons – Rev 1
?pathlinks?
---------------
-- Variables --
---------------
Perl_CombatDisplay_Config = {};
-- Default Saved Variables (also set in Perl_CombatDisplay_GetVars)
local state = 3; -- hidden unless in combat by default
local manapersist = 0; -- mana persist is off by default
local healthpersist = 0; -- health persist is off by default
local locked = 0; -- unlocked by default
local scale = 1; -- default scale
local transparency = 1; -- transparency for the frame
local showtarget = 0; -- target frame is disabled by default
local mobhealthsupport = 1; -- mobhealth is enabled by default
local showdruidbar = 1; -- Druid Bar support is enabled by default
local showpetbars = 0; -- Pet info is hidden by default
-- Default Local Variables
local IsAggroed = 0;
local InCombat = 0;
local Initialized = nil;
local healthfull = 0;
local manafull = 0;
----------------------
-- Loading Function --
----------------------
function Perl_CombatDisplay_OnLoad()
-- Events
this:RegisterEvent("ADDON_LOADED");
this:RegisterEvent("PLAYER_ENTER_COMBAT");
this:RegisterEvent("PLAYER_ENTERING_WORLD");
this:RegisterEvent("PLAYER_LEAVE_COMBAT");
this:RegisterEvent("PLAYER_REGEN_DISABLED");
this:RegisterEvent("PLAYER_REGEN_ENABLED");
this:RegisterEvent("PLAYER_TARGET_CHANGED");
this:RegisterEvent("UNIT_DISPLAYPOWER");
this:RegisterEvent("UNIT_ENERGY");
this:RegisterEvent("UNIT_FOCUS");
this:RegisterEvent("UNIT_HEALTH");
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_PET");
this:RegisterEvent("UNIT_RAGE");
this:RegisterEvent("VARIABLES_LOADED");
-- Button Click Overlays (in order of occurrence in XML)
Perl_CombatDisplay_ManaFrame_CastClickOverlay:SetFrameLevel(Perl_CombatDisplay_ManaFrame:GetFrameLevel() + 2);
if (DEFAULT_CHAT_FRAME) then
DEFAULT_CHAT_FRAME:AddMessage("|cffffff00Perl Classic: CombatDisplay loaded successfully.");
end
end
function Perl_CombatDisplay_Target_OnLoad()
-- Button Click Overlays (in order of occurrence in XML)
Perl_CombatDisplay_Target_ManaFrame_CastClickOverlay:SetFrameLevel(Perl_CombatDisplay_Target_ManaFrame:GetFrameLevel() + 2);
end
-------------------
-- Event Handler --
-------------------
function Perl_CombatDisplay_OnEvent(event)
if (event == "UNIT_HEALTH" or event == "UNIT_MAXHEALTH") then
if (arg1 == "player") then
if (UnitHealth("player") == UnitHealthMax("player")) then
healthfull = 1;
if (healthpersist == 1) then
Perl_CombatDisplay_UpdateDisplay();
end
else
healthfull = 0;
end
Perl_CombatDisplay_Update_Health();
end
if (arg1 == "pet") then
if (showpetbars == 1) then
Perl_CombatDisplay_Update_PetHealth();
end
end
if (arg1 == "target") then
Perl_CombatDisplay_Target_Update_Health();
end
return;
elseif (event == "UNIT_ENERGY" or event == "UNIT_MAXENERGY") then
if (arg1 == "player") then
if (UnitMana("player") == UnitManaMax("player")) then
manafull = 1;
if (manapersist == 1) then
Perl_CombatDisplay_UpdateDisplay();
end
else
manafull = 0;
end
Perl_CombatDisplay_Update_Mana();
end
if (arg1 == "target") then
Perl_CombatDisplay_Target_Update_Mana();
end
return;
elseif (event == "UNIT_MANA" or event == "UNIT_MAXMANA") then
if (arg1 == "player") then
if (UnitMana("player") == UnitManaMax("player")) then
manafull = 1;
if (manapersist == 1) then
Perl_CombatDisplay_UpdateDisplay();
end
else
manafull = 0;
end
Perl_CombatDisplay_Update_Mana();
end
if (arg1 == "pet") then
if (showpetbars == 1) then
Perl_CombatDisplay_Update_PetMana();
end
end
if (arg1 == "target") then
Perl_CombatDisplay_Target_Update_Mana();
end
return;
elseif (event == "UNIT_RAGE" or event == "UNIT_MAXRAGE") then
if (arg1 == "player") then
if (UnitMana("player") == 0) then
manafull = 1;
if (manapersist == 1) then
Perl_CombatDisplay_UpdateDisplay();
end
else
manafull = 0;
end
Perl_CombatDisplay_Update_Mana();
end
if (arg1 == "target") then
Perl_CombatDisplay_Target_Update_Mana();
end
return;
elseif (event == "UNIT_FOCUS" or event == "UNIT_MAXFOCUS") then
if (arg1 == "pet") then
if (showpetbars == 1) then
Perl_CombatDisplay_Update_PetMana();
end
end
elseif (event == "PLAYER_TARGET_CHANGED") then
Perl_CombatDisplay_UpdateDisplay();
return;
elseif (event == "PLAYER_COMBO_POINTS") then
Perl_CombatDisplay_Update_Combo_Points();
return;
elseif (event == "PLAYER_REGEN_ENABLED") then -- Player no longer in combat (something has agro on you)
IsAggroed = 0;
if (state == 3) then
Perl_CombatDisplay_UpdateDisplay();
end
return;
elseif (event == "PLAYER_REGEN_DISABLED") then -- Player in combat (something has agro on you)
IsAggroed = 1;
if (state == 3) then
Perl_CombatDisplay_UpdateDisplay();
end
return;
elseif (event == "PLAYER_ENTER_COMBAT") then -- Player attacking (auto attack)
InCombat = 1;
if (state == 2) then
Perl_CombatDisplay_UpdateDisplay();
end
return;
elseif (event == "PLAYER_LEAVE_COMBAT") then -- Player not attacking (auto attack)
InCombat = 0;
if (state == 2) then
Perl_CombatDisplay_UpdateDisplay();
end
return;
elseif (event == "UNIT_DISPLAYPOWER") then
if (arg1 == "player") then
Perl_CombatDisplay_UpdateBars();
Perl_CombatDisplay_Update_Mana();
if (InCombat == 0 and IsAggroed == 0) then
if (state == 1) then
Perl_CombatDisplay_Frame:Show();
else
Perl_CombatDisplay_Frame:Hide();
end
end
end
if (arg1 == "pet") then
if (showpetbars == 1) then
Perl_CombatDisplay_Update_PetManaBarColor(); -- What type of energy are we using now?
Perl_CombatDisplay_Update_PetMana(); -- Update the energy info immediately
end
end
return;
elseif (event == "UNIT_PET") then
Perl_CombatDisplay_CheckForPets();
return;
elseif ((event == "VARIABLES_LOADED") or (event=="PLAYER_ENTERING_WORLD")) then
local powertype = UnitPowerType("player");
InCombat = 0;
IsAggroed = 0;
if (UnitHealth("player") == UnitHealthMax("player")) then
healthfull = 1;
else
healthfull = 0;
end
if (powertype == 0 or powertype == 3) then
if (UnitMana("player") == UnitManaMax("player")) then
manafull = 1;
else
manafull = 0;
end
elseif (powertype == 1) then
if (UnitMana("player") == 0) then
manafull = 1;
else
manafull = 0;
end
end
-- Check if we loaded the mod already.
if (Initialized) then
Perl_CombatDisplay_UpdateBars(); -- what class are we? display the right color bars
Perl_CombatDisplay_Update_Health(); -- make sure we dont display 0/0 on load
Perl_CombatDisplay_Update_Mana(); -- make sure we dont display 0/0 on load
Perl_CombatDisplay_UpdateDisplay(); -- what mode are we in?
Perl_CombatDisplay_Set_Scale(); -- set the correct scale
Perl_CombatDisplay_Set_Transparency(); -- set the transparency
Perl_CombatDisplay_CheckForPets(); -- do we have a pet out?
else
Perl_CombatDisplay_Initialize();
end
return;
elseif (event == "ADDON_LOADED") then
if (arg1 == "Perl_CombatDisplay") then
Perl_CombatDisplay_myAddOns_Support();
end
return;
else
return;
end
end
-------------------------------
-- Loading Settings Function --
-------------------------------
function Perl_CombatDisplay_Initialize()
-- Check if a previous exists, if not, enable by default.
if (type(Perl_CombatDisplay_Config[UnitName("player")]) == "table") then
Perl_CombatDisplay_GetVars();
else
Perl_CombatDisplay_UpdateVars();
end
-- Major config options.
Perl_CombatDisplay_Initialize_Frame_Color();
Perl_CombatDisplay_Target_Frame:Hide();
Perl_CombatDisplay_UpdateBars(); -- Display the bars appropriate to your class
Perl_CombatDisplay_UpdateDisplay(); -- Show or hide the window based on whats happening
Perl_CombatDisplay_CheckForPets(); -- do we have a pet out?
Initialized = 1;
end
function Perl_CombatDisplay_Initialize_Frame_Color()
Perl_CombatDisplay_ManaFrame:SetBackdropColor(0, 0, 0, 1);
Perl_CombatDisplay_ManaFrame:SetBackdropBorderColor(0.5, 0.5, 0.5, 1);
Perl_CombatDisplay_HealthBarText:SetTextColor(1, 1, 1, 1);
Perl_CombatDisplay_ManaBarText:SetTextColor(1, 1, 1, 1);
Perl_CombatDisplay_CPBarText:SetTextColor(1, 1, 1, 1);
Perl_CombatDisplay_PetHealthBarText:SetTextColor(1, 1, 1, 1);
Perl_CombatDisplay_PetManaBarText:SetTextColor(1, 1, 1, 1);
Perl_CombatDisplay_Target_ManaFrame:SetBackdropColor(0, 0, 0, 1);
Perl_CombatDisplay_Target_ManaFrame:SetBackdropBorderColor(0.5, 0.5, 0.5, 1);
Perl_CombatDisplay_Target_HealthBarText:SetTextColor(1, 1, 1, 1);
Perl_CombatDisplay_Target_ManaBarText:SetTextColor(1, 1, 1, 1);
end
----------------------
-- Update Functions --
----------------------
function Perl_CombatDisplay_UpdateDisplay()
if (state == 0) then
Perl_CombatDisplay_Frame:Hide();
Perl_CombatDisplay_Target_Frame:Hide();
Perl_CombatDisplay_Frame:StopMovingOrSizing();
Perl_CombatDisplay_Target_Frame:StopMovingOrSizing();
elseif (state == 1) then
Perl_CombatDisplay_Frame:Show();
Perl_CombatDisplay_Target_Show();
elseif (state == 2) then
if (InCombat == 1) then
Perl_CombatDisplay_Frame:Show();
Perl_CombatDisplay_Target_Show();
elseif (manapersist == 1 and manafull == 0) then
Perl_CombatDisplay_Frame:Show();
Perl_CombatDisplay_Target_Show();
elseif (healthpersist == 1 and healthfull == 0) then
Perl_CombatDisplay_Frame:Show();
Perl_CombatDisplay_Target_Show();
else
Perl_CombatDisplay_Frame:Hide();
Perl_CombatDisplay_Target_Frame:Hide();
Perl_CombatDisplay_Frame:StopMovingOrSizing();
Perl_CombatDisplay_Target_Frame:StopMovingOrSizing();
end
elseif (state == 3) then
if (IsAggroed == 1) then
Perl_CombatDisplay_Frame:Show();
Perl_CombatDisplay_Target_Show();
elseif (manapersist == 1 and manafull == 0) then
Perl_CombatDisplay_Frame:Show();
Perl_CombatDisplay_Target_Show();
elseif (healthpersist == 1 and healthfull == 0) then
Perl_CombatDisplay_Frame:Show();
Perl_CombatDisplay_Target_Show();
else
Perl_CombatDisplay_Frame:Hide();
Perl_CombatDisplay_Target_Frame:Hide();
Perl_CombatDisplay_Frame:StopMovingOrSizing();
Perl_CombatDisplay_Target_Frame:StopMovingOrSizing();
end
end
end
function Perl_CombatDisplay_Update_Health()
local playerhealth = UnitHealth("player");
local playerhealthmax = UnitHealthMax("player");
if (UnitIsDead("player") or UnitIsGhost("player")) then -- This prevents negative health
playerhealth = 0;
end
if (PCUF_COLORHEALTH == 1) then
local playerhealthpercent = floor(playerhealth/playerhealthmax*100+0.5);
if ((playerhealthpercent <= 100) and (playerhealthpercent > 75)) then
Perl_CombatDisplay_HealthBar:SetStatusBarColor(0, 0.8, 0);
Perl_CombatDisplay_HealthBarBG:SetStatusBarColor(0, 0.8, 0, 0.25);
elseif ((playerhealthpercent <= 75) and (playerhealthpercent > 50)) then
Perl_CombatDisplay_HealthBar:SetStatusBarColor(1, 1, 0);
Perl_CombatDisplay_HealthBarBG:SetStatusBarColor(1, 1, 0, 0.25);
elseif ((playerhealthpercent <= 50) and (playerhealthpercent > 25)) then
Perl_CombatDisplay_HealthBar:SetStatusBarColor(1, 0.5, 0);
Perl_CombatDisplay_HealthBarBG:SetStatusBarColor(1, 0.5, 0, 0.25);
else
Perl_CombatDisplay_HealthBar:SetStatusBarColor(1, 0, 0);
Perl_CombatDisplay_HealthBarBG:SetStatusBarColor(1, 0, 0, 0.25);
end
else
Perl_CombatDisplay_HealthBar:SetStatusBarColor(0, 0.8, 0);
Perl_CombatDisplay_HealthBarBG:SetStatusBarColor(0, 0.8, 0, 0.25);
end
Perl_CombatDisplay_HealthBar:SetMinMaxValues(0, playerhealthmax);
Perl_CombatDisplay_HealthBar:SetValue(playerhealth);
Perl_CombatDisplay_HealthBarText:SetText(playerhealth.."/"..playerhealthmax);
end
function Perl_CombatDisplay_Update_Mana()
local playermana = UnitMana("player");
local playermanamax = UnitManaMax("player");
local playerpower = UnitPowerType("player");
if (UnitIsDead("player") or UnitIsGhost("player")) then -- This prevents negative mana
playermana = 0;
end
Perl_CombatDisplay_ManaBar:SetMinMaxValues(0, playermanamax);
Perl_CombatDisplay_ManaBar:SetValue(playermana);
if (playerpower == 1) then
Perl_CombatDisplay_ManaBarText:SetText(playermana);
else
Perl_CombatDisplay_ManaBarText:SetText(playermana.."/"..playermanamax);
end
if (showdruidbar == 1) then
if (DruidBarKey and (UnitClass("player") == PERL_LOCALIZED_DRUID)) then
if (playerpower > 0) then
-- Show the bars and set the text and reposition the original mana bar below the druid bar
local playerdruidbarmana = floor(DruidBarKey.keepthemana);
local playerdruidbarmanamax = DruidBarKey.maxmana;
local playerdruidbarmanapercent = floor(playerdruidbarmana/playerdruidbarmanamax*100+0.5);
if (playerdruidbarmanapercent == 100) then -- This is to ensure the value isn't 1 or 2 mana under max when 100%
playerdruidbarmana = playerdruidbarmanamax;
end
Perl_CombatDisplay_DruidBar:SetMinMaxValues(0, playerdruidbarmanamax);
Perl_CombatDisplay_DruidBar:SetValue(playerdruidbarmana);
-- Show the bar and adjust the stats frame
Perl_CombatDisplay_DruidBar:Show();
Perl_CombatDisplay_DruidBarBG:Show();
Perl_CombatDisplay_ManaBar:SetPoint("TOP", "Perl_CombatDisplay_DruidBar", "BOTTOM", 0, -2);
if (playerpower == 3) then
Perl_CombatDisplay_ManaFrame:SetHeight(66); -- Energy and Combo Points
Perl_CombatDisplay_ManaFrame_CastClickOverlay:SetHeight(66);
else
Perl_CombatDisplay_ManaFrame:SetHeight(54); -- Rage
Perl_CombatDisplay_ManaFrame_CastClickOverlay:SetHeight(54);
end
-- Display the needed text
Perl_CombatDisplay_DruidBarText:SetText(playerdruidbarmana.."/"..playerdruidbarmanamax);
else
-- Hide it all (bars and text)
Perl_CombatDisplay_DruidBarText:SetText();
Perl_CombatDisplay_DruidBar:Hide();
Perl_CombatDisplay_DruidBarBG:Hide();
Perl_CombatDisplay_ManaBar:SetPoint("TOP", "Perl_CombatDisplay_HealthBar", "BOTTOM", 0, -2);
if (playerpower == 3) then
Perl_CombatDisplay_ManaFrame:SetHeight(54); -- Energy and Combo Points
Perl_CombatDisplay_ManaFrame_CastClickOverlay:SetHeight(54);
else
Perl_CombatDisplay_ManaFrame:SetHeight(42); -- Using mana or rage, use default height
Perl_CombatDisplay_ManaFrame_CastClickOverlay:SetHeight(42);
end
end
else
-- Hide it all (bars and text)
Perl_CombatDisplay_DruidBarText:SetText();
Perl_CombatDisplay_DruidBar:Hide();
Perl_CombatDisplay_DruidBarBG:Hide();
Perl_CombatDisplay_ManaBar:SetPoint("TOP", "Perl_CombatDisplay_HealthBar", "BOTTOM", 0, -2);
if (playerpower == 3) then
Perl_CombatDisplay_ManaFrame:SetHeight(54); -- Energy and Combo Points
Perl_CombatDisplay_ManaFrame_CastClickOverlay:SetHeight(54);
else
Perl_CombatDisplay_ManaFrame:SetHeight(42); -- Using mana or rage, use default height
Perl_CombatDisplay_ManaFrame_CastClickOverlay:SetHeight(42);
end
end
else
-- Hide it all (bars and text)
Perl_CombatDisplay_DruidBarText:SetText();
Perl_CombatDisplay_DruidBar:Hide();
Perl_CombatDisplay_DruidBarBG:Hide();
Perl_CombatDisplay_ManaBar:SetPoint("TOP", "Perl_CombatDisplay_HealthBar", "BOTTOM", 0, -2);
if (playerpower == 3) then
Perl_CombatDisplay_ManaFrame:SetHeight(54); -- Energy and Combo Points
Perl_CombatDisplay_ManaFrame_CastClickOverlay:SetHeight(54);
else
Perl_CombatDisplay_ManaFrame:SetHeight(42); -- Using mana or rage, use default height
Perl_CombatDisplay_ManaFrame_CastClickOverlay:SetHeight(42);
end
end
if (showpetbars == 1) then -- running this check here since all the previous if's will undo it if i don't
if (UnitExists("pet")) then
Perl_CombatDisplay_ManaFrame:SetHeight(66); -- health and mana/focus bar
Perl_CombatDisplay_ManaFrame_CastClickOverlay:SetHeight(66);
end
end
end
function Perl_CombatDisplay_Update_Combo_Points()
Perl_CombatDisplay_CPBarText:SetText(GetComboPoints()..'/5');
Perl_CombatDisplay_CPBar:SetValue(GetComboPoints());
end
function Perl_CombatDisplay_UpdateBars()
local playerpower = UnitPowerType("player");
-- Set power type specific events and colors.
if (playerpower == 0) then -- mana
Perl_CombatDisplay_ManaBar:SetStatusBarColor(0, 0, 1, 1);
Perl_CombatDisplay_ManaBarBG:SetStatusBarColor(0, 0, 1, 0.25);
-- Hide CP Bar
Perl_CombatDisplay_CPBar:Hide();
Perl_CombatDisplay_CPBarBG:Hide();
Perl_CombatDisplay_CPBarText:Hide();
Perl_CombatDisplay_ManaFrame:SetHeight(42);
Perl_CombatDisplay_ManaFrame_CastClickOverlay:SetHeight(42);
return;
elseif (playerpower == 1) then -- rage
Perl_CombatDisplay_ManaBar:SetStatusBarColor(1, 0, 0, 1);
Perl_CombatDisplay_ManaBarBG:SetStatusBarColor(1, 0, 0, 0.25);
-- Hide CP Bar
Perl_CombatDisplay_CPBar:Hide();
Perl_CombatDisplay_CPBarBG:Hide();
Perl_CombatDisplay_CPBarText:Hide();
Perl_CombatDisplay_ManaFrame:SetHeight(42);
Perl_CombatDisplay_ManaFrame_CastClickOverlay:SetHeight(42);
return;
elseif (playerpower == 3) then -- energy
this:RegisterEvent("PLAYER_COMBO_POINTS");
Perl_CombatDisplay_ManaBar:SetStatusBarColor(1, 1, 0, 1);
Perl_CombatDisplay_ManaBarBG:SetStatusBarColor(1, 1, 0, 0.25);
-- Setup CP Bar
Perl_CombatDisplay_CPBar:Show();
Perl_CombatDisplay_CPBarBG:Show();
Perl_CombatDisplay_CPBarText:Show();
Perl_CombatDisplay_CPBarText:SetText('0/5');
Perl_CombatDisplay_ManaFrame:SetHeight(54);
Perl_CombatDisplay_ManaFrame_CastClickOverlay:SetHeight(54);
Perl_CombatDisplay_CPBar:SetMinMaxValues(0,5);
Perl_CombatDisplay_CPBar:SetValue(GetComboPoints());
return;
end
end
function Perl_CombatDisplay_CheckForPets()
if (showpetbars == 1 and UnitExists("pet")) then
Perl_CombatDisplay_PetHealthBar:Show();
Perl_CombatDisplay_PetHealthBarBG:Show();
Perl_CombatDisplay_PetManaBar:Show();
Perl_CombatDisplay_PetManaBarBG:Show();
Perl_CombatDisplay_ManaFrame:SetHeight(66); -- health and mana/focus bar
Perl_CombatDisplay_ManaFrame_CastClickOverlay:SetHeight(66);
Perl_CombatDisplay_Update_PetManaBarColor();
Perl_CombatDisplay_Update_PetHealth();
Perl_CombatDisplay_Update_PetMana();
else
Perl_CombatDisplay_PetHealthBar:Hide();
Perl_CombatDisplay_PetHealthBarBG:Hide();
Perl_CombatDisplay_PetManaBar:Hide();
Perl_CombatDisplay_PetManaBarBG:Hide();
Perl_CombatDisplay_UpdateBars();
end
end
function Perl_CombatDisplay_Update_PetManaBarColor()
local petpower = UnitPowerType("pet");
-- Set mana bar color
if (petpower == 0) then -- mana
Perl_CombatDisplay_PetManaBar:SetStatusBarColor(0, 0, 1, 1);
Perl_CombatDisplay_PetManaBarBG:SetStatusBarColor(0, 0, 1, 0.25);
elseif (petpower == 2) then -- focus
Perl_CombatDisplay_PetManaBar:SetStatusBarColor(1, 0.5, 0, 1);
Perl_CombatDisplay_PetManaBarBG:SetStatusBarColor(1, 0.5, 0, 0.25);
end
end
function Perl_CombatDisplay_Update_PetHealth()
local pethealth = UnitHealth("pet");
local pethealthmax = UnitHealthMax("pet");
if (UnitIsDead("pet") or UnitIsGhost("pet")) then -- This prevents negative health
pethealth = 0;
end
if (PCUF_COLORHEALTH == 1) then
local pethealthpercent = floor(pethealth/pethealthmax*100+0.5);
if ((pethealthpercent <= 100) and (pethealthpercent > 75)) then
Perl_CombatDisplay_PetHealthBar:SetStatusBarColor(0, 0.8, 0);
Perl_CombatDisplay_PetHealthBarBG:SetStatusBarColor(0, 0.8, 0, 0.25);
elseif ((pethealthpercent <= 75) and (pethealthpercent > 50)) then
Perl_CombatDisplay_PetHealthBar:SetStatusBarColor(1, 1, 0);
Perl_CombatDisplay_PetHealthBarBG:SetStatusBarColor(1, 1, 0, 0.25);
elseif ((pethealthpercent <= 50) and (pethealthpercent > 25)) then
Perl_CombatDisplay_PetHealthBar:SetStatusBarColor(1, 0.5, 0);
Perl_CombatDisplay_PetHealthBarBG:SetStatusBarColor(1, 0.5, 0, 0.25);
else
Perl_CombatDisplay_PetHealthBar:SetStatusBarColor(1, 0, 0);
Perl_CombatDisplay_PetHealthBarBG:SetStatusBarColor(1, 0, 0, 0.25);
end
else
Perl_CombatDisplay_PetHealthBar:SetStatusBarColor(0, 0.8, 0);
Perl_CombatDisplay_PetHealthBarBG:SetStatusBarColor(0, 0.8, 0, 0.25);
end
Perl_CombatDisplay_PetHealthBar:SetMinMaxValues(0, pethealthmax);
Perl_CombatDisplay_PetHealthBar:SetValue(pethealth);
Perl_CombatDisplay_PetHealthBarText:SetText(pethealth.."/"..pethealthmax);
end
function Perl_CombatDisplay_Update_PetMana()
local petmana = UnitMana("pet");
local petmanamax = UnitManaMax("pet");
local petpower = UnitPowerType("pet");
if (UnitIsDead("pet") or UnitIsGhost("pet")) then -- This prevents negative mana
petmana = 0;
end
Perl_CombatDisplay_PetManaBar:SetMinMaxValues(0, petmanamax);
Perl_CombatDisplay_PetManaBar:SetValue(petmana);
if (petpower == 2) then
Perl_CombatDisplay_PetManaBarText:SetText(petmana);
else
Perl_CombatDisplay_PetManaBarText:SetText(petmana.."/"..petmanamax);
end
end
-------------------------------
-- Update Functions (Target) --
-------------------------------
function Perl_CombatDisplay_Target_UpdateAll()
if (UnitExists("target")) then
Perl_CombatDisplay_Target_Update_Health();
Perl_CombatDisplay_Target_Update_Mana();
Perl_CombatDisplay_Target_UpdateBars();
end
end
function Perl_CombatDisplay_Target_Update_Health()
local targethealth = UnitHealth("target");
local targethealthmax = UnitHealthMax("target");
if (UnitIsDead("target") or UnitIsGhost("target")) then -- This prevents negative health
targethealth = 0;
end
if (PCUF_COLORHEALTH == 1) then
local targethealthpercent = floor(targethealth/targethealthmax*100+0.5);
if ((targethealthpercent <= 100) and (targethealthpercent > 75)) then
Perl_CombatDisplay_Target_HealthBar:SetStatusBarColor(0, 0.8, 0);
Perl_CombatDisplay_Target_HealthBarBG:SetStatusBarColor(0, 0.8, 0, 0.25);
elseif ((targethealthpercent <= 75) and (targethealthpercent > 50)) then
Perl_CombatDisplay_Target_HealthBar:SetStatusBarColor(1, 1, 0);
Perl_CombatDisplay_Target_HealthBarBG:SetStatusBarColor(1, 1, 0, 0.25);
elseif ((targethealthpercent <= 50) and (targethealthpercent > 25)) then
Perl_CombatDisplay_Target_HealthBar:SetStatusBarColor(1, 0.5, 0);
Perl_CombatDisplay_Target_HealthBarBG:SetStatusBarColor(1, 0.5, 0, 0.25);
else
Perl_CombatDisplay_Target_HealthBar:SetStatusBarColor(1, 0, 0);
Perl_CombatDisplay_Target_HealthBarBG:SetStatusBarColor(1, 0, 0, 0.25);
end
else
Perl_CombatDisplay_Target_HealthBar:SetStatusBarColor(0, 0.8, 0);
Perl_CombatDisplay_Target_HealthBarBG:SetStatusBarColor(0, 0.8, 0, 0.25);
end
Perl_CombatDisplay_Target_HealthBar:SetMinMaxValues(0, targethealthmax);
Perl_CombatDisplay_Target_HealthBar:SetValue(targethealth);
if (targethealthmax == 100) then
-- Begin Mobhealth support
if (mobhealthsupport == 1) then
if (MobHealthFrame) then
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_CombatDisplay_Target_HealthBarText:SetText(targethealth.."%");
end
s, e, pts, pct = string.find(MobHealthDB[index], "^(%d+)/(%d+)$");
else
if (type(MobHealthPlayerDB[index]) ~= "string") then
Perl_CombatDisplay_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
Perl_CombatDisplay_Target_HealthBarText:SetText(string.format("%d", (currentPct * pointsPerPct) + 0.5).."/"..string.format("%d", (100 * pointsPerPct) + 0.5).." | "..targethealth.."%"); -- Stored unit info from the DB
end
else
Perl_CombatDisplay_Target_HealthBarText:SetText(targethealth.."%"); -- Unit not in MobHealth DB
end
-- End MobHealth Support
else
Perl_CombatDisplay_Target_HealthBarText:SetText(targethealth.."%"); -- MobHealth isn't installed
end
else -- mobhealthsupport == 0
Perl_CombatDisplay_Target_HealthBarText:SetText(targethealth.."%"); -- MobHealth support is disabled
end
else
Perl_CombatDisplay_Target_HealthBarText:SetText(targethealth.."/"..targethealthmax); -- Self/Party/Raid member
end
end
function Perl_CombatDisplay_Target_Update_Mana()
local targetmana = UnitMana("target");
local targetmanamax = UnitManaMax("target");
local targetpowertype = UnitPowerType("target");
if (UnitIsDead("target") or UnitIsGhost("target")) then -- This prevents negative mana
targetmana = 0;
end
Perl_CombatDisplay_Target_ManaBar:SetMinMaxValues(0, targetmanamax);
Perl_CombatDisplay_Target_ManaBar:SetValue(targetmana);
if (targetpowertype == 1 or targetpowertype == 2) then
Perl_CombatDisplay_Target_ManaBarText:SetText(targetmana);
else
Perl_CombatDisplay_Target_ManaBarText:SetText(targetmana.."/"..targetmanamax);
end
end
function Perl_CombatDisplay_Target_UpdateBars()
local targetmanamax = UnitManaMax("target");
local targetpowertype = UnitPowerType("target");
-- Set power type specific events and colors.
if (targetmanamax == 0) then
Perl_CombatDisplay_Target_ManaBar:Hide();
Perl_CombatDisplay_Target_ManaBarBG:Hide();
Perl_CombatDisplay_Target_ManaFrame:SetHeight(30);
Perl_CombatDisplay_Target_ManaFrame_CastClickOverlay:SetHeight(30);
elseif (targetpowertype == 0) then -- mana
Perl_CombatDisplay_Target_ManaBar:SetStatusBarColor(0, 0, 1, 1);
Perl_CombatDisplay_Target_ManaBarBG:SetStatusBarColor(0, 0, 1, 0.25);
Perl_CombatDisplay_Target_ManaBar:Show();
Perl_CombatDisplay_Target_ManaBarBG:Show();
Perl_CombatDisplay_Target_ManaFrame:SetHeight(42);
Perl_CombatDisplay_Target_ManaFrame_CastClickOverlay:SetHeight(42);
return;
elseif (targetpowertype == 1) then -- rage
Perl_CombatDisplay_Target_ManaBar:SetStatusBarColor(1, 0, 0, 1);
Perl_CombatDisplay_Target_ManaBarBG:SetStatusBarColor(1, 0, 0, 0.25);
Perl_CombatDisplay_Target_ManaBar:Show();
Perl_CombatDisplay_Target_ManaBarBG:Show();
Perl_CombatDisplay_Target_ManaFrame:SetHeight(42);
Perl_CombatDisplay_Target_ManaFrame_CastClickOverlay:SetHeight(42);
return;
elseif (targetpowertype == 2) then -- focus
Perl_CombatDisplay_Target_ManaBar:SetStatusBarColor(1, 0.5, 0, 1);
Perl_CombatDisplay_Target_ManaBarBG:SetStatusBarColor(1, 0.5, 0, 0.25);
Perl_CombatDisplay_Target_ManaBar:Show();
Perl_CombatDisplay_Target_ManaBarBG:Show();
Perl_CombatDisplay_Target_ManaFrame:SetHeight(42);
Perl_CombatDisplay_Target_ManaFrame_CastClickOverlay:SetHeight(42);
return;
elseif (targetpowertype == 3) then -- energy
Perl_CombatDisplay_Target_ManaBar:SetStatusBarColor(1, 1, 0, 1);
Perl_CombatDisplay_Target_ManaBarBG:SetStatusBarColor(1, 1, 0, 0.25);
Perl_CombatDisplay_Target_ManaBar:Show();
Perl_CombatDisplay_Target_ManaBarBG:Show();
Perl_CombatDisplay_Target_ManaFrame:SetHeight(42);
Perl_CombatDisplay_Target_ManaFrame_CastClickOverlay:SetHeight(42);
return;
end
end
function Perl_CombatDisplay_Target_Show()
if (showtarget == 1) then
if (UnitExists("target")) then
Perl_CombatDisplay_Target_Frame:Show();
Perl_CombatDisplay_Target_UpdateAll();
else
Perl_CombatDisplay_Target_Frame:Hide();
end
end
end
--------------------------
-- GUI Config Functions --
--------------------------
function Perl_CombatDisplay_Set_State(newvalue)
state = newvalue;
Perl_CombatDisplay_UpdateVars();
Perl_CombatDisplay_UpdateDisplay();
end
function Perl_CombatDisplay_Set_Health_Persistance(newvalue)
healthpersist = newvalue;
Perl_CombatDisplay_UpdateVars();
Perl_CombatDisplay_UpdateDisplay();
end
function Perl_CombatDisplay_Set_Mana_Persistance(newvalue)
manapersist = newvalue;
Perl_CombatDisplay_UpdateVars();
Perl_CombatDisplay_UpdateDisplay();
end
function Perl_CombatDisplay_Set_Lock(newvalue)
locked = newvalue;
Perl_CombatDisplay_UpdateVars();
end
function Perl_CombatDisplay_Set_Target(newvalue)
showtarget = newvalue;
Perl_CombatDisplay_UpdateVars();
if (showtarget == 0) then
Perl_CombatDisplay_Target_Frame:Hide();
end
Perl_CombatDisplay_UpdateDisplay();
end
function Perl_CombatDisplay_Set_MobHealth(newvalue)
mobhealthsupport = newvalue;
Perl_CombatDisplay_UpdateVars();
Perl_CombatDisplay_Target_Update_Health();
end
function Perl_CombatDisplay_Set_DruidBar(newvalue)
showdruidbar = newvalue;
Perl_CombatDisplay_UpdateVars();
Perl_CombatDisplay_Update_Mana();
end
function Perl_CombatDisplay_Set_PetBars(newvalue)
showpetbars = newvalue;
Perl_CombatDisplay_UpdateVars();
Perl_CombatDisplay_CheckForPets();
end
function Perl_CombatDisplay_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_CombatDisplay_Frame:SetScale(unsavedscale);
Perl_CombatDisplay_Target_Frame:SetScale(unsavedscale);
Perl_CombatDisplay_UpdateVars();
end
function Perl_CombatDisplay_Set_Transparency(number)
if (number ~= nil) then
transparency = (number / 100); -- convert the user input to a wow acceptable value
end
Perl_CombatDisplay_Frame:SetAlpha(transparency);
Perl_CombatDisplay_Target_Frame:SetAlpha(transparency);
Perl_CombatDisplay_UpdateVars();
end
------------------------------
-- Saved Variable Functions --
------------------------------
function Perl_CombatDisplay_GetVars()
state = Perl_CombatDisplay_Config[UnitName("player")]["State"];
locked = Perl_CombatDisplay_Config[UnitName("player")]["Locked"];
healthpersist = Perl_CombatDisplay_Config[UnitName("player")]["HealthPersist"];
manapersist = Perl_CombatDisplay_Config[UnitName("player")]["ManaPersist"];
scale = Perl_CombatDisplay_Config[UnitName("player")]["Scale"];
transparency = Perl_CombatDisplay_Config[UnitName("player")]["Transparency"];
showtarget = Perl_CombatDisplay_Config[UnitName("player")]["ShowTarget"];
mobhealthsupport = Perl_CombatDisplay_Config[UnitName("player")]["MobHealthSupport"];
showdruidbar = Perl_CombatDisplay_Config[UnitName("player")]["ShowDruidBar"];
showpetbars = Perl_CombatDisplay_Config[UnitName("player")]["ShowPetBars"];
if (state == nil) then
state = 3;
end
if (locked == nil) then
locked = 0;
end
if (healthpersist == nil) then
healthpersist = 0;
end
if (manapersist == nil) then
manapersist = 0;
end
if (scale == nil) then
scale = 1;
end
if (transparency == nil) then
transparency = 1;
end
if (showtarget == nil) then
showtarget = 0;
end
if (mobhealthsupport == nil) then
mobhealthsupport = 1;
end
if (showdruidbar == nil) then
showdruidbar = 1;
end
if (showpetbars == nil) then
showpetbars = 0;
end
local vars = {
["state"] = state,
["manapersist"] = manapersist,
["healthpersist"] = healthpersist,
["locked"] = locked,
["scale"] = scale,
["transparency"] = transparency,
["showtarget"] = showtarget,
["mobhealthsupport"] = mobhealthsupport,
["showdruidbar"] = showdruidbar,
["showpetbars"] = showpetbars,
}
return vars;
end
function Perl_CombatDisplay_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"]["State"] ~= nil) then
state = vartable["Global Settings"]["State"];
else
state = nil;
end
if (vartable["Global Settings"]["Locked"] ~= nil) then
locked = vartable["Global Settings"]["Locked"];
else
locked = nil;
end
if (vartable["Global Settings"]["HealthPersist"] ~= nil) then
healthpersist = vartable["Global Settings"]["HealthPersist"];
else
healthpersist = nil;
end
if (vartable["Global Settings"]["ManaPersist"] ~= nil) then
manapersist = vartable["Global Settings"]["ManaPersist"];
else
manapersist = nil;
end
if (vartable["Global Settings"]["Scale"] ~= nil) then
scale = vartable["Global Settings"]["Scale"];
else
scale = nil;
end
if (vartable["Global Settings"]["Transparency"] ~= nil) then
transparency = vartable["Global Settings"]["Transparency"];
else
transparency = nil;
end
if (vartable["Global Settings"]["ShowTarget"] ~= nil) then
showtarget = vartable["Global Settings"]["ShowTarget"];
else
showtarget = nil;
end
if (vartable["Global Settings"]["MobHealthSupport"] ~= nil) then
mobhealthsupport = vartable["Global Settings"]["MobHealthSupport"];
else
mobhealthsupport = nil;
end
if (vartable["Global Settings"]["ShowDruidBar"] ~= nil) then
showdruidbar = vartable["Global Settings"]["ShowDruidBar"];
else
showdruidbar = nil;
end
if (vartable["Global Settings"]["ShowPetBars"] ~= nil) then
showpetbars = vartable["Global Settings"]["ShowPetBars"];
else
showpetbars = nil;
end
end
-- Set the new values if any new values were found, same defaults as above
if (state == nil) then
state = 3;
end
if (locked == nil) then
locked = 0;
end
if (healthpersist == nil) then
healthpersist = 0;
end
if (manapersist == nil) then
manapersist = 0;
end
if (scale == nil) then
scale = 1;
end
if (transparency == nil) then
transparency = 1;
end
if (showtarget == nil) then
showtarget = 0;
end
if (mobhealthsupport == nil) then
mobhealthsupport = 1;
end
if (showdruidbar == nil) then
showdruidbar = 1;
end
if (showpetbars == nil) then
showpetbars = 0;
end
-- Call any code we need to activate them
Perl_CombatDisplay_Set_Target(showtarget)
Perl_CombatDisplay_Target_Update_Health();
Perl_CombatDisplay_Set_Scale()
Perl_CombatDisplay_Set_Transparency()
Perl_CombatDisplay_UpdateDisplay();
end
Perl_CombatDisplay_Config[UnitName("player")] = {
["State"] = state,
["Locked"] = locked,
["HealthPersist"] = healthpersist,
["ManaPersist"] = manapersist,
["Scale"] = scale,
["Transparency"] = transparency,
["ShowTarget"] = showtarget,
["MobHealthSupport"] = mobhealthsupport,
["ShowDruidBar"] = showdruidbar,
["ShowPetBars"] = showpetbars,
};
end
-------------------
-- Click Handler --
-------------------
function Perl_CombatDisplayDropDown_OnLoad()
UIDropDownMenu_Initialize(this, Perl_CombatDisplayDropDown_Initialize, "MENU");
end
function Perl_CombatDisplayDropDown_Initialize()
UnitPopup_ShowMenu(Perl_CombatDisplay_DropDown, "SELF", "player");
end
function Perl_CombatDisplay_MouseClick(button)
if (CastPartyConfig and PCUF_CASTPARTYSUPPORT == 1) then
CastParty_OnClickByUnit(button, "player");
elseif (Genesis_data and PCUF_CASTPARTYSUPPORT == 1) then
Genesis_MouseHeal("player", button);
else
if (SpellIsTargeting() and button == "RightButton") then
SpellStopTargeting();
return;
end
if (button == "LeftButton") then
if (SpellIsTargeting()) then
SpellTargetUnit("player");
elseif (CursorHasItem()) then
DropItemOnUnit("player");
else
TargetUnit("player");
end
end
end
end
function Perl_CombatDisplay_MouseDown(button)
if (button == "LeftButton" and locked == 0) then
Perl_CombatDisplay_Frame:StartMoving();
end
end
function Perl_CombatDisplay_MouseUp(button)
if (button == "RightButton") then
if ((CastPartyConfig or Genesis_MouseHeal) and PCUF_CASTPARTYSUPPORT == 1) then -- cant open the menu from combatdisplay if castparty or genesis is installed
-- Do nothing
else
if (not (IsAltKeyDown() or IsControlKeyDown() or IsShiftKeyDown())) then
ToggleDropDownMenu(1, nil, Perl_CombatDisplay_DropDown, "Perl_CombatDisplay_Frame", 40, 0);
end
end
end
Perl_CombatDisplay_Frame:StopMovingOrSizing();
end
function Perl_CombatDisplayTargetDropDown_OnLoad()
UIDropDownMenu_Initialize(this, Perl_CombatDisplayTargetDropDown_Initialize, "MENU");
end
function Perl_CombatDisplayTargetDropDown_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_CombatDisplay_Target_DropDown, menu, "target");
end
end
function Perl_CombatDisplay_Target_MouseClick(button)
if (CastPartyConfig and PCUF_CASTPARTYSUPPORT == 1) then
CastParty_OnClickByUnit(button, "target");
elseif (Genesis_data and PCUF_CASTPARTYSUPPORT == 1) then
Genesis_MouseHeal("target", button);
else
if (SpellIsTargeting() and button == "RightButton") then
SpellStopTargeting();
return;
end
if (button == "LeftButton") then
if (SpellIsTargeting()) then
SpellTargetUnit("player");
elseif (CursorHasItem()) then
DropItemOnUnit("player");
else
TargetUnit("player");
end
end
end
end
function Perl_CombatDisplay_Target_MouseDown(button)
if (button == "LeftButton" and locked == 0) then
Perl_CombatDisplay_Target_Frame:StartMoving();
end
end
function Perl_CombatDisplay_Target_MouseUp(button)
if (button == "RightButton") then
if ((CastPartyConfig or Genesis_data) and PCUF_CASTPARTYSUPPORT == 1) then -- cant open the menu from combatdisplay if castparty or genesis is installed
-- Do nothing
else
if (not (IsAltKeyDown() or IsControlKeyDown() or IsShiftKeyDown())) then -- if alt, ctrl, or shift ARE NOT held, show the menu
ToggleDropDownMenu(1, nil, Perl_CombatDisplay_Target_DropDown, "Perl_CombatDisplay_Target_Frame", 40, 0);
end
end
end
Perl_CombatDisplay_Target_Frame:StopMovingOrSizing();
end
----------------------
-- myAddOns Support --
----------------------
function Perl_CombatDisplay_myAddOns_Support()
-- Register the addon in myAddOns
if(myAddOnsFrame_Register) then
local Perl_CombatDisplay_myAddOns_Details = {
name = "Perl_CombatDisplay",
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_CombatDisplay_myAddOns_Help = {};
Perl_CombatDisplay_myAddOns_Help[1] = "/perl";
myAddOnsFrame_Register(Perl_CombatDisplay_myAddOns_Details, Perl_CombatDisplay_myAddOns_Help);
end
end
Generated by GNU Enscript 1.6.5.90.