vanilla-wow-addons – Rev 1
?pathlinks?
function XPerl_Message(msg)
DEFAULT_CHAT_FRAME:AddMessage(XPERL_MSG_PREFIX.."- "..msg)
end
function XPerl_SetupFrames()
local function ValidAlpha(alpha)
alpha = tonumber(alpha)
if (alpha < 0 or alpha > 1) then
alpha = 1
end
return alpha
end
local function ValidScale(scale)
scale = tonumber(scale)
if (scale < 0.5) then
scale = 0.5
elseif (scale > (XPerlConfig.MaximumScale or 1.5)) then
scale = (XPerlConfig.MaximumScale or 1.5)
end
return scale
end
XPerlConfigHelper.AssistsFrame_Transparency = ValidAlpha(XPerlConfigHelper.AssistsFrame_Transparency)
XPerl_Assists_Frame:SetAlpha(XPerlConfigHelper.AssistsFrame_Transparency)
XPerlConfigHelper.Targets_Transparency = ValidAlpha(XPerlConfigHelper.Targets_Transparency)
XPerl_Frame:SetAlpha(XPerlConfigHelper.Targets_Transparency)
XPerlConfigHelper.Scale_AssistsFrame = ValidScale(XPerlConfigHelper.Scale_AssistsFrame)
XPerl_Assists_Frame:SetScale(XPerlConfigHelper.Scale_AssistsFrame)
XPerlConfigHelper.Targets_Scale = ValidScale(XPerlConfigHelper.Targets_Scale)
XPerl_Frame:SetScale(XPerlConfigHelper.Targets_Scale)
-- Assist Counters
XPerl_SetupFrameSimple(XPerl_Frame, XPerlConfigHelper.Background_Transparency)
XPerl_SetupFrameSimple(XPerl_MTTargets)
XPerl_SetupFrameSimple(XPerl_OtherTargets)
XPerl_SetupFrameSimple(XPerl_Stats, XPerlConfigHelper.Background_Transparency)
XPerl_SetupFrameSimple(XPerl_Stats_List, XPerlConfigHelper.Background_Transparency)
XPerl_SetupFrameSimple(XPerl_Assists_Frame, XPerlConfigHelper.Assists_BackTransparency)
XPerlScrollSeperator:SetAlpha(XPerlConfigHelper.Assists_BackTransparency)
XPerl_SetupFrameSimple(XPerl_Threat)
XPerl_Frame_ToggleMTTargets:SetButtonTex()
XPerl_Frame_ToggleTargets:SetButtonTex()
XPerl_Frame_ExpandLock:SetButtonTex()
XPerl_Frame_ToggleLabels:SetButtonTex()
XPerl_Frame_ToggleShowMT:SetButtonTex()
XPerl_Frame_Pin:SetButtonTex()
if (XPerl_Player_TargettingFrame) then XPerl_Player_TargettingFrame:Show(); end
if (XPerl_Target_AssistFrame) then XPerl_Target_AssistFrame:Show(); end
if (XPerl_RegisterHighlight) then
XPerl_RegisterHighlight(XPerl_Player_TargettingFrame, 4)
XPerl_RegisterHighlight(XPerl_Target_AssistFrame, 4)
XPerl_RegisterPerlFrames(XPerl_Player_TargettingFrame)
XPerl_RegisterPerlFrames(XPerl_Target_AssistFrame)
end
end
-- XPerl_Slash
function XPerl_Slash(msg)
local commands = {}
for x in string.gfind(msg, "[^ ]+") do
tinsert(commands, string.lower(x))
end
local function SubCommandMatch(cmd, match)
return strsub(match, 1, strlen(cmd)) == cmd
end
local function setAlpha()
if (commands[2] and commands[3]) then
if (SubCommandMatch(commands[2], "raid")) then
XPerlConfigHelper.Targets_Transparency = commands[3]
return true
elseif (SubCommandMatch(commands[2], "assists")) then
XPerlConfigHelper.AssistsFrame_Transparency = commands[3]
return true
end
end
end
local function setScale()
if (commands[2] and commands[3]) then
if (SubCommandMatch(commands[2], "raid")) then
XPerlConfigHelper.Targets_Scale = commands[3]
return true
elseif (SubCommandMatch(commands[2], "assists")) then
XPerlConfigHelper.Scale_AssistsFrame = commands[3]
return true
elseif (SubCommandMatch(commands[2], "other")) then
XPerlConfigHelper.OtherTargets_Scale = commands[3]
return true
end
end
end
local options = {
{"ma", XPerl_SetMainAssist},
{"assists", XPerl_AssistsView_Open, "Open Assists View"},
{"raid", XPerl_RaidHelp_Show, "Open Raid Helper"},
{"alpha", setAlpha, "Set Alpha Level"},
{"scale", setScale, "Set Frame Scale"},
{"labels", XPerl_Toggle_ToggleLabels, "Toggle Tank Labels"},
{"ctra", XPerl_Toggle_UseCTRATargets, "Toggle Use of CTRA MT Targets"},
{"othertargets",XPerl_Toggle_OtherTargets, "Toggle display of other mob's targets"},
{"find", XPerl_SetFind},
}
local foundFunc
local foundDesc
if (commands[1]) then
local smallest = 100
local len = strlen(commands[1])
if (len) then
for i,entry in options do
if (strsub(entry[1], 1, len) == commands[1]) then
if (foundFunc) then
XPerl_Message("Ambiguous command, failed.")
foundFunc = nil
break
end
foundFunc = entry[2]
foundDesc = entry[3]
end
end
end
end
if (foundFunc) then
if (foundFunc(msg, commands[2], commands[3], commands[4])) then
XPerl_SetupFrames()
if (foundDesc) then
XPerl_Message(foundDesc.." - |c0000C020done!|r")
end
return
end
end
XPerl_Message("Options: /xp [|c00FFFF00find|r] [|c00FFFF00assists|r] [|c00FFFF00raid|r] [|c00FFFF00labels|r] [|c00FFFF00alpha|r raid|assists] [|c00FFFF00scale|r raid|assists|other] [|c00FFFF00ctra|r] [|c00FFFF00othertargets|r]")
end
function XPerl_OnLoad()
XPerl_Frame:RegisterEvent("VARIABLES_LOADED")
XPerl_Frame:RegisterEvent("RAID_ROSTER_UPDATE")
SlashCmdList["XPERLHELPER"] = XPerl_Slash
SLASH_XPERLHELPER1 = "/xp"
end
local function DefaultVar(name, value)
if (XPerlConfigHelper[name] == nil or (type(value) ~= type(XPerlConfigHelper[name]))) then
XPerlConfigHelper[name] = value
end
end
local function XPerl_Defaults()
DefaultVar("RaidHelper", 1)
DefaultVar("UnitWidth", 100)
DefaultVar("UnitHeight", 26)
DefaultVar("UseCTRATargets", 1)
DefaultVar("ExpandLock", 0)
DefaultVar("ShowMT", 1)
DefaultVar("MTLabels", 0)
DefaultVar("MTTargetTargets", 1)
DefaultVar("CollectOtherTargets", 1)
DefaultVar("OtherTargetTargets", 1)
DefaultVar("Targets_Scale", 1)
DefaultVar("OtherTargets_Scale", 1)
DefaultVar("Targets_Transparency", 0.8)
DefaultVar("Background_Transparency", 1)
DefaultVar("ThreatBar", 1)
DefaultVar("Tooltips", 0)
DefaultVar("MaxMainTanks", 10)
DefaultVar("TargetCounters", 1)
DefaultVar("TargetCountersSelf", 1)
DefaultVar("TargetCountersEnemy", 1)
DefaultVar("AssistsFrame", 1)
DefaultVar("TargettingFrame", 1)
DefaultVar("Scale_AssistsFrame", 1)
DefaultVar("AssistsFrame_Transparency", 0.8)
DefaultVar("Assists_BackTransparency", 1)
DefaultVar("BorderColour", {r = 0.5, g = 0.5, b = 0.5, a = 1})
DefaultVar("BackgroundColour", {r = 0, g = 0, b = 0, a = 1})
end
local XPerl_Old_KLHTM_Redraw = nil
function XPerl_KLHTM_Redraw(forceRedraw)
XPerl_Old_KLHTM_Redraw(forceRedraw)
if (XPerlConfigHelper.ThreatBar == 1) then
XPerl_UpdateThreat()
end
end
-- XPerl_Startup
-- Called after VARIABLES_LOADED
function XPerl_Startup()
if (not XPerlConfigHelper) then
XPerlConfigHelper = {}
end
XPerl_Defaults()
XPerl_StartAssists()
if (KLHTM_Redraw and KLHTM_GetRaidData) then
if (KLHTM_Redraw ~= XPerl_KLHTM_Redraw) then
XPerl_Old_KLHTM_Redraw = KLHTM_Redraw
KLHTM_Redraw = XPerl_KLHTM_Redraw
end
else
XPerl_UpdateThreat = nil
end
XPerl_SetupFrames()
XPerlAssistPin:SetButtonTex()
XPerl_Frame_Pin:SetButtonTex()
end
if (not XPerl_SetSmoothBarColor) then
XPerl_SetSmoothBarColor = function(bar, percentage)
if (bar) then
local r, g, b
if (XPerlConfig.ClassicHealthBar == 1) then
if (percentage < 0.5) then
r = 1
g = 2*percentage
b = 0
else
g = 1
r = 2*(1 - percentage)
b = 0
end
else
r = XPerlConfig.ColourHealthEmpty.r + ((XPerlConfig.ColourHealthFull.r - XPerlConfig.ColourHealthEmpty.r) * percentage)
g = XPerlConfig.ColourHealthEmpty.g + ((XPerlConfig.ColourHealthFull.g - XPerlConfig.ColourHealthEmpty.g) * percentage)
b = XPerlConfig.ColourHealthEmpty.b + ((XPerlConfig.ColourHealthFull.b - XPerlConfig.ColourHealthEmpty.b) * percentage)
end
if (r >= 0 and g >= 0 and b >= 0 and r <= 1 and g <= 1 and b <= 1) then
bar:SetStatusBarColor(r, g, b)
local backBar = getglobal(bar:GetName().."BG")
if (backBar) then
backBar:SetVertexColor(r, g, b, 0.25)
end
end
end
end
end
if (not XPerl_SetUnitNameColor) then
XPerl_SetUnitNameColor = function(argUnit,argFrame)
local r, g, b = 0.5, 0.5, 1
if (UnitPlayerControlled(argUnit) or not UnitIsVisible(argUnit)) then
local _, class = UnitClass(argUnit)
r, g, b = XPerl_GetClassColour(class)
else
if (UnitIsTapped(argUnit) and not UnitIsTappedByPlayer(argUnit)) then
r, g, b = 0.5, 0.5, 0.5
else
local reaction = UnitReaction(argUnit, "player")
if (reaction) then
if (reaction >= 5) then
r, g, b = 0, 1, 0
elseif (reaction <= 2) then
r, g, b = 1, 0, 0
elseif (reaction == 3) then
r, g, b = 1, 0.5, 0
else
r, g, b = 1, 1, 0
end
else
if (UnitFactionGroup("player") == UnitFactionGroup(argUnit)) then
r, g, b = 0, 1, 0
elseif (UnitIsEnemy("player", argUnit)) then
r, g, b = 1, 0, 0
else
r, g, b = 1, 1, 0
end
end
end
end
argFrame:SetTextColor(r, g, b)
end
end
-- Perl UnitFrame function copies:
if (not XPerl_ColourFriendlyUnit) then
XPerl_ColourFriendlyUnit = function(frame, partyid)
if (UnitCanAttack("player", partyid) and UnitIsEnemy("player", partyid)) then -- For dueling
frame:SetTextColor(1, 0, 0)
else
if (not XPerlConfig or XPerlConfig.ClassColouredNames == 1) then
local _, engClass = UnitClass(partyid)
local color = XPerl_GetClassColour(engClass)
frame:SetTextColor(color.r, color.g, color.b)
else
if (UnitIsPVP(partyid)) then
frame:SetTextColor(0, 1, 0)
else
frame:SetTextColor(0.5, 0.5, 1)
end
end
end
end
end
if (not XPerl_GetClassColour) then
XPerl_GetClassColour = function(class)
if (class) then
local color = RAID_CLASS_COLORS[class]; -- Now using the WoW class color table
if (color) then
return color
end
end
return {r = 0.5, g = 0.5, b = 1}
end
end