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

мНет описания правки
мНет описания правки
Строка 1: Строка 1:
-- Загрузка данных
-- Загружаем данные из JSON
local sizeData = mw.loadData("Модуль:IanComradeBot/prototypes/Item/size.json/data")
local weaponData = mw.loadData("Модуль:IanComradeBot/prototypes/weapon.json/data")


local p = {}
local p = {}


function p.main(frame)
--- Функция main принимает два параметра:
     -- Получаем первый параметр, который должен быть id
--- @param mode string  "melee" или "attackRate"
     local id = frame.args[1] or frame.args.id
--- @param id string    идентификатор оружия
     if not id then
function p.main(mode, id)
         return "Ошибка: не передан 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
     end


     -- Проходим по всем записям в sizeData
     if mode == "melee" then
    for _, item in ipairs(sizeData) do
        local melee = entry.MeleeWeapon
         if item.id == id then
        if not melee then
             return mw.getCurrentFrame():preprocess("{{#invoke:Ftl|main|translation|item-component-size-" .. item.size .. "}}")
            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
         end
    else
        return "Неверный режим: " .. mode
     end
     end
    -- Если не нашли совпадение, возвращаем стандартный текст
    return "Не имеет размера"
end
end


return p
return p