|
|
| (не показаны 32 промежуточные версии этого же участника) |
| Строка 1: |
Строка 1: |
| local p = {}
| |
|
| |
|
| -- Загрузка данных
| |
| local chemData = mw.loadData("Модуль:IanComradeBot/chem prototypes.json/data")
| |
| local seedsData = mw.loadData("Модуль:IanComradeBot/prototypes/seeds.json/data")
| |
|
| |
| local function kelvinToCelsius(k)
| |
| return k - 273.15
| |
| end
| |
|
| |
| local function findSeedById(id, data)
| |
| for _, seed in ipairs(data) do
| |
| if seed.id == id then
| |
| return seed
| |
| end
| |
| end
| |
| return nil
| |
| end
| |
|
| |
| local function formatCharacteristics(seed)
| |
| local parts = {
| |
| ("[[Гидропоника#Потенция|Потенция]]: %s"):format(seed.potency or 1),
| |
| ("[[Гидропоника#Урожайность|Урожайность]]: %s"):format(seed.yield),
| |
| ("[[Гидропоника#Срок жизни|Срок жизни]]: %s"):format(seed.lifespan),
| |
| ("[[Гидропоника#Созревание|Созревание]]: %s"):format(seed.maturation),
| |
| ("[[Гидропоника#Производство|Производство]]: %s"):format(seed.production),
| |
| ("[[Гидропоника#Стадии роста|Стадии роста]]: %s"):format(seed.growthStages or 6),
| |
| }
| |
| return table.concat(parts, '<br>')
| |
| end
| |
|
| |
| local function formatConditions(seed)
| |
| local parts = {
| |
| ("[[Гидропоника#Потребление воды|Вода]]: %s"):format(seed.waterConsumption or 0.5),
| |
| ("[[Гидропоника#Потребление нутриентов|Удобрение]]: %s"):format(seed.nutrientConsumption or 0.75),
| |
| ("[[Гидропоника#Оптимальная температура|Темп.]]: %.2f°C"):format(kelvinToCelsius(seed.idealHeat or 293)),
| |
| }
| |
| return table.concat(parts, '<br>')
| |
| end
| |
|
| |
| local function formatHarvestType(seed)
| |
| return seed.harvestRepeat and "[[Гидропоника#Тип урожая|" .. tostring(seed.harvestRepeat) .. "]]" or "-"
| |
| end
| |
| local function formatHarvestType(seed)
| |
| local harvestRepeat = seed.harvestRepeat
| |
| if harvestRepeat == "Repeat" then
| |
| return "[[Гидропоника#Тип урожая|Многолетнее]]"
| |
| elseif harvestRepeat == "SelfHarvest" then
| |
| return "[[Гидропоника#Тип урожая|Самосбор]]"
| |
| else
| |
| return "[[Гидропоника#Тип урожая|Однолетнее]]"
| |
| end
| |
| end
| |
|
| |
| local function formatChemicals(seed)
| |
| if not seed.chemicals then return "-" end
| |
| local list = {}
| |
| for chemId, vals in pairs(seed.chemicals) do
| |
| local entry = chemData[chemId]
| |
| local chemName = entry and entry.name or chemId
| |
| table.insert(list, string.format(
| |
| "<li>[[Химия#chem_%s|%s]] (мин: %s, макс: %s, дел: %s)</li>",
| |
| chemId, chemName, vals.Min or 0, vals.Max or 0, vals.PotencyDivisor or 1
| |
| ))
| |
| end
| |
| return table.concat("<ul>" .. list .. "</ul>")
| |
| end
| |
|
| |
| local function formatMutations(seed, data)
| |
| if not seed.mutationPrototypes then return "-" end
| |
| local list = {}
| |
| for _, mu in ipairs(seed.mutationPrototypes) do
| |
| local target = findSeedById(mu, data)
| |
| if target and target.productPrototypes then
| |
| for _, prod in ipairs(target.productPrototypes) do
| |
| table.insert(list, ("<li>{{Предмет|%s|link=Гидропоника#{{#invoke:Entity Lookup|getname|%s}}}}</li>"):format(prod, prod))
| |
| end
| |
| end
| |
| end
| |
| return table.concat("<ul>" .. list .. "</ul>")
| |
| end
| |
|
| |
| local function generateHeader()
| |
| return [[
| |
| {| id="BOTANY" class="wikitable sortable mw-collapsible" style="width:100%;"
| |
| ! rowspan="2" style="width:10%;" | Плод
| |
| ! rowspan="2" class="unsortable" style="width:5%;" | Семена
| |
| ! rowspan="2" class="unsortable" style="width:5%;" | Растение
| |
| ! colspan="3" class="unsortable" style="width:30%;" id="no-highlight" | Характеристики
| |
| ! rowspan="2" class="unsortable" style="width:30%;" | Содержит вещества
| |
| ! rowspan="2" style="width:20%;" | Мутации
| |
| |-
| |
| ! style="width:10%;" class="unsortable" | Рост
| |
| ! style="width:10%;" class="unsortable" | Условия
| |
| ! style="width:5%;" class="unsortable" | Тип сбора
| |
| ]]
| |
| end
| |
|
| |
| local function generateFooter()
| |
| return "|}"
| |
| end
| |
|
| |
| function p.table(frame)
| |
| local data = mw.loadData("Модуль:IanComradeBot/prototypes/seeds.json/data")
| |
| local rows = {}
| |
|
| |
| for _, seed in ipairs(data) do
| |
| local prodId = seed.productPrototypes[1]
| |
| local seedId = seed.packetPrototype
| |
| local seedName = string.format('{{#invoke:Entity Lookup|getname|%s}}', seedId)
| |
|
| |
| local anchor = string.format('{{anchor|%s}}', seedName)
| |
| local fruitImg = string.format(
| |
| '{{Предмет|%s|size=64px|vertical=1|imageTooltip=1|link=%s}}',
| |
| prodId, seedName
| |
| )
| |
| local seedImg = string.format(
| |
| '{{Предмет|%s|size=64px|vertical=1|imageTooltip=1|l=|link=%s}}',
| |
| seedId, seedName
| |
| )
| |
| local plantImg = string.format(
| |
| '{{Предмет|%s-harvest|size=64px|l=|link=%s}}',
| |
| seedId, seedName
| |
| )
| |
|
| |
| local colGrowth = formatCharacteristics(seed)
| |
| local colConditions = formatConditions(seed)
| |
| local colHarvest = formatHarvestType(seed)
| |
| local colChemicals = formatChemicals(seed)
| |
| local colMutations = formatMutations(seed, data)
| |
|
| |
| local row = frame:preprocess(string.format(
| |
| [[|-
| |
| ! %s
| |
| ! %s
| |
| ! %s
| |
| | %s
| |
| | %s
| |
| | %s
| |
| | %s
| |
| | %s ]],
| |
| fruitImg, seedImg, plantImg,
| |
| colGrowth, colConditions, colHarvest,
| |
| colChemicals, colMutations
| |
| ))
| |
| table.insert(rows, row)
| |
| end
| |
|
| |
| return generateHeader() .. table.concat(rows, '\n') .. '\n' .. generateFooter()
| |
| end
| |
|
| |
| function p.main(frame)
| |
| local args = frame.args
| |
| local id = args[1]
| |
| local mode = mw.text.trim(args[2] or ""):lower()
| |
| local seed = findSeedById(id, seedsData)
| |
| if not seed then return "" end
| |
|
| |
| if mode == "growth" then
| |
| return formatCharacteristics(seed)
| |
| elseif mode == "conditions" then
| |
| return formatConditions(seed)
| |
| elseif mode == "harvest" then
| |
| return formatHarvestType(seed)
| |
| elseif mode == "chemicals" then
| |
| return formatChemicals(seed)
| |
| elseif mode == "mutations" then
| |
| return formatMutations(seed, seedsData)
| |
| else
| |
| return ""
| |
| end
| |
| end
| |
|
| |
| return p
| |