vanilla-wow-addons – Rev 1
?pathlinks?
------------------------------------------------------------------------------
-- Utility library for SmartAssist
------------------------------------------------------------------------------
-- table.getn is basicly this but it doesn't work on all lists/maps ?
function SA_TableSize(t)
size = 0;
for k,v in t do
size = size + 1;
end
return size;
end
function SA_TableIndex(tbl, value)
for k,v in tbl do
if (v==value) then
return k
end
end
return -1
end
function SA_GetAccountID()
return UnitName("player").." of "..GetCVar("realmName");
end
------------------------------------------------------------------------------
-- Message methods
------------------------------------------------------------------------------
function SA_Verbose(message, color)
local color = color or COLOR_DEFAULT;
if (SCT_Display) then
SCT_Display(message, color);
else
DEFAULT_CHAT_FRAME:AddMessage(message, color.r, color.g, color.b);
end
end
function printInfo(message)
DEFAULT_CHAT_FRAME:AddMessage(message, 0, 0.8, 1);
end
------------------------------------------------------------------------------
-- Debug methods
------------------------------------------------------------------------------
function SA_Debug(message, level)
local level = level or 5;
if (SA_OPTIONS.DebugLevel >= level) then
DEFAULT_CHAT_FRAME:AddMessage(message, 0, 0.8, 1);
end
end
function SA_DebugCandidates(candidates)
for k,c in candidates do
if (c==nil) then
SA_Debug("THERE IS NIL VALUE ON ARRAY!", 1);
end
SA_DebugCandidate(c);
end
end
function SA_DebugCandidate(c)
SA_Debug("candidate name="..tostring(c.unitName).." | id="..tostring(c.unitId).." | health="..tostring(c.health).." | class="..tostring(c.class).." | pet="..tostring(c.pet), 1);
end
function SA_DebugTable(t)
SA_Debug("table length: "..SA_TableSize(t));
for k,v in t do
SA_Debug("table: key="..k.." value="..tostring(v), 1);
end
end
------------------------------------------------------------------------------
-- Is the target valid for targetting
------------------------------------------------------------------------------
function isValidTarget(unit)
if (UnitExists(unit)) then
-- Don't target dead units
if (UnitIsDead(unit)) then
--SA_Debug("Dead, not targeting "..SA_TargetInfo(unit));
return false;
end
-- Don't target friendlies
if (UnitIsFriend(unit, "player")) then
--SA_Debug("Friendly, not targeting "..SA_TargetInfo(unit));
return false;
end
-- Don't target if we can't attack it
if (not UnitCanAttack(unit, "player")) then
SA_Debug("Can't attack, not targeting "..tostring(UnitName(unit)));
return false;
end
-- Don't target CCd mobs
if (isUnitCC(unit)) then
SA_Debug("CCd, not targeting "..tostring(UnitName(unit)));
return false;
end
else
return false;
end
return true;
end
-----------------------------------------------------------------------------------------
-- Check if the targeted unit has any CC methods applied to it (seduce, charm, polymorph)
-- return true if the unit is CCd
-- basic idea taken from pet leash. I've added many more spells to the list tough :)
-----------------------------------------------------------------------------------------
function isUnitCC(unit)
for i = 1, 20 do
if (UnitDebuff(unit,i)) then
currentDebuff = UnitDebuff(unit,i)
--SA_Debug("currentDebuff "..currentDebuff);
if (currentDebuff == "Interface\\Icons\\Spell_Shadow_Possession") then
SA_Debug("-- Possessed, not valid "..tostring(UnitName(unit)));
return true;
end
-- TODO: report that charmed detection doesn't work!
if (currentDebuff == "Interface\\Icons\\Spell_Shadow_Charm") then
SA_Debug("-- Charmed, not valid "..tostring(UnitName(unit)));
return true;
end
if (currentDebuff == "Interface\\Icons\\Spell_Nature_Polymorph") then
SA_Debug("-- Polymorphed, not valid "..tostring(UnitName(unit)));
return true;
end
-- not sure if this is ingame, nevertheless file exists
if (currentDebuff == "Interface\\Icons\\Spell_Magic_PolymorphChicken") then
SA_Debug("-- Polymorphed, not valid "..tostring(UnitName(unit)));
return true;
end
if (currentDebuff == "Interface\\Icons\\Spell_Magic_PolymorphPig") then
SA_Debug("-- Polymorphed, not valid "..tostring(UnitName(unit)));
return true;
end
if (currentDebuff == "Interface\\Icons\\Spell_Frost_ChainsOfIce") then
SA_Debug("-- Ice trapped, not valid "..tostring(UnitName(unit)));
return true;
end
if (currentDebuff == "Interface\\Icons\\Spell_Nature_Slow") then
SA_Debug("-- Shackle Undead, not valid "..tostring(UnitName(unit)));
return true;
end
if (currentDebuff == "Interface\\Icons\\Spell_Nature_Sleep") then
SA_Debug("-- Sleeped, not valid "..tostring(UnitName(unit)));
return true;
end
if (currentDebuff == "Interface\\Icons\\Ability_Sap") then
SA_Debug("-- Sapped, not valid "..tostring(UnitName(unit)));
return true;
end
if (currentDebuff == "Interface\\Icons\\Spell_Shadow_Cripple") then
SA_Debug("-- Banished, not valid "..tostring(UnitName(unit)));
return true;
end
else
-- no more debuffs on unit, stop the loop
break;
end
end
return false;
end
------------------------------------------------------------------------------
-- return true if unit is marked with hunter's mark
------------------------------------------------------------------------------
function SA_IsMarked(unit)
for i = 1, 20 do
if (UnitDebuff(unit, i)) then
currentDebuff = UnitDebuff(unit,i)
if (currentDebuff == "Interface\\Icons\\Ability_Hunter_SniperShot") then return true; end
else
-- no more debuffs on unit, stop the loop
break;
end
end
return false;
end
------------------------------------------------------------------------------
-- return true if unitName is tank (in smartassist or in ct raidassist)
------------------------------------------------------------------------------
function SA_IsTank(unitName)
if (unitName == SA_OPTIONS.puller) then return true; end;
if (CT_RA_MainTanks) then
for _,v in CT_RA_MainTanks do
if (unitName == v) then return true; end
end
end
return false;
end
------------------------------------------------------------------------------
-- Convert RGB values to text color values
------------------------------------------------------------------------------
function SA_ToTextCol(r,g,b)
return string.lower("|cff"..string.format("%.2X",255*r)..string.format("%.2X",255*g)..string.format("%.2X",255*b));
end