Module:AwesomeSinkItemsTable
Aller à la navigation
Aller à la recherche
Documentation
[purger]
Ce module permet de générer une table avec l'ensemble des objets broyables, classés par valeur.
Il est appelé sur la page du Broyeur A.W.E.S.O.M.E..
local p = {}
local json = require('Module:Json')
local sinkPoints = json.decode(mw.getCurrentFrame():expandTemplate{title='Template:ResourceSinkPoints.json'})
local sinkPointsExperimental = json.decode(mw.getCurrentFrame():expandTemplate{title='Template:ResourceSinkPointsExperimental.json'})
local getKeysSortedByValue = function(tbl, sortFunction)
-- create default comparator if none was provided
if sortFunction == nil then
sortFunction = function(a, b) return a < b end
end
local keys = {}
for key in pairs(tbl) do
table.insert(keys, key)
end
table.sort(keys, function(a, b) return sortFunction(tbl[a], tbl[b]) end)
return keys
end
p.getItemsTable = function(frame)
local txt = '{| class="wikitable"\n|-\n! Points !! Items'
-- manually add the coupon because it's not in the docs.json, therefore not in the database
if sinkPoints.Coupon ~= nil then
txt = txt .. "\n|-\n| " .. sinkPoints.Coupon .. " || [[Coupon]]\n(''Pour la première fois, le [[Cyber Wagon]] est disponible à l'achat dans la boutique, et aucun point n'est donné.')"
end
local sortedKeys = getKeysSortedByValue(sinkPoints)
-- group all items with the same amount of points into one table row
local currentPointsGroup = -1
local firstInTheGroup = true
for i=1, #sortedKeys, 1 do
-- coupon was already added manually above
if sortedKeys[i] ~= 'Coupon' then
local points = sinkPoints[sortedKeys[i]]
-- if the next item has different sink points than the current group then create a new table row
if points ~= currentPointsGroup then
txt = txt .. '\n|-\n| ' .. mw.getCurrentFrame():expandTemplate{title='FormatNumber', args={[1] = points}} .. ' || '
currentPointsGroup = points
firstInTheGroup = true
end
-- add item to the current group
if not firstInTheGroup then
txt = txt .. ', '
else
firstInTheGroup = false
end
txt = txt .. frame:expandTemplate{ title = 'ItemLink', args = { sortedKeys[i] } }
end
end
txt = txt .. '\n|}'
return txt
end
p.getItemsTableExperimental = function(frame)
local txt = '{| class="wikitable"\n|-\n! Points !! Items'
-- manually add the coupon because it's not in the docs.json, therefore not in the database
if sinkPointsExperimental.Coupon ~= nil then
txt = txt .. "\n|-\n| " .. sinkPointsExperimental.Coupon .. " || [[Coupon]]\n(''Pour la première fois, le [[Cyber Wagon]] est disponible à l'achat dans la boutique, et aucun point n'est donné.'')"
end
local sortedKeys = getKeysSortedByValue(sinkPointsExperimental)
-- group all items with the same amount of points into one table row
local currentPointsGroup = -1
local firstInTheGroup = true
for i=1, #sortedKeys, 1 do
-- coupon was already added manually above
if sortedKeys[i] ~= 'Coupon' then
local points = sinkPointsExperimental[sortedKeys[i]]
-- if the next item has different sink points than the current group then create a new table row
if points ~= currentPointsGroup then
txt = txt .. '\n|-\n| ' .. mw.getCurrentFrame():expandTemplate{title='FormatNumber', args={[1] = points}} .. ' || '
currentPointsGroup = points
firstInTheGroup = true
end
-- add item to the current group
if not firstInTheGroup then
txt = txt .. ', '
else
firstInTheGroup = false
end
txt = txt .. frame:expandTemplate{ title = 'ItemLink', args = { sortedKeys[i] } }
end
end
txt = txt .. '\n|}'
return txt
end
return p