vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
TheoryCraft_Data.EquipEffects = {}
local _, class = UnitClass("player")

local function findpattern(text, pattern, start)
        if (text and pattern and (string.find(text, pattern, start))) then
                return string.sub(text, string.find(text, pattern, start))
        else
                return ""
        end
end

local function TheoryCraft_AddEquipEffect (slotname, test, data, equippedsets)
        if (test ~= "test") then
                TheoryCraftTooltip:SetOwner(UIParent,"ANCHOR_NONE")
                TheoryCraftTooltip:SetInventoryItem ("player", GetInventorySlotInfo(slotname.."Slot"))
        end
        if (getglobal("TheoryCraftTooltipTextLeft1") == nil) then
                return
        end
        local ltext = getglobal(TheoryCraftTooltip:GetName().."TextLeft1"):GetText()
        if (data["name"] == ltext) and (data["numlines"] == TheoryCraftTooltip:NumLines()) then
                return
        end
        for k,v in pairs(data) do
                data[k] = nil
        end
        if data["procs"] == nil then data["procs"] = {} end
        for k,v in pairs(equippedsets) do
                equippedsets[k] = nil
        end
        data["name"] = ltext
        data["numlines"] = TheoryCraftTooltip:NumLines()
        local index = 2
        ltext = getglobal("TheoryCraftTooltipTextLeft"..index)
        if ltext then
                ltext = ltext:GetText()
        end
        rtext = getglobal("TheoryCraftTooltipTextRight"..index)
        if rtext then
                if (not getglobal("TheoryCraftTooltipTextRight"..index):IsVisible()) then
                        rtext = nil
                else
                        rtext = rtext:GetText()
                end
        end
        local s2 = 1
        local is = 1
        local i2 = 1
        local ignoreline = false
        local startpos, endpos, found, foundme
        while (ltext ~= nil) do
                if strfind(ltext, TheoryCraft_Locale.Set) then
                        local numpieces = tonumber(findpattern(findpattern(ltext, TheoryCraft_Locale.Set), "%d+"))
                        while (string.len(ltext) > 0) and (string.sub(ltext, string.len(ltext), string.len(ltext)) == " ") do
                                ltext = string.sub(ltext, 1, string.len(ltext)-1)
                        end
                        while (string.len(ltext) > 0) and (string.sub(ltext, string.len(ltext), string.len(ltext)) ~= " ") do
                                ltext = string.sub(ltext, 1, string.len(ltext)-1)
                        end
                        while (string.len(ltext) > 0) and (string.sub(ltext, string.len(ltext), string.len(ltext)) == " ") do
                                ltext = string.sub(ltext, 1, string.len(ltext)-1)
                        end
                        local setname = ltext
                        equippedsets[setname] = (equippedsets[setname] or 0)+1
                        if TheoryCraft_SetBonuses[setname] == nil then 
                                TheoryCraft_SetBonuses[setname] = {}
                        end
                        local foundbonuses = {}
                        local idx = 1
                        index = index + 1
                        ltext = getglobal(TheoryCraftTooltip:GetName().."TextLeft"..index)
                        while (ltext ~= nil) do
                                ltext = ltext:GetText()
                                if ltext == nil then break end
                                if strfind(string.sub(ltext, 1, 4), "%d+") then
                                        foundbonuses[idx] = {}
                                        foundbonuses[idx]["pieces"] = tonumber(findpattern(ltext, "%d+"))
                                        ltext = string.sub(ltext, 5+string.len(TheoryCraft_Locale.ID_Set))
                                        foundbonuses[idx]["text"] = ltext
                                        idx = idx + 1
                                end
                                index = index + 1
                                ltext = getglobal(TheoryCraftTooltip:GetName().."TextLeft"..index)
                        end
                        local newbonuses = {}
                        i = 1
                        for k,v in TheoryCraft_SetBonuses[setname] do
                                if (v["pieces"] <= numpieces) then
                                        newbonuses[i] = v
                                        i = i + 1
                                end
                        end
                        for k,v in pairs(foundbonuses) do
                                newbonuses[i] = v
                                i = i + 1
                        end
                        TheoryCraft_SetBonuses[setname] = newbonuses
                        break
                end
                if (strfind(ltext, "^"..TheoryCraft_Locale.ID_Equip)) then
                        foundme = false
                        for k, v in pairs(TheoryCraft_Equips) do
                                if (v.slot == nil) or (v.slot == slotname) then
                                        if ((foundme == false) or (v.me == nil)) then
                                                _, start, found = strfind(ltext, v.text)
                                                if _ then
                                                        if v.proc then
                                                                i2 = 1
                                                                if data["procs"] == nil then
                                                                        data["procs"] = {}
                                                                end
                                                                while data["procs"][i2] do i2 = i2 + 1 end
                                                                data["procs"][i2] = {}
                                                                data["procs"][i2].amount = v.amount
                                                                data["procs"][i2].proc = v.proc
                                                                data["procs"][i2].duration = v.duration
                                                                data["procs"][i2].exact = v.exact
                                                                data["procs"][i2].type = v.type
                                                        else
                                                                if (v.amount) then
                                                                        data[v.type] = (data[v.type] or 0) + v.amount
                                                                else
                                                                        data[v.type] = (data[v.type] or 0) + tonumber(found)
                                                                end
                                                                if (v.me) then
                                                                        foundme = true
                                                                end
                                                        end
                                                end
                                        end
                                end
                        end
                else
                        foundme = false
                        if rtext then
                                for k, v in pairs(TheoryCraft_EquipEveryRight) do
                                        if (v.slot == nil) or (v.slot == slotname) then
                                                if (foundme == false) or (v.me == nil) then
                                                        _, start, found = strfind(rtext, v.text)
                                                        if _ then
                                                                if (v.amount) then
                                                                        data[v.type] = (data[v.type] or 0) + v.amount
                                                                else
                                                                        data[v.type] = (data[v.type] or 0) + found
                                                                end     
                                                                if (v.me) then foundme = true end
                                                        end
                                                end
                                        end
                                end
                        end
                        ignoreline = false
                        for k, v in pairs(TheoryCraft_IgnoreLines) do
                                if strfind(ltext, v) then
                                        ignoreline = true
                                        break
                                end
                        end
                        if not ignoreline then
                                foundme = false
                                for k, v in pairs(TheoryCraft_EquipEveryLine) do
                                        if (v.slot == nil) or (v.slot == slotname) then
                                                if (not foundme) or (not v.me) then
                                                        _, start, found = strfind(ltext, v.text)
                                                        if _ then
                                                                if (v.amount) then
                                                                        data[v.type] = (data[v.type] or 0) + v.amount
                                                                else
                                                                        data[v.type] = (data[v.type] or 0) + found
                                                                end     
                                                                if (v.me) then foundme = true end
                                                        end
                                                end
                                        end
                                end
                        end
                end

                index = index + 1
                ltext = getglobal("TheoryCraftTooltipTextLeft"..index)
                rtext = getglobal("TheoryCraftTooltipTextRight"..index)
                if ltext then
                        ltext = ltext:GetText()
                end
                if rtext then
                        if (not getglobal("TheoryCraftTooltipTextRight"..index):IsVisible()) then
                                rtext = nil
                        else
                                rtext = rtext:GetText()
                        end
                end
        end
        TheoryCraftTooltip:ClearLines()
        return true
