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

Материал из Space Station 14 Вики
мНет описания правки
мНет описания правки
Строка 8: Строка 8:
--- @param id string    идентификатор оружия
--- @param id string    идентификатор оружия
function p.main(mode, id)
function p.main(mode, id)
    -- Проверка на наличие id
    if id == nil then
        return "Ошибка: не задан параметр id."
    end
     local entry = nil
     local entry = nil
     -- Ищем оружие с заданным id  
     -- Поиск записи по заданному id (предполагается, что weaponData — массив записей)
     for _, weapon in ipairs(weaponData) do
     for _, weapon in ipairs(weaponData) do
         if weapon.id == id then
         if weapon.id == id then
Строка 18: Строка 23:


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


Строка 24: Строка 29:
         local melee = entry.MeleeWeapon
         local melee = entry.MeleeWeapon
         if not melee then
         if not melee then
             return "Нет данных о MeleeWeapon для оружия '" .. id .. "'."
             return "Нет данных о MeleeWeapon для оружия '" .. tostring(id) .. "'."
         end
         end


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


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


         local lines = {}
         local lines = {}


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


             -- Секция для двуручного хвата
             -- Секция двуручного хвата
             table.insert(lines, "В двуручном хвате:")
             table.insert(lines, "В двуручном хвате:")
            -- Для типов, присутствующих в одноручном, выводим с пометкой
             for dmgType, value in pairs(twoHandDamage) do
             for dmgType, value in pairs(twoHandDamage) do
                -- Если тип присутствует в одноручном хвате, выводим так же
                 if oneHandDamage[dmgType] then
                 if oneHandDamage[dmgType] then
                     table.insert(lines, value .. " " .. dmgType)
                     table.insert(lines, value .. " " .. dmgType)
                 else
                 else
                    -- Если в двуручном есть тип, которого нет в одноручном – выводим просто
                     table.insert(lines, value .. " " .. dmgType)
                     table.insert(lines, value .. " " .. dmgType)
                 end
                 end
             end
             end
         else
         else
             -- Если нет DamageOtherOnHit, выводим просто одноручный урон
             -- Если нет данных для двуручного хвата, выводим только одноручные повреждения
             for dmgType, value in pairs(oneHandDamage) do
             for dmgType, value in pairs(oneHandDamage) do
                 table.insert(lines, value .. " " .. dmgType)
                 table.insert(lines, value .. " " .. dmgType)
Строка 68: Строка 72:
         local melee = entry.MeleeWeapon
         local melee = entry.MeleeWeapon
         if not melee then
         if not melee then
             return "Нет данных о MeleeWeapon для оружия '" .. id .. "'."
             return "Нет данных о MeleeWeapon для оружия '" .. tostring(id) .. "'."
         end
         end


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


return p
return p

Версия от 21:54, 22 февраля 2025

Для документации этого модуля может быть создана страница Модуль:Песочница/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)
    -- Проверка на наличие id
    if id == nil then
        return "Ошибка: не задан параметр id."
    end

    local entry = nil
    -- Поиск записи по заданному id (предполагается, что weaponData — массив записей)
    for _, weapon in ipairs(weaponData) do
        if weapon.id == id then
            entry = weapon
            break
        end
    end

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

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

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

        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
            -- Если нет данных для двуручного хвата, выводим только одноручные повреждения
            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 для оружия '" .. tostring(id) .. "'."
        end

        -- Если attackRate отсутствует, возвращаем "1"
        if melee.attackRate then
            return tostring(melee.attackRate)
        else
            return "1"
        end

    else
        return "Неверный режим: " .. tostring(mode)
    end
end

return p