Module:Unit
From Heroes of Might and Magic: Olden Era Official Wiki
Module for requesting characteristics of all existing units in Olden Era. Actual data is stored in Data:units.json.
For documentation page, see Module:Unit/doc.
Supported Commands
get
The module supports the main get command, through which you can retrieve individual unit attributes (listed below). The basic syntax of the command is:
{{#invoke:Unit|get|Unit Name|Property Name}}
| Name | Description | Example | Result |
|---|---|---|---|
| name | Unit name (localized) | {{#invoke:Unit|get|Angel|name}}
|
Property 'name' not found for unit 'Angel' |
| Base name | Name of un-upgraded unit (localized) | {{#invoke:Unit|get|Apotheosis|baseName}}
|
Property 'baseName' not found for unit 'Apotheosis' |
| First Upgrade | Name of upgraded unit (localized) | {{#invoke:Unit|get|Angel|upgradeName}}
|
Property 'upgradeName' not found for unit 'Angel' |
| Second Upgrade | Name of alt. upgraded unit (localized) | {{#invoke:Unit|get|Angel|altUpgradeName}}
|
Property 'altUpgradeName' not found for unit 'Angel' |
| Image name | Name without spaces and apostrophes, suitable for wiki file names | {{#invoke:Unit|get|Sun's Aegis|imageName}}
|
Property 'imageName' not found for unit 'Sun's Aegis' |
| description | Narrative description (localized with data substitutions) | {{#invoke:Unit|get|Angel|description}}
|
Property 'description' not found for unit 'Angel' |
| faction | Unit faction | {{#invoke:Unit|get|Angel|faction}}
|
human |
| tier | Unit tier | {{#invoke:Unit|get|Angel|tier}}
|
7 |
| id | Unit ID | {{#invoke:Unit|get|Angel|id}}
|
angel |
| nativeBiome | Native biome | {{#invoke:Unit|get|Angel|nativeBiome}}
|
Grass |
| cost | Hiring cost | {{#invoke:Unit|get|Angel|cost}}
|
Property 'cost' not found for unit 'Angel' |
| cost.gold cost.resource |
Access to specific property in unitCost object | {{#invoke:Unit|get|Angel|cost.gold}}{{#invoke:Unit|get|Angel|cost.gemstones}}
|
Property 'cost.gold' not found for unit 'Angel' Property 'cost.gemstones' not found for unit 'Angel' |
| upgradeCost | Upgrade cost | {{#invoke:Unit|get|Archangel|upgradeCost}}
|
Property 'upgradeCost' not found for unit 'Archangel' |
| weeklyIncrement | Base weekly increment from main building | {{#invoke:Unit|get|Angel|weeklyIncrement}}
|
1 |
| expBonus | Experience gained when defeating the unit | {{#invoke:Unit|get|Angel|expBonus}}
|
366 |
| squadValue | Squad value of the unit (used for army composition calculations) | {{#invoke:Unit|get|Angel|squadValue}}
|
3660 |
| hp | Maximum health | {{#invoke:Unit|get|Angel|hp}}
|
225 |
| offence | Offence parameter | {{#invoke:Unit|get|Angel|offence}}
|
30 |
| defence | Defence parameter | {{#invoke:Unit|get|Angel|defence}}
|
30 |
| damageMin | Minimum damage dealt | {{#invoke:Unit|get|Angel|damageMin}}
|
50 |
| damageMax | Maximum damage dealt | {{#invoke:Unit|get|Angel|damageMax}}
|
75 |
| moral | Default morale | {{#invoke:Unit|get|Angel|moral}}
|
0 |
| moralMin | Minimum morale value | {{#invoke:Unit|get|Angel|moralMin}}
|
-3 |
| moralMax | Maximum morale value | {{#invoke:Unit|get|Angel|moralMax}}
|
3 |
| luck | Default luck | {{#invoke:Unit|get|Angel|luck}}
|
0 |
| luckMin | Minimum luck value | {{#invoke:Unit|get|Angel|luckMin}}
|
-3 |
| luckMax | Maximum luck value | {{#invoke:Unit|get|Angel|luckMax}}
|
3 |
| initiative | Initiative | {{#invoke:Unit|get|Angel|initiative}}
|
8 |
| speed | Speed | {{#invoke:Unit|get|Angel|speed}}
|
4 |
| moveType | Movement type (fly or teleport) | {{#invoke:Unit|get|Angel|moveType}}
|
fly |
| baseClass.name | Base class name (localized) | {{#invoke:Unit|get|Angel|baseClass.name|ru}}
|
Property 'baseClass.name' not found for unit 'Angel' |
| baseClass.description | Base class description (localized) | {{#invoke:Unit|get|Angel|baseClass.description}}
|
Property 'baseClass.description' not found for unit 'Angel' |
| baseClass.icon | Base class icon filename | {{#invoke:Unit|get|Angel|baseClass.icon}} or [[File:{{#invoke:Unit|get|Angel|baseClass.icon}}|50px]]
|
Property 'baseClass.icon' not found for unit 'Angel' - File:Property 'baseClass.icon' not found for unit 'Angel' |
Active Abilities
To access specific active ability properties, use the format: abilities.index.property
| Name | Description | Example | Result |
|---|---|---|---|
| abilities.1.name | Ability name (localized) | {{#invoke:Unit|get|Flaming Phoenix|abilities.1.name|ru}}
|
Property 'abilities.1.name' not found for unit 'Flaming Phoenix' |
| abilities.1.description | Ability main description (localized with data substitutions) | {{#invoke:Unit|get|Flaming Phoenix|abilities.1.description|ru}}
|
Property 'abilities.1.description' not found for unit 'Flaming Phoenix' |
| abilities.1.infoDescription | Additional ability information (localized) | {{#invoke:Unit|get|Flaming Phoenix|abilities.1.infoDescription|ru}}
|
Property 'abilities.1.infoDescription' not found for unit 'Flaming Phoenix' |
| abilities.1.excaptionInTooltip | Ability restrictions or exceptions (localized) | {{#invoke:Unit|get|Cultist|abilities.1.excaptionInTooltip|ru}}
|
Property 'abilities.1.excaptionInTooltip' not found for unit 'Cultist' |
| abilities.1.abilityType | Type of ability (localized) | {{#invoke:Unit|get|Flaming Phoenix|abilities.1.abilityType|ru}}
|
Property 'abilities.1.abilityType' not found for unit 'Flaming Phoenix' |
| abilities.1.ability_tier | Ability rank or tier | {{#invoke:Unit|get|Flaming Phoenix|abilities.1.ability_tier|ru}}
|
Property 'abilities.1.ability_tier' not found for unit 'Flaming Phoenix' |
| abilities.1.energyLevel | Energy required for ability activation | {{#invoke:Unit|get|Flaming Phoenix|abilities.1.energyLevel|ru}}
|
Property 'abilities.1.energyLevel' not found for unit 'Flaming Phoenix' |
| abilities.1.icon | Ability icon filename | {{#invoke:Unit|get|Flaming Phoenix|abilities.1.icon|ru}}
|
Property 'abilities.1.icon' not found for unit 'Flaming Phoenix' |
Passive Abilities
To access specific passive ability properties, use the format: passives.index.property
| Name | Description | Example | Result |
|---|---|---|---|
| passives.1.name | Passive ability name (localized) | {{#invoke:Unit|get|Giant Toad|passives.1.name}}
|
Property 'passives.1.name' not found for unit 'Giant Toad' |
| passives.1.description | Passive ability description (localized with data substitutions) | {{#invoke:Unit|get|Giant Toad|passives.1.description}}
|
Property 'passives.1.description' not found for unit 'Giant Toad' |
| passives.1.excaptionInTooltip | Passive ability restrictions or exceptions (localized) | {{#invoke:Unit|get|Giant Toad|passives.1.excaptionInTooltip}}
|
Property 'passives.1.excaptionInTooltip' not found for unit 'Giant Toad' |
| passives.1.icon | Passive ability icon filename | {{#invoke:Unit|get|Giant Toad|passives.1.icon}}
|
Property 'passives.1.icon' not found for unit 'Giant Toad' |
Alternative Attacks
To access specific alternative attack properties, use the format: alternativeAttacks.index.property
| Name | Description | Example | Result |
|---|---|---|---|
| alternativeAttacks.1.name | Alternative attack name (localized) | {{#invoke:Unit|get|Infiltrator|alternativeAttacks.1.name}}
|
Property 'alternativeAttacks.1.name' not found for unit 'Infiltrator' |
| alternativeAttacks.1.description | Alternative attack description (localized with data substitutions) | {{#invoke:Unit|get|Infiltrator|alternativeAttacks.1.description}}
|
Property 'alternativeAttacks.1.description' not found for unit 'Infiltrator' |
| alternativeAttacks.1.abilityType | Type of alternative attack (localized) | {{#invoke:Unit|get|Infiltrator|alternativeAttacks.1.abilityType}}
|
Property 'alternativeAttacks.1.abilityType' not found for unit 'Infiltrator' |
| alternativeAttacks.1.infoDescription | Additional alternative attack information (localized) | {{#invoke:Unit|get|Infiltrator|alternativeAttacks.1.infoDescription}}
|
Property 'alternativeAttacks.1.infoDescription' not found for unit 'Infiltrator' |
| alternativeAttacks.1.icon | Alternative attack icon filename | {{#invoke:Unit|get|Infiltrator|alternativeAttacks.1.icon}}
|
Property 'alternativeAttacks.1.icon' not found for unit 'Infiltrator' |
| alternativeAttacks.1.ability_tier | Alternative attack rank or tier | {{#invoke:Unit|get|Infiltrator|alternativeAttacks.1.ability_tier}}
|
Property 'alternativeAttacks.1.ability_tier' not found for unit 'Infiltrator' |
Localization Support
The module supports localization in multiple languages. You can specify the language as an optional third parameter:
{{#invoke:Unit|get|Unit Name|Property Name|Language Code}}
For example:
{{#invoke:Unit|get|Angel|name|pl}}Property 'name' not found for unit 'Angel' - Polish{{#invoke:Unit|get|Angel|name|ru}}Property 'name' not found for unit 'Angel' - Russian
local UnitData = {}
-- Cache for data
local dataCache = nil
-- Function to load JSON data from wiki page
local function loadJson(title)
local page = mw.title.new(title)
local content = page and page:getContent() or ""
if content == "" then return {} end
local ok, data = pcall(mw.text.jsonDecode, content)
if not ok then return {} end
return data
end
-- Load unit data from unitdata_work.json
local function loadUnits()
if dataCache then return dataCache end
dataCache = {}
-- Load main JSON file (in real wiki, JSON data needs to be placed on this page)
local units = loadJson("Data:units.json") -- or another suitable name for wiki page
-- Copy data to cache
for name, unit in pairs(units) do
dataCache[name] = unit
end
return dataCache
end
-- Function to get unit property
function UnitData.get(frame)
local args = frame.args
local unitName = args[1] or args.unit or ""
local property = args[2] or args.property or ""
unitName = mw.text.trim(unitName or "")
property = mw.text.trim(property or "")
if unitName == "" then
return "Unit name not specified"
end
if property == "" then
return "Property not specified"
end
-- Load unit data
local units = loadUnits()
-- Check if unit exists in data
local unit = units[unitName]
if not unit then
return "Unit '" .. unitName .. "' not found"
end
-- First check if property exists in main unit object
if unit[property] ~= nil then
return tostring(unit[property])
end
-- Then check if property exists in stats
if unit.stats and unit.stats[property] ~= nil then
return tostring(unit.stats[property])
end
-- If property not found
return "Property '" .. property .. "' not found for unit '" .. unitName .. "'"
end
return UnitData


