/
-- <= == == == == == == == == == == == == => |
-- => Option Registration |
-- <= == == == == == == == == == == == == => |
if (not UnitFrameTweaks) then |
UnitFrameTweaks = {} |
end |
local optionTable = { |
id = "UnitFrameTweaks", |
options = { |
{ |
id = "HealthColor", |
tvar = "HealthColor", |
text = "Health Bar Color Change", |
tooltipText = "Healthbar changes color as it decreases.", |
type = CONTROLTYPE_CHECKBOX, |
defaultValue = "1", |
}, |
{ |
id = "ClassPortraits", |
tvar = "ClassPortraits", |
text = "Class Portraits", |
tooltipText = "Replace unit portraits with class icons when applicable.", |
type = CONTROLTYPE_CHECKBOX, |
defaultValue = "0", |
callback = UnitFrameTweaks.UpdateClassPortraits, |
}, |
{ |
id = "ClassIcons", |
tvar = "ClassIcons", |
text = "Class Icons", |
tooltipText = "Adds class icons to the target and party member frames.", |
type = CONTROLTYPE_CHECKBOX, |
defaultValue = "0", |
callback = UnitFrameTweaks.UpdateClassIcons, |
}, |
{ |
id = "HitIndicators", |
text = "Hit Indicators", |
subText = "Toggle the hit indicators on the unit frame portraits.", |
type = CONTROLTYPE_HEADER, |
}, |
{ |
id = "PlayerHitIndicator", |
tvar = "PlayerHitIndicator", |
text = "Player", |
tooltipText = "Toggles the hit indicator on the player portrait.", |
type = CONTROLTYPE_CHECKBOX, |
defaultValue = "1", |
callback = UnitFrameTweaks.UpdatePlayerHitIndicatorStatus, |
point = {nil, nil, nil, nil, 0}, |
}, |
{ |
id = "TargetHitIndicator", |
tvar = "TargetHitIndicator", |
text = "Target", |
tooltipText = "Toggles the hit indicator on the target portrait.", |
type = CONTROLTYPE_CHECKBOX, |
defaultValue = "0", |
callback = UnitFrameTweaks.UpdateTargetHitIndicatorStatus, |
point = {"TOPLEFT", "PlayerHitIndicator", "TOPRIGHT", 100, 0}, |
}, |
{ |
id = "PartyHitIndicator", |
tvar = "PartyHitIndicator", |
text = "Party", |
tooltipText = "Toggles the hit indicator on the party portraits.", |
type = CONTROLTYPE_CHECKBOX, |
defaultValue = "0", |
callback = UnitFrameTweaks.UpdatePartyHitIndicatorStatus, |
point = {"TOPLEFT", "TargetHitIndicator", "TOPRIGHT", 100, 0}, |
}, |
}, |
savedVarTable = "UnitFrameTweaks_SavedVars", |
} |
Portfolio.RegisterOptionSet(optionTable) |
-- <= == == == == == == == == == == == == => |
-- => Event Registration |
-- <= == == == == == == == == == == == == => |
if (not UnitFrameTweaks.events) then |
UnitFrameTweaks.events = {} |
end |
function UnitFrameTweaks.events.VARIABLES_LOADED() |
UnitFrameTweaks.init = false |
end |
function UnitFrameTweaks.events.PLAYER_ENTERING_WORLD() |
if (not UnitFrameTweaks.init) then |
UnitFrameTweaks.init = true |
--Portfolio.RegisterOptionSet(optionTable) |
UnitFrameTweaks.UpdateClassIcons(UnitFrameTweaks_SavedVars["ClassIcons"]) |
UnitFrameTweaks.UpdateClassPortraits(UnitFrameTweaks_SavedVars["ClassPortraits"]) |
UnitFrameTweaks.UpdatePlayerHitIndicatorStatus(UnitFrameTweaks_SavedVars["PlayerHitIndicator"]) |
UnitFrameTweaks.UpdateTargetHitIndicatorStatus(UnitFrameTweaks_SavedVars["TargetHitIndicator"]) |
UnitFrameTweaks.UpdatePartyHitIndicatorStatus(UnitFrameTweaks_SavedVars["PartyHitIndicator"]) |
end |
end |
-- Event Registration |
if (UnitFrameTweaks.events) then |
local frame = CreateFrame("Frame", "UnitFrameTweaksFrame") |
for event, func in pairs(UnitFrameTweaks.events) do |
frame:RegisterEvent(event) |
end |
frame:SetScript("OnEvent", function(self, event, ...) |
UnitFrameTweaks.events[event](self, event, ...) |
end) |
end |
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
xsi:schemaLocation="http://www.blizzard.com/wow/ui/ C:\Projects\WoW\Bin\Interface\FrameXML\UI.xsd"> |
<!-- $Id: Portfolio.xml 5169 2007-12-07 11:37:43Z karlkfi $ --> |
<Include file="Libs\Portfolio\Portfolio.xml"/> |
<Script file="HealthColor.lua"/> |
<Script file="ClassPortraits.lua"/> |
<Script file="ClassIcons.lua"/> |
<Include file="ClassIcons.xml"/> |
<Script file="HitIndicatorStatus.lua"/> |
<Script file="PortfolioRegistration.lua"/> |
</Ui> |
-- <= == == == == == == == == == == == == => |
-- => UnitFrame Class Portrait |
-- <= == == == == == == == == == == == == => |
if (not UnitFrameTweaks) then |
UnitFrameTweaks = {} |
end |
local unitFrames = { |
player = PlayerFrame, |
target = TargetFrame, |
party1 = PartyMemberFrame1, |
party2 = PartyMemberFrame2, |
party3 = PartyMemberFrame3, |
party4 = PartyMemberFrame4, |
} |
function UnitFrameTweaks.UpdateClassPortraits(value) |
if (value == "1") then |
for unit, unitframe in pairs(unitFrames) do |
if (UnitIsPlayer(unit)) then |
local localizedClass, englishClass = UnitClass(unit); |
if (englishClass) then |
unitframe.portrait:SetTexture("Interface\\AddOns\\UnitFrameTweaks\\Skin\\PortraitIcons\\"..englishClass); |
end |
end |
end |
else |
for unit, unitframe in pairs(unitFrames) do |
SetPortraitTexture(unitframe.portrait, unit); |
end |
end |
end |
function UnitFrameTweaks.UnitFrame_Update_After() |
if (UnitFrameTweaks_SavedVars and UnitFrameTweaks_SavedVars["ClassPortraits"] == "1") then |
if (UnitIsPlayer(this.unit)) then |
local localizedClass, englishClass = UnitClass(this.unit); |
if (englishClass) then |
this.portrait:SetTexture("Interface\\AddOns\\UnitFrameTweaks\\Skin\\PortraitIcons\\"..englishClass); |
end |
end |
end |
end |
function UnitFrameTweaks.UnitFrame_OnEvent_After(event) |
if (UnitFrameTweaks_SavedVars and UnitFrameTweaks_SavedVars["ClassPortraits"] == "1") then |
if ( (event == "UNIT_PORTRAIT_UPDATE") and (arg1 == this.unit) ) then |
if (UnitIsPlayer(this.unit)) then |
local localizedClass, englishClass = UnitClass(this.unit); |
if (englishClass) then |
this.portrait:SetTexture("Interface\\AddOns\\UnitFrameTweaks\\Skin\\PortraitIcons\\"..englishClass); |
end |
end |
end |
end |
end |
-- OnLoad |
hooksecurefunc("UnitFrame_Update", UnitFrameTweaks.UnitFrame_Update_After) |
hooksecurefunc("UnitFrame_OnEvent", UnitFrameTweaks.UnitFrame_OnEvent_After) |
## Interface: 30000 |
## Title: Unit Frame Tweaks |
## Notes: Class Icons/Portraits, Health Color, and Hit Indicators. |
## Author: AnduinLothar |
## OptionalDeps: |
## RequiredDeps: Portfolio |
## SavedVariables: UnitFrameTweaks_SavedVars |
## Version: 1.1 |
## X-Revision: $Rev: 5127 $ |
## X-Date: $Date: 2007-11-13 18:34:54 -0600 (Tue, 13 Nov 2007) $ |
## X-Category: UnitFrames |
## X-Website: http://www.cosmosui.org/addons.php?info=UnitFrameTweaks |
## X-Email: karlkfi@yahoo.com |
## X-Feedback: http://www.cosmosui.org/forums/ |
## X-Localizations: enUS |
## X-CompatibleLocales: enUS, enGB |
UnitFrameTweaks.xml |
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ |
..\FrameXML\UI.xsd"> |
<!-- Class Icon Template --> |
<Frame name="UnitFrameClassIconTemplate" level="OVERLAY" hidden="true" virtual="true"> |
<Size> |
<AbsDimension x="32" y="32"/> |
</Size> |
<Anchors> |
<Anchor point="TOPRIGHT" relativeTo="$parent" relativePoint="TOPRIGHT"> |
<Offset> |
<AbsDimension x="-85" y="-5"/> |
</Offset> |
</Anchor> |
</Anchors> |
<Layers> |
<Layer> |
<Texture name="$parentTexture"> |
<Size> |
<AbsDimension x="32" y="32"/> |
</Size> |
</Texture> |
</Layer> |
</Layers> |
<Scripts> |
<OnLoad> |
UnitFrameTweaks.ClassIcon_OnLoad() |
</OnLoad> |
</Scripts> |
</Frame> |
<Frame name="$parentClassIcon" inherits="UnitFrameClassIconTemplate" parent="TargetFrame" /> |
<!-- Small Class Icon Template --> |
<Frame name="UnitFrameClassIconSmallTemplate" level="OVERLAY" hidden="true" virtual="true"> |
<Size> |
<AbsDimension x="20" y="20"/> |
</Size> |
<Anchors> |
<Anchor point="TOPLEFT" relativeTo="$parent" relativePoint="TOPLEFT"> |
<Offset> |
<AbsDimension x="30" y="0"/> |
</Offset> |
</Anchor> |
</Anchors> |
<Layers> |
<Layer> |
<Texture name="$parentTexture"> |
<Size> |
<AbsDimension x="20" y="20"/> |
</Size> |
</Texture> |
</Layer> |
</Layers> |
<Scripts> |
<OnLoad> |
UnitFrameTweaks.ClassIcon_OnLoad() |
</OnLoad> |
</Scripts> |
</Frame> |
<Frame name="$parentClassIcon" inherits="UnitFrameClassIconSmallTemplate" parent="PartyMemberFrame1" id="1" /> |
<Frame name="$parentClassIcon" inherits="UnitFrameClassIconSmallTemplate" parent="PartyMemberFrame2" id="2" /> |
<Frame name="$parentClassIcon" inherits="UnitFrameClassIconSmallTemplate" parent="PartyMemberFrame3" id="3" /> |
<Frame name="$parentClassIcon" inherits="UnitFrameClassIconSmallTemplate" parent="PartyMemberFrame4" id="4" /> |
</Ui> |
-- <= == == == == == == == == == == == == => |
-- => Class Icons |
-- <= == == == == == == == == == == == == => |
if (not UnitFrameTweaks) then |
UnitFrameTweaks = {} |
end |
function UnitFrameTweaks.UpdateClassIcons(value) |
UnitFrameTweaks.UpdatePartyClassIcons() |
UnitFrameTweaks.UpdateTargetClassIcon() |
-- Move the party member Master Looter icons slightly |
if (value == "1") then |
for i=1, 4 do |
getglobal("PartyMemberFrame"..i.."MasterIcon"):ClearAllPoints() |
getglobal("PartyMemberFrame"..i.."MasterIcon"):SetPoint("TOPLEFT", "PartyMemberFrame"..i, "TOPLEFT", 15, 5) |
end |
else |
for i=1, 4 do |
getglobal("PartyMemberFrame"..i.."MasterIcon"):ClearAllPoints() |
getglobal("PartyMemberFrame"..i.."MasterIcon"):SetPoint("TOPLEFT", "PartyMemberFrame"..i, "TOPLEFT", 32, 0) |
end |
end |
end |
function UnitFrameTweaks.UpdatePartyClassIcons() |
local icon; |
if (UnitFrameTweaks_SavedVars["ClassIcons"] == "1") then |
local localizedClass, englishClass |
for i=1, GetNumPartyMembers() do |
localizedClass, englishClass = UnitClass("party"..i) |
icon = getglobal("PartyMemberFrame"..i.."ClassIcon") |
if (englishClass) then |
if (not icon:IsVisible()) then |
icon:Show() |
end |
getglobal(icon:GetName().."Texture"):SetTexture("Interface\\AddOns\\UnitFrameTweaks\\Skin\\ClassIcons\\"..englishClass) |
else |
if (icon:IsVisible()) then |
icon:Hide() |
end |
end |
end |
else |
for i=1, GetNumPartyMembers() do |
icon = getglobal("PartyMemberFrame"..i.."ClassIcon") |
if (icon:IsVisible()) then |
icon:Hide() |
end |
end |
end |
end |
function UnitFrameTweaks.UpdateTargetClassIcon() |
if (UnitFrameTweaks_SavedVars["ClassIcons"] == "1") then |
if (UnitIsPlayer("target")) then |
local localizedClass, englishClass = UnitClass("target") |
if (not TargetFrameClassIcon:IsVisible()) then |
TargetFrameClassIcon:Show() |
end |
TargetFrameClassIconTexture:SetTexture("Interface\\AddOns\\UnitFrameTweaks\\Skin\\ClassIcons\\"..englishClass) |
else |
TargetFrameClassIcon:Hide() |
end |
else |
if (TargetFrameClassIcon:IsVisible()) then |
TargetFrameClassIcon:Hide() |
end |
end |
end |
function UnitFrameTweaks.ClassIcon_OnLoad() |
this:SetFrameLevel(this:GetFrameLevel()+2) |
end |
-- Events |
if (not UnitFrameTweaks.events) then |
UnitFrameTweaks.events = {} |
end |
function UnitFrameTweaks.events.PARTY_MEMBERS_CHANGED() |
UnitFrameTweaks.UpdatePartyClassIcons() |
end |
function UnitFrameTweaks.events.PLAYER_TARGET_CHANGED() |
UnitFrameTweaks.UpdateTargetClassIcon() |
end |
-- <= == == == == == == == == == == == == => |
-- => UnitFrame Health Bar Gradient |
-- <= == == == == == == == == == == == == => |
if (not UnitFrameTweaks) then |
UnitFrameTweaks = {} |
end |
function UnitFrameTweaks.HealthBar_OnValueChanged(self, value) |
if (UnitFrameTweaks_SavedVars and UnitFrameTweaks_SavedVars["HealthColor"] == "1") then |
if (not value) then |
return; |
end |
local r, g, b |
local min, max = self:GetMinMaxValues() |
if ( (value < min) or (value > max) ) then |
return; |
end |
if ( (max - min) > 0 ) then |
value = (value - min) / (max - min) |
else |
value = 0; |
end |
if(value > 0.5) then |
r = (1.0 - value) * 2 |
g = 1.0 |
else |
r = 1.0; |
g = value * 2 |
end |
b = 0.0 |
self:SetStatusBarColor(r, g, b) |
end |
end |
-- OnLoad |
hooksecurefunc("HealthBar_OnValueChanged", UnitFrameTweaks.HealthBar_OnValueChanged) |
-- <= == == == == == == == == == == == == => |
-- => Hits Indicator Options |
-- <= == == == == == == == == == == == == => |
if (not UnitFrameTweaks) then |
UnitFrameTweaks = {} |
end |
function UnitFrameTweaks.InitializeHitIndicator(indicator, controlFrame, unit, fontHeight) |
--[[ |
local tempthis = this; |
this = controlFrame; |
CombatFeedback_Initialize(indicator, 30); |
this = tempthis; |
]]-- |
controlFrame.feedbackText = indicator; |
controlFrame.feedbackFontHeight = fontHeight; |
controlFrame.feedbackStartTime = 0; |
controlFrame:HookScript("OnUpdate", CombatFeedback_OnUpdate) |
local currUnit = unit |
controlFrame:HookScript("OnEvent", function(self, event, arg1, arg2, arg3, arg4, arg5) |
if ( event == "UNIT_COMBAT" and arg1 == currUnit ) then |
CombatFeedback_OnCombatEvent(self, arg2, arg3, arg4, arg5) |
end |
end) |
end |
function UnitFrameTweaks.UpdateHitIndicatorStatus(controlFrame, value) |
if (value == "1") then |
controlFrame:RegisterEvent("UNIT_COMBAT") |
else |
controlFrame:UnregisterEvent("UNIT_COMBAT") |
end |
end |
function UnitFrameTweaks.UpdatePlayerHitIndicatorStatus(value) |
UnitFrameTweaks.UpdateHitIndicatorStatus(PlayerFrame, value) |
end |
function UnitFrameTweaks.UpdateTargetHitIndicatorStatus(value) |
UnitFrameTweaks.UpdateHitIndicatorStatus(TargetFrame, value) |
end |
function UnitFrameTweaks.UpdatePartyHitIndicatorStatus(value) |
for i=1, MAX_PARTY_MEMBERS do |
local frame = getglobal("PartyMemberFrame"..i) |
UnitFrameTweaks.UpdateHitIndicatorStatus(frame, value) |
end |
end |
--OnLoad |
local indicator = TargetFrameTextureFrame:CreateFontString("TargetFrameHitIndicator", "OVERLAY", "NumberFontNormalHuge"); |
indicator:SetPoint("CENTER", TargetFrameTextureFrame, "TOPRIGHT", -73, -42); |
UnitFrameTweaks.InitializeHitIndicator(indicator, TargetFrame, "target", 30) |
for i=1, MAX_PARTY_MEMBERS do |
local frame = getglobal("PartyMemberFrame"..i) |
local anchorFrame = getglobal("PartyMemberFrame"..i.."Texture"):GetParent() |
indicator = anchorFrame:CreateFontString("PartyMemberFrame"..i.."HitIndicator", "OVERLAY", "NumberFontNormalHuge"); |
indicator:SetPoint("CENTER", anchorFrame, "TOPLEFT", 28, -26); |
UnitFrameTweaks.InitializeHitIndicator(indicator, frame, "party"..i, 20) |
end |