vanilla-wow-addons – Rev 1
?pathlinks?
--
-- ZubanLib Library Functions
-- Version: 0.1.2
-- Author: Zuban (chumpnet@hotmail.com)
--
ZubanLib = {
Const = {
Texture = {
HAWK = "Interface\\Icons\\Spell_Nature_RavenForm";
MONKEY = "Interface\\Icons\\Ability_Hunter_AspectOfTheMonkey";
CHEETAH = "Interface\\Icons\\Ability_Mount_JungleTiger";
};
};
-- action bar
Action = {
BAG_VALUE = -2;
NUM_SLOTS = 120;
};
-- paper doll
Inventory = {
BAG_VALUE = -1;
NUM_SLOTS = 18;
};
-- bags
Container = {};
-- spellbook
Spell = {};
-- buffs
Buff = {};
-- write
IO = {
Chat = {};
Screen = {};
};
-- stores extra cursor values
Cursor = {};
};
--
-- Util functions
--
--
-- http://lua-users.org/wiki/RetiredLuaFaq
--
function ZubanLib.Clone(t) -- return a copy of the table t
local new = {}; -- create a new table
local i, v = next(t, nil); -- i is an index of t, v = t[i]
while i do
if (type(v) == "table") then
v = ZubanLib.Clone(v);
end
new[i] = v;
i, v = next(t, i); -- get next index
end
return new;
end
function ZubanLib.IsBoolean(value)
return (value == true or value == false);
end
function ZubanLib.ToString(value)
if (value == nil) then
return "nil";
elseif (ZubanLib.IsBoolean(value)) then
if (value) then
return "true";
else
return "false";
end
else
return value;
end
end
function ZubanLib.InCombat()
if (MGplayer ~= nil) then
-- compatibility with MiniGroup addon created by Kaitlin
return MGplayer.inCombat;
elseif (PlayerFrame ~= nil) then
return PlayerFrame.inCombat;
else
return nil;
end
end
function ZubanLib.SetScale(frame, scale)
return frame:SetScale(UIParent:GetScale() * scale);
end
--
-- Action functions
--
function ZubanLib.Action.GoToPage(page)
page = tonumber(page);
if (page > 0) then
if (CURRENT_ACTIONBAR_PAGE ~= page) then
CURRENT_ACTIONBAR_PAGE = page;
ChangeActionBarPage();
end
end
end
function ZubanLib.Action.FindSlotByName(name, rank)
local textName, textRank;
for slot = 1, ZubanLib.Action.NUM_SLOTS do
GameTooltip:SetAction(slot);
textName = GameTooltipTextLeft1:GetText();
textRank = GameTooltipTextRight1:GetText();
if (textName == name and (rank == nil or rank == "" or textRank == rank)) then
return slot;
end
end
return nil;
end
function ZubanLib.Action.FindSlotByTexture(name)
local count, text, texture;
for slot = 1, ZubanLib.Action.NUM_SLOTS do
count = GetActionCount(slot);
text = GetActionText(slot);
texture = GetActionTexture(slot);
if (count == 0 and text == nil and texture == name) then
return slot;
end
end
return nil;
end
--
-- Inventory functions
--
function ZubanLib.Inventory.FindSlotByName(name)
local itemName;
for slot = 1, ZubanLib.Inventory.NUM_SLOTS do
itemName = GetInventoryItemName(slot);
if(itemName == name) then
return slot;
end
end
return nil;
end
--
-- Container functions
--
function ZubanLib.Container.FindBagSlotByName(name)
local itemLink;
for bag = 0, NUM_BAG_FRAMES do
for slot = 1, GetContainerNumSlots(bag) do
itemLink = GetContainerItemLink(bag, slot);
if (itemLink) then
--ZubanLib.IO.Chat.Write(itemLink);
if (itemLink == name) then
return bag, slot;
end
end
end
end
return nil, nil;
end
function ZubanLib.Container.CountByName(name)
local total = 0;
local itemLink;
local itemcount;
for bag = 0, NUM_BAG_FRAMES do
for slot = 1, GetContainerNumSlots(bag) do
itemLink = GetContainerItemLink(bag, slot);
if (itemLink ~= nil) then
local _,_,itemLink = string.find(itemLink, "^.*%[(.*)%].*$");
local _,_,name = string.find(name, "^.*%[(.*)%].*$");
if (itemLink == name) then
_, itemcount = GetContainerItemInfo(bag, slot);
total = total + itemcount;
end
end
end
end
return total;
end
function ZubanLib.FindBagSlotByName(name)
local slot = ZubanLib.Inventory.FindSlotByName(name);
if (slot) then
return ZubanLib.Inventory.BAG_VALUE, slot;
else
return ZubanLib.Container.FindSlotByName(name);
end
end
--
-- spellbook functions
--
function ZubanLib.Spell.FindIDByName(name, subName, bookType)
local numSkillLineTabs = GetNumSpellTabs();
local tabName, texture, offset, numSpells;
local skillLineTab;
local spellName, subSpellName;
if (not bookType) then
bookType = BOOKTYPE_SPELL;
end
for i = 1, numSkillLineTabs do
tabName, texture, offset, numSpells = GetSpellTabInfo(i);
for id = offset + 1, offset + numSpells do
spellName, subSpellName = GetSpellName(id, bookType);
--ZubanLib.IO.Chat.Write(id.." "..spellName.." "..subSpellName.." "..name);
if (spellName == name and (not subName or subName == subSpellName)) then
return id;
end
end
end
return nil;
end
function ZubanLib.Spell.CastSpellByName(name, subName, bookType)
if (not bookType) then
bookType = BOOKTYPE_SPELL;
end
local id = ZubanLib.Spell.FindIDByName(name, subName, bookType);
if (id) then
return CastSpell(id, bookType);
end
end
function ZubanLib.Buff.FindIDByTexture(name, unit)
if (not unit) then
unit = "player";
end
local id = 1;
local buff = UnitBuff(unit, id);
while (buff) do
if (buff == name) then
return id;
end
id = id + 1;
buff = UnitBuff(unit, id);
end
return nil;
end
--
-- output functions
--
function ZubanLib.IO.Chat.Warn(message)
ZubanLib.IO.Chat.Write(message, 1, 0.2, 0.2);
end
function ZubanLib.IO.Chat.Write(message, red, green, blue, frame)
if (not red) then
red = 1;
end
if (not green) then
green = 1;
end
if (not blue) then
blue = 1;
end
if (frame) then
frame:AddMessage(message, red, green, blue, 1.0, UIERRORS_HOLD_TIME);
elseif (DEFAULT_CHAT_FRAME) then
DEFAULT_CHAT_FRAME:AddMessage(message, red, green, blue);
end
end
function ZubanLib.IO.Screen.Warn(message)
ZubanLib.IO.Screen.Write(message, 1, 0.2, 0.2);
end
function ZubanLib.IO.Screen.Write(message, red, green, blue)
ZubanLib.IO.Chat.Write(message, red, green, blue, UIErrorsFrame);
end
--
-- cursor object
--
local BasePickupContainer = PickupContainerItem;
function PickupContainerItem(bag, slot)
local result = BasePickupContainer(bag, slot);
if (CursorHasItem()) then
ZubanLib.Cursor:PickupContainerItem(bag, slot);
end
return result;
end
local BasePickupAction = PickupAction;
function PickupAction(slot)
ZubanLib.Cursor:PickupAction(slot);
return BasePickupAction(slot);
end
local BasePickupSpell = PickupSpell;
function PickupSpell(id, bookType)
local result = BasePickupSpell(id, bookType);
if (CursorHasSpell()) then
ZubanLib.Cursor:PickupSpell(id, bookType);
end
return result;
end
function ZubanLib.Cursor:PickupContainerItem(bag, slot)
local link = GetContainerItemLink(bag, slot);
local texture, itemcount, locked, quality, readable = GetContainerItemInfo(bag, slot);
self.Attributes = {};
self.Attributes.Location = "Container";
self.Attributes.Name = link;
self.Attributes.Bag = bag;
self.Attributes.Slot = slot;
self.Attributes.Texture = texture;
self.Attributes.Count = itemcount;
self.Attributes.Locked = locked;
self.Attributes.Quality = quality;
self.Attributes.Readable = readable;
--self:Write();
end
function ZubanLib.Cursor:PickupAction(slot)
local count = GetActionCount(slot);
local text = GetActionText(slot);
local texture = GetActionTexture(slot);
self.Attributes = {};
self.Attributes.Location = "Action";
self.Attributes.Slot = slot;
self.Attributes.Count = count;
self.Attributes.Text = text;
self.Attributes.Texture = texture;
if (GameTooltip ~= nil) then
GameTooltipTextLeft1:SetText("");
GameTooltipTextRight1:SetText(""); -- clear the rank
GameTooltip:SetAction(slot);
local name = GameTooltipTextLeft1:GetText();
local rank = GameTooltipTextRight1:GetText();
self.Attributes.Name = name;
self.Attributes.Rank = rank;
--[[
local lines = GameTooltip:NumLines();
self.Attributes.Lines = lines;
for i = 1, lines do
textLeft = getglobal("GameTooltipTextLeft"..i);
if (textLeft ~= nil) then
self.Attributes["Left"..i] = textLeft:GetText();
end
textRight = getglobal("GameTooltipTextRight"..i);
if (textRight ~= nil) then
self.Attributes["Right"..i] = textRight:GetText();
end
end
]]
end
--self:Write();
end
function ZubanLib.Cursor:PickupSpell(id, bookType)
local name, rank = GetSpellName(id, bookType);
local texture = GetSpellTexture(id, bookType);
--local start, duration, enable = GetSpellCooldown (id, bookType);
--local passive = IsSpellPassive(id, bookType);
self.Attributes = {};
self.Attributes.Location = "Spell";
self.Attributes.ID = id;
self.Attributes.BookType = bookType;
self.Attributes.Name = name;
self.Attributes.Rank = rank;
self.Attributes.Texture = texture;
--self.Attributes.Start = start;
--self.Attributes.Duration = duration;
--self.Attributes.Enable = enable;
--self.Attributes.Passive = passive;
--self:Write();
end
function ZubanLib.Cursor:Clear()
self.Attributes = {};
end
function ZubanLib.Cursor.WriteAttribute(key, value)
ZubanLib.IO.Chat.Write(ToString(key)..": "..ToString(value));
end
function ZubanLib.Cursor:Write()
if (self.Attributes ~= nil) then
table.foreach(self.Attributes, ZubanLib.Cursor.WriteAttribute);
end
end