vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
--[[--------------------------------------------------------------------------------
  ItemSyncCore Parse Framework

  Author:  Derkyle
  Website: http://www.manaflux.com
-----------------------------------------------------------------------------------]]
        

---------------------------------------------------
-- ISync:Do_Parse()
---------------------------------------------------
function ISync:Do_Parse(sFrame, sToolTip, sID, sLinkID)

        if(not ISyncDB) then return nil; end
        if(not ISyncDB[ISYNC_REALM_NUM]) then return nil; end
        if(not ISyncDB[ISYNC_REALM_NUM][sID]) then return nil; end
        
        sFrame.TooltipButton = 1;
        sToolTip:ClearLines();
        sToolTip:SetOwner(UIParent, "ANCHOR_BOTTOMRIGHT");
        sToolTip:SetHyperlink(sLinkID);
        ISync:ParseTooltip(sID, sLinkID);
        sToolTip:Hide();

end


---------------------------------------------------
-- ISync:ParseTooltip()
---------------------------------------------------
function ISync:ParseTooltip(sID, sLinkID)

        if(not sID) then return nil; end
        if(not tonumber(sID)) then return nil; end
        if(not ISync:FetchDB(tonumber(sID), "chk")) then return nil; end
        
        sID = tonumber(sID); --convert
                
        local sTipLeft;
        local sTipRight;
        local sParseLink;

        sTipLeft = "ISyncTooltipTextLeft";
        sTipRight = "ISyncTooltipTextRight";
        
        --make sure we have tooltip info to work with
        if(not sTipLeft or not sTipRight) then return; end

        
        --begin the loop with the amount of lines in the tooltip
        for index = 1, ISyncTooltip:NumLines(), 1 do
                
                --get the tooltip left information
                field = getglobal(sTipLeft..index);
                if( field and field:IsVisible() ) then
                        left = field:GetText();
                else
                        left = nil;
                end
                        
                --get the tooltip right information
                field = getglobal(sTipRight..index);
                if( field and field:IsVisible() ) then
                        right = field:GetText();
                else
                        right = nil;
                end
                                
                --do item locations / weapon locations
                if(left and ISYNC_WeaponLocation[left] ~= nil) then
                        
                        --when the weapon occasionally shows on the right
                        --we need to compensate for this
                        if(left == ISYNC_CROSSBOW_TEXT) then
                        
                                --store the special weapon type
                                if(not ISync:FetchDB(sID, "wt")) then
                                
                                        ISync:SetDB(sID, "wt", ISYNC_WeaponTypes[left]);
                                        
                                --if it doesn't match the one stored then update it
                                elseif(not ISync:FetchDB(sID, "wt", ISYNC_WeaponTypes[left])) then
                                
                                        ISync:SetDB(sID, "wt", ISYNC_WeaponTypes[left]);
                                end
                                
                                
                        elseif(left == ISYNC_GUN_TEXT) then
                        
                        
                                --store the special weapon type
                                if(not ISync:FetchDB(sID, "wt")) then
                                
                                        ISync:SetDB(sID, "wt", ISYNC_WeaponTypes[left]);
                                        
                                --if it doesn't match the one stored then update it
                                elseif(not ISync:FetchDB(sID, "wt", ISYNC_WeaponTypes[left])) then
                                
                                        ISync:SetDB(sID, "wt", ISYNC_WeaponTypes[left]);
                                end
                                

                        elseif(left == ISYNC_THROWN_TEXT) then
                        
                        
                                --store the special weapon type
                                if(not ISync:FetchDB(sID, "wt")) then
                                
                                        ISync:SetDB(sID, "wt", ISYNC_WeaponTypes[left]);
                                        
                                --if it doesn't match the one stored then update it
                                elseif(not ISync:FetchDB(sID, "wt", ISYNC_WeaponTypes[left])) then
                                
                                        ISync:SetDB(sID, "wt", ISYNC_WeaponTypes[left]);
                                end
                                

                        elseif(left == ISYNC_WAND_TEXT) then
                        
                        
                                --store the special weapon type
                                if(not ISync:FetchDB(sID, "wt")) then
                                
                                        ISync:SetDB(sID, "wt", ISYNC_WeaponTypes[left]);
                                        
                                --if it doesn't match the one stored then update it
                                elseif(not ISync:FetchDB(sID, "wt", ISYNC_WeaponTypes[left])) then
                                
                                        ISync:SetDB(sID, "wt", ISYNC_WeaponTypes[left]);
                                end
                                
                        
                        else --it's not a special case
                                        
                                        
                                --THIS IS WEAPON LOCATION NOT WEAPON TYPE!
                                if(not ISync:FetchDB(sID, "wl")) then
                                
                                        ISync:SetDB(sID, "wl", ISYNC_WeaponLocation[left]);
                                        
                                --if it doesn't match the one stored then update it
                                elseif(not ISync:FetchDB(sID, "wl", ISYNC_WeaponLocation[left])) then
                                
                                        ISync:SetDB(sID, "wl", ISYNC_WeaponLocation[left]);
                                end
                                
                        
                        end

                        
        
                end
        
                --do weapon types
                if(right and ISYNC_WeaponTypes[right] ~= nil) then
                        
                        
                        if(not ISync:FetchDB(sID, "wt")) then

                                ISync:SetDB(sID, "wt", ISYNC_WeaponTypes[right]);

                        --if it doesn't match the one stored then update it
                        elseif(not ISync:FetchDB(sID, "wt", ISYNC_WeaponTypes[right])) then

                                ISync:SetDB(sID, "wt", ISYNC_WeaponTypes[right]);
                        end
                                
                end
                
                
                --grab the level requirement for items or tradeskills
                if(left) then
                                _, _, sVariable1 = string.find(left, ISYNC_REQUIRE_FIND);
                        
                                if( sVariable1 and sLinkID) then
                                
                                        local _, _, _, minLevel_X = GetItemInfo(sLinkID);
                                        
                                        _, _, sLVLVariable1 = string.find(sVariable1, ISYNC_REQUIRE_FIND2); --check for level requirement
                                        

                                        if( sLVLVariable1 ) then
                                        
                                                        --NEW LVL GRAB (MAKE SURE IT ISN'T A PATTERN (we want to be able to find craftable items using lvlrange)
                                                        if(minLevel_X and not ISync:FetchDB(sID, "level")) then
                                                        
                                                                ISync:SetDB(sID, "level", minLevel_X);
                                                        
                                                        --it doesn't match so store new one
                                                        elseif(minLevel_X and not ISync:FetchDB(sID, "level", minLevel_X)) then
                                                        
                                                                ISync:SetDB(sID, "level", minLevel_X);
                                                                
                                                        elseif(minLevel_X and ISync:FetchDB(sID, "level", minLevel_X)) then
                                                        
                                                                --do nothing otherwise it will loop over and over again cause the bottom two elseif's will check
                                                                --what we parsed, rather what we grabbed with getiteminfo
                                                        
                                                        --store the grabbed one
                                                        elseif(sLVLVariable1 and not ISync:FetchDB(sID, "level")) then

                                                                ISync:SetDB(sID, "level", sLVLVariable1);

                                                        --if it doesn't match the one stored then update it
                                                        elseif(sLVLVariable1 and not ISync:FetchDB(sID, "level", sLVLVariable1)) then

                                                                ISync:SetDB(sID, "level", sLVLVariable1);
                                                        end
                                

                                        
                                        else

                                                --this is for tradeskill and number required
                                                
                                                _, _, sVariable2, sVariable3 = string.find(sVariable1, ISYNC_REQUIRE_FIND3);

                                                if( sVariable2 and sVariable3 and ISYNC_TradeSkills[sVariable2] ~= nil ) then
                                                        
                                                        
                                                        if(not ISync:FetchDB(sID, "ts")) then

                                                                ISync:SetDB(sID, "ts", ISYNC_TradeSkills[sVariable2]);

                                                        --if it doesn't match the one stored then update it
                                                        elseif(not ISync:FetchDB(sID, "ts", ISYNC_TradeSkills[sVariable2])) then

                                                                ISync:SetDB(sID, "ts", ISYNC_TradeSkills[sVariable2]);
                                                        end

                                                end
                                                
                                        

                                        end--end check for level requirement
                

                                end--end variable 1 check
                        
                                                
                end                     
                        

                
                --do armor types
                if(right and ISYNC_ArmorTypes[right] ~= nil) then
                
                
                        if(not ISync:FetchDB(sID, "at")) then

                                ISync:SetDB(sID, "at", ISYNC_ArmorTypes[right]);

                        --if it doesn't match the one stored then update it
                        elseif(not ISync:FetchDB(sID, "at", ISYNC_ArmorTypes[right])) then

                                ISync:SetDB(sID, "at", ISYNC_ArmorTypes[right]);
                        end

                        
                end
                
                
                --do shield types
                if(right and ISYNC_ShieldTypes[right] ~= nil) then
                
                
                        if(not ISync:FetchDB(sID, "st")) then

                                ISync:SetDB(sID, "st", ISYNC_ShieldTypes[right]);

                        --if it doesn't match the one stored then update it
                        elseif(not ISync:FetchDB(sID, "st", ISYNC_ShieldTypes[right])) then

                                ISync:SetDB(sID, "st", ISYNC_ShieldTypes[right]);
                        end
                        
                        
                end
                
                
                
        --------------------------------------------------------        
        --------------------------------------------------------                
        end --end for
        --------------------------------------------------------        
        --------------------------------------------------------


end

Generated by GNU Enscript 1.6.5.90.