lotrointerface.com
Search Downloads

LoTROInterface SVN SortPack

[/] [trunk/] [JackdawPlugins/] [SortPack/] [Sort.lua] - Rev 156

Compare with Previous | Blame | View Log

function Sort()
        --If the bag function is enabled then close the sortbag before sorting and open it again when finished. Stops lots of errors.
        if SortBag~=nil then
                if SortBag:IsVisible() then Turbine.Shell.WriteLine("Sortbag window closed on sorting. Open again after sort.") SortBag:Close() closedsortbag=true end
        end
        
        --An attempt to make as many variables local to this proc as possible. May avoid the crash? Either way it "feels" right to have as much data disappear as possible.
        local VirtPack
        local item
        local Category
        local CategoryText
        local CatWeight
        local FirstStart
        local Name
        local Quality
        local QualWeight
        local Slot
        local Start

        Timer=Turbine.UI.Control()

        function Timer:Start()
                Turbine.Shell.WriteLine("<rgb=#888888>Sort Started")
                FirstStart= Turbine.Engine.GetGameTime()
                VirtPack=analysepack()

                Slot=1
                Start= Turbine.Engine.GetGameTime()
                Timer:SetWantsUpdates(true)
        end

        function Timer:Update()
                local Time = Turbine.Engine.GetGameTime()
                local elapsed = Time - Start
                
                if Slot>size then
                        Timer:SetWantsUpdates(false)
                        --If sortbag is loaded and the window was open before sorting, then open it again.
                        if SortBag~=nil then
                                if closedsortbag then closedsortbag=nil openbag() end
                        end
                        Timer=nil
                        Turbine.Shell.WriteLine("<rgb=#888888>Sort finished after "..Time-FirstStart.." seconds.")
                        return
                end
                        
                        --Get the name of the target item
                        target=VirtPack[Slot].Name
                        
                        --Get item in current slot
                        item=backpack:GetItem(Slot)
                        
                        --Get the name of the item in the current slot. If empty return that name as "zEmpty"
                        if item~=nil then 
                                local itemInfo=item:GetItemInfo()
                                Name=itemInfo:GetName() 
                        else 
                                Name="zEmpty" 
                        end
                        
                        --Turbine.Shell.WriteLine("<rgb=#888888>Slot "..Slot.." should contain "..target.." but contains ".. Name)
                        
                        --If the Name of the current item is equal to the target name, move on.
                        if Name==target then Slot=Slot+1 return end     
                
                if elapsed>0.2 then
                        --Search for the item in the rest of the pack.
                        for i=Slot+1,size do
                                item=backpack:GetItem(i)
                                if item~=nil then 
                                        local itemInfo=item:GetItemInfo()
                                        Name=itemInfo:GetName() 
                                        --Turbine.Shell.WriteLine("Looking for "..target.." Found "..Name)
                                else 
                                        Name="zEmpty" 
                                end
                                if Name==target then 
                                        swop(i,Slot)
                                        Start= Turbine.Engine.GetGameTime()
                                        return
                                end
                        end
                        Turbine.Shell.WriteLine("<rgb=#888888>Should never get here! Error in Update function. Did your inventory change during the sort? Restarting!")
                        Timer:SetWantsUpdates(false)
                        Timer:Start()
                end
        end

        function swop(i,j)
        
                if backpack:GetItem(j)==backpack:GetItem(i) then return end
                
                item=backpack:GetItem(j)

                if item~=nil then
                        backpack:PerformItemDrop(item,i, false)
                        return
                end
                
                item=backpack:GetItem(i)

                if item~=nil then
                        backpack:PerformItemDrop(item,j, false)
                        return
                end
                
                Turbine.Shell.WriteLine("<rgb=#888888>Should never be seen. Error in Swop function.")
                Timer:SetWantsUpdates(false)
                Timer:Start()
        end

        Timer:Start()
end

Compare with Previous | Blame


All times are GMT -5. The time now is 01:27 PM.


Our Network
EQInterface | EQ2Interface | Minion | WoWInterface | ESOUI | LoTROInterface | MMOUI | Swtorui