⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 en_hpmpxp.lua

📁 时间太紧了
💻 LUA
字号:
function EUF_HpMpXp_OnLoad()
	this:RegisterEvent("VARIABLES_LOADED");
	this:RegisterEvent("UNIT_MANA");
	this:RegisterEvent("UNIT_HEALTH");
	this:RegisterEvent("UNIT_RAGE");
	this:RegisterEvent("UNIT_FOCUS");
	this:RegisterEvent("UNIT_ENERGY");
	this:RegisterEvent("UNIT_DISPLAYPOWER");
	this:RegisterEvent("PLAYER_ENTERING_WORLD");
	this:RegisterEvent("UPDATE_SHAPESHIFT_FORMS");
	this:RegisterEvent("PLAYER_TARGET_CHANGED");
	this:RegisterEvent("PARTY_MEMBERS_CHANGED");
	this:RegisterEvent("PLAYER_XP_UPDATE");

end;

function EUF_HpMpXp_OnEvent(event)
	if event == "UNIT_HEALTH" then
		EUF_HP_Update(arg1);
	elseif event == "UNIT_MANA" or event == "UNIT_FOCUS" or event == "UNIT_ENERGY" or event == "UNIT_RAGE" or event == "UPDATE_SHAPESHIFT_FORMS" then
		EUF_MP_Update(arg1);
	elseif event == "PARTY_MEMBERS_CHANGED" then
		EUF_PartyFrameHPMP_Update();
		EUF_PartyFrameDisplay_Update();
	elseif event == "PLAYER_TARGET_CHANGED" then
		EUF_TargetFrameHPMP_Update();
	elseif event == "PLAYER_ENTERING_WORLD" then
		EUF_Frame_Update();
	elseif event == "UNIT_LEVEL" or event == "UNIT_DISPLAYPOWER" then
		EUF_HP_Update(arg1);
		EUF_MP_Update(arg1);
	elseif event == "PLAYER_XP_UPDATE" then
		EUF_PlayerFrameXp_Update();
	elseif event == "VARIABLES_LOADED" then
		EUF_HpMpXp_Init();		
	end;
end;

function EUF_HpMpXp_Init()
	PetFrame:SetPoint("TOPLEFT","PlayerFrame","TOPLEFT",72,-72); 
	PetName:SetPoint("BOTTOMLEFT","PetFrame","BOTTOMLEFT",50,31); 
	PartyMemberFrame1:ClearAllPoints();
	PartyMemberFrame1:SetPoint("TOPLEFT","UIParent","TOPLEFT",20,-180);
	PartyMemberFrame2:SetPoint("TOPLEFT","PartyMemberFrame1PetFrame","BOTTOMLEFT",-23,-16);
	PartyMemberFrame3:SetPoint("TOPLEFT","PartyMemberFrame2PetFrame","BOTTOMLEFT",-23,-16);
	PartyMemberFrame4:SetPoint("TOPLEFT","PartyMemberFrame3PetFrame","BOTTOMLEFT",-23,-16);
	EUF_Frame_Update();
end;

-- PlayerFrame
function EUF_PlayerFramePosition_Update()
	-- Display HP percent or location
	if EUF_CurrentOptions["PLAYERPOSITION"] == 0 then
		return;
	end;
	local displayText = "";

	if EUF_CurrentOptions["PLAYERPOSITIONMANA"] == 1 then
		displayText = EUF_PlayerFrameHPPercent:GetText();
	else
		local x, y = GetPlayerMapPosition("player");
		if x and y then
			x = math.floor(x * 100);
			y = math.floor(y * 100);
		else
			x = 0;
			y = 0;
		end;
		if EUF_CurrentOptions["PLAYERPOSITIONAUTO"] == 1 and x == 0 and y == 0 then
			displayText = EUF_PlayerFrameHPPercent:GetText();
		else
			displayText = string.format("(%s, %s)", x, y);
		end;
	end;
	EUF_PlayerFramePosition:SetText(displayText);
end;