end

function TheoryCraft_CombineTables(tab1, tab2)
        if tab2 == nil then tab2 = tab1 return end
        for k,v in pairs(tab1) do
                if type(v) == "table" then
                        tab2[k] = TheoryCraft_CombineTables(v, tab2[k])
                elseif tonumber(v) and tonumber(tab2[k] or 0) then
                        tab2[k] = v + (tab2[k] or 0)
                end
        end
end

local function TheoryCraft_AddAllEquips(outfit, force)
        local i2 = 1
        local resetall = true
        if not force and UnitAffectingCombat("player") then
                resetall = false
        end
        if (TheoryCraft_Outfits[outfit]) == nil then
                outfit = 1
        end
        if TheoryCraft_Data["SlotData"] == nil then
                TheoryCraft_Data["SlotData"] = {}
                TheoryCraft_Data["SetData"] = {}
        end
        TheoryCraft_Data.OldOutfit = outfit
        if TheoryCraft_Data.StatsToDo == nil then
                TheoryCraft_Data.StatsToDo = {}
        end
        TheoryCraft_DeleteTable(TheoryCraft_Data.StatsToDo)
        for k, v in pairs(TheoryCraft_Outfits[outfit].wear) do
                TheoryCraft_Data.StatsToDo[v] = true
                if TheoryCraft_Data["SlotData"][v] == nil then
                        TheoryCraft_Data["SlotData"][v] = {}
                        TheoryCraft_Data["SlotData"][v]["procs"] = {}
                end
                if TheoryCraft_Data["SetData"][v] == nil then
                        TheoryCraft_Data["SetData"][v] = {}
                end
                if (v == "MainHand") or (v == "SecondaryHand") or (v == "Ranged") or (v == "Ammo") then
                        changed = TheoryCraft_AddEquipEffect(v, nil, TheoryCraft_Data["SlotData"][v], TheoryCraft_Data["SetData"][v])
                elseif (resetall) then
                        changed = TheoryCraft_AddEquipEffect(v, nil, TheoryCraft_Data["SlotData"][v], TheoryCraft_Data["SetData"][v])
                end
        end
        if not TheoryCraft_Data.EquipEffects then
                TheoryCraft_Data.EquipEffects  = {}
        end
        if not TheoryCraft_Data.EquipedSets then
                TheoryCraft_Data.EquippedSets  = {}
        end
        TheoryCraft_DeleteTable(TheoryCraft_Data.EquipEffects)
        TheoryCraft_DeleteTable(TheoryCraft_Data.EquippedSets)
        for k, v in pairs(TheoryCraft_Data.StatsToDo) do
                TheoryCraft_CombineTables(TheoryCraft_Data.SlotData[k], TheoryCraft_Data.EquipEffects)
                TheoryCraft_CombineTables(TheoryCraft_Data.SetData[k], TheoryCraft_Data.EquippedSets)
        end
        data = TheoryCraft_Data.EquipEffects
        local i = 1
        if (outfit == 2) then
                TheoryCraft_Outfits[outfit].meleecritchance = 0
                TheoryCraft_Outfits[outfit].formattackpower = 0
                TheoryCraft_Outfits[outfit].rangedattackpower = 0
                TheoryCraft_Outfits[outfit].attackpower = 0
                TheoryCraft_Outfits[outfit].strength = 0
                TheoryCraft_Outfits[outfit].agility = 0
                TheoryCraft_Outfits[outfit].stamina = 0
                TheoryCraft_Outfits[outfit].intellect = 0
                TheoryCraft_Outfits[outfit].spirit = 0
                TheoryCraft_Outfits[outfit].totalmana = 0
                TheoryCraft_Outfits[outfit].totalhealth = 0
                if (TheoryCraft_Settings["CustomOutfit"] == nil) then
                        TheoryCraft_Settings["CustomOutfit"] = TheoryCraft_Outfits[outfit]
                        TheoryCraft_Settings["CustomOutfit"].slots = {}
                end
                local k, v
                while (TheoryCraft_SlotNames[i]) do
                        if ((TheoryCraft_SlotNames[i-1] == nil) or (TheoryCraft_SlotNames[i].slot ~= TheoryCraft_SlotNames[i-1].slot)) and (TheoryCraft_Settings["CustomOutfit"].slots[TheoryCraft_SlotNames[i].slot]) then
                                if TheoryCraft_Settings["CustomOutfit"].slots[TheoryCraft_SlotNames[i].slot] == nil then
                                        TheoryCraft_Settings["CustomOutfit"].slots[TheoryCraft_SlotNames[i].slot] = {}
                                end
                                if TheoryCraft_Settings["CustomOutfit"].slots[TheoryCraft_SlotNames[i].slot]["stats"] == nil then TheoryCraft_Settings["CustomOutfit"].slots[TheoryCraft_SlotNames[i].slot]["stats"] = {} end
                                local a = TheoryCraft_Settings["CustomOutfit"].slots[TheoryCraft_SlotNames[i].slot]["stats"]
                                TheoryCraft_Outfits[outfit].meleecritchance = TheoryCraft_Outfits[outfit].meleecritchance+(a.meleecritchance or 0)
                                TheoryCraft_Outfits[outfit].formattackpower = TheoryCraft_Outfits[outfit].formattackpower+(a.formattackpower or 0)
                                TheoryCraft_Outfits[outfit].rangedattackpower = TheoryCraft_Outfits[outfit].rangedattackpower+(a.rangedattackpower or 0)
                                TheoryCraft_Outfits[outfit].attackpower = TheoryCraft_Outfits[outfit].attackpower+(a.attackpower or 0)
                                TheoryCraft_Outfits[outfit].strength = TheoryCraft_Outfits[outfit].strength+(a.strength or 0)
                                TheoryCraft_Outfits[outfit].agility = TheoryCraft_Outfits[outfit].agility+(a.agility or 0)
                                TheoryCraft_Outfits[outfit].stamina = TheoryCraft_Outfits[outfit].stamina+(a.stamina or 0)
                                TheoryCraft_Outfits[outfit].intellect = TheoryCraft_Outfits[outfit].intellect+(a.intellect or 0)
                                TheoryCraft_Outfits[outfit].spirit = TheoryCraft_Outfits[outfit].spirit+(a.spirit or 0)
                                TheoryCraft_Outfits[outfit].totalmana = TheoryCraft_Outfits[outfit].totalmana+(a.totalmana or 0)
                                TheoryCraft_Outfits[outfit].totalhealth = TheoryCraft_Outfits[outfit].totalhealth+(a.totalhealth or 0)
                                if a.settype then
                                        TheoryCraft_Data.EquippedSets[a.settype] = (TheoryCraft_Data.EquippedSets[a.settype] or 0) + 1
                                end
                                a = TheoryCraft_Settings["CustomOutfit"].slots[TheoryCraft_SlotNames[i].slot]["data"]
                                if type(a) == "table" then
                                        for k,v in pairs(a) do
                                                if k ~= "procs" then
                                                        if tonumber(v) then
                                                                data[k] = (tonumber(data[k]) or 0)+v
                                                        end
                                                else
                                                        for k,v in pairs(a["procs"]) do
                                                                i2 = 1
                                                                if data["procs"] == nil then
                                                                        data["procs"] = {}
                                                                end
                                                                while data["procs"][i2] do i2 = i2 + 1 end
                                                                data["procs"][i2] = {}
                                                                data["procs"][i2].amount = v.amount
                                                                data["procs"][i2].proc = v.proc
                                                                data["procs"][i2].duration = v.duration
                                                                data["procs"][i2].exact = v.exact
                                                                data["procs"][i2].type = v.type
                                                        end
                                                end
                                        end
                                end
                        end
                        i = i + 1
                end

                local returndata
                for k,count in pairs(TheoryCraft_Data.EquippedSets) do
                        if TheoryCraft_SetBonuses[k] then
                                for k,v in pairs(TheoryCraft_SetBonuses[k]) do
                                        if (v["pieces"] <= count) then
                                                returndata = {}
                                                returndata = TheoryCraft_DequipLine(v["text"], returndata)
                                                for k,v in pairs(returndata) do
                                                        TheoryCraft_Outfits[outfit][k] = (TheoryCraft_Outfits[outfit][k] or 0) - v
                                                end
                                                returndata = {}
                                                returndata = TheoryCraft_DequipSpecial(v["text"], returndata)
                                                for k,v in pairs(returndata) do
                                                        data[k] = (data[k] or 0) - v
                                                end
                                        end
                                end
                        end
                end
        else
                while (TheoryCraft_Outfits[outfit].newstat[i]) do
                        if TheoryCraft_Outfits[outfit].newstat[i].proc then
                                i2 = 1
                                if data["procs"] == nil then
                                        data["procs"] = {}
                                end
                                while data["procs"][i2] do i2 = i2 + 1 end
                                data["procs"][i2] = {}
                                data["procs"][i2].amount = TheoryCraft_Outfits[outfit].newstat[i].amount
                                data["procs"][i2].proc = TheoryCraft_Outfits[outfit].newstat[i].proc
                                data["procs"][i2].duration = TheoryCraft_Outfits[outfit].newstat[i].duration
                                data["procs"][i2].exact = TheoryCraft_Outfits[outfit].newstat[i].exact
                                data["procs"][i2].type = TheoryCraft_Outfits[outfit].newstat[i].type
                        else
                                data[TheoryCraft_Outfits[outfit].newstat[i].type] = (data[TheoryCraft_Outfits[outfit].newstat[i].type] or 0) + TheoryCraft_Outfits[outfit].newstat[i].amount
                        end
                        i = i + 1
                end
                for k,v in pairs(TheoryCraft_Locale.SetTranslator) do
                        if v.id == TheoryCraft_Outfits[outfit].name then
                                if TheoryCraft_SetBonuses[v.translated] then
                                        local returndata
                                        TheoryCraft_Data.EquippedSets[v.translated] = 100
                                        for k,v in pairs(TheoryCraft_SetBonuses[v.translated]) do
                                                returndata = {}
                                                returndata = TheoryCraft_DequipSpecial(v["text"], returndata)
                                                for k,v in pairs(returndata) do
                                                        data[k] = (data[k] or 0) - v
                                                end
                                        end
                                end
                                break
                        end
                end
        end
        local i2, ltext, _, start, found, foundme
        for k,count in pairs(TheoryCraft_Data.EquippedSets) do
                if TheoryCraft_SetBonuses[k] then
                        foundme = false
                        for k,v in pairs(TheoryCraft_SetBonuses[k]) do
                                if (v["pieces"] <= count) then
                                        ltext = v["text"]
                                        foundme = false
                                        for k, v in pairs(TheoryCraft_Equips) do
                                                if (v.slot == nil) or (v.slot == slotname) then
                                                        if ((foundme == false) or (v.me == nil)) then
                                                                _, start, found = strfind(ltext, v.text)
                                                                if _ then
                                                                        if v.proc then
                                                                                i2 = 1
                                                                                if data["procs"] == nil then
                                                                                        data["procs"] = {}
                                                                                end
                                                                                while data["procs"][i2] do i2 = i2 + 1 end
                                                                                data["procs"][i2] = {}
                                                                                data["procs"][i2].amount = v.amount
                                                                                data["procs"][i2].proc = v.proc
                                                                                data["procs"][i2].duration = v.duration
                                                                                data["procs"][i2].exact = v.exact
                                                                                data["procs"][i2].type = v.type
                                                                        else
                                                                                if (v.amount) then
                                                                                        data[v.type] = (data[v.type] or 0) + v.amount
                                                                                else
                                                                                        data[v.type] = (data[v.type] or 0) + tonumber(found)
                                                                                end
                                                                                if (v.me) then
                                                                                        foundme = true
                                                                                end
                                                                        end
                                                                end
                                                        end
                                                end
                                        end
                                        foundme = false
                                        for k, v in pairs(TheoryCraft_Sets) do
                                                if (v.slot == nil) or (v.slot == slotname) then
                                                        if ((foundme == false) or (v.me == nil)) then
                                                                _, start, found = strfind(ltext, v.text)
                                                                if _ then
                                                                        if v.proc then
                                                                                i2 = 1
                                                                                if data["procs"] == nil then
                                                                                        data["procs"] = {}
                                                                                end
                                                                                while data["procs"][i2] do i2 = i2 + 1 end
                                                                                data["procs"][i2] = {}
                                                                                data["procs"][i2].amount = v.amount
                                                                                data["procs"][i2].proc = v.proc
                                                                                data["procs"][i2].duration = v.duration
                                                                                data["procs"][i2].exact = v.exact
                                                                                data["procs"][i2].type = v.type
                                                                        else
                                                                                if (v.amount) then
                                                                                        if v.amount == "n/100" then
                                                                                                data[v.type] = (data[v.type] or 0) + tonumber(found)/100
                                                                                        else
                                                                                                data[v.type] = (data[v.type] or 0) + v.amount
                                                                                        end
                                                                                else
                                                                                        data[v.type] = (data[v.type] or 0) + tonumber(found)
                                                                                end
                                                                                if (v.me) then
                                                                                        foundme = true
                                                                                end
                                                                        end
                                                                end
                                                        end
                                                end
                                        end
                                end
                        end
                end
        end
