Module:NLVillagerItemOutput

From Nookipedia, the Animal Crossing wiki

Module documentation (view)


Usage

This Lua module outputs the villager data info for item pages from Animal Crossing: New Leaf in regards to their furniture, clothing, umbrella, and interior items. These are put through {{NLFurnitureVillagers}}, {{NLInteriorVillagers}}, {{NLClothingVillagers}}, and {{NLUmbrellaVillagers}}. 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.furnitureOutput( frame )
	local print = ''
	local data = {}
	local dataRV = {}

	-- Cargo query for nl_house
    local tables = 'nl_house'
    local fields = "nl_house.villager=villager,nl_house._pageTitle=pageName"
    local args = {
        where = "nl_house.items LIKE '%\"" .. frame.args['1']:gsub("\'","\\'") .. "\"%'",
        orderBy = 'nl_house.name_sort',
        limit = 300,
        default = ''
    }
    local results = cargo.query( tables, fields, args )
    
    -- Cargo query for nlwa_rv
    local tables2 = 'nlwa_rv'
    local fields2 = "nlwa_rv.name=name,nlwa_rv.icon=icon,nlwa_rv._pageTitle=pageName"
    local args2 = {
        where = "nlwa_rv.items LIKE '%\"" .. frame.args['1']:gsub("\'","\\'") .. "\"%'",
        orderBy = 'nlwa_rv.name_sort',
        limit = 300,
        default = '',
        groupBy = 'nlwa_rv.name'
    }
    local results2 = cargo.query( tables2, fields2, args2 )
    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 .. " NL 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 can be purchased by the player if they were invited by any of the preceding villagers."
	    end
	    if not isEmpty(frame.args['not-re-tail']) then 
	    	print = print .. ''
	    else
	    	print = print .. " Villagers may also put this item up for sale at the [[Re-Tail]] flea market for 50% to 90% of the item's buy price, in increments of 10%."
	    end
    end
	if not tableEmpty(results2) then
		if tableEmpty(results) then
			print = print .. "No villagers have this item in their home. However, this item"
		else
			print = print .. " This item also"
		end
		print = print .. " appears in the [[RV]]"
		if #results2 ~= 1 then
			print = print .. "s"
		end
		print = print .. " of "
	    for r = 1, #results2 do
	    	dataRV[r] = "[[File:" .. results2[r].icon .. "|25px|link=|alt=|" .. results2[r].name .. "]] [[" .. results2[r].pageName .. "|" .. results2[r].name .. "]]"
	    end
	    print = print .. formatList(dataRV) .. "."
	end
	if tableEmpty(results) and tableEmpty(results2) then
		print = print .. "No villagers have this item in their home, nor do any characters have this item in their [[RV]]."
    end
    return print
end

