/Interface/AddOns/hankui
--[[ 2do |
local hover = ...; hover = ...; self.hover = hover => self.hover = ...; self.hover:...; |
]] |
setfenv(1, select(2, ...)) |
SetCVar("spreadnameplates", 1) |
SetCVar("bloattest", 0) |
SetCVar("bloatnameplates", 0) |
SetCVar("bloatthreat", 0) |
SetCVar("ShowVKeyCastbar", 1) |
local select, unpack, RED_FONT_COLOR_CODE = select, unpack, RED_FONT_COLOR_CODE |
local WorldFrame = WorldFrame |
local tempColor = CreateColor(1, 1, 1) |
-- Modified caelNameplates by Caellian |
local f = CreateFrame("Frame", nil, UIParent) |
f:SetScript("OnEvent", function(self, event, ...) |
if type(self[event] == "function") then |
return self[event](self, event, ...) |
end |
end) |
-- Color the health bar dependent on hp% |
local function ColorHealthBar(self, value) |
local hpp, _, max = self:GetParent().hpp, self:GetMinMaxValues() |
local tempColor = colors["Red"]:GetBlend(colors["Green"], value / max) |
local select, unpack = select, unpack |
local RED_FONT_COLOR_CODE = RED_FONT_COLOR_CODE |
hpp:SetText(("%d%%"):format(value / max * 100)) |
hpp:SetTextColor(unpack(tempColor)) |
self:SetStatusBarColor(unpack(tempColor)) |
end |
local function ColorHealthBar(self) |
local hpCur, _, hpMax = self.healthBar:GetValue(), self.healthBar:GetMinMaxValues() |
local color = colors["Red"]:GetBlend(colors["Green"], hpCur / hpMax) |
-- Update spell names / interruptibility |
local function UpdateCastState(self, event, ...) |
if (event == "UNIT_SPELLCAST_START" or event == "UNIT_SPELLCAST_CHANNEL_START") and ({...})[1] == "target" then |
self.channeling = event == "UNIT_SPELLCAST_CHANNEL_START" |
local spellInfo = self.channeling and UnitChannelInfo or UnitCastingInfo |
local interruptible = UnitCanAttack("player", "target") and select(select("#", spellInfo("target")), spellInfo("target")) |
self.name:SetTextColor(unpack(colors[interruptible and "Red" or "White"])) |
self.time:SetTextColor(unpack(colors[interruptible and "Red" or "White"])) |
self.name:SetText(({...})[2]) |
end |
end |
self.hpp:SetText(("%d%%"):format(hpCur / hpMax * 100)) |
self.hpp:SetTextColor(unpack(color)) |
self.healthBar:SetStatusBarColor(unpack(color)) |
-- Update spell cast timer |
local function UpdateCastTime(self, value) |
self.time:SetText(("%.2fs"):format(self.channeling and value or select(2, self:GetMinMaxValues()) - value)) |
end |
-- Color on hover |
local function CheckMouseOver(self) |
if self.highlight:IsShown() then |
if self.hover:IsShown() then |
self.name:SetTextColor(unpack(colors["White"])) |
else |
self.name:SetTextColor(self.r, self.g, self.b) |
end |
end |
-- Show glow on aggro |
local function CheckThreat(self) |
if self.oldGlow:IsShown() then self.glow:Show() else self.glow:Hide() end |
if self._aggro:IsShown() then self.aggro:Show() else self.aggro:Hide() end |
end |
-- Poll for hover / threat updates |
local function UpdatePlate(self, elapsed) |
self.elapsed = self.elapsed + elapsed |
if self.elapsed >= 0.2 then |
end |
end |
-- Some information is not available until visibility changes |
local function ShowPlate(self) |
local statusR, statusG, statusB = self.healthBar:GetStatusBarColor() |
if statusG + statusB == 0 then |
local r, g, b = self.healthBar:GetStatusBarColor() |
if g + b == 0 then |
-- Hostile unit |
self.r, self.g, self.b = unpack(colors["Red"]) |
elseif statusR + statusB == 0 then |
elseif r + b == 0 then |
-- Friendly unit |
self.r, self.g, self.b = unpack(colors["Green"]) |
elseif statusR + statusG == 0 then |
elseif r + g == 0 then |
-- Friendly player |
self.r, self.g, self.b = unpack(colors["Blue"]) |
elseif 2 - (statusR + statusG) < 0.05 and statusB == 0 then |
elseif 2 - (r + g) < 0.05 and b == 0 then |
-- Neutral unit |
self.r, self.g, self.b = unpack(colors["Red"]:GetBlend(colors["Green"], 0.5)) |
tempColor = colors["Red"]:GetBlend(colors["Green"], 0.5) |
self.r, self.g, self.b = unpack(tempColor) |
else |
-- Hostile player - class colored. |
self.r, self.g, self.b = statusR, statusG, statusB |
self.r, self.g, self.b = r, g, b |
end |
local oldName = self.oldName:GetText() |
local newName = (string.len(oldName) > 20) and string.gsub(oldName, "%s?(.[\128-\191]*)%S+%s", "%1. ") or oldName |
self.name:SetText(newName) |
local name = self._name:GetText() |
self.name:SetText((string.len(name) > 20) and string.gsub(name, "%s?(.[\128-\191]*)%S+%s", "%1. ") or name) |
self.healthBar:SetSize(13, 13) |
self.healthBar:ClearAllPoints() |
self.level:SetText(level .. "+") |
end |
self.highlight:ClearAllPoints() |
self.highlight:SetPoint("LEFT", self.hpp, -5, 0) |
self.highlight:SetPoint("RIGHT", self.level, 5, 0) |
self.highlight:SetPoint("TOP", self.name, 0, 5) |
self.highlight:SetPoint("BOTTOM", self.name, 0, -5) |
self.hover:ClearAllPoints() |
self.hover:SetPoint("LEFT", self.hpp, -5, 0) |
self.hover:SetPoint("RIGHT", self.level, 5, 0) |
self.hover:SetPoint("TOP", self.name, 0, 5) |
self.hover:SetPoint("BOTTOM", self.name, 0, -5) |
ColorHealthBar(self) |
ColorHealthBar(self.healthBar, self.healthBar:GetValue()) |
CheckMouseOver(self) |
CheckThreat(self) |
end |
local function HidePlate(self) |
-- Won't go on it's own |
self.highlight:Hide() |
self.hover:Hide() |
end |
local function CreatePlate(frame) |
if frame.skinned then return end |
frame.skinned = true |
frame.healthBar, frame.castBar = frame:GetChildren() |
local healthBar, castBar = frame.healthBar, frame.castBar |
local glowRegion, overlayRegion, castbarOverlay, shieldedRegion, spellIconRegion, highlightRegion, nameTextRegion, levelTextRegion, bossIconRegion, raidIconRegion, stateIconRegion = frame:GetRegions() |
-- Initial skinning |
local function SkinPlate(self) |
self.healthBar, self.castBar = self:GetChildren() |
local _aggro, border, hover, _name, level, boss, raidTarget, elite = self:GetRegions() |
self._aggro, self.hover, self._name, self.level, self.boss, self.elite = _aggro, hover, _name, level, boss, elite |
local _, cbBorder, cbShield, cbIcon = self.castBar:GetRegions() |
-- Name |
local name = frame:CreateFontString() |
name:SetPoint("CENTER") |
name:SetFontObject("NameplatesFontNormal") |
name:SetShadowOffset(1.25, -1.25) |
nameTextRegion:Hide() |
self.name = self:CreateFontString() |
self.name:SetPoint("CENTER") |
self.name:SetFontObject("NameplatesFontNormal") |
self.name:SetShadowOffset(1.25, -1.25) |
-- Health bar |
local healthBarBd = CreateFrame("Frame", nil, frame) |
healthBarBd:SetSize(13, 13) |
healthBarBd:SetPoint("RIGHT", name, "LEFT", -2, 0) |
healthBarBd:SetBackdrop({ |
self.healthBarBd = CreateFrame("Frame", nil, self) |
self.healthBarBd:SetSize(13, 13) |
self.healthBarBd:SetPoint("RIGHT", self.name, "LEFT", -2, 0) |
self.healthBarBd:SetBackdrop({ |
bgFile = media.background["Flat"], |
edgeFile = media.border["hankui: Nameplates"], |
edgeSize = 4, |
insets = { left = 2, right = 2, top = 2, bottom = 2 } |
}) |
healthBarBd:SetBackdropColor(unpack(colors["Background light"])) |
healthBarBd:SetFrameLevel(healthBar:GetFrameLevel() -1 > 0 and healthBar:GetFrameLevel() - 1 or 0) |
self.healthBarBd:SetBackdropColor(unpack(colors["Background light"])) |
self.healthBarBd:SetFrameLevel(self.healthBar:GetFrameLevel() -1 > 0 and self.healthBar:GetFrameLevel() - 1 or 0) |
healthBar:SetStatusBarTexture(media.background["Flat"]) |
healthBar:SetOrientation("VERTICAL") |
healthBar:SetBackdropColor(unpack(colors["Background light"])) |
self.healthBar:SetStatusBarTexture(media.background["Flat"]) |
self.healthBar:SetOrientation("VERTICAL") |
self.healthBar:SetBackdropColor(unpack(colors["Background light"])) |
self.healthBar:SetScript("OnValueChanged", ColorHealthBar) |
-- HP% |
local hpp = frame:CreateFontString() |
hpp:SetPoint("RIGHT", healthBarBd, "LEFT") |
hpp:SetFontObject("NameplatesFontSmall") |
hpp:SetShadowOffset(1.25, -1.25) |
self.hpp = self:CreateFontString() |
self.hpp:SetPoint("RIGHT", self.healthBarBd, "LEFT") |
self.hpp:SetFontObject("NameplatesFontSmall") |
self.hpp:SetShadowOffset(1.25, -1.25) |
-- Mouseover glow |
highlightRegion:SetTexture(media.background["hankui: Nameplates aggro"]) |
highlightRegion:SetVertexColor(unpack(colors["White"])) |
highlightRegion:SetBlendMode("ADD") |
highlightRegion:SetAlpha(0.1) |
self.hover:SetTexture(media.background["hankui: Nameplates aggro"]) |
self.hover:SetVertexColor(unpack(colors["White"])) |
self.hover:SetBlendMode("ADD") |
self.hover:SetAlpha(0.1) |
-- Aggro glow |
local glow = frame:CreateTexture(nil, "BACKGROUND", healthBarBd:GetFrameLevel() - 1) |
glow:SetTexture(media.background["hankui: Nameplates aggro"]) |
glow:SetVertexColor(unpack(colors["Red"])) |
glow:SetBlendMode("ADD") |
glow:SetTexCoord(0, 1, 0, 1) |
glow:SetPoint("LEFT", hpp, -5, 0) |
glow:SetPoint("RIGHT", levelTextRegion, 5, 0) |
glow:SetPoint("TOP", name, 0, 5) |
glow:SetPoint("BOTTOM", name, 0, -5) |
glow:SetAlpha(0.25) |
self.aggro = self:CreateTexture(nil, "BACKGROUND", self.healthBarBd:GetFrameLevel() - 1) |
self.aggro:SetTexture(media.background["hankui: Nameplates aggro"]) |
self.aggro:SetVertexColor(unpack(colors["Red"])) |
self.aggro:SetBlendMode("ADD") |
self.aggro:SetTexCoord(0, 1, 0, 1) |
self.aggro:SetPoint("LEFT", self.hpp, -5, 0) |
self.aggro:SetPoint("RIGHT", level, 5, 0) |
self.aggro:SetPoint("TOP", self.name, 0, 5) |
self.aggro:SetPoint("BOTTOM", self.name, 0, -5) |
self.aggro:SetAlpha(0.25) |
frame:RegisterEvent("PLAYER_TARGET_CHANGED") |
frame:RegisterEvent("UPDATE_MOUSEOVER_UNIT") |
frame:RegisterEvent("UNIT_THREAT_SITUATION_UPDATE") |
frame:HookScript("OnEvent", function(self, event, ...) |
-- Aggro / mouseover events |
self:RegisterEvent("PLAYER_TARGET_CHANGED") |
self:RegisterEvent("UPDATE_MOUSEOVER_UNIT") |
self:RegisterEvent("UNIT_THREAT_SITUATION_UPDATE") |
self:HookScript("OnEvent", function(self, event, ...) |
-- Improve responsiveness |
if event == "PLAYER_TARGET_CHANGED" or event == "UPDATE_MOUSEOVER_UNIT" then |
CheckMouseOver(self) |
CheckThreat(self) |
end |
end) |
-- Level |
levelTextRegion:ClearAllPoints() |
levelTextRegion:SetPoint("LEFT", name, "RIGHT", -1, -3) |
levelTextRegion:SetFontObject("NameplatesFontTiny") |
levelTextRegion:SetShadowOffset(1.25, -1.25) |
self.level:ClearAllPoints() |
self.level:SetPoint("LEFT", self.name, "RIGHT", -1, -3) |
self.level:SetFontObject("NameplatesFontTiny") |
self.level:SetShadowOffset(1.25, -1.25) |
-- Raid icon |
raidIconRegion:SetSize(16, 16) |
raidIconRegion:ClearAllPoints() |
raidIconRegion:SetPoint("LEFT", name, "RIGHT", 10, 0) |
raidIconRegion:SetTexture(media.misc["Raid icons"]) |
raidTarget:SetSize(16, 16) |
raidTarget:ClearAllPoints() |
raidTarget:SetPoint("LEFT", self.name, "RIGHT", 10, 0) |
raidTarget:SetTexture(media.misc["Raid icons"]) |
-- Spell icon |
spellIconRegion:ClearAllPoints() |
spellIconRegion:SetPoint("TOP", healthBar, "BOTTOM", 0, -5) |
spellIconRegion:SetTexCoord(0.08, 0.92, 0.08, 0.92) |
spellIconRegion:SetSize(7, 7) |
cbIcon:ClearAllPoints() |
cbIcon:SetPoint("TOP", self.healthBar, "BOTTOM", 0, -5) |
cbIcon:SetTexCoord(0.08, 0.92, 0.08, 0.92) |
cbIcon:SetSize(7, 7) |
local spellIcoBd = CreateFrame("Frame", nil, castBar) |
spellIcoBd:SetPoint("TOPLEFT", spellIconRegion, -2, 2) |
spellIcoBd:SetPoint("BOTTOMRIGHT", spellIconRegion, 2, -2) |
spellIcoBd:SetBackdrop({ |
local cbIconBd = CreateFrame("Frame", nil, self.castBar) |
cbIconBd:SetPoint("TOPLEFT", cbIcon, -2, 2) |
cbIconBd:SetPoint("BOTTOMRIGHT", cbIcon, 2, -2) |
cbIconBd:SetBackdrop({ |
bgFile = media.background["Flat"], |
edgeFile = media.border["hankui: Nameplates"], |
edgeSize = 4, |
insets = { left = 2, right = 2, top = 2, bottom = 2 } |
}) |
spellIcoBd:SetBackdropColor(unpack(colors["Background light"])) |
spellIcoBd:SetFrameLevel(castBar:GetFrameLevel() -1 > 0 and castBar:GetFrameLevel() - 1 or 0) |
cbIconBd:SetBackdropColor(unpack(colors["Background light"])) |
cbIconBd:SetFrameLevel(self.castBar:GetFrameLevel() -1 > 0 and self.castBar:GetFrameLevel() - 1 or 0) |
-- Cast timer |
local castTime = castBar:CreateFontString() |
castTime:SetPoint("TOP", spellIcoBd) |
castTime:SetPoint("BOTTOM", spellIcoBd) |
castTime:SetPoint("RIGHT", hpp) |
castTime:SetFontObject("NameplatesFontTiny") |
castTime:SetShadowOffset(1.25, -1.25) |
self.castBar.time = self.castBar:CreateFontString() |
self.castBar.time:SetPoint("TOP", cbIconBd) |
self.castBar.time:SetPoint("BOTTOM", cbIconBd) |
self.castBar.time:SetPoint("RIGHT", self.hpp) |
self.castBar.time:SetFontObject("NameplatesFontTiny") |
self.castBar.time:SetShadowOffset(1.25, -1.25) |
-- Spell |
local spellName = castBar:CreateFontString() |
spellName:SetPoint("TOP", spellIcoBd) |
spellName:SetPoint("BOTTOM", spellIcoBd) |
spellName:SetPoint("LEFT", name) |
spellName:SetPoint("RIGHT", levelTextRegion) |
self.castBar.name = self.castBar:CreateFontString() |
self.castBar.name:SetPoint("TOP", cbIconBd) |
self.castBar.name:SetPoint("BOTTOM", cbIconBd) |
self.castBar.name:SetPoint("LEFT", self.name) |
self.castBar.name:SetPoint("RIGHT", self.level) |
spellName:SetFontObject("NameplatesFontTiny") |
spellName:SetJustifyH("LEFT") |
spellName:SetShadowOffset(1.25, -1.25) |
self.castBar.name:SetFontObject("NameplatesFontTiny") |
self.castBar.name:SetJustifyH("LEFT") |
self.castBar.name:SetShadowOffset(1.25, -1.25) |
-- Set spell name / interruptible color |
castBar:RegisterEvent("UNIT_SPELLCAST_START") |
castBar:RegisterEvent("UNIT_SPELLCAST_CHANNEL_START") |
castBar:HookScript("OnEvent", function(self, event, ...) |
if (event == "UNIT_SPELLCAST_START" or event == "UNIT_SPELLCAST_CHANNEL_START") and ({...})[1] == "target" then |
self.channeling = event == "UNIT_SPELLCAST_CHANNEL_START" |
local spellInfo = self.channeling and UnitChannelInfo or UnitCastingInfo |
local interruptible = UnitCanAttack("player", "target") and select(select("#", spellInfo("target")), spellInfo("target")) |
spellName:SetTextColor(unpack(colors[interruptible and "Red" or "White"])) |
castTime:SetTextColor(unpack(colors[interruptible and "Red" or "White"])) |
spellName:SetText(({...})[2]) |
end |
end) |
-- Update cast time |
castBar:HookScript("OnValueChanged", function(self, value) |
castTime:SetText(("%.2fs"):format(self.channeling and value or select(2, self:GetMinMaxValues()) - value)) |
end) |
-- Update hp bar |
healthBar:HookScript("OnValueChanged", function(self, value) |
ColorHealthBar(frame) |
end) |
self.castBar:RegisterEvent("UNIT_SPELLCAST_START") |
self.castBar:RegisterEvent("UNIT_SPELLCAST_CHANNEL_START") |
self.castBar:HookScript("OnEvent", UpdateCastState) |
self.castBar:HookScript("OnValueChanged", UpdateCastTime) |
glowRegion:SetTexture(nil) |
overlayRegion:SetTexture(nil) |
shieldedRegion:SetTexture(nil) |
castbarOverlay:SetTexture(nil) |
stateIconRegion:SetTexture(nil) |
bossIconRegion:SetTexture(nil) |
castBar:SetStatusBarTexture(nil) |
frame.name = name |
frame.oldName = nameTextRegion |
frame.healthBarBd = healthBarBd |
frame.hpp = hpp |
frame.level = levelTextRegion |
frame.elite = stateIconRegion |
frame.boss = bossIconRegion |
frame.glow = glow |
frame.oldGlow = glowRegion |
frame.highlight = highlightRegion |
ShowPlate(frame) |
frame:SetScript("OnShow", ShowPlate) |
frame:SetScript("OnHide", HidePlate) |
-- Hide stuff |
self._aggro:SetTexture(nil) |
border:SetTexture(nil) |
self._name:Hide() |
self.boss:SetTexture(nil) |
self.elite:SetTexture(nil) |
self.castBar:SetStatusBarTexture(nil) |
cbBorder:SetTexture(nil) |
cbShield:SetTexture(nil) |
frame.elapsed = 0 |
frame:SetScript("OnUpdate", UpdatePlate) |
ShowPlate(self) |
self.elapsed = 0 |
self:SetScript("OnUpdate", UpdatePlate) |
self:SetScript("OnShow", ShowPlate) |
self:SetScript("OnHide", HidePlate) |
end |
-- Find out if a frame is a nameplate |
local IsValidFrame = function(frame) |
if frame:GetName() then return end |
local overlayRegion = select(2, frame:GetRegions()) |
return overlayRegion and overlayRegion:GetObjectType() == "Texture" and overlayRegion:GetTexture() == [[Interface\Tooltips\Nameplate-Border]] |
-- Scan for new plates |
local function Scan() |
for i = 1, WorldFrame:GetNumChildren() do |
local child = select(i, WorldFrame:GetChildren()) |
if child:GetName() and child:GetName():find("NamePlate%d+") and not child.name then |
SkinPlate(child) |
end |
end |
end |
local numKids = 0 |
local lastUpdate = 0 |
-- Search for nameplates |
f:SetScript("OnUpdate", function(self, elapsed) |
lastUpdate = lastUpdate + elapsed |
local dummy = CreateFrame("Frame") |
local totalElapsed, numChildren = 0, 0 |
if lastUpdate > 0.1 then |
lastUpdate = 0 |
local newNumKids = WorldFrame:GetNumChildren() |
if newNumKids ~= numKids then |
for i = numKids + 1, newNumKids do |
local frame = select(i, WorldFrame:GetChildren()) |
if IsValidFrame(frame) then |
CreatePlate(frame) |
end |
end |
numKids = newNumKids |
end |
dummy:SetScript("OnUpdate", function(self, elapsed) |
totalElapsed = totalElapsed + elapsed |
if totalElapsed > 0.1 and WorldFrame:GetNumChildren() ~= numChildren then |
Scan() |
end |
end) |
end |
MiniMapInstanceDifficultyText:SetFontObject("MinimapFontNormal") |
-- Instance guild difficulty |
GuildInstanceDifficulty:SetSize(64, 32) |
GuildInstanceDifficulty:ClearAllPoints() |
GuildInstanceDifficulty:SetPoint("TOPLEFT", MinimapBackdrop, -8, -12) |
-- GuildInstanceDifficultyBackground (BG) => Neu setzen |
GuildInstanceDifficultyBackground:SetTexture(media.misc["Ribbon"]) |
GuildInstanceDifficultyBackground:SetVertexColor(unpack(colors["Signature color"])) |
GuildInstanceDifficultyBackground.SetVertexColor = function() end |
GuildInstanceDifficultyBackground:ClearAllPoints() |
GuildInstanceDifficultyBackground:SetAllPoints() |
GuildInstanceDifficultyBackground:SetTexCoord(0, 1, 0, 1) |
--GuildInstanceDifficultyEmblem (Gilden Icon) => Verstecken oder anordnen |
GuildInstanceDifficultyEmblem:Hide() |
GuildInstanceDifficultyBorder:Hide() |
GuildInstanceDifficultyHanger:Hide() |
GuildInstanceDifficultyDarkBackground:Hide() |
--GuildInstanceDifficultyHeroicTexture (Hero Totenkopf) => Verstecken & Funktion überschreiben |
GuildInstanceDifficultyHeroicTexture:Hide() |
GuildInstanceDifficultyHeroicTexture.Hide = function(shown) |
GuildInstanceDifficultyText:SetText((GuildInstanceDifficultyText:GetText() or "") .. (shown and " (H)" or " (N)")) |
end |
GuildInstanceDifficultyHeroicTexture.Show = function() GuildInstanceDifficultyHeroicTexture.Hide(true) end |
--GuildInstanceDifficultyText (FontString) => Funktion überschreiben |
GuildInstanceDifficultyText:ClearAllPoints() |
GuildInstanceDifficultyText:SetPoint("TOPLEFT", 10, -6) |
GuildInstanceDifficultyText:SetFontObject("MinimapFontNormal") |
GuildInstanceDifficultyText.SetPoint = function() end |
GuildInstanceDifficultyText.ClearAllPoints = function() end |
-- Coordinates |
local coords = Minimap:CreateFontString() |
coords:SetFontObject("MinimapFontNormal") |
coordThrottle = coordThrottle + elapsed |
if coordThrottle > 0.2 then |
local x, y = GetPlayerMapPosition("player") |
coords:SetText(("%.1f, %.1f"):format(x * 100, y * 100)) |
coords:SetText(("%.1f|n%.1f"):format(x * 100, y * 100)) |
coordThrottle = 0 |
end |
end) |
MiniMapBin:SetAlpha(1) |
MiniMapTracking:SetAlpha(1) |
MiniMapMailFrame:SetAlpha(1) |
coords:SetAlpha(1) |
coords:Show() |
end |
local function mouseout() |
MiniMapBin:SetAlpha(0) |
MiniMapTracking:SetAlpha(0) |
MiniMapMailFrame:SetAlpha(0) |
coords:SetAlpha(0) |
coords:Hide() |
end |
end |
chatFrame.caption = UIParent:CreateFontString(nil, "OVERLAY") |
chatFrame.caption:SetAllPoints(chatTab) |
chatFrame.caption:SetFontObject("ChatTabFontNormal") |
chatFrame.caption:SetShadowOffset(1.25, -1.25) |
chatFrame.caption:SetShadowColor(unpack(colors["Background"])) |
if not chatTab:IsShown() then chatFrame.caption:Hide() end |
chatTab:SetScript("OnShow", function() chatFrame.caption:Show() end) |
chatTab:SetScript("OnHide", function() chatFrame.caption:Hide() end) |
_G[frame .. "EditBox" .. tex]:SetTexture(nil) |
end |
-- Editbox animation |
local editBoxAnimIn = editBox:CreateAnimationGroup() |
local fadeIn = editBoxAnimIn:CreateAnimation("Alpha") |
fadeIn:SetChange(1) |
fadeIn:SetDuration(1) |
fadeIn:SetSmoothing("IN_OUT") |
fadeIn:SetOrder(0) |
editBoxAnimIn:SetScript("OnFinished", function() editBox:SetAlpha(1) end) |
editBox:HookScript("OnHide", function() if editBoxAnimIn:IsPlaying() then editBoxAnimIn:Stop() end end) |
editBox:HookScript("OnShow", function() |
editBox:SetAlpha(0) |
editBoxAnimIn:Play() |
end) |
-- Copy button |
local copyFrame = CreateFrame("Frame", frame .. "Copypasta", chatFrame) |
copyFrame:SetSize(16, 16) |
{15, 1, "TOPRIGHT", "TOPRIGHT", -1, -1, 1, "horizontal"} |
} |
local tempColor = CreateColor(1, 1, 1) |
local dragButton |
local function UpdateButton(self, elapsed) |
local percent = self.timeLeft / self.durationMax |
-- THIS SO NEEDS SOME OPTIMIZATION!!! |
--[[for i = 1, 5 do |
for i = 1, 5 do |
local lowerBound, upperBound = i > 1 and statusbars[i - 1][7] or 0, statusbars[i][7] |
if percent > lowerBound and percent < upperBound then |
if self.filter == "HARMFUL" then |
elseif percent < lowerBound then |
self.statusbars[i]:Hide() |
end |
end]] |
end |
self.elapsed = 0 |
end |
local function CreateButton(name, index, filter) |
local button = _G[name .. index] |
if button and button:IsShown() then |
if _G[name .. index] and _G[name .. index]:IsShown() then |
-- Skin button |
local button = _G[name .. index] |
if not button.skinned then |
local icon, oldBorder = _G[name .. index .. "Icon"], _G[name .. index .. "Border"] |
error("Opacity must be a number 0 - 1.0") |
end |
tempColor = tempColor or CreateColor(1, 1, 1) |
if not tempColor then tempColor = CreateColor(1, 1, 1) end |
tempColor[1] = self[1] |
tempColor[2] = self[2] |
tempColor[3] = self[3] |
error("Opacity must be a number 0 - 1.0") |
end |
tempColor = tempColor or CreateColor(1, 1, 1) |
if not tempColor then tempColor = CreateColor(1, 1, 1) end |
tempColor[4] = self[4] |
if mode == "MULTIPLY" then |
error("Brightness must be a number -1.0 - 1.0") |
end |
tempColor = tempColor or CreateColor(1, 1, 1) |
if not tempColor then tempColor = CreateColor(1, 1, 1) end |
tempColor[1] = self[1] + brightness > 1 and 1 or (self[1] + brightness < 0 and 0 or self[1] + brightness) |
tempColor[2] = self[2] + brightness > 1 and 1 or (self[2] + brightness < 0 and 0 or self[2] + brightness) |
tempColor[3] = self[3] + brightness > 1 and 1 or (self[3] + brightness < 0 and 0 or self[3] + brightness) |
or (string.find(fonts.masterfont or "", "\\") ~= nil and fonts.masterfont or media.font[fonts.masterfont]) |
fontObject:SetFont(font, size or oldSize, flags or oldFlags) |
if color then fontObject:SetTextColor(unpack(color)) end |
if color then |
color = CreateColor(color) |
fontObject:SetTextColor(unpack(color)) |
end |
if shadowx and shadowy then fontObject:SetShadowOffset(shadowx, shadowy) end |
end |
--GameFontHighlight = {nil, nil, nil, colors["Signature color"]}, |
--GameFontHighlightSmall = {nil, nil, nil, colors["Signature color"]}, |
ErrorFont = {nil, 14, "OUTLINE"}, -- "Canal Crab 9/10", "Spell is not ready yet" etc. |
ZoneTextFont = {"DIN Pro Black"}, -- "Stormwind" |
SubZoneTextFont = {"DIN Pro Black", 26, "THICKOUTLINE"}, -- "Trade District" |
}, { |
-- Whenever a font is added to the collection immediately apply it |
__newindex = function(tbl, key, val) |
local font, size, flags = unpack(val) |
local font, size, flags, color, shadowx, shadowy = unpack(val) |
rawset(tbl, key, val) |
if not _G[key] then |
CreateFont(key) |
SetFont(_G[key], font, size or 12, flags or "") |
SetFont(_G[key], font, size or 12, flags or "", color, shadowx, shadowy) |
else |
SetFont(_G[key], font, size, flags) |
SetFont(_G[key], font, size, flags, color, shadowx, shadowy) |
end |
end |
}) |
## Interface: 40000 |
## Version: a0.3 |
## Interface: 40100 |
## Version: 0.17 |
## Title: |TInterface\AddOns\hankui\media\misc\logo.blp:14:42:0:0:128:32:0:96:0:32|t |
## Author: Hank |
## Notes: Hank's UI. Made of 100% genuine, pure |cFFff00f6aw|r|cFF00ff1ees|cFF00deffom|r|cFFff2929e.|r |
# Thanks go out to: Antiarc, cael, Elkano, haste, tekkub, zork |
elements\brokerbar.lua |
feeds\time.lua |
#feeds\durability.lua |
feeds\durability.lua |
feeds\money.lua |
#feeds\dps.lua |
hooks\skinner.lua |
- Observe taint log |
- local func = _G.func where it is really necessary (alot of OnUpdates e.g.) |
- Pretty animations: http://www.youtube.com/watch?v=6kskjJNWrWE |
- Some kind of memory hog still there (buffs.lua?) |
- Elements |
- Actionbars |
- Desaturate action button textures / SetVertexColor(SignatureColor) |
- Minimap |
- Hover animation *plop* |
- Minimap blips (also affects WatchFrame) |
- *Guild*InstanceDifficulty skin |
- Nameplates |
- Apply FixedSize() |
- Bug: Statusbar value ~= representation |
- Bug: Reaction update => No castbar fill update |
- Override SetVertexColor (?) |
- Chat |
- Minimized window |
- Tab font: SetShadow...() |
- Tab title: Alert color |
- Bug: arrow texture cropped (Tab3+ on GeneralDockManager) |
- Bug: (Chat copy) Invisible chat lines |
- Blizzard PowerAuras config / skin |
- Onebag, bank, gbank |
- Search |
- I like the Zune search box |
- Sort |
- Categories |
- Buffs |
- Fonts |
- Dig through all the ingame fonts |
- Clear conventions. When Din1451? When Tahoma Bold? |
- Skinner color font option => fonts.lua |
- Texture overrides |
- Solve loading order (Skinner) |
- Reskin? |
elseif GetPrimaryTalentTree() == 3 then |
return "hps" |
else |
for i = 7, 9 do |
for i = GLYPH_ID_PRIME_1, GLYPH_ID_PRIME_3 do |
local glyph = ({GetGlyphSocketInfo(i)})[4] |
-- Check for Glyph of Savage Roar / Shred / Tiger's Fury |
if glyph == 63055 or glyph == 54815 or glyph == 94390 then return "dps" end |
function object:OnTooltipShow() |
local durability = EquippedDurability() |
if durability == 1 then return end |
self:AddLine(("Durability: |c%s%d%%|r\n "):format(colors["Red"]:GetBlend(colors["Green"], durability):GetHex(), durability * 100)) |
for i = 1, 18 do |
-- Set up namespace |
setfenv(1, setmetatable(select(2, ...), { __index = _G })) |
-- Reload UI command |
_G.SLASH_RL1 = "/rl" |
function SlashCmdList.RL() |
ReloadUI() |
end |
local this = CreateFrame("Frame") |
this.eventCallbacks = {} |
this.addonCallbacks = {} |
function FixedScale(len) |
return 768 / GetScreenHeight() * len |
end |
-- Reload UI command |
_G.SLASH_RL1 = "/rl" |
function SlashCmdList.RL() |
ReloadUI() |
end |