end

local old = {}
local old2 = {}

function TheoryCraft_UpdateGear(arg1, dontgen, force)
        if TheoryCraft_SetBonuses == nil then
                TheoryCraft_SetBonuses = {}
        end
        if (arg1 ~= "player") then return end
        if not force then
                if UnitAffectingCombat("player") then
                        TheoryCraft_Data.regenaftercombat = true
                end
        end
        TheoryCraft_DeleteTable(old)
        TheoryCraft_CopyTable(TheoryCraft_Data.EquipEffects, old)
        TheoryCraft_AddAllEquips(TheoryCraft_Data["outfit"], force)
        if TheoryCraft_Data.EquipEffects["MeleeAPMult"] == nil then
                TheoryCraft_Data.EquipEffects["MeleeAPMult"] = 1
        end
        if (dontgen == nil) then
                TheoryCraft_DeleteTable(old2)
                TheoryCraft_CopyTable(TheoryCraft_Data.Stats, old2)
                TheoryCraft_DeleteTable(TheoryCraft_Data.Stats)
                TheoryCraft_LoadStats()
                if (TheoryCraft_IsDifferent(old, TheoryCraft_Data.EquipEffects)) or (TheoryCraft_IsDifferent(old2, TheoryCraft_Data.Stats)) then
                        TheoryCraft_GenerateAll()
                end
        end
