Module:NHVillagerItemOutput

local p = {} local cargo = mw.ext.cargo

function tableEmpty(s) return next(s) == nil end

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

function p.HHPOutput( frame, typeItem ) local print = '' local currency

-- Cargo query for hhp_villager (without facilities) local tables1 = 'hhp_villager' local fields1 = "hhp_villager.name=name,hhp_villager._pageTitle=pageName,hhp_villager.icon=icon" local args1 = { where = "hhp_villager.facility=0 AND (hhp_villager.unlocked_items LIKE '%\"" .. frame.args['1']:gsub("\'","\\'") .. "\"%' OR hhp_villager.item1 = \"" .. frame.args['1']:gsub("\'","\\'") .. "\" OR hhp_villager.item2 = \"" .. frame.args['1']:gsub("\'","\\'") .. "\" OR hhp_villager.item3 = \"" .. frame.args['1']:gsub("\'","\\'") .. "\")", orderBy = 'hhp_villager.name_sort', groupBy = 'hhp_villager.name_sort', limit = 500, default = '' }   local resultsHHP = cargo.query( tables1, fields1, args1 ) -- Cargo query for hhp_villager (only facilities) local tables2 = 'hhp_villager' local fields2 = "hhp_villager.name=name,hhp_villager._pageTitle=pageName" local args2 = { where = "hhp_villager.facility=1 AND hhp_villager.unlocked_items LIKE '%\"" .. frame.args['1']:gsub("\'","\\'") .. "\"%'", orderBy = 'hhp_villager.name_sort', groupBy = 'hhp_villager.name_sort', limit = 500, default = '' }   local resultsHHP_Facility = cargo.query( tables2, fields2, args2 ) -- Cargo query for hhp_villager (required items) local tables3 = 'hhp_villager' local fields3 = "hhp_villager.name=name,hhp_villager._pageTitle=pageName,hhp_villager.icon=icon" local args3 = { where = "hhp_villager.facility=0 AND (hhp_villager.item1 = \"" .. frame.args['1']:gsub("\'","\\'") .. "\" OR hhp_villager.item2 = \"" .. frame.args['1']:gsub("\'","\\'") .. "\" OR hhp_villager.item3 = \"" .. frame.args['1']:gsub("\'","\\'") .. "\")", orderBy = 'hhp_villager.name_sort', groupBy = 'hhp_villager.name_sort', limit = 500, default = '' }   local resultsHHP_Required = cargo.query( tables3, fields3, args3 ) -- Cargo query for hhp_villager (required item under category for facilities) local tables4 = 'hhp_facility_category' local fields4 = "hhp_facility_category.category=category,hhp_facility_category.room=room,hhp_facility_category._pageTitle=pageName,hhp_facility_category.facility=facility" local args4 = { where = "hhp_facility_category.items LIKE '%\"" .. frame.args['1']:gsub("\'","\\'") .. "\"%'", orderBy = 'hhp_facility_category.facility,hhp_facility_category.room', groupBy = 'hhp_facility_category._pageTitle', limit = 500, default = '' }   local resultsHHP_Category = cargo.query( tables4, fields4, args4 ) local tables5 local fields5 local args5 local resultsHHP_Wardell if typeItem == "furniture" then -- Cargo query for nh_furniture (Wardell price) tables5 = 'nh_furniture' fields5 = "nh_furniture.buy2_price=price,nh_furniture.availability2=availability2,nh_furniture.buy2_currency=currency" args5 = { where = "nh_furniture._pageName = \"Item:" .. frame.args['1']:gsub("\'","\\'") .. " (New Horizons)\"", limit = 2000, groupBy = 'nh_furniture._pageName', default = '', }	   resultsHHP_Wardell = cargo.query( tables5, fields5, args5 ) elseif typeItem == "interior" then -- Cargo query for nh_interior (Wardell price) tables5 = 'nh_interior' fields5 = "nh_interior.buy2_price=price,nh_interior.availability2=availability2,nh_interior.buy2_currency=currency" args5 = { where = "nh_interior._pageName = \"Item:" .. frame.args['1']:gsub("\'","\\'") .. " (New Horizons)\"", limit = 2000, groupBy = 'nh_interior._pageName', default = '', }	   resultsHHP_Wardell = cargo.query( tables5, fields5, args5 ) end

