Module:SpellTableUtil/pl: Difference between revisions
From Heroes of Might and Magic: Olden Era Official Wiki
No edit summary |
No edit summary |
||
| Line 78: | Line 78: | ||
if spell.tier == tier then | if spell.tier == tier then | ||
html = html .. | html = html .. | ||
'|-\n| [[' .. spell.name..'|'..spell.name_ru .. ']]\n' .. | '|-\n| [[' .. spell.name..'/pl|'..spell.name_ru .. ']]\n' .. | ||
'| align="center" | [[File:Mana icon.png|32px]] ' .. (spell.mana or '–') .. '\n' .. | '| align="center" | [[File:Mana icon.png|32px]] ' .. (spell.mana or '–') .. '\n' .. | ||
'| ' .. (spell.l1_ru or '') .. '\n' .. | '| ' .. (spell.l1_ru or '') .. '\n' .. | ||
Revision as of 09:02, 14 November 2025
Documentation for this module may be created at Module:SpellTableUtil/pl/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/pl",
Daylight = "Module:DaylightSpells/pl",
Nightshade = "Module:NightshadeSpells/pl",
Primal = "Module:PrimalSpells/pl",
Neutral = "Module:NeutralSpells/pl"
}
local magicTypesRu = {
["Arcane"] = "Magia Tajemna",
["Daylight"] = "Magia Brzasku",
["Nightshade"] = "Magia Zmierzchu",
["Primal"] = "Magia Pierwotna",
["Neutral"] = "Magia Neutralna",
["Tier 1"] = "Stopnia 1",
["Tier 2"] = "Stopnia 2",
["Tier 3"] = "Stopnia 3",
["Tier 4"] = "Stopnia 4",
["Tier 5"] = "Stopnia 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%;" | Zaklęcie\n' ..
'! style="width:6%;" align="center" | Mana\n' ..
'! style="width:30%;" | Poziom 1\n' ..
'! style="width:18%;" | Poziom 2\n' ..
'! style="width:18%;" | Poziom 3\n' ..
'! style="width:18%;" | Poziom 4\n'
for _, spell in pairs(spells) do
if spell.tier == tier then
html = html ..
'|-\n| [[' .. spell.name..'/pl|'..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;" | Stopień || style="text-align:center;" | ' .. tier .. '\n'
html = html .. '|-\n| style="font-weight:bold; text-align:left; background:#222;" | Mana || 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