end


function TheoryCraft_DequipLine(line, returndata)
        local _, start, found
        for k, v in pairs(TheoryCraft_Dequips) do
                if strfind(line, TheoryCraft_Locale.Set) then
                        return returndata
                end
                _, start, found = strfind(line, v.text)
                if found then
                        if v.type == "all" then
                                returndata["strength"] = (returndata["strength"] or 0)-found
                                returndata["agility"] = (returndata["agility"] or 0)-found
                                returndata["stamina"] = (returndata["stamina"] or 0)-found
                                returndata["intellect"] = (returndata["intellect"] or 0)-found
                                returndata["spirit"] = (returndata["spirit"] or 0)-found
                        elseif v.type == "formattackpower" then
                                returndata[v.type] = (returndata[v.type] or 0)-found
                                break
                        elseif v.type == "attackpower" then
                                returndata[v.type] = (returndata[v.type] or 0)-found
                                returndata["rangedattackpower"] = (returndata["rangedattackpower"] or 0)-found
                                break
                        else
                                returndata[v.type] = (returndata[v.type] or 0)-found
                        end
                end
        end
        return returndata
end

local b = TheoryCraft_SetsDequipOnly

function TheoryCraft_DequipSpecial(line, returndata)
        local i = 1
        local amount
        while (b[i]) do
                if strfind(line, TheoryCraft_Locale.Set) then
                        return returndata
                end
                if string.find(line, b[i].text) then
                        if b[i].amount == "n" then
                                amount = tonumber(findpattern(findpattern(line, b[i].text), "%d+"))
                        elseif b[i].amount == "n/100" then
                                amount = tonumber(findpattern(findpattern(line, b[i].text), "%d+"))/100
                        else
                                amount = b[i].amount
                        end
                        returndata[b[i].type] = (returndata[b[i].type] or 0)-amount
                end
                i = i + 1
        end
        return returndata
