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