vanilla-wow-addons – Rev 1
?pathlinks?
AllInOneInventoryItems_Cache = {};
AllInOneInventoryItems_NoItem = {
["c"] = 0
};
local AllInOneInventoryItemsFrame_Events = {
"BAG_UPDATE";
"BAG_UPDATE_COOLDOWN";
"ITEM_LOCK_CHANGED";
"UPDATE_INVENTORY_ALERTS";
};
function AllInOneInventoryItemsFrame_OnLoad()
local f = AllInOneInventoryItemsFrame;
f:RegisterEvent("PLAYER_ENTERING_WORLD");
f:RegisterEvent("PLAYER_LEAVING_WORLD");
f:RegisterEvent("VARIABLES_LOADED");
for k,v in AllInOneInventoryItemsFrame_Events do
f:RegisterEvent(v);
end
end
function AllInOneInventoryItems_GetInfo(bag, slot)
if ( AllInOneInventoryItems_Cache[bag] ) and ( AllInOneInventoryItems_Cache[bag][slot] ) then
local arr = AllInOneInventoryItems_Cache[bag][slot];
if ( arr.n ) then
return arr;
end
end
return nil;
end
function AllInOneInventoryItems_UpdateBag(bag)
bag = tonumber(bag);
if ( not bag ) then
for i = 0, 4 do
AllInOneInventoryItems_UpdateBag(i);
end
return;
end
if ( not AllInOneInventoryItems_Cache[bag] ) then
AllInOneInventoryItems_Cache[bag] = {};
end
local slotMax = GetContainerNumSlots(bag);
local name, link;
local textureName, itemCount, itemLocked, itemQuality, itemReadable;
local ic_start, ic_duration, ic_enable;
for slot = 1, slotMax do
textureName, itemCount, itemLocked, itemQuality, itemReadable = GetContainerItemInfo(bag, slot);
if ( textureName ) then
link = GetContainerItemLink(bag, slot);
for nameStr in string.gfind(link, "|c%x+|Hitem:%d+:%d+:%d+:%d+|h%[(.-)%]|h|r") do
name = nameStr;
break;
end
local arr = AllInOneInventoryItems_Cache[bag][slot];
if ( not arr ) then
arr = {};
end
arr.n = name;
arr.c = itemCount;
arr.t = textureName;
arr.l = itemLocked;
arr.q = itemQuality;
arr.r = itemReadable;
ic_start, ic_duration, ic_enable = GetContainerItemCooldown(bag, slot);
arr.cs = ic_start;
arr.cd = ic_duration;
arr.ce = ic_enable;
if ( not AllInOneInventoryItems_Cache[bag][slot] ) then
AllInOneInventoryItems_Cache[bag][slot] = arr;
end
else
AllInOneInventoryItems_Cache[bag][slot] = {};
end
end
for slot = (slotMax+1), MAX_CONTAINER_ITEMS do
AllInOneInventoryItems_Cache[bag][slot] = nil;
end
end
function AllInOneInventoryItems_UpdateBagCooldown(bag)
if ( not bag ) then
for i = 0, 4 do
AllInOneInventoryItems_UpdateBag(i);
end
return;
end
if ( not AllInOneInventoryItems_Cache[bag] ) then
AllInOneInventoryItems_Cache[bag] = {};
end
local slotMax = GetContainerNumSlots(bag);
local name, link;
local ic_start, ic_duration, ic_enable;
local arr;
for slot = 1, slotMax do
arr = AllInOneInventoryItems_Cache[bag][slot];
if ( arr ) then
ic_start, ic_duration, ic_enable = GetContainerItemCooldown(bag, slot);
arr.cs = ic_start;
arr.cd = ic_duration;
arr.ce = ic_enable;
end
end
end
AllInOneInventoryItemsFrame_DoUpdate_Name = "AIOI_REFRESH";
AllInOneInventoryItemsFrame_DoUpdate_Names = {
"AIOI_REFRESH_0",
"AIOI_REFRESH_1",
"AIOI_REFRESH_2",
"AIOI_REFRESH_3",
"AIOI_REFRESH_4"
};
function AllInOneInventoryItemsFrame_DoUpdate(bag, ignoreVisibility, noSchedule)
AllInOneInventoryItems_UpdateBag(bag);
AllInOneInventoryItems_UpdateFrame(ignoreVisibility);
if ( not noSchedule ) then
local n = AllInOneInventoryItemsFrame_DoUpdate_Name;
if ( bag ) then n = AllInOneInventoryItemsFrame_DoUpdate_Names[bag]; end
AIOI_ScheduleByName(n, 1.0, AllInOneInventoryItemsFrame_DoUpdate, bag, ignoreVisibility, true);
end
end
function AllInOneInventoryItemsFrame_OnEvent(event)
if ( event == "PLAYER_ENTERING_WORLD" ) then
for k,v in AllInOneInventoryItemsFrame_Events do
AllInOneInventoryItemsFrame:RegisterEvent(v);
end
return;
elseif ( event == "PLAYER_LEAVING_WORLD" ) then
for k,v in AllInOneInventoryItemsFrame_Events do
AllInOneInventoryItemsFrame:UnregisterEvent(v);
end
return;
elseif ( event == "BAG_UPDATE" ) then
AllInOneInventoryItemsFrame_DoUpdate(arg1);
end
if ( event == "BAG_UPDATE_COOLDOWN" ) then
AllInOneInventoryItemsFrame_DoUpdate(arg1, true);
end
if ( event == "ITEM_LOCK_CHANGED" ) then
AllInOneInventoryItems_UpdateFrame();
end
if ( event == "UPDATE_INVENTORY_ALERTS" ) then
AllInOneInventoryItems_UpdateFrame();
end
if ( event == "VARIABLES_LOADED" ) then
local f = AllInOneInventoryItemsFrame;
f:UnregisterEvent(event);
AllInOneInventoryItemsFrame_DoUpdate();
end
end
function AllInOneInventoryItems_UpdateFrame(ignoreVisibility)
local frame = getglobal("AllInOneInventoryFrame");
if ( frame ) and ( ( frame:IsVisible() ) or ( ignoreVisibility ) ) then
AllInOneInventoryFrame_Update(frame);
end
end