|
|
| (не показаны 143 промежуточные версии этого же участника) |
| Строка 1: |
Строка 1: |
| local weaponData = mw.loadData("Модуль:IanComradeBot/prototypes/weapon.json/data")
| |
|
| |
|
| local p = {}
| |
|
| |
| function p.main(frame)
| |
| local mode = frame.args[1]
| |
| local id = frame.args[2]
| |
|
| |
| if not id then
| |
| return "Ошибка: не задан параметр id."
| |
| end
| |
|
| |
| local entry = nil
| |
| 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
| |
|
| |
| -- Определяем дополнительный урон для двуручного хвата:
| |
| -- проверяем поля IncreaseDamageOnWield или DamageOtherOnHit
| |
| local additionalDamage = nil
| |
| 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 = {}
| |
|
| |
| -- Секция одноручного хвата
| |
| 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
| |
| local twoHandDamage = {}
| |
| -- Копируем базовые повреждения
| |
| for dmgType, value in pairs(oneHandDamage) do
| |
| twoHandDamage[dmgType] = value
| |
| end
| |
| -- Добавляем дополнительный урон
| |
| for dmgType, addValue in pairs(additionalDamage) do
| |
| if twoHandDamage[dmgType] then
| |
| 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
| |
|
| |
| return frame:preprocess("<ul>" .. table.concat(lines).. "</ul>")
| |
|
| |
| elseif mode == "attackRate" then
| |
| local melee = entry.MeleeWeapon
| |
| if not melee then
| |
| return "Нет данных о MeleeWeapon для '" .. tostring(id) .. "'."
| |
| end
| |
|
| |
| if melee.attackRate then
| |
| return frame:preprocess("<ul><li>{{ColorPalette|Weapon|attackRate|" .. tostring(melee.attackRate .. "}}</li></ul>"))
| |
| else
| |
| return frame:preprocess("<ul><li>{{ColorPalette|Weapon|attackRate|1}}</li></ul>")
| |
| end
| |
|
| |
| else
| |
| return "Неверный режим: " .. tostring(mode)
| |
| end
| |
| end
| |
|
| |
| return p
| |