Module:Sandbox/Aurelain/SkillSynergies: Difference between revisions

From Heroes of Might and Magic: Olden Era Official Wiki
No edit summary
No edit summary
Line 49: Line 49:
--
--
------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
local function emulateSkills(synergies)
local function renderSynergies(synergies)
     local skills = {}
     local root = mw.html.create()
     for _, synergy in ipairs(synergies) do
     for _, synergy in ipairs(synergies) do
         table.insert(skills, {
         root:tag('div'):styles('color:red'):wikitext(synergy.rankName)
            id = 'foo',
            ranks = {
                [1] = {
                    name = synergy.rankName,
                    nameEn = synergy.rankNameEn,
                    icon = synergy.rankIcon,
                    subSkills = {
                        [1] = {
                            name = synergy.subName,
                            icon = synergy.subIcon,
                            description = synergy.description,
                            descriptionEn = synergy.descriptionEn,
                        }
                    }
                }
            }
        })
     end
     end
     return skills
     return tostring(root)
end
end


Line 104: Line 87:
     if not nameEn then return 'Cannot find name for skill "' .. skill .. '"' end
     if not nameEn then return 'Cannot find name for skill "' .. skill .. '"' end
     local synergies = findSynergies(allSkills, skill, nameEn, lang)
     local synergies = findSynergies(allSkills, skill, nameEn, lang)
    if #synergies == 0 then return '' end


     -- Output
     -- Output
     --local markup = renderSynergies(emulatedSkills, nil, lang)
     local markup = renderSynergies(synergies, lang)
     if 1 then return dump(synergies) end
     if 1 then return dump(markup) end
     --local styleTag = frame:extensionTag('templatestyles', '', { src = 'Module:SkillsOverview/styles.css' })
     --local styleTag = frame:extensionTag('templatestyles', '', { src = 'Module:SkillsOverview/styles.css' })
     --return styleTag .. markup
     --return styleTag .. markup

Revision as of 08:47, 9 June 2026

Documentation for this module may be created at Module:Sandbox/Aurelain/SkillSynergies/doc

-- Usage: {{#invoke:SkillSynergies|display|lang=en|skill=skill_assault}}
local p = {}
local SkillsOverview = require("Module:Sandbox/Aurelain/SkillsOverview")

------------------------------------------------------------------------------------------------------------------------
-- Debugs a variable
------------------------------------------------------------------------------------------------------------------------
local function dump(target)
    return '<pre>' .. mw.dumpObject(target) .. '</pre>'
end

------------------------------------------------------------------------------------------------------------------------
-- Ejects punctuation from inside quotes. Example:  `foo “Bar.”` into `foo “Bar”.`
------------------------------------------------------------------------------------------------------------------------
local function repairEnglishPunctuation(text)
    return text:gsub("([%,%.%!%?])”", "”%1")
end

------------------------------------------------------------------------------------------------------------------------
--
------------------------------------------------------------------------------------------------------------------------
local function findSynergies(allSkills, skill, nameEn, lang)
    local synergies = {}
    for _, group in ipairs(allSkills) do
        if group.id ~= skill then
            for _, rank in ipairs(group.ranks) do
                for _, subSkill in pairs(rank.subSkills) do
                    local descriptionEn = repairEnglishPunctuation(subSkill.descriptionEn)
                    if descriptionEn:match('“' .. nameEn .. '”') then
                        -- We found a subskill that mentions our target skill by name
                        table.insert(synergies, {
                            rankName = rank.name,
                            rankNameEn = rank.nameEn,
                            rankIcon = rank.icon,
                            subName = subSkill.name,
                            subIcon = subSkill.icon,
                            description = SkillsOverview.linkifyDescription(subSkill.description, descriptionEn, lang),
                            descriptionEn = descriptionEn,
                        })
                    end
                end
            end
        end
    end
    return synergies
end

------------------------------------------------------------------------------------------------------------------------
--
------------------------------------------------------------------------------------------------------------------------
local function renderSynergies(synergies)
    local root = mw.html.create()
    for _, synergy in ipairs(synergies) do
        root:tag('div'):styles('color:red'):wikitext(synergy.rankName)
    end
    return tostring(root)
end

------------------------------------------------------------------------------------------------------------------------
--
------------------------------------------------------------------------------------------------------------------------
local function findEnglishName(allSkills, skill)
    for _, group in ipairs(allSkills) do
        if group.id == skill then
            return group.nameEn
        end
    end
end

------------------------------------------------------------------------------------------------------------------------
-- Main public function
------------------------------------------------------------------------------------------------------------------------
function p.display(frame)
    --local d = repairEnglishPunctuation('foo “Bar.”')
    --if 1 then return dump(d) end

    -- Args
    local args = frame.args
    local lang = args.lang or 'en'
    local skill = args.skill
    if not skill or skill == '' then return 'You must provide a skill id' end
    lang = 'fr'
    --skill = 'skill_formation'

    local allSkills = SkillsOverview.getSkillsFromCargo(lang)
    local nameEn = findEnglishName(allSkills, skill)
    if not nameEn then return 'Cannot find name for skill "' .. skill .. '"' end
    local synergies = findSynergies(allSkills, skill, nameEn, lang)
    if #synergies == 0 then return '' end

    -- Output
    local markup = renderSynergies(synergies, lang)
    if 1 then return dump(markup) end
    --local styleTag = frame:extensionTag('templatestyles', '', { src = 'Module:SkillsOverview/styles.css' })
    --return styleTag .. markup
end

return p