Difference between revisions of "Module:Adventurer"
Jump to navigation
Jump to search
>Eave m (preprocess template wikitext, since otherwise it's treated as plaintext) |
>Eave m (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...) |
||
| Line 31: | Line 31: | ||
local abilities = {} | local abilities = {} | ||
for i, key in ipairs(abilityKeys) do | for i, key in ipairs(abilityKeys) do | ||
| − | abilities[key] = '' | + | abilities[key] = '0' |
if adv[key] and adv[key] ~= '0' then | if adv[key] and adv[key] ~= '0' then | ||
local ability = getAbilities({ | local ability = getAbilities({ | ||
| Line 44: | Line 44: | ||
end | end | ||
| − | -- Precompute some | + | -- Precompute some template outputs |
-- Portrait Image | -- Portrait Image | ||
local portraitFileName = string.format('%s 0%s r0%s portrait.png', adv['Id'], adv['VariationId'], adv['Rarity']) | local portraitFileName = string.format('%s 0%s r0%s portrait.png', adv['Id'], adv['VariationId'], adv['Rarity']) | ||
| Line 53: | Line 53: | ||
portraitImage = string.format('[[File:Unknown.png|300px|link=%s]]', name) | portraitImage = string.format('[[File:Unknown.png|300px|link=%s]]', name) | ||
end | 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 = '' | local skill2tooltip = '' | ||
if (adv['Skill2Name'] ~= '') then | if (adv['Skill2Name'] ~= '') then | ||
| − | skill2tooltip = | + | skill2tooltip = frame:expandTemplate{title='SkillTooltip', args={adv['Skill2Name']}} |
end | end | ||
| − | -- | + | -- CoAbility |
| − | local | + | 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 | -- Abilities | ||
| − | + | local ability1 = abilityIconTooltip({abilities['Abilities11'], abilities['Abilities12'], abilities['Abilities13']}) | |
| − | local ability1 = | + | local ability2 = abilities['Abilities21'] == '0' and '' or |
| − | + | abilityIconTooltip({abilities['Abilities21'], abilities['Abilities22']}) | |
| − | local ability2 = abilities['Abilities21'] == '' and '' or | + | local ability3 = abilities['Abilities31'] == '0' and '' or |
| − | + | abilityIconTooltip({abilities['Abilities31'], abilities['Abilities32']}) | |
| − | local ability3 = abilities['Abilities31'] == '' and '' or | ||
| − | |||
-- Format the content | -- Format the content | ||
| Line 87: | Line 98: | ||
:cssText('display:flex;flex-direction:column') | :cssText('display:flex;flex-direction:column') | ||
:tag('div') | :tag('div') | ||
| − | :wikitext( | + | :wikitext(description) |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
:done() | :done() | ||
:tag('hr') | :tag('hr') | ||
| Line 105: | Line 109: | ||
:tag('div') | :tag('div') | ||
:cssText('display:inline-block') | :cssText('display:inline-block') | ||
| − | :wikitext( | + | :wikitext(skill1tooltip..skill2tooltip) |
:done() | :done() | ||
:done() | :done() | ||
| Line 113: | Line 117: | ||
:tag('div') | :tag('div') | ||
:cssText('display:inline-block') | :cssText('display:inline-block') | ||
| − | :wikitext( | + | :wikitext(coability) |
| − | |||
:done() | :done() | ||
:done() | :done() | ||
| Line 127: | Line 130: | ||
:done() | :done() | ||
:allDone() | :allDone() | ||
| − | return frame: | + | 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 | end | ||
Revision as of 02:19, 6 October 2019
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>