62 734
modifications
Aucun résumé des modifications |
Aucun résumé des modifications |
||
(10 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 14 : | Ligne 14 : | ||
return args | 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 | end | ||
Ligne 21 : | Ligne 38 : | ||
-- également les chances globales d'obtenir cet élément. | -- également les chances globales d'obtenir cet élément. | ||
-- Précision au dixième de pourcent près | -- Précision au dixième de pourcent près | ||
function addItem(item, isAuto, | function addItem(item, isAuto, numberOfItems, globalChance) | ||
if type(item) ~= 'table' then | if type(item) ~= 'table' then | ||
return | return "<error> item : pas une table" | ||
end | end | ||
Ligne 29 : | Ligne 46 : | ||
if not itemValue then | if not itemValue then | ||
return | return "<error> item : propriété 'value' non renseignée" | ||
end | end | ||
local itemType = item.type | 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 | local itemChance | ||
if isAuto then | if isAuto == true then | ||
itemChance = | itemChance = ( itemMax - itemMin + 1 ) / numberOfItems | ||
else | else | ||
itemChance = item.chance | itemChance = item.chance | ||
end | end | ||
itemChance = itemChance * globalChance | if not itemChance then | ||
return "<error> item : propriété chance non renseignée" | |||
end | |||
itemChance = itemChance * globalChance | |||
local suffix = ' (' | local suffix = ' (' | ||
local itemQuantity = item.quantity | |||
if itemQuantity then | if itemQuantity then | ||
suffix = suffix .. itemQuantity .. ', ' | 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 | end | ||
suffix = suffix | suffix = suffix .. ')' | ||
if itemType == 'item' then | if itemType == 'item' then | ||
return '*' .. itemValue .. suffix | return '*' .. itemValue .. suffix | ||
elseif itemType == 'sublist' then | elseif itemType == 'sublist' then | ||
local | 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 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( | 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 71 : | Ligne 117 : | ||
return sublist | return sublist | ||
else | |||
return "<error> item : propriété 'type' non reconnue" | |||
end | end | ||
end | end | ||
Ligne 84 : | Ligne 132 : | ||
'<div class="avt-dropdown-box-content mw-collapsible-content">\n' | '<div class="avt-dropdown-box-content mw-collapsible-content">\n' | ||
local isAuto = moduledata.auto or true | local isAuto = moduledata.auto | ||
local | 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, | list = list .. addItem(item, isAuto, numberOfItems, 1) .. '\n' | ||
end | end | ||
modifications