Documentation for this module may be created at Module:Level passage/doc
-- <nowiki>
local getArgs = require("Dev:Arguments").getArgs
local yesno = require("Dev:Yesno")
local p = {}
local function Nth(n)
local function getSuffix(n)
local lastTwo, lastOne = n % 100, n % 10
if lastTwo > 3 and lastTwo < 21 then return "th" end
if lastOne == 1 then return "st" end
if lastOne == 2 then return "nd" end
if lastOne == 3 then return "rd" end
return "th"
end
if tonumber(n) then
return n .. getSuffix(tonumber(n))
end
return n
end
local ordinals = {
"first",
"second",
"third",
"fourth",
"fifth",
"sixth",
"seventh",
"eighth",
"ninth",
"tenth",
"eleventh",
"twelfth",
"thirteenth",
"fourteenth",
"fifteenth",
}
local function nthAndLast(level)
local max
local offset = 20
if level > offset then
max = 15
else
max = 10
offset = 0
end
local n = (level - 1 - offset) % max + 1
local nth = ordinals[n]
if n == max then nth = nth .. " and last" end
return nth
end
-- nthLevelType is counts
local function nthLevelType(level, isDW)
local data
if isDW then
data = mw.loadData("Module:LeveltypeDW/List")
else
data = mw.loadData("Module:Leveltype/List")
end
local levelTypes = {
["Moves"] = " [[Moves levels|moves levels]]",
["Jelly"] = " [[Jelly levels|jelly level]]",
["Ingredients"] = " [[Ingredients levels|ingredients level]]",
["Timed"] = " [[Timed levels|timed level]]",
["Candy Order"] = " [[Candy Order levels|candy order level]]",
["Mixed"] = " [[Mixed Mode levels|mixed mode level]]",
["Rainbow Rapids"] = " [[Rainbow Rapids levels|rainbow rapids level]]",
}
local levelType = data[level]
local levelTypeName = levelTypes[levelType]
local tallies = {}
for k, v in pairs(data) do
if k <= level then
tallies[v] = (tallies[v] or 0) + 1
end
end
local tally = tallies[levelType]
if not levelType or not levelTypeName then return "" end
local wikitext = {}
table.insert(wikitext, Nth(tally))
table.insert(wikitext, levelTypeName)
if isDW then
table.insert(wikitext, " in [[Dreamworld]]")
end
if levelType == "Mixed" then
local data = mw.loadData("Module:Mixedorder/List")
local mixedTypes = {
['jelly-order'] = "jelly-order [[Category:Jelly-order levels]]",
['jelly-ingredients'] = "jelly-ingredients [[Category:Jelly-ingredients levels]]",
['order-ingredients'] = "order-ingredients [[Category:Order-ingredients levels]]",
}
local mixedType = data[level]
local mixedTypeName = mixedTypes[mixedType]
if mixedType and mixedTypeName then
local tallies = {}
for k, v in pairs(data) do
if k <= level then
tallies[v] = (tallies[v] or 0) + 1
end
end
if not mixedType then
return "''Unknown mixed type for level "..level.."''[[Category:Levels with missing mixed type|"..level.."]]"
end
local tally = tallies[mixedType]
if mixedType then
table.insert(wikitext, " (")
table.insert(wikitext, Nth(tally))
table.insert(wikitext, " " .. mixedTypeName)
table.insert(wikitext, ")")
end
end
end
return table.concat(wikitext)
end
function p.main(frame)
local args = getArgs(frame, {parentFirst=true})
local currentTitle = args[1] and mw.title.new(args[1]) or mw.title.getCurrentTitle()
local PAGENAME = currentTitle.text
local BASEPAGENAME = currentTitle.baseText
local SUBPAGENAME = currentTitle.subpageText
local isDW = SUBPAGENAME == "Dreamworld" or SUBPAGENAME == "Dreamworld (Mobile)"
local TOTALLEVELSR = tonumber(args.TOTALLEVELSR) or 0
local WIN10DIF = tonumber(args.WIN10DIF) or 0
local level = tonumber(string.match(PAGENAME, "(%d+)")) or -1
local requirement = args.requirement
local moves = tonumber(args.moves) or 0
local output = {}
table.insert(output, "'''"..(title or BASEPAGENAME).."''' ")
if isDW then
table.insert(output, "was")
elseif level > (TOTALLEVELSR + WIN10DIF) then
table.insert(output, "will be")
else
table.insert(output, "is")
end
table.insert(output, " the " .. nthAndLast(level) .. " level in ")
if yesno(args.idea) then
table.insert(output, args.episode or '')
else
local getEpisodeText = require("Module:EpisodeText" .. (isDW and "D" or ""))._main
local episodeText
if BASEPAGENAME == "Infobox level"
or BASEPAGENAME == "Infobox past level" then
episodeText = getEpisodeText("E")
elseif level <= 20 then
episodeText = getEpisodeText(math.ceil(level / 10))
else
episodeText = getEpisodeText(math.ceil((level + 10)/15))
end
table.insert(output, "[[" .. (episodeText or "") .. "]]")
end
if level > (TOTALLEVELSR + WIN10DIF) then
table.insert(output, ".")
else
table.insert(output, " and the " .. nthLevelType(level, isDW) .. ".")
if requirement then
table.insert(output, " To pass this level, you must "..requirement)
if levelType == "Jelly"
or levelType == "Ingredients"
or levelType == "Candy Order"
or levelType == "Mixed"
or levelType == "Rainbow Rapids"
then
table.insert(output, " in "..moves..(moves == 1 and "[[moves|move]]." or "[[moves]] or fewer."))
end
end
table.insert(output, "\nWhen you complete the level, [[Sugar Crush]] is activated and will score you additional points.")
end
return table.concat(output)
end
function p.test()
local TOTALLEVELSR = 6965
local WIN10DIF = 90
mw.log("Level 1746", p.main{"Level 1746", TOTALLEVELSR=TOTALLEVELSR, WIN10DIF=WIN10DIF})
mw.log("Level 656/Dreamworld", p.main{"Level 656/Dreamworld", TOTALLEVELSR=TOTALLEVELSR, WIN10DIF=WIN10DIF})
mw.log(656, nthLevelType(656, false))
mw.log(656, nthLevelType(656, true))
end
return p
-- </nowiki>