vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
TheoryCraft_Data.Talents = {}
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_AddAllTalents(data, ignoreforce)
        local i = 1
        local forcedrank = 0


        data["strmultiplier"] = 1
        data["agimultiplier"] = 1
        data["stammultiplier"] = 1
        data["intmultiplier"] = 1
        data["spiritmultiplier"] = 1
        data["manamultiplier"] = 1
        data["healthmultiplier"] = 1
        local _, race = UnitRace("player")
        if (race == "Gnome") then
                data["intmultiplier"] = 1.05
        end
        if (race == "Human") then
                data["spiritmultiplier"] = 1.05
        end
        if (race == "Tauren") then
                data["healthmultiplier"] = 1.05
        end
        data["strmultiplierreal"] = data["strmultiplier"]
        data["agimultiplierreal"] = data["agimultiplier"]
        data["stammultiplierreal"] = data["stammultiplier"]
        data["intmultiplierreal"] = data["intmultiplier"]
        data["spiritmultiplierreal"] = data["spiritmultiplier"]
        data["manamultiplierreal"] = data["manamultiplier"]
        data["healthmultiplierreal"] = data["healthmultiplier"]

        local nameTalent, icon, iconx, icony, currank, maxRank = GetTalentInfo(1, 1)
        if nameTalent == nil then return end
        TheoryCraft_Data.TalentsHaveBeenRead = true

        local _, catform, bearform
        if class == "DRUID" then
                _, _, bearform = GetShapeshiftFormInfo(1)
                _, _, catform = GetShapeshiftFormInfo(3)
        end

        while (TheoryCraft_Talents[i]) do
                if (class == TheoryCraft_Talents[i].class) then
                        if (TheoryCraft_Talents[i].tree) and (TheoryCraft_Talents[i].number) then
                                nameTalent, icon, iconx, icony, currank, maxRank= GetTalentInfo(TheoryCraft_Talents[i].tree, TheoryCraft_Talents[i].number)
                                if (currank > 0) then
                                        if (TheoryCraft_Talents[i].firstrank) then
                                                if currank > 1 then
                                                        currank = TheoryCraft_Talents[i].firstrank + (currank-1)*TheoryCraft_Talents[i].perrank
                                                else
                                                        currank = TheoryCraft_Talents[i].firstrank
                                                end
                                        else
                                                currank = currank*TheoryCraft_Talents[i].perrank
                                        end
                                end
                        else
                                currank = 0
                        end
                        if ((TheoryCraft_Talents[i].forceto == nil) or (TheoryCraft_Talents[i].forceto == -1) or (ignoreforce)) then
                                if (TheoryCraft_Talents[i].forceonly == nil) then
                                        data[TheoryCraft_Talents[i].bonustype] = (data[TheoryCraft_Talents[i].bonustype] or 0) + currank
                                end
                        else
                                if (TheoryCraft_Talents[i].firstrank) and (TheoryCraft_Talents[i].forceto > 0) then
                                        forcedrank = TheoryCraft_Talents[i].firstrank
                                        if TheoryCraft_Talents[i].forceto > 1 then
                                                forcedrank = forcedrank + (TheoryCraft_Talents[i].forceto-1)*TheoryCraft_Talents[i].perrank
                                        end
                                else
                                        forcedrank = TheoryCraft_Talents[i].forceto*TheoryCraft_Talents[i].perrank
                                end
                                if (TheoryCraft_Talents[i].bonustype == "Predatory") and ((catform) or (bearform)) then
                                        data["AttackPowerTalents"] = (data["AttackPowerTalents"] or 0)-UnitLevel("player")*currank+UnitLevel("player")*forcedrank
                                end
                                if TheoryCraft_Talents[i].bonustype == "CritReport" then
                                        data["CritChangeTalents"] = (data["CritChangeTalents"] or 0)+currank-forcedrank
                                end
                                if strfind(TheoryCraft_Talents[i].bonustype, "modifier") then
                                        data[TheoryCraft_Talents[i].bonustype] = (data[TheoryCraft_Talents[i].bonustype] or 0) + currank
                                        data[string.sub(TheoryCraft_Talents[i].bonustype, 1, string.find(TheoryCraft_Talents[i].bonustype, "modifier")-1).."talentmod"] = forcedrank - currank + (data[string.sub(TheoryCraft_Talents[i].bonustype, 1, string.find(TheoryCraft_Talents[i].bonustype, "modifier")-1).."talentmod"] or 0)
                                elseif strfind(TheoryCraft_Talents[i].bonustype, "manacost") then
                                        data[TheoryCraft_Talents[i].bonustype] = (((data[TheoryCraft_Talents[i].bonustype] or 0)+1)*((1+forcedrank)/(1+currank)))-1
                                else
                                        if strfind(TheoryCraft_Talents[i].bonustype, "casttime") then
                                                data[TheoryCraft_Talents[i].bonustype] = (data[TheoryCraft_Talents[i].bonustype] or 0) - currank + forcedrank
                                        else
                                                data[TheoryCraft_Talents[i].bonustype] = (data[TheoryCraft_Talents[i].bonustype] or 0) + forcedrank
                                        end
                                end
                        end
                        if TheoryCraft_Talents[i].bonustype == "Formcritchance" then
                                data["Formcritchancereal"] = (data["Formcritchancereal"] or 0)+currank
                        end
                        local _, _, spec = strfind(TheoryCraft_Talents[i].bonustype, "(.+)spec")
                        if spec then
                                data[spec.."specreal"] = (data[spec.."specreal"] or 0)+currank
                        end
                        if (TheoryCraft_Talents[i].bonustype == "HotW") then
                                if catform then
                                        if ((TheoryCraft_Talents[i].forceto == nil) or (TheoryCraft_Talents[i].forceto == -1) or (ignoreforce)) then
                                                data["strmultiplier"] = data["strmultiplier"]+currank
                                        else
                                                data["strmultiplier"] = data["strmultiplier"]+forcedrank
                                        end
                                        data["strmultiplierreal"] = data["strmultiplierreal"]+currank
                                end
                                if bearform then
                                        if ((TheoryCraft_Talents[i].forceto == nil) or (TheoryCraft_Talents[i].forceto == -1) or (ignoreforce)) then
                                                data["stammultiplier"] = data["stammultiplier"]+currank
                                        else
                                                data["stammultiplier"] = data["stammultiplier"]+forcedrank
                                        end
                                        data["stammultiplierreal"] = data["stammultiplierreal"]+currank
                                end
                        end
                        if (TheoryCraft_Talents[i].bonustype == "healthmultiplier") then
                                data["healthmultiplierreal"] = data["healthmultiplierreal"]+currank
                        end
                        if (TheoryCraft_Talents[i].bonustype == "manamultiplier") then
                                data["manamultiplierreal"] = data["manamultiplierreal"]+currank
                        end
                        if (TheoryCraft_Talents[i].bonustype == "strmultiplier") then
                                data["strmultiplierreal"] = data["strmultiplierreal"]+currank
                        end
                        if (TheoryCraft_Talents[i].bonustype == "agimultiplier") then
                                data["agimultiplierreal"] = data["agimultiplierreal"]+currank
                        end
                        if (TheoryCraft_Talents[i].bonustype == "stammultiplier") then
                                data["stammultiplierreal"] = data["stammultiplierreal"]+currank
                        end
                        if (TheoryCraft_Talents[i].bonustype == "intmultiplier") then
                                data["intmultiplierreal"] = data["intmultiplierreal"]+currank
                        end
                        if (TheoryCraft_Talents[i].bonustype == "spiritmultiplier") then
                                data["spiritmultiplierreal"] = data["spiritmultiplierreal"]+currank
                        end
                end
                i = i + 1
        end
end

function TheoryCraft_UpdateTalents(dontgen)
        local old = TheoryCraft_Data.Talents
--      local old3 = TheoryCraft_Data.TalentsTest
        TheoryCraft_Data.Talents = {}
        TheoryCraft_AddAllTalents(TheoryCraft_Data.Talents)
--      TheoryCraft_Data.TalentsTest = {}
--      TheoryCraft_AddAllTalents(TheoryCraft_Data.TalentsTest)
        if dontgen == nil then
                local old2 = TheoryCraft_Data.Stats
                TheoryCraft_Data.Stats = {}
                TheoryCraft_LoadStats()
                if TheoryCraft_IsDifferent(old, TheoryCraft_Data.Talents) or TheoryCraft_IsDifferent(old2, TheoryCraft_Data.Stats) then
                        TheoryCraft_GenerateAll()
                end
        end
end

Generated by GNU Enscript 1.6.5.90.