function p.clothingOutput( frame )
	local print = ''
	local data = {}

	-- Cargo query for nl_villager
    local tables = 'nl_villager'
    local fields = "nl_villager.icon=icon,nl_villager.name=villager,nl_villager._pageTitle=pageName"
    local args = {
        where = "nl_villager.clothing = '" .. frame.args['1']:gsub("\'","\\'").. "'",
        orderBy = 'nl_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].icon .. "|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
    return print
end

function p.umbrellaOutput( frame )
	local print = ''
	local data = {}
	local data2 = {}
	
	-- Cargo query for nl_villager
    local tables = 'nl_villager'
    local fields = "nl_villager.icon=icon,nl_villager.name=villager,nl_villager._pageTitle=pageName"
    local args = {
        where = "nl_villager.umbrella = '" .. frame.args['1']:gsub("\'","\\'") .. "' AND species<>'Frog'",
        orderBy = 'nl_villager.name_sort',
        limit = 300,
        default = ''
    }
    local results = cargo.query( tables, fields, args )
    -- Cargo query for nl_villager (Frog villagers)
    local tables2 = 'nl_villager'
    local fields2 = "nl_villager.icon=icon,nl_villager.name=villager,nl_villager._pageTitle=pageName"
    local args2 = {
        where = "nl_villager.umbrella = '" .. frame.args['1']:gsub("\'","\\'") .. "' AND species='Frog'",
        orderBy = 'nl_villager.name_sort',
        limit = 300,
        default = ''
    }
    local resultsFrog = cargo.query( tables2, fields2, args2 )

    if not tableEmpty(results) then
    	print = print .. "This item is used by "
	    for r = 1, #results do
	    	data[r] =  "[[File:" .. results[r].icon .. "|25px|link=|alt=|" .. results[r].villager .. "]] [[" .. results[r].pageName .. "|" .. results[r].villager .. "]]"
	    end
	    print = print .. formatList(data) .. " as their default umbrella during periods of [[weather|rain]]."
		if not tableEmpty(resultsFrog) then
	    	print = print .. " "
		    for r = 1, #resultsFrog do
		    	data2[r] = "[[File:" .. resultsFrog[r].icon .. "|25px|link=|alt=|" .. resultsFrog[r].villager .. "]] [[" .. resultsFrog[r].pageName .. "|" .. resultsFrog[r].villager .. "]]"
		    end
		    print = print .. formatList(data2)
		    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
	    	data2[r] = "[[File:" .. resultsFrog[r].icon .. "|25px|link=|alt=|" .. resultsFrog[r].villager .. "]] [[" .. resultsFrog[r].pageName .. "|" .. resultsFrog[r].villager .. "]]"
	    end
	    print = print .. formatList(data2) .. " 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
    return print
end

function p.interiorOutput( frame )
	local print = ''
	local data = {}
	local dataRV = {}

	-- Cargo query for nl_house
	local tables
	local fields
	local args
	local results
	
	local tables2
	local fields2
	local args2
	local results2
	if not isEmpty(frame.args['type']) and frame.args['type']:lower() == "wallpaper" then
	    tables = 'nl_house'
	    fields = "nl_house.villager=villager,nl_house._pageTitle=pageName"
	    args = {
	        where = "nl_house.wallpaper = '" .. frame.args['1']:gsub("\'","\\'") .. "'",
	        orderBy = 'nl_house.name_sort',
	        limit = 300,
	        default = ''
	    }
	    results = cargo.query( tables, fields, args )
	    -- Cargo query for nlwa_rv
    	tables2 = 'nlwa_rv'
    	fields2 = "nlwa_rv.name=name,nlwa_rv.icon=icon,nlwa_rv._pageTitle=pageName"
    	args2 = {
    	   where = "nlwa_rv.wallpaper = '" .. frame.args['1']:gsub("\'","\\'") .. "'",
    	   orderBy = 'nlwa_rv.name_sort',
    	   limit = 300,
    	   default = '',
    	   groupBy = 'nlwa_rv.name'
    	}
    	results2 = cargo.query( tables2, fields2, args2 )
	elseif not isEmpty(frame.args['type']) and frame.args['type']:lower() == "carpet" then
	    tables = 'nl_house'
	    fields = "nl_house.villager=villager,nl_house._pageTitle=pageName"
	    args = {
	        where = "nl_house.flooring = '" .. frame.args['1']:gsub("\'","\\'") .. "'",
	        orderBy = 'nl_house.name_sort',
	        limit = 300,
	        default = ''
	    }
	    results = cargo.query( tables, fields, args )
	    -- Cargo query for nlwa_rv
    	tables2 = 'nlwa_rv'
    	fields2 = "nlwa_rv.name=name,nlwa_rv.icon=icon,nlwa_rv._pageTitle=pageName"
    	args2 = {
    	   where = "nlwa_rv.flooring = '" .. frame.args['1']:gsub("\'","\\'") .. "'",
    	   orderBy = 'nlwa_rv.name_sort',
    	   limit = 300,
    	   default = '',
    	   groupBy = 'nlwa_rv.name'
    	}
    	results2 = cargo.query( tables2, fields2, args2 )
	else
		results = {}
		results2 = {}
	end
    if not tableEmpty(results) then
    	print = print .. "This item appears in the homes of "
	    for r = 1, #results do
	    	data[r] = "[[File:" .. results[r].villager .. " NL 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['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() == "carpet" then
	    	print = print .. ' as the default carpet.'
	    end
	end
	if not tableEmpty(results2) then
		if tableEmpty(results) then
			print = print .. "No villagers have this item in their home. However, this item"
		else
			print = print .. " This item also"
		end
		print = print .. " appears in the [[RV]]"
		if #results2 ~= 1 then
			print = print .. "s"
		end
		print = print .. " of "
	    for r = 1, #results2 do
	    	dataRV[r] = "[[File:" .. results2[r].icon .. "|25px|link=|alt=|" .. results2[r].name .. "]] [[" .. results2[r].pageName .. "|" .. results2[r].name .. "]]"
	    end
	    print = print .. formatList(dataRV) .. "."
	end
	if tableEmpty(results) and tableEmpty(results2) then
		print = print .. "No villagers have this item in their home, nor do any characters have this item in their [[RV]]."
    end
    return print
end

return p