Модуль:Песочница/Pok: различия между версиями

Материал из Space Station 14 Вики
мНет описания правки
мНет описания правки
Строка 22: Строка 22:


     -- Если данные для ID найдены, используем их, иначе возвращаем дефолтное значение
     -- Если данные для ID найдены, используем их, иначе возвращаем дефолтное значение
     local protBlunt = itemData and itemData.Blunt and (itemData.Blunt * 100) .. "%" or "-"
     local function formatPercentage(value)
     local protSlash = itemData and itemData.Slash and (itemData.Slash * 100) .. "%" or "-"
        return value and math.floor((1 - value) * 100) .. "%" or "-"
     local protPiercing = itemData and itemData.Piercing and (itemData.Piercing * 100) .. "%" or "-"
    end
     local protHeat = itemData and itemData.Heat and (itemData.Heat * 100) .. "%" or "-"
   
     local protRadiation = itemData and itemData.Radiation and (itemData.Radiation * 100) .. "%" or "-"
     local protBlunt = formatPercentage(itemData and itemData.Blunt)
     local protCaustic = itemData and itemData.Caustic and (itemData.Caustic * 100) .. "%" or "-"
    local protSlash = formatPercentage(itemData and itemData.Slash)
     local protExplosion = itemData and itemData.ExplosionResistance and (itemData.ExplosionResistance * 100) .. "%" or "-"
     local protPiercing = formatPercentage(itemData and itemData.Piercing)
     local protHeat = formatPercentage(itemData and itemData.Heat)
     local protRadiation = formatPercentage(itemData and itemData.Radiation)
     local protCaustic = formatPercentage(itemData and itemData.Caustic)
     local protExplosion = formatPercentage(itemData and itemData.ExplosionResistance)


     -- Получаем значения sprintModifier и walkModifier
     -- Получаем значения sprintModifier и walkModifier
Строка 37: Строка 41:
     -- Формируем сообщение в зависимости от значений sprintModifier и walkModifier
     -- Формируем сообщение в зависимости от значений sprintModifier и walkModifier
     if sprintModifier and walkModifier then
     if sprintModifier and walkModifier then
        local sprintPercent = math.floor((1 - sprintModifier) * 100)
        local walkPercent = math.floor((1 - walkModifier) * 100)
       
         if sprintModifier == walkModifier then
         if sprintModifier == walkModifier then
             speedDescription = "* Понижает скорость передвижения на <span style=\"color:yellow\">'''" .. (sprintModifier * 100) .. " %'''</span>\n"
             speedDescription = "* Понижает скорость передвижения на <span style=\"color:yellow\">'''" .. sprintPercent .. " %'''</span>\n"
         else
         else
             speedDescription = "* Понижает скорость бега на <span style=\"color:yellow\">'''" .. (sprintModifier * 100) .. " %'''</span>\n"
             speedDescription = "* Понижает скорость бега на <span style=\"color:yellow\">'''" .. sprintPercent .. " %'''</span>\n"
             speedDescription = speedDescription .. "* Понижает скорость ходьбы на <span style=\"color:yellow\">'''" .. (walkModifier * 100) .. " %'''</span>\n"
             speedDescription = speedDescription .. "* Понижает скорость ходьбы на <span style=\"color:yellow\">'''" .. walkPercent .. " %'''</span>\n"
         end
         end
     end
     end

Версия от 20:25, 28 октября 2024

Для документации этого модуля может быть создана страница Модуль:Песочница/Pok/doc

local p = {}

-- Функция для загрузки данных плат из JSON-файла
local function loadData()
    return mw.text.jsonDecode(mw.title.new("User:IanComradeBot/armor_prototypes.json"):getContent())
end

-- Функция для поиска данных по ID
local function findDataById(dataCache, id)
    for _, item in ipairs(dataCache) do
        if item.id == id then
            return item
        end
    end
    return nil
end

function p.main(frame)
    local dataCache = loadData()
    local id = frame.args.id or "" -- ID предмета
    local itemData = findDataById(dataCache, id)

    -- Если данные для ID найдены, используем их, иначе возвращаем дефолтное значение
    local function formatPercentage(value)
        return value and math.floor((1 - value) * 100) .. "%" or "-"
    end
    
    local protBlunt = formatPercentage(itemData and itemData.Blunt)
    local protSlash = formatPercentage(itemData and itemData.Slash)
    local protPiercing = formatPercentage(itemData and itemData.Piercing)
    local protHeat = formatPercentage(itemData and itemData.Heat)
    local protRadiation = formatPercentage(itemData and itemData.Radiation)
    local protCaustic = formatPercentage(itemData and itemData.Caustic)
    local protExplosion = formatPercentage(itemData and itemData.ExplosionResistance)

    -- Получаем значения sprintModifier и walkModifier
    local sprintModifier = itemData and itemData.sprintModifier
    local walkModifier = itemData and itemData.walkModifier
    local speedDescription = ""

    -- Формируем сообщение в зависимости от значений sprintModifier и walkModifier
    if sprintModifier and walkModifier then
        local sprintPercent = math.floor((1 - sprintModifier) * 100)
        local walkPercent = math.floor((1 - walkModifier) * 100)
        
        if sprintModifier == walkModifier then
            speedDescription = "* Понижает скорость передвижения на <span style=\"color:yellow\">'''" .. sprintPercent .. " %'''</span>\n"
        else
            speedDescription = "* Понижает скорость бега на <span style=\"color:yellow\">'''" .. sprintPercent .. " %'''</span>\n"
            speedDescription = speedDescription .. "* Понижает скорость ходьбы на <span style=\"color:yellow\">'''" .. walkPercent .. " %'''</span>\n"
        end
    end

    -- Описание и местоположение
    local description = speedDescription .. (frame.args.description or "")
    local location = frame.args.location or ""

    local anchorName = frame.args.anchorName or "" -- Название якоря
    local backgroundColor = frame.args.backgroundColor or "" -- Цвет фона первой ячейки
    local class = frame.args.class or "" -- Класс

    -- Формирование строк для ячеек таблицы
    local out = ""
    out = out .. '!class="' .. class .. '" style="background-color: ' .. backgroundColor .. ';"|' .. frame:preprocess('{{Anchor|' .. anchorName .. '}}') 
    out = out .. frame:preprocess('{{#invoke:Entity Lookup|createimagetooltip|File:' .. id .. '|' .. id .. '|Мета=64x64px}}')
    out = out .. '<br>' .. frame:preprocess('{{#invoke:Entity Lookup|getname|' .. id .. '}}') .. '\n'
    out = out .. '|class="' .. class .. '" style="font-weight:bold;color: crimson;"|' .. protBlunt .. '\n'
    out = out .. '|class="' .. class .. '" style="font-weight:bold;color: indianred;"|' .. protSlash .. '\n'
    out = out .. '|class="' .. class .. '" style="font-weight:bold;color: darksalmon;"|' .. protPiercing .. '\n'
    out = out .. '|class="' .. class .. '" style="font-weight:bold;color: orange;"|' .. protHeat .. '\n'
    out = out .. '|class="' .. class .. '" style="font-weight:bold;color: plum;"|' .. protCaustic .. '\n'
    out = out .. '|class="' .. class .. '" style="font-weight:bold;color: limegreen;"|' .. protRadiation .. '\n'
    out = out .. '|class="' .. class .. '" style="font-weight:bold;color: tan;"|' .. protExplosion .. '\n'
    out = out .. '|class="' .. class .. '" style=""|\n' .. description .. '\n'
    out = out .. '|class="' .. class .. '" style=""|\n' .. location .. '\n|-'

    return out
end

return p