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

-- Загружаем данные из JSON
local weaponData = mw.loadData("Модуль:IanComradeBot/prototypes/weapon.json/data")

local p = {}

--- Функция main принимает два параметра:
--- @param mode string   "melee" или "attackRate"
--- @param id string     идентификатор оружия
function p.main(mode, id)
    local entry = nil
    -- Ищем оружие с заданным id 
    for _, weapon in ipairs(weaponData) do
        if weapon.id == id then
            entry = weapon
            break
        end
    end

    if not entry then
        return "Оружие с id '" .. id .. "' не найдено."
    end

    if mode == "melee" then
        local melee = entry.MeleeWeapon
        if not melee then
            return "Нет данных о MeleeWeapon для оружия '" .. id .. "'."
        end

        -- Получаем таблицу повреждений для одноручного хвата
        local oneHandDamage = melee.damage and melee.damage.types
        if not oneHandDamage then
            return "Нет данных о повреждениях (MeleeWeapon.damage.types) для оружия '" .. id .. "'."
        end

        -- Пытаемся получить данные DamageOtherOnHit для двуручного хвата (если они есть)
        local twoHandDamage = entry.DamageOtherOnHit and entry.DamageOtherOnHit.damage and entry.DamageOtherOnHit.damage.types

        local lines = {}

        if twoHandDamage then
            -- Секция для одноручного хвата
            table.insert(lines, "В одноручном хвате:")
            for dmgType, value in pairs(oneHandDamage) do
                table.insert(lines, value .. " " .. dmgType)
            end

            -- Секция для двуручного хвата
            table.insert(lines, "В двуручном хвате:")
            -- Для типов, присутствующих в одноручном, выводим с пометкой
            for dmgType, value in pairs(twoHandDamage) do
                if oneHandDamage[dmgType] then
                    table.insert(lines, value .. " " .. dmgType)
                else
                    -- Если в двуручном есть тип, которого нет в одноручном – выводим просто
                    table.insert(lines, value .. " " .. dmgType)
                end
            end
        else
            -- Если нет DamageOtherOnHit, выводим просто одноручный урон
            for dmgType, value in pairs(oneHandDamage) do
                table.insert(lines, value .. " " .. dmgType)
            end
        end

        return table.concat(lines, "<br />")

    elseif mode == "attackRate" then
        local melee = entry.MeleeWeapon
        if not melee then
            return "Нет данных о MeleeWeapon для оружия '" .. id .. "'."
        end

        if melee.attackRate then
            return tostring(melee.attackRate)
        else
            return "Нет данных об attackRate для оружия '" .. id .. "'."
        end
    else
        return "Неверный режим: " .. mode
    end
end

return p