Module:UnitInfobox: Difference between revisions
From Heroes of Might and Magic: Olden Era Official Wiki
No edit summary |
No edit summary |
||
| Line 68: | Line 68: | ||
nameEn = nameEn:gsub(' of', 's of') -- fix 'Sentinels of Glory' | nameEn = nameEn:gsub(' of', 's of') -- fix 'Sentinels of Glory' | ||
nameEn = nameEn:gsub('Waurms', 'Waurmos') | nameEn = nameEn:gsub('Waurms', 'Waurmos') | ||
local table = runQuery([[ | local table = runQuery([[ | ||
tables = | tables = | ||
| Line 75: | Line 74: | ||
T.type = 'map_object' | T.type = 'map_object' | ||
AND T.language = 'en' | AND T.language = 'en' | ||
AND T.description LIKE 'You can recruit %s' | AND T.description LIKE 'You can recruit %s%%' | ||
| fields = | | fields = | ||
T.target_id = target_id | T.target_id = target_id | ||
| Line 81: | Line 80: | ||
1 | 1 | ||
]], nameEn); | ]], nameEn); | ||
local row = table[1] or {} | local row = table[1] or {} | ||
local dwelling = row.target_id or '' | local dwelling = row.target_id or '' | ||
Revision as of 13:20, 16 July 2026
Documentation for this module may be created at Module:UnitInfobox/doc
-- This module is intended as a supporting muscle for the UnitInfobox template.
local p = {}
-- Displays a variable
------------------------------------------------------------------------------------------------------------------------
local function dump(target)
return '<pre>' .. mw.dumpObject(target) .. '</pre>'
end
-- Parses and runs a Cargo query from wiki-like syntax
------------------------------------------------------------------------------------------------------------------------
local function runQuery(query, ...)
query = string.gsub(query, "%-%-.-\n", "") -- remove "comments"
query = select('#', ...) > 0 and mw.ustring.format(query, ...) or query
query = mw.text.trim(query)
local tables = ''
local fields = ''
local options = {}
for part in query:gmatch('[^|]+') do
local key, val = part:match('^%s*([^=]+)%s*=%s*(.-)%s*$')
if key and val then
key = mw.text.trim(key):lower()
val = mw.text.trim(val)
val = val:gsub('%s', ' ')
if key == 'tables' then
tables = val
elseif key == 'fields' then
fields = val
elseif key == 'limit' then
options[key] = tonumber(val) or val
elseif key == 'join on' then
options['join'] = val
else
options[key] = val
end
end
end
return mw.ext.cargo.query(tables, fields, options)
end
------------------------------------------------------------------------------------------------------------------------
local function getEnglishBaseUnitName(unitId)
local baseId = unitId:gsub('_alt$', ''):gsub('_upg$', '')
local table = runQuery([[
tables =
Unit = U,
Translation = T
| join on =
U.id = T.target_id
| where =
U.id = '%s'
AND T.language = 'en'
AND T.type = 'unit'
| fields =
T.name = name
| limit =
1
]], baseId);
local row = table[1] or {}
return row.name
end
------------------------------------------------------------------------------------------------------------------------
function p.findDwellingId(frame)
local unitId = frame.args.id
local nameEn = getEnglishBaseUnitName(unitId)
nameEn = nameEn:gsub('man$', 'men') -- fix 'Swordmen' and 'Crossbowmen'
nameEn = nameEn:gsub(' of', 's of') -- fix 'Sentinels of Glory'
nameEn = nameEn:gsub('Waurms', 'Waurmos')
local table = runQuery([[
tables =
Translation = T
| where =
T.type = 'map_object'
AND T.language = 'en'
AND T.description LIKE 'You can recruit %s%%'
| fields =
T.target_id = target_id
| limit =
1
]], nameEn);
local row = table[1] or {}
local dwelling = row.target_id or ''
return dwelling
end
------------------------------------------------------------------------------------------------------------------------
function p.findSpecialist(frame)
local unitId = frame.args.id
local nameEn = getEnglishBaseUnitName(unitId)
local table = runQuery([[
tables =
Translation = T
| where =
T.type = 'hero_specialization'
AND T.language = 'en'
AND T.description LIKE '%s growth in your cities increases by%%'
| fields =
T.target_id = target_id
| limit =
1
]], nameEn);
local row = table[1] or {}
local specialist = row.target_id or ''
specialist = specialist:gsub('_specialization', '')
return specialist
end
return p


