Module:Sandbox/Aurelain/SkillSynergies: Difference between revisions

From Heroes of Might and Magic: Olden Era Official Wiki
No edit summary
No edit summary
Line 35: Line 35:
-- Debugs a variable
-- Debugs a variable
------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
local function findSynergies(allSkills, skill, lang)
local function findSynergies(allSkills, skill, nameEn, lang)
     local synergies = {}
     local synergies = {}
     for _, group in ipairs(allSkills) do
     for _, group in ipairs(allSkills) do
         for _, rank in ipairs(group.ranks) do
         if group.id ~= skill then
            for _, subSkill in pairs(rank.subSkills) do
            for _, rank in ipairs(group.ranks) do
                local descriptionEn = repairEnglishPunctuation(subSkill.descriptionEn)
                for _, subSkill in pairs(rank.subSkills) do
                if lang == 'en' then
                    local descriptionEn = repairEnglishPunctuation(subSkill.descriptionEn)
                    local description = repairEnglishPunctuation(subSkill.description)
                    if lang == 'en' then
                else
                        if descriptionEn:match('“' .. nameEn .. '”') then
                    --local roboticLink = generateSpecificRoboticLink(enDescription, lang, skill)
                            table.insert(synergies, {
                    --if checkMentionsSkill(enDescription, skill) then
                                description = subSkill.description
                    --    end
                            })
                    --end
                        end
                    else
                        --local roboticLink = generateSpecificRoboticLink(enDescription, lang, skill)
                        --if checkMentionsSkill(enDescription, skill) then
                        --    end
                        --end
                        if descriptionEn:match('“' .. nameEn .. '”') then
                            table.insert(synergies, {
                                description = subSkill.description
                            })
                        end
                    end
                 end
                 end
             end
             end
Line 83: Line 94:
     local nameEn = findEnglishName(allSkills, skill)
     local nameEn = findEnglishName(allSkills, skill)
     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, nameEn, lang)
     local synergies = findSynergies(allSkills, skill, nameEn, lang)
     if 1 then return dump(synergies) end
     if 1 then return dump(synergies) end



Revision as of 07:24, 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")
local PATCH_NAME = {
    ['Summon Avatar'] = 'Summon Avatar (Skill)',
}
------------------------------------------------------------------------------------------------------------------------
-- 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

------------------------------------------------------------------------------------------------------------------------
-- Creates a "Foo/XX|" string based on the first quoted word in a text
------------------------------------------------------------------------------------------------------------------------
local function generateRoboticLink(descriptionInEnglish, lang)
    local name = descriptionInEnglish:match("“(.-)”")
    if name and name ~= '' then
        name = PATCH_NAME[name] or name
        return name .. '/' .. lang .. '|'
    end
    return nil
end

------------------------------------------------------------------------------------------------------------------------
-- Debugs a variable
------------------------------------------------------------------------------------------------------------------------
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 lang == 'en' then
                        if descriptionEn:match('“' .. nameEn .. '”') then
                            table.insert(synergies, {
                                description = subSkill.description
                            })
                        end
                    else
                        --local roboticLink = generateSpecificRoboticLink(enDescription, lang, skill)
                        --if checkMentionsSkill(enDescription, skill) then
                        --    end
                        --end
                        if descriptionEn:match('“' .. nameEn .. '”') then
                            table.insert(synergies, {
                                description = subSkill.description
                            })
                        end
                    end
                end
            end
        end
    end
    return synergies
end

------------------------------------------------------------------------------------------------------------------------
-- Debugs a variable
------------------------------------------------------------------------------------------------------------------------
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 1 then return dump(synergies) end

    return 'hello'
end

return p