Advertisement
riskyshot69

5v5 Queue System

Feb 24th, 2025
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.33 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. function match_parties(queue)
  189.     table.sort(queue, function(a, b) return a.joined_at < b.joined_at end)
  190.    
  191.     local matches = {}
  192.     local available_parties = {}
  193.    
  194.     for _, entry in ipairs(queue) do
  195.         local party = PARTIES[entry.party]
  196.         table.insert(available_parties, {name = entry.party, size = #party.players})
  197.     end
  198.    
  199.     table.sort(available_parties, function(a, b) return a.size > b.size end)
  200.    
  201.     local function form_team()
  202.         local team = {}
  203.         local team_size = 0
  204.         local i = 1
  205.        
  206.         while team_size < 5 and i <= #available_parties do
  207.             local party = available_parties[i]
  208.             if team_size + party.size <= 5 then
  209.                 team_size = team_size + party.size
  210.                 table.insert(team, party.name)
  211.                 table.remove(available_parties, i)
  212.             else
  213.                 i = i + 1
  214.             end
  215.         end
  216.        
  217.         return team_size == 5 and team or nil
  218.     end
  219.    
  220.     while #available_parties >= 2 do
  221.         local team1 = form_team()
  222.         local team2 = form_team()
  223.        
  224.         if team1 and team2 then
  225.             table.insert(matches, {team1, team2})
  226.         else
  227.             break
  228.         end
  229.     end
  230.    
  231.     return matches
  232. end
  233.  
  234. local matched_games = match_parties(QUEUE_POOL)
  235. for i, match in ipairs(matched_games) do
  236.     print(dump(match[1]), 'vs', dump(match[2]))
  237. end
  238.  
  239.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement