vanilla-wow-addons – Rev 1
?pathlinks?
if ( CT_AddMovable ) then
CT_AddMovable("CT_AssistFrame", CT_ASSISTFRAME_MOVABLE, "TOPLEFT", "TOPLEFT", "UIParent", 480, -25, function(status)
if ( status ) then
CT_AssistFrame_Drag:Show();
else
CT_AssistFrame_Drag:Hide();
end
end);
end
function CT_AssistFrame_OnLoad()
this.statusCounter = 0;
this.statusSign = -1;
this.unitHPPercent = 1;
this.update = 1;
CT_AssistFrame_Update();
this:RegisterEvent("PLAYER_TARGET_CHANGED");
end
function CT_AssistFrame_OnUpdate(elapsed)
this.update = this.update - elapsed;
if ( this.update <= 0 ) then
this.update = 1;
if ( this == CT_AssistFrame ) then
CT_AssistFrame_Update();
elseif ( UnitExists("targettarget") and CT_UnitFramesOptions.shallDisplayAssist ) then
CT_AssistFrame:Show();
end
end
end
function CT_AssistFrame_ShallDisplay(offset)
return CT_UnitFramesOptions.styles[4][offset][1];
end
function CT_AssistFrame_GetHealth(id)
if ( not UnitExists("target") or not UnitExists("player") or not UnitExists("targettarget") ) then
return "";
end
if ( CT_AssistFrame_CheckDead() ) then
return "";
end
if ( UnitHealthMax("targettarget") == 100 ) then
id = 2;
end
if ( id == 2 ) then
return floor(( UnitHealth("targettarget") or 1 ) / ( UnitHealthMax("targettarget") or 1)*100) .. "%";
elseif ( id == 3 ) then
local deficit = ( UnitHealth("targettarget") or 1 ) - ( UnitHealthMax("targettarget") or 1 );
if ( deficit == 0 ) then
deficit = "";
end
return deficit;
elseif ( id == 4 ) then
return ( UnitHealth("targettarget") or "?" ) .. "/" .. ( UnitHealthMax("targettarget") or "?" );
end
end
function CT_AssistFrame_GetMana(id)
if ( not UnitExists("target") or not UnitExists("player") or not UnitExists("targettarget") ) then
return "";
end
if ( UnitPowerType("targettarget") > 0 or UnitManaMax("targettarget") == 0 or ( UnitIsDead("targettarget") and UnitIsConnected("targettarget") ) ) then
return "";
end
if ( id == 2 ) then
return floor(( UnitMana("targettarget") or 1 ) / ( UnitManaMax("targettarget") or 1)*100) .. "%";
elseif ( id == 3 ) then
local deficit = ( UnitMana("targettarget") or 1 ) - ( UnitManaMax("targettarget") or 1 );
if ( deficit == 0 ) then
deficit = "";
end
return deficit;
elseif ( id == 4 ) then
return ( UnitMana("targettarget") or "?" ) .. "/" .. ( UnitManaMax("targettarget") or "?" );
end
end
function CT_ShowAssistHealth()
if ( not UnitExists("target") or not UnitExists("player") or not UnitExists("targettarget") ) then
return "";
end
local typeOnHealth = CT_AssistFrame_ShallDisplay(1);
if ( typeOnHealth > 1 ) then
CT_AssistHealthBar:Show();
CT_AssistHealthBar:SetText(CT_AssistFrame_GetHealth(typeOnHealth));
else
CT_AssistHealthBar:Hide();
end
CT_AssistHealthBar:SetTextColor(CT_UnitFramesOptions.styles[4][1][2], CT_UnitFramesOptions.styles[4][1][3], CT_UnitFramesOptions.styles[4][1][4], CT_UnitFramesOptions.styles[4][1][5]);
local hp = ( UnitHealth("targettarget") or 1 ) / ( UnitHealthMax("targettarget") or 1 );
local r, g = 1, 1;
if ( hp > 0.5 ) then
r = (1.0 - hp) * 2;
g = 1.0;
else
r = 1.0;
g = hp * 2;
end
if ( r < 0 ) then r = 0; elseif ( r > 1 ) then r = 1; end
if ( g < 0 ) then g = 0; elseif ( g > 1 ) then g = 1; end
CT_AssistFrameHealthBar:SetStatusBarColor(r, g, 0);
end
function CT_ShowAssistMana()
if ( not UnitExists("target") or not UnitExists("player") or not UnitExists("targettarget") ) then
return "";
end
local typeOnMana = CT_AssistFrame_ShallDisplay(2);
if ( typeOnMana > 1 ) then
CT_AssistManaBar:SetText(CT_AssistFrame_GetMana(typeOnMana));
CT_AssistManaBar:Show();
else
CT_AssistManaBar:Hide();
end
CT_AssistManaBar:SetTextColor(CT_UnitFramesOptions.styles[4][2][2], CT_UnitFramesOptions.styles[4][2][3], CT_UnitFramesOptions.styles[4][2][4], CT_UnitFramesOptions.styles[4][2][5]);
end
function CT_AssistFrame_Update()
if ( UnitExists("player") and UnitExists("targettarget") and not UnitIsUnit("target", "player") and CT_UnitFramesOptions.shallDisplayAssist ) then
CT_ShowAssistHealth();
CT_ShowAssistMana();
this:Show();
UnitFrame_Update();
CT_AssistFrame_CheckLevel();
CT_AssistFrame_CheckFaction();
CT_AssistFrame_CheckClassification();
CT_AssistFrame_CheckDishonorableKill();
if ( UnitIsPartyLeader("targettarget") ) then
CT_AssistLeaderIcon:Show();
else
CT_AssistLeaderIcon:Hide();
end
CT_AssistDebuffButton_Update();
CT_AssistPortrait:SetAlpha(1.0);
local hp = CT_AssistFrame.unitHPPercent;
if ( hp ) then
if ( hp > 0 ) then
if ( hp > 0.5 ) then
r = (1.0 - hp) * 2;
g = 1.0;
else
r = 1.0;
g = hp * 2;
end
else
r = 0; g = 1;
end
else
r = 0; g = 1;
end
CT_AssistFrameHealthBar:SetStatusBarColor(r, g, 0);
else
this:Hide();
end
end
function CT_AssistFrame_OnEvent(event)
UnitFrame_OnEvent(event);
if ( event == "PLAYER_TARGET_CHANGED" ) then
CT_AssistFrame_Update();
end
end
function CT_AssistFrame_OnShow()
CT_AssistFrame_Update();
end
function CT_AssistFrame_OnHide()
end
function CT_AssistFrame_CheckLevel()
local targetLevel = UnitLevel("targettarget");
if ( UnitIsCorpse("targettarget") ) then
CT_AssistLevelText:Hide();
CT_AssistHighLevelTexture:Show();
elseif ( targetLevel > 0 ) then
-- Normal level target
CT_AssistLevelText:SetText(targetLevel);
-- Color level number
if ( UnitCanAttack("player", "targettarget") ) then
local color = GetDifficultyColor(targetLevel);
CT_AssistLevelText:SetVertexColor(color.r, color.g, color.b);
else
CT_AssistLevelText:SetVertexColor(1.0, 0.82, 0.0);
end
CT_AssistLevelText:Show();
CT_AssistHighLevelTexture:Hide();
else
-- Target is too high level to tell
CT_AssistLevelText:Hide();
CT_AssistHighLevelTexture:Show();
end
end
function CT_AssistFrame_CheckFaction()
if ( UnitPlayerControlled("targettarget") ) then
local r, g, b;
if ( UnitCanAttack("targettarget", "player") ) then
-- Hostile players are red
if ( not UnitCanAttack("player", "targettarget") ) then
r = 0.0;
g = 0.0;
b = 1.0;
else
r = UnitReactionColor[2].r;
g = UnitReactionColor[2].g;
b = UnitReactionColor[2].b;
end
elseif ( UnitCanAttack("player", "targettarget") ) then
-- Players we can attack but which are not hostile are yellow
r = UnitReactionColor[4].r;
g = UnitReactionColor[4].g;
b = UnitReactionColor[4].b;
elseif ( UnitIsPVP("targettarget") ) then
-- Players we can assist but are PvP flagged are green
r = UnitReactionColor[6].r;
g = UnitReactionColor[6].g;
b = UnitReactionColor[6].b;
else
-- All other players are blue (the usual state on the "blue" server)
r = 0.0;
g = 0.0;
b = 1.0;
end
CT_AssistFrameNameBackground:SetVertexColor(r, g, b);
CT_AssistPortrait:SetVertexColor(1.0, 1.0, 1.0);
elseif ( UnitIsTapped("targettarget") and not UnitIsTappedByPlayer("targettarget") ) then
CT_AssistFrameNameBackground:SetVertexColor(0.5, 0.5, 0.5);
CT_AssistPortrait:SetVertexColor(0.5, 0.5, 0.5);
else
local reaction = UnitReaction("targettarget", "player");
if ( reaction ) then
local r, g, b;
r = UnitReactionColor[reaction].r;
g = UnitReactionColor[reaction].g;
b = UnitReactionColor[reaction].b;
CT_AssistFrameNameBackground:SetVertexColor(r, g, b);
else
CT_AssistFrameNameBackground:SetVertexColor(0, 0, 1.0);
end
CT_AssistPortrait:SetVertexColor(1.0, 1.0, 1.0);
end
local factionGroup = UnitFactionGroup("targettarget");
if ( UnitIsPVPFreeForAll("targettarget") ) then
CT_AssistPVPIcon:SetTexture("Interface\\TargetingFrame\\UI-PVP-FFA");
CT_AssistPVPIcon:Show();
elseif ( factionGroup and UnitIsPVP("targettarget") ) then
CT_AssistPVPIcon:SetTexture("Interface\\TargetingFrame\\UI-PVP-"..factionGroup);
CT_AssistPVPIcon:Show();
else
CT_AssistPVPIcon:Hide();
end
end
function CT_AssistFrame_CheckClassification()
local classification = UnitClassification("targettarget");
if ( classification == "worldboss" ) then
CT_AssistFrameTexture:SetTexture("Interface\\TargetingFrame\\UI-TargetingFrame-Elite");
elseif ( classification == "rareelite" ) then
CT_AssistFrameTexture:SetTexture("Interface\\TargetingFrame\\UI-TargetingFrame-Elite");
elseif ( classification == "elite" ) then
CT_AssistFrameTexture:SetTexture("Interface\\TargetingFrame\\UI-TargetingFrame-Elite");
elseif ( classification == "rare" ) then
CT_AssistFrameTexture:SetTexture("Interface\\TargetingFrame\\UI-TargetingFrame-Rare");
else
CT_AssistFrameTexture:SetTexture("Interface\\TargetingFrame\\UI-TargetingFrame");
end
end
function CT_AssistFrame_CheckDead()
if ( UnitHealth("targettarget") <= 0 and UnitIsConnected("targettarget") ) then
CT_AssistDeadText:Show();
return true;
else
CT_AssistDeadText:Hide();
return false;
end
end
function CT_AssistFrame_CheckDishonorableKill()
if ( UnitIsCivilian("targettarget") ) then
-- Is a dishonorable kill
this.name:SetText(RED_FONT_COLOR_CODE..PVP_RANK_CIVILIAN..FONT_COLOR_CODE_CLOSE);
CT_AssistFrameNameBackground:SetVertexColor(0.36, 0.05, 0.05);
CT_AssistFrameNameBackground:SetVertexColor(1.0, 1.0, 1.0);
end
end
function CT_AssistFrame_OnClick(button)
if ( SpellIsTargeting() and button == "RightButton" ) then
SpellStopTargeting();
return;
end
if ( button == "LeftButton" ) then
if ( SpellIsTargeting() ) then
SpellTargetUnit("targettarget");
elseif ( CursorHasItem() ) then
DropItemOnUnit("targettarget");
else
TargetUnit("targettarget");
end
else
ToggleDropDownMenu(1, nil, CT_AssistFrameDropDown, "CT_AssistFrame", 120, 10);
end
end
function CT_AssistDebuffButton_Update()
local debuff, debuffApplications, debuffType, debuffButton, buff, buffButton, button, color;
local numBuffs = 0;
for i=1, MAX_TARGET_BUFFS do
buff = UnitBuff("targettarget", i);
button = getglobal("CT_AssistFrameBuff"..i);
if ( buff ) then
getglobal("CT_AssistFrameBuff"..i.."Icon"):SetTexture(buff);
button:Show();
button.id = i;
numBuffs = numBuffs + 1;
else
button:Hide();
end
end
local debuffCount;
local numDebuffs = 0;
for i=1, MAX_TARGET_DEBUFFS do
debuff, debuffApplications, debuffType = UnitDebuff("targettarget", i);
button = getglobal("CT_AssistFrameDebuff"..i);
if ( debuff ) then
if ( debuffType ) then
color = DebuffTypeColor[debuffType];
else
color = DebuffTypeColor["none"];
end
getglobal("CT_AssistFrameDebuff"..i.."Icon"):SetTexture(debuff);
getglobal("CT_AssistFrameDebuff" .. i .. "Border"):SetVertexColor(color.r, color.g, color.b);
debuffCount = getglobal("CT_AssistFrameDebuff"..i.."Count");
if ( debuffApplications > 1 ) then
debuffCount:SetText(debuffApplications);
debuffCount:Show();
else
debuffCount:Hide();
end
button:Show();
numDebuffs = numDebuffs + 1;
else
button:Hide();
end
button.id = i;
end
-- If more than 5 debuffs then make the first 5 small
local debuffFrame;
local debuffSize, debuffFrameSize;
if ( numDebuffs > 5 ) then
debuffSize = 17;
debuffFrameSize = 19;
else
debuffSize = 21;
debuffFrameSize = 23;
end
for i=1, MAX_TARGET_DEBUFFS do
button = getglobal("CT_AssistFrameDebuff"..i);
debuffFrame = getglobal("CT_AssistFrameDebuff"..i.."Border");
button:SetWidth(debuffSize);
button:SetHeight(debuffSize);
debuffFrame:SetWidth(debuffFrameSize);
debuffFrame:SetHeight(debuffFrameSize);
end
if ( UnitIsFriend("player", "targettarget") ) then
CT_AssistFrameBuff1:SetPoint("TOPLEFT", "CT_AssistFrame", "BOTTOMLEFT", 5, 32);
CT_AssistFrameBuff7:ClearAllPoints();
CT_AssistFrameBuff7:SetPoint("TOPLEFT", "CT_AssistFrameBuff1", "BOTTOMLEFT", 0, -2);
if ( numBuffs > 6 ) then
CT_AssistFrameDebuff1:SetPoint("TOPLEFT", "CT_AssistFrameBuff7", "BOTTOMLEFT", 0, -2);
else
CT_AssistFrameDebuff1:SetPoint("TOPLEFT", "CT_AssistFrameBuff1", "BOTTOMLEFT", 0, -2);
end
CT_AssistFrameBuff11:ClearAllPoints();
CT_AssistFrameBuff11:SetPoint("LEFT", "CT_AssistFrameBuff10", "RIGHT", 3, 0);
else
CT_AssistFrameBuff1:SetPoint("TOPLEFT", "CT_AssistFrame", "BOTTOMLEFT", 5, 32);
CT_AssistFrameBuff7:ClearAllPoints();
CT_AssistFrameBuff7:SetPoint("LEFT", "CT_AssistFrameBuff6", "RIGHT", 3, 0);
CT_AssistFrameDebuff1:SetPoint("TOPLEFT", "CT_AssistFrameBuff1", "BOTTOMLEFT", 0, -2);
CT_AssistFrameBuff11:ClearAllPoints();
CT_AssistFrameBuff11:SetPoint("TOPLEFT", "CT_AssistFrameBuff1", "BOTTOMLEFT", 0, -2);
end
local buffSize, button = 21;
if ( numBuffs > 5 ) then
buffSize = 17;
end
for i = 1, MAX_TARGET_BUFFS, 1 do
button = getglobal("CT_AssistFrameBuff" .. i);
button:SetWidth(buffSize);
button:SetHeight(buffSize);
end
end
function CT_AssistFrame_HealthUpdate(elapsed)
if ( UnitIsPlayer("targettarget") ) then
if ( (this.unitHPPercent > 0) and (this.unitHPPercent <= 0.2) ) then
local alpha = 255;
local counter = this.statusCounter + elapsed;
local sign = this.statusSign;
if ( counter > 0.5 ) then
sign = -sign;
this.statusSign = sign;
end
counter = mod(counter, 0.5);
this.statusCounter = counter;
if ( sign == 1 ) then
alpha = (127 + (counter * 256)) / 255;
else
alpha = (255 - (counter * 256)) / 255;
end
CT_AssistPortrait:SetAlpha(alpha);
end
end
end
function CT_AssistHealthCheck()
if ( UnitExists("targettarget") ) then
local unitMinHP, unitMaxHP, unitCurrHP;
unitHPMin, unitHPMax = this:GetMinMaxValues();
unitCurrHP = this:GetValue();
this:GetParent().unitHPPercent = unitCurrHP / unitHPMax;
if ( UnitIsDead("targettarget") ) then
CT_AssistPortrait:SetVertexColor(0.35, 0.35, 0.35, 1.0);
elseif ( UnitIsGhost("targettarget") ) then
CT_AssistPortrait:SetVertexColor(0.2, 0.2, 0.75, 1.0);
elseif ( (this:GetParent().unitHPPercent > 0) and (this:GetParent().unitHPPercent <= 0.2) ) then
CT_AssistPortrait:SetVertexColor(1.0, 0.0, 0.0);
else
CT_AssistPortrait:SetVertexColor(1.0, 1.0, 1.0, 1.0);
end
end
if ( not UnitIsPlayer("targettarget") ) then
CT_AssistFrame_CheckFaction();
end
end
function CT_AssistFrameDropDown_OnLoad()
UIDropDownMenu_Initialize(this, CT_AssistFrameDropDown_Initialize, "MENU");
end
function CT_AssistFrameDropDown_Initialize()
local menu = nil;
if ( UnitIsEnemy("targettarget", "player") ) then
return;
end
if ( UnitIsUnit("targettarget", "player") ) then
menu = "SELF";
elseif ( UnitIsUnit("targettarget", "pet") ) then
menu = "PET";
elseif ( UnitIsPlayer("targettarget") ) then
if ( UnitInParty("targettarget") ) then
menu = "PARTY";
else
menu = "PLAYER";
end
end
if ( menu ) then
UnitPopup_ShowMenu(CT_AssistFrameDropDown, menu, "targettarget");
end
end
Generated by GNU Enscript 1.6.5.90.