Модуль:Песочница/Pok: различия между версиями
Материал из Space Station 14 Вики
Pok (обсуждение | вклад) мНет описания правки |
Pok (обсуждение | вклад) мНет описания правки |
||
| Строка 46: | Строка 46: | ||
-- Секция одноручного хвата | -- Секция одноручного хвата | ||
table.insert(lines, "В | table.insert(lines, "В одной руке:") | ||
for dmgType, value in pairs(oneHandDamage) do | for dmgType, value in pairs(oneHandDamage) do | ||
table.insert(lines, value .. " " .. dmgType) | table.insert(lines, "{{#invoke:Ftl|main|translation|item-component-size-" .. value .. "}} {{ColorPalette|Damage|" .. dmgType .. "|" .. dmgType .. "}}") | ||
end | end | ||
| Строка 67: | Строка 67: | ||
end | end | ||
table.insert(lines, "В | table.insert(lines, "В двух руках:") | ||
for dmgType, value in pairs(twoHandDamage) do | for dmgType, value in pairs(twoHandDamage) do | ||
table.insert(lines, value .. " " .. dmgType) | table.insert(lines, "{{#invoke:Ftl|main|translation|item-component-size-" .. value .. "}} {{ColorPalette|Damage|" .. dmgType .. "|" .. dmgType .. "}}") | ||
end | end | ||
end | end | ||
return table.concat(lines | return frame:preprocess(table.concat(lines)) | ||
elseif mode == "attackRate" then | elseif mode == "attackRate" then | ||
local melee = entry.MeleeWeapon | local melee = entry.MeleeWeapon | ||
if not melee then | if not melee then | ||
return "Нет данных о MeleeWeapon для | return "Нет данных о MeleeWeapon для '" .. tostring(id) .. "'." | ||
end | end | ||
if melee.attackRate then | if melee.attackRate then | ||
return tostring(melee.attackRate) | return frame:preprocess(tostring(melee.attackRate)) | ||
else | else | ||
return "1" | return frame:preprocess("1") | ||
end | end | ||
Версия от 22:13, 22 февраля 2025
Для документации этого модуля может быть создана страница Модуль:Песочница/Pok/doc
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, "{{#invoke:Ftl|main|translation|item-component-size-" .. value .. "}} {{ColorPalette|Damage|" .. dmgType .. "|" .. dmgType .. "}}")
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, "{{#invoke:Ftl|main|translation|item-component-size-" .. value .. "}} {{ColorPalette|Damage|" .. dmgType .. "|" .. dmgType .. "}}")
end
end
return frame:preprocess(table.concat(lines))
elseif mode == "attackRate" then
local melee = entry.MeleeWeapon
if not melee then
return "Нет данных о MeleeWeapon для '" .. tostring(id) .. "'."
end
if melee.attackRate then
return frame:preprocess(tostring(melee.attackRate))
else
return frame:preprocess("1")
end
else
return "Неверный режим: " .. tostring(mode)
end
end
return p