-- Cargo query for nh_clothing (equipable items) local tables6 = 'nh_clothing' local fields6 = "nh_clothing.vill_equip=equip" local args6 = { where = "nh_clothing._pageName = \"Item:" .. frame.args['1']:gsub("\'","\\'") .. " (New Horizons)\"", limit = 2000, groupBy = 'nh_clothing._pageName', default = '', }   local resultsVill_Equip = cargo.query( tables6, fields6, args6 ) -- Cargo query for nh_clothing (handbags) local tables7 = 'nh_clothing' local fields7 = "nh_clothing.handbag=handbag" local args7 = { where = "nh_clothing._pageName = \"Item:" .. frame.args['1']:gsub("\'","\\'") .. " (New Horizons)\"", limit = 2000, groupBy = 'nh_clothing._pageName', default = '', }   local resultsHandbags = cargo.query( tables7, fields7, args7 ) -- Cargo query for nh_recipe (Crafting) local tables8 = 'nh_recipe' local fields8 = "nh_recipe.en_name" local args8 = { where = "nh_recipe._pageName = \"Item:" .. frame.args['1']:gsub("\'","\\'") .. " (New Horizons)\"", limit = 2000, groupBy = 'nh_recipe._pageName', default = '', }	local resultsCrafting = cargo.query( tables8, fields8, args8 )

