Module:Items

local p = {}

local availabilityT = require("Module:Availability")

function insert(str1, str2, pos) return str1:sub(1,pos)..str2..str1:sub(pos+1) end

function isEmpty(s) return s == nil or s == '' end

function split(str, pattern) local out = {}

for m in string.gmatch(str, "[^" .. pattern .. "]+") do     table.insert(out, m)    end

return out end

function p.italicizeGameInTitle(frame) local title = frame.args[1] local openParenthIndex = string.len(title) - (title:reverse):find("%(")   local closeParenthIndex = string.len(title) -  (title:reverse):find("%)")

local newTitle = title newTitle = insert(newTitle, "''", openParenthIndex + 1) newTitle = insert(newTitle, "''", closeParenthIndex + 2)

local root = mw.html.create root:wikitext(newTitle) return newTitle end

function p.outputSortedFurniture (frame) local game = frame.args[2] local data = mw.text.jsonDecode(frame.args[1]) table.sort(data, function(k1, k2) return string.len(k1.name) < string.len(k2.name) end) local furnitureOutput = "" for k, v in ipairs(data) do       furnitureOutput = furnitureOutput .. frame:expandTemplate{ title = "HouseItem", args = { item = v['name'], count = v['count'], img = v['img'], note = v['note'], game = game } } end return furnitureOutput end

function p.outputAvailabilitiesFromList (frame) local data = frame.args[1] local availabilityTable = split( data, "," ) local availability = "" local availabilityList = "" local mainAvailability = "" local availabilityText = "" local availabilityOutput = "" for k, avail in ipairs(availabilityTable) do       if avail:match("%((.-)%)") then availabilityText = avail:match("(.+)%("):gsub("^%s*(.-)%s*$", "%1")           availability = availabilityT.outputAvailability(availabilityText,"","","",avail:match("%((.-)%)"))        else        	availabilityText = avail:gsub("^%s*(.-)%s*$", "%1")            availability = availabilityT.outputAvailability(availabilityText)        end        availabilityList = availabilityList .. string.gsub(availability, "\s+$", "")    end

local root = mw.html.create root:wikitext(availabilityList) return root end

function p.outputAvailabilitiesFromListWithoutNotes (frame) local data = frame.args[1] local availabilityTable = split( data, "," ) local availability = "" local availabilityList = "" local mainAvailability = "" local availabilityText = "" local availabilityOutput = "" for k, avail in ipairs(availabilityTable) do       if avail:match("%((.-)%)") then availabilityText = avail:match("(.+)%("):gsub("^%s*(.-)%s*$", "%1")           availability = availabilityT.outputAvailability(availabilityText)        else        	availabilityText = avail:gsub("^%s*(.-)%s*$", "%1")            availability = availabilityT.outputAvailability(availabilityText)        end        availabilityList = availabilityList .. string.gsub(availability, "\s+$", "")    end

local root = mw.html.create root:wikitext(availabilityList) return root end

function p.outputAvailabilitiesCategoriesFromList (frame) local data = frame.args[1] local availabilityTable = split( data, "," ) local availability = "" local availabilityList = "" local mainAvailability = "" local availabilityText = "" local availabilityOutput = "" for k, avail in ipairs(availabilityTable) do       if avail:match("%((.-)%)") then availabilityText = avail:match("(.+)%("):gsub("^%s*(.-)%s*$", "%1")       	if availabilityText == "Unobtainable" then        		availability = ''        		if frame.args['game'] == "DnM" then        			availability = availablity .. ' '        		elseif frame.args['game'] == "DnM+" then        			availability = availablity .. ' '        		elseif frame.args['game'] == "PG" then        			availability = availablity .. ' '        		elseif frame.args['game'] == "DnMe+" then        			availability = availablity .. ' '        		elseif frame.args['game'] == "WW" then        			availability = availablity .. ' '        		elseif frame.args['game'] == "CF" then        			availability = availablity .. ' '        		elseif frame.args['game'] == "NL" then        			availability = availablity .. ' '        		elseif frame.args['game'] == "HHD" then        			availability = availablity .. ' '        		elseif frame.args['game'] == "PC" then availability = availablity .. ' '       		elseif frame.args['game'] == "NH" then availability = availablity .. ' '       		end else availability = '' end else availabilityText = avail:gsub("^%s*(.-)%s*$", "%1") if availabilityText == "Unobtainable" then availability = '' if frame.args['game'] == "DnM" then availability = availablity .. ' '       		elseif frame.args['game'] == "DnM+" then availability = availablity .. ' '       		elseif frame.args['game'] == "PG" then availability = availablity .. ' '       		elseif frame.args['game'] == "DnMe+" then availability = availablity .. ' '       		elseif frame.args['game'] == "WW" then availability = availablity .. ' '       		elseif frame.args['game'] == "CF" then availability = availablity .. ' '       		elseif frame.args['game'] == "NL" then availability = availablity .. ' '       		elseif frame.args['game'] == "HHD" then availability = availablity .. ' '       		elseif frame.args['game'] == "PC" then availability = availablity .. ' '       		elseif frame.args['game'] == "NH" then availability = availablity .. ' '       		end else availability = '' end end availabilityList = availabilityList .. string.gsub(availability, "\s+$", "") end

