vanilla-wow-addons – Rev 1
?pathlinks?
--[[--------------------------------------------------------------------------------
ItemSync Invalid Cleaner Framework
Author: Derkyle
Website: http://www.manaflux.com
-----------------------------------------------------------------------------------]]
local ISync_InvC_Count = 0;
local ISync_InvC_Count_Current = 0;
local ISync_InvClean_List = { };
---------------------------------------------------
-- ISync:InvCleaner_Load
---------------------------------------------------
function ISync:InvCleaner_Load()
--initiate the timer variables
ISync_InvCleaner_Timer.Todo = {};
ISync_InvCleaner_Timer.Todo.n = 0;
end
---------------------------------------------------
-- ISync:InvCleaner_Update()
---------------------------------------------------
function ISync:InvCleaner_Update()
while(ISync_InvCleaner_Timer.Todo[1] and
ISync_InvCleaner_Timer.Todo[1].time <= GetTime()) do
--load the todo variable
local todo = table.remove(ISync_InvCleaner_Timer.Todo,1);
--check if there are arguments if so then load them
if(todo.args) then
todo.handler(unpack(todo.args));
--otherwise run the function
else
todo.handler();
end--if(todo.args) then
end--end while
end
---------------------------------------------------
-- ISync:InvCleaner_Add()
---------------------------------------------------
function ISync:InvCleaner_Add(when,handler,...)
--load the todo variable
local todo = {};
local i = 1;
--set the time so that we can determine time passed later
todo.time = when + GetTime();
--save the handler for processing later
todo.handler = handler;
--save the arguements if there are any
todo.args = arg;
--start the while loop
while(ISync_InvCleaner_Timer.Todo[i] and
--syncronize the time
ISync_InvCleaner_Timer.Todo[i].time < todo.time) do
i = i + 1;
end
--insert the finished product into the frame's todo array
table.insert(ISync_InvCleaner_Timer.Todo,i,todo);
end
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------
-- ISync:InvCleaner
---------------------------------------------------
function ISync:InvCleaner(sNum)
local upNum = 0;
local sParseLink;
local storeProcessedLink;
if(sNum == 0) then
ISync_InvCleaner_Timer.Todo = {};
ISync_InvCleaner_Timer.Todo.n = 0;
ISync_InvC_Count = 0;
ISync_InvC_Count_Current = 0;
ISync_InvClean_List = nil;
ISync_InvClean_List = { };
sNum = 1; --MAKE SURE TO SET THIS TO 1
end
--check on database
if(not ISyncDB) then return nil; end --the database should have been created
if(not ISyncDB[ISYNC_REALM_NUM]) then return nil; end --don't even bother
if(not sNum and ISync_InvC_Count_Current) then sNum = ISync_InvC_Count_Current; end
if(not sNum and ISync_InvC_Count_Current == 0) then return nil; end
if(not ISync_InvClean_List) then ISync_InvClean_List = { }; end
--disable the button
ISYNC_Options_CleanerButton:Disable();
--get the itemcount only if it hasn't been done already
if(ISync_InvC_Count == 0) then
ISync_InvC_Count = ISync:InvClean_Randomize(); --randomize the information
--check for errors
if(not ISync_InvC_Count) then
if( DEFAULT_CHAT_FRAME ) then
DEFAULT_CHAT_FRAME:AddMessage("|c0000FF00ItemSync: There were no items to process.");
end
--Enable the button
ISYNC_Options_CleanerButton:Enable();
return nil;
elseif(ISync_InvC_Count == 0) then
if( DEFAULT_CHAT_FRAME ) then
DEFAULT_CHAT_FRAME:AddMessage("|c0000FF00ItemSync: There were no items to process.");
end
--Enable the button
ISYNC_Options_CleanerButton:Enable();
return nil;
else
--set the status bar
ISync_InvCleaner_Bar:SetAlpha(1);
ISync_InvCleaner_BarFrameStatusBar:SetStatusBarColor(1, 0, 0);
ISync_InvCleaner_BarFrameStatusBar:SetMinMaxValues(0, ISync_InvC_Count);
ISync_InvCleaner_Bar:Show();
end
end
--CHECK AGAIN
--You cannot have an element of zero
if(sNum == 0) then sNum = 1; end
--check count
if(ISync_InvClean_List[sNum]) then
--lets do 30 of them
for iCount=sNum , (sNum + 30) , 1 do
--increment
ISync_InvC_Count_Current = ISync_InvC_Count_Current + 1;
--do a check
if(ISync_InvClean_List[iCount]) then
--check the data
ISync:InvCleaner_ChkData(ISync_InvClean_List[iCount]);
--it doesn't exist so lets break
elseif(not ISync_InvClean_List[iCount]) then
break; --break the for loop and end at the bottom
end
--check to repeat
if(ISync_InvClean_List[iCount] and iCount >= (sNum + 30)) then
--fix the count
if(ISync_InvC_Count_Current > ISync_InvC_Count) then
ISync_InvCleaner_BarText:SetText( ISync_InvC_Count.."/"..ISync_InvC_Count );
else
ISync_InvCleaner_BarText:SetText( ISync_InvC_Count_Current.."/"..ISync_InvC_Count );
end
--do the value
ISync_InvCleaner_BarFrameStatusBar:SetValue(ISync_InvC_Count_Current);
ISync:InvCleaner_Add(7, ISync.InvCleaner, ISync_InvC_Count_Current);
return nil;
end
end--for iCount=sNum , (sNum + 30) , 1 do
end--if(ISync_InvClean_List[sNum]) then
--clear out
ISync_InvClean_List = nil;
ISync_InvCleaner_BarText:SetText( ISync_InvC_Count_Current.."/"..ISync_InvC_Count );
ISync_InvCleaner_BarFrameStatusBar:SetValue(ISync_InvC_Count_Current);
ISync_InvCleaner_Bar:Hide(); --hide it
DEFAULT_CHAT_FRAME:AddMessage("|c0000FF00ItemSync: "..ISYNC_CLEANER_COMPLETE);
--Enable the button
ISYNC_Options_CleanerButton:Enable();
end
---------------------------------------------------
-- ISync:InvCleaner_ChkData()
---------------------------------------------------
function ISync:InvCleaner_ChkData(sIndex)
if(not sIndex) then return nil; end
--attach variable
local sParseLink;
local storeProcessedLink;
local storeLink;
---------------------------------------------------------------------------
if(sIndex) then
--check link
local name_X, link_X, quality_X, minLevel_X, class_X, subclass_X, maxStack_X = GetItemInfo("item:"..sIndex);
if(not name_X or not link_X) then
UIParent.TooltipButton = this:GetID();
ISyncTooltip:SetOwner(this, "ANCHOR_RIGHT");
ISyncTooltip:SetHyperlink("item:"..sIndex);
ISyncTooltip:Show();
end--if(name_X and link_X and ISYNC_REALM_NUM) then
end
------------------------------------------------------------------------------
end
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------
-- ISync:InvClean_Randomize()
---------------------------------------------------
function ISync:InvClean_Randomize()
ISync_InvClean_List = { }; --reset
ISync_InvC_Count = 0;
for index, value in ISyncDB[ISYNC_REALM_NUM] do
--check for number
if(tonumber(index)) then
--it's pointless to do subitems since they share the same basic stats
local sParseLink = ISync:FetchDB(index, "subitem");
if(not sParseLink) then --this item has no subitems, cause it's subitem value = 0
local name_X, link_X, quality_X, minLevel_X, class_X, subclass_X, maxStack_X = GetItemInfo("item:"..index..":0:0:0");
if(not name_X or not link_X) then
table.insert(ISync_InvClean_List, link_X);
ISync_InvC_Count = ISync_InvC_Count + 1;
end
else
---------------------------------------
--make sure it's a table
if(type(sParseLink) == "table") then
for qindex, qvalue in sParseLink do
--check
local name_X, link_X, quality_X, minLevel_X, class_X, subclass_X, maxStack_X = GetItemInfo("item:"..index..":0:"..qvalue..":0");
--do we have a valid item?
if(not name_X or not link_X) then
table.insert(ISync_InvClean_List, link_X);
ISync_InvC_Count = ISync_InvC_Count + 1;
end
end--for qindex, qvalue in sParseLink do
end--if(type(sParseLink) == "table") then
---------------------------------------
end--if(not sParseLink) then
end
end
--check
if(getn(ISync_InvClean_List) <= 0) then return nil; end
--Now randomize the next table using the gathered one. This will prevent disconnections on the same item over and over.
local iChk = 1;
local sTempDB = { };
local sNumRand = 0;
--loop
while iChk>0 do
if(not ISync_InvClean_List or getn(ISync_InvClean_List) <= 0) then iChk = 0; end --reset
--check
if(iChk == 1) then
sNumRand = math.random(1, getn(ISync_InvClean_List));
--add it to the temp list
table.insert(sTempDB, ISync_InvClean_List[sNumRand]);
--remove it from old list
table.remove(ISync_InvClean_List,sNumRand);
end
end
--now replace the old with new
ISync_InvClean_List = nil;
ISync_InvClean_List = sTempDB;
sTempDB = nil;
return ISync_InvC_Count;
end
Generated by GNU Enscript 1.6.5.90.