-- ------------------------------------------------------------------------------ -- -- TradeSkillMaster -- -- https://tradeskillmaster.com -- -- All Rights Reserved - Detailed license information included with addon. -- -- ------------------------------------------------------------------------------ -- local TSM = select(2, ...) ---@type TSM local CraftString = TSM.Init("Util.CraftString") ---@class Util.CraftString -- ============================================================================ -- Module Functions -- ============================================================================ ---Creates a craft string from its components. ---@param spellId number The craft's spell ID ---@param rank? number The rank of the craft ---@param level? number The level of the craft ---@param level? number The quality of the craft ---@return string function CraftString.Get(spellId, rank, level, quality) local suffix = "" if rank and rank > 0 then assert(not level or level <= 0) assert(not quality or quality <= 0) suffix = ":r"..rank end if level and level > 0 then assert(not rank or rank <= 0) assert(not quality or quality <= 0) suffix = ":l"..level end if quality and quality > 0 then assert(not rank or rank <= 0) assert(not level or level <= 0) suffix = ":q"..quality end return "c:"..spellId..suffix end ---Creates a craft string from a recipe string. ---@param recipeString string The recipe string ---@return string function CraftString.FromRecipeString(recipeString) local spellId = strmatch(recipeString, "^r:(%d+)") local rank = tonumber(strmatch(recipeString, ":r(%d+)")) local level = tonumber(strmatch(recipeString, ":l(%d+)")) local quality = tonumber(strmatch(recipeString, ":q(%d+)")) return CraftString.Get(spellId, rank, level, quality) end ---Gets the spell ID from a craft string. ---@param craftString string The craft string ---@return number function CraftString.GetSpellId(craftString) return tonumber(strmatch(craftString, "^c:(%d+)")) end ---Gets the rank from the craft string. ---@param craftString string The craft string ---@return number? function CraftString.GetRank(craftString) return tonumber(strmatch(craftString, ":r(%d+)")) end ---Gets the level from the craft string. ---@param craftString string The craft string ---@return number? function CraftString.GetLevel(craftString) return tonumber(strmatch(craftString, ":l(%d+)")) end ---Gets the quality from the craft string. ---@param craftString string The craft string ---@return number|nil function CraftString.GetQuality(craftString) return tonumber(strmatch(craftString, ":q(%d+)")) end ---Gets a new craft string with the specified level. ---@param craftString string The craft string ---@param level number The new level function CraftString.SetLevel(craftString, level) local spellId = CraftString.GetSpellId(craftString) assert(not CraftString.GetRank(craftString) and not CraftString.GetQuality(craftString)) return CraftString.Get(spellId, nil, level, nil) end ---Gets a new craft string with the specified level. ---@param craftString string The craft string ---@param level number The new level function CraftString.SetQuality(craftString, quality) local spellId = CraftString.GetSpellId(craftString) assert(not CraftString.GetRank(craftString) and not CraftString.GetLevel(craftString)) return CraftString.Get(spellId, nil, nil, quality) end