-- HP/MP/XP
function EUF_HP_Update(unit)
	if not unit or (unit ~= "player" and unit~="target" and not string.find(unit, "^party%d$")) then
		return;
	end;
	local currValue = UnitHealth(unit);
	local maxValue = UnitHealthMax(unit);
	local percent = math.floor(currValue * 100 / maxValue);
	local digit = currValue  .. "/" .. maxValue;
	
	if percent and maxValue ~= 0 then
		percent = percent .. "%";
	else
		percent = "";
		digit = "";
	end;
	
	if unit == "target" and (UnitIsDead("target") or (EUF_CurrentOptions["TARGETACCTUALHPMP"] == 1 and maxValue == 100) or (MobHealth_GetTargetCurHP and UnitCanAttack("player", "target") and not UnitIsDead("target") and not UnitIsFriend("player", "target"))) then
		digit = "";
	end;
	
	local unitObj, unitPercentObj, unitObjShow, unitPercentObjShow, unitId;
	if unit == "player" then
		unitObj = EUF_PlayerFrameHP;
		unitPercentObj = EUF_PlayerFrameHPPercent;
		if EUF_CurrentOptions["PLAYERAUTOHEALTHCOLOR"] == 1 then
			PlayerFrameHealthBar:SetStatusBarColor(EUF_GetPercentColor(currValue, maxValue));
		end;
	elseif unit == "target" then
		unitObj = EUF_TargetFrameHP;
		unitPercentObj = EUF_TargetFrameHPPercent;
		if EUF_CurrentOptions["TARGETAUTOHEALTHCOLOR"] == 1 then
			TargetFrameHealthBar:SetStatusBarColor(EUF_GetPercentColor(currValue, maxValue));
		end;
	else
		unitId = string.sub(unit, -1);
		unitObj = getglobal("EUF_PartyFrame" .. unitId .. "HP");
		unitPercentObj = getglobal("EUF_PartyFrame" .. unitId .. "HPPercent");
		if EUF_CurrentOptions["PARTYAUTOHEALTHCOLOR"] == 1 then
			getglobal("PartyMemberFrame" .. unitId .. "HealthBar"):SetStatusBarColor(EUF_GetPercentColor(currValue, maxValue));
		end;
	end;
	
	if unitObj then
		unitObj:SetText(digit);
	end;
	if unitPercentObj then
		unitPercentObj:SetText(percent);
	end;
end;

function EUF_MP_Update(unit)
	if not unit or (unit ~= "player" and unit~="target" and not string.find(unit, "^party%d$")) then
		return;
	end;
	local currValue = UnitMana(unit);
	local maxValue = UnitManaMax(unit);
	local percent = math.floor(currValue * 100 / maxValue);
	local digit = currValue  .. "/" .. maxValue;
	
	if percent and maxValue ~= 0 then
		percent = percent .. "%";
	else
		percent = "";
		digit = "";
	end;
	
	local unitObj, unitPercentObj, unitObjShow, unitPercentObjShow, unitId;
	if unit == "player" then
		unitObj = EUF_PlayerFrameMP;
		unitPercentObj = EUF_PlayerFrameMPPercent;
		if EUF_CurrentOptions["PLAYERMANAFILTER"] == 1 and UnitPowerType(unit) ~= 0 then
			percent="";
			digit="";
		end;
	elseif unit == "target" then
		unitObj = EUF_TargetFrameMP;
		unitPercentObj = EUF_TargetFrameMPPercent;
	else
		unitId = string.sub(unit, -1);
		unitObj = getglobal("EUF_PartyFrame" .. unitId .. "MP");
		unitPercentObj = getglobal("EUF_PartyFrame" .. unitId .. "MPPercent");
		if EUF_CurrentOptions["PARTYMANAFILTER"] == 1 and UnitPowerType(unit) ~= 0 then
			percent="";
			digit="";
		end;
	end;
	
	if unitObj then
		unitObj:SetText(digit);
	end;
	if unitPercentObj then
		unitPercentObj:SetText(percent);
	end;
end;

