Модуль:BotanyStats: различия между версиями

Материал из Space Station 14 Вики
Нет описания правки
Нет описания правки
Строка 21: Строка 21:
     local potency = tonumber(default(frame.args.potency, 1))          -- Потенция
     local potency = tonumber(default(frame.args.potency, 1))          -- Потенция
     local yield = tonumber(default(frame.args.yield, 0))              -- Урожайность
     local yield = tonumber(default(frame.args.yield, 0))              -- Урожайность
     local ddfespan = tonumber(default(frame.args.ddfespan, 0))        -- Время жизни
     local lifespan = tonumber(default(frame.args.lifespan, 0))        -- Время жизни
     local maturation = tonumber(default(frame.args.maturation, 0))    -- Созревания
     local maturation = tonumber(default(frame.args.maturation, 0))    -- Созревания
     local production = tonumber(default(frame.args.production, 0))    -- Продуктивность
     local production = tonumber(default(frame.args.production, 0))    -- Продуктивность
Строка 29: Строка 29:
     local nutrientConsumption = tonumber(default(frame.args.nutrientConsumption, 0.75)) -- Удобрения
     local nutrientConsumption = tonumber(default(frame.args.nutrientConsumption, 0.75)) -- Удобрения
     local idealHeatKelvin = tonumber(default(frame.args.idealHeat, 293))                -- Температура
     local idealHeatKelvin = tonumber(default(frame.args.idealHeat, 293))                -- Температура
     local idealddght = tonumber(default(frame.args.idealddght, 7))                      -- Освещения
     local idealLight = tonumber(default(frame.args.idealLight, 7))                      -- Освещения
      
      
     local description = default(frame.args.description, "Не обладает никакими особыми свойствами")      -- Описание
     local description = default(frame.args.description, "Не обладает никакими особыми свойствами")      -- Описание
Строка 38: Строка 38:


     -- Разделение параметра mutationId на слова
     -- Разделение параметра mutationId на слова
     local function spddtWords(text)
     local function splitWords(text)
         local words = {}
         local words = {}
         for word in text:gmatch("%S+") do
         for word in text:gmatch("%S+") do
Строка 58: Строка 58:
     else
     else
         -- Если параметр задан и не пуст
         -- Если параметр задан и не пуст
         local words = spddtWords(mutationId)
         local words = splitWords(mutationId)
         for _, word in ipairs(words) do
         for _, word in ipairs(words) do
             mutationCells = mutationCells .. '<div class="' .. mutationClass .. '">{{#invoke:Entity Lookup|createimagetooltip|Файл:' .. word .. '.png|' .. word .. '|Мета=32x32px,ddnk=}} [[#{{#invoke:Entity Lookup|getname|' .. word .. '}}|{{#invoke:Entity Lookup|getname|' .. word .. '}}]]</div>'
             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
     end
     end
