Модуль:BotanyStats
Версия от 05:24, 1 сентября 2024; Pok (обсуждение | вклад)
Для документации этого модуля может быть создана страница Модуль:BotanyStats/doc
local p = {}
local firstRun = true -- Глобальная переменная для отслеживания первого вызова
-- Функция для установки значения по умолчанию
local function default(value, fallback)
return (value ~= nil and value ~= "") and value or fallback
end
-- Функция для преобразования Кельвинов в Цельсии
local function kelvinToCelsius(kelvin)
return kelvin - 273.15
end
function p.templateCells(frame)
local out = ""
local anchorName = default(frame.args.anchorName, "") -- Якорь
local fruitId = default(frame.args.fruitId, "") -- ID растения
local seedId = default(frame.args.seedId, "") -- ID семена
local potency = tonumber(default(frame.args.potency, 1)) -- Потенция
local yield = tonumber(default(frame.args.yield, 0)) -- Урожайность
local lifespan = tonumber(default(frame.args.lifespan, 0)) -- Время жизни
local maturation = tonumber(default(frame.args.maturation, 0)) -- Созревания
local production = tonumber(default(frame.args.production, 0)) -- Продуктивность
local growthStages = tonumber(default(frame.args.growthStages, 6)) -- Стадии роста
local waterConsumption = tonumber(default(frame.args.waterConsumption, 0.5)) -- Вода
local nutrientConsumption = tonumber(default(frame.args.nutrientConsumption, 0.75)) -- Удобрения
local idealHeatKelvin = tonumber(default(frame.args.idealHeat, 293)) -- Температура
local idealLight = tonumber(default(frame.args.idealLight, 7)) -- Освещения
local description = default(frame.args.description, "Не обладает никакими особыми свойствами") -- Описание
local mutationId = frame.args.mutationId -- Мутации
local location = default(frame.args.location, "* Нет гарантированных мест спавна") -- Местонахождение
local mutation = frame.args.mutation -- Параметр для определения таблицы: мутаций она или обычных растений
-- Разделение параметра mutationId на слова
local function splitWords(text)
local words = {}
for word in text:gmatch("%S+") do
table.insert(words, word)
end
return words
end
-- Меняем цвета в зависимости от наличия параметра `mutation`
local mutationClass = (mutation == nil) and 'mutation-cell__plants' or 'mutation-cell__mutation'
local mutationCells = ""
if mutationId == nil then
-- Если параметр отсутствует
mutationCells = "" -- Не отображаем ничего для мутаций
elseif mutationId == "" then
-- Если параметр пуст
mutationCells = '<div class="' .. mutationClass .. '" style="color:#e3fff2;">Не имеет мутаций</div> \n'
else
-- Если параметр задан и не пуст
local words = splitWords(mutationId)
for _, word in ipairs(words) do
mutationCells = mutationCells .. '<div class="' .. mutationClass .. '">{{#invoke:Entity Lookup|createimagetooltip|Файл:' .. word .. '.png|' .. word .. '|Мета=32x32px,link=}} [[#{{#invoke:Entity Lookup|getname|' .. word .. '}}|{{#invoke:Entity Lookup|getname|' .. word .. '}}]]</div>'
end
end
-- Преобразование температуры из Кельвинов в Цельсии
local idealHeatCelsius = kelvinToCelsius(idealHeatKelvin)
-- Формирование строк для ячеек таблицы
out = out .. frame:preprocess('!{{Anchor|' .. anchorName .. '}}{{#invoke:Entity Lookup|createimagetooltip|Файл:' .. fruitId .. '.png|' .. fruitId .. '|Мета=64x64px,link=}}<br>{{#invoke:Entity Lookup|getname|' .. fruitId .. '}} \n')
out = out .. frame:preprocess('!{{#invoke:Entity Lookup|createimagetooltip|Файл:' .. seedId .. '.png|' .. seedId .. '|Мета=64x64px,link=}} \n')
out = out .. '|style="text-wrap:nowrap;"| \n'
out = out .. frame:preprocess('<dd style="font-size: 0.9em;">{{AltTooltip|Потенция|Потенция растения, которая влияет на количество химических веществ в растении|font-weight=500}}: ' .. potency .. '</dd> \n')
out = out .. frame:preprocess('<dd style="font-size: 0.9em;">{{AltTooltip|Урожайность|Количество продуктов, которые растение дает за один урожай|font-weight=500}}: ' .. yield .. '</dd> \n')
out = out .. frame:preprocess('<dd style="font-size: 0.9em;">{{AltTooltip|Время жизни|Продолжительность жизни растения|font-weight=500}}: ' .. lifespan .. '</dd> \n')
out = out .. frame:preprocess('<dd style="font-size: 0.9em;">{{AltTooltip|Созревания|Время созревания растения|font-weight=500}}: ' .. maturation .. '</dd> \n')
out = out .. frame:preprocess('<dd style="font-size: 0.9em;">{{AltTooltip|Продуктивность|Время, необходимое для производства следующего урожая после созревания|font-weight=500}}: ' .. production .. '</dd> \n')
out = out .. frame:preprocess('<dd style="font-size: 0.9em;">{{AltTooltip|Стадии роста|Этапы роста растения, которые оно проходит от начальной стадии до полной зрелости|font-weight=500}}: ' .. growthStages .. '\n')
out = out .. '|style="text-wrap:nowrap;"| \n'
out = out .. frame:preprocess('<dd style="font-size: 0.9em;">{{AltTooltip|Вода|Потребления воды в секунду|font-weight=500}}: ' .. waterConsumption .. '</dd> \n')
out = out .. frame:preprocess('<dd style="font-size: 0.9em;">{{AltTooltip|Удобрения|Потребления удобрений в секунду|font-weight=500}}: ' .. nutrientConsumption .. '</dd> \n')
out = out .. frame:preprocess('<dd style="font-size: 0.9em;">{{AltTooltip|Температура|Оптимальная температура|font-weight=500}}: ' .. string.format("%.2f", idealHeatCelsius) .. '°C</dd> \n')
out = out .. frame:preprocess('<dd style="font-size: 0.9em;">{{AltTooltip|Освещения|Оптимальный уровень освещения|font-weight=500}}: ' .. idealLight .. '</dd> \n')
out = out .. '| ' .. description .. '\n'
out = out .. frame:preprocess('|' .. mutationCells .. '\n')
-- Меняем цвета в зависимости от наличия параметра `mutation`
if mutation == nil then
out = out .. frame:preprocess('|{{SlideMenu|overlay|color=#e3fff2|background-color=#0b6b3f|border-color=#074d2f|border-size=3px|title=Список|content=<p></p> \n' .. location .. '}} \n')
else
out = out .. frame:preprocess('|{{SlideMenu|overlay|color=#e3fff2|background-color=#301453|border-color=#211235|border-size=3px|title=Список|content=<p></p> \n' .. location .. '}} \n')
end
out = out .. '|- \n'
-- CSS код, который подгружается при первом вызове модуля на странице
if firstRun then
firstRun = false
out = out .. '<div class="customCSS" style="display:none"> .mutation-cell__plants { width: 100%; margin: 5px 0; box-sizing: border-box; text-align: left; background: #10673a; padding: 6px 10px; border-radius: 0.3em; border: 2px solid #094124; font-weight: 500; transition: background 0.05s; } .mutation-cell__plants:hover { background: #126d3e; } </div>'
out = out .. '<div class="customCSS" style="display:none"> .mutation-cell__mutation { width: 100%; margin: 5px 0; box-sizing: border-box; text-align: left; background: #321557; padding: 6px 10px; border-radius: 0.3em; border: 2px solid #1c0f2d; font-weight: 500; transition: background 0.05s; } .mutation-cell__mutation:hover { background: #36155f; } </div>'
end
return out
end
return p