Template:SpellRankDef
This template defines and stores rows for the SpellRank Cargo table. Per-mastery-level structural data for a Spell. Always 4 rows per spell — levels 1=no skill, 2=basic, 3=advanced, 4=expert.
SpellRank carries only the mechanical, language-independent fields. The rank's localizable text — its description and bonus unlock blurb, in every language including English — lives in the shared Translation table, keyed by type=spell_rank, target_id=<spell_id>, variant=<level>. The spell's name is not a per-rank value — it is static across all four ranks — so it is stored once, in Spell's type=spell Translation rows, and never duplicated here.
The bot emits these inline on the parent Data:Spell/<id> page, each {{SpellRankDef}} row followed by its per-language {{TranslationDef}} rows.
Schema
This template defines the table "SpellRank". View table.
{{SpellRankDef
| spell_id = String
| level = Integer <!-- 1=no skill, 2=basic, 3=advanced, 4=expert -->
| description_sid = String
| bonus_description_sid = String <!-- null at level 1 -->
| mana_cost = Integer
| upgrade_cost = Integer
}}
Field notes
- Primary key is
(spell_id, level). - No
name_sidhere. The spell's name is static across all four ranks — it is not a per-rank value. It lives on Spell (name_sid) and its resolved text in the Translation table undertype='spell'. There is no "rank name" concept in the source data. description_sid/bonus_description_sidpoint at the L10n entries the rank's text was sourced from.bonus_description_sidis null at level 1. Traceability only; not the translation join path.- Resolved text for every language (including English) lives in Translation: the
descriptionandbonus_descriptioncolumns,WHERE type='spell_rank' AND target_id=<spell_id> AND variant=<level>. Thenamecolumn on those rows is left empty — see the note above. Hero-dependent placeholders ({N}for spell-power-scaled values) stay unsubstituted in the stored text. mana_cost/upgrade_costare the per-rank mechanical costs.
Related tables
- Spell — joined on
SpellRank.spell_id = Spell.id(N:1). - Translation — joined on
SpellRank.spell_id = Translation.target_id AND SpellRank.level = Translation.variant,WHERE Translation.type='spell_rank'(1:N, one row per language).


