Module:Adventurer
Revision as of 02:19, 6 October 2019 by >Eave (attempt to expand templates explicitly instead of using preprocess. this might not work with recursively expanded templates though, in which case it'll be complicated...)
Usage
This module is intended to back the rendering of more complicated Adventurer data-related templates. Currently it only supports the Template:Character info card template.
Example
Generally, this module should be called via the regular wikitext templates instead of directly. But here is example syntax for calling the functions from wikitext:
{{#invoke:Adventurer|infoCard|The Prince}}
Lua error: Error: Table Adventurers not found..
{{#invoke:Adventurer|infoCard|Name=Edward}}
Lua error: Error: Table Adventurers not found..
-- <includeonly> (prevents literal interpretation of links or categories within the module code)
-- Lua Templating for Adventurer related info.
local p = {}
local cargo = mw.ext.cargo
-- Usage: {{#invoke:Adventurer|infoCard|<name>}} or {{#invoke:Adventurer|infoCard|Name=<name>}}
-- Ex: {{#invoke:Adventurer|infoCard|Euden}} or {{#invoke:Adventurer|infoCard|Name=Elisanne}}
function p.infoCard(frame)
local name = frame.args[1] or frame.args['Name']
-- Query adventurer data
local adv = getAdventurers({
where = '_pageName="'..name..'"',
groupBy = '_pageName',
limit = 1
})[1]
if adv == nil then
return ''
end
-- CoAbility
local coability = getCoabilities({
where = string.format('Id="%s"', adv['ExAbilityData1']),
groupBy = '_pageName',
limit = 1
})[1]
if coability then
coability = coability['Name']
end
-- Abilities
local abilityKeys = {'Abilities11', 'Abilities12', 'Abilities13', 'Abilities21', 'Abilities22', 'Abilities31', 'Abilities32'}
local abilities = {}
for i, key in ipairs(abilityKeys) do
abilities[key] = '0'
if adv[key] and adv[key] ~= '0' then
local ability = getAbilities({
where = string.format('Id="%s"', adv[key]),
groupBy = '_pageName',
limit = 1
})[1]
if ability then
abilities[key] = ability['Name']
end
end
end
-- Precompute some template outputs
-- Portrait Image
local portraitFileName = string.format('%s 0%s r0%s portrait.png', adv['Id'], adv['VariationId'], adv['Rarity'])
local portraitImage = mw.title.makeTitle('File', portraitFileName)
if (portraitImage.exists) then
portraitImage = string.format('[[File:%s|300px|link=%s]]', portraitFileName, name)
else
portraitImage = string.format('[[File:Unknown.png|300px|link=%s]]', name)
end
-- Description
local maxhp = adv['MaxHp'] + adv['PlusHp0'] + adv['PlusHp1'] + adv['PlusHp2'] + adv['PlusHp3'] + adv['PlusHp4'] + adv['McFullBonusHp5']
local maxatk = adv['MaxAtk'] + adv['PlusAtk0'] + adv['PlusAtk1'] + adv['PlusAtk2'] + adv['PlusAtk3'] + adv['PlusAtk4'] + adv['McFullBonusAtk5']
local description =
frame:expandTemplate{title='TermDescription', args={'Element', frame:expandTemplate{title='InlineIcon', args={'Icon Element', adv['ElementalType'], adv['ElementalType']}}}}..
frame:expandTemplate{title='TermDescription', args={'Weapon', frame:expandTemplate{title='InlineIcon', args={'Icon Weapon', adv['WeaponType'], adv['WeaponType']}}}}..
maxStatsTooltip('HP', adv['MaxHp'], maxhp)..
maxStatsTooltip('Str', adv['MaxAtk'], maxatk)..
frame:expandTemplate{title='TermDescription', args={'Class', '[[File:Icon Type Row '..adv['CharaType']..'.png|105px|link=]]}}'}}..
frame:expandTemplate{title='TermDescription', args={'Base Rarity', '[[File:Icon Rarity Row '..adv['Rarity']..'.png|75px|link=]]'}}..
frame:expandTemplate{title='TermDescription', args={'Obtained From', adv['Obtain']}}
-- Skills
local skill1tooltip = frame:expandTemplate{title='SkillTooltip', args={adv['Skill1Name']}}
mw.log(skill1tooltip)
local skill2tooltip = ''
if (adv['Skill2Name'] ~= '') then
skill2tooltip = frame:expandTemplate{title='SkillTooltip', args={adv['Skill2Name']}}
end
-- CoAbility
local coability = frame:expandTemplate{title='Icon', args={'CoAbility', coability, size='24px'}}..
frame:expandTemplate{title='CoAbilityTooltip', args={adv['ExAbilityData1'], adv['ExAbilityData2'], adv['ExAbilityData3'], adv['ExAbilityData4'], adv['ExAbilityData5']}}
-- Abilities
local ability1 = abilityIconTooltip({abilities['Abilities11'], abilities['Abilities12'], abilities['Abilities13']})
local ability2 = abilities['Abilities21'] == '0' and '' or
abilityIconTooltip({abilities['Abilities21'], abilities['Abilities22']})
local ability3 = abilities['Abilities31'] == '0' and '' or
abilityIconTooltip({abilities['Abilities31'], abilities['Abilities32']})
-- Format the content
local card = mw.html.create('div')
:addClass('panel')
:css('display','inline-block')
:tag('div')
:addClass('panel-heading')
:wikitext('[['..name..']]')
:done()
:tag('div')
:addClass('panel-body')
:cssText('display:flex;flex-wrap:wrap;justify-content:center;')
:tag('div')
:wikitext(portraitImage)
:done()
:tag('div')
:cssText('display:flex;flex-direction:column')
:tag('div')
:wikitext(description)
:done()
:tag('hr')
:cssText('margin:1em')
:done()
:tag('div')
:tag('div')
:cssText('width:360px')
:wikitext("'''Skills''': ")
:tag('div')
:cssText('display:inline-block')
:wikitext(skill1tooltip..skill2tooltip)
:done()
:done()
:tag('div')
:cssText('width:360px')
:wikitext("'''Co-Ability''': ")
:tag('div')
:cssText('display:inline-block')
:wikitext(coability)
:done()
:done()
:tag('div')
:cssText('width:360px')
:wikitext("'''Abilities''': ")
:tag('div')
:cssText('display:inline-block')
:wikitext(ability1..ability2..ability3)
:done()
:tag('br')
:done()
:allDone()
return tostring(card)
end
function abilityIconTooltip(abilities)
local frame = mw.getCurrentFrame()
return frame:expandTemplate{title='Icon', args = {'Ability', abilities[0], size='24px'}}..
frame:expandTemplate{title='AbilityTooltip', args=abilities}
end
function maxStatsTooltip(statType, max, maxWithMaxMc)
local frame = mw.getCurrentFrame()
return frame:expandTemplate{title='TermDescriptionTooltip', args={
frame:expandTemplate{title='Tooltip', args={'Total Max '..statType, '5★ Max '..statType..' with All Mana Circle Nodes and Bonus'}},
max, maxWithMaxMc, 'Total (5★ Max + Mana Circle Node Stats + Mana Circle Bonus)}}'}}
end
function getAdventurers(queryArgs)
local tables = 'Adventurers'
local queryFields = 'Id,VariationId,CharaType,Rarity,ElementalType,WeaponType,MinHp3,MinHp4,MinHp5,MaxHp,PlusHp0,PlusHp1,PlusHp2,PlusHp3,PlusHp4,McFullBonusHp5,MinAtk3,MinAtk4,MinAtk5,MaxAtk,PlusAtk0,PlusAtk1,PlusAtk2,PlusAtk3,PlusAtk4,McFullBonusAtk5,Obtain,ExAbilityData1,ExAbilityData2,ExAbilityData3,ExAbilityData4,ExAbilityData5,Skill1Name,Skill2Name,Abilities11,Abilities12,Abilities13,Abilities21,Abilities22,Abilities31,Abilities32'
return cargo.query(tables, queryFields, queryArgs)
end
function getCoabilities(queryArgs)
local tables = 'CoAbilities'
local queryFields = 'Name'
return cargo.query(tables, queryFields, queryArgs)
end
function getAbilities(queryArgs)
local tables = 'Abilities'
local queryFields = 'Name'
return cargo.query(tables, queryFields, queryArgs)
end
return p
--</includeonly>