print = print .. "In " .. frame:preprocess('') if (not isEmpty(frame.args['hhpstatus']) and frame.args['hhpstatus']:lower == "starter") then print = print .. ", this item is available from the start for use in designing" if not isEmpty(frame.args['clothing']) and not (not tableEmpty(resultsHandbags) and resultsHandbags[1].handbag == "1") then print = print .. " and changing the clothes of" if not tableEmpty(resultsVill_Equip) and resultsVill_Equip[1].equip == "1" then print = print .. " a villager or" end print = print .. " the player" end print = print .. "."		if not tableEmpty(resultsHHP) then print = print .. ' '			for r = 1, #resultsHHP do		   	if r == #resultsHHP and r-1 ~= 0 then print = print .. 'and ' end print = print .. " " .. resultsHHP[r].name .. "" if r == #resultsHHP then print = print .. ''		       elseif r-1 == 0 and r+1 == #resultsHHP then print = print .. ' '		       else print = print .. ', '		       end end print = print .. " feature" if #resultsHHP == 1 then print = print .. "s" end print = print .. " this item in their order list when designing their vacation home." end elseif (not isEmpty(frame.args['hhpstatus']) and frame.args['hhpstatus']:lower == "sixhouses") then print = print .. ", this item is available for use in designing after completing six vacation homes and the school facility." if not tableEmpty(resultsHHP) then print = print .. ' '			for r = 1, #resultsHHP do		   	if r == #resultsHHP and r-1 ~= 0 then print = print .. 'and ' end print = print .. " " .. resultsHHP[r].name .. "" if r == #resultsHHP then print = print .. ''		       elseif r-1 == 0 and r+1 == #resultsHHP then print = print .. ' '		       else print = print .. ', '		       end end print = print .. " feature" if #resultsHHP == 1 then print = print .. "s" end print = print .. " this item in their order list when designing their vacation home." end elseif (not isEmpty(frame.args['hhpstatus']) and frame.args['hhpstatus']:lower == "hybrid") then print = print .. ", this item is unlocked for use in designing after listening to Leif's lecture at the school regarding hybrid flowers." if not tableEmpty(resultsHHP) then print = print .. ' '			for r = 1, #resultsHHP do		   	if r == #resultsHHP and r-1 ~= 0 then print = print .. 'and ' end print = print .. " " .. resultsHHP[r].name .. "" if r == #resultsHHP then print = print .. ''		       elseif r-1 == 0 and r+1 == #resultsHHP then print = print .. ' '		       else print = print .. ', '		       end end print = print .. " feature" if #resultsHHP == 1 then print = print .. "s" end print = print .. " this item in their order list when designing their vacation home." end elseif (not isEmpty(frame.args['hhpstatus']) and frame.args['hhpstatus']:lower == "plant") then print = print .. ", this item is unlocked for use in designing when doing the second villager's vacation house." if not tableEmpty(resultsHHP) then print = print .. ' '			for r = 1, #resultsHHP do		   	if r == #resultsHHP and r-1 ~= 0 then print = print .. 'and ' end print = print .. " " .. resultsHHP[r].name .. "" if r == #resultsHHP then print = print .. ''		       elseif r-1 == 0 and r+1 == #resultsHHP then print = print .. ' '		       else print = print .. ', '		       end end print = print .. " feature" if #resultsHHP == 1 then print = print .. "s" end print = print .. " this item in their order list when designing their vacation home." end elseif (not isEmpty(frame.args['hhpstatus']) and frame.args['hhpstatus']:lower == "partition") then print = print .. ", this item is unlocked for use in designing when doing the eighth villager's vacation house." elseif (not isEmpty(frame.args['hhpstatus']) and frame.args['hhpstatus']:lower == "party") then print = print .. ", this item is unlocked for use in designing after attending the first party hosted by Lottie for designing ten houses." if not tableEmpty(resultsHHP) then print = print .. ' '			for r = 1, #resultsHHP do		   	if r == #resultsHHP and r-1 ~= 0 then print = print .. 'and ' end print = print .. " " .. resultsHHP[r].name .. "" if r == #resultsHHP then print = print .. ''		       elseif r-1 == 0 and r+1 == #resultsHHP then print = print .. ' '		       else print = print .. ', '		       end end print = print .. " feature" if #resultsHHP == 1 then print = print .. "s" end print = print .. " this item in their order list when designing their vacation home." end elseif (not isEmpty(frame.args['hhpstatus']) and frame.args['hhpstatus']:lower == "niko") then print = print .. ", this item is unlocked for use in designing after listening to Niko's lecture at the school regarding wooden pillars and counters." else if not tableEmpty(resultsHHP) then print = print .. ", this item is unlocked for use in designing when doing a vacation home request for " for r = 1, #resultsHHP do		   	if r == #resultsHHP and r-1 ~= 0 then print = print .. 'and ' end print = print .. " " .. resultsHHP[r].name .. "" if r == #resultsHHP then print = print .. '.'		       elseif r-1 == 0 and r+1 == #resultsHHP then print = print .. ' '		       else print = print .. ', '		       end end end end if not tableEmpty(resultsHHP_Facility) then if not tableEmpty(resultsHHP) then if (not isEmpty(frame.args['hhpstatus'])) then print = print .. " The item is also featured in the order list of " else print = print .. " The item can also be unlocked when tasked by Lottie to design " end for r = 1, #resultsHHP_Facility do		   	if r == #resultsHHP_Facility and r-1 ~= 0 then print = print .. 'and ' end print = print .. "the " .. resultsHHP_Facility[r].name:lower .. "" if r == #resultsHHP_Facility then print = print .. '.'		       elseif r-1 == 0 and r+1 == #resultsHHP_Facility then print = print .. ' '		       else print = print .. ', '		       end end else print = print .. ", this item is unlocked for use in designing when tasked by Lottie to design " for r = 1, #resultsHHP_Facility do		   	if r == #resultsHHP_Facility and r-1 ~= 0 then print = print .. 'and ' end print = print .. "the " .. resultsHHP_Facility[r].name:lower .. "" if r == #resultsHHP_Facility then print = print .. '.'		       elseif r-1 == 0 and r+1 == #resultsHHP_Facility then print = print .. ' '		       else print = print .. ', '		       end end end end if not isEmpty(frame.args['clothing']) and not (not tableEmpty(resultsHandbags) and resultsHandbags[1].handbag == "1") and (not (tableEmpty(resultsHHP)) or not tableEmpty(resultsHHP_Facility)) then print = print .. " The item can also be used to change the clothing of" if not tableEmpty(resultsVill_Equip) and resultsVill_Equip[1].equip == "1" then print = print .. " a villager or" end print = print .. " the player either during or after the designing process." end if not tableEmpty(resultsHHP_Required) then if (not tableEmpty(resultsHHP)) or (not tableEmpty(resultsHHP_Facility)) then print = print .. "\n\n" print = print .. "In the designing process of Happy Home Paradise, " for r = 1, #resultsHHP_Required do		   	if r == #resultsHHP_Required and r-1 ~= 0 then print = print .. 'and ' end print = print .. " " .. resultsHHP_Required[r].name .. "" if r == #resultsHHP_Required or (r-1 == 0 and r+1 == #resultsHHP_Required) then print = print .. ' '		       else print = print .. ', '		       end end print = print .. "require" if #resultsHHP_Required == 1 then print = print .. "s" end print = print .. " this item to be placed in or outside their vacation home." end end if not tableEmpty(resultsHHP_Category) then if (not tableEmpty(resultsHHP)) or (not tableEmpty(resultsHHP_Facility)) then if not tableEmpty(resultsHHP_Required) then print = print .. " This item is also required " else print = print .. '\n\n' print = print .. "In the designing process of Happy Home Paradise, this item is required " end for r = 1, #resultsHHP_Category do		   	if r == #resultsHHP_Category and r-1 ~= 0 then print = print .. 'and ' end print = print .. "as one of the " .. resultsHHP_Category[r].category:lower .. " for the " .. resultsHHP_Category[r].room:lower .. " at the " .. resultsHHP_Category[r].facility:lower .. "" if r == #resultsHHP_Category then print = print .. '.'		       elseif r-1 == 0 and r+1 == #resultsHHP_Category then print = print .. ' '		       else print = print .. ', '		       end end end end if (typeItem == "furniture" or typeItem == "interior") and not tableEmpty(resultsHHP_Wardell) and (not isEmpty(resultsHHP_Wardell[1].price) and resultsHHP_Wardell[1].currency == "Poki") and (not (tableEmpty(resultsHHP)) or not (tableEmpty(resultsHHP_Facility)) or not isEmpty(frame.args['hhpstatus'])) then currency = require("Module:Currency") print = print .. '\n\n' print = print .. "After unlocking this item in Happy Home Paradise, the item can be purchased from Wardell's catalog" if (resultsHHP_Wardell[1].availability2 == "Paradise Planning office" or resultsHHP_Wardell[1].availability2 == "Café") then print = print .. ''		else print = print .. " for " .. currency.outputCurrency("Poki", resultsHHP_Wardell[1].price,"","","","") end print = print .. "."	end if (tableEmpty(resultsHHP)) and (tableEmpty(resultsHHP_Facility) and isEmpty(frame.args['hhpstatus'])) then print = print .. ", no villagers or facility unlock this item for designing" if not isEmpty(frame.args['clothing']) and not (not tableEmpty(resultsHandbags) and resultsHandbags[1].handbag == "1") then print = print .. " and changing the clothing of" if not tableEmpty(resultsVill_Equip) and resultsVill_Equip[1].equip == "1" then print = print .. " a villager and" end print = print .. " the player" end if not tableEmpty(resultsCrafting) then print = print .. ". It can only be used once the player's DIY catalog is unlocked after completing the 15th vacation home." else print = print .. ". It can only be used once the player's catalog is unlocked after completing the 27th vacation home." end if (typeItem == "furniture" or typeItem == "interior") and not tableEmpty(resultsHHP_Wardell) and (not isEmpty(resultsHHP_Wardell[1].price) and resultsHHP_Wardell[1].currency == "Poki") then currency = require("Module:Currency") print = print .. ''			print = print .. " Therefore, this item only appears in Wardell's catalog" if (resultsHHP_Wardell[1].availability2 == "Paradise Planning office" or resultsHHP_Wardell[1].availability2 == "Café") then print = print .. ''			else print = print .. " for " .. currency.outputCurrency("Poki", resultsHHP_Wardell[1].price) end print = print .. " after the player has catalogued this item." end if not tableEmpty(resultsHHP_Category) then print = print .. "\n\nIn the designing process of Happy Home Paradise however, the item is required " for r = 1, #resultsHHP_Category do		   	if r == #resultsHHP_Category and r-1 ~= 0 then print = print .. 'and ' end print = print .. "as one of the " .. resultsHHP_Category[r].category:lower .. " for the " .. resultsHHP_Category[r].room:lower .. " at the " .. resultsHHP_Category[r].facility:lower .. "" if r == #resultsHHP_Category then print = print .. '.'		       elseif r-1 == 0 and r+1 == #resultsHHP_Category then print = print .. ' '		       else print = print .. ', '		       end end end end return print end

