Модуль:Песочница/Pok: различия между версиями
Материал из Space Station 14 Вики
Pok (обсуждение | вклад) мНет описания правки |
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 (предполагается, что 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 | ||
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 | ||
-- Если нет | -- Если нет данных для двуручного хвата, выводим только одноручные повреждения | ||
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 " | return "1" | ||
end | end | ||
else | else | ||
return "Неверный режим: " .. mode | return "Неверный режим: " .. tostring(mode) | ||
end | end | ||
end | end | ||
return p | return p | ||
Версия от 21:54, 22 февраля 2025
Для документации этого модуля может быть создана страница Модуль:Песочница/Pok/doc
-- Загружаем данные из JSON
local weaponData = mw.loadData("Модуль:IanComradeBot/prototypes/weapon.json/data")
local p = {}
--- Функция main принимает два параметра:
--- @param mode string "melee" или "attackRate"
--- @param id string идентификатор оружия
function p.main(mode, id)
-- Проверка на наличие id
if id == nil then
return "Ошибка: не задан параметр id."
end
local entry = nil
-- Поиск записи по заданному id (предполагается, что weaponData — массив записей)
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
local twoHandDamage = entry.DamageOtherOnHit
and entry.DamageOtherOnHit.damage
and entry.DamageOtherOnHit.damage.types
local lines = {}
if twoHandDamage then
-- Секция одноручного хвата
table.insert(lines, "В одноручном хвате:")
for dmgType, value in pairs(oneHandDamage) do
table.insert(lines, value .. " " .. dmgType)
end
-- Секция двуручного хвата
table.insert(lines, "В двуручном хвате:")
for dmgType, value in pairs(twoHandDamage) do
-- Если тип присутствует в одноручном хвате, выводим так же
if oneHandDamage[dmgType] then
table.insert(lines, value .. " " .. dmgType)
else
table.insert(lines, value .. " " .. dmgType)
end
end
else
-- Если нет данных для двуручного хвата, выводим только одноручные повреждения
for dmgType, value in pairs(oneHandDamage) do
table.insert(lines, value .. " " .. dmgType)
end
end
return table.concat(lines, "<br />")
elseif mode == "attackRate" then
local melee = entry.MeleeWeapon
if not melee then
return "Нет данных о MeleeWeapon для оружия '" .. tostring(id) .. "'."
end
-- Если attackRate отсутствует, возвращаем "1"
if melee.attackRate then
return tostring(melee.attackRate)
else
return "1"
end
else
return "Неверный режим: " .. tostring(mode)
end
end
return p