Marvel: Avengers Alliance Wiki
Advertisement

Documentation for this module may be created at Module:TUBCreator/doc

local p = {}
local l = require('Module:Link')

local bdata = mw.loadData( 'Module:TUBCreator/bonusdata' )
local hdata = mw.loadData( 'Module:TUBCreator/herodata' )
local variables = mw.loadData( 'Module:TUBCreator/variables' )

--Sort output table by names
function pairsByKeys (t, f)
  local a = {}
  for n in pairs(t) do table.insert(a, n) end
  table.sort(a, f)
  local i = 0      -- iterator variable
  local iter = function ()   -- iterator function
    i = i + 1
    if a[i] == nil then return nil
    else return a[i], t[a[i]]
    end
  end
  return iter
end

function icon(hero)
  return "[[File:"..hero.." Icon 1.png|link="..l.heroLinkArg(hero).."|"..hero.."]]"
end

function name(hero)
  return "[["..l.heroLinkArg(hero).."|"..hero.."]]"
end

--TUB output
function getTUBIcons(bonus)
  result = ""
  if bdata[bonus]["pairs"] ~= nil then
    for p, pair in pairs(bdata[bonus]["pairs"]) do
      if result ~= "" then
        result = result.." or "..icon(pair[1])..icon(pair[2])
      else
        result = icon(pair[1])..icon(pair[2])
      end
    end
  -- Default handling
  else
    for j, hero_name in pairsByKeys(bdata[bonus]["heroes"]) do
      result = result..icon(hero_name)
    end
  end
  return result 
end

function p.getIcons(frame)
    return getTUBIcons(frame.args[1])
end

function getTUBNames(bonus)
  result = ""
  if bdata[bonus]["pairs"] ~= nil then
    for p, pair in pairs(bdata[bonus]["pairs"]) do
      if result ~= "" then
        result = result.." or "..name(pair[1])..", "..name(pair[2])
      else
        result = name(pair[1])..", "..name(pair[2])
      end
    end
  -- Default handling
  else
    for j, hero_name in pairsByKeys(bdata[bonus]["heroes"]) do
      if result ~= "" then
        result = result..", "..name(hero_name)
      else
        result = result..name(hero_name)
      end
    end
  end
  return result 
end

function p.getNames(frame)
  return getTUBNames(frame.args[1])
end

function p.getDescription(frame)
  return bdata[frame.args[1]]["description"]
end

-- List of bonuses
function p.bonusList( frame )
  local hero = frame.args[1]
  local output_data = hero.." has the following [[Team-Up Bonuses]]:\n"
  for i, bonus_type in pairs(hdata[hero]) do
    if bdata[bonus_type] ~= nil then
      output_data = output_data.."*'''"..bonus_type.."''': "..bdata[bonus_type]["description"].."\n"
    else
      output_data = output_data.."*'''"..bonus_type.."''': \n"
    end
  end
  return output_data 
end

-- Create bonus list for specified hero
function p.createTUBPageData( frame )
  local hero = frame.args[1]
  local bonus_table = {}
  -- No data for hero (announced, etc.)
  if hdata[hero] == nil then
      return "[["..l.heroLinkArg(hero).."|"..hero.."]] doesn't have any Team-Up bonuses currently"
  end
  table.sort(hdata[hero])
  -- Create table with heroes and their bonuses
  for i, bonus_type in pairs(hdata[hero]) do
    -- Special case for paired bonuses (Bad Blood, Fantastic Fill-in)
    if bdata[bonus_type]["pairs"] ~= nil then
      for p, pair in pairs(bdata[bonus_type]["pairs"]) do
        if pair[1] == hero then
          if bonus_table[pair[2]] ~= nil then
            table.insert(bonus_table[pair[2]], bonus_type )
          else
            bonus_table[pair[2]] = {bonus_type}
          end
        elseif pair[2] == hero then
          if bonus_table[pair[1]] ~= nil then
            table.insert(bonus_table[pair[1]], bonus_type )
          else
            bonus_table[pair[1]] = {bonus_type}
          end
        end
      end
    -- Default handling
    else
      for j, hero_name in pairsByKeys(bdata[bonus_type]["heroes"]) do
        if bonus_table[hero_name] ~= nil then
          table.insert(bonus_table[hero_name], bonus_type )
        else
          bonus_table[hero_name] = {bonus_type}
        end
      end
    end
  end
  --Remove self entry
  bonus_table[hero] = nil

  -- Fill table with bonuses listed per value
  local bonus_count = {[50] = {}, [100] ={}, [150]={}, [200]={}, [250]={}, [300]={}, [350]={}, [400]={}, [450]={}}
  for hero_name, line in pairsByKeys(bonus_table) do
    local link = l.heroLinkArg(hero_name).."|"..hero_name
    local s = "\n|-\n|[[File:"..hero_name.." Icon 1.png|link="..link.."]]"
    s = s.."\n|[["..link.."]]"
    s = s.."\n|"..table.concat(bonus_table[hero_name], ", ")
    local count = 0
    for i, line in pairs(bonus_table[hero_name]) do
      count = count + 1
    end
    count = count*50
    table.insert(bonus_count[count], s)
  end

  -- Start creating table
  -- Team-Up Bonuses listed
  local output_data = "[["..l.heroLinkArg(hero).."|"..hero.."]] has the following [[Team-Up Bonuses]]:\n\n==Team-Up Bonuses==\n"
  for i, bonus_type in pairs(hdata[hero]) do
    if bdata[bonus_type] ~= nil then
      output_data = output_data.."*'''"..bonus_type.."''': "..bdata[bonus_type]["description"].."\n"
    else
      output_data = output_data.."*'''"..bonus_type.."''': \n"
    end
  end

  -- All possible Team-Ups
  output_data = output_data.."\n==All Possible Team-Ups==\n"..variables["tubheader"]
  for i, bonus_type in pairs(hdata[hero]) do
      output_data = output_data.."\n|-\n|"..getTUBIcons(bonus_type).."\n|"..getTUBNames(bonus_type).."\n|'''"..bonus_type.."'''"
  end
  output_data = output_data.."\n|}\n\n"

  -- Team-Ups per value
  for i, line in pairsByKeys(bonus_count) do
    output_data = output_data.."=="..i.." Point Team-Ups==\n"
    if next(line) ~= nil then
      output_data = output_data..variables["tubheader"]
      output_data = output_data..table.concat(line, "\n").."\n|}\n\n"
    else
      output_data = output_data.."''None''\n\n"
    end
  end

  return output_data
end

--Get table entry for specified bonus
function bonusTableRow(bonusName)
    return "\n|-\n|'''"..bonusName.."'''\n|"..bdata[bonusName]["description"].."\n|"..getTUBIcons(bonusName)
end

function p.getBonusRow(frame)
    return bonusTableRow(frame.args[1])
end

function p.GenerateTableList(frame)
  data = variables["listheader"]
  for bonus, value in pairsByKeys(bdata) do
      if string.match(bonus, "^["..frame.args[1].."]") then
        data = data.."\n"..bonusTableRow(bonus)
      end
  end
  return data.."\n|}"
end

return p
Advertisement