-- XP
function EUF_PlayerFrameXp_Update()
	local playerXP = UnitXP("player");
	local playerXPMax = UnitXPMax("player"); 
	local playerXPRest = GetXPExhaustion();
	if not playerXPRest or EUF_CurrentOptions["PLAYEREXTBAR"] ~= 1 then 
		EUF_PlayerFrameXP:SetText(string.format("%s / %s", playerXP, playerXPMax));
	else 
		EUF_PlayerFrameXP:SetText(string.format("%s/%s (+%s)", playerXP, playerXPMax, playerXPRest/2)); 
	end 
	EUF_PlayerFrameXPBar:SetMinMaxValues(min(0, playerXP), playerXPMax) 
	EUF_PlayerFrameXPBar:SetValue(playerXP); 
end;

function EUF_PlayerFrameHPMP_Update()
	EUF_HP_Update("player");
	EUF_MP_Update("player");
end;

function EUF_TargetFrameHPMP_Update()
	EUF_HP_Update("target");
	EUF_MP_Update("target");
end;

function EUF_PartyFrameHPMP_Update()
	local i;
	for i=1, GetNumPartyMembers() do
		EUF_HP_Update("party"..i);
		EUF_MP_Update("party"..i);
	end;
end;

function EUF_FrameHPMP_Update()
	EUF_PlayerFrameHPMP_Update();
	EUF_TargetFrameHPMP_Update();
	EUF_PartyFrameHPMP_Update();
end;


-- Frame position / display adjust

function EUF_PlayerFrameElite_Update()
-- Elite PlayerFrame
	local yOffset = -8;
	if TITAN_PANEL_PLACE_TOP then
		yOffset = -26;
	end
	if EUF_CurrentOptions["PLAYERELITE"] == 1 then
		PlayerFrameTexture:SetTexture("Interface\\TargetingFrame\\UI-TargetingFrame-Elite");
		PlayerFrame:SetPoint("TOPLEFT","UIParent","TOPLEFT", 4, yOffset);
		EUF_PlayerFrameTextureExt:SetTexture("Interface\\TargetingFrame\\UI-TargetingFrame-Elite");
		EUF_PlayerFrameXPBarBorder:SetDesaturated(nil);
		EUF_PlayerFrameXPBarBorderExt:SetDesaturated(nil);
	else
		PlayerFrameTexture:SetTexture("Interface\\TargetingFrame\\UI-TargetingFrame");
		PlayerFrame:SetPoint("TOPLEFT","UIParent","TOPLEFT", -25, yOffset);
		EUF_PlayerFrameTextureExt:SetTexture("Interface\\TargetingFrame\\UI-TargetingFrame");
		EUF_PlayerFrameXPBarBorder:SetDesaturated(1);
		EUF_PlayerFrameXPBarBorderExt:SetDesaturated(1);
	end;
end;

