Module:Items
From Nookipedia, the Animal Crossing wiki
Revision as of 21:16, October 14, 2022 by PanchamBro (talk | contribs) (adding missing space to the function)
Documentation for this module may be created at Module:Items/doc
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 = '[[Category:Unobtainable items]]'
if frame.args['game'] == "DnM" then
availability = availablity .. ' [[Category:Unobtainable items in Doubutsu no Mori]]'
elseif frame.args['game'] == "DnM+" then
availability = availablity .. ' [[Category:Unobtainable items in Doubutsu no Mori+]]'
elseif frame.args['game'] == "PG" then
availability = availablity .. ' [[Category:Unobtainable items in Animal Crossing]]'
elseif frame.args['game'] == "DnMe+" then
availability = availablity .. ' [[Category:Unobtainable items in Doubutsu no Mori e+]]'
elseif frame.args['game'] == "WW" then
availability = availablity .. ' [[Category:Unobtainable items in Wild World]]'
elseif frame.args['game'] == "CF" then
availability = availablity .. ' [[Category:Unobtainable items in City Folk]]'
elseif frame.args['game'] == "NL" then
availability = availablity .. ' [[Category:Unobtainable items in New Leaf]]'
elseif frame.args['game'] == "HHD" then
availability = availablity .. ' [[Category:Unobtainable items in Happy Home Designer]]'
elseif frame.args['game'] == "PC" then
availability = availablity .. ' [[Category:Unobtainable items in Pocket Camp]]'
elseif frame.args['game'] == "NH" then
availability = availablity .. ' [[Category:Unobtainable items in New Horizons]]'
end
else
availability = '[[Category:Acquired from ' .. availabilityText .. ']]'
end
else
availabilityText = avail:gsub("^%s*(.-)%s*$", "%1")
if availabilityText == "Unobtainable" then
availability = '[[Category:Unobtainable items]]'
if frame.args['game'] == "DnM" then
availability = availablity .. ' [[Category:Unobtainable items in Doubutsu no Mori]]'
elseif frame.args['game'] == "DnM+" then
availability = availablity .. ' [[Category:Unobtainable items in Doubutsu no Mori+]]'
elseif frame.args['game'] == "PG" then
availability = availablity .. ' [[Category:Unobtainable items in Animal Crossing]]'
elseif frame.args['game'] == "DnMe+" then
availability = availablity .. ' [[Category:Unobtainable items in Doubutsu no Mori e+]]'
elseif frame.args['game'] == "WW" then
availability = availablity .. ' [[Category:Unobtainable items in Wild World]]'
elseif frame.args['game'] == "CF" then
availability = availablity .. ' [[Category:Unobtainable items in City Folk]]'
elseif frame.args['game'] == "NL" then
availability = availablity .. ' [[Category:Unobtainable items in New Leaf]]'
elseif frame.args['game'] == "HHD" then
availability = availablity .. ' [[Category:Unobtainable items in Happy Home Designer]]'
elseif frame.args['game'] == "PC" then
availability = availablity .. ' [[Category:Unobtainable items in Pocket Camp]]'
elseif frame.args['game'] == "NH" then
availability = availablity .. ' [[Category:Unobtainable items in New Horizons]]'
end
else
availability = '[[Category:Acquired from ' .. availabilityText .. ']]'
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 = "[[smashwiki:" .. mate:gsub("^%s*(.-)%s*$", "%1") .. " (SSBB)|" .. 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 (Super Smash Bros. series)|Villager]]'
elseif fighter == 'Isabelle' then
return '[[Isabelle]]'
else
return '[[smashwiki:' .. fighter .. ' (SSBU)|' .. 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 .. "<li style=\"list-style-position: inside; padding-left: 5px\">"
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']) .. "</li>"
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 .. "<li style=\"list-style-position: inside; padding-left: 5px\">" .. r['rule'] .. "</li>"
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 .. "<li style=\"list-style-position: inside; padding-left: 5px\">" .. r['condition'] .. "</li>"
end
return conditions
end
return p