FANDOM


--Use: 
--{{UnitcardV2|name=|cc=|img=|level=|Skill=|CR=|aff=|note=|nickname=|title=}}
--ex: {{UnitcardV2|name=Machina|cc=AW2v2|level=54|Skill=SAW|aff=100|CR=20|note=Chem. E. Waifu}}
--Remember, prince and regular units are parsed differently
--Notes:
-- Added:
--  Note section
--  SAW icon in place of skill level
--  Nicknames (replace unit name with custom name)
--  Title (Replaces unit name with custom nickname; only works with Prince at the moment)
--  Prince unit (Formatting of prince name non standard)
--  Halloween season
--  Affection percent
-- Modified:
--  Collab unit event name added as a seasonal string
-- Bugs:
--  Bigname bug: bignames extend card by a couple pixels, breaking evenness
--  Custom titles broken for non-Prince units
-- Planned Additions:
--  Adjutant/Waifu icon
--  Script to make updating a list of cards easier
--  Kkentaro unit list to this/Shiny unitcard converter, and vice versa
--  Cleanup of code (better prince name handling, cost reduction database lookup, other database lookups)
local shiny = {}
function shiny.main(frame)
  local name, state, filepath, unit_level, skill_level, cost_reduction, scolor, season, bigname, note, nickname, event, affection
 
  local cctable = {
    ['base'] = '',
    ['cc'] = 'CC',
    ['aw'] = 'AW',
    ['aw2'] = 'AW2',
    ['aw2v1'] = 'AW2v1',
    ['aw2v2'] = 'AW2v2'}
 
  local colors = {
    ['swimsuit'] = 'cyan',
    ['dress'] = 'purple',
    ['bride'] = 'white;text-shadow: 0 0 6px #000000',
    ['school'] = 'gray',
    ["valentine's"] = 'pink',
    ["new year's"] = 'red',
    ['christmas'] = 'green',
    ['yukata'] = 'fuchsia',
    ['halloween'] = 'orange',
  }
 
  --Thanks for not standardizing the prince icon...
 
  local princeMap = {
      ['prince'] = 'Prince ',
      ['prince (aw)'] = 'Awakened Prince ',
      ['prince (awakened)'] = 'Awakened Prince ',
      ['prince (sacred equipment)'] = 'Awakened Prince ',
      ['prince (keraunos)'] = 'Prince (Keraunos) ',
      ['prince (shota)'] = 'Shota Prince ',
      ['prince (childhood)'] = 'Shota Prince ',
      ['prince (chibi)'] = 'Chibi Prince ',
      ['prince (desert)'] = 'Prince Desert ',
      ['prince (beast)'] = 'Prince Beast ',
      ['prince (giant)'] = 'Prince (Giant) ',
      ['prince (wind guardian)'] = 'Prince (Wind Guardian) ',
      ['prince (einherjar)'] = 'Prince (Einherjar) ',
      ['prince (dark)'] = 'Prince (Dark) ',
      ['prince (edgelord)'] = 'Prince (Dark) ',
      ['prince (hero)'] = 'Prince (Hero King) ',
      ['prince (hero king)'] = 'Prince (Hero King) ',
      ['prince (four gods)'] = 'Prince (Four Gods) ',
      ['prince (avatar)'] = 'Prince (Four Gods) '
  }
 
  local princeSpecial = {
      ['prince'] = '',
      ['prince (aw)'] = 'Awakened',
      ['prince (awakened)'] = 'Awakened',
      ['prince (sacred equipment)'] = 'Sacred Equipment',
      ['prince (keraunos)'] = 'Keraunos',
      ['prince (shota)'] = 'Shota',
      ['prince (childhood)'] = 'Childhood',
      ['prince (chibi)'] = 'Chibi',
      ['prince (desert)'] = 'Desert',
      ['prince (beast)'] = 'Beast',
      ['prince (giant)'] = 'Giant',
      ['prince (wind guardian)'] = 'Wind Guardian',
      ['prince (einherjar)'] = 'Einherjar',
      ['prince (dark)'] = 'Dark ',
      ['prince (edgelord)'] = 'Dark ',
      ['prince (hero)'] = 'Hero King ',
      ['prince (hero king)'] = 'Hero King ',
      ['prince (four gods)'] = 'Four Gods ',
      ['prince (avatar)'] = 'Four Gods '
  }
 
  local princeAW = {
      ['prince'] = '',
      ['prince (aw)'] = 'AW ',
      ['prince (awakened)'] = 'AW ',
      ['prince (sacred equipment)'] = 'AW ',
      ['prince (keraunos)'] = 'AW ',
      ['prince (shota)'] = '',
      ['prince (childhood)'] = '',
      ['prince (chibi)'] = '',
      ['prince (desert)'] = 'AW ',
      ['prince (beast)'] = 'AW ',
      ['prince (giant)'] = 'AW ',
      ['prince (wind guardian)'] = 'AW ',
      ['prince (einherjar)'] = 'AW ',
      ['prince (dark)'] = 'AW ',
      ['prince (edgelord)'] = 'AW ',
      ['prince (hero)'] = 'AW ',
      ['prince (hero king)'] = 'AW ',
      ['prince (four gods)'] = 'AW ',
      ['prince (avatar)'] = 'AW '
  }
 
  local sawIcon = '[[File:SAW_Icon.png|12px|link=]]'
 
  local isSaw = false
 
  note = ''
  local title = ''
  scolor = 'black'
 
  for arg, value in pairs(frame:getParent().args) do
  arg = arg:lower()
    if arg == 1 then name = value end
    if arg == 'name' then name = value end
 
    if arg == 2 then state = cctable[value:lower()] end
    if arg == 'state' then state = cctable[value:lower()] end
    if arg == 'icon' then state = cctable[value:lower()] end
    if arg == 'cc' then state = cctable[value:lower()] end
 
    if arg == 'img' then filepath = value end
 
    if arg == 'level' then unit_level = value end
    if arg == 'lvl' then unit_level = value end
    if arg == 'lv' then unit_level = value end
 
    if arg == 'title' then title = value end
 
    if arg == 'skill'
    then 
        skill_level = value
        local temp = value:lower()
        if temp == 'awakened' or temp == 'saw'
        then
            isSaw = true
        end
    end
 
    if arg == 'cost' then cost_reduction = value end
    if arg == 'cr' then cost_reduction = value end
 
    if arg == 'note' then note = value end
 
    if arg == 'nickname' then nickname = value end
 
    if arg == 'aff' then affection = value.."%" else affection = "" end
 
  end
 
  unit_level = unit_level or 1
  skill_level = skill_level or 1
  cost_reduction = cost_reduction or 0
 
  local isPrince = princeMap[name:lower()]
  if isPrince
  then
      state = princeAW[name:lower()]
      filepath = filepath or (princeMap[name:lower()]..'_Sprite.gif|link=Prince')
      if state ~= '' then state = '[[File:'..state..'Icon.png|24px|link=]]' end
 
      if title ~= ''
      then
          season = title
      else
          season = name:match('[^%(%)]+%(([^%(%)]+)%)')
          if season then 
            scolor = 'black'
          else
            season = ''
          end
      end
 
      name = 'Prince'
  else
      if state ~= '' then state = state..' 'end
      filepath = filepath or (name..' '..state..'_Sprite.gif')
      filepath = (filepath..'|link='..name)
      if state:match('AW2v') then state = 'AW2 ' end
      if state ~= '' then 
          if isSaw
          then state = '[[File:'..state..'Icon.png|24px|link=]]'
          else state = '[[File:'..state..'Icon.png|24px|link=]]'
          end
        end
 
      if title ~= ''
      then
          season = title
      else
          season = name:match('[^%(%)]+%(([^%(%)]+)%)')
          if season then 
            scolor = colors[season:lower()]
            season = season..' Ver.'
          else
            season = ''
          end
 
          event = name:match('[^%(%)]+%【([^%(%)]+)%】')
          if event
          then
              scolor = 'black'
              season = event
          end
      end
 
      name = name:match('([^%(%)]+)')
  end
  if not scolor then scolor = 'black' end
  if nickname then name = nickname end
  if #name>17 then 
      bigname = ' unitcards-title-tiny'
  elseif #name>15 then 
      bigname = ' unitcards-title-small'
  else 
      bigname = '' 
  end
 
  out = ''
  out = out ..'<div class="unitcards-main">'
  out = out ..  '<div style="height:0px;">'
  out = out ..    '<div style="height:6px;"></div>'
  out = out ..    '<div style="margin-left:91px;height:26px;width:24px;">'..state..'</div>'  
 
  out = out ..    '<div class="unitcards-seasonal" style="color:'..scolor..';">'..season..'</div>'
  out = out ..  '</div>'
  out = out ..  '<div>'
  out = out ..    '<div class="unitcards-title'..bigname..'">'
  out = out ..      '<span>'..name..'</span>'
  out = out ..    '</div>'
  out = out ..    '<div class="unitcards-icon">[[File:'..filepath..']]</div>'
  out = out ..    '<div class="unitcards-info">'
  out = out ..      '<div class="unitcards-entry">'
  out = out ..        '<span class="unitcards-label">Level:</span>'
  out = out ..        '<span class="unitcards-labeled_data">'..unit_level..'</span>'
  out = out ..      '</div>'
  out = out ..      '<div class="unitcards-entry">'
  out = out ..        '<span class="unitcards-label">Skill:</span>'
  if isSaw
  then
    out = out .. '<span style="display:block;margin-left:90px;position:relative;top:-6px;height:7px;width:6px;">'..sawIcon..'</span>'
    out = out ..        '<span class="unitcards-labeled_data"> </span>'
  else
    out = out ..        '<span class="unitcards-labeled_data">'..skill_level..'</span>'
  end
  out = out ..      '</div>'
  out = out ..      '<div class="unitcards-entry">'
  out = out ..        '<span class="unitcards-label">Affection:</span>'
  out = out ..        '<span class="unitcards-labeled_data">'..affection..'</span>'
  out = out ..      '</div>'
  out = out ..      '<div class="unitcards-entry">'
  out = out ..        '<span class="unitcards-label">CR:</span>'
  out = out ..        '<span class="unitcards-labeled_data">'..cost_reduction..'</span>'
  out = out ..      '</div>'
  out = out ..      '<div class="unitcards-entry">'
  out = out ..        '<span class="unitcards-label"></span>'
  out = out ..        '<span class="unitcards-labeled_data">'..note..'</span>'
  out = out ..      '</div>'
  out = out ..    '</div>'
  out = out ..  '</div>'
  out = out ..'</div>'
  return out
end
return shiny
Community content is available under CC-BY-SA unless otherwise noted.