Advertisement
riskyshot69

Variable n V/s n queue system

Feb 24th, 2025
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.43 KB | None | 0 0
  1. local MMR = {
  2.     [100] = 'bronze',
  3.     [250] = 'silver',
  4.     [500] = 'gold',
  5.     [750] = 'platinum',
  6.     [900] = 'diamond',
  7.     [1000] = 'elite'
  8. }
  9.  
  10. local PLAYER_DATA = {
  11.     ['player_1'] = {
  12.         mmr = 1000
  13.     },
  14.     ['player_2'] = {
  15.         mmr = 500
  16.     },
  17.     ['player_3'] = {
  18.         mmr = 600
  19.     },
  20.     ['player_4'] = {
  21.         mmr = 100
  22.     },
  23.     ['player_5'] = {
  24.         mmr = 0
  25.     },
  26.     ['player_6'] = {
  27.         mmr = 100
  28.     },
  29.     ['player_7'] = {
  30.         mmr = 200
  31.     },
  32.     ['player_8'] = {
  33.         mmr = 1000
  34.     },
  35.     ['player_9'] = {
  36.         mmr = 500
  37.     },
  38.     ['player_10'] = {
  39.         mmr = 600
  40.     },
  41.     ['player_11'] = {
  42.         mmr = 200
  43.     },
  44.     ['player_12'] = {
  45.         mmr = 400
  46.     },
  47.     ['player_13'] = {
  48.         mmr = 0
  49.     },
  50.     ['player_14'] = {
  51.         mmr = 1000
  52.     },
  53.     ['player_15'] = {
  54.         mmr = 500
  55.     },
  56.     ['player_16'] = {
  57.           mmr = 500
  58.       },
  59.     ['player_17'] = {
  60.           mmr = 500
  61.       },
  62.     ['player_18'] = {
  63.           mmr = 500
  64.       },
  65.     ['player_19'] = {
  66.           mmr = 500
  67.       },
  68. }
  69.  
  70. local PARTIES = {
  71.     ['party_1'] = {
  72.        players = {'player_1', 'player_16'},
  73.        avgMMR = (PLAYER_DATA['player_1'].mmr + PLAYER_DATA['player_2'].mmr )/2
  74.     },
  75.     ['party_2'] = {
  76.         players = {'player_3'},
  77.         avgMMR = (PLAYER_DATA['player_3'].mmr)/1
  78.     },
  79.     ['party_3'] = {
  80.         players = {'player_5', 'player_6'},
  81.         avgMMR = (PLAYER_DATA['player_5'].mmr + PLAYER_DATA['player_6'].mmr )/2
  82.     },
  83.     ['party_4'] = {
  84.         players = {'player_4'},
  85.         avgMMR = (PLAYER_DATA['player_4'].mmr)/1
  86.     },
  87.     ['party_5'] = {
  88.         players = {'player_10', 'player_7'},
  89.         avgMMR = (PLAYER_DATA['player_10'].mmr + PLAYER_DATA['player_7'].mmr )/2
  90.     },
  91.     ['party_6'] = {
  92.         players = {'player_8'},
  93.         avgMMR = (PLAYER_DATA['player_8'].mmr)/1
  94.     },
  95.     ['party_7'] = {
  96.         players = {'player_9', 'player_11'},
  97.         avgMMR = (PLAYER_DATA['player_9'].mmr + PLAYER_DATA['player_11'].mmr )/2
  98.     },
  99.     ['party_8'] = {
  100.         players = {'player_15'},
  101.         avgMMR = (PLAYER_DATA['player_15'].mmr)/1
  102.     },
  103.     ['party_9'] = {
  104.         players = {'player_14'},
  105.         avgMMR = (PLAYER_DATA['player_14'].mmr)/1
  106.     },
  107.     ['party_10'] = {
  108.         players = {'player_13'},
  109.         avgMMR = (PLAYER_DATA['player_13'].mmr)/1
  110.     },
  111.     ['party_11'] = {
  112.         players = {'player_12'},
  113.         avgMMR = (PLAYER_DATA['player_12'].mmr)/1
  114.     }
  115. }
  116.  
  117. local QUEUE_POOL = {
  118.     {
  119.         party = 'party_1',
  120.         joined_at = 1740427169,
  121.         inMatch = false
  122.     },
  123.     {
  124.         party = 'party_3',
  125.         joined_at = 1740427202,
  126.         inMatch = false
  127.     },
  128.     {
  129.         party = 'party_2',
  130.         joined_at = 1740427224,
  131.         inMatch = false
  132.     },
  133.     {
  134.         party = 'party_5',
  135.         joined_at = 1740427640,
  136.         inMatch = false
  137.     },
  138.     {
  139.         party = 'party_10',
  140.         joined_at = 1740427660,
  141.         inMatch = false
  142.     },
  143.     {
  144.         party = 'party_6',
  145.         joined_at = 1740427601,
  146.         inMatch = false
  147.     },
  148.     {
  149.         party = 'party_8',
  150.         joined_at = 1740427740,
  151.         inMatch = false
  152.     },
  153.     {
  154.         party = 'party_4',
  155.         joined_at = 1740427673,
  156.         inMatch = false
  157.     },
  158.     {
  159.         party = 'party_11',
  160.         joined_at = 1740427619,
  161.         inMatch = false
  162.     },
  163.     {
  164.         party = 'party_9',
  165.         joined_at = 1740427609,
  166.         inMatch = false
  167.     },
  168.     {
  169.         party = 'party_7',
  170.         joined_at = 1740427627,
  171.         inMatch = false
  172.     },
  173. }
  174.  
  175. function dump(o)
  176.    if type(o) == 'table' then
  177.       local s = '{ '
  178.       for k,v in pairs(o) do
  179.          if type(k) ~= 'number' then k = '"'..k..'"' end
  180.          s = s .. dump(v) .. ','
  181.       end
  182.       return s .. '} '
  183.    else
  184.       return tostring(o)
  185.    end
  186. end
  187.  
  188. local TEAM_SIZE = 3 -- Change this to 1, 2, 3, 4, or 5 for different match sizes
  189.  
  190. function match_parties(queue)
  191.     table.sort(queue, function(a, b) return a.joined_at < b.joined_at end)
  192.    
  193.     local matches = {}
  194.     local available_parties = {}
  195.    
  196.     for _, entry in ipairs(queue) do
  197.         local party = PARTIES[entry.party]
  198.         table.insert(available_parties, {name = entry.party, size = #party.players})
  199.     end
  200.    
  201.     table.sort(available_parties, function(a, b) return a.size > b.size end)
  202.    
  203.     local function form_team()
  204.         local team = {}
  205.         local team_size = 0
  206.         local i = 1
  207.        
  208.         while team_size < TEAM_SIZE and i <= #available_parties do
  209.             local party = available_parties[i]
  210.             if team_size + party.size <= TEAM_SIZE then
  211.                 team_size = team_size + party.size
  212.                 table.insert(team, party.name)
  213.                 table.remove(available_parties, i)
  214.             else
  215.                 i = i + 1
  216.             end
  217.         end
  218.        
  219.         return team_size == TEAM_SIZE and team or nil
  220.     end
  221.    
  222.     while #available_parties >= 2 do
  223.         local team1 = form_team()
  224.         local team2 = form_team()
  225.        
  226.         if team1 and team2 then
  227.             table.insert(matches, {team1, team2})
  228.         else
  229.             break
  230.         end
  231.     end
  232.    
  233.     return matches
  234. end
  235.  
  236. local matched_games = match_parties(QUEUE_POOL)
  237. for i, match in ipairs(matched_games) do
  238.     print(dump(match[1]), 'vs', dump(match[2]))
  239. end
  240.  
  241.  
  242.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement