Модуль:Npc names

Материал из Terraria Wiki
Перейти к навигации Перейти к поиску
Lua.svg Документация Документация, указанная ниже, находится на странице «Модуль:Npc names/док». (править | история)
См. также этот модуль на английском языке: Module:Npc names. В нём может содержаться более полная или подробная информация.

Модуль для работы шаблона {{npc names}}.


local gameText = require('Module:GameText')
local tr = require('Module:Tr').translate

local currentFrame
local lang

-- l10n + extra data
local extra = mw.loadData('Module:Npc names/data')

local function l10n(key, lang, args)
	local result = extra.l10n[lang][key] or extra.l10n['en'][key] or ''
	
	-- replace keys in the string with args
	if args and args ~= {} then
		for k,v in pairs(args) do
			result = string.gsub(result, k, v)
		end
	end
	
	return result
end

local function getKeysList(id, _rootname)
	local rootname = extra.rootnames[id] or _rootname
	
	local sections = gameText.getSections()
	
	local result = {}
	
	for _,k in pairs(sections) do
		if string.match(k, rootname .. '_') or k == rootname then
			result[#result + 1] = k
		end
	end
	
	return result
end

local function getNamesList(key)
	local temp = {}
	local result = {}
	local data = gameText.getData(key, lang)
	for k,v in pairs(data) do
		local _v = v
		if extra.version[key] then
			_v = _v .. ' ' .. (extra.version[key][k] or '') -- add eicons
		end
		temp[#temp + 1] = { k, _v }
	end
	
	if extra.append[key] then
		temp[#temp + 1] = {'', l10n('append_' .. key, lang)}
	end
	
	table.sort(temp, function(a, b) return a[2] < b[2] end)
	
	for _,v in ipairs(temp) do
		result[#result + 1] = v[2]
	end
	
	result[1] = '*' .. result[1]
	
	return table.concat(result, '\n*')
end

local function printList(id, internalName)
	local rootname = internalName .. 'Names'
	local listOfEntries = getKeysList(id, rootname)
	local result = {}
	
	if #listOfEntries > 1 then
		for _,v in pairs(listOfEntries) do
			result[#result + 1] = '<h3>' .. l10n('heading_' .. v, lang) .. '</h3>'
			result[#result + 1] = currentFrame:expandTemplate{ title = 'names list', args = { getNamesList(v)}}
		end
	else
		result[#result + 1] = currentFrame:expandTemplate{ title = 'names list', args = { getNamesList(listOfEntries[1])}}
	end
	
	return table.concat(result, '\n')
end

local p = {
	main = function(frame)
		currentFrame = frame
		lang = frame.args.lang ~= '' and frame.args.lang or currentFrame:expandTemplate{ title = 'lang' }
		local npc = frame.args.npc
		local id = tonumber(frame.args.id)
		local iName = frame.args.iName
		
		local notext = frame.args.notext
		local article = frame.args.article ~= '' and frame.args.article or l10n('default_article', lang)
		
		local result = ''
		
		if notext and notext ~= 'y' then
			result = result .. l10n('text', lang, { ['%$npc%$'] = npc, ['%$article%$'] = article }) .. '\n'
		end
		
		result = result .. printList(id, iName)
		
		return result
	end,
}

return p