local root = mw.html.create root:wikitext(availabilityList) return root end

function p.outputVillagerFromList (frame) local data = frame.args[1] local villagerTable = split( data, "," ) local villager = "" local villagerList = "" local mainVillager = "" local villagerOutput = "" for k, villa in ipairs(villagerTable) do       villager = availabilityT.outputAvailability("Villager", villa:gsub("^%s*(.-)%s*$", "%1")) villagerList = villagerList .. string.gsub(villager, "\s+$", "") end

local root = mw.html.create root:wikitext(villagerList) return root end

function p.outputRVAvailabilitiesFromList (frame) local data = frame.args[1] local rvTable = split( data, "," ) local rv = "" local rvList = "" local mainRV = "" local rvOutput = "" for k, villa in ipairs(rvTable) do       rv = availabilityT.outputAvailability("RV", villa:gsub("^%s*(.-)%s*$", "%1")) rvList = rvList .. string.gsub(rv, "\s+$", ""); end

local root = mw.html.create root:wikitext(rvList) return root end

function p.outputHousemates (frame) local data = frame.args[1] local housemateTable = split( data, "," ) local housemate = "" local housemateList = "" local mainHousemate = "" local housemateOutput = "" for k, mate in ipairs(housemateTable) do   	if k == #housemateTable and k-1 ~= 0 then housemateList = housemateList .. 'and ' end housemate = "" .. mate:gsub("^%s*(.-)%s*$", "%1") .. "" housemateList = housemateList .. string.gsub(housemate, "\s+$", "") if k == #housemateTable then housemateList = housemateList .. ''       elseif k-1 == 0 and k+1 == #housemateTable then housemateList = housemateList .. ' '       else housemateList = housemateList .. ', '       end end

local root = mw.html.create root:wikitext(housemateList) return root end

function p.outputStickersFighters (frame) local data = frame.args[1] local stickersTable = split( data, "," ) local fighters = "" local fightersList = "" local mainFighters = "" local fightersOutput = "" for k, mate in ipairs(stickersTable) do   	if mate:gsub("^%s*(.-)%s*$", "%1") == "All fighters" then fightersList = fightersList .. "All fighters" else if k == #stickersTable and k-1 ~= 0 then fightersList = fightersList .. 'and ' end fighters = "" .. mate:gsub("^%s*(.-)%s*$", "%1") .. "" fightersList = fightersList .. string.gsub(fighters, "\s+$", "") if k == #stickersTable then fightersList = fightersList .. ''	       elseif k-1 == 0 and k+1 == #stickersTable then fightersList = fightersList .. ' '	       else fightersList = fightersList .. ', '	       end end end

local root = mw.html.create root:wikitext(fightersList) return root end

function fighterFormat(fighter) if fighter == 'Villager' then return 'Villager' elseif fighter == 'Isabelle' then return 'Isabelle' else return  .. fighter ..  end end

function p.outputEnemies(frame) local data = mw.text.jsonDecode(mw.text.decode(frame.args['1'])) local enemy = "" for k, e in pairs(data) do enemy = enemy .. "" if not isEmpty(e['fighter-condition']) then enemy = enemy .. e['fighter-condition'] .. " "   	end if not isEmpty(e['fighter-variant']) then enemy = enemy .. e['fighter-variant'] .. " "   	end enemy = enemy .. fighterFormat(e['fighter']) .. "" end return enemy end

function p.outputRules(frame) local data = mw.text.jsonDecode(mw.text.decode(frame.args['1'])) local rules = "" for k, r in pairs(data) do rules = rules .. "" .. r['rule'] .. "" end return rules end

function p.outputConditions(frame) local data = mw.text.jsonDecode(mw.text.decode(frame.args['1'])) local conditions = "" for k, r in pairs(data) do conditions = conditions .. "" .. r['condition'] .. "" end return conditions end

return p