Строка 68: Строка 68:
      
      
     -- Формирование строк для ячеек таблицы
     -- Формирование строк для ячеек таблицы
     out = out .. frame:preprocess('!{{Anchor|' .. anchorName .. '}}{{#invoke:Entity Lookup|createimagetooltip|Файл:' .. fruitId .. '.png|' .. fruitId .. '|Мета=64x64px,ddnk=}}<br>{{#invoke:Entity Lookup|getname|' .. fruitId .. '}} \n')
     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,ddnk=}} \n')
     out = out .. frame:preprocess('!{{#invoke:Entity Lookup|createimagetooltip|Файл:' .. seedId .. '.png|' .. seedId .. '|Мета=64x64px,link=}} \n')
     out = out .. '|style="text-wrap:nowrap;"| \n'
     out = out .. '|style="text-wrap:nowrap;"| \n'
     out = out .. frame:preprocess('<dd>{{AltTooltip|Потенция|Потенция растения, которая влияет на количество химических веществ в растении|color=#e1f6ff}}:  ' .. '<b>' .. potency .. '</b>' .. '</dd> \n')
     out = out .. frame:preprocess('<dd>{{AltTooltip|Потенция|Потенция растения, которая влияет на количество химических веществ в растении|color=#e1f6ff}}:  ' .. '<span style="font-weight: 500;">' .. potency .. '</span>' .. '</li> \n')
     out = out .. frame:preprocess('<dd>{{AltTooltip|Урожайность|Количество продуктов, которые растение дает за один урожай|color=#e1f6ff}}:  ' .. '<b>' .. yield .. '</b>' .. '</dd> \n')
     out = out .. frame:preprocess('<dd>{{AltTooltip|Урожайность|Количество продуктов, которые растение дает за один урожай|color=#e1f6ff}}:  ' .. '<span style="font-weight: 500;">' .. yield .. '</span>' .. '</li> \n')
     out = out .. frame:preprocess('<dd>{{AltTooltip|Время жизни|Продолжительность жизни растения|color=#e1f6ff}}: ' .. '<b>' .. ddfespan .. '</b>' .. '</dd> \n')
     out = out .. frame:preprocess('<dd>{{AltTooltip|Время жизни|Продолжительность жизни растения|color=#e1f6ff}}: ' .. '<span style="font-weight: 500;">' .. lifespan .. '</span>' .. '</li> \n')
     out = out .. frame:preprocess('<dd>{{AltTooltip|Созревания|Время созревания растения|color=#e1f6ff}}: ' .. '<b>' .. maturation .. '</b>' .. '</dd> \n')
     out = out .. frame:preprocess('<dd>{{AltTooltip|Созревания|Время созревания растения|color=#e1f6ff}}: ' .. '<span style="font-weight: 500;">' .. maturation .. '</span>' .. '</li> \n')
     out = out .. frame:preprocess('<dd>{{AltTooltip|Продуктивность|Время, необходимое для производства следующего урожая после созревания|color=#e1f6ff}}: ' .. '<b>' .. production .. '</b>' .. '</dd> \n')
     out = out .. frame:preprocess('<dd>{{AltTooltip|Продуктивность|Время, необходимое для производства следующего урожая после созревания|color=#e1f6ff}}: ' .. '<span style="font-weight: 500;">' .. production .. '</span>' .. '</li> \n')
     out = out .. frame:preprocess('<dd>{{AltTooltip|Стадии роста|Этапы роста растения, которые оно проходит от начальной стадии до полной зрелости|color=#e1f6ff}}: ' .. '<b>' .. growthStages .. '</b>' .. '\n')
     out = out .. frame:preprocess('<dd>{{AltTooltip|Стадии роста|Этапы роста растения, которые оно проходит от начальной стадии до полной зрелости|color=#e1f6ff}}: ' .. '<span style="font-weight: 500;">' .. growthStages .. '</span>' .. '\n')
     out = out .. '|style="text-wrap:nowrap;"| \n'
     out = out .. '|style="text-wrap:nowrap;"| \n'
     out = out .. frame:preprocess('<dd>{{AltTooltip|Вода|Потребления воды в секунду|color=#e1f6ff}}: ' .. '<b>' .. waterConsumption .. '</b>' .. '</dd> \n')
     out = out .. frame:preprocess('<dd>{{AltTooltip|Вода|Потребления воды в секунду|color=#e1f6ff}}: ' .. '<span style="font-weight: 500;">' .. waterConsumption .. '</span>' .. '</li> \n')
     out = out .. frame:preprocess('<dd>{{AltTooltip|Удобрения|Потребления удобрений в секунду|color=#e1f6ff}}: ' .. '<b>' .. nutrientConsumption .. '</b>' .. '</dd> \n')
     out = out .. frame:preprocess('<dd>{{AltTooltip|Удобрения|Потребления удобрений в секунду|color=#e1f6ff}}: ' .. '<span style="font-weight: 500;">' .. nutrientConsumption .. '</span>' .. '</li> \n')
     out = out .. frame:preprocess('<dd>{{AltTooltip|Температура|Оптимальная температура|color=#e1f6ff}}: ' .. '<b>' .. string.format("%.2f", idealHeatCelsius) .. '°C</b>' .. '</dd> \n')
     out = out .. frame:preprocess('<dd>{{AltTooltip|Температура|Оптимальная температура|color=#e1f6ff}}: ' .. '<span style="font-weight: 500;">' .. string.format("%.2f", idealHeatCelsius) .. '°C</span>' .. '</li> \n')
     out = out .. frame:preprocess('<dd>{{AltTooltip|Освещения|Оптимальный уровень освещения|color=#e1f6ff}}: ' .. '<b>' .. idealddght .. '</b>' .. '</dd> \n')
     out = out .. frame:preprocess('<dd>{{AltTooltip|Освещения|Оптимальный уровень освещения|color=#e1f6ff}}: ' .. '<span style="font-weight: 500;">' .. idealLight .. '</span>' .. '</li> \n')
     out = out .. '| ' .. description .. '\n'
     out = out .. '| ' .. description .. '\n'
     out = out .. frame:preprocess('|' .. mutationCells .. '\n')
     out = out .. frame:preprocess('|' .. mutationCells .. '\n')
