User:Caledor92/Sandbox1

From Dragalia Lost Wiki
Revision as of 20:59, 14 November 2019 by >Caledor92
Jump to navigation Jump to search
50px Documentation

-- (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('Unknown.png', 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 --

--