62 734
modifications
Aucun résumé des modifications |
Aucun résumé des modifications |
||
(13 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
local p = {} | local p = {} | ||
function addItem(item) | -- fonction commune | ||
if type(item) == ' | |||
return '*' .. | function getArgs(frame) | ||
local args = {} | |||
local | |||
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">' .. | local sublist = '<div class="avt-dropdown-box mw-collapsible mw-collapsed">' .. | ||
'<div class="avt-dropdown-box-title">' .. | '<div class="avt-dropdown-box-title">' .. subModuledata.title .. suffix .. '</div>' .. | ||
'<div class="avt-dropdown-box-content mw-collapsible-content">\n' | '<div class="avt-dropdown-box-content mw-collapsible-content">\n' | ||
for i, subitem in pairs( | local subIsAuto = subModuledata.auto | ||
sublist = sublist .. addItem(subitem) .. '\n' | subIsAuto = subIsAuto == nil or subIsAuto == true | ||
local subNumberOfItems = countItems(subModuledata) | |||
for i, subitem in pairs(subModuledata.items) do | |||
sublist = sublist .. addItem(subitem, subIsAuto, subNumberOfItems, itemChance) .. '\n' | |||
end | end | ||
Ligne 18 : | Ligne 117 : | ||
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 28 : | Ligne 131 : | ||
'<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) .. '\n' | list = list .. addItem(item, isAuto, numberOfItems, 1) .. '\n' | ||
end | end | ||
Ligne 38 : | Ligne 146 : | ||
end | end | ||
function p.build(frame) | ------------------------------------------------------------------ | ||
-- Fonction modèle | |||
function p.build(frame) return p._build(getArgs(frame)) end | |||
end | |||
return p | return p |
modifications