vanilla-wow-addons – Rev 1
?pathlinks?
--[[
--
-- Sea.wow.item
--
-- Item related wow functions
--
-- $LastChangedBy: Sinaloit $
-- $Rev: 2025 $
-- $Date: 2005-07-02 18:51:34 -0500 (Sat, 02 Jul 2005) $
--]]
Sea.wow.item = {
--
-- getInventoryItemName( bag, slot )
--
-- Gets the name of the item in the specified bag/slot
--
-- Args:
-- (int bag, int slot)
-- bag - 0 through 8, the bag number
-- slot - index within the bag
--
-- Returns:
-- (string name)
-- name - the item's name
--
getInventoryItemName = function (bag, slot)
local name = "";
local strings = nil;
strings = Sea.wow.item.getInventoryItemInfoStrings(bag, slot, "GameTooltip");
-- Determine if the item is an ore, gem or herb
if ( strings[1] ) then
name = strings[1].left;
end
return name;
end;
--
-- classifyInventoryItem(bag, slot, TooltipNameBase)
--
-- Returns a great deal of useful information about an item.
--
-- Return:
-- Table[
-- .classification
-- .name
-- .quality
-- .count
-- .minLevel
-- .unique
-- .soulbound
-- .bindOnPickup
-- .bindOnEquip
-- .quest
-- ] itemInfo;
--
--
classifyInventoryItem = function (bag, slot, TooltipNameBase)
if ( TooltipNameBase == nil ) then
TooltipNameBase = "GameTooltip";
end
local strings = Sea.wow.item.getInventoryItemInfoStrings(bag, slot, TooltipNameBase);
local texture, itemCount, locked, quality = GetContainerItemInfo(bag,slot);
return Sea.wow.item.classifyItemStrings(strings, itemCount, quality);
end;
--
-- classifyItemStrings(strings, itemCount, quality)
--
-- Args:
--
-- strings - array of strings that mimic the tooltip of the item to classify
-- itemCount - optional number that indicates the number of items
-- quality - optional number that indicates the quality of the item
--
-- Returns a great deal of useful information about an item.
-- The tooltip strings must be gathered from the item, using the
-- getInventoryItemInfoStrings syntax.
--
--
-- Return:
-- Table[
-- .classification
-- .name
-- .quality
-- .count
-- .minLevel
-- .unique
-- .soulbound
-- .bindOnPickup
-- .bindOnEquip
-- .quest
-- ] itemInfo;
--
--
classifyItemStrings = function (strings, itemCount, quality)
if ( not itemCount ) then
itemCount = 1;
end
local classification = "Misc";
local leftString, rightString, minLevel;
local unique = false;
local soulbound = false;
local bindsOnPickup = false;
local bindsOnEquip = false;
local questItem = false;
local isHerb = false;
local isGem = false;
local isOre = false;
local isLeather = false;
local isTailor = false;
local isFishing = false;
local isFood = false;
local isDrink = false;
local isShaman = false;
local isPoison = false;
local isWarlock = false;
local isJunk = false;
local engineering = false;
local firstaid = false;
local classitem = false;
local class = "";
local name = "";
-- Look for the target line that identifies an item; it'll either be line 2, 3, or 4.
-- Determine if the item is an ore, gem or herb
if ( strings[1] ) then
name = strings[1].left;
end
isHerb = Sea.list.isWordInList(Sea.data.item.herb, name);
isGem = Sea.list.isWordInList(Sea.data.item.gem, name);
isOre = Sea.list.isWordInList(Sea.data.item.ore, name);
isLeather = Sea.list.isWordInList(Sea.data.item.leather, name);
isFishing = Sea.list.isWordInList(Sea.data.item.fishing, name);
isTailor = Sea.list.isWordInList(Sea.data.item.cloth, name);
isPotion = Sea.list.isWordInList(Sea.data.item.potion, name);
isMage = Sea.list.isWordInList(Sea.data.item.mage, name);
isFood = Sea.list.isWordInList(Sea.data.item.food, name);
isDrink = Sea.list.isWordInList(Sea.data.item.drink, name);
isShaman = Sea.list.isWordInList(Sea.data.item.shaman, name);
isPoison = Sea.list.isWordInList(Sea.data.item.poison, name);
isWarlock = Sea.list.isWordInList(Sea.data.item.warlock, name);
if ( ( quality ) and ( quality < 0 ) ) then
isJunk = true;
end
for i = 2, 5, 1 do
if (not strings[i])
then
break;
end
if (strings[i].left == ITEM_UNIQUE or strings[i].left == ITEM_UNIQUE_MULTIPLE ) then unique = true; end
if (strings[i].left == ITEM_SOULBOUND ) then soulbound = true; end
if (strings[i].left == ITEM_BIND_ON_PICKUP ) then bindsOnPickup = true; end
if (strings[i].left == ITEM_BIND_ON_EQUIP ) then bindsOnEquip = true; end
if (strings[i].left == ITEM_BIND_QUEST ) then questItem = true; end
if (string.find(strings[i].left,"First Aid", 0, true ) ) then firstaid = true; end
if (string.find(strings[i].left,"Engineering", 0, true ) ) then engineering = true; end
if (string.find(strings[i].left,"Classes:", 0, true ) ) then classitem = true; class = string.sub(strings[i].left, string.find(strings[i].left,":", 0, true )+2); end
if (strings[i].left and
strings[i].left ~= ITEM_UNIQUE and
strings[i].left ~= ITEM_SOULBOUND and
strings[i].left ~= ITEM_BIND_ON_EQUIP and
strings[i].left ~= ITEM_BIND_ON_PICKUP and
strings[i].left ~= ITEM_BIND_QUEST)
then
leftString = strings[i].left;
rightString = strings[i].right;
break;
end
end
-- Find last line
local lastLine;
for i = 1, 10, 1 do
if (strings[i] and strings[i].left)
then
lastLine = strings[i].left;
else
break;
end
end
-- look at last line to see if it's a level requirement
local minLevel = 0;
if (lastLine)
then
local index, length, levelString = string.find(lastLine, "^Requires Level (%d+)$");
if (index) then
minLevel = Sea.string.toInt(levelString);
end
end
-- classify item based on found strings
if (leftString)
then
if (leftString == "Main Hand" or
leftString == "Two-Hand" or
leftString == "One-Hand")
then
classification = "Weapon";
elseif (leftString == "Head" or
leftString == "Hand" or
leftString == "Waist" or
leftString == "Shoulders" or
leftString == "Legs" or
leftString == "Back" or
leftString == "Feet" or
leftString == "Chest" or
leftString == "Wrist")
then
classification = "Armor";
elseif (leftString == "Off Hand")
then
classification = "Shield";
elseif (leftString == "Wand" or
leftString == "Ranged" or
leftString == "Gun" )
then
classification = "Ranged";
elseif (leftString == "Projectile")
then
classification = "Ammo";
elseif (leftString == "Shirt" or
leftString == "Tabard" or
leftString == "Finger" or
leftString == "Neck" or
leftString == "Trinket" or
leftString == "Held In Hand")
then
classification = "Clothing";
end
end
if ( classification == "Misc" ) then
if ( isJunk ) then classification = "Junk"; end
if ( isGem ) then classification = "Gem"; end
if ( isOre ) then classification = "Ore"; end
if ( isHerb ) then classification = "Herb"; end
if ( engineering ) then classification = "Engineering"; end
if ( firstaid ) then classification = "First Aid"; end
if ( isLeather ) then classification = "Leather"; end
if ( isTailor ) then classification = "Thread"; end
if ( isPotion ) then classification = "Potion"; end
if ( isFishing ) then classification = "Fishing"; end
if ( isFood ) then classification = "Food"; end
if ( isDrink ) then classification = "Drink"; end
if ( isMage ) then classification = "Mage"; end
if ( isShaman ) then classification = "Shaman"; end
if ( isWarlock ) then classification = "Warlock"; end
if ( isPoison ) then classification = "Poison"; end
if ( classitem ) then classification = class; end
if ( questItem ) then classification = "QuestItem"; end
end
-- Create the item table
-- Will soon have item information
itemInfo = {};
itemInfo.classification = classification;
itemInfo.name = name;
itemInfo.quality = quality;
itemInfo.count = itemCount;
itemInfo.minLevel = minLevel;
itemInfo.unique = unique;
itemInfo.soulbound = soulbound;
itemInfo.bindOnPickup = bindsOnPickup;
itemInfo.bindOnEquip = bindsOnEquip;
itemInfo.quest = questItem;
return itemInfo;
end;
--
-- getInventoryItemInfoStrings ( bag, slot [, tooltip] )
--
-- Obtains all information about a bag/slot and returns it as an array
--
-- Args:
-- (int bag, int slot, string tooltipbase )
--
-- Returns:
-- (table[row][.left .right] strings)
-- string - the string data of the tooltip
--
getInventoryItemInfoStrings = function (bag,slot, TooltipNameBase)
if ( TooltipNameBase == nil ) then
TooltipNameBase = "GameTooltip";
end
Sea.wow.tooltip.clear(TooltipNameBase);
local tooltip = getglobal(TooltipNameBase);
-- Open tooltip & read contents
Sea.wow.tooltip.protectTooltipMoney();
if ( bag > -1 ) then
tooltip:SetBagItem( bag, slot );
else
tooltip:SetInventoryItem( "player", slot);
end
Sea.wow.tooltip.unprotectTooltipMoney();
local strings = Sea.wow.tooltip.scan(TooltipNameBase);
-- Done our duty, send report
return strings;
end;
};