Template:SkillDef: Difference between revisions

From Heroes of Might and Magic: Olden Era Official Wiki
obelisk-bot: uploading initial Cargo templates
 
obelisk-bot: uploading initial Cargo templates
Line 7: Line 7:
<code>Data:Skill/<id></code> is self-contained — it carries the skill's own row plus every sub-skill referenced by any of its levels:
<code>Data:Skill/<id></code> is self-contained — it carries the skill's own row plus every sub-skill referenced by any of its levels:


# <code>{{SkillDef | id=… | variant=… | skill_type=… | …}}</code>
# <code><nowiki>{{SkillDef | id=… | variant=… | skill_type=… | …}}</nowiki></code>
# <code>{{TranslationDef | type=skill | target_id=<id> | …}}</code> — name + desc shared across all levels
# <code><nowiki>{{TranslationDef | type=skill | target_id=<id> | …}}</nowiki></code> — name + desc shared across all levels
# N × <code>{{SkillLevelDef | skill_id=<id> | level=N | …}}</code>
# N × <code><nowiki>{{SkillLevelDef | skill_id=<id> | level=N | …}}</nowiki></code>
# N × <code>{{SkillLevelTranslationDef | skill_id=<id> | level=N | … }}</code> — only when level overrides a name/desc
# N × <code><nowiki>{{SkillLevelTranslationDef | skill_id=<id> | level=N | … }}</nowiki></code> — only when level overrides a name/desc
# M × <code>{{BonusDef | parent_type=skill_level | parent_id=<id>_L<level> | … }}</code>
# M × <code><nowiki>{{BonusDef | parent_type=skill_level | parent_id=<id>_L<level> | … }}</nowiki></code>
# K × <code>{{SubSkillDef | id=… | parent_skill_id=<id> | …}}</code> — every sub-skill referenced by any level
# K × <code><nowiki>{{SubSkillDef | id=… | parent_skill_id=<id> | …}}</nowiki></code> — every sub-skill referenced by any level
# K × <code>{{TranslationDef | type=sub_skill | target_id=<sub_skill_id> | …}}</code>
# K × <code><nowiki>{{TranslationDef | type=sub_skill | target_id=<sub_skill_id> | …}}</nowiki></code>
# K' × <code>{{BonusDef | parent_type=sub_skill | parent_id=<sub_skill_id> | …}}</code>
# K' × <code><nowiki>{{BonusDef | parent_type=sub_skill | parent_id=<sub_skill_id> | …}}</nowiki></code>


The 77 sub-skills not referenced by any skill (8 test entries + ~69 arena legacy <code>*_old</code> entries) emit onto the catch-all page <code>Data:Skill/_orphan_sub_skills</code> instead.
The 77 sub-skills not referenced by any skill (8 test entries + ~69 arena legacy <code>*_old</code> entries) emit onto the catch-all page <code>Data:Skill/_orphan_sub_skills</code> instead.
Line 26: Line 26:
| name = String
| name = String
| name_sid = String
| name_sid = String
| desc = Wikitext
| description = Wikitext
| desc_sid = String
| desc_sid = String
| max_level = Integer
| max_level = Integer
Line 40: Line 40:
| name = String                <!-- resolved English -->
| name = String                <!-- resolved English -->
| name_sid = String
| name_sid = String
| desc = Wikitext              <!-- resolved English; nullable -->
| description = Wikitext              <!-- resolved English; nullable -->
| desc_sid = String            <!-- nullable -->
| desc_sid = String            <!-- nullable -->
| max_level = Integer          <!-- 1-3, == count(SkillLevel rows) -->
| max_level = Integer          <!-- 1-3, == count(SkillLevel rows) -->
Line 69: Line 69:
| name = {{{name|}}}
| name = {{{name|}}}
| name_sid = {{{name_sid|}}}
| name_sid = {{{name_sid|}}}
| desc = {{{desc|}}}
| description = {{{description|}}}
| desc_sid = {{{desc_sid|}}}
| desc_sid = {{{desc_sid|}}}
| max_level = {{{max_level|}}}
| max_level = {{{max_level|}}}
| source_path = {{{source_path|}}}
| source_path = {{{source_path|}}}
}}</includeonly>
}}</includeonly>

