Template:SkillDef: Difference between revisions
obelisk-bot: uploading initial Cargo templates |
obelisk-bot: Pushing translation table rework |
||
| (2 intermediate revisions by the same user not shown) | |||
| 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 + | # N × <code><nowiki>{{TranslationDef | type=skill | target_id=<id> | language=… | name=… | description=… }}</nowiki></code> — name + description, shared across all levels, one row per language | ||
# N × <code>{{SkillLevelDef | skill_id=<id> | level=N | …}}</code> | # N × <code><nowiki>{{SkillLevelDef | skill_id=<id> | level=N | …}}</nowiki></code> | ||
# N × <code>{{ | # For each level that overrides a name/desc, N × <code><nowiki>{{TranslationDef | type=skill_level | target_id=<id> | variant=<level> | language=… | … }}</nowiki></code> | ||
# 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 × N × <code><nowiki>{{TranslationDef | type=sub_skill | target_id=<sub_skill_id> | language=… | …}}</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 24: | Line 24: | ||
| skill_type = String | | skill_type = String | ||
| is_pseudo = Boolean | | is_pseudo = Boolean | ||
| name_sid = String | | name_sid = String | ||
| desc_sid = String | | desc_sid = String | ||
| max_level = Integer | | max_level = Integer | ||
| Line 38: | Line 36: | ||
| skill_type = String <!-- Common / Class / Faction; null for pseudo skills --> | | skill_type = String <!-- Common / Class / Faction; null for pseudo skills --> | ||
| is_pseudo = Boolean | | is_pseudo = Boolean | ||
<!-- Localization references — display text lives in the Translation table, type='skill' --> | |||
| name_sid = String | | name_sid = String | ||
| 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 52: | Line 49: | ||
'' '''<code>skill_type</code>''' is one of <code>Common</code> / <code>Class</code> / <code>FactionDef</code>. Pseudo skills (the 12 <code>skill_pseudo_''</code> entries) carry no skill_type — they're internal mechanism skills not shown in the hero UI. | '' '''<code>skill_type</code>''' is one of <code>Common</code> / <code>Class</code> / <code>FactionDef</code>. Pseudo skills (the 12 <code>skill_pseudo_''</code> entries) carry no skill_type — they're internal mechanism skills not shown in the hero UI. | ||
* '''<code>is_pseudo</code>''' mirrors the source <code>isPseudoSkill</code> flag. Pseudo skills typically have just 1 level and are used as reusable mechanic containers (e.g. movement bonuses applied uniformly). | * '''<code>is_pseudo</code>''' mirrors the source <code>isPseudoSkill</code> flag. Pseudo skills typically have just 1 level and are used as reusable mechanic containers (e.g. movement bonuses applied uniformly). | ||
* '''<code>name_sid</code> / <code>desc_sid</code>''' point at the L10n entries; <code> | * '''<code>name_sid</code> / <code>desc_sid</code>''' point at the L10n entries, surfaced for traceability. Display name / description for every language (English included) live in the [[Template:TranslationDef|Translation]] table, <code>type='skill'</code>; per-level name/desc overrides use <code>type='skill_level'</code>, <code>variant=<level></code>. | ||
* '''<code>max_level</code>''' equals the length of the source <code>parametersPerLevel</code> array. | * '''<code>max_level</code>''' equals the length of the source <code>parametersPerLevel</code> array. | ||
| Line 59: | Line 56: | ||
* [[Template:SubSkillDef|SubSkill]] — joined on <code>id = parent_skill_id</code>. Recovered by scanning every level's <code>offered_sub_skills</code>. | * [[Template:SubSkillDef|SubSkill]] — joined on <code>id = parent_skill_id</code>. Recovered by scanning every level's <code>offered_sub_skills</code>. | ||
* [[Template:BonusDef|<code>BonusDef</code>]] — skill-level bonuses join on <code>parent_type='skill_level' AND parent_id LIKE id || '_L%'</code>. | * [[Template:BonusDef|<code>BonusDef</code>]] — skill-level bonuses join on <code>parent_type='skill_level' AND parent_id LIKE id || '_L%'</code>. | ||
* [[Template:TranslationDef| | * [[Template:TranslationDef|Translation]] — display text in every language (English included), joined on <code>id = Translation.target_id WHERE Translation.type='skill' AND Translation.language='{{{lang|en}}}'</code> (1:N, one row per language). | ||
[[Category:Cargo Definitions]] | [[Category:Cargo Definitions]] | ||
| Line 67: | Line 64: | ||
| skill_type = {{{skill_type|}}} | | skill_type = {{{skill_type|}}} | ||
| is_pseudo = {{{is_pseudo|}}} | | is_pseudo = {{{is_pseudo|}}} | ||
| name_sid = {{{name_sid|}}} | | name_sid = {{{name_sid|}}} | ||
| 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> | }} | ||
Created <code>Skill</code> entry: <code>{{{id|}}}</code></includeonly> | |||
Latest revision as of 20:48, 14 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:
{{SkillDef | id=… | variant=… | skill_type=… | …}}- N ×
{{TranslationDef | type=skill | target_id=<id> | language=… | name=… | description=… }}— name + description, shared across all levels, one row per language - N ×
{{SkillLevelDef | skill_id=<id> | level=N | …}} - For each level that overrides a name/desc, N ×
{{TranslationDef | type=skill_level | target_id=<id> | variant=<level> | language=… | … }} - M ×
{{BonusDef | parent_type=skill_level | parent_id=<id>_L<level> | … }} - K ×
{{SubSkillDef | id=… | parent_skill_id=<id> | …}}— every sub-skill referenced by any level - K × N ×
{{TranslationDef | type=sub_skill | target_id=<sub_skill_id> | language=… | …}} - 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
<!-- Localization references — display text lives in the Translation table, type='skill' -->
| name_sid = String
| desc_sid = String <!-- nullable -->
| max_level = Integer <!-- 1-3, == count(SkillLevel rows) -->
| source_path = String
}}
Field notes
idis the source JSON id (e.g.skill_assault,arena_skill_assault,campaign_skill_assault,skill_pseudo_1).variantdistinguishes production / arena / campaign / pseudo variants of the same skill family. Most analytical queries shouldWHERE 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_pseudomirrors the sourceisPseudoSkillflag. Pseudo skills typically have just 1 level and are used as reusable mechanic containers (e.g. movement bonuses applied uniformly).name_sid/desc_sidpoint at the L10n entries, surfaced for traceability. Display name / description for every language (English included) live in the Translation table,type='skill'; per-level name/desc overrides usetype='skill_level',variant=<level>.max_levelequals the length of the sourceparametersPerLevelarray.
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'soffered_sub_skills. BonusDef— skill-level bonuses join onparent_type='skill_level' AND parent_id LIKE id || '_L%'.- Translation — display text in every language (English included), joined on
id = Translation.target_id WHERE Translation.type='skill' AND Translation.language='en'(1:N, one row per language).


