Difference between revisions of "Module:Test"

From BTAWiki
Jump to navigation Jump to search
(Module creation)
 
Line 29: Line 29:
 
   for _, user in pairs(UserIds) do
 
   for _, user in pairs(UserIds) do
 
     if string.find(user.id, "chassisdef", 1, true) then
 
     if string.find(user.id, "chassisdef", 1, true) then
       table.insert(ChassisIds, user.id)
+
       ChassisIds[user.id] = true
 
     elseif string.find(user.id, "mechdef", 1, true) then
 
     elseif string.find(user.id, "mechdef", 1, true) then
       table.insert(MechIds, user.id)
+
       MechIds[user.id] = true
 
     else
 
     else
 
       table.insert(UnknownIds, user.id)
 
       table.insert(UnknownIds, user.id)
Line 38: Line 38:
  
 
   -- convert mech ids to chassis ids
 
   -- convert mech ids to chassis ids
   for _, mid in ipairs(MechIds) do
+
   for mid,_ in pairs(MechIds) do
 
     local cids = mw.ext.cargo.query(
 
     local cids = mw.ext.cargo.query(
 
       'Mech','Mech.ChassisID=id',
 
       'Mech','Mech.ChassisID=id',
Line 44: Line 44:
 
     )
 
     )
 
     for _, c in ipairs(cids) do
 
     for _, c in ipairs(cids) do
       table.insert(ChassisIds, c.id)
+
       ChassisIds[c.id] = true
 
     end
 
     end
 
   end
 
   end
 +
 +
  -- keying by ID allowed us to remove duplicates, now give them an index so we can sort
 +
  local tempTable = {}
 +
  for id,_ in pairs(ChassisIds) do
 +
    table.insert(tempTable,id)
 +
  end
 +
  ChassisIds = tempTable
  
 
   -- sort the table to put the new chassis ids in the correct place
 
   -- sort the table to put the new chassis ids in the correct place

Revision as of 17:42, 9 December 2021

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

-- Module:Test is a blank canvas to try stuff out on without breaking anything that other pages are using right now. It will be invoked in [[Template:TemplateTest]]

local p = {}

local mechs = require('Module:Mech').core
local getArgs = require('Module:Arguments').getArgs


function p.equipmentMechs(frame)
  local tpl_args = getArgs(frame, {parentFirst=true})

  local equipment = tpl_args[1]

  -- Find all records in MechInventory where the component id matches
  -- the item we are looking for. The MechID for each match will be
  -- saved in UserIds table. Note, if the equipment is fixed then the
  -- id will actually be a key to the Chassis table, not the Mech table.
  local UserIds = mw.ext.cargo.query(
    'MechInventory','MechInventory.MechID=id',
    { where = string.format('MechInventory.ComponentDefID = "%s"', equipment), limit=2000 }
  )

  if next(UserIds) == nil then
    return mw.html.create('div').wikitext("''Not found on any 'Mechs''")
  end

  -- Split the result sets by the type of id returned
  local ChassisIds, MechIds, UnknownIds = {}, {}, {}
  for _, user in pairs(UserIds) do
    if string.find(user.id, "chassisdef", 1, true) then
      ChassisIds[user.id] = true
    elseif string.find(user.id, "mechdef", 1, true) then
      MechIds[user.id] = true
    else
      table.insert(UnknownIds, user.id)
    end
  end

  -- convert mech ids to chassis ids
  for mid,_ in pairs(MechIds) do
    local cids = mw.ext.cargo.query(
      'Mech','Mech.ChassisID=id',
      { where = string.format('Mech.Id = "%s"', mid), limit=2000 }
    )
    for _, c in ipairs(cids) do
      ChassisIds[c.id] = true
    end
  end

  -- keying by ID allowed us to remove duplicates, now give them an index so we can sort
  local tempTable = {}
  for id,_ in pairs(ChassisIds) do
    table.insert(tempTable,id)
  end
  ChassisIds = tempTable

  -- sort the table to put the new chassis ids in the correct place
  table.sort(ChassisIds, 
    function(a,b)
      a = string.lower(a)
      b = string.lower(b)

      local aprime = string.find(a, "prime", -5, true)
      if aprime and string.find(b, string.sub(a, 1, aprime-1), 1, true) then
        return true
      end

      local bprime = string.find(b, "prime", -5, true)
      if bprime and string.find(a, string.sub(b, 1, bprime-1), 1, true) then
        return false
      end
      
      return a < b
    end
  )

--[==[
  local equipList = mw.html.create('ul')
  for k,v in ipairs(ChassisIds) do
    if string.find(v,"GAR-", 1, true) then
      equipList:tag('li'):wikitext(string.format("%i %s", k, v))
      for i=1, string.len(v) do
        equipList:tag('li'):wikitext(string.byte(v, i))
      end
    end
  end
--]==]
      
  -- create the display list
  local equipList = mw.html.create('ul')
  equipList:cssText('column-count: 3;-moz-column-count: 3;-webkit-column-count: 3')

  -- for every chassis id, query the name and variant and add to the display list
  for _, cid in ipairs(ChassisIds) do
    local names = mw.ext.cargo.query(
      'Chassis','Chassis.Name=Name,Chassis.VariantName=VariantName',
      { where = string.format('Chassis.Id = "%s"', cid), limit=2000 }
    )

    for _, mech in ipairs(names) do
      equipList:tag('li'):wikitext(string.format(
        '[[%s#%s|%s %s]]', mech['Name'], mech['VariantName'], 
        mech['Name'], mech['VariantName']
      ))
    end
  end

  -- if there were any items whose mech id wasn't a chassisdef or mechdef, 
  -- add them last as whatever
  for _, unknown in ipairs(UnknownIds) do
    equipList:tag('li'):wikitext(string.format("unknown %s", tostring(unknown.id)))
  end

  return equipList
end

function p.mechEquipment(frame)
  local tpl_args = getArgs(frame, {parentFirst=true})
  gearpiece = tpl_args[1]

  local mech = mechs.mech_inventory.componentDefID(gearpiece)

  if mech == nil then
    return mw.html.create('div').wikitext("''Mech not found''")
  end

  local equip = {}

  local mechList = mw.html.create('ul')

  for _, tag in ipairs(mech.equip) do
    if p.componentID[equip] ~= nil then
      table.insert(equip, p.componentID[tag])
    end
  end

  table.sort(tags)
  for _, tag in ipairs(equip) do
    factionList:tag('li'):wikitext(tag)
  end
  
  return mechList
end

return p