Module:NHVillagerItemOutput

From Nookipedia, the Animal Crossing wiki
Revision as of 14:48, November 9, 2022 by PanchamBro (talk | contribs)

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
local formatList = require('Module:List').listFormat

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 )
    local data1 = {}
    -- 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 )
    local data2 = {}
    -- 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 )
    local data3 = {}
    -- 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 data4 = {}
    
    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
	local data5 = {}
    -- 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 )
    local data6 = {}
    -- 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 )
    local data7 = {}
    -- 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 )
	local data8 = {}
	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 .. " In addition, the item can 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 for [[Photo (screenshot)|screenshot purposes]]."
	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 = ''
	local data = {}

	-- 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
	    	data[r] = "[[File:" .. results[r].villager .. " NH Villager Icon.png|25px|link=|alt=|" .. results[r].villager .. "]] [[" .. results[r].pageName .. "|" .. results[r].villager .. "]]"
	    end
	    print = print .. formatList(data) .. "."
	    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 = ''
	local data = {}
	
	-- 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
	    	data[r] = "[[File:" .. results[r].villager .. " NH Villager Icon.png|25px|link=|alt=|" .. results[r].villager .. "]] [[" .. results[r].pageName .. "|" .. results[r].villager .. "]]"
	    end
	    print = print .. formatList(data) .. " 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 = ''
	local data = {}

	-- 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 )
    -- Cargo query for nh_villager (Frog villagers)
    local tables2 = 'nh_villager'
    local fields2 = "nh_villager.icon=icon,nh_villager.name=villager,nh_villager._pageTitle=pageName"
    local args2 = {
        where = "nh_villager.umbrella = '" .. frame.args['1']:gsub("\'","\\'") .. "' AND species='Frog'",
        orderBy = 'nh_villager.name_sort',
        limit = 300,
        default = ''
    }
    local resultsFrog = cargo.query( tables2, fields2, args2 )
    -- Cargo query for nh_special_character
    local tables3 = 'nh_special_character'
    local fields3 = "nh_special_character.icon=icon,nh_special_character.name=character,nh_special_character._pageTitle=pageName"
    local args3 = {
        where = "nh_special_character.umbrella = '" .. frame.args['1']:gsub("\'","\\'") .. "'",
        orderBy = 'nh_special_character.name_sort',
        limit = 300,
        default = ''
    }
    local resultsSpecial = cargo.query( tables3, fields3, args3 )
    -- Cargo query for nh_special_character (Happy Home Paradise)
    local tables4 = 'nh_special_character'
    local fields4 = "nh_special_character.icon=icon,nh_special_character.name=character,nh_special_character._pageTitle=pageName"
    local args4 = {
        where = "nh_special_character.umbrella_hhp = '" .. frame.args['1']:gsub("\'","\\'") .. "'",
        orderBy = 'nh_special_character.name_sort',
        limit = 300,
        default = ''
    }
    local resultsSpecialHHP = cargo.query( tables4, fields4, args4 )
    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]]."
		if not tableEmpty(resultsFrog) then
	    	print = print .. " "
		    for r = 1, #resultsFrog do
		    	if r == #resultsFrog and r-1 ~= 0 then
		        	print = print .. 'and '
		        end
		        print = print .. "[[File:" .. resultsFrog[r].icon .. "|25px|link=|alt=|" .. resultsFrog[r].villager .. "]] [[" .. resultsFrog[r].pageName .. "|" .. resultsFrog[r].villager .. "]]"
		        if r == #resultsFrog then
		        	print = print .. ' '
		        elseif r-1 == 0 and r+1 == #resultsFrog then
			        	print = print .. ' '
		        else
		        	print = print .. ', '
		        end
		    end
		    if #resultsFrog == 1 then
		    	print = print .. " has "
		    else
		    	print = print .. " have "
		    end
		    print = print .. "this item as their default umbrella, but will refrain from using the umbrella due to their status as a [[frog (species)|frog]] villager."
		end
    elseif tableEmpty(results) and not tableEmpty(resultsFrog) then
    	print = print .. "This item is featured by "
	    for r = 1, #resultsFrog do
	    	if r == #resultsFrog and r-1 ~= 0 then
	        	print = print .. 'and '
	        end
	        print = print .. "[[File:" .. resultsFrog[r].icon .. "|25px|link=|alt=|" .. resultsFrog[r].villager .. "]] [[" .. resultsFrog[r].pageName .. "|" .. resultsFrog[r].villager .. "]]"
	        if r == #resultsFrog then
	        	print = print .. ' '
	        elseif r-1 == 0 and r+1 == #resultsFrog then
		        	print = print .. ' '
	        else
	        	print = print .. ', '
	        end
	    end
	    print = print .. " as their default umbrella during periods of [[weather|rain]], but they will refrain from using the umbrella due to their status as a [[frog (species)|frog]] villager."
    else
		print = print .. "No villagers use this item as their default umbrella during periods of [[weather|rain]]."
    end
	if not tableEmpty(resultsSpecial) then
		if not tableEmpty(results) or not tableEmpty(resultsFrog) then
			print = print .. " [[Special characters]] that also features this item as their default umbrella include "
		else
			print = print .. " However, [[special characters]] that features this item as their default umbrella include "
		end
	    for r = 1, #resultsSpecial do
	    	if r == #resultsSpecial and r-1 ~= 0 then
	        	print = print .. 'and '
	        end
	        print = print .. "[[File:" .. resultsSpecial[r].icon .. "|25px|link=|alt=|" .. resultsSpecial[r].character .. "]] [[" .. resultsSpecial[r].pageName .. "|" .. resultsSpecial[r].character .. "]]"
	        if r == #resultsSpecial then
	        	print = print .. ''
	        elseif r-1 == 0 and r+1 == #resultsSpecial then
		        	print = print .. ' '
	        else
	        	print = print .. ', '
	        end
	    end
	    if not tableEmpty(resultsSpecialHHP) then
	    	print = print .. ", as well as "
	    	for r = 1, #resultsSpecialHHP do
		    	if r == #resultsSpecialHHP and r-1 ~= 0 then
		        	print = print .. 'and '
		        end
		        print = print .. "[[File:" .. resultsSpecialHHP[r].icon .. "|25px|link=|alt=|" .. resultsSpecialHHP[r].character .. "]] [[" .. resultsSpecialHHP[r].pageName .. "|" .. resultsSpecialHHP[r].character .. "]]"
		        if r == #resultsSpecialHHP then
		        	print = print .. ''
		        elseif r-1 == 0 and r+1 == #resultsSpecialHHP then
			        	print = print .. ' '
		        else
		        	print = print .. ', '
		        end
	    	end
	    	if #resultsSpecialHHP == 1 then
	    		print = print .. " who only uses this umbrella in the " .. frame:preprocess('{{HHP|short}}') .. " DLC."
	    	else
	    		print = print .. ", all of whom only use this umbrella in the " .. frame:preprocess('{{HHP|short}}') .. " DLC."
	    	end
	    else
	    	print = print .. "."
	    end
	end
	if tableEmpty(resultsSpecial) and not tableEmpty(resultsSpecialHHP) then
		if not tableEmpty(results) or not tableEmpty(resultsFrog) then
			print = print .. " [[Special characters]] that also features this item as their default umbrella in " .. frame:preprocess('{{HHP|short}}') .. " include "
		else
			print = print .. " However, [[special characters]] that features this item as their default umbrella in " .. frame:preprocess('{{HHP|short}}') .. " include "
		end
	    for r = 1, #resultsSpecialHHP do
	    	if r == #resultsSpecialHHP and r-1 ~= 0 then
	        	print = print .. 'and '
	        end
	        print = print .. "[[File:" .. resultsSpecialHHP[r].icon .. "|25px|link=|alt=|" .. resultsSpecialHHP[r].character .. "]] [[" .. resultsSpecialHHP[r].pageName .. "|" .. resultsSpecialHHP[r].character .. "]]"
	        if r == #resultsSpecialHHP then
	        	print = print .. ''
	        elseif r-1 == 0 and r+1 == #resultsSpecialHHP then
		        	print = print .. ' '
	        else
	        	print = print .. ', '
	        end
	    end
	    print = print .. '.'
	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