|
|
| (не показаны 142 промежуточные версии этого же участника) |
| Строка 1: |
Строка 1: |
| local weaponData = mw.loadData("Модуль:IanComradeBot/prototypes/weapon.json/data")
| |
|
| |
|
| 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)
| |
| 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 or not melee.damage or not melee.damage.types then
| |
| return "Нет данных о повреждениях (MeleeWeapon.damage.types) для оружия '" .. tostring(id) .. "'."
| |
| end
| |
|
| |
| local oneHandDamage = melee.damage.types
| |
| local additionalDamage = (entry.IncreaseDamageOnWield and entry.IncreaseDamageOnWield.damage and entry.IncreaseDamageOnWield.damage.types) or
| |
| (entry.DamageOtherOnHit and entry.DamageOtherOnHit.damage and entry.DamageOtherOnHit.damage.types)
| |
|
| |
| local result = "<ul>" .. formatDamageList(oneHandDamage)
| |
|
| |
| if additionalDamage then
| |
| local twoHandDamage = {}
| |
| for dmgType, value in pairs(oneHandDamage) do
| |
| twoHandDamage[dmgType] = value
| |
| end
| |
| for dmgType, addValue in pairs(additionalDamage) do
| |
| twoHandDamage[dmgType] = (twoHandDamage[dmgType] or 0) + addValue
| |
| end
| |
| result = result .. formatDamageList(twoHandDamage)
| |
| end
| |
|
| |
| return frame:preprocess(result .. "</ul>")
| |
| elseif mode == "attackRate" then
| |
| local melee = entry.MeleeWeapon
| |
| if not melee then
| |
| return "Нет данных о MeleeWeapon для '" .. tostring(id) .. "'."
| |
| end
| |
|
| |
| local attackRate = melee.attackRate or 1
| |
| return frame:preprocess("<ul><li>{{ColorPalette|Weapon|attackRate|" .. tostring(attackRate) .. "}}</li></ul>")
| |
| else
| |
| return "Неверный режим: " .. tostring(mode)
| |
| end
| |
| end
| |
|
| |
| return p
| |