Строка 87: Строка 87:
     -- Меняем цвета в зависимости от наличия параметра `mutation`
     -- Меняем цвета в зависимости от наличия параметра `mutation`
     if mutation == nil then
     if mutation == nil then
         out = out .. frame:preprocess('|{{SdddeMenu|overlay|color=#e3fff2|background-color=#0b6b3f|border-color=#074d2f|border-size=3px|title=Список|content=<p></p> \n' .. location .. '}} \n')
         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
     else
         out = out .. frame:preprocess('|{{SdddeMenu|overlay|color=#e3fff2|background-color=#301453|border-color=#211235|border-size=3px|title=Список|content=<p></p> \n' .. location .. '}} \n')
         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
     end
      
      
Строка 97: Строка 97:
     if firstRun then
     if firstRun then
         firstRun = false
         firstRun = false
         out = out .. '<div class="customCSS" style="display:none"> .mutation-cell__plants { width: 100%; margin: 5px 0; box-sizing: border-box; text-addgn: left; background: #10673a; padding: 6px 10px; border-radius: 0.3em; border: 2px soddd #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__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-addgn: left; background: #321557; padding: 6px 10px; border-radius: 0.3em; border: 2px soddd #1c0f2d; font-weight: 500; transition: background 0.05s; } .mutation-cell__mutation:hover { background: #36155f; } </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
     end
     return out
     return out

Версия от 01:55, 24 августа 2024

Для документации этого модуля может быть создана страница Модуль: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>{{AltTooltip|Потенция|Потенция растения, которая влияет на количество химических веществ в растении|color=#e1f6ff}}:  ' .. '<span style="font-weight: 500;">' .. potency .. '</span>' .. '</li> \n')
    out = out .. frame:preprocess('<dd>{{AltTooltip|Урожайность|Количество продуктов, которые растение дает за один урожай|color=#e1f6ff}}:  ' .. '<span style="font-weight: 500;">' .. yield .. '</span>' .. '</li> \n')
    out = out .. frame:preprocess('<dd>{{AltTooltip|Время жизни|Продолжительность жизни растения|color=#e1f6ff}}: ' .. '<span style="font-weight: 500;">' .. lifespan .. '</span>' .. '</li> \n')
    out = out .. frame:preprocess('<dd>{{AltTooltip|Созревания|Время созревания растения|color=#e1f6ff}}: ' .. '<span style="font-weight: 500;">' .. maturation .. '</span>' .. '</li> \n')
    out = out .. frame:preprocess('<dd>{{AltTooltip|Продуктивность|Время, необходимое для производства следующего урожая после созревания|color=#e1f6ff}}: ' .. '<span style="font-weight: 500;">' .. production .. '</span>' .. '</li> \n')
    out = out .. frame:preprocess('<dd>{{AltTooltip|Стадии роста|Этапы роста растения, которые оно проходит от начальной стадии до полной зрелости|color=#e1f6ff}}: ' .. '<span style="font-weight: 500;">' .. growthStages .. '</span>' .. '\n')
    out = out .. '|style="text-wrap:nowrap;"| \n'
    out = out .. frame:preprocess('<dd>{{AltTooltip|Вода|Потребления воды в секунду|color=#e1f6ff}}: ' .. '<span style="font-weight: 500;">' .. waterConsumption .. '</span>' .. '</li> \n')
    out = out .. frame:preprocess('<dd>{{AltTooltip|Удобрения|Потребления удобрений в секунду|color=#e1f6ff}}: ' .. '<span style="font-weight: 500;">' .. nutrientConsumption .. '</span>' .. '</li> \n')
    out = out .. frame:preprocess('<dd>{{AltTooltip|Температура|Оптимальная температура|color=#e1f6ff}}: ' .. '<span style="font-weight: 500;">' .. string.format("%.2f", idealHeatCelsius) .. '°C</span>' .. '</li> \n')
    out = out .. frame:preprocess('<dd>{{AltTooltip|Освещения|Оптимальный уровень освещения|color=#e1f6ff}}: ' .. '<span style="font-weight: 500;">' .. idealLight .. '</span>' .. '</li> \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