function EUF_PlayerFrameExtBar_Update()
	if EUF_CurrentOptions["PLAYEREXTBAR"] == 1 then
		EUF_PlayerFramePosition:ClearAllPoints();
		EUF_PlayerFramePosition:SetPoint("CENTER","PlayerFrame","TOPLEFT",262,-31);
		EUF_PlayerFrameHP:ClearAllPoints();
		EUF_PlayerFrameHP:SetPoint("CENTER","PlayerFrame","TOPLEFT",262,-47);
		EUF_PlayerFrameMP:ClearAllPoints();
		EUF_PlayerFrameMP:SetPoint("CENTER","PlayerFrame","TOPLEFT",262,-58);
		EUF_PlayerFrameHPPercent:ClearAllPoints();
		EUF_PlayerFrameHPPercent:SetPoint("CENTER","PlayerFrame","TOPLEFT",262,-47);
		EUF_PlayerFrameMPPercent:ClearAllPoints();
		EUF_PlayerFrameMPPercent:SetPoint("CENTER","PlayerFrame","TOPLEFT",262,-58);
		EUF_PlayerFrameBackground:Show();
		EUF_PlayerFrameTextureExt:Show();
		EUF_PlayerFrameXPBarBkgExt:SetWidth(192);
		EUF_PlayerFrameXPBarBorderExt:SetWidth(80);
		EUF_PlayerFrameXPBar:SetWidth(190);
		EUF_PlayerFrameXPBarBorderExt:SetTexCoord(0.5703125, 0.8828125, 0, 1);
		EUF_PlayerFrameXP:ClearAllPoints();
		EUF_PlayerFrameXP:SetPoint("CENTER", "PlayerFrame", 90, -19);
	else
		EUF_PlayerFramePosition:ClearAllPoints();
		EUF_PlayerFramePosition:SetPoint("LEFT","PlayerFrame","TOPLEFT",229,-31);
		EUF_PlayerFrameHP:ClearAllPoints();
		EUF_PlayerFrameHP:SetPoint("LEFT","PlayerFrame","TOPLEFT",229,-47);
		EUF_PlayerFrameMP:ClearAllPoints();
		EUF_PlayerFrameMP:SetPoint("LEFT","PlayerFrame","TOPLEFT",229,-58);
		EUF_PlayerFrameHPPercent:ClearAllPoints();
		EUF_PlayerFrameHPPercent:SetPoint("LEFT","PlayerFrame","TOPLEFT",229,-47);
		EUF_PlayerFrameMPPercent:ClearAllPoints();
		EUF_PlayerFrameMPPercent:SetPoint("LEFT","PlayerFrame","TOPLEFT",229,-58);
		EUF_PlayerFrameBackground:Hide();
		EUF_PlayerFrameTextureExt:Hide();
		EUF_PlayerFrameXPBarBkgExt:SetWidth(122);
		EUF_PlayerFrameXPBarBorderExt:SetWidth(9);
		EUF_PlayerFrameXPBarBorderExt:SetTexCoord(0.84765625, 0.8828125, 0, 1);
		EUF_PlayerFrameXPBar:SetWidth(119);
		EUF_PlayerFrameXP:ClearAllPoints();
		EUF_PlayerFrameXP:SetPoint("CENTER", "PlayerFrame", 50, -19);
	end;
end;

function EUF_PlayerFrameTargetFrameGap_Update()
	local gap;
	if EUF_CurrentOptions["PLAYEREXTBAR"] == 1 then
		gap = 72;
	else
		if EUF_CurrentOptions["PLAYERHPPERCENT"] == 0 or EUF_CurrentOptions["PLAYERMPPERCENT"] == 0 then
			gap = 65;
		else
			gap = 36;
		end;
	end;
	if EUF_CurrentOptions["TARGETMPPERCENT"] == 1 or EUF_CurrentOptions["TARGETHPPERCENT"] == 1 then
		gap = gap + 34;
	else
		gap = gap + 10;
	end;
	TargetFrame:SetPoint("TOPLEFT", "PlayerFrame", "TOPRIGHT", gap, 0);
end

function EUF_PlayerFrameDisplay_Update()
	if EUF_CurrentOptions["PLAYERHP"] == 0 then
		EUF_ObjectDisplay_Update(EUF_PlayerFrameHP, 0);
		EUF_ObjectDisplay_Update(EUF_PlayerFrameHPPercent, 0);
	else
		if EUF_CurrentOptions["PLAYERHPPERCENT"] == 0 then
			EUF_ObjectDisplay_Update(EUF_PlayerFrameHP, 1);
			EUF_ObjectDisplay_Update(EUF_PlayerFrameHPPercent, 0);
		else
			EUF_ObjectDisplay_Update(EUF_PlayerFrameHP, 0);
			EUF_ObjectDisplay_Update(EUF_PlayerFrameHPPercent, 1);
		end;
	end;
	if EUF_CurrentOptions["PLAYERMP"] == 0 then
		EUF_ObjectDisplay_Update(EUF_PlayerFrameMP, 0);
		EUF_ObjectDisplay_Update(EUF_PlayerFrameMPPercent, 0);
	else
		if EUF_CurrentOptions["PLAYERMPPERCENT"] == 0 then
			EUF_ObjectDisplay_Update(EUF_PlayerFrameMP, 1);
			EUF_ObjectDisplay_Update(EUF_PlayerFrameMPPercent, 0);
		else
			EUF_ObjectDisplay_Update(EUF_PlayerFrameMP, 0);
			EUF_ObjectDisplay_Update(EUF_PlayerFrameMPPercent, 1);
		end;
	end;
	EUF_ObjectDisplay_Update(EUF_PlayerFramePosition, EUF_CurrentOptions["PLAYERPOSITION"]);
	EUF_ObjectDisplay_Update(EUF_PlayerFrameXP, EUF_CanXPBarShow());
	EUF_ObjectDisplay_Update(EUF_PlayerFrameXPBar, EUF_CanXPBarShow());
