User:Caledor92/Sandbox1
-- (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: Lua error: Error: Table Adventurers not found.. or Lua error: Error: Table Adventurers not found.. -- Ex: Lua error: Error: Table Adventurers not found.. or Lua error: Error: Table Adventurers not found.. 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('300px', portraitFileName, name)
else
portraitImage = string.format('
', name)
end
-- Description
local mcPlusHp = adv['PlusHp0'] + adv['PlusHp1'] + adv['PlusHp2'] + adv['PlusHp3'] + adv['PlusHp4']
local mcPlusAtk = adv['PlusAtk0'] + adv['PlusAtk1'] + adv['PlusAtk2'] + adv['PlusAtk3'] + adv['PlusAtk4']
local description =
termDescription({'Element', inlineIconAndDesc({'Icon Element', adv['ElementalType']}, adv['ElementalType'])})..
termDescription({'Weapon', inlineIconAndDesc({'Icon Weapon', adv['WeaponType']}, adv['WeaponType'])})..
maxStatsTooltip('HP', adv['MaxHp'], mcPlusHp, adv['McFullBonusHp5'])..
maxStatsTooltip('Str', adv['MaxAtk'], mcPlusAtk, adv['McFullBonusAtk5'])..
termDescription({'Class', '[[File:Icon Type Row '..adv['CharaType']..'.png|105px|link=]]'})..
termDescription({'Base Rarity', '[[File:Icon Rarity Row '..adv['Rarity']..'.png|75px|link=]]'})..
termDescription({'Obtained From', adv['Obtain']})
-- Skills
local skill1tooltip = frame:expandTemplate{title='SkillTooltip', args={adv['Skill1Name']}}
local skill2tooltip = adv['Skill2Name'] == and or
', '..frame:expandTemplate{title='SkillTooltip', args={adv['Skill2Name']}}
-- CoAbility
local exData = {}
for i = 1,5 do exData[i] = adv['ExAbilityData'..i] end
local coability = frame:expandTemplate{title='Icon', args={'CoAbility', coability, size='24px'}}..' '..
frame:expandTemplate{title='CoAbilityTooltip', args=exData}
-- 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'):cssText('width:360px')
:tag('div')
:wikitext("Skills: ")
:tag('div'):cssText('display:inline-block')
:wikitext(skill1tooltip..skill2tooltip)
:done()
:done()
:tag('div')
:wikitext("Co-Ability: ")
:tag('div'):cssText('display:inline-block')
:wikitext(coability)
:done()
:done()
:tag('div'):cssText('display:inline-block')
:wikitext("Abilities: "ability1..ability2..ability3)
:done()
:allDone()
return tostring(card)
end
-- Common templating functions
function termDescription(args)
local frame = mw.getCurrentFrame()
return frame:expandTemplate{title='TermDescription', args=args}
end
function inlineIconAndDesc(args, desc)
local frame = mw.getCurrentFrame()
return string.format('%s %s', frame:expandTemplate{title='InlineIcon', args=args}, desc)
end
function abilityIconTooltip(abilities)
local frame = mw.getCurrentFrame()
return frame:expandTemplate{title='Icon', args = {'Ability', abilities[1], size='24px'}}..' '..
frame:expandTemplate{title='AbilityTooltip', args=abilities}
end
function maxStatsTooltip(statType, max, mcPlus, mcFullBonus)
local frame = mw.getCurrentFrame()
local total = max + mcPlus + mcFullBonus
return frame:expandTemplate{title='TermDescriptionTooltip', args={
frame:expandTemplate{title='Tooltip', args={
'Total Max '..statType, '5★ Max '..statType..' with All Mana Circle Nodes and Bonus'}},
string.format('%s (%s + %s + %s)', total, max, mcPlus, mcFullBonus),
'Total (5★ Max + Mana Circle Node Stats + Mana Circle Bonus)'}}
end
-- Common querying functions
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 --
--