Module:Currency

From Nookipedia, the Animal Crossing wiki
Revision as of 14:09, March 30, 2022 by PanchamBro (talk | contribs) (attempting fix to prevent script error issues)

Module documentation (view)


Usage

This Lua module outputs the currency and its price for the {{Currency}} template to account for preprocessor node count limits. Data is stored in a table, and can determine how certain variables are used.

Portions of the module uses Module:Formatnum, see module for more information.

Inserting a new currency

["name_of_currency"] = { "currency_image", "currency_image_size", "link_to_currency", "name_of_currency", "short_name_of_currency" }

When adding a new currency to be used on pages, the following syntax must be inserted into the main data table.

  • name_of_currency describes the name of the currency that the editor will write in the Currency template. There is also a second instance of name_of_source, which can also feature a different text to its first instance.
  • currency_image requires an image (preferably an icon) to be added. It must include the filename extension.
  • currency_image_size describes the default size that currency_image will be presented in.
  • link_to_currency describes the link that the player will click on (provided that the link is present).
  • short_name_of_currency describes a shorter name of the currency when applying the short parameter on the main Currency template.

Example

["Bells"] = { "99k Bells NH Inv Icon cropped.png", "15px", "Bell", "Bell", "Bell" }

"Bells" is the name_of_currency, while "Bell" functions as the second instance of name_of_source, link_to_currency, and short_name_of_currency. Its currency_image is "99k Bells NH Inv Icon cropped.png", and the currency_image_size is set to "15px".

The output is: Bells

["Nook Miles"] = { "Nook Miles NH Icon Cropped.png", "18px", "Nook Miles", "Nook Mile", "Mile" }

"Nook Mile" is the name_of_currency and link_to_currency, while "Nook Mile" functions as the second instance of name_of_source. Its short_name_of_currency is "Mile". Its currency_image is "Nook Miles NH Icon Cropped.png", and the currency_image_size is set to "18px".

The output is: Nook Miles

When short is applied, the output is: Miles

See also


local p = {}

local function getArgs(frame)
    local args = {}
    for key, value in pairs(frame:getParent().args) do
        args[key] = value
    end
    for key, value in pairs(frame.args) do
        args[key] = value
    end
    return args
end

function p.main(frame)
    local args      = getArgs(frame)
    local nolink    = args.nolink or ''
    local nb        = args.nb or ''
    local short     = args.short or ''
    local size      = args.size or ''
    local note      = args.note or ''
    local currency  = args[1] or args.currency or ''
    local num       = args[2] or args.num or ''
    return p.outputCurrency(currency, num, nolink, nb, short, size)
end

function p.outputCurrency(currency, num, nolink, nb, short, size)
	local formatnum
	local function isEmpty(s)
		return s == nil or s == ''
	end
	local function tableEmpty(s)
		return next(s) == nil
	end
    local data = {
		["Bells"] = { "99k Bells NH Inv Icon cropped.png", "15px", "Bell", "Bell", "Bell" },
		["Play Coins"] = { "Play Coins Icon.png", "15px", "Play Coins", "Play Coin", "Play Coin" },
		["Medals"] = { "Medal NL Icon.png", "18px", "Medals", "Medal", "Medal" },
		["MEOW Coupons"] = { "MEOW Coupon Icon.png", "18px", "MEOW Coupons", "MEOW Coupon", "Coupon" },
		["Leaf Tickets"] = { "Leaf Ticket PC Icon.png", "15px", "Leaf Ticket", "Leaf Ticket", "Ticket" },
		["Nook Miles"] = { "Nook Miles NH Icon Cropped.png", "18px", "Nook Miles", "Nook Mile", "Mile" },
		["Heart Crystals"] = { "Heart Crystal NH Inv Icon.png", "15px", "Item:Heart Crystal (New Horizons)", "Heart Crystal", "Heart Crystal" },
		["Saharah Tickets"] = { "Saharah Ticket NH Inv Icon.png", "15px", "Item:Saharah Ticket (New Horizons)", "Saharah Ticket", "Saharah Ticket" },
		["Nook Points"] = { "Nook Points NH Icon Cropped.png", "18px", "NookLink#Nook Points", "Nook Point", "Point" },
		["Points"] = { "", "", "Tom Nook Point System", "Point", "Point" },
		["Happy Points"] = { "Happy Point aF Icon.png", "15px", "Happy Point", "Happy Point", "Happy Point" },
		["Happy Tickets"] = { "", "", "Happy Ticket", "Happy Ticket", "Happy Ticket" },
		["Poki"] = { "Poki NH Inv Icon cropped.png", "15px", "Poki", "Poki", "Poki" }
	}
	local print = ''
	if not isEmpty(currency) then
		if not isEmpty(data[currency][1]) then
	    	print = print .. '[[File:'.. data[currency][1]  .. '|'
	    	if not isEmpty(size) then
	    		print = print .. size
	    	else
	    		print = print .. data[currency][2]
	    	end
			print = print .. '|link=|alt=]]'
			if not isEmpty(num) then
				formatnum = require("Module:Formatnum")
				print = print .. ' ' .. formatnum.formatNum(num,"en")
			end
		end
		print = print .. ' '
		if not isEmpty(nolink) then
			if not isEmpty(short) then
				print = print .. data[currency][5]
				if (num == 1) then
					print = print .. ''
				else
					print = print .. 's'
				end
			else
				print = print .. data[currency][4]
				if (num == 1) then
					print = print .. ''
				else
					print = print .. 's'
				end
			end
		else
			if not isEmpty(short) then
				print = print .. '[[' .. data[currency][3] .. '|' .. data[currency][5]
				if (num == 1) then
					print = print .. ''
				else
					print = print .. 's'
				print = print .. ']]'
				end
			else
				print = print .. '[[' .. data[currency][3] .. '|' .. data[currency][4]
				if (num == 1) then
					print = print .. ''
				else
					print = print .. 's'
				print = print .. ']]'
				end
			end
		end
	end
	if not isEmpty(note) then
		print = print .. frame:preprocess('{{Note|' .. note .. '}}')
	end
	return print
end

return p