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, duration) if not level or level < 0 then return end local dt = potionData[effect] if dt then local g_desc = dt.desc or unknownDisplay variables = toTable(dt.vars) local desc local color = dt.ttColor or colorCode(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) return ('&%s%s %s &r&f(%s&f)/&r%s//&r'):format(				color, effect, level > 0 and string._toRoman(level) or '?',				duration or unknownDisplay, desc				) else return unknownDisplay end end local function generateTooltip(potionname, level) local value = potionData[potionname] local localret = {} local duration, composite = value.duration, value.composite local tooltip if composite then for i, eff in ipairs(toTable(composite)) do				if eff == 'self' then tooltip = effectText(potionname, level, duration) else local eff = toTable(eff) local e, l = eff[1], eff[2] or 1 if type(l) == 'table' then l = l[level] end local compDuration = composite.duration if type(compDuration) == 'table' then compDuration = compDuration[level] end tooltip = effectText(e, l or 0, compDuration) end table.push(localret, tooltip) end else tooltip = effectText(potionname, level, duration) table.push(localret, tooltip) end return table.concat(localret) end local ret = {} for potionname, value in pairs(potionData) do		local name = ('%s Potion'):format(potionname) local rarityTbl = toTable(value.rarity) for level = 1, value.maxLevel or 0, 1 do			local nameRoman = ('%s %s Potion'):format(potionname, string._toRoman(level)) local nameArabic = ('%s %s Potion'):format(potionname, level) local tooltip = generateTooltip(potionname, level) local rarity = rarityTbl[level] or 'C'			local raritytext = rarityTbl[level] and '{l}' or '{r}&l???' table.push(ret, { nameRoman, name, tooltip, raritytext, r = rarity }) table.push(ret, { nameArabic, name, tooltip, raritytext, r = rarity, title = '{r}'..nameRoman }) end local tooltip = generateTooltip(potionname, 0) local rarity = rarityTbl[1] or 'C' table.push(ret, { name, name, tooltip, '{r}&l???', r = rarity, title = ('{r}%s ? Potion'):format(potionname) }) end return ret end

return p