Revision as of 00:02, 13 May 2026

One row per hero skill. 102 rows total in 2026-05-05: 30 production + 12 pseudo + 30 arena + 30 campaign. Skills are the top-level branches of the hero skill tree (e.g. skill_assault, skill_archery, skill_logistics); each has 1-3 mastery levels, and at each level the player gets to pick from a small pool of sub-skills ("perks") that further specialize the build.

A skill carries identity (id, variant, type), shared name + desc SIDs, and a count of mastery levels. Per-level data (overrides, offered sub-skills, bonuses) lives on SkillLevel. The sub-skills available from a skill live on SubSkill, recovered by scanning every level's offered_sub_skills list.

Page layout

Data:Skill/<id> is self-contained — it carries the skill's own row plus every sub-skill referenced by any of its levels:

  1. {{SkillDef | id=… | variant=… | skill_type=… | …}}
  2. {{TranslationDef | type=skill | target_id=<id> | …}} — name + desc shared across all levels
  3. N × {{SkillLevelDef | skill_id=<id> | level=N | …}}
  4. N × {{SkillLevelTranslationDef | skill_id=<id> | level=N | … }} — only when level overrides a name/desc
  5. M × {{BonusDef | parent_type=skill_level | parent_id=<id>_L<level> | … }}
  6. K × {{SubSkillDef | id=… | parent_skill_id=<id> | …}} — every sub-skill referenced by any level
  7. K × {{TranslationDef | type=sub_skill | target_id=<sub_skill_id> | …}}
  8. K' × {{BonusDef | parent_type=sub_skill | parent_id=<sub_skill_id> | …}}

The 77 sub-skills not referenced by any skill (8 test entries + ~69 arena legacy *_old entries) emit onto the catch-all page Data:Skill/_orphan_sub_skills instead.

Schema

This template defines the table "Skill". View table.

{{SkillDef
| id = String
| variant = String              <!-- production / arena / campaign / pseudo -->
| skill_type = String           <!-- Common / Class / Faction; null for pseudo skills -->
| is_pseudo = Boolean
| name = String                 <!-- resolved English -->
| name_sid = String
| description = Wikitext               <!-- resolved English; nullable -->
| desc_sid = String             <!-- nullable -->
| max_level = Integer           <!-- 1-3, == count(SkillLevel rows) -->
| source_path = String
}}

Field notes

  • id is the source JSON id (e.g. skill_assault, arena_skill_assault, campaign_skill_assault, skill_pseudo_1).
  • variant distinguishes production / arena / campaign / pseudo variants of the same skill family. Most analytical queries should WHERE variant = 'production'.

skill_type is one of Common / Class / FactionDef. Pseudo skills (the 12 skill_pseudo_ entries) carry no skill_type — they're internal mechanism skills not shown in the hero UI.

  • is_pseudo mirrors the source isPseudoSkill flag. Pseudo skills typically have just 1 level and are used as reusable mechanic containers (e.g. movement bonuses applied uniformly).
  • name_sid / desc_sid point at the L10n entries; name / desc are the resolved English mirrors for at-a-glance reading.
  • max_level equals the length of the source parametersPerLevel array.

Related tables

  • SkillLevel — joined on id = skill_id (1:N where N=1..3).
  • SubSkill — joined on id = parent_skill_id. Recovered by scanning every level's offered_sub_skills.
  • BonusDef — skill-level bonuses join on parent_type='skill_level' AND parent_id LIKE id || '_L%'.
  • TranslationDef — one row per skill with type=skill, target_id=id.