function p.furnitureOutput( frame ) local print = ''

-- Cargo query for nh_house local tables = 'nh_house' local fields = "nh_house.villager=villager,nh_house._pageTitle=pageName" local args = { where = "nh_house.items LIKE '%\"" .. frame.args['1']:gsub("\'","\\'") .. "\"%'", orderBy = 'nh_house.name_sort', limit = 300, default = '' }   local results = cargo.query( tables, fields, args ) if not tableEmpty(results) then print = print .. "This item " if not isEmpty(frame.args['clothing']) and isEmpty(frame.args['disable-clothing']) then print = print .. "also " else print = print .. " "   	end print = print .. "appears in the homes of " for r = 1, #results do	   	if r == #results and r-1 ~= 0 then print = print .. 'and ' end print = print .. " " .. results[r].villager .. "" if r == #results then print = print .. '.'	       elseif r-1 == 0 and r+1 == #results then print = print .. ' '	       else print = print .. ', '	       end end if not isEmpty(frame.args['not-purchasable']) then print = print .. ''	   else print = print .. " As a result, this item has a chance to be purchasable by the player if they were invited by any of the preceding villagers." end if not isEmpty(frame.args['text']) then print = print .. " " .. frame.args['text'] end else print = print .. "No villagers have this item in their home." end if not isEmpty(frame.args['prune-hhp']) then print = print .. ''	else print = print .. '\n\n' .. p.HHPOutput(frame,"furniture") end return print end