end

function TheoryCraft_DequipEffect (slotname, returndata, equippedsets)
        if (slotname ~= "test") then
                TheoryCraftTooltip:SetOwner(UIParent,"ANCHOR_NONE")
                TheoryCraftTooltip:SetInventoryItem ("player", GetInventorySlotInfo(slotname.."Slot"))
        end
        local index = 1
        local i, found
        local ltext
        while (getglobal("TheoryCraftTooltipTextLeft"..index) ~= nil) do
                ltext = getglobal("TheoryCraftTooltipTextLeft"..index):GetText();
                if (ltext == nil) then
                        break
                end
                if strfind(ltext, TheoryCraft_Locale.Set) then
                        if equippedsets then
                                ltext = string.sub(ltext, 1, string.find(ltext, TheoryCraft_Locale.Set)-2)
                                equippedsets[ltext] = (equippedsets[ltext] or 0)+1
                        end
                        break
                else
                        returndata = TheoryCraft_DequipLine(ltext, returndata)
                end
                index = index + 1
        end
        TheoryCraftTooltip:ClearLines()
        return returndata
end

function TheoryCraft_AddToCustom(linkid)
        if (TheoryCraft_Settings["CustomOutfit"] == nil) then
                TheoryCraft_Settings["CustomOutfit"] = TheoryCraft_Outfits[3]
        end
        if (TheoryCraft_Settings["CustomOutfit"].slots == nil) then
                TheoryCraft_Settings["CustomOutfit"].slots = {}
        end
        if (linkid == nil) or (string.find(linkid, "item:%d+:%d+:%d+:%d+") == nil) then
                return
        end
        linkid = string.sub(linkid, string.find(linkid, "item:%d+:%d+:%d+:%d+"))
        if linkid == nil then
                return
        end
        TheoryCraftTooltip:SetOwner(UIParent,"ANCHOR_NONE")
        TheoryCraftTooltip:SetHyperlink(linkid)
        if (getglobal(TheoryCraftTooltip:GetName().."TextLeft1") == nil) then
                return
        end
        local itemname, itemlink, itemrarity = GetItemInfo(linkid)
        local r, g, b, hex = GetItemQualityColor(itemrarity) 
        itemname = hex.."|H"..itemlink.."|h["..itemname.."]|h|r"
        local index = 1
        local ltext = getglobal(TheoryCraftTooltip:GetName().."TextLeft"..index):GetText()
        if ltext == nil then
                return
        end
        local found = false
        local realslot = false
        local both = false
        while (ltext ~= nil) and (found == false) do
                local i = 1
                while (TheoryCraft_SlotNames[i]) do
                        if (ltext == TheoryCraft_SlotNames[i].text) then
                                if (found) then
                                        if TheoryCraft_Settings["CustomOutfit"].slots[found] then
                                                TheoryCraft_Settings["CustomOutfit"].slots[TheoryCraft_SlotNames[i].slot] = TheoryCraft_Settings["CustomOutfit"].slots[found]
                                        end
                                else
                                        found = TheoryCraft_SlotNames[i].slot
                                        realslot = TheoryCraft_SlotNames[i].realslot
                                        both = TheoryCraft_SlotNames[i].both
                                end
                        end
                        i = i + 1
                end
                ltext = getglobal(TheoryCraftTooltip:GetName().."TextLeft"..index):GetText()
                index = index + 1
        end
        if found == false then
                return
        end
        if both then
                TheoryCraft_Settings["CustomOutfit"].slots["Off HandItemName"] = nil
                TheoryCraft_Settings["CustomOutfit"].slots["Off Hand"] = nil
        end
        local itemdata = {}
        local equippedsets = {}
        TheoryCraft_AddEquipEffect (realslot, "test", itemdata, equippedsets)
        TheoryCraft_Settings["CustomOutfit"].slots[found] = {}
        TheoryCraft_Settings["CustomOutfit"].slots[found]["data"] = itemdata
        TheoryCraft_Settings["CustomOutfit"].slots[found]["name"] = itemname
        TheoryCraftTooltip:SetOwner(UIParent,"ANCHOR_NONE")
        TheoryCraftTooltip:SetHyperlink(linkid)
        if (getglobal(TheoryCraftTooltip:GetName().."TextLeft1") == nil) then
                return
        end
        local returndata = {}
        returndata = TheoryCraft_DequipEffect ("test", returndata)
        TheoryCraft_Settings["CustomOutfit"].slots[found]["stats"] = {}
        local a = TheoryCraft_Settings["CustomOutfit"].slots[found]["stats"]
        for k,v in pairs(equippedsets) do
                a.settype = k
        end
        if returndata["meleecritchance"] then a.meleecritchance = -returndata["meleecritchance"] end
        if returndata["formattackpower"] then a.formattackpower = -returndata["formattackpower"] end
        if returndata["rangedattackpower"] then a.rangedattackpower = -returndata["rangedattackpower"] end
        if returndata["attackpower"] then a.attackpower = -returndata["attackpower"] end
        if returndata["strength"] then a.strength = -returndata["strength"] end
        if returndata["agility"] then a.agility = -returndata["agility"] end
        if returndata["stamina"] then a.stamina = -returndata["stamina"] end
        if returndata["intellect"] then a.intellect = -returndata["intellect"] end
        if returndata["spirit"] then a.spirit = -returndata["spirit"] end
        if returndata["totalmana"] then a.totalmana = -returndata["totalmana"] end
        if returndata["totalhealth"] then a.totalhealth = -returndata["totalhealth"] end
end

Generated by GNU Enscript 1.6.5.90.