Module:SpellTableUtil/ru: Difference between revisions
From Heroes of Might and Magic: Olden Era Official Wiki
No edit summary |
No edit summary |
||
| (3 intermediate revisions by the same user not shown) | |||
| Line 11: | Line 11: | ||
local locModuleMap = { | local locModuleMap = { | ||
Arcane = "Module:ArcaneSpells/ru", | Arcane = "Module:ArcaneSpells/ru", | ||
Daylight = "Module:DaylightSpells", | Daylight = "Module:DaylightSpells/ru", | ||
Nightshade = "Module:NightshadeSpells/ru", | Nightshade = "Module:NightshadeSpells/ru", | ||
Primal = "Module:PrimalSpells", | Primal = "Module:PrimalSpells/ru", | ||
Neutral = "Module:NeutralSpells" | Neutral = "Module:NeutralSpells/ru" | ||
} | |||
local magicTypesRu = { | |||
["Arcane"] = "Арканная магия", | |||
["Daylight"] = "Магия Дня", | |||
["Nightshade"] = "Магия Ночи", | |||
["Primal"] = "Первородная магия", | |||
["Neutral"] = "Нейтральная магия", | |||
["Tier 1"] = "Ранг 1", | |||
["Tier 2"] = "Ранг 2", | |||
["Tier 3"] = "Ранг 3", | |||
["Tier 4"] = "Ранг 4", | |||
["Tier 5"] = "Ранг 5" | |||
} | } | ||
| Line 35: | Line 48: | ||
local school = frame.args["school"] or frame:getParent().args["school"] | local school = frame.args["school"] or frame:getParent().args["school"] | ||
local tier = frame.args["tier"] or frame:getParent().args["tier"] | local tier = frame.args["tier"] or frame:getParent().args["tier"] | ||
local school_ru = magicTypesRu[school] | |||
local tier_ru = magicTypesRu[tier] | |||
local moduleName = moduleMap[school] | local moduleName = moduleMap[school] | ||
local locModuleName = locModuleMap[school] | local locModuleName = locModuleMap[school] | ||
| Line 49: | Line 66: | ||
local html = '{| class="wikitable"\n' .. | local html = '{| class="wikitable"\n' .. | ||
'|+ style="margin-bottom:6px;" | ' .. | '|+ style="margin-bottom:6px;" | ' .. school_ru .. ' — ' .. tier_ru .. '\n' .. | ||
'|-\n' .. | '|-\n' .. | ||
'! style="width:10%;" | Заклинание\n' .. | '! style="width:10%;" | Заклинание\n' .. | ||
Latest revision as of 03:35, 8 November 2025
Documentation for this module may be created at Module:SpellTableUtil/ru/doc
local p = {}
local moduleMap = {
Arcane = "Module:ArcaneSpells",
Daylight = "Module:DaylightSpells",
Nightshade = "Module:NightshadeSpells",
Primal = "Module:PrimalSpells",
Neutral = "Module:NeutralSpells"
}
local locModuleMap = {
Arcane = "Module:ArcaneSpells/ru",
Daylight = "Module:DaylightSpells/ru",
Nightshade = "Module:NightshadeSpells/ru",
Primal = "Module:PrimalSpells/ru",
Neutral = "Module:NeutralSpells/ru"
}
local magicTypesRu = {
["Arcane"] = "Арканная магия",
["Daylight"] = "Магия Дня",
["Nightshade"] = "Магия Ночи",
["Primal"] = "Первородная магия",
["Neutral"] = "Нейтральная магия",
["Tier 1"] = "Ранг 1",
["Tier 2"] = "Ранг 2",
["Tier 3"] = "Ранг 3",
["Tier 4"] = "Ранг 4",
["Tier 5"] = "Ранг 5"
}
-- Helper to find spell and its school
local function findSpellByName(name)
for school, moduleName in pairs(moduleMap) do
local baseSpellsModule = require(moduleName)
local locSpellsModule = require(locModuleMap[school])
local spellsModule = p.mergeSpellTables(baseSpellsModule, locSpellsModule)
local spells = spellsModule.spells or spellsModule
local spell = spells[name]
if spell then
return spell, school
end
end
return nil, nil
end
function p.spellTable(frame)
local school = frame.args["school"] or frame:getParent().args["school"]
local tier = frame.args["tier"] or frame:getParent().args["tier"]
local school_ru = magicTypesRu[school]
local tier_ru = magicTypesRu[tier]
local moduleName = moduleMap[school]
local locModuleName = locModuleMap[school]
if not moduleName then
return "Unknown school: " .. tostring(school)
end
local baseSpellsModule = require(moduleName)
local locSpellsModule = require(locModuleName)
spellsModule = p.mergeSpellTables(baseSpellsModule, locSpellsModule)
local spells = spellsModule.spells or spellsModule
local html = '{| class="wikitable"\n' ..
'|+ style="margin-bottom:6px;" | ' .. school_ru .. ' — ' .. tier_ru .. '\n' ..
'|-\n' ..
'! style="width:10%;" | Заклинание\n' ..
'! style="width:6%;" align="center" | Мана\n' ..
'! style="width:30%;" | Уровень 1\n' ..
'! style="width:18%;" | Уровень 2\n' ..
'! style="width:18%;" | Уровень 3\n' ..
'! style="width:18%;" | Уровень 4\n'
for _, spell in pairs(spells) do
if spell.tier == tier then
html = html ..
'|-\n| [[' .. spell.name_ru .. ']]\n' ..
'| align="center" | [[File:Mana icon.png|32px]] ' .. (spell.mana or '–') .. '\n' ..
'| ' .. (spell.l1_ru or '') .. '\n' ..
'| ' .. (spell.l2_ru or '') .. '\n' ..
'| ' .. (spell.l3_ru or '') .. '\n' ..
'| ' .. (spell.l4_ru or '') .. '\n'
end
end
html = html .. '|}'
return html
end
function p.spellBoxV(frame)
local args = frame.args
local name = args.name or frame:getParent().args.name
local spell, school = findSpellByName(name)
if not spell then
return "Unknown spell: " .. tostring(name)
end
local spellIcon = name .. ".png"
local manaIcon = "Mana icon.png"
local schoolName = spell.school_ru or school or "Unknown"
local tier = spell.tier_ru or "–"
local mana = spell.mana or "–"
local html = '{| class="wikitable spellboxv" style="margin:1em auto; max-width:600px; background:#1a1a1a; color:#eee; border:2px solid #444; border-radius:8px; box-shadow:0 0 6px rgba(0,0,0,0.4); overflow-x:hidden;"\n'
html = html .. '|-\n| colspan=2 style="background:#304060; color:white; font-weight:bold; font-size:110%; text-align:center; padding:6px;" | ' .. spell.name_ru .. '\n'
html = html .. '|-\n| colspan=2 align="center" style="padding:8px;" | [[File:' .. spellIcon .. '|64px]]\n'
html = html .. '|-\n| style="width:20%; font-weight:bold; text-align:left; background:#222;" | Школа || style="text-align:center;" | ' .. schoolName .. '\n'
html = html .. '|-\n| style="font-weight:bold; text-align:left; background:#222;" | Ранг || style="text-align:center;" | ' .. tier .. '\n'
html = html .. '|-\n| style="font-weight:bold; text-align:left; background:#222;" | Мана || style="text-align:center;" | [[File:' .. manaIcon .. '|24px]] ' .. mana .. '\n'
-- Levels 1–4
for i = 1, 4 do
local key = "l" .. i .. "_ru"
if spell[key] then
html = html .. '|-\n| style="font-weight:bold; text-align:left; background:#222;" | Уровень ' .. i ..
' || style="text-align:center;" | ' .. spell[key] .. '\n'
end
end
-- Masterful
if spell.masterful_ru then
html = html .. '|-\n| style="font-weight:bold; text-align:left; background:#222;" | Искусный || style="text-align:center;" | ' .. spell.masterful_ru .. '\n'
end
html = html .. '|}'
return html
end
-- Функция объединяет таблицы base и translate (с локализацией)
function p.mergeSpellTables(base, translate)
local merged = {}
for key, spell in pairs(base) do
local s = {}
-- копируем всё из base[key]
for k, v in pairs(spell) do
s[k] = v
end
-- добавляем/перезаписываем из translate[key], если есть
if translate[key] then
for k, v in pairs(translate[key]) do
s[k] = v
end
end
merged[key] = s
end
return merged
end
return p


