Version actuelle |
Votre texte |
Ligne 1 : |
Ligne 1 : |
| local p = {} | | local p = {} |
|
| |
|
| -- fonction commune
| | function addItem(item) |
| | | if type(item) == 'string' then |
| function getArgs(frame)
| | return '*' .. item |
| local args = {}
| | elseif type(item) == 'table' then |
|
| | local moduledata = require( 'Module:Liste d\'objets de Fallout 76/' .. item.value ) |
| local argsParent = frame:getParent().args
| |
| for cle, val in pairs(argsParent) do
| |
| if val then
| |
| args[cle] = mw.text.trim(val)
| |
| end
| |
| end
| |
|
| |
| return args
| |
| end
| |
| | |
| function countItems(moduledata)
| |
| n = 0
| |
| for i, item in pairs(moduledata.items) do
| |
| n = n + (item.max or 1)
| |
| end
| |
| return n
| |
| end
| |
| | |
| function formatChance(chance)
| |
| chanceCeil = math.ceil(chance)
| |
| if chanceCeil == chance then
| |
| return chanceCeil
| |
| else
| |
| return string.format("%.2f", chance)
| |
| end
| |
| end
| |
| | |
| ------------------------------------------------------------------
| |
| | |
| -- Ajout un élément dans la liste des récompenses en calculant
| |
| -- également les chances globales d'obtenir cet élément.
| |
| -- Précision au dixième de pourcent près
| |
| function addItem(item, isAuto, numberOfItems, globalChance) | |
| if type(item) ~= 'table' then | |
| return "<error> item : pas une table" | |
| end
| |
|
| |
| local itemValue = item.value
| |
|
| |
| if not itemValue then
| |
| return "<error> item : propriété 'value' non renseignée"
| |
| end
| |
|
| |
| local itemType = item.type
| |
| local itemMin = item.min or 1
| |
| local itemMax = item.max or 1
| |
|
| |
| if itemMin > itemMax then
| |
| return "<error> item : propriété 'min' > 'max'"
| |
| end | |
|
| |
| local itemChance
| |
| | |
| if isAuto == true then
| |
| itemChance = ( itemMax - itemMin + 1 ) / numberOfItems
| |
| else
| |
| itemChance = item.chance
| |
| end
| |
|
| |
| if not itemChance then
| |
| return "<error> item : propriété chance non renseignée"
| |
| end
| |
|
| |
| itemChance = itemChance * globalChance
| |
|
| |
| local suffix = ' ('
| |
|
| |
| local itemQuantity = item.quantity
| |
| if itemQuantity then
| |
| suffix = suffix .. itemQuantity .. ', '
| |
| elseif itemMax > 1 then
| |
| suffix = suffix .. itemMin .. '-' .. itemMax .. ', '
| |
| end
| |
|
| |
| suffix = suffix .. formatChance(100 * itemChance) .. ' %'
| |
|
| |
| local itemPlayerLevel = item.level
| |
| local itemEvent = item.event
| |
|
| |
| if itemPlayerLevel then
| |
| suffix = suffix .. ', disponible au niveau ' .. itemPlayerLevel
| |
| if itemEvent then
| |
| suffix = suffix .. " et lors de l'événement " .. itemEvent
| |
| end
| |
| elseif itemEvent then
| |
| suffix = suffix .. ", disponible lors de l'événement " .. itemEvent
| |
| end
| |
| | |
| suffix = suffix .. ')'
| |
|
| |
| if itemType == 'item' then
| |
| return '*' .. itemValue .. suffix
| |
| elseif itemType == 'sublist' then
| |
| local subModuledata = require( 'Module:Liste d\'objets de Fallout 76/' .. itemValue ) | |
| | | |
| local sublist = '<div class="avt-dropdown-box mw-collapsible mw-collapsed">' .. | | local sublist = '<div class="avt-dropdown-box mw-collapsible">' .. |
| '<div class="avt-dropdown-box-title">' .. subModuledata.title .. suffix .. '</div>' .. | | '<div class="avt-dropdown-box-title">' .. moduledata.title .. '</div>' .. |
| '<div class="avt-dropdown-box-content mw-collapsible-content">\n' | | '<div class="avt-dropdown-box-content mw-collapsible-content">\n' |
| | | |
| local subIsAuto = subModuledata.auto
| | for i, subitem in pairs(moduledata.items) do |
| subIsAuto = subIsAuto == nil or subIsAuto == true
| | sublist = sublist .. addItem(subitem) .. '\n' |
|
| |
| local subNumberOfItems = countItems(subModuledata)
| |
|
| |
| for i, subitem in pairs(subModuledata.items) do | |
| sublist = sublist .. addItem(subitem, subIsAuto, subNumberOfItems, itemChance) .. '\n' | |
| end | | end |
| | | |
Ligne 117 : |
Ligne 18 : |
| | | |
| return sublist | | return sublist |
| else
| |
| return "<error> item : propriété 'type' non reconnue"
| |
| end | | end |
| end | | end |
|
| |
|
| -- Génère une liste hiérarchisée de récompenses avec le pourcentage
| |
| -- de chance d'obtenir chaque élément.
| |
| function p._build(args) | | function p._build(args) |
| -- chargement du module de paramétrage | | -- chargement du module de paramétrage |
Ligne 131 : |
Ligne 28 : |
| '<div class="avt-dropdown-box-title">' .. moduledata.title .. '</div>' .. | | '<div class="avt-dropdown-box-title">' .. moduledata.title .. '</div>' .. |
| '<div class="avt-dropdown-box-content mw-collapsible-content">\n' | | '<div class="avt-dropdown-box-content mw-collapsible-content">\n' |
|
| |
| local isAuto = moduledata.auto
| |
| isAuto = isAuto == nil or isAuto == true
| |
|
| |
| local numberOfItems = countItems(moduledata)
| |
| | | |
| for i, item in pairs(moduledata.items) do | | for i, item in pairs(moduledata.items) do |
| list = list .. addItem(item, isAuto, numberOfItems, 1) .. '\n' | | list = list .. addItem(item) .. '\n' |
| end | | end |
| | | |
Ligne 146 : |
Ligne 38 : |
| end | | end |
|
| |
|
| ------------------------------------------------------------------
| | function p.build(frame) |
| | | local args = {} |
| -- Fonction modèle
| | |
| | | local argsParent = frame:getParent().args |
| function p.build(frame) return p._build(getArgs(frame)) end
| | for cle, val in pairs(argsParent) do |
| | if val then |
| | args[cle] = mw.text.trim(val) |
| | end |
| | end |
| | |
| | return p._build(args) |
| | end |
|
| |
|
| return p | | return p |