Module:SpellTableUtil/ru: Difference between revisions

From Heroes of Might and Magic: Olden Era Official Wiki
No edit summary
No edit summary
 
(9 intermediate revisions by the same user not shown)
Line 2: Line 2:


local moduleMap = {
local moduleMap = {
     Arcane = "Module:ArcaneSpells/ru",
     Arcane = "Module:ArcaneSpells",
     Daylight = "Module:DaylightSpells",
     Daylight = "Module:DaylightSpells",
     Nightshade = "Module:NightshadeSpells",
     Nightshade = "Module:NightshadeSpells",
     Primal = "Module:PrimalSpells",
     Primal = "Module:PrimalSpells",
     Neutral = "Module:NeutralSpells"
     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"
}
}


Line 12: Line 33:
local function findSpellByName(name)
local function findSpellByName(name)
     for school, moduleName in pairs(moduleMap) do
     for school, moduleName in pairs(moduleMap) do
         local spellsModule = require(moduleName)
         local baseSpellsModule = require(moduleName)
        local locSpellsModule = require(locModuleMap[school])
        local spellsModule = p.mergeSpellTables(baseSpellsModule, locSpellsModule)
         local spells = spellsModule.spells or spellsModule
         local spells = spellsModule.spells or spellsModule
         local spell = spells[name]
         local spell = spells[name]
Line 25: 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]
     if not moduleName then
     if not moduleName then
         return "Unknown school: " .. tostring(school)
         return "Unknown school: " .. tostring(school)
     end
     end


     local spellsModule = require(moduleName)
     local baseSpellsModule = require(moduleName)
    local locSpellsModule = require(locModuleName)
 
    spellsModule = p.mergeSpellTables(baseSpellsModule, locSpellsModule)
 
     local spells = spellsModule.spells or spellsModule
     local spells = spellsModule.spells or spellsModule


     local html = '{| class="wikitable"\n' ..
     local html = '{| class="wikitable"\n' ..
                 '|+ style="margin-bottom:6px;" | ' .. school .. ' — ' .. tier .. '\n' ..
                 '|+ style="margin-bottom:6px;" | ' .. school_ru .. ' — ' .. tier_ru .. '\n' ..
                 '|-\n' ..
                 '|-\n' ..
                 '! style="width:10%;" | Заклинание\n' ..
                 '! style="width:10%;" | Заклинание\n' ..
Line 75: Line 107:
     local mana = spell.mana or "–"
     local mana = spell.mana or "–"


     local html = '{| class="wikitable spellboxv" style="margin:1em auto; max-width:100%; 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'
     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 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| 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;" | School || style="text-align:center;" | ' .. schoolName .. '\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;" | ' .. tier .. '\n'
     html = html .. '|-\n| style="font-weight:bold; text-align:left; background:#222;" | Мана || style="text-align:center;" | [[File:' .. manaIcon .. '|24px]] ' .. mana .. '\n'
     html = html .. '|-\n| style="font-weight:bold; text-align:left; background:#222;" | Мана || style="text-align:center;" | [[File:' .. manaIcon .. '|24px]] ' .. mana .. '\n'
Line 87: Line 119:
         local key = "l" .. i .. "_ru"
         local key = "l" .. i .. "_ru"
         if spell[key] then
         if spell[key] then
             html = html .. '|-\n| style="font-weight:bold; text-align:left; background:#222;" | Level ' .. i ..
             html = html .. '|-\n| style="font-weight:bold; text-align:left; background:#222;" | Уровень ' .. i ..
                   ' || style="text-align:center;" | ' .. spell[key] .. '\n'
                   ' || style="text-align:center;" | ' .. spell[key] .. '\n'
         end
         end
Line 94: Line 126:
     -- Masterful
     -- Masterful
     if spell.masterful_ru then
     if spell.masterful_ru then
         html = html .. '|-\n| style="font-weight:bold; text-align:left; background:#222;" | Masterful || style="text-align:center;" | ' .. spell.masterful_ru .. '\n'
         html = html .. '|-\n| style="font-weight:bold; text-align:left; background:#222;" | Искусный || style="text-align:center;" | ' .. spell.masterful_ru .. '\n'
     end
     end


Line 101: Line 133:
end
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
return p

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