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

мНет описания правки
мНет описания правки
Строка 2: Строка 2:


local p = {}
local p = {}
local function formatDamageList(damageTable)
    local lines = {}
    for dmgType, value in pairs(damageTable) do
        table.insert(lines, "<li>{{ColorPalette|Damage|" .. dmgType .. "|" .. value .. "}} {{#invoke:Ftl|main|translation|damage-type-" .. dmgType .. "}}</li>")
    end
    return table.concat(lines)
end


function p.main(frame)
function p.main(frame)
Строка 25: Строка 33:
     if mode == "melee" then
     if mode == "melee" then
         local melee = entry.MeleeWeapon
         local melee = entry.MeleeWeapon
         if not melee then
         if not melee or not melee.damage or not melee.damage.types then
            return "Нет данных о MeleeWeapon для оружия '" .. tostring(id) .. "'."
        end
 
        local oneHandDamage = melee.damage and melee.damage.types
        if not oneHandDamage then
             return "Нет данных о повреждениях (MeleeWeapon.damage.types) для оружия '" .. tostring(id) .. "'."
             return "Нет данных о повреждениях (MeleeWeapon.damage.types) для оружия '" .. tostring(id) .. "'."
         end
         end


         -- Определяем дополнительный урон для двуручного хвата:
         local oneHandDamage = melee.damage.types
        -- проверяем поля IncreaseDamageOnWield или DamageOtherOnHit
         local additionalDamage = (entry.IncreaseDamageOnWield and entry.IncreaseDamageOnWield.damage and entry.IncreaseDamageOnWield.damage.types) or
         local additionalDamage = nil
                                (entry.DamageOtherOnHit and entry.DamageOtherOnHit.damage and entry.DamageOtherOnHit.damage.types)
        if entry.IncreaseDamageOnWield and entry.IncreaseDamageOnWield.damage then
            additionalDamage = entry.IncreaseDamageOnWield.damage.types
        elseif entry.DamageOtherOnHit and entry.DamageOtherOnHit.damage then
            additionalDamage = entry.DamageOtherOnHit.damage.types
        end


         local lines = {}
         local result = "<ul>" .. formatDamageList(oneHandDamage)


        -- Секция одноручного хвата
        table.insert(lines, "В одной руке:")
        for dmgType, value in pairs(oneHandDamage) do
            table.insert(lines, "<li>{{ColorPalette|Damage|" .. dmgType .. "|" .. value .. "}} {{#invoke:Ftl|main|translation|damage-type-" .. dmgType .. "}}</li>")
        end
        -- Если дополнительный урон присутствует, суммируем его с базовым
         if additionalDamage then
         if additionalDamage then
             local twoHandDamage = {}
             local twoHandDamage = {}
            -- Копируем базовые повреждения
             for dmgType, value in pairs(oneHandDamage) do
             for dmgType, value in pairs(oneHandDamage) do
                 twoHandDamage[dmgType] = value
                 twoHandDamage[dmgType] = value
             end
             end
            -- Добавляем дополнительный урон
             for dmgType, addValue in pairs(additionalDamage) do
             for dmgType, addValue in pairs(additionalDamage) do
                 if twoHandDamage[dmgType] then
                 twoHandDamage[dmgType] = (twoHandDamage[dmgType] or 0) + addValue
                    twoHandDamage[dmgType] = twoHandDamage[dmgType] + addValue
                else
                    twoHandDamage[dmgType] = addValue
                end
            end
 
            table.insert(lines, "В двух руках:")
            for dmgType, value in pairs(twoHandDamage) do
                table.insert(lines, "<li>{{ColorPalette|Damage|" .. dmgType .. "|" .. value .. "}} {{#invoke:Ftl|main|translation|damage-type-" .. dmgType .. "}}</li>")
             end
             end
            result = result .. formatDamageList(twoHandDamage)
         end
         end


         return frame:preprocess("<ul>" .. table.concat(lines).. "</ul>")
         return frame:preprocess(result .. "</ul>")
 
     elseif mode == "attackRate" then
     elseif mode == "attackRate" then
         local melee = entry.MeleeWeapon
         local melee = entry.MeleeWeapon
Строка 81: Строка 61:
         end
         end


         if melee.attackRate then
         local attackRate = melee.attackRate or 1
            return frame:preprocess("<ul><li>{{ColorPalette|Weapon|attackRate|" .. tostring(melee.attackRate .. "}}</li></ul>"))
        return frame:preprocess("<ul><li>{{ColorPalette|Weapon|attackRate|" .. tostring(attackRate) .. "}}</li></ul>")
        else
            return frame:preprocess("<ul><li>{{ColorPalette|Weapon|attackRate|1}}</li></ul>")
        end
 
     else
     else
         return "Неверный режим: " .. tostring(mode)
         return "Неверный режим: " .. tostring(mode)