|
|
| (не показано 58 промежуточных версий этого же участника) |
| Строка 1: |
Строка 1: |
| local p = {} | | local p = {} |
| | local getArgs = require('Module:Arguments').getArgs |
|
| |
|
| -- Загрузка данных
| | function p.main(frame) |
| local chemData = mw.loadData("Модуль:IanComradeBot/chem prototypes.json/data") | | local args = getArgs(frame, { removeBlanks = false }) |
| local seedsData = mw.loadData("Модуль:IanComradeBot/prototypes/seeds.json/data") | | local name = args[1] or "" |
| | local attributes = args[2] or "" |
| | if name == "" then |
| | return "<span class=\"error\">Ошибка: не указано имя файла.</span>" |
| | end |
| | local ext = (args["ext"] or "png"):gsub("^%.", "") |
| | local namespace = args["namespace"] or "Файл" |
| | local max = tonumber(args["max"]) or 50 |
| | local include_base = (args["base"] ~= "no") |
|
| |
|
| local function kelvinToCelsius(k) | | local found = {} |
| return k - 273.15
| |
| end
| |
|
| |
|
| local function findSeedById(id, data) | | if include_base then |
| for _, seed in ipairs(data) do
| | local t = mw.title.new("Файл:" .. name .. "." .. ext) |
| if seed.id == id then | | if t and t.exists then |
| return seed | | table.insert(found, "") |
| end | | end |
| end | | end |
| return nil
| |
| end
| |
|
| |
|
| local function formatCharacteristics(seed)
| | for i = 1, max do |
| local parts = { | | local t = mw.title.new("Файл:" .. name .. "-" .. i .. "." .. ext) |
| ("[[Гидропоника#Потенция|Потенция]]: %s"):format(seed.potency or 1),
| | if t and t.exists then |
| ("[[Гидропоника#Урожайность|Урожайность]]: %s"):format(seed.yield), | | table.insert(found, "-" .. i) |
| ("[[Гидропоника#Срок жизни|Срок жизни]]: %s"):format(seed.lifespan),
| | end |
| ("[[Гидропоника#Созревание|Созревание]]: %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 |
| end
| |
|
| |
|
| local function formatChemicals(seed)
| | if #found == 0 then |
| if not seed.chemicals then return "-" end | | return "" |
| 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 | | end |
| return table.concat("<ul>" .. list .. "</ul>")
| |
| end
| |
|
| |
|
| local function formatMutations(seed, data) | | local before = "[[" .. namespace .. ":" .. name |
| if not seed.mutationPrototypes then return "-" end
| | local after = "." .. ext .. "|" .. attributes .. "]]" |
| 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() | | local parts = {} |
| return [[ | | table.insert(parts, "<choose before=\"" .. before .. "\" after=\"" .. after .. "\">") |
| {| id="BOTANY" class="wikitable sortable mw-collapsible" style="width:100%;"
| | for _, suf in ipairs(found) do |
| ! rowspan="2" style="width:10%;" | Плод
| | table.insert(parts, "<option>" .. suf .. "</option>") |
| ! 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 | | end |
| | table.insert(parts, "</choose>") |
|
| |
|
| return generateHeader() .. table.concat(rows, '\n') .. '\n' .. generateFooter() | | return frame:preprocess(table.concat(parts, "\n")) |
| 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 | | end |
|
| |
|
| return p | | return p |