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

мНет описания правки
мНет описания правки
Строка 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