function p.clothingOutput( frame ) local print = ''

-- Cargo query for nh_villager local tables = 'nh_villager' local fields = "nh_villager.icon=icon,nh_villager.name=villager,nh_villager._pageTitle=pageName" local args = { where = "nh_villager.clothing = '" .. frame.args['1']:gsub("\'","\\'").. "'",       orderBy = 'nh_villager.name_sort', limit = 300, default = '' }   local results = cargo.query( tables, fields, args ) if not tableEmpty(results) then print = print .. "This item is worn by " for r = 1, #results do	   	if r == #results and r-1 ~= 0 then print = print .. 'and ' end print = print .. " " .. results[r].villager .. "" if r == #results then print = print .. ' '	       elseif r-1 == 0 and r+1 == #results then print = print .. ' '	       else print = print .. ', '	       end end print = print .. " as their default outfit." if not isEmpty(frame.args['text']) then print = print .. " " .. frame.args['text'] end else print = print .. "No villagers wear this item as their default outfit." end if not isEmpty(frame.args['prune-hhp']) then print = print .. ''	else print = print .. '\n\n' .. p.HHPOutput(frame,"") end return print end

function p.umbrellaOutput( frame ) local print = ''

-- Cargo query for nh_villager local tables = 'nh_villager' local fields = "nh_villager.icon=icon,nh_villager.name=villager,nh_villager._pageTitle=pageName" local args = { where = "nh_villager.umbrella = '" .. frame.args['1']:gsub("\'","\\'") .. "' AND species<>'Frog'", orderBy = 'nh_villager.name_sort', limit = 300, default = '' }   local results = cargo.query( tables, fields, args ) if not tableEmpty(results) then print = print .. "This item is used by " for r = 1, #results do	   	if r == #results and r-1 ~= 0 then print = print .. 'and ' end print = print .. " " .. results[r].villager .. "" if r == #results then print = print .. ' '	       elseif r-1 == 0 and r+1 == #results then print = print .. ' '	       else print = print .. ', '	       end end print = print .. " as their default umbrella during periods of rain." if not isEmpty(frame.args['text']) then print = print .. " " .. frame.args['text'] end else print = print .. "No villagers use this item as their default umbrella during periods of rain." end if not isEmpty(frame.args['prune-hhp']) then print = print .. ''	else print = print .. '\n\n' .. p.HHPOutput(frame,"") end return print end

function p.interiorOutput( frame ) local print = ''

-- Cargo query for nh_house local tables local fields local args local results if not isEmpty(frame.args['type']) and frame.args['type']:lower == "wallpaper" then tables = 'nh_house' fields = "nh_house.villager=villager,nh_house._pageTitle=pageName" args = { where = "nh_house.wallpaper = '" .. frame.args['1']:gsub("\'","\\'") .. "'",	       orderBy = 'nh_house.name_sort', limit = 300, default = '' }	   results = cargo.query( tables, fields, args ) elseif not isEmpty(frame.args['type']) and frame.args['type']:lower == "flooring" then tables = 'nh_house' fields = "nh_house.villager=villager,nh_house._pageTitle=pageName" args = { where = "nh_house.flooring = '" .. frame.args['1']:gsub("\'","\\'") .. "'",	       orderBy = 'nh_house.name_sort', limit = 300, default = '' }	   results = cargo.query( tables, fields, args ) else results = {} end if not tableEmpty(results) then print = print .. "This item appears in the homes of " for r = 1, #results do	   	if r == #results and r-1 ~= 0 then print = print .. 'and ' end print = print .. " " .. results[r].villager .. "" if r == #results or (r-1 == 0 and r+1 == #results) then print = print .. ' '	       else print = print .. ', '	       end end if not isEmpty(frame.args['type']) and frame.args['type']:lower == "wallpaper" then print = print .. ' as the default wallpaper.' elseif not isEmpty(frame.args['type']) and frame.args['type']:lower == "flooring" then print = print .. ' as the default flooring.' end if not isEmpty(frame.args['text']) then print = print .. " " .. frame.args['text'] end else print = print .. "No villagers have this item in their home." end if not isEmpty(frame.args['prune-hhp']) then print = print .. ''	else print = print .. '\n\n' .. p.HHPOutput(frame,"interior") end return print end

return p