Module:HeroSubClassData

From Heroes of Might and Magic: Olden Era Official Wiki
Revision as of 19:39, 28 May 2026 by akesha.taladim (talk | contribs) (Undo revision 20720 by 76561198256426587 (talk))

Template:Documentation This module provides standardized methods to query mechanical data configurations, activation skill prerequisites, and localized texts mapped to specific hero mastery subclasses directly from the Cargo database tables (specifically HeroSubClass and Translation).

Basic Syntax

To extract any structural variable node or translation block from a hero subclass registry page:

{{#invoke:HeroSubClassData|get|SUBCLASS_ID|VARIABLE|LANGUAGE_CODE}}
  • SUBCLASS_ID : The technical internal database key identifier assigned to the targeted hero subclass row (e.g., sub_class_human_might_1).
  • VARIABLE : The specific data field node target identifier to look up (see reference matrix below).
  • LANGUAGE_CODE : (Optional) Sets the localization system language. Defaults to French (fr) if omitted, with automated fallbacks.

---

Technical Reference Index

📝 Localized Text Blocks (Language-Aware)

Queries localized dictionary assets that translate dynamically based on the language parameter input.

Variable Keyword Description Sample Expected Output
name The localized public name of the specialty subclass. Bretteur
description Mechanical lore synopses detailing passive thresholds or stats adjustments. Coup héroïque inflige +60 point(s)...

⚙️ Structural & Mechanical Properties

Static code variables returning gameplay rows directly mapped parameters tied into the core game database.

Variable Keyword Description Sample Output
faction The alignment technical name faction group linked to the subclass. human
class_type Archetypal class methodology branch style. might
icon Graphical asset emblem visual token key identifier. sub_class_human_might_1_icon
source_path Server file system dump localization repository tree tracker. DB/heroes_sub_classes/sub_classes_human.json

⚔️ Required Activation Skills

Prerequisites requirements parameters checking skills conditions to validate the subclass unlock state.

Variable Keyword Description Variable Keyword Description
activation_skill_1_sid Internal ID of required Skill 1 activation_skill_1_level Required level threshold for Skill 1
activation_skill_2_sid Internal ID of required Skill 2 activation_skill_2_level Required level threshold for Skill 2
activation_skill_3_sid Internal ID of required Skill 3 activation_skill_3_level Required level threshold for Skill 3
activation_skill_4_sid Internal ID of required Skill 4 activation_skill_4_level Required level threshold for Skill 4
activation_skill_5_sid Internal ID of required Skill 5 activation_skill_5_level Required level threshold for Skill 5

---

Practical Implementation Examples

Example 1: Creating a Prerequisites Checklist

Pull structural required requirements to display dynamic conditional lists on wiki pages:

To become a {{#invoke:HeroSubClassData|get|sub_class_human_might_1|name|en}}, you need:
* {{#invoke:HeroSubClassData|get|sub_class_human_might_1|activation_skill_1_sid}} at Level {{#invoke:HeroSubClassData|get|sub_class_human_might_1|activation_skill_1_level}}
* {{#invoke:HeroSubClassData|get|sub_class_human_might_1|activation_skill_2_sid}} at Level {{#invoke:HeroSubClassData|get|sub_class_human_might_1|activation_skill_2_level}}

local p = {}

-- Fonction principale pour récupérer les données d'une sous-classe
-- Syntaxe : {{#invoke:HeroSubClassData|get|ID_SOUS_CLASSE|CHAMP|LANGUE}}
function p.get(frame)
    local args = frame.args[1] and frame.args or frame:getParent().args
    local subclass_id = args[1]
    local field = args[2]
    local lang = args[3] or 'fr' -- Par défaut en français

    if not subclass_id or not field then
        return "Erreur : ID de sous-classe ou champ manquant."
    end

    -- 1. GESTION DES DONNÉES TRADUITES (Ajusté sur "hero_sub_class")
    if field == 'name' or field == 'description' then
        local queryOpts = {
            where = string.format('target_id="%s" AND language="%s" AND type="hero_sub_class"', subclass_id, lang)
        }
        local res = mw.ext.cargo.query('Translation', field, queryOpts)

        if res and res[1] and res[1][field] then
            return res[1][field]
        else
            -- Système de fallback (secours) vers le français ou l'anglais
            if lang ~= 'fr' then
                local fallbackFr = mw.ext.cargo.query('Translation', field, {where = string.format('target_id="%s" AND language="fr" AND type="hero_sub_class"', subclass_id)})
                if fallbackFr and fallbackFr[1] and fallbackFr[1][field] then return fallbackFr[1][field] end
            end
            if lang ~= 'en' then
                local fallbackEn = mw.ext.cargo.query('Translation', field, {where = string.format('target_id="%s" AND language="en" AND type="hero_sub_class"', subclass_id)})
                if fallbackEn and fallbackEn[1] and fallbackEn[1][field] then return fallbackEn[1][field] end
            end
            return ""
        end
    end

    -- 2. GESTION DES PROPRIÉTÉS STRUCTURELLES
    local queryOpts = {
        where = string.format('id="%s"', subclass_id)
    }
    local res = mw.ext.cargo.query('HeroSubClass', field, queryOpts)

    if res and res[1] and res[1][field] then
        return res[1][field]
    end

    return ""
end -- <-- Le fameux "end" qui manquait ici !

return p