vanilla-wow-addons – Rev 1
?pathlinks?
----------------------
-- Loading Function --
----------------------
local myClass
-- XPerl_SetFrameSides
function XPerl_SetFrameSides()
if (XPerl_Assists_Frame.LastSetView and XPerl_Assists_Frame.LastSetView[1] == XPerlConfigHelper.AssistsFrame and XPerl_Assists_Frame.LastSetView[2] == XPerlConfigHelper.TargettingFrame) then
-- Frames the same from last time
return
end
if (XPerlConfigHelper.AssistsFrame == 1 or XPerlConfigHelper.TargettingFrame == 1) then
XPerl_Assists_Frame:Show()
XPerl_Target_Targetting_ScrollFrame:ClearAllPoints()
XPerl_Target_Assists_ScrollFrame:ClearAllPoints()
if (XPerlConfigHelper.AssistsFrame == 1 and XPerlConfigHelper.TargettingFrame == 1) then
XPerl_Target_Targetting_ScrollFrame:SetPoint("TOPLEFT", 4, -5)
XPerl_Target_Targetting_ScrollFrame:SetPoint("BOTTOMRIGHT", XPerl_Assists_Frame, "BOTTOM", -1, 5)
XPerl_Target_Targetting_ScrollFrame:Show()
XPerl_Target_Assists_ScrollFrame:SetPoint("TOPLEFT", XPerl_Assists_Frame, "TOP", 0, -5)
XPerl_Target_Assists_ScrollFrame:SetPoint("BOTTOMRIGHT", -4, 5)
XPerl_Target_Assists_ScrollFrame:Show()
XPerlScrollSeperator:Show()
XPerlScrollSeperator:ClearAllPoints()
XPerlScrollSeperator:SetPoint("TOPLEFT", XPerl_Target_Targetting_ScrollFrame, "TOPRIGHT", 0, 0)
XPerlScrollSeperator:SetPoint("BOTTOMRIGHT", XPerl_Target_Assists_ScrollFrame, "BOTTOMLEFT", 0, 0)
else
XPerlScrollSeperator:Hide()
if (XPerlConfigHelper.AssistsFrame == 1) then
XPerl_Target_Assists_ScrollFrame:SetPoint("TOPLEFT", 4, -5)
XPerl_Target_Assists_ScrollFrame:SetPoint("BOTTOMRIGHT", -4, 5)
XPerl_Target_Assists_ScrollFrame:Show()
XPerl_Target_Targetting_ScrollFrame:Hide()
else
XPerl_Target_Targetting_ScrollFrame:SetPoint("TOPLEFT", 4, -5)
XPerl_Target_Targetting_ScrollFrame:SetPoint("BOTTOMRIGHT", -4, 5)
XPerl_Target_Targetting_ScrollFrame:Show()
XPerl_Target_Assists_ScrollFrame:Hide()
end
end
else
XPerl_Assists_Frame:Hide()
end
XPerl_Assists_Frame.LastSetView = {XPerlConfigHelper.AssistsFrame, XPerlConfigHelper.TargettingFrame}
end
-- ToggleAssistsFrame()
function XPerl_ToggleAssistsFrame(param)
if (param == "assists") then
if (XPerlConfigHelper.AssistsFrame == 1) then
XPerlConfigHelper.AssistsFrame = 0
else
XPerlConfigHelper.AssistsFrame = 1
end
else
if (XPerlConfigHelper.TargettingFrame == 1) then
XPerlConfigHelper.TargettingFrame = 0
else
XPerlConfigHelper.TargettingFrame = 1
end
end
end
-- XPerl_AssistsView_Close
function XPerl_AssistsView_Open()
XPerlConfigHelper.AssistsFrame = 1
XPerlConfigHelper.TargettingFrame = 1
XPerl_SetFrameSides()
return true
end
function XPerl_AssistsView_Close()
XPerlConfigHelper.AssistsFrame = 0
XPerlConfigHelper.TargettingFrame = 0
XPerl_SetFrameSides()
end
-- SortByClass(t1, t2)
local function SortByClass(t1, t2)
if (t1[2] == t2[2]) then
return t1[1] < t2[1]
else
local t1c = t1[2]
local t2c = t2[2]
if (t1c == myClass) then
t1c = "A"..t1c
elseif (t1c ~= "") then
t1c = "B"..t1c
else
t1c = "Z"
end
if (t2c == myClass) then
t2c = "A"..t2c
elseif (t2c ~= "") then
t2c = "B"..t2c
else
t1c = "Z"
end
return t1c..t1[1] < t2c..t2[1]
end
end
-- XPerl_MakeAssistsString
function XPerl_MakeAssistsString(List, title)
local text = title
if (List ~= nil) then
local lastClass
local any = false
local nAssists = getn(List)
if (nAssists > 0) then
text = text.." "..nAssists
end
text = text.."\13"
sort(List, SortByClass)
for i,unit in pairs(List) do
if (not any) then
if (unit[2] == "") then
text = text.."|c00FF0000"..unit[1]
else
text = text..XPerlColourTable[unit[2]]..unit[1]
end
lastClass, any = unit[2], true
else
if (lastClass) then
if (unit[2] == "" or lastClass ~= unit[2]) then
lastClass = unit[2]
if (unit[2] == "") then
text = text.."\r|c00FF0000"..unit[1]
else
text = text.."\r"..XPerlColourTable[unit[2]]..unit[1]
end
else
text = text.." "..unit[1]
end
else
text = text.." "..unit[1]
lastClass = unit[2]
end
end
end
end
return (text)
end
-- FillList
local function FillList(List, cFrame, title)
local text = XPerl_MakeAssistsString(List, title)
getglobal("XPerl_Target_Assists_ScrollChild_"..cFrame.."Text"):SetText(text)
end
-- XPerl_ShowAssists()
function XPerl_ShowAssists()
if (XPerlConfigHelper.AssistsFrame == 1 or XPerlConfigHelper.TargettingFrame == 1) then
if (XPerlConfigHelper.AssistsFrame == 1 and XPerl_Assists_Frame.assists ~= nil) then
FillList(XPerl_Assists_Frame.assists, "Assists", XPERL_TOOLTIP_ASSISTING)
end
if (XPerlConfigHelper.TargettingFrame == 1 and XPerl_Assists_Frame.targetting ~= nil) then
local title
if (getn(XPerl_Assists_Frame.targetting) > 0 and XPerl_Assists_Frame.targetting[1][2] == "") then
title = XPERL_TOOLTIP_ENEMYONME
else
if (XPerlConfigHelper.TargetCountersSelf == 0) then
title = XPERL_TOOLTIP_ALLONME
else
title = XPERL_TOOLTIP_HEALERS
end
end
FillList(XPerl_Assists_Frame.targetting, "Targetting", title)
end
end
end
-- XPerl_Assists_MouseDown
function XPerl_Assists_MouseDown(button,param)
if (button == "LeftButton") then
if (not XPerlConfigHelper or not XPerlConfigHelper.AssistPinned or (IsAltKeyDown() and IsControlKeyDown() and IsShiftKeyDown())) then
if (param and (param == "TOPLEFT" or param == "BOTTOMLEFT" or param == "BOTTOMRIGHT")) then
XPerl_Assists_Frame:StartSizing(param)
else
XPerl_Assists_Frame:StartMoving()
end
end
elseif (button == "RightButton") then
if (strfind (this:GetName(), "XPerl_Target_Assists_ScrollChild_Targetting")) then
param = "targetFrame"
end
if (param and param == "targetFrame") then
if (XPerlConfigHelper.TargetCountersSelf == 1) then
XPerlConfigHelper.TargetCountersSelf = 0
else
XPerlConfigHelper.TargetCountersSelf = 1
end
end
end
end
-- XPerl_Assists_MouseUp
function XPerl_Assists_MouseUp(button)
XPerl_Assists_Frame:StopMovingOrSizing()
end
-- Events
function XPerl_Assists_OnEvent()
if (event == "PLAYER_TARGET_CHANGED") then
XPerl_UpdateAssists()
XPerl_ShowAssists()
end
end
-- XPerl_Assists_OnUpdate
local UpdateTime = 0
function XPerl_Assists_OnUpdate()
UpdateTime = arg1 + UpdateTime
if (UpdateTime >= 0.2) then
XPerl_UpdateAssists()
XPerl_ShowAssists()
UpdateTime = 0
end
end
---------------------------------
-- Targetting counters --
---------------------------------
local assists
local targetting
-- XPerl_FoundEnemyBefore
local function XPerl_FoundEnemyBefore(FoundEnemy, name)
for previous in pairs(FoundEnemy) do
if (UnitIsUnit(previous.."target", name.."target")) then
return true
end
end
return false
end
-- XPerl_AddEnemy
local function XPerl_AddEnemy(anyEnemy, FoundEnemy, name)
if (UnitIsUnit("player", name.."targettarget")) then
if (not XPerl_FoundEnemyBefore(FoundEnemy, name)) then
FoundEnemy[name] = true
tinsert(targetting, {UnitName(name.."target"), ""})
return true
end
-- 1.8.3 Added check to see if mob is targetting our target, and add to that list
elseif (UnitIsUnit("target", name.."targettarget")) then
-- We can still use the FoundEnemy list, because it's not too important if
-- we're targetting ourself and the mob doesn't show on both self and target lists
if (not XPerl_FoundEnemyBefore(FoundEnemy, name)) then
FoundEnemy[name] = true
tinsert(assists, {UnitName(name.."target"), ""})
return true
end
end
return false
end
local HealerClasses = {PRIEST = true, SHAMAN = true, PALADIN = true, DRUID = true}
-- XPerl_UpdateAssists
function XPerl_UpdateAssists()
if (XPerlConfigHelper.TargetCounters == 0) then
if (XPerl_Target_AssistFrame) then XPerl_Target_AssistFrame:Hide(); end
if (XPerl_Player_TargettingFrame) then XPerl_Player_TargettingFrame:Hide(); end
return
end
local selfFlag = XPerlConfigHelper.TargetCountersSelf == 1
local enemyFlag = XPerlConfigHelper.TargetCountersEnemy == 1
local assistCount, targettingCount, anyEnemy = 0, 0, false
local start,i,total,prefix,name,petname,raidMembers
local FoundEnemy = {}
raidMembers = 0
if (UnitInRaid("player")) then
start, prefix, total = 1, "raid", GetNumRaidMembers()
else
start, prefix, total = 0, "party", 4
end
assists, targetting = {}, {}
XPerl_Assists_Frame.assists, XPerl_Assists_Frame.targetting = assists, targetting
local targetname = UnitName("target")
for i = start,total do
if (i == 0) then
name, petname = "player", "pet"
else
name, petname = prefix..i, prefix.."pet"..i
end
if (UnitExists(name) and not UnitIsDeadOrGhost(name)) then
local class, engClass = UnitClass(name)
raidMembers = raidMembers + 1
local hasPet = UnitExists(petname)
if (targetname) then
if (UnitIsUnit("target", name.."target")) then
assistCount = assistCount + 1
tinsert (assists, {UnitName(name), engClass})
end
if (hasPet and UnitIsUnit("target", petname.."target")) then
assistCount = assistCount + 1
tinsert (assists, {string.format(XPERL_TOOLTIP_PET, UnitName(name)), "pet"})
end
end
-- 0 for Anyone, 1 for Healers
if (not selfFlag or HealerClasses[engClass]) then
if (UnitIsUnit("player", name.."target")) then
targettingCount = targettingCount + 1
tinsert(targetting, {UnitName(name), engClass})
end
end
-- Count enemy targetting us?
if (enemyFlag) then
if (not UnitIsFriend("player", name.."target")) then
if (XPerl_AddEnemy(anyEnemy, FoundEnemy, name)) then
anyEnemy = true
targettingCount = targettingCount + 1
end
if (hasPet) then
if (XPerl_AddEnemy(anyEnemy, FoundEnemy, petname)) then
anyEnemy = true
targettingCount = targettingCount + 1
end
end
end
end
end
end
if (UnitExists("mouseover") and not UnitIsFriend("player", "mouseover")) then
if (UnitIsUnit("mouseovertarget", "player")) then
local foundBefore
for previous in pairs(FoundEnemy) do
if (UnitIsUnit(previous.."target", "mouseover")) then
foundBefore = true
end
end
if (not foundBefore) then
tinsert(targetting, {UnitName("mouseover"), ""})
anyEnemy = true
targettingCount = targettingCount + 1
end
end
end
if (XPerl_Player_TargettingFrame) then
local conf = XPerlConfig or XPerlConfigHelper
conf = conf.BorderColour
if (anyEnemy) then
XPerl_Player_TargettingFrame:SetBackdropBorderColor(1, 0.2, 0.2, conf.a)
else
XPerl_Player_TargettingFrame:SetBackdropBorderColor(conf.r, conf.g, conf.b, conf.a)
end
if (targettingCount == 0) then
XPerl_Player_TargettingFrame:SetTextColor(1,0.5,0.5)
elseif (targettingCount > 5) then
XPerl_Player_TargettingFrame:SetTextColor(0.5,1,0.5)
else
XPerl_Player_TargettingFrame:SetTextColor(0.5,0.5,1)
end
XPerl_Player_TargettingFrame:SetText(targettingCount)
XPerl_Player_TargettingFrame:Show()
end
if (XPerl_Target_AssistFrame) then
if (assistCount < 2) then
XPerl_Target_AssistFrame:SetTextColor(1,0.5,0.5)
elseif (assistCount > (raidMembers / 2)) then
XPerl_Target_AssistFrame:SetTextColor(0.5,1,0.5)
else
XPerl_Target_AssistFrame:SetTextColor(0.5,0.5,1)
end
if (targetname) then
XPerl_Target_AssistFrame:SetText(assistCount)
end
XPerl_Target_AssistFrame:Show()
end
end
-- XPerl_StartAssists
function XPerl_StartAssists()
local _
_, myClass = UnitClass("player")
if (not XPerlColourTable.pet) then
XPerlColourTable.pet = "|c008080FF"
end
XPerl_SetFrameSides()
end