end;

function EUF_PartyFrameDisplay_Update()
	local i;
	for i=1, GetNumPartyMembers() do
		if EUF_CurrentOptions["PARTYHP"] == 0 then
			EUF_ObjectDisplay_Update(getglobal("EUF_PartyFrame"..i.."HP"), 0);
			EUF_ObjectDisplay_Update(getglobal("EUF_PartyFrame"..i.."HPPercent"), 0);
		else
			if EUF_CurrentOptions["PARTYHPPERCENT"] == 0 then
				EUF_ObjectDisplay_Update(getglobal("EUF_PartyFrame"..i.."HP"), 1);
				EUF_ObjectDisplay_Update(getglobal("EUF_PartyFrame"..i.."HPPercent"), 0);
			else
				EUF_ObjectDisplay_Update(getglobal("EUF_PartyFrame"..i.."HP"), 0);
				EUF_ObjectDisplay_Update(getglobal("EUF_PartyFrame"..i.."HPPercent"), 1);
			end;
		end;
		if EUF_CurrentOptions["PARTYMP"] == 0 then
			EUF_ObjectDisplay_Update(getglobal("EUF_PartyFrame"..i.."MP"), 0);
			EUF_ObjectDisplay_Update(getglobal("EUF_PartyFrame"..i.."MPPercent"), 0);
		else
			if EUF_CurrentOptions["PARTYMPPERCENT"] == 0 then
				EUF_ObjectDisplay_Update(getglobal("EUF_PartyFrame"..i.."MP"), 1);
				EUF_ObjectDisplay_Update(getglobal("EUF_PartyFrame"..i.."MPPercent"), 0);
			else
				EUF_ObjectDisplay_Update(getglobal("EUF_PartyFrame"..i.."MP"), 0);
				EUF_ObjectDisplay_Update(getglobal("EUF_PartyFrame"..i.."MPPercent"), 1);
			end;
		end;
	end;
end;

function EUF_TargetFrameDisplay_Update()
	EUF_ObjectDisplay_Update(EUF_TargetFrameHP, EUF_CurrentOptions["TARGETHP"]);
	EUF_ObjectDisplay_Update(EUF_TargetFrameHPPercent, EUF_CurrentOptions["TARGETHPPERCENT"]);
	EUF_ObjectDisplay_Update(EUF_TargetFrameMP, EUF_CurrentOptions["TARGETMP"]);
	EUF_ObjectDisplay_Update(EUF_TargetFrameMPPercent, EUF_CurrentOptions["TARGETMPPERCENT"]);
end;

function EUF_FrameDisplay_Update()
	EUF_PlayerFrameDisplay_Update();
	EUF_TargetFrameDisplay_Update();
	EUF_PartyFrameDisplay_Update();
end;

function EUF_Frame_Update()
	EUF_FrameDisplay_Update();
	EUF_FrameHPMP_Update();
	EUF_PlayerFrameXp_Update();
	EUF_PlayerFrameElite_Update();		
	EUF_PlayerFrameExtBar_Update();
	EUF_PlayerFrameTargetFrameGap_Update();
end;

--Basic functions
function EUF_CanXPBarShow()
	local canShow = EUF_CurrentOptions["PLAYERXP"];
	if (canShow == 1 and EUF_CurrentOptions["PLAYERXPAUTO"] == 1 and UnitLevel("player") and UnitLevel("player") >= 60) then
		canShow = 0;
	end;
	return canShow;
end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -