Module:Potion

local loader = require('Module:Loader') local string, table, yesno, uitext = loader.require('String', 'Table', 'Yesno', 'UIText') local potionData = loader.loadData('Potion/Data')

local p = {} local unknownDisplay = '&r&f&l???&r'

--- -- Generates table for Module:Inventory slot/Templates --- function p.getPotionsTemplate local function toTable(v) local t = type(v) == 'table' and table.deepCopy(v, true) or {v} return t	end local function colorCode(col) local temp = uitext.getFormatting(col):match('^[0-9a-z]$') and uitext.getFormatting(col) or uitext.getColorCode(col) return (temp or ''):match('^[0-9a-z]$') and temp or 'f'	end local function effectText(effect, level, durationOverride) local dt = potionData[effect] if dt then local dur, g_desc = dt.duration or unknownDisplay, dt.desc or unknownDisplay variables, rarityTbl = toTable(dt.vars), toTable(dt.rarity) local desc, rarity local color = colorCode(dt.ttColor or dt.color or '&f') desc = g_desc if level ~= 0 then for i, var in ipairs(variables) do					desc = desc:gsub(('{%d}'):format(i-1), var[level] or unknownDisplay) end end desc = desc:gsub('{%d}', unknownDisplay) rarity = rarityTbl[level == 0 and 1 or level] or 'C'			return ('&%s%s %s &f(%s&f)/&r%s'):format(				color, effect, level == 0 and '?' or string._toRoman(level),				durationOverride or dur, desc				), rarity else return unknownDisplay, 'C'		end end local ret = {} for potionname, value in pairs(potionData) do		local name = ('%s Potion'):format(potionname) local effect = value.effect for level = 1, value.maxLevel, 1 do			local localret = {} local nameRoman = ('%s %s Potion'):format(potionname, string._toRoman(level)) local nameArabic = ('%s %s Potion'):format(potionname, level) local tooltip, rarity if composite then for i, eff in ipairs(toTable(composite)) do					if eff == 'self' then tooltip, rarity = effectText(potionname, level) else local eff = toTable(eff) local e, l, d = eff[1], eff[2] or 1, eff[3] tooltip, rarity = effectText(e, l, d)					end table.push(localret, tooltip, '//') end else tooltip, rarity = effectText(potionname, level) table.push(localret, tooltip, '//') end table.push(ret, { nameRoman, name, table.concat(localret), '$l', r = rarity }) table.push(ret, { nameArabic, name, table.concat(localret), '$l', r = rarity }) end local tooltip0, rarity0 = effectText(potionname, 0) table.push(ret, { name, name, tooltip0..'//', unknownDisplay, r = rarity0, title = ('$r%s ? Potion'):format(potionname) }) end return ret end

return p