Disney Magic Kingdoms Wiki

Cinderella Part 4 Update has arrived! ✨
Visit this page to learn all about what's coming up in Disney Magic Kingdoms!

READ MORE

Disney Magic Kingdoms Wiki
Disney Magic Kingdoms Wiki

Description[]

This module is the Lua back-end for {{LU}}, to display information about character's level.


Usage[]

{{#invoke:LU|getLU|<parameter list>}}

For parameter details see Template:LU/doc


--[[
Lua script to get Character Level Ups Tables

getLU:
    get Character Level Ups Table based on input parameters
    Parameters:
        event = Event Name / IP Short Name (optional)
--]]

local p = {}

local util = require("Module:Utility")
local ACT = require("Module:ActivityList").getCharacterActivities
local COLL = require("Module:ItemCollection").getCollection
local LTE = require("Module:LTEvent").getLTE
local EC = require("Module:EC").getEC
local display = require("Module:ItemDisplay")

local lu    = {}
local pagename = ""

local function luItems(inStr)
	local tOut = {}
	local tIn = mw.text.split(inStr, "%s*%$%s*")
	for idx = 1, #tIn do
		table.insert(tOut, tIn[idx])
	end

	return tOut
end

local function luTable(tableData, tableNo)
	local time = {"Instant", "31s", "6m", "35m", "60m", "2h", "4h", "8h", "16h", "24h"}
	local gems = {"", "1", "1", "1", "2", "2", "3", "3", "3", "5"}
	local xp   = {"", "10", "12", "14", "17", "20", "23", "26", "29", "30"}
	local title = ""
	local tabName = ""
	local eName = ""
	local eType = ""

	local prevToken = {}
	local collection = COLL({pagename, "S"})
	local token = {("IP-" .. collection:upper()), (pagename .. ",2"), (pagename .. ",3"), "EC-Magic"}

	if tableNo and lu[tableNo]["name"] then
		eName = lu[tableNo]["name"][1]
		eType = lu[tableNo]["name"][2] or "N"
		if LTE({eName, eType, "T"}) == "[[Unknown Event |Unknown Event ]]" then
			title = '! colspan="7" style="text-align: center;"|' .. display.getLink(eName, eName, true) .. '\n|-\n'
			tabName = " (First Release)"
			token[4] = "EC-Magic"
		else
			title = '! colspan="7" style="text-align: center;"|' .. LTE({eName, eType}) .. '\n|-\n'
			if eType == "T" then token[4] = "EC-TTC" else token[4] = "EC-" .. eName end
			tabName = LTE({eName:lower(), eType , "K"})
			tabName = " (" .. tabName .. " Event)"
		end
	end

	local tOut = {
			'\n|-| Level Ups', tabName, '=\n',
			'{| class="article-table" style="width: 100%; text-align: center; line-height: 1.0;"\n',
			title,
			'! style="width: 10%; text-align: center;"|Level\n',
			'! style="text-align: center;" colspan="4"|Requirements\n',
			'! style="width: 5%; text-align: center;"|Time\n',
			'! style="width: 10%; text-align: center;"|Rewards\n'
			}

	for luNo, luData in ipairs(tableData) do
		local tRow = {'|-\n', '| nowrap|', ("Level " .. luNo), '\n', "",
				"", "", "", '|', ((luData[5] and luData[5]~="") and luData[5] or time[luNo]), '\n',
				'| nowrap|', EC({"Gems"}), ((luData[6] and luData[6]~="") and luData[6] or gems[luNo]), ', ', EC({"XP"}), ((luData[7] and luData[7]~="") and luData[7] or xp[luNo]), (luData[8] and (", " .. EC({"Magic"}) .. luData[8]) or ""), '\n',
				}

		if luNo == 2 and eName ~= "" and eType == "N" then tRow[10] = "6s" end

		for idx = 1, 4 do
			local item = mw.text.split((luData[idx] or ""), "%s*#%s*")
			if luNo == 1 then
				tRow[3] = "Welcome"
				tRow[13] = "[[File:m-cross.png|x20px|No]]"
				tRow[14] = ""
				tRow[15] = ""
				tRow[16] = ""
				tRow[17] = ""
			end
			if luNo == 1 and not luData[idx + 1] then
				tRow[5] = '| colspan="4"|'
				if item[2] then
					tRow[7] = display.getOneItem(item[1], item[2], true)
				else
					tRow[7] = item[1]
				end
				tRow[8] = '\n'
				break
			else
				if not item[2] then
					tRow[4 + idx] = '| style="width: 15%;"|' .. display.getOneItem(token[idx], item[1], token[idx] ~= prevToken[idx]) .. '\n'
					prevToken[idx] = (item[1]=="" and "" or token[idx])
				else
					tRow[4 + idx] = '| style="width: 15%;"|' .. display.getOneItem(item[1], item[2], item[1] ~= prevToken[idx]) .. '\n'
					token[idx]     = item[1]
					prevToken[idx] = item[1]
				end
			end
		end
		table.insert(tOut, table.concat(tRow))
	end

	table.insert(tOut, '|}\n')

	return table.concat(tOut)
end

function p.getLU(frame)
	local tArgs = util.getArgs(frame)

	pagename = tArgs["name"] or mw.title.getCurrentTitle().text

	local onetable = {}

	lu[1] = {{""}}

	for arg, value in pairs(tArgs) do
		local cat, t, n = tostring(arg):match('^(%a+)([1-9]-)_?([1-9]%d*)$')
		local num = tonumber(n)
		local tNo = tonumber(t) or 1
		if num then
			if cat == "lu" then
				if not lu[tNo] then lu[tNo] = {} end
				lu[tNo][num] = luItems(value, pagename)
			elseif cat == "luN" then
				if not lu[num] then lu[num] = {} end
				lu[num]["name"] = mw.text.split(value, "%s*%$%s*")
			elseif cat == "luA" then
				onetable = {num, tonumber(value)}
			end
		end
	end

	if (#onetable>0) then lu[onetable[2]] = lu[onetable[1]] lu[onetable[1]] = nil end

	local allTables = {}

	if lu[1] then
		for tNo, tData in ipairs(lu) do
			table.insert(allTables, luTable(tData, tNo))
		end
		table.insert(allTables, 2, ACT(pagename))
	end

	return table.concat(allTables)
end

return p