Module:NHVillagerItemOutput

From Nookipedia, the Animal Crossing wiki
Revision as of 13:57, August 18, 2022 by PanchamBro (talk | contribs) (clarifying more on what the item is used for + fixing issues when clothing is used as furniture but not with villager clothing)

Module documentation (view)


Usage

This Lua module outputs the villager data info for item pages from Animal Crossing: New Horizons in regards to their furniture, clothing, umbrella, interior items, and order list in the Happy Home Paradise DLC. These are put through {{NHFurnitureVillagers}}, {{NHInteriorVillagers}}, {{NHClothingVillagers}}, {{NHUmbrellaVillagers}}, and {{HHPItemVillagers}}. Please refer to the documentation of each of these templates for more information.


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('{{HHP|short}}')
	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 .. "[[File:" .. resultsHHP[r].icon .. "|25px|link=|alt=|" .. resultsHHP[r].name .. "]] [[" .. resultsHHP[r].pageName .. "|" .. 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 .. "[[File:" .. resultsHHP[r].icon .. "|25px|link=|alt=|" .. resultsHHP[r].name .. "]] [[" .. resultsHHP[r].pageName .. "|" .. 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 .. "[[File:" .. resultsHHP[r].icon .. "|25px|link=|alt=|" .. resultsHHP[r].name .. "]] [[" .. resultsHHP[r].pageName .. "|" .. 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 .. "[[File:" .. resultsHHP[r].icon .. "|25px|link=|alt=|" .. resultsHHP[r].name .. "]] [[" .. resultsHHP[r].pageName .. "|" .. 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 .. "[[File:" .. resultsHHP[r].icon .. "|25px|link=|alt=|" .. resultsHHP[r].name .. "]] [[" .. resultsHHP[r].pageName .. "|" .. 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 .. "[[File:" .. resultsHHP[r].icon .. "|25px|link=|alt=|" .. resultsHHP[r].name .. "]] [[" .. resultsHHP[r].pageName .. "|" .. 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].pageName .. "|" .. 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].pageName .. "|" .. 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 isEmpty(frame.args['text-hhp']) then
		print = print .. " " .. frame.args['text-hhp']
	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 .. "[[File:" .. resultsHHP_Required[r].icon .. "|25px|link=|alt=|" .. resultsHHP_Required[r].name .. "]] [[" .. resultsHHP_Required[r].pageName .. "|" .. 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].pageName .. "|" .. 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].pageName .. "|" .. 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
    	if not isEmpty(frame.args['disable-clothing']) then
    		print = print .. "However, this item "
    	else
    		print = print .. "This item "
    	end
    	if not isEmpty(frame.args['clothing']) and isEmpty(frame.args['disable-clothing']) then
    		print = print .. "also "
    	else
    		print = print .. " "
    	end
    	print = print .. "appears as a furniture item in the homes of "
	    for r = 1, #results do
	    	if r == #results and r-1 ~= 0 then
	        	print = print .. 'and '
	        end
	        print = print .. "[[File:" .. results[r].villager .. " NH Villager Icon.png|25px|link=|alt=|" .. results[r].villager .. "]] [[" .. results[r].pageName .. "|" .. 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
	else
		print = print .. "No villagers have this item in their home."
    end
    if not isEmpty(frame.args['text']) then
	    print = print .. " " .. frame.args['text'] .. "."
	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 .. "[[File:" .. results[r].icon .. "|25px|link=|alt=|" .. results[r].villager .. "]] [[" .. results[r].pageName .. "|" .. 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."
	else
		print = print .. "No villagers wear this item as their default outfit."
    end
    if not isEmpty(frame.args['text']) then
	    print = print .. " " .. frame.args['text'] .. "."
	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 .. "[[File:" .. results[r].icon .. "|25px|link=|alt=|" .. results[r].villager .. "]] [[" .. results[r].pageName .. "|" .. 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 [[weather|rain]]."
	else
		print = print .. "No villagers use this item as their default umbrella during periods of [[weather|rain]]."
    end
    if not isEmpty(frame.args['text']) then
	    print = print .. " " .. frame.args['text'] .. "."
	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 .. "[[File:" .. results[r].villager .. " NH Villager Icon.png|25px|link=|alt=|" .. results[r].villager .. "]] [[" .. results[r].pageName .. "|" .. 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
	else
		print = print .. "No villagers have this item in their home."
    end
    if not isEmpty(frame.args['text']) then
	    print = print .. " " .. frame.args['text'] .. "."
	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