[{"data":1,"prerenderedAt":6590},["ShallowReactive",2],{"navigation":3,"\u002Fexamples\u002Fgame-systems":151,"\u002Fexamples\u002Fgame-systems-surround":6585},[4,26,48,84,102,129],{"title":5,"path":6,"stem":7,"children":8,"icon":10},"Getting Started","\u002Fgetting-started","1.getting-started\u002F1.index",[9,11,16,21],{"title":5,"path":6,"stem":7,"icon":10},"i-lucide-rocket",{"title":12,"path":13,"stem":14,"icon":15},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":17,"path":18,"stem":19,"icon":20},"Configuration","\u002Fgetting-started\u002Fconfiguration","1.getting-started\u002F3.configuration","i-lucide-settings",{"title":22,"path":23,"stem":24,"icon":25},"First Steps","\u002Fgetting-started\u002Ffirst-steps","1.getting-started\u002F4.first-steps","i-lucide-footprints",{"title":27,"path":28,"stem":29,"children":30,"icon":32},"Connection","\u002Fconnection","2.connection\u002F1.index",[31,33,38,43],{"title":27,"path":28,"stem":29,"icon":32},"i-lucide-server",{"title":34,"path":35,"stem":36,"icon":37},"Basic Connection","\u002Fconnection\u002Fbasic","2.connection\u002F2.basic","i-lucide-plug",{"title":39,"path":40,"stem":41,"icon":42},"Connection Options","\u002Fconnection\u002Foptions","2.connection\u002F3.options","i-lucide-settings-2",{"title":44,"path":45,"stem":46,"icon":47},"Database Operations","\u002Fconnection\u002Fdatabase","2.connection\u002F4.database","i-lucide-database",{"title":49,"path":50,"stem":51,"children":52,"icon":47},"CRUD Operations","\u002Fcrud-operations","3.crud-operations\u002F1.index",[53,54,59,64,69,74,79],{"title":49,"path":50,"stem":51,"icon":47},{"title":55,"path":56,"stem":57,"icon":58},"Insert Operations","\u002Fcrud-operations\u002Finsert","3.crud-operations\u002F2.insert","i-lucide-plus-square",{"title":60,"path":61,"stem":62,"icon":63},"Query Operations","\u002Fcrud-operations\u002Fquery","3.crud-operations\u002F3.query","i-lucide-search",{"title":65,"path":66,"stem":67,"icon":68},"Update Operations","\u002Fcrud-operations\u002Fupdate","3.crud-operations\u002F4.update","i-lucide-edit",{"title":70,"path":71,"stem":72,"icon":73},"Delete Operations","\u002Fcrud-operations\u002Fdelete","3.crud-operations\u002F5.delete","i-lucide-trash",{"title":75,"path":76,"stem":77,"icon":78},"Async Operations","\u002Fcrud-operations\u002Fasync","3.crud-operations\u002F6.async","i-lucide-cpu",{"title":80,"path":81,"stem":82,"icon":83},"Query Operators","\u002Fcrud-operations\u002Foperators","3.crud-operations\u002F7.operators","i-lucide-filter",{"title":85,"path":86,"stem":87,"children":88,"icon":90},"Advanced Features","\u002Fadvanced","4.advanced\u002F1.index",[89,91,96],{"title":85,"path":86,"stem":87,"icon":90},"i-lucide-zap",{"title":92,"path":93,"stem":94,"icon":95},"Aggregation Pipelines","\u002Fadvanced\u002Faggregation","4.advanced\u002F2.aggregation","i-lucide-bar-chart-3",{"title":97,"path":98,"stem":99,"children":100,"icon":63},"Manage Indexes","\u002Fadvanced\u002Findexes","4.advanced\u002F3.indexes",[101],{"title":97,"path":98,"stem":99,"icon":63},{"title":103,"path":104,"stem":105,"children":106,"icon":108},"Examples","\u002Fexamples","5.examples\u002F1.index",[107,109,114,119,124],{"title":103,"path":104,"stem":105,"icon":108},"i-lucide-code",{"title":110,"path":111,"stem":112,"icon":113},"Basic Examples","\u002Fexamples\u002Fbasic","5.examples\u002F2.basic","i-lucide-book-open",{"title":115,"path":116,"stem":117,"icon":118},"Player Systems","\u002Fexamples\u002Fplayer-systems","5.examples\u002F3.player-systems","i-lucide-users",{"title":120,"path":121,"stem":122,"icon":123},"Game Systems","\u002Fexamples\u002Fgame-systems","5.examples\u002F4.game-systems","i-lucide-gamepad-2",{"title":125,"path":126,"stem":127,"icon":128},"Server Administration","\u002Fexamples\u002Fadministration","5.examples\u002F5.administration","i-lucide-shield",{"title":130,"path":131,"stem":132,"children":133,"icon":113},"API Reference","\u002Fapi-reference","6.api-reference\u002F1.index",[134,135,139,143,147],{"title":130,"path":131,"stem":132,"icon":113},{"title":136,"path":137,"stem":138},"MongoDB Global","\u002Fapi-reference\u002Fglobal","6.api-reference\u002F2.global",{"title":140,"path":141,"stem":142},"MongoDBClient","\u002Fapi-reference\u002Fclient","6.api-reference\u002F3.client",{"title":144,"path":145,"stem":146},"MongoDBDatabase","\u002Fapi-reference\u002Fdatabase","6.api-reference\u002F4.database",{"title":148,"path":149,"stem":150},"MongoDBCollection","\u002Fapi-reference\u002Fcollection","6.api-reference\u002F5.collection",{"id":152,"title":120,"body":153,"description":6578,"extension":6579,"links":6580,"meta":6581,"navigation":6582,"path":121,"seo":6583,"stem":122,"__hash__":6584},"docs\u002F5.examples\u002F4.game-systems.md",{"type":154,"value":155,"toc":6571},"minimark",[156,163,167,170,175,2076,2080,3913,3917,5971,5975,6548,6552,6567],[157,158,159],"warning",{},[160,161,162],"p",{},"These examples are AI-generated and has not been reviewed for accuracy. Use them as a starting point and verify correctness before deploying in production.",[164,165,120],"h1",{"id":166},"game-systems",[160,168,169],{},"Examples for common game systems using MongoDB.",[171,172,174],"h2",{"id":173},"leaderboard-system","Leaderboard System",[176,177,182],"pre",{"className":178,"code":179,"language":180,"meta":181,"style":181},"language-lua shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","--[[\n    Leaderboard System\n    Score tracking and rankings\n]]\n\nlocal Leaderboard = {}\n\nfunction Leaderboard.Initialize(db)\n    Leaderboard.db = db\n    Leaderboard.scores = db:Collection(\"leaderboard\")\n\n    -- Create indexes\n    Leaderboard.scores:CreateIndex({ category = 1, score = -1 }, false, \"category_score\")\n    Leaderboard.scores:CreateIndex({ steamid = 1, category = 1 }, true, \"player_category\")\nend\n\n-- Submit a score\nfunction Leaderboard.SubmitScore(steamid, username, score, category, callback)\n    category = category or \"default\"\n\n    -- Upsert - update if higher, insert if new\n    Leaderboard.scores:FindOneAsync(\n        { steamid = steamid, category = category },\n        function(err, existing)\n            if existing and existing.score >= score then\n                -- Existing score is higher\n                if callback then callback(false, \"Existing score is higher\") end\n                return\n            end\n\n            local doc = {\n                steamid = steamid,\n                username = username,\n                category = category,\n                score = score,\n                submitted_at = os.time()\n            }\n\n            if existing then\n                -- Update existing\n                Leaderboard.scores:UpdateOneAsync(\n                    { steamid = steamid, category = category },\n                    { [\"$set\"] = doc },\n                    function(err)\n                        if callback then callback(not err, err) end\n                    end\n                )\n            else\n                -- Insert new\n                Leaderboard.scores:InsertOneAsync(doc, function(err)\n                    if callback then callback(not err, err) end\n                end)\n            end\n        end\n    )\nend\n\n-- Get top scores\nfunction Leaderboard.GetTop(category, limit, callback)\n    category = category or \"default\"\n    limit = limit or 10\n\n    Leaderboard.scores:AggregateAsync({\n        { [\"$match\"] = { category = category } },\n        { [\"$sort\"] = { score = -1 } },\n        { [\"$limit\"] = limit },\n        {\n            [\"$project\"] = {\n                steamid = 1,\n                username = 1,\n                score = 1,\n                submitted_at = 1,\n                _id = 0\n            }\n        }\n    }, function(err, results)\n        callback(results or {})\n    end)\nend\n\n-- Get player rank\nfunction Leaderboard.GetRank(steamid, category, callback)\n    category = category or \"default\"\n\n    Leaderboard.scores:FindOneAsync(\n        { steamid = steamid, category = category },\n        function(err, player)\n            if not player then\n                callback(nil, 0)\n                return\n            end\n\n            -- Count players with higher scores\n            Leaderboard.scores:CountAsync(\n                { category = category, score = { [\"$gt\"] = player.score } },\n                function(err, higher)\n                    callback(higher + 1, player.score)\n                end\n            )\n        end\n    )\nend\n\n-- Get player's scores in all categories\nfunction Leaderboard.GetPlayerScores(steamid, callback)\n    Leaderboard.scores:FindAsync(\n        { steamid = steamid },\n        100,\n        function(err, results)\n            callback(results or {})\n        end\n    )\nend\n\n-- Get leaderboard with ranks around player\nfunction Leaderboard.GetAroundPlayer(steamid, category, range, callback)\n    category = category or \"default\"\n    range = range or 5\n\n    Leaderboard.GetRank(steamid, category, function(rank, score)\n        if not rank then\n            callback({}, nil)\n            return\n        end\n\n        local skip = math.max(0, rank - range - 1)\n\n        Leaderboard.scores:AggregateAsync({\n            { [\"$match\"] = { category = category } },\n            { [\"$sort\"] = { score = -1 } },\n            { [\"$skip\"] = skip },\n            { [\"$limit\"] = range * 2 + 1 },\n            {\n                [\"$project\"] = {\n                    steamid = 1,\n                    username = 1,\n                    score = 1,\n                    _id = 0\n                }\n            }\n        }, function(err, results)\n            -- Add rank numbers\n            for i, entry in ipairs(results) do\n                entry.rank = skip + i\n            end\n            callback(results, rank)\n        end)\n    end)\nend\n\nreturn Leaderboard\n","lua","",[183,184,185,194,200,206,212,219,236,241,268,283,315,320,326,376,417,423,428,434,474,497,502,508,523,539,557,584,590,622,628,634,639,653,664,675,686,697,711,717,722,731,737,752,766,787,799,821,827,833,839,845,868,888,896,901,907,913,918,923,929,957,974,990,995,1010,1035,1063,1082,1088,1107,1119,1130,1141,1152,1163,1168,1174,1193,1207,1215,1220,1225,1231,1257,1274,1279,1292,1305,1321,1334,1352,1357,1362,1367,1373,1388,1422,1439,1460,1466,1472,1477,1482,1487,1492,1498,1520,1534,1544,1552,1567,1579,1584,1589,1594,1599,1605,1636,1653,1669,1674,1697,1710,1722,1728,1733,1738,1770,1775,1789,1811,1836,1855,1886,1892,1910,1922,1934,1946,1956,1962,1967,1985,1991,2012,2029,2034,2042,2050,2057,2062,2067],"code",{"__ignoreMap":181},[186,187,190],"span",{"class":188,"line":189},"line",1,[186,191,193],{"class":192},"sHwdD","--[[\n",[186,195,197],{"class":188,"line":196},2,[186,198,199],{"class":192},"    Leaderboard System\n",[186,201,203],{"class":188,"line":202},3,[186,204,205],{"class":192},"    Score tracking and rankings\n",[186,207,209],{"class":188,"line":208},4,[186,210,211],{"class":192},"]]\n",[186,213,215],{"class":188,"line":214},5,[186,216,218],{"emptyLinePlaceholder":217},true,"\n",[186,220,222,226,230,233],{"class":188,"line":221},6,[186,223,225],{"class":224},"sMK4o","local",[186,227,229],{"class":228},"sTEyZ"," Leaderboard ",[186,231,232],{"class":224},"=",[186,234,235],{"class":228}," {}\n",[186,237,239],{"class":188,"line":238},7,[186,240,218],{"emptyLinePlaceholder":217},[186,242,244,248,252,255,258,261,265],{"class":188,"line":243},8,[186,245,247],{"class":246},"s7zQu","function",[186,249,251],{"class":250},"s2Zo4"," Leaderboard",[186,253,254],{"class":228},".",[186,256,257],{"class":250},"Initialize",[186,259,260],{"class":224},"(",[186,262,264],{"class":263},"sHdIc","db",[186,266,267],{"class":224},")\n",[186,269,271,274,277,280],{"class":188,"line":270},9,[186,272,273],{"class":228},"    Leaderboard.",[186,275,264],{"class":276},"sBMFI",[186,278,279],{"class":224}," =",[186,281,282],{"class":228}," db\n",[186,284,286,288,291,293,296,299,302,304,307,311,313],{"class":188,"line":285},10,[186,287,273],{"class":228},[186,289,290],{"class":276},"scores",[186,292,279],{"class":224},[186,294,295],{"class":276}," db",[186,297,298],{"class":228},":",[186,300,301],{"class":250},"Collection",[186,303,260],{"class":228},[186,305,306],{"class":224},"\"",[186,308,310],{"class":309},"sfazB","leaderboard",[186,312,306],{"class":224},[186,314,267],{"class":228},[186,316,318],{"class":188,"line":317},11,[186,319,218],{"emptyLinePlaceholder":217},[186,321,323],{"class":188,"line":322},12,[186,324,325],{"class":192},"    -- Create indexes\n",[186,327,329,331,333,335,338,341,343,347,350,352,355,358,361,364,367,369,372,374],{"class":188,"line":328},13,[186,330,273],{"class":228},[186,332,290],{"class":276},[186,334,298],{"class":228},[186,336,337],{"class":250},"CreateIndex",[186,339,340],{"class":228},"({ category ",[186,342,232],{"class":224},[186,344,346],{"class":345},"sbssI"," 1",[186,348,349],{"class":228},", score ",[186,351,232],{"class":224},[186,353,354],{"class":224}," -",[186,356,357],{"class":345},"1",[186,359,360],{"class":228}," }, ",[186,362,363],{"class":224},"false",[186,365,366],{"class":228},", ",[186,368,306],{"class":224},[186,370,371],{"class":309},"category_score",[186,373,306],{"class":224},[186,375,267],{"class":228},[186,377,379,381,383,385,387,390,392,394,397,399,401,403,406,408,410,413,415],{"class":188,"line":378},14,[186,380,273],{"class":228},[186,382,290],{"class":276},[186,384,298],{"class":228},[186,386,337],{"class":250},[186,388,389],{"class":228},"({ steamid ",[186,391,232],{"class":224},[186,393,346],{"class":345},[186,395,396],{"class":228},", category ",[186,398,232],{"class":224},[186,400,346],{"class":345},[186,402,360],{"class":228},[186,404,405],{"class":224},"true",[186,407,366],{"class":228},[186,409,306],{"class":224},[186,411,412],{"class":309},"player_category",[186,414,306],{"class":224},[186,416,267],{"class":228},[186,418,420],{"class":188,"line":419},15,[186,421,422],{"class":246},"end\n",[186,424,426],{"class":188,"line":425},16,[186,427,218],{"emptyLinePlaceholder":217},[186,429,431],{"class":188,"line":430},17,[186,432,433],{"class":192},"-- Submit a score\n",[186,435,437,439,441,443,446,448,451,454,457,459,462,464,467,469,472],{"class":188,"line":436},18,[186,438,247],{"class":246},[186,440,251],{"class":250},[186,442,254],{"class":228},[186,444,445],{"class":250},"SubmitScore",[186,447,260],{"class":224},[186,449,450],{"class":263},"steamid",[186,452,453],{"class":224},",",[186,455,456],{"class":263}," username",[186,458,453],{"class":224},[186,460,461],{"class":263}," score",[186,463,453],{"class":224},[186,465,466],{"class":263}," category",[186,468,453],{"class":224},[186,470,471],{"class":263}," callback",[186,473,267],{"class":224},[186,475,477,480,482,485,488,491,494],{"class":188,"line":476},19,[186,478,479],{"class":228},"    category ",[186,481,232],{"class":224},[186,483,484],{"class":228}," category ",[186,486,487],{"class":224},"or",[186,489,490],{"class":224}," \"",[186,492,493],{"class":309},"default",[186,495,496],{"class":224},"\"\n",[186,498,500],{"class":188,"line":499},20,[186,501,218],{"emptyLinePlaceholder":217},[186,503,505],{"class":188,"line":504},21,[186,506,507],{"class":192},"    -- Upsert - update if higher, insert if new\n",[186,509,511,513,515,517,520],{"class":188,"line":510},22,[186,512,273],{"class":228},[186,514,290],{"class":276},[186,516,298],{"class":228},[186,518,519],{"class":250},"FindOneAsync",[186,521,522],{"class":228},"(\n",[186,524,526,529,531,534,536],{"class":188,"line":525},23,[186,527,528],{"class":228},"        { steamid ",[186,530,232],{"class":224},[186,532,533],{"class":228}," steamid, category ",[186,535,232],{"class":224},[186,537,538],{"class":228}," category },\n",[186,540,542,545,547,550,552,555],{"class":188,"line":541},24,[186,543,544],{"class":246},"        function",[186,546,260],{"class":224},[186,548,549],{"class":263},"err",[186,551,453],{"class":224},[186,553,554],{"class":263}," existing",[186,556,267],{"class":224},[186,558,560,563,566,569,572,575,578,581],{"class":188,"line":559},25,[186,561,562],{"class":246},"            if",[186,564,565],{"class":228}," existing ",[186,567,568],{"class":224},"and",[186,570,571],{"class":228}," existing.",[186,573,574],{"class":276},"score",[186,576,577],{"class":224}," >=",[186,579,580],{"class":228}," score ",[186,582,583],{"class":246},"then\n",[186,585,587],{"class":188,"line":586},26,[186,588,589],{"class":192},"                -- Existing score is higher\n",[186,591,593,596,599,602,604,606,608,610,612,615,617,620],{"class":188,"line":592},27,[186,594,595],{"class":246},"                if",[186,597,598],{"class":228}," callback ",[186,600,601],{"class":246},"then",[186,603,471],{"class":250},[186,605,260],{"class":228},[186,607,363],{"class":224},[186,609,366],{"class":228},[186,611,306],{"class":224},[186,613,614],{"class":309},"Existing score is higher",[186,616,306],{"class":224},[186,618,619],{"class":228},") ",[186,621,422],{"class":246},[186,623,625],{"class":188,"line":624},28,[186,626,627],{"class":246},"                return\n",[186,629,631],{"class":188,"line":630},29,[186,632,633],{"class":246},"            end\n",[186,635,637],{"class":188,"line":636},30,[186,638,218],{"emptyLinePlaceholder":217},[186,640,642,645,648,650],{"class":188,"line":641},31,[186,643,644],{"class":224},"            local",[186,646,647],{"class":228}," doc ",[186,649,232],{"class":224},[186,651,652],{"class":228}," {\n",[186,654,656,659,661],{"class":188,"line":655},32,[186,657,658],{"class":228},"                steamid ",[186,660,232],{"class":224},[186,662,663],{"class":228}," steamid,\n",[186,665,667,670,672],{"class":188,"line":666},33,[186,668,669],{"class":228},"                username ",[186,671,232],{"class":224},[186,673,674],{"class":228}," username,\n",[186,676,678,681,683],{"class":188,"line":677},34,[186,679,680],{"class":228},"                category ",[186,682,232],{"class":224},[186,684,685],{"class":228}," category,\n",[186,687,689,692,694],{"class":188,"line":688},35,[186,690,691],{"class":228},"                score ",[186,693,232],{"class":224},[186,695,696],{"class":228}," score,\n",[186,698,700,703,705,708],{"class":188,"line":699},36,[186,701,702],{"class":228},"                submitted_at ",[186,704,232],{"class":224},[186,706,707],{"class":250}," os.time",[186,709,710],{"class":228},"()\n",[186,712,714],{"class":188,"line":713},37,[186,715,716],{"class":228},"            }\n",[186,718,720],{"class":188,"line":719},38,[186,721,218],{"emptyLinePlaceholder":217},[186,723,725,727,729],{"class":188,"line":724},39,[186,726,562],{"class":246},[186,728,565],{"class":228},[186,730,583],{"class":246},[186,732,734],{"class":188,"line":733},40,[186,735,736],{"class":192},"                -- Update existing\n",[186,738,740,743,745,747,750],{"class":188,"line":739},41,[186,741,742],{"class":228},"                Leaderboard.",[186,744,290],{"class":276},[186,746,298],{"class":228},[186,748,749],{"class":250},"UpdateOneAsync",[186,751,522],{"class":228},[186,753,755,758,760,762,764],{"class":188,"line":754},42,[186,756,757],{"class":228},"                    { steamid ",[186,759,232],{"class":224},[186,761,533],{"class":228},[186,763,232],{"class":224},[186,765,538],{"class":228},[186,767,769,772,774,777,779,782,784],{"class":188,"line":768},43,[186,770,771],{"class":228},"                    { [",[186,773,306],{"class":224},[186,775,776],{"class":309},"$set",[186,778,306],{"class":224},[186,780,781],{"class":228},"] ",[186,783,232],{"class":224},[186,785,786],{"class":228}," doc },\n",[186,788,790,793,795,797],{"class":188,"line":789},44,[186,791,792],{"class":246},"                    function",[186,794,260],{"class":224},[186,796,549],{"class":263},[186,798,267],{"class":224},[186,800,802,805,807,809,811,813,816,819],{"class":188,"line":801},45,[186,803,804],{"class":246},"                        if",[186,806,598],{"class":228},[186,808,601],{"class":246},[186,810,471],{"class":250},[186,812,260],{"class":228},[186,814,815],{"class":224},"not",[186,817,818],{"class":228}," err, err) ",[186,820,422],{"class":246},[186,822,824],{"class":188,"line":823},46,[186,825,826],{"class":246},"                    end\n",[186,828,830],{"class":188,"line":829},47,[186,831,832],{"class":228},"                )\n",[186,834,836],{"class":188,"line":835},48,[186,837,838],{"class":246},"            else\n",[186,840,842],{"class":188,"line":841},49,[186,843,844],{"class":192},"                -- Insert new\n",[186,846,848,850,852,854,857,860,862,864,866],{"class":188,"line":847},50,[186,849,742],{"class":228},[186,851,290],{"class":276},[186,853,298],{"class":228},[186,855,856],{"class":250},"InsertOneAsync",[186,858,859],{"class":228},"(doc, ",[186,861,247],{"class":246},[186,863,260],{"class":224},[186,865,549],{"class":263},[186,867,267],{"class":224},[186,869,871,874,876,878,880,882,884,886],{"class":188,"line":870},51,[186,872,873],{"class":246},"                    if",[186,875,598],{"class":228},[186,877,601],{"class":246},[186,879,471],{"class":250},[186,881,260],{"class":228},[186,883,815],{"class":224},[186,885,818],{"class":228},[186,887,422],{"class":246},[186,889,891,894],{"class":188,"line":890},52,[186,892,893],{"class":246},"                end",[186,895,267],{"class":228},[186,897,899],{"class":188,"line":898},53,[186,900,633],{"class":246},[186,902,904],{"class":188,"line":903},54,[186,905,906],{"class":246},"        end\n",[186,908,910],{"class":188,"line":909},55,[186,911,912],{"class":228},"    )\n",[186,914,916],{"class":188,"line":915},56,[186,917,422],{"class":246},[186,919,921],{"class":188,"line":920},57,[186,922,218],{"emptyLinePlaceholder":217},[186,924,926],{"class":188,"line":925},58,[186,927,928],{"class":192},"-- Get top scores\n",[186,930,932,934,936,938,941,943,946,948,951,953,955],{"class":188,"line":931},59,[186,933,247],{"class":246},[186,935,251],{"class":250},[186,937,254],{"class":228},[186,939,940],{"class":250},"GetTop",[186,942,260],{"class":224},[186,944,945],{"class":263},"category",[186,947,453],{"class":224},[186,949,950],{"class":263}," limit",[186,952,453],{"class":224},[186,954,471],{"class":263},[186,956,267],{"class":224},[186,958,960,962,964,966,968,970,972],{"class":188,"line":959},60,[186,961,479],{"class":228},[186,963,232],{"class":224},[186,965,484],{"class":228},[186,967,487],{"class":224},[186,969,490],{"class":224},[186,971,493],{"class":309},[186,973,496],{"class":224},[186,975,977,980,982,985,987],{"class":188,"line":976},61,[186,978,979],{"class":228},"    limit ",[186,981,232],{"class":224},[186,983,984],{"class":228}," limit ",[186,986,487],{"class":224},[186,988,989],{"class":345}," 10\n",[186,991,993],{"class":188,"line":992},62,[186,994,218],{"emptyLinePlaceholder":217},[186,996,998,1000,1002,1004,1007],{"class":188,"line":997},63,[186,999,273],{"class":228},[186,1001,290],{"class":276},[186,1003,298],{"class":228},[186,1005,1006],{"class":250},"AggregateAsync",[186,1008,1009],{"class":228},"({\n",[186,1011,1013,1016,1018,1021,1023,1025,1027,1030,1032],{"class":188,"line":1012},64,[186,1014,1015],{"class":228},"        { [",[186,1017,306],{"class":224},[186,1019,1020],{"class":309},"$match",[186,1022,306],{"class":224},[186,1024,781],{"class":228},[186,1026,232],{"class":224},[186,1028,1029],{"class":228}," { category ",[186,1031,232],{"class":224},[186,1033,1034],{"class":228}," category } },\n",[186,1036,1038,1040,1042,1045,1047,1049,1051,1054,1056,1058,1060],{"class":188,"line":1037},65,[186,1039,1015],{"class":228},[186,1041,306],{"class":224},[186,1043,1044],{"class":309},"$sort",[186,1046,306],{"class":224},[186,1048,781],{"class":228},[186,1050,232],{"class":224},[186,1052,1053],{"class":228}," { score ",[186,1055,232],{"class":224},[186,1057,354],{"class":224},[186,1059,357],{"class":345},[186,1061,1062],{"class":228}," } },\n",[186,1064,1066,1068,1070,1073,1075,1077,1079],{"class":188,"line":1065},66,[186,1067,1015],{"class":228},[186,1069,306],{"class":224},[186,1071,1072],{"class":309},"$limit",[186,1074,306],{"class":224},[186,1076,781],{"class":228},[186,1078,232],{"class":224},[186,1080,1081],{"class":228}," limit },\n",[186,1083,1085],{"class":188,"line":1084},67,[186,1086,1087],{"class":228},"        {\n",[186,1089,1091,1094,1096,1099,1101,1103,1105],{"class":188,"line":1090},68,[186,1092,1093],{"class":228},"            [",[186,1095,306],{"class":224},[186,1097,1098],{"class":309},"$project",[186,1100,306],{"class":224},[186,1102,781],{"class":228},[186,1104,232],{"class":224},[186,1106,652],{"class":228},[186,1108,1110,1112,1114,1116],{"class":188,"line":1109},69,[186,1111,658],{"class":228},[186,1113,232],{"class":224},[186,1115,346],{"class":345},[186,1117,1118],{"class":228},",\n",[186,1120,1122,1124,1126,1128],{"class":188,"line":1121},70,[186,1123,669],{"class":228},[186,1125,232],{"class":224},[186,1127,346],{"class":345},[186,1129,1118],{"class":228},[186,1131,1133,1135,1137,1139],{"class":188,"line":1132},71,[186,1134,691],{"class":228},[186,1136,232],{"class":224},[186,1138,346],{"class":345},[186,1140,1118],{"class":228},[186,1142,1144,1146,1148,1150],{"class":188,"line":1143},72,[186,1145,702],{"class":228},[186,1147,232],{"class":224},[186,1149,346],{"class":345},[186,1151,1118],{"class":228},[186,1153,1155,1158,1160],{"class":188,"line":1154},73,[186,1156,1157],{"class":228},"                _id ",[186,1159,232],{"class":224},[186,1161,1162],{"class":345}," 0\n",[186,1164,1166],{"class":188,"line":1165},74,[186,1167,716],{"class":228},[186,1169,1171],{"class":188,"line":1170},75,[186,1172,1173],{"class":228},"        }\n",[186,1175,1177,1180,1182,1184,1186,1188,1191],{"class":188,"line":1176},76,[186,1178,1179],{"class":228},"    }, ",[186,1181,247],{"class":246},[186,1183,260],{"class":224},[186,1185,549],{"class":263},[186,1187,453],{"class":224},[186,1189,1190],{"class":263}," results",[186,1192,267],{"class":224},[186,1194,1196,1199,1202,1204],{"class":188,"line":1195},77,[186,1197,1198],{"class":250},"        callback",[186,1200,1201],{"class":228},"(results ",[186,1203,487],{"class":224},[186,1205,1206],{"class":228}," {})\n",[186,1208,1210,1213],{"class":188,"line":1209},78,[186,1211,1212],{"class":246},"    end",[186,1214,267],{"class":228},[186,1216,1218],{"class":188,"line":1217},79,[186,1219,422],{"class":246},[186,1221,1223],{"class":188,"line":1222},80,[186,1224,218],{"emptyLinePlaceholder":217},[186,1226,1228],{"class":188,"line":1227},81,[186,1229,1230],{"class":192},"-- Get player rank\n",[186,1232,1234,1236,1238,1240,1243,1245,1247,1249,1251,1253,1255],{"class":188,"line":1233},82,[186,1235,247],{"class":246},[186,1237,251],{"class":250},[186,1239,254],{"class":228},[186,1241,1242],{"class":250},"GetRank",[186,1244,260],{"class":224},[186,1246,450],{"class":263},[186,1248,453],{"class":224},[186,1250,466],{"class":263},[186,1252,453],{"class":224},[186,1254,471],{"class":263},[186,1256,267],{"class":224},[186,1258,1260,1262,1264,1266,1268,1270,1272],{"class":188,"line":1259},83,[186,1261,479],{"class":228},[186,1263,232],{"class":224},[186,1265,484],{"class":228},[186,1267,487],{"class":224},[186,1269,490],{"class":224},[186,1271,493],{"class":309},[186,1273,496],{"class":224},[186,1275,1277],{"class":188,"line":1276},84,[186,1278,218],{"emptyLinePlaceholder":217},[186,1280,1282,1284,1286,1288,1290],{"class":188,"line":1281},85,[186,1283,273],{"class":228},[186,1285,290],{"class":276},[186,1287,298],{"class":228},[186,1289,519],{"class":250},[186,1291,522],{"class":228},[186,1293,1295,1297,1299,1301,1303],{"class":188,"line":1294},86,[186,1296,528],{"class":228},[186,1298,232],{"class":224},[186,1300,533],{"class":228},[186,1302,232],{"class":224},[186,1304,538],{"class":228},[186,1306,1308,1310,1312,1314,1316,1319],{"class":188,"line":1307},87,[186,1309,544],{"class":246},[186,1311,260],{"class":224},[186,1313,549],{"class":263},[186,1315,453],{"class":224},[186,1317,1318],{"class":263}," player",[186,1320,267],{"class":224},[186,1322,1324,1326,1329,1332],{"class":188,"line":1323},88,[186,1325,562],{"class":246},[186,1327,1328],{"class":224}," not",[186,1330,1331],{"class":228}," player ",[186,1333,583],{"class":246},[186,1335,1337,1340,1342,1345,1347,1350],{"class":188,"line":1336},89,[186,1338,1339],{"class":250},"                callback",[186,1341,260],{"class":228},[186,1343,1344],{"class":224},"nil",[186,1346,366],{"class":228},[186,1348,1349],{"class":345},"0",[186,1351,267],{"class":228},[186,1353,1355],{"class":188,"line":1354},90,[186,1356,627],{"class":246},[186,1358,1360],{"class":188,"line":1359},91,[186,1361,633],{"class":246},[186,1363,1365],{"class":188,"line":1364},92,[186,1366,218],{"emptyLinePlaceholder":217},[186,1368,1370],{"class":188,"line":1369},93,[186,1371,1372],{"class":192},"            -- Count players with higher scores\n",[186,1374,1376,1379,1381,1383,1386],{"class":188,"line":1375},94,[186,1377,1378],{"class":228},"            Leaderboard.",[186,1380,290],{"class":276},[186,1382,298],{"class":228},[186,1384,1385],{"class":250},"CountAsync",[186,1387,522],{"class":228},[186,1389,1391,1394,1396,1399,1401,1404,1406,1409,1411,1413,1415,1418,1420],{"class":188,"line":1390},95,[186,1392,1393],{"class":228},"                { category ",[186,1395,232],{"class":224},[186,1397,1398],{"class":228}," category, score ",[186,1400,232],{"class":224},[186,1402,1403],{"class":228}," { [",[186,1405,306],{"class":224},[186,1407,1408],{"class":309},"$gt",[186,1410,306],{"class":224},[186,1412,781],{"class":228},[186,1414,232],{"class":224},[186,1416,1417],{"class":228}," player.",[186,1419,574],{"class":276},[186,1421,1062],{"class":228},[186,1423,1425,1428,1430,1432,1434,1437],{"class":188,"line":1424},96,[186,1426,1427],{"class":246},"                function",[186,1429,260],{"class":224},[186,1431,549],{"class":263},[186,1433,453],{"class":224},[186,1435,1436],{"class":263}," higher",[186,1438,267],{"class":224},[186,1440,1442,1445,1448,1451,1453,1456,1458],{"class":188,"line":1441},97,[186,1443,1444],{"class":250},"                    callback",[186,1446,1447],{"class":228},"(higher ",[186,1449,1450],{"class":224},"+",[186,1452,346],{"class":345},[186,1454,1455],{"class":228},", player.",[186,1457,574],{"class":276},[186,1459,267],{"class":228},[186,1461,1463],{"class":188,"line":1462},98,[186,1464,1465],{"class":246},"                end\n",[186,1467,1469],{"class":188,"line":1468},99,[186,1470,1471],{"class":228},"            )\n",[186,1473,1475],{"class":188,"line":1474},100,[186,1476,906],{"class":246},[186,1478,1480],{"class":188,"line":1479},101,[186,1481,912],{"class":228},[186,1483,1485],{"class":188,"line":1484},102,[186,1486,422],{"class":246},[186,1488,1490],{"class":188,"line":1489},103,[186,1491,218],{"emptyLinePlaceholder":217},[186,1493,1495],{"class":188,"line":1494},104,[186,1496,1497],{"class":192},"-- Get player's scores in all categories\n",[186,1499,1501,1503,1505,1507,1510,1512,1514,1516,1518],{"class":188,"line":1500},105,[186,1502,247],{"class":246},[186,1504,251],{"class":250},[186,1506,254],{"class":228},[186,1508,1509],{"class":250},"GetPlayerScores",[186,1511,260],{"class":224},[186,1513,450],{"class":263},[186,1515,453],{"class":224},[186,1517,471],{"class":263},[186,1519,267],{"class":224},[186,1521,1523,1525,1527,1529,1532],{"class":188,"line":1522},106,[186,1524,273],{"class":228},[186,1526,290],{"class":276},[186,1528,298],{"class":228},[186,1530,1531],{"class":250},"FindAsync",[186,1533,522],{"class":228},[186,1535,1537,1539,1541],{"class":188,"line":1536},107,[186,1538,528],{"class":228},[186,1540,232],{"class":224},[186,1542,1543],{"class":228}," steamid },\n",[186,1545,1547,1550],{"class":188,"line":1546},108,[186,1548,1549],{"class":345},"        100",[186,1551,1118],{"class":228},[186,1553,1555,1557,1559,1561,1563,1565],{"class":188,"line":1554},109,[186,1556,544],{"class":246},[186,1558,260],{"class":224},[186,1560,549],{"class":263},[186,1562,453],{"class":224},[186,1564,1190],{"class":263},[186,1566,267],{"class":224},[186,1568,1570,1573,1575,1577],{"class":188,"line":1569},110,[186,1571,1572],{"class":250},"            callback",[186,1574,1201],{"class":228},[186,1576,487],{"class":224},[186,1578,1206],{"class":228},[186,1580,1582],{"class":188,"line":1581},111,[186,1583,906],{"class":246},[186,1585,1587],{"class":188,"line":1586},112,[186,1588,912],{"class":228},[186,1590,1592],{"class":188,"line":1591},113,[186,1593,422],{"class":246},[186,1595,1597],{"class":188,"line":1596},114,[186,1598,218],{"emptyLinePlaceholder":217},[186,1600,1602],{"class":188,"line":1601},115,[186,1603,1604],{"class":192},"-- Get leaderboard with ranks around player\n",[186,1606,1608,1610,1612,1614,1617,1619,1621,1623,1625,1627,1630,1632,1634],{"class":188,"line":1607},116,[186,1609,247],{"class":246},[186,1611,251],{"class":250},[186,1613,254],{"class":228},[186,1615,1616],{"class":250},"GetAroundPlayer",[186,1618,260],{"class":224},[186,1620,450],{"class":263},[186,1622,453],{"class":224},[186,1624,466],{"class":263},[186,1626,453],{"class":224},[186,1628,1629],{"class":263}," range",[186,1631,453],{"class":224},[186,1633,471],{"class":263},[186,1635,267],{"class":224},[186,1637,1639,1641,1643,1645,1647,1649,1651],{"class":188,"line":1638},117,[186,1640,479],{"class":228},[186,1642,232],{"class":224},[186,1644,484],{"class":228},[186,1646,487],{"class":224},[186,1648,490],{"class":224},[186,1650,493],{"class":309},[186,1652,496],{"class":224},[186,1654,1656,1659,1661,1664,1666],{"class":188,"line":1655},118,[186,1657,1658],{"class":228},"    range ",[186,1660,232],{"class":224},[186,1662,1663],{"class":228}," range ",[186,1665,487],{"class":224},[186,1667,1668],{"class":345}," 5\n",[186,1670,1672],{"class":188,"line":1671},119,[186,1673,218],{"emptyLinePlaceholder":217},[186,1675,1677,1679,1681,1684,1686,1688,1691,1693,1695],{"class":188,"line":1676},120,[186,1678,273],{"class":228},[186,1680,1242],{"class":250},[186,1682,1683],{"class":228},"(steamid, category, ",[186,1685,247],{"class":246},[186,1687,260],{"class":224},[186,1689,1690],{"class":263},"rank",[186,1692,453],{"class":224},[186,1694,461],{"class":263},[186,1696,267],{"class":224},[186,1698,1700,1703,1705,1708],{"class":188,"line":1699},121,[186,1701,1702],{"class":246},"        if",[186,1704,1328],{"class":224},[186,1706,1707],{"class":228}," rank ",[186,1709,583],{"class":246},[186,1711,1713,1715,1718,1720],{"class":188,"line":1712},122,[186,1714,1572],{"class":250},[186,1716,1717],{"class":228},"({}, ",[186,1719,1344],{"class":224},[186,1721,267],{"class":228},[186,1723,1725],{"class":188,"line":1724},123,[186,1726,1727],{"class":246},"            return\n",[186,1729,1731],{"class":188,"line":1730},124,[186,1732,906],{"class":246},[186,1734,1736],{"class":188,"line":1735},125,[186,1737,218],{"emptyLinePlaceholder":217},[186,1739,1741,1744,1747,1749,1752,1754,1756,1759,1762,1764,1766,1768],{"class":188,"line":1740},126,[186,1742,1743],{"class":224},"        local",[186,1745,1746],{"class":228}," skip ",[186,1748,232],{"class":224},[186,1750,1751],{"class":250}," math.max",[186,1753,260],{"class":228},[186,1755,1349],{"class":345},[186,1757,1758],{"class":228},", rank ",[186,1760,1761],{"class":224},"-",[186,1763,1663],{"class":228},[186,1765,1761],{"class":224},[186,1767,346],{"class":345},[186,1769,267],{"class":228},[186,1771,1773],{"class":188,"line":1772},127,[186,1774,218],{"emptyLinePlaceholder":217},[186,1776,1778,1781,1783,1785,1787],{"class":188,"line":1777},128,[186,1779,1780],{"class":228},"        Leaderboard.",[186,1782,290],{"class":276},[186,1784,298],{"class":228},[186,1786,1006],{"class":250},[186,1788,1009],{"class":228},[186,1790,1792,1795,1797,1799,1801,1803,1805,1807,1809],{"class":188,"line":1791},129,[186,1793,1794],{"class":228},"            { [",[186,1796,306],{"class":224},[186,1798,1020],{"class":309},[186,1800,306],{"class":224},[186,1802,781],{"class":228},[186,1804,232],{"class":224},[186,1806,1029],{"class":228},[186,1808,232],{"class":224},[186,1810,1034],{"class":228},[186,1812,1814,1816,1818,1820,1822,1824,1826,1828,1830,1832,1834],{"class":188,"line":1813},130,[186,1815,1794],{"class":228},[186,1817,306],{"class":224},[186,1819,1044],{"class":309},[186,1821,306],{"class":224},[186,1823,781],{"class":228},[186,1825,232],{"class":224},[186,1827,1053],{"class":228},[186,1829,232],{"class":224},[186,1831,354],{"class":224},[186,1833,357],{"class":345},[186,1835,1062],{"class":228},[186,1837,1839,1841,1843,1846,1848,1850,1852],{"class":188,"line":1838},131,[186,1840,1794],{"class":228},[186,1842,306],{"class":224},[186,1844,1845],{"class":309},"$skip",[186,1847,306],{"class":224},[186,1849,781],{"class":228},[186,1851,232],{"class":224},[186,1853,1854],{"class":228}," skip },\n",[186,1856,1858,1860,1862,1864,1866,1868,1870,1872,1875,1878,1881,1883],{"class":188,"line":1857},132,[186,1859,1794],{"class":228},[186,1861,306],{"class":224},[186,1863,1072],{"class":309},[186,1865,306],{"class":224},[186,1867,781],{"class":228},[186,1869,232],{"class":224},[186,1871,1663],{"class":228},[186,1873,1874],{"class":224},"*",[186,1876,1877],{"class":345}," 2",[186,1879,1880],{"class":224}," +",[186,1882,346],{"class":345},[186,1884,1885],{"class":228}," },\n",[186,1887,1889],{"class":188,"line":1888},133,[186,1890,1891],{"class":228},"            {\n",[186,1893,1895,1898,1900,1902,1904,1906,1908],{"class":188,"line":1894},134,[186,1896,1897],{"class":228},"                [",[186,1899,306],{"class":224},[186,1901,1098],{"class":309},[186,1903,306],{"class":224},[186,1905,781],{"class":228},[186,1907,232],{"class":224},[186,1909,652],{"class":228},[186,1911,1913,1916,1918,1920],{"class":188,"line":1912},135,[186,1914,1915],{"class":228},"                    steamid ",[186,1917,232],{"class":224},[186,1919,346],{"class":345},[186,1921,1118],{"class":228},[186,1923,1925,1928,1930,1932],{"class":188,"line":1924},136,[186,1926,1927],{"class":228},"                    username ",[186,1929,232],{"class":224},[186,1931,346],{"class":345},[186,1933,1118],{"class":228},[186,1935,1937,1940,1942,1944],{"class":188,"line":1936},137,[186,1938,1939],{"class":228},"                    score ",[186,1941,232],{"class":224},[186,1943,346],{"class":345},[186,1945,1118],{"class":228},[186,1947,1949,1952,1954],{"class":188,"line":1948},138,[186,1950,1951],{"class":228},"                    _id ",[186,1953,232],{"class":224},[186,1955,1162],{"class":345},[186,1957,1959],{"class":188,"line":1958},139,[186,1960,1961],{"class":228},"                }\n",[186,1963,1965],{"class":188,"line":1964},140,[186,1966,716],{"class":228},[186,1968,1970,1973,1975,1977,1979,1981,1983],{"class":188,"line":1969},141,[186,1971,1972],{"class":228},"        }, ",[186,1974,247],{"class":246},[186,1976,260],{"class":224},[186,1978,549],{"class":263},[186,1980,453],{"class":224},[186,1982,1190],{"class":263},[186,1984,267],{"class":224},[186,1986,1988],{"class":188,"line":1987},142,[186,1989,1990],{"class":192},"            -- Add rank numbers\n",[186,1992,1994,1997,2000,2003,2006,2009],{"class":188,"line":1993},143,[186,1995,1996],{"class":246},"            for",[186,1998,1999],{"class":228}," i, entry ",[186,2001,2002],{"class":246},"in",[186,2004,2005],{"class":250}," ipairs",[186,2007,2008],{"class":228},"(results) ",[186,2010,2011],{"class":246},"do\n",[186,2013,2015,2018,2020,2022,2024,2026],{"class":188,"line":2014},144,[186,2016,2017],{"class":228},"                entry.",[186,2019,1690],{"class":276},[186,2021,279],{"class":224},[186,2023,1746],{"class":228},[186,2025,1450],{"class":224},[186,2027,2028],{"class":228}," i\n",[186,2030,2032],{"class":188,"line":2031},145,[186,2033,633],{"class":246},[186,2035,2037,2039],{"class":188,"line":2036},146,[186,2038,1572],{"class":250},[186,2040,2041],{"class":228},"(results, rank)\n",[186,2043,2045,2048],{"class":188,"line":2044},147,[186,2046,2047],{"class":246},"        end",[186,2049,267],{"class":228},[186,2051,2053,2055],{"class":188,"line":2052},148,[186,2054,1212],{"class":246},[186,2056,267],{"class":228},[186,2058,2060],{"class":188,"line":2059},149,[186,2061,422],{"class":246},[186,2063,2065],{"class":188,"line":2064},150,[186,2066,218],{"emptyLinePlaceholder":217},[186,2068,2070,2073],{"class":188,"line":2069},151,[186,2071,2072],{"class":246},"return",[186,2074,2075],{"class":228}," Leaderboard\n",[171,2077,2079],{"id":2078},"achievement-system","Achievement System",[176,2081,2083],{"className":178,"code":2082,"language":180,"meta":181,"style":181},"--[[\n    Achievement System\n    Track and award player achievements\n]]\n\nlocal Achievements = {}\n\n-- Define achievements\nAchievements.Definitions = {\n    first_kill = {\n        name = \"First Blood\",\n        description = \"Get your first kill\",\n        points = 10\n    },\n    kill_streak_5 = {\n        name = \"On Fire\",\n        description = \"Get a 5 kill streak\",\n        points = 25\n    },\n    level_10 = {\n        name = \"Rising Star\",\n        description = \"Reach level 10\",\n        points = 50\n    },\n    level_50 = {\n        name = \"Veteran\",\n        description = \"Reach level 50\",\n        points = 100\n    },\n    playtime_10h = {\n        name = \"Dedicated\",\n        description = \"Play for 10 hours\",\n        points = 75\n    },\n    credits_100k = {\n        name = \"Rich\",\n        description = \"Accumulate 100,000 credits\",\n        points = 100\n    }\n}\n\nfunction Achievements.Initialize(db)\n    Achievements.db = db\n    Achievements.col = db:Collection(\"player_achievements\")\n\n    Achievements.col:CreateIndex({ steamid = 1 }, false, \"steamid_index\")\nend\n\n-- Check if player has achievement\nfunction Achievements.Has(steamid, achievementId, callback)\n    Achievements.col:FindOneAsync(\n        { steamid = steamid },\n        function(err, doc)\n            if doc and doc.achievements then\n                for _, ach in ipairs(doc.achievements) do\n                    if ach.id == achievementId then\n                        callback(true, ach)\n                        return\n                    end\n                end\n            end\n            callback(false, nil)\n        end\n    )\nend\n\n-- Award achievement\nfunction Achievements.Award(steamid, achievementId, callback)\n    local def = Achievements.Definitions[achievementId]\n    if not def then\n        if callback then callback(false, \"Invalid achievement\") end\n        return\n    end\n\n    -- Check if already has it\n    Achievements.Has(steamid, achievementId, function(has)\n        if has then\n            if callback then callback(false, \"Already earned\") end\n            return\n        end\n\n        local achievement = {\n            id = achievementId,\n            name = def.name,\n            points = def.points,\n            earned_at = os.time()\n        }\n\n        Achievements.col:UpdateOneAsync(\n            { steamid = steamid },\n            {\n                [\"$push\"] = { achievements = achievement },\n                [\"$inc\"] = { total_points = def.points }\n            },\n            function(err)\n                if callback then callback(not err, achievement) end\n            end\n        )\n    end)\nend\n\n-- Get player achievements\nfunction Achievements.GetAll(steamid, callback)\n    Achievements.col:FindOneAsync(\n        { steamid = steamid },\n        function(err, doc)\n            if doc then\n                callback(doc.achievements or {}, doc.total_points or 0)\n            else\n                callback({}, 0)\n            end\n        end\n    )\nend\n\n-- Get achievement progress\u002Fstats\nfunction Achievements.GetProgress(steamid, callback)\n    Achievements.GetAll(steamid, function(earned, points)\n        local total = 0\n        local totalPoints = 0\n\n        for _, def in pairs(Achievements.Definitions) do\n            total = total + 1\n            totalPoints = totalPoints + def.points\n        end\n\n        callback({\n            earned = #earned,\n            total = total,\n            points = points,\n            max_points = totalPoints,\n            percentage = (#earned \u002F total) * 100\n        })\n    end)\nend\n\n-- Check achievements based on player stats\nfunction Achievements.CheckAndAward(steamid, playerData, callback)\n    local awarded = {}\n\n    local function checkNext(checks, index)\n        if index > #checks then\n            callback(awarded)\n            return\n        end\n\n        local check = checks[index]\n        if check.condition then\n            Achievements.Award(steamid, check.id, function(success, ach)\n                if success then\n                    table.insert(awarded, ach)\n                end\n                checkNext(checks, index + 1)\n            end)\n        else\n            checkNext(checks, index + 1)\n        end\n    end\n\n    local checks = {\n        { id = \"first_kill\", condition = playerData.stats.kills >= 1 },\n        { id = \"level_10\", condition = playerData.level >= 10 },\n        { id = \"level_50\", condition = playerData.level >= 50 },\n        { id = \"playtime_10h\", condition = playerData.playtime >= 36000 },\n        { id = \"credits_100k\", condition = playerData.credits >= 100000 }\n    }\n\n    checkNext(checks, 1)\nend\n\nreturn Achievements\n",[183,2084,2085,2089,2094,2099,2103,2107,2118,2122,2127,2139,2148,2164,2180,2189,2194,2203,2218,2233,2242,2246,2255,2270,2285,2294,2298,2307,2322,2337,2346,2350,2359,2374,2389,2398,2402,2411,2426,2441,2449,2454,2459,2463,2480,2491,2517,2521,2552,2556,2560,2565,2591,2603,2611,2626,2643,2664,2682,2694,2699,2703,2707,2711,2725,2729,2733,2737,2741,2746,2771,2789,2800,2827,2832,2837,2841,2846,2864,2873,2900,2904,2908,2912,2923,2933,2948,2962,2973,2977,2981,2994,3003,3007,3030,3057,3062,3073,3092,3096,3101,3107,3111,3115,3120,3141,3153,3161,3175,3183,3207,3211,3221,3225,3229,3233,3237,3241,3246,3267,3290,3301,3312,3316,3338,3352,3368,3372,3376,3382,3395,3404,3413,3423,3449,3454,3460,3464,3468,3473,3499,3510,3514,3536,3553,3560,3564,3568,3572,3584,3596,3624,3633,3641,3646,3661,3669,3675,3689,3694,3699,3704,3716,3753,3783,3812,3842,3872,3877,3882,3895,3900,3905],{"__ignoreMap":181},[186,2086,2087],{"class":188,"line":189},[186,2088,193],{"class":192},[186,2090,2091],{"class":188,"line":196},[186,2092,2093],{"class":192},"    Achievement System\n",[186,2095,2096],{"class":188,"line":202},[186,2097,2098],{"class":192},"    Track and award player achievements\n",[186,2100,2101],{"class":188,"line":208},[186,2102,211],{"class":192},[186,2104,2105],{"class":188,"line":214},[186,2106,218],{"emptyLinePlaceholder":217},[186,2108,2109,2111,2114,2116],{"class":188,"line":221},[186,2110,225],{"class":224},[186,2112,2113],{"class":228}," Achievements ",[186,2115,232],{"class":224},[186,2117,235],{"class":228},[186,2119,2120],{"class":188,"line":238},[186,2121,218],{"emptyLinePlaceholder":217},[186,2123,2124],{"class":188,"line":243},[186,2125,2126],{"class":192},"-- Define achievements\n",[186,2128,2129,2132,2135,2137],{"class":188,"line":270},[186,2130,2131],{"class":228},"Achievements.",[186,2133,2134],{"class":276},"Definitions",[186,2136,279],{"class":224},[186,2138,652],{"class":228},[186,2140,2141,2144,2146],{"class":188,"line":285},[186,2142,2143],{"class":228},"    first_kill ",[186,2145,232],{"class":224},[186,2147,652],{"class":228},[186,2149,2150,2153,2155,2157,2160,2162],{"class":188,"line":317},[186,2151,2152],{"class":228},"        name ",[186,2154,232],{"class":224},[186,2156,490],{"class":224},[186,2158,2159],{"class":309},"First Blood",[186,2161,306],{"class":224},[186,2163,1118],{"class":228},[186,2165,2166,2169,2171,2173,2176,2178],{"class":188,"line":322},[186,2167,2168],{"class":228},"        description ",[186,2170,232],{"class":224},[186,2172,490],{"class":224},[186,2174,2175],{"class":309},"Get your first kill",[186,2177,306],{"class":224},[186,2179,1118],{"class":228},[186,2181,2182,2185,2187],{"class":188,"line":328},[186,2183,2184],{"class":228},"        points ",[186,2186,232],{"class":224},[186,2188,989],{"class":345},[186,2190,2191],{"class":188,"line":378},[186,2192,2193],{"class":228},"    },\n",[186,2195,2196,2199,2201],{"class":188,"line":419},[186,2197,2198],{"class":228},"    kill_streak_5 ",[186,2200,232],{"class":224},[186,2202,652],{"class":228},[186,2204,2205,2207,2209,2211,2214,2216],{"class":188,"line":425},[186,2206,2152],{"class":228},[186,2208,232],{"class":224},[186,2210,490],{"class":224},[186,2212,2213],{"class":309},"On Fire",[186,2215,306],{"class":224},[186,2217,1118],{"class":228},[186,2219,2220,2222,2224,2226,2229,2231],{"class":188,"line":430},[186,2221,2168],{"class":228},[186,2223,232],{"class":224},[186,2225,490],{"class":224},[186,2227,2228],{"class":309},"Get a 5 kill streak",[186,2230,306],{"class":224},[186,2232,1118],{"class":228},[186,2234,2235,2237,2239],{"class":188,"line":436},[186,2236,2184],{"class":228},[186,2238,232],{"class":224},[186,2240,2241],{"class":345}," 25\n",[186,2243,2244],{"class":188,"line":476},[186,2245,2193],{"class":228},[186,2247,2248,2251,2253],{"class":188,"line":499},[186,2249,2250],{"class":228},"    level_10 ",[186,2252,232],{"class":224},[186,2254,652],{"class":228},[186,2256,2257,2259,2261,2263,2266,2268],{"class":188,"line":504},[186,2258,2152],{"class":228},[186,2260,232],{"class":224},[186,2262,490],{"class":224},[186,2264,2265],{"class":309},"Rising Star",[186,2267,306],{"class":224},[186,2269,1118],{"class":228},[186,2271,2272,2274,2276,2278,2281,2283],{"class":188,"line":510},[186,2273,2168],{"class":228},[186,2275,232],{"class":224},[186,2277,490],{"class":224},[186,2279,2280],{"class":309},"Reach level 10",[186,2282,306],{"class":224},[186,2284,1118],{"class":228},[186,2286,2287,2289,2291],{"class":188,"line":525},[186,2288,2184],{"class":228},[186,2290,232],{"class":224},[186,2292,2293],{"class":345}," 50\n",[186,2295,2296],{"class":188,"line":541},[186,2297,2193],{"class":228},[186,2299,2300,2303,2305],{"class":188,"line":559},[186,2301,2302],{"class":228},"    level_50 ",[186,2304,232],{"class":224},[186,2306,652],{"class":228},[186,2308,2309,2311,2313,2315,2318,2320],{"class":188,"line":586},[186,2310,2152],{"class":228},[186,2312,232],{"class":224},[186,2314,490],{"class":224},[186,2316,2317],{"class":309},"Veteran",[186,2319,306],{"class":224},[186,2321,1118],{"class":228},[186,2323,2324,2326,2328,2330,2333,2335],{"class":188,"line":592},[186,2325,2168],{"class":228},[186,2327,232],{"class":224},[186,2329,490],{"class":224},[186,2331,2332],{"class":309},"Reach level 50",[186,2334,306],{"class":224},[186,2336,1118],{"class":228},[186,2338,2339,2341,2343],{"class":188,"line":624},[186,2340,2184],{"class":228},[186,2342,232],{"class":224},[186,2344,2345],{"class":345}," 100\n",[186,2347,2348],{"class":188,"line":630},[186,2349,2193],{"class":228},[186,2351,2352,2355,2357],{"class":188,"line":636},[186,2353,2354],{"class":228},"    playtime_10h ",[186,2356,232],{"class":224},[186,2358,652],{"class":228},[186,2360,2361,2363,2365,2367,2370,2372],{"class":188,"line":641},[186,2362,2152],{"class":228},[186,2364,232],{"class":224},[186,2366,490],{"class":224},[186,2368,2369],{"class":309},"Dedicated",[186,2371,306],{"class":224},[186,2373,1118],{"class":228},[186,2375,2376,2378,2380,2382,2385,2387],{"class":188,"line":655},[186,2377,2168],{"class":228},[186,2379,232],{"class":224},[186,2381,490],{"class":224},[186,2383,2384],{"class":309},"Play for 10 hours",[186,2386,306],{"class":224},[186,2388,1118],{"class":228},[186,2390,2391,2393,2395],{"class":188,"line":666},[186,2392,2184],{"class":228},[186,2394,232],{"class":224},[186,2396,2397],{"class":345}," 75\n",[186,2399,2400],{"class":188,"line":677},[186,2401,2193],{"class":228},[186,2403,2404,2407,2409],{"class":188,"line":688},[186,2405,2406],{"class":228},"    credits_100k ",[186,2408,232],{"class":224},[186,2410,652],{"class":228},[186,2412,2413,2415,2417,2419,2422,2424],{"class":188,"line":699},[186,2414,2152],{"class":228},[186,2416,232],{"class":224},[186,2418,490],{"class":224},[186,2420,2421],{"class":309},"Rich",[186,2423,306],{"class":224},[186,2425,1118],{"class":228},[186,2427,2428,2430,2432,2434,2437,2439],{"class":188,"line":713},[186,2429,2168],{"class":228},[186,2431,232],{"class":224},[186,2433,490],{"class":224},[186,2435,2436],{"class":309},"Accumulate 100,000 credits",[186,2438,306],{"class":224},[186,2440,1118],{"class":228},[186,2442,2443,2445,2447],{"class":188,"line":719},[186,2444,2184],{"class":228},[186,2446,232],{"class":224},[186,2448,2345],{"class":345},[186,2450,2451],{"class":188,"line":724},[186,2452,2453],{"class":228},"    }\n",[186,2455,2456],{"class":188,"line":733},[186,2457,2458],{"class":228},"}\n",[186,2460,2461],{"class":188,"line":739},[186,2462,218],{"emptyLinePlaceholder":217},[186,2464,2465,2467,2470,2472,2474,2476,2478],{"class":188,"line":754},[186,2466,247],{"class":246},[186,2468,2469],{"class":250}," Achievements",[186,2471,254],{"class":228},[186,2473,257],{"class":250},[186,2475,260],{"class":224},[186,2477,264],{"class":263},[186,2479,267],{"class":224},[186,2481,2482,2485,2487,2489],{"class":188,"line":768},[186,2483,2484],{"class":228},"    Achievements.",[186,2486,264],{"class":276},[186,2488,279],{"class":224},[186,2490,282],{"class":228},[186,2492,2493,2495,2498,2500,2502,2504,2506,2508,2510,2513,2515],{"class":188,"line":789},[186,2494,2484],{"class":228},[186,2496,2497],{"class":276},"col",[186,2499,279],{"class":224},[186,2501,295],{"class":276},[186,2503,298],{"class":228},[186,2505,301],{"class":250},[186,2507,260],{"class":228},[186,2509,306],{"class":224},[186,2511,2512],{"class":309},"player_achievements",[186,2514,306],{"class":224},[186,2516,267],{"class":228},[186,2518,2519],{"class":188,"line":801},[186,2520,218],{"emptyLinePlaceholder":217},[186,2522,2523,2525,2527,2529,2531,2533,2535,2537,2539,2541,2543,2545,2548,2550],{"class":188,"line":823},[186,2524,2484],{"class":228},[186,2526,2497],{"class":276},[186,2528,298],{"class":228},[186,2530,337],{"class":250},[186,2532,389],{"class":228},[186,2534,232],{"class":224},[186,2536,346],{"class":345},[186,2538,360],{"class":228},[186,2540,363],{"class":224},[186,2542,366],{"class":228},[186,2544,306],{"class":224},[186,2546,2547],{"class":309},"steamid_index",[186,2549,306],{"class":224},[186,2551,267],{"class":228},[186,2553,2554],{"class":188,"line":829},[186,2555,422],{"class":246},[186,2557,2558],{"class":188,"line":835},[186,2559,218],{"emptyLinePlaceholder":217},[186,2561,2562],{"class":188,"line":841},[186,2563,2564],{"class":192},"-- Check if player has achievement\n",[186,2566,2567,2569,2571,2573,2576,2578,2580,2582,2585,2587,2589],{"class":188,"line":847},[186,2568,247],{"class":246},[186,2570,2469],{"class":250},[186,2572,254],{"class":228},[186,2574,2575],{"class":250},"Has",[186,2577,260],{"class":224},[186,2579,450],{"class":263},[186,2581,453],{"class":224},[186,2583,2584],{"class":263}," achievementId",[186,2586,453],{"class":224},[186,2588,471],{"class":263},[186,2590,267],{"class":224},[186,2592,2593,2595,2597,2599,2601],{"class":188,"line":870},[186,2594,2484],{"class":228},[186,2596,2497],{"class":276},[186,2598,298],{"class":228},[186,2600,519],{"class":250},[186,2602,522],{"class":228},[186,2604,2605,2607,2609],{"class":188,"line":890},[186,2606,528],{"class":228},[186,2608,232],{"class":224},[186,2610,1543],{"class":228},[186,2612,2613,2615,2617,2619,2621,2624],{"class":188,"line":898},[186,2614,544],{"class":246},[186,2616,260],{"class":224},[186,2618,549],{"class":263},[186,2620,453],{"class":224},[186,2622,2623],{"class":263}," doc",[186,2625,267],{"class":224},[186,2627,2628,2630,2632,2634,2637,2640],{"class":188,"line":903},[186,2629,562],{"class":246},[186,2631,647],{"class":228},[186,2633,568],{"class":224},[186,2635,2636],{"class":228}," doc.",[186,2638,2639],{"class":276},"achievements",[186,2641,2642],{"class":246}," then\n",[186,2644,2645,2648,2651,2653,2655,2658,2660,2662],{"class":188,"line":909},[186,2646,2647],{"class":246},"                for",[186,2649,2650],{"class":228}," _, ach ",[186,2652,2002],{"class":246},[186,2654,2005],{"class":250},[186,2656,2657],{"class":228},"(doc.",[186,2659,2639],{"class":276},[186,2661,619],{"class":228},[186,2663,2011],{"class":246},[186,2665,2666,2668,2671,2674,2677,2680],{"class":188,"line":915},[186,2667,873],{"class":246},[186,2669,2670],{"class":228}," ach.",[186,2672,2673],{"class":276},"id",[186,2675,2676],{"class":224}," ==",[186,2678,2679],{"class":228}," achievementId ",[186,2681,583],{"class":246},[186,2683,2684,2687,2689,2691],{"class":188,"line":920},[186,2685,2686],{"class":250},"                        callback",[186,2688,260],{"class":228},[186,2690,405],{"class":224},[186,2692,2693],{"class":228},", ach)\n",[186,2695,2696],{"class":188,"line":925},[186,2697,2698],{"class":246},"                        return\n",[186,2700,2701],{"class":188,"line":931},[186,2702,826],{"class":246},[186,2704,2705],{"class":188,"line":959},[186,2706,1465],{"class":246},[186,2708,2709],{"class":188,"line":976},[186,2710,633],{"class":246},[186,2712,2713,2715,2717,2719,2721,2723],{"class":188,"line":992},[186,2714,1572],{"class":250},[186,2716,260],{"class":228},[186,2718,363],{"class":224},[186,2720,366],{"class":228},[186,2722,1344],{"class":224},[186,2724,267],{"class":228},[186,2726,2727],{"class":188,"line":997},[186,2728,906],{"class":246},[186,2730,2731],{"class":188,"line":1012},[186,2732,912],{"class":228},[186,2734,2735],{"class":188,"line":1037},[186,2736,422],{"class":246},[186,2738,2739],{"class":188,"line":1065},[186,2740,218],{"emptyLinePlaceholder":217},[186,2742,2743],{"class":188,"line":1084},[186,2744,2745],{"class":192},"-- Award achievement\n",[186,2747,2748,2750,2752,2754,2757,2759,2761,2763,2765,2767,2769],{"class":188,"line":1090},[186,2749,247],{"class":246},[186,2751,2469],{"class":250},[186,2753,254],{"class":228},[186,2755,2756],{"class":250},"Award",[186,2758,260],{"class":224},[186,2760,450],{"class":263},[186,2762,453],{"class":224},[186,2764,2584],{"class":263},[186,2766,453],{"class":224},[186,2768,471],{"class":263},[186,2770,267],{"class":224},[186,2772,2773,2776,2779,2781,2784,2786],{"class":188,"line":1109},[186,2774,2775],{"class":224},"    local",[186,2777,2778],{"class":228}," def ",[186,2780,232],{"class":224},[186,2782,2783],{"class":228}," Achievements.",[186,2785,2134],{"class":276},[186,2787,2788],{"class":228},"[achievementId]\n",[186,2790,2791,2794,2796,2798],{"class":188,"line":1121},[186,2792,2793],{"class":246},"    if",[186,2795,1328],{"class":224},[186,2797,2778],{"class":228},[186,2799,583],{"class":246},[186,2801,2802,2804,2806,2808,2810,2812,2814,2816,2818,2821,2823,2825],{"class":188,"line":1132},[186,2803,1702],{"class":246},[186,2805,598],{"class":228},[186,2807,601],{"class":246},[186,2809,471],{"class":250},[186,2811,260],{"class":228},[186,2813,363],{"class":224},[186,2815,366],{"class":228},[186,2817,306],{"class":224},[186,2819,2820],{"class":309},"Invalid achievement",[186,2822,306],{"class":224},[186,2824,619],{"class":228},[186,2826,422],{"class":246},[186,2828,2829],{"class":188,"line":1143},[186,2830,2831],{"class":246},"        return\n",[186,2833,2834],{"class":188,"line":1154},[186,2835,2836],{"class":246},"    end\n",[186,2838,2839],{"class":188,"line":1165},[186,2840,218],{"emptyLinePlaceholder":217},[186,2842,2843],{"class":188,"line":1170},[186,2844,2845],{"class":192},"    -- Check if already has it\n",[186,2847,2848,2850,2852,2855,2857,2859,2862],{"class":188,"line":1176},[186,2849,2484],{"class":228},[186,2851,2575],{"class":250},[186,2853,2854],{"class":228},"(steamid, achievementId, ",[186,2856,247],{"class":246},[186,2858,260],{"class":224},[186,2860,2861],{"class":263},"has",[186,2863,267],{"class":224},[186,2865,2866,2868,2871],{"class":188,"line":1195},[186,2867,1702],{"class":246},[186,2869,2870],{"class":228}," has ",[186,2872,583],{"class":246},[186,2874,2875,2877,2879,2881,2883,2885,2887,2889,2891,2894,2896,2898],{"class":188,"line":1209},[186,2876,562],{"class":246},[186,2878,598],{"class":228},[186,2880,601],{"class":246},[186,2882,471],{"class":250},[186,2884,260],{"class":228},[186,2886,363],{"class":224},[186,2888,366],{"class":228},[186,2890,306],{"class":224},[186,2892,2893],{"class":309},"Already earned",[186,2895,306],{"class":224},[186,2897,619],{"class":228},[186,2899,422],{"class":246},[186,2901,2902],{"class":188,"line":1217},[186,2903,1727],{"class":246},[186,2905,2906],{"class":188,"line":1222},[186,2907,906],{"class":246},[186,2909,2910],{"class":188,"line":1227},[186,2911,218],{"emptyLinePlaceholder":217},[186,2913,2914,2916,2919,2921],{"class":188,"line":1233},[186,2915,1743],{"class":224},[186,2917,2918],{"class":228}," achievement ",[186,2920,232],{"class":224},[186,2922,652],{"class":228},[186,2924,2925,2928,2930],{"class":188,"line":1259},[186,2926,2927],{"class":228},"            id ",[186,2929,232],{"class":224},[186,2931,2932],{"class":228}," achievementId,\n",[186,2934,2935,2938,2940,2943,2946],{"class":188,"line":1276},[186,2936,2937],{"class":228},"            name ",[186,2939,232],{"class":224},[186,2941,2942],{"class":228}," def.",[186,2944,2945],{"class":276},"name",[186,2947,1118],{"class":228},[186,2949,2950,2953,2955,2957,2960],{"class":188,"line":1281},[186,2951,2952],{"class":228},"            points ",[186,2954,232],{"class":224},[186,2956,2942],{"class":228},[186,2958,2959],{"class":276},"points",[186,2961,1118],{"class":228},[186,2963,2964,2967,2969,2971],{"class":188,"line":1294},[186,2965,2966],{"class":228},"            earned_at ",[186,2968,232],{"class":224},[186,2970,707],{"class":250},[186,2972,710],{"class":228},[186,2974,2975],{"class":188,"line":1307},[186,2976,1173],{"class":228},[186,2978,2979],{"class":188,"line":1323},[186,2980,218],{"emptyLinePlaceholder":217},[186,2982,2983,2986,2988,2990,2992],{"class":188,"line":1336},[186,2984,2985],{"class":228},"        Achievements.",[186,2987,2497],{"class":276},[186,2989,298],{"class":228},[186,2991,749],{"class":250},[186,2993,522],{"class":228},[186,2995,2996,2999,3001],{"class":188,"line":1354},[186,2997,2998],{"class":228},"            { steamid ",[186,3000,232],{"class":224},[186,3002,1543],{"class":228},[186,3004,3005],{"class":188,"line":1359},[186,3006,1891],{"class":228},[186,3008,3009,3011,3013,3016,3018,3020,3022,3025,3027],{"class":188,"line":1364},[186,3010,1897],{"class":228},[186,3012,306],{"class":224},[186,3014,3015],{"class":309},"$push",[186,3017,306],{"class":224},[186,3019,781],{"class":228},[186,3021,232],{"class":224},[186,3023,3024],{"class":228}," { achievements ",[186,3026,232],{"class":224},[186,3028,3029],{"class":228}," achievement },\n",[186,3031,3032,3034,3036,3039,3041,3043,3045,3048,3050,3052,3054],{"class":188,"line":1369},[186,3033,1897],{"class":228},[186,3035,306],{"class":224},[186,3037,3038],{"class":309},"$inc",[186,3040,306],{"class":224},[186,3042,781],{"class":228},[186,3044,232],{"class":224},[186,3046,3047],{"class":228}," { total_points ",[186,3049,232],{"class":224},[186,3051,2942],{"class":228},[186,3053,2959],{"class":276},[186,3055,3056],{"class":228}," }\n",[186,3058,3059],{"class":188,"line":1375},[186,3060,3061],{"class":228},"            },\n",[186,3063,3064,3067,3069,3071],{"class":188,"line":1390},[186,3065,3066],{"class":246},"            function",[186,3068,260],{"class":224},[186,3070,549],{"class":263},[186,3072,267],{"class":224},[186,3074,3075,3077,3079,3081,3083,3085,3087,3090],{"class":188,"line":1424},[186,3076,595],{"class":246},[186,3078,598],{"class":228},[186,3080,601],{"class":246},[186,3082,471],{"class":250},[186,3084,260],{"class":228},[186,3086,815],{"class":224},[186,3088,3089],{"class":228}," err, achievement) ",[186,3091,422],{"class":246},[186,3093,3094],{"class":188,"line":1441},[186,3095,633],{"class":246},[186,3097,3098],{"class":188,"line":1462},[186,3099,3100],{"class":228},"        )\n",[186,3102,3103,3105],{"class":188,"line":1468},[186,3104,1212],{"class":246},[186,3106,267],{"class":228},[186,3108,3109],{"class":188,"line":1474},[186,3110,422],{"class":246},[186,3112,3113],{"class":188,"line":1479},[186,3114,218],{"emptyLinePlaceholder":217},[186,3116,3117],{"class":188,"line":1484},[186,3118,3119],{"class":192},"-- Get player achievements\n",[186,3121,3122,3124,3126,3128,3131,3133,3135,3137,3139],{"class":188,"line":1489},[186,3123,247],{"class":246},[186,3125,2469],{"class":250},[186,3127,254],{"class":228},[186,3129,3130],{"class":250},"GetAll",[186,3132,260],{"class":224},[186,3134,450],{"class":263},[186,3136,453],{"class":224},[186,3138,471],{"class":263},[186,3140,267],{"class":224},[186,3142,3143,3145,3147,3149,3151],{"class":188,"line":1494},[186,3144,2484],{"class":228},[186,3146,2497],{"class":276},[186,3148,298],{"class":228},[186,3150,519],{"class":250},[186,3152,522],{"class":228},[186,3154,3155,3157,3159],{"class":188,"line":1500},[186,3156,528],{"class":228},[186,3158,232],{"class":224},[186,3160,1543],{"class":228},[186,3162,3163,3165,3167,3169,3171,3173],{"class":188,"line":1522},[186,3164,544],{"class":246},[186,3166,260],{"class":224},[186,3168,549],{"class":263},[186,3170,453],{"class":224},[186,3172,2623],{"class":263},[186,3174,267],{"class":224},[186,3176,3177,3179,3181],{"class":188,"line":1536},[186,3178,562],{"class":246},[186,3180,647],{"class":228},[186,3182,583],{"class":246},[186,3184,3185,3187,3189,3191,3194,3197,3200,3202,3205],{"class":188,"line":1546},[186,3186,1339],{"class":250},[186,3188,2657],{"class":228},[186,3190,2639],{"class":276},[186,3192,3193],{"class":224}," or",[186,3195,3196],{"class":228}," {}, doc.",[186,3198,3199],{"class":276},"total_points",[186,3201,3193],{"class":224},[186,3203,3204],{"class":345}," 0",[186,3206,267],{"class":228},[186,3208,3209],{"class":188,"line":1554},[186,3210,838],{"class":246},[186,3212,3213,3215,3217,3219],{"class":188,"line":1569},[186,3214,1339],{"class":250},[186,3216,1717],{"class":228},[186,3218,1349],{"class":345},[186,3220,267],{"class":228},[186,3222,3223],{"class":188,"line":1581},[186,3224,633],{"class":246},[186,3226,3227],{"class":188,"line":1586},[186,3228,906],{"class":246},[186,3230,3231],{"class":188,"line":1591},[186,3232,912],{"class":228},[186,3234,3235],{"class":188,"line":1596},[186,3236,422],{"class":246},[186,3238,3239],{"class":188,"line":1601},[186,3240,218],{"emptyLinePlaceholder":217},[186,3242,3243],{"class":188,"line":1607},[186,3244,3245],{"class":192},"-- Get achievement progress\u002Fstats\n",[186,3247,3248,3250,3252,3254,3257,3259,3261,3263,3265],{"class":188,"line":1638},[186,3249,247],{"class":246},[186,3251,2469],{"class":250},[186,3253,254],{"class":228},[186,3255,3256],{"class":250},"GetProgress",[186,3258,260],{"class":224},[186,3260,450],{"class":263},[186,3262,453],{"class":224},[186,3264,471],{"class":263},[186,3266,267],{"class":224},[186,3268,3269,3271,3273,3276,3278,3280,3283,3285,3288],{"class":188,"line":1655},[186,3270,2484],{"class":228},[186,3272,3130],{"class":250},[186,3274,3275],{"class":228},"(steamid, ",[186,3277,247],{"class":246},[186,3279,260],{"class":224},[186,3281,3282],{"class":263},"earned",[186,3284,453],{"class":224},[186,3286,3287],{"class":263}," points",[186,3289,267],{"class":224},[186,3291,3292,3294,3297,3299],{"class":188,"line":1671},[186,3293,1743],{"class":224},[186,3295,3296],{"class":228}," total ",[186,3298,232],{"class":224},[186,3300,1162],{"class":345},[186,3302,3303,3305,3308,3310],{"class":188,"line":1676},[186,3304,1743],{"class":224},[186,3306,3307],{"class":228}," totalPoints ",[186,3309,232],{"class":224},[186,3311,1162],{"class":345},[186,3313,3314],{"class":188,"line":1699},[186,3315,218],{"emptyLinePlaceholder":217},[186,3317,3318,3321,3324,3326,3329,3332,3334,3336],{"class":188,"line":1712},[186,3319,3320],{"class":246},"        for",[186,3322,3323],{"class":228}," _, def ",[186,3325,2002],{"class":246},[186,3327,3328],{"class":250}," pairs",[186,3330,3331],{"class":228},"(Achievements.",[186,3333,2134],{"class":276},[186,3335,619],{"class":228},[186,3337,2011],{"class":246},[186,3339,3340,3343,3345,3347,3349],{"class":188,"line":1724},[186,3341,3342],{"class":228},"            total ",[186,3344,232],{"class":224},[186,3346,3296],{"class":228},[186,3348,1450],{"class":224},[186,3350,3351],{"class":345}," 1\n",[186,3353,3354,3357,3359,3361,3363,3365],{"class":188,"line":1730},[186,3355,3356],{"class":228},"            totalPoints ",[186,3358,232],{"class":224},[186,3360,3307],{"class":228},[186,3362,1450],{"class":224},[186,3364,2942],{"class":228},[186,3366,3367],{"class":276},"points\n",[186,3369,3370],{"class":188,"line":1735},[186,3371,906],{"class":246},[186,3373,3374],{"class":188,"line":1740},[186,3375,218],{"emptyLinePlaceholder":217},[186,3377,3378,3380],{"class":188,"line":1772},[186,3379,1198],{"class":250},[186,3381,1009],{"class":228},[186,3383,3384,3387,3389,3392],{"class":188,"line":1777},[186,3385,3386],{"class":228},"            earned ",[186,3388,232],{"class":224},[186,3390,3391],{"class":224}," #",[186,3393,3394],{"class":228},"earned,\n",[186,3396,3397,3399,3401],{"class":188,"line":1791},[186,3398,3342],{"class":228},[186,3400,232],{"class":224},[186,3402,3403],{"class":228}," total,\n",[186,3405,3406,3408,3410],{"class":188,"line":1813},[186,3407,2952],{"class":228},[186,3409,232],{"class":224},[186,3411,3412],{"class":228}," points,\n",[186,3414,3415,3418,3420],{"class":188,"line":1838},[186,3416,3417],{"class":228},"            max_points ",[186,3419,232],{"class":224},[186,3421,3422],{"class":228}," totalPoints,\n",[186,3424,3425,3428,3430,3433,3436,3439,3442,3445,3447],{"class":188,"line":1857},[186,3426,3427],{"class":228},"            percentage ",[186,3429,232],{"class":224},[186,3431,3432],{"class":228}," (",[186,3434,3435],{"class":224},"#",[186,3437,3438],{"class":228},"earned ",[186,3440,3441],{"class":224},"\u002F",[186,3443,3444],{"class":228}," total) ",[186,3446,1874],{"class":224},[186,3448,2345],{"class":345},[186,3450,3451],{"class":188,"line":1888},[186,3452,3453],{"class":228},"        })\n",[186,3455,3456,3458],{"class":188,"line":1894},[186,3457,1212],{"class":246},[186,3459,267],{"class":228},[186,3461,3462],{"class":188,"line":1912},[186,3463,422],{"class":246},[186,3465,3466],{"class":188,"line":1924},[186,3467,218],{"emptyLinePlaceholder":217},[186,3469,3470],{"class":188,"line":1936},[186,3471,3472],{"class":192},"-- Check achievements based on player stats\n",[186,3474,3475,3477,3479,3481,3484,3486,3488,3490,3493,3495,3497],{"class":188,"line":1948},[186,3476,247],{"class":246},[186,3478,2469],{"class":250},[186,3480,254],{"class":228},[186,3482,3483],{"class":250},"CheckAndAward",[186,3485,260],{"class":224},[186,3487,450],{"class":263},[186,3489,453],{"class":224},[186,3491,3492],{"class":263}," playerData",[186,3494,453],{"class":224},[186,3496,471],{"class":263},[186,3498,267],{"class":224},[186,3500,3501,3503,3506,3508],{"class":188,"line":1958},[186,3502,2775],{"class":224},[186,3504,3505],{"class":228}," awarded ",[186,3507,232],{"class":224},[186,3509,235],{"class":228},[186,3511,3512],{"class":188,"line":1964},[186,3513,218],{"emptyLinePlaceholder":217},[186,3515,3516,3518,3521,3524,3526,3529,3531,3534],{"class":188,"line":1969},[186,3517,2775],{"class":224},[186,3519,3520],{"class":246}," function",[186,3522,3523],{"class":250}," checkNext",[186,3525,260],{"class":224},[186,3527,3528],{"class":263},"checks",[186,3530,453],{"class":224},[186,3532,3533],{"class":263}," index",[186,3535,267],{"class":224},[186,3537,3538,3540,3543,3546,3548,3551],{"class":188,"line":1987},[186,3539,1702],{"class":246},[186,3541,3542],{"class":228}," index ",[186,3544,3545],{"class":224},">",[186,3547,3391],{"class":224},[186,3549,3550],{"class":228},"checks ",[186,3552,583],{"class":246},[186,3554,3555,3557],{"class":188,"line":1993},[186,3556,1572],{"class":250},[186,3558,3559],{"class":228},"(awarded)\n",[186,3561,3562],{"class":188,"line":2014},[186,3563,1727],{"class":246},[186,3565,3566],{"class":188,"line":2031},[186,3567,906],{"class":246},[186,3569,3570],{"class":188,"line":2036},[186,3571,218],{"emptyLinePlaceholder":217},[186,3573,3574,3576,3579,3581],{"class":188,"line":2044},[186,3575,1743],{"class":224},[186,3577,3578],{"class":228}," check ",[186,3580,232],{"class":224},[186,3582,3583],{"class":228}," checks[index]\n",[186,3585,3586,3588,3591,3594],{"class":188,"line":2052},[186,3587,1702],{"class":246},[186,3589,3590],{"class":228}," check.",[186,3592,3593],{"class":276},"condition",[186,3595,2642],{"class":246},[186,3597,3598,3601,3603,3606,3608,3610,3612,3614,3617,3619,3622],{"class":188,"line":2059},[186,3599,3600],{"class":228},"            Achievements.",[186,3602,2756],{"class":250},[186,3604,3605],{"class":228},"(steamid, check.",[186,3607,2673],{"class":276},[186,3609,366],{"class":228},[186,3611,247],{"class":246},[186,3613,260],{"class":224},[186,3615,3616],{"class":263},"success",[186,3618,453],{"class":224},[186,3620,3621],{"class":263}," ach",[186,3623,267],{"class":224},[186,3625,3626,3628,3631],{"class":188,"line":2064},[186,3627,595],{"class":246},[186,3629,3630],{"class":228}," success ",[186,3632,583],{"class":246},[186,3634,3635,3638],{"class":188,"line":2069},[186,3636,3637],{"class":250},"                    table.insert",[186,3639,3640],{"class":228},"(awarded, ach)\n",[186,3642,3644],{"class":188,"line":3643},152,[186,3645,1465],{"class":246},[186,3647,3649,3652,3655,3657,3659],{"class":188,"line":3648},153,[186,3650,3651],{"class":250},"                checkNext",[186,3653,3654],{"class":228},"(checks, index ",[186,3656,1450],{"class":224},[186,3658,346],{"class":345},[186,3660,267],{"class":228},[186,3662,3664,3667],{"class":188,"line":3663},154,[186,3665,3666],{"class":246},"            end",[186,3668,267],{"class":228},[186,3670,3672],{"class":188,"line":3671},155,[186,3673,3674],{"class":246},"        else\n",[186,3676,3678,3681,3683,3685,3687],{"class":188,"line":3677},156,[186,3679,3680],{"class":250},"            checkNext",[186,3682,3654],{"class":228},[186,3684,1450],{"class":224},[186,3686,346],{"class":345},[186,3688,267],{"class":228},[186,3690,3692],{"class":188,"line":3691},157,[186,3693,906],{"class":246},[186,3695,3697],{"class":188,"line":3696},158,[186,3698,2836],{"class":246},[186,3700,3702],{"class":188,"line":3701},159,[186,3703,218],{"emptyLinePlaceholder":217},[186,3705,3707,3709,3712,3714],{"class":188,"line":3706},160,[186,3708,2775],{"class":224},[186,3710,3711],{"class":228}," checks ",[186,3713,232],{"class":224},[186,3715,652],{"class":228},[186,3717,3719,3722,3724,3726,3729,3731,3734,3736,3739,3742,3744,3747,3749,3751],{"class":188,"line":3718},161,[186,3720,3721],{"class":228},"        { id ",[186,3723,232],{"class":224},[186,3725,490],{"class":224},[186,3727,3728],{"class":309},"first_kill",[186,3730,306],{"class":224},[186,3732,3733],{"class":228},", condition ",[186,3735,232],{"class":224},[186,3737,3738],{"class":228}," playerData.",[186,3740,3741],{"class":276},"stats",[186,3743,254],{"class":228},[186,3745,3746],{"class":276},"kills",[186,3748,577],{"class":224},[186,3750,346],{"class":345},[186,3752,1885],{"class":228},[186,3754,3756,3758,3760,3762,3765,3767,3769,3771,3773,3776,3778,3781],{"class":188,"line":3755},162,[186,3757,3721],{"class":228},[186,3759,232],{"class":224},[186,3761,490],{"class":224},[186,3763,3764],{"class":309},"level_10",[186,3766,306],{"class":224},[186,3768,3733],{"class":228},[186,3770,232],{"class":224},[186,3772,3738],{"class":228},[186,3774,3775],{"class":276},"level",[186,3777,577],{"class":224},[186,3779,3780],{"class":345}," 10",[186,3782,1885],{"class":228},[186,3784,3786,3788,3790,3792,3795,3797,3799,3801,3803,3805,3807,3810],{"class":188,"line":3785},163,[186,3787,3721],{"class":228},[186,3789,232],{"class":224},[186,3791,490],{"class":224},[186,3793,3794],{"class":309},"level_50",[186,3796,306],{"class":224},[186,3798,3733],{"class":228},[186,3800,232],{"class":224},[186,3802,3738],{"class":228},[186,3804,3775],{"class":276},[186,3806,577],{"class":224},[186,3808,3809],{"class":345}," 50",[186,3811,1885],{"class":228},[186,3813,3815,3817,3819,3821,3824,3826,3828,3830,3832,3835,3837,3840],{"class":188,"line":3814},164,[186,3816,3721],{"class":228},[186,3818,232],{"class":224},[186,3820,490],{"class":224},[186,3822,3823],{"class":309},"playtime_10h",[186,3825,306],{"class":224},[186,3827,3733],{"class":228},[186,3829,232],{"class":224},[186,3831,3738],{"class":228},[186,3833,3834],{"class":276},"playtime",[186,3836,577],{"class":224},[186,3838,3839],{"class":345}," 36000",[186,3841,1885],{"class":228},[186,3843,3845,3847,3849,3851,3854,3856,3858,3860,3862,3865,3867,3870],{"class":188,"line":3844},165,[186,3846,3721],{"class":228},[186,3848,232],{"class":224},[186,3850,490],{"class":224},[186,3852,3853],{"class":309},"credits_100k",[186,3855,306],{"class":224},[186,3857,3733],{"class":228},[186,3859,232],{"class":224},[186,3861,3738],{"class":228},[186,3863,3864],{"class":276},"credits",[186,3866,577],{"class":224},[186,3868,3869],{"class":345}," 100000",[186,3871,3056],{"class":228},[186,3873,3875],{"class":188,"line":3874},166,[186,3876,2453],{"class":228},[186,3878,3880],{"class":188,"line":3879},167,[186,3881,218],{"emptyLinePlaceholder":217},[186,3883,3885,3888,3891,3893],{"class":188,"line":3884},168,[186,3886,3887],{"class":250},"    checkNext",[186,3889,3890],{"class":228},"(checks, ",[186,3892,357],{"class":345},[186,3894,267],{"class":228},[186,3896,3898],{"class":188,"line":3897},169,[186,3899,422],{"class":246},[186,3901,3903],{"class":188,"line":3902},170,[186,3904,218],{"emptyLinePlaceholder":217},[186,3906,3908,3910],{"class":188,"line":3907},171,[186,3909,2072],{"class":246},[186,3911,3912],{"class":228}," Achievements\n",[171,3914,3916],{"id":3915},"matchmaking-system","Matchmaking System",[176,3918,3920],{"className":178,"code":3919,"language":180,"meta":181,"style":181},"--[[\n    Simple Matchmaking System\n    Queue players and create balanced matches\n]]\n\nlocal Matchmaking = {}\n\nfunction Matchmaking.Initialize(db)\n    Matchmaking.db = db\n    Matchmaking.queue = db:Collection(\"matchmaking_queue\")\n    Matchmaking.matches = db:Collection(\"matches\")\n\n    -- Index for efficient queries\n    Matchmaking.queue:CreateIndex({ skill_rating = 1 }, false, \"skill_index\")\n    Matchmaking.queue:CreateIndex({ queued_at = 1 }, false, \"queue_time\")\nend\n\n-- Add player to queue\nfunction Matchmaking.JoinQueue(steamid, username, skillRating, callback)\n    -- Remove from queue if already in it\n    Matchmaking.queue:DeleteOneAsync({ steamid = steamid }, function()\n        -- Add to queue\n        Matchmaking.queue:InsertOneAsync({\n            steamid = steamid,\n            username = username,\n            skill_rating = skillRating,\n            queued_at = os.time()\n        }, function(err)\n            if callback then callback(not err) end\n        end)\n    end)\nend\n\n-- Remove player from queue\nfunction Matchmaking.LeaveQueue(steamid, callback)\n    Matchmaking.queue:DeleteOneAsync(\n        { steamid = steamid },\n        function(err, deleted)\n            if callback then callback(deleted > 0) end\n        end\n    )\nend\n\n-- Find match for player\nfunction Matchmaking.FindMatch(steamid, skillRating, skillRange, callback)\n    skillRange = skillRange or 100\n\n    Matchmaking.queue:FindAsync({\n        steamid = { [\"$ne\"] = steamid },\n        skill_rating = {\n            [\"$gte\"] = skillRating - skillRange,\n            [\"$lte\"] = skillRating + skillRange\n        }\n    }, 100, function(err, candidates)\n        if #candidates == 0 then\n            callback(nil, \"No players in range\")\n            return\n        end\n\n        -- Sort by closest skill rating\n        table.sort(candidates, function(a, b)\n            return math.abs(a.skill_rating - skillRating) \u003C\n                   math.abs(b.skill_rating - skillRating)\n        end)\n\n        callback(candidates[1])\n    end)\nend\n\n-- Create a match\nfunction Matchmaking.CreateMatch(player1, player2, callback)\n    local match = {\n        players = {\n            {\n                steamid = player1.steamid,\n                username = player1.username,\n                skill_rating = player1.skill_rating\n            },\n            {\n                steamid = player2.steamid,\n                username = player2.username,\n                skill_rating = player2.skill_rating\n            }\n        },\n        status = \"pending\",\n        created_at = os.time(),\n        skill_diff = math.abs(player1.skill_rating - player2.skill_rating)\n    }\n\n    -- Remove players from queue\n    Matchmaking.queue:DeleteManyAsync({\n        steamid = { [\"$in\"] = { player1.steamid, player2.steamid } }\n    }, function()\n        -- Create match record\n        Matchmaking.matches:InsertOneAsync(match, function(err, matchId)\n            if err then\n                callback(nil, err)\n            else\n                match._id = matchId\n                callback(match)\n            end\n        end)\n    end)\nend\n\n-- Get queue statistics\nfunction Matchmaking.GetQueueStats(callback)\n    Matchmaking.queue:AggregateAsync({\n        {\n            [\"$group\"] = {\n                _id = nil,\n                count = { [\"$sum\"] = 1 },\n                avg_skill = { [\"$avg\"] = \"$skill_rating\" },\n                min_skill = { [\"$min\"] = \"$skill_rating\" },\n                max_skill = { [\"$max\"] = \"$skill_rating\" },\n                avg_wait = { [\"$avg\"] = {\n                    [\"$subtract\"] = { os.time(), \"$queued_at\" }\n                }}\n            }\n        }\n    }, function(err, results)\n        if results and #results > 0 then\n            callback(results[1])\n        else\n            callback({\n                count = 0,\n                avg_skill = 0,\n                min_skill = 0,\n                max_skill = 0,\n                avg_wait = 0\n            })\n        end\n    end)\nend\n\n-- Process queue and create matches\nfunction Matchmaking.ProcessQueue(callback)\n    local created = 0\n\n    Matchmaking.queue:FindAsync({}, 1000, function(err, players)\n        if #players \u003C 2 then\n            callback(0)\n            return\n        end\n\n        -- Sort by queue time\n        table.sort(players, function(a, b)\n            return a.queued_at \u003C b.queued_at\n        end)\n\n        local function processNext(index)\n            if index > #players then\n                callback(created)\n                return\n            end\n\n            local player = players[index]\n\n            -- Check if still in queue\n            Matchmaking.queue:FindOneAsync({ steamid = player.steamid }, function(err, stillQueued)\n                if not stillQueued then\n                    processNext(index + 1)\n                    return\n                end\n\n                -- Find match\n                Matchmaking.FindMatch(player.steamid, player.skill_rating, 200, function(opponent)\n                    if opponent then\n                        Matchmaking.CreateMatch(player, opponent, function(match)\n                            if match then\n                                created = created + 1\n                                print(\"Created match:\", player.username, \"vs\", opponent.username)\n                            end\n                            processNext(index + 1)\n                        end)\n                    else\n                        processNext(index + 1)\n                    end\n                end)\n            end)\n        end\n\n        processNext(1)\n    end)\nend\n\nreturn Matchmaking\n",[183,3921,3922,3926,3931,3936,3940,3944,3955,3959,3976,3987,4013,4038,4042,4047,4079,4111,4115,4119,4124,4154,4159,4181,4186,4199,4208,4217,4227,4238,4250,4269,4275,4281,4285,4289,4294,4315,4327,4335,4350,4371,4375,4379,4383,4387,4392,4422,4436,4440,4452,4474,4483,4506,4528,4532,4554,4570,4589,4593,4597,4601,4606,4628,4650,4665,4671,4675,4687,4693,4697,4701,4706,4733,4744,4753,4757,4770,4783,4795,4799,4803,4816,4828,4838,4842,4847,4863,4875,4897,4901,4905,4910,4923,4955,4963,4968,4994,5003,5014,5018,5031,5038,5042,5048,5054,5058,5062,5067,5085,5097,5101,5118,5129,5153,5184,5212,5240,5261,5295,5300,5304,5308,5324,5344,5355,5359,5365,5375,5385,5395,5405,5413,5418,5422,5428,5432,5436,5441,5458,5469,5473,5503,5519,5529,5533,5537,5541,5546,5565,5584,5590,5594,5610,5624,5631,5635,5639,5643,5654,5658,5663,5697,5708,5722,5727,5731,5735,5740,5772,5781,5800,5809,5822,5857,5863,5877,5885,5891,5905,5910,5917,5924,5929,5934,5946,5953,5958,5963],{"__ignoreMap":181},[186,3923,3924],{"class":188,"line":189},[186,3925,193],{"class":192},[186,3927,3928],{"class":188,"line":196},[186,3929,3930],{"class":192},"    Simple Matchmaking System\n",[186,3932,3933],{"class":188,"line":202},[186,3934,3935],{"class":192},"    Queue players and create balanced matches\n",[186,3937,3938],{"class":188,"line":208},[186,3939,211],{"class":192},[186,3941,3942],{"class":188,"line":214},[186,3943,218],{"emptyLinePlaceholder":217},[186,3945,3946,3948,3951,3953],{"class":188,"line":221},[186,3947,225],{"class":224},[186,3949,3950],{"class":228}," Matchmaking ",[186,3952,232],{"class":224},[186,3954,235],{"class":228},[186,3956,3957],{"class":188,"line":238},[186,3958,218],{"emptyLinePlaceholder":217},[186,3960,3961,3963,3966,3968,3970,3972,3974],{"class":188,"line":243},[186,3962,247],{"class":246},[186,3964,3965],{"class":250}," Matchmaking",[186,3967,254],{"class":228},[186,3969,257],{"class":250},[186,3971,260],{"class":224},[186,3973,264],{"class":263},[186,3975,267],{"class":224},[186,3977,3978,3981,3983,3985],{"class":188,"line":270},[186,3979,3980],{"class":228},"    Matchmaking.",[186,3982,264],{"class":276},[186,3984,279],{"class":224},[186,3986,282],{"class":228},[186,3988,3989,3991,3994,3996,3998,4000,4002,4004,4006,4009,4011],{"class":188,"line":285},[186,3990,3980],{"class":228},[186,3992,3993],{"class":276},"queue",[186,3995,279],{"class":224},[186,3997,295],{"class":276},[186,3999,298],{"class":228},[186,4001,301],{"class":250},[186,4003,260],{"class":228},[186,4005,306],{"class":224},[186,4007,4008],{"class":309},"matchmaking_queue",[186,4010,306],{"class":224},[186,4012,267],{"class":228},[186,4014,4015,4017,4020,4022,4024,4026,4028,4030,4032,4034,4036],{"class":188,"line":317},[186,4016,3980],{"class":228},[186,4018,4019],{"class":276},"matches",[186,4021,279],{"class":224},[186,4023,295],{"class":276},[186,4025,298],{"class":228},[186,4027,301],{"class":250},[186,4029,260],{"class":228},[186,4031,306],{"class":224},[186,4033,4019],{"class":309},[186,4035,306],{"class":224},[186,4037,267],{"class":228},[186,4039,4040],{"class":188,"line":322},[186,4041,218],{"emptyLinePlaceholder":217},[186,4043,4044],{"class":188,"line":328},[186,4045,4046],{"class":192},"    -- Index for efficient queries\n",[186,4048,4049,4051,4053,4055,4057,4060,4062,4064,4066,4068,4070,4072,4075,4077],{"class":188,"line":378},[186,4050,3980],{"class":228},[186,4052,3993],{"class":276},[186,4054,298],{"class":228},[186,4056,337],{"class":250},[186,4058,4059],{"class":228},"({ skill_rating ",[186,4061,232],{"class":224},[186,4063,346],{"class":345},[186,4065,360],{"class":228},[186,4067,363],{"class":224},[186,4069,366],{"class":228},[186,4071,306],{"class":224},[186,4073,4074],{"class":309},"skill_index",[186,4076,306],{"class":224},[186,4078,267],{"class":228},[186,4080,4081,4083,4085,4087,4089,4092,4094,4096,4098,4100,4102,4104,4107,4109],{"class":188,"line":419},[186,4082,3980],{"class":228},[186,4084,3993],{"class":276},[186,4086,298],{"class":228},[186,4088,337],{"class":250},[186,4090,4091],{"class":228},"({ queued_at ",[186,4093,232],{"class":224},[186,4095,346],{"class":345},[186,4097,360],{"class":228},[186,4099,363],{"class":224},[186,4101,366],{"class":228},[186,4103,306],{"class":224},[186,4105,4106],{"class":309},"queue_time",[186,4108,306],{"class":224},[186,4110,267],{"class":228},[186,4112,4113],{"class":188,"line":425},[186,4114,422],{"class":246},[186,4116,4117],{"class":188,"line":430},[186,4118,218],{"emptyLinePlaceholder":217},[186,4120,4121],{"class":188,"line":436},[186,4122,4123],{"class":192},"-- Add player to queue\n",[186,4125,4126,4128,4130,4132,4135,4137,4139,4141,4143,4145,4148,4150,4152],{"class":188,"line":476},[186,4127,247],{"class":246},[186,4129,3965],{"class":250},[186,4131,254],{"class":228},[186,4133,4134],{"class":250},"JoinQueue",[186,4136,260],{"class":224},[186,4138,450],{"class":263},[186,4140,453],{"class":224},[186,4142,456],{"class":263},[186,4144,453],{"class":224},[186,4146,4147],{"class":263}," skillRating",[186,4149,453],{"class":224},[186,4151,471],{"class":263},[186,4153,267],{"class":224},[186,4155,4156],{"class":188,"line":499},[186,4157,4158],{"class":192},"    -- Remove from queue if already in it\n",[186,4160,4161,4163,4165,4167,4170,4172,4174,4177,4179],{"class":188,"line":504},[186,4162,3980],{"class":228},[186,4164,3993],{"class":276},[186,4166,298],{"class":228},[186,4168,4169],{"class":250},"DeleteOneAsync",[186,4171,389],{"class":228},[186,4173,232],{"class":224},[186,4175,4176],{"class":228}," steamid }, ",[186,4178,247],{"class":246},[186,4180,710],{"class":224},[186,4182,4183],{"class":188,"line":510},[186,4184,4185],{"class":192},"        -- Add to queue\n",[186,4187,4188,4191,4193,4195,4197],{"class":188,"line":525},[186,4189,4190],{"class":228},"        Matchmaking.",[186,4192,3993],{"class":276},[186,4194,298],{"class":228},[186,4196,856],{"class":250},[186,4198,1009],{"class":228},[186,4200,4201,4204,4206],{"class":188,"line":541},[186,4202,4203],{"class":228},"            steamid ",[186,4205,232],{"class":224},[186,4207,663],{"class":228},[186,4209,4210,4213,4215],{"class":188,"line":559},[186,4211,4212],{"class":228},"            username ",[186,4214,232],{"class":224},[186,4216,674],{"class":228},[186,4218,4219,4222,4224],{"class":188,"line":586},[186,4220,4221],{"class":228},"            skill_rating ",[186,4223,232],{"class":224},[186,4225,4226],{"class":228}," skillRating,\n",[186,4228,4229,4232,4234,4236],{"class":188,"line":592},[186,4230,4231],{"class":228},"            queued_at ",[186,4233,232],{"class":224},[186,4235,707],{"class":250},[186,4237,710],{"class":228},[186,4239,4240,4242,4244,4246,4248],{"class":188,"line":624},[186,4241,1972],{"class":228},[186,4243,247],{"class":246},[186,4245,260],{"class":224},[186,4247,549],{"class":263},[186,4249,267],{"class":224},[186,4251,4252,4254,4256,4258,4260,4262,4264,4267],{"class":188,"line":630},[186,4253,562],{"class":246},[186,4255,598],{"class":228},[186,4257,601],{"class":246},[186,4259,471],{"class":250},[186,4261,260],{"class":228},[186,4263,815],{"class":224},[186,4265,4266],{"class":228}," err) ",[186,4268,422],{"class":246},[186,4270,4271,4273],{"class":188,"line":636},[186,4272,2047],{"class":246},[186,4274,267],{"class":228},[186,4276,4277,4279],{"class":188,"line":641},[186,4278,1212],{"class":246},[186,4280,267],{"class":228},[186,4282,4283],{"class":188,"line":655},[186,4284,422],{"class":246},[186,4286,4287],{"class":188,"line":666},[186,4288,218],{"emptyLinePlaceholder":217},[186,4290,4291],{"class":188,"line":677},[186,4292,4293],{"class":192},"-- Remove player from queue\n",[186,4295,4296,4298,4300,4302,4305,4307,4309,4311,4313],{"class":188,"line":688},[186,4297,247],{"class":246},[186,4299,3965],{"class":250},[186,4301,254],{"class":228},[186,4303,4304],{"class":250},"LeaveQueue",[186,4306,260],{"class":224},[186,4308,450],{"class":263},[186,4310,453],{"class":224},[186,4312,471],{"class":263},[186,4314,267],{"class":224},[186,4316,4317,4319,4321,4323,4325],{"class":188,"line":699},[186,4318,3980],{"class":228},[186,4320,3993],{"class":276},[186,4322,298],{"class":228},[186,4324,4169],{"class":250},[186,4326,522],{"class":228},[186,4328,4329,4331,4333],{"class":188,"line":713},[186,4330,528],{"class":228},[186,4332,232],{"class":224},[186,4334,1543],{"class":228},[186,4336,4337,4339,4341,4343,4345,4348],{"class":188,"line":719},[186,4338,544],{"class":246},[186,4340,260],{"class":224},[186,4342,549],{"class":263},[186,4344,453],{"class":224},[186,4346,4347],{"class":263}," deleted",[186,4349,267],{"class":224},[186,4351,4352,4354,4356,4358,4360,4363,4365,4367,4369],{"class":188,"line":724},[186,4353,562],{"class":246},[186,4355,598],{"class":228},[186,4357,601],{"class":246},[186,4359,471],{"class":250},[186,4361,4362],{"class":228},"(deleted ",[186,4364,3545],{"class":224},[186,4366,3204],{"class":345},[186,4368,619],{"class":228},[186,4370,422],{"class":246},[186,4372,4373],{"class":188,"line":733},[186,4374,906],{"class":246},[186,4376,4377],{"class":188,"line":739},[186,4378,912],{"class":228},[186,4380,4381],{"class":188,"line":754},[186,4382,422],{"class":246},[186,4384,4385],{"class":188,"line":768},[186,4386,218],{"emptyLinePlaceholder":217},[186,4388,4389],{"class":188,"line":789},[186,4390,4391],{"class":192},"-- Find match for player\n",[186,4393,4394,4396,4398,4400,4403,4405,4407,4409,4411,4413,4416,4418,4420],{"class":188,"line":801},[186,4395,247],{"class":246},[186,4397,3965],{"class":250},[186,4399,254],{"class":228},[186,4401,4402],{"class":250},"FindMatch",[186,4404,260],{"class":224},[186,4406,450],{"class":263},[186,4408,453],{"class":224},[186,4410,4147],{"class":263},[186,4412,453],{"class":224},[186,4414,4415],{"class":263}," skillRange",[186,4417,453],{"class":224},[186,4419,471],{"class":263},[186,4421,267],{"class":224},[186,4423,4424,4427,4429,4432,4434],{"class":188,"line":823},[186,4425,4426],{"class":228},"    skillRange ",[186,4428,232],{"class":224},[186,4430,4431],{"class":228}," skillRange ",[186,4433,487],{"class":224},[186,4435,2345],{"class":345},[186,4437,4438],{"class":188,"line":829},[186,4439,218],{"emptyLinePlaceholder":217},[186,4441,4442,4444,4446,4448,4450],{"class":188,"line":835},[186,4443,3980],{"class":228},[186,4445,3993],{"class":276},[186,4447,298],{"class":228},[186,4449,1531],{"class":250},[186,4451,1009],{"class":228},[186,4453,4454,4457,4459,4461,4463,4466,4468,4470,4472],{"class":188,"line":841},[186,4455,4456],{"class":228},"        steamid ",[186,4458,232],{"class":224},[186,4460,1403],{"class":228},[186,4462,306],{"class":224},[186,4464,4465],{"class":309},"$ne",[186,4467,306],{"class":224},[186,4469,781],{"class":228},[186,4471,232],{"class":224},[186,4473,1543],{"class":228},[186,4475,4476,4479,4481],{"class":188,"line":847},[186,4477,4478],{"class":228},"        skill_rating ",[186,4480,232],{"class":224},[186,4482,652],{"class":228},[186,4484,4485,4487,4489,4492,4494,4496,4498,4501,4503],{"class":188,"line":870},[186,4486,1093],{"class":228},[186,4488,306],{"class":224},[186,4490,4491],{"class":309},"$gte",[186,4493,306],{"class":224},[186,4495,781],{"class":228},[186,4497,232],{"class":224},[186,4499,4500],{"class":228}," skillRating ",[186,4502,1761],{"class":224},[186,4504,4505],{"class":228}," skillRange,\n",[186,4507,4508,4510,4512,4515,4517,4519,4521,4523,4525],{"class":188,"line":890},[186,4509,1093],{"class":228},[186,4511,306],{"class":224},[186,4513,4514],{"class":309},"$lte",[186,4516,306],{"class":224},[186,4518,781],{"class":228},[186,4520,232],{"class":224},[186,4522,4500],{"class":228},[186,4524,1450],{"class":224},[186,4526,4527],{"class":228}," skillRange\n",[186,4529,4530],{"class":188,"line":898},[186,4531,1173],{"class":228},[186,4533,4534,4536,4539,4541,4543,4545,4547,4549,4552],{"class":188,"line":903},[186,4535,1179],{"class":228},[186,4537,4538],{"class":345},"100",[186,4540,366],{"class":228},[186,4542,247],{"class":246},[186,4544,260],{"class":224},[186,4546,549],{"class":263},[186,4548,453],{"class":224},[186,4550,4551],{"class":263}," candidates",[186,4553,267],{"class":224},[186,4555,4556,4558,4560,4563,4566,4568],{"class":188,"line":909},[186,4557,1702],{"class":246},[186,4559,3391],{"class":224},[186,4561,4562],{"class":228},"candidates ",[186,4564,4565],{"class":224},"==",[186,4567,3204],{"class":345},[186,4569,2642],{"class":246},[186,4571,4572,4574,4576,4578,4580,4582,4585,4587],{"class":188,"line":915},[186,4573,1572],{"class":250},[186,4575,260],{"class":228},[186,4577,1344],{"class":224},[186,4579,366],{"class":228},[186,4581,306],{"class":224},[186,4583,4584],{"class":309},"No players in range",[186,4586,306],{"class":224},[186,4588,267],{"class":228},[186,4590,4591],{"class":188,"line":920},[186,4592,1727],{"class":246},[186,4594,4595],{"class":188,"line":925},[186,4596,906],{"class":246},[186,4598,4599],{"class":188,"line":931},[186,4600,218],{"emptyLinePlaceholder":217},[186,4602,4603],{"class":188,"line":959},[186,4604,4605],{"class":192},"        -- Sort by closest skill rating\n",[186,4607,4608,4611,4614,4616,4618,4621,4623,4626],{"class":188,"line":976},[186,4609,4610],{"class":250},"        table.sort",[186,4612,4613],{"class":228},"(candidates, ",[186,4615,247],{"class":246},[186,4617,260],{"class":224},[186,4619,4620],{"class":263},"a",[186,4622,453],{"class":224},[186,4624,4625],{"class":263}," b",[186,4627,267],{"class":224},[186,4629,4630,4633,4636,4639,4642,4644,4647],{"class":188,"line":992},[186,4631,4632],{"class":246},"            return",[186,4634,4635],{"class":250}," math.abs",[186,4637,4638],{"class":228},"(a.",[186,4640,4641],{"class":276},"skill_rating",[186,4643,354],{"class":224},[186,4645,4646],{"class":228}," skillRating) ",[186,4648,4649],{"class":224},"\u003C\n",[186,4651,4652,4655,4658,4660,4662],{"class":188,"line":997},[186,4653,4654],{"class":250},"                   math.abs",[186,4656,4657],{"class":228},"(b.",[186,4659,4641],{"class":276},[186,4661,354],{"class":224},[186,4663,4664],{"class":228}," skillRating)\n",[186,4666,4667,4669],{"class":188,"line":1012},[186,4668,2047],{"class":246},[186,4670,267],{"class":228},[186,4672,4673],{"class":188,"line":1037},[186,4674,218],{"emptyLinePlaceholder":217},[186,4676,4677,4679,4682,4684],{"class":188,"line":1065},[186,4678,1198],{"class":250},[186,4680,4681],{"class":228},"(candidates[",[186,4683,357],{"class":345},[186,4685,4686],{"class":228},"])\n",[186,4688,4689,4691],{"class":188,"line":1084},[186,4690,1212],{"class":246},[186,4692,267],{"class":228},[186,4694,4695],{"class":188,"line":1090},[186,4696,422],{"class":246},[186,4698,4699],{"class":188,"line":1109},[186,4700,218],{"emptyLinePlaceholder":217},[186,4702,4703],{"class":188,"line":1121},[186,4704,4705],{"class":192},"-- Create a match\n",[186,4707,4708,4710,4712,4714,4717,4719,4722,4724,4727,4729,4731],{"class":188,"line":1132},[186,4709,247],{"class":246},[186,4711,3965],{"class":250},[186,4713,254],{"class":228},[186,4715,4716],{"class":250},"CreateMatch",[186,4718,260],{"class":224},[186,4720,4721],{"class":263},"player1",[186,4723,453],{"class":224},[186,4725,4726],{"class":263}," player2",[186,4728,453],{"class":224},[186,4730,471],{"class":263},[186,4732,267],{"class":224},[186,4734,4735,4737,4740,4742],{"class":188,"line":1143},[186,4736,2775],{"class":224},[186,4738,4739],{"class":228}," match ",[186,4741,232],{"class":224},[186,4743,652],{"class":228},[186,4745,4746,4749,4751],{"class":188,"line":1154},[186,4747,4748],{"class":228},"        players ",[186,4750,232],{"class":224},[186,4752,652],{"class":228},[186,4754,4755],{"class":188,"line":1165},[186,4756,1891],{"class":228},[186,4758,4759,4761,4763,4766,4768],{"class":188,"line":1170},[186,4760,658],{"class":228},[186,4762,232],{"class":224},[186,4764,4765],{"class":228}," player1.",[186,4767,450],{"class":276},[186,4769,1118],{"class":228},[186,4771,4772,4774,4776,4778,4781],{"class":188,"line":1176},[186,4773,669],{"class":228},[186,4775,232],{"class":224},[186,4777,4765],{"class":228},[186,4779,4780],{"class":276},"username",[186,4782,1118],{"class":228},[186,4784,4785,4788,4790,4792],{"class":188,"line":1195},[186,4786,4787],{"class":228},"                skill_rating ",[186,4789,232],{"class":224},[186,4791,4765],{"class":228},[186,4793,4794],{"class":276},"skill_rating\n",[186,4796,4797],{"class":188,"line":1209},[186,4798,3061],{"class":228},[186,4800,4801],{"class":188,"line":1217},[186,4802,1891],{"class":228},[186,4804,4805,4807,4809,4812,4814],{"class":188,"line":1222},[186,4806,658],{"class":228},[186,4808,232],{"class":224},[186,4810,4811],{"class":228}," player2.",[186,4813,450],{"class":276},[186,4815,1118],{"class":228},[186,4817,4818,4820,4822,4824,4826],{"class":188,"line":1227},[186,4819,669],{"class":228},[186,4821,232],{"class":224},[186,4823,4811],{"class":228},[186,4825,4780],{"class":276},[186,4827,1118],{"class":228},[186,4829,4830,4832,4834,4836],{"class":188,"line":1233},[186,4831,4787],{"class":228},[186,4833,232],{"class":224},[186,4835,4811],{"class":228},[186,4837,4794],{"class":276},[186,4839,4840],{"class":188,"line":1259},[186,4841,716],{"class":228},[186,4843,4844],{"class":188,"line":1276},[186,4845,4846],{"class":228},"        },\n",[186,4848,4849,4852,4854,4856,4859,4861],{"class":188,"line":1281},[186,4850,4851],{"class":228},"        status ",[186,4853,232],{"class":224},[186,4855,490],{"class":224},[186,4857,4858],{"class":309},"pending",[186,4860,306],{"class":224},[186,4862,1118],{"class":228},[186,4864,4865,4868,4870,4872],{"class":188,"line":1294},[186,4866,4867],{"class":228},"        created_at ",[186,4869,232],{"class":224},[186,4871,707],{"class":250},[186,4873,4874],{"class":228},"(),\n",[186,4876,4877,4880,4882,4884,4887,4889,4891,4893,4895],{"class":188,"line":1307},[186,4878,4879],{"class":228},"        skill_diff ",[186,4881,232],{"class":224},[186,4883,4635],{"class":250},[186,4885,4886],{"class":228},"(player1.",[186,4888,4641],{"class":276},[186,4890,354],{"class":224},[186,4892,4811],{"class":228},[186,4894,4641],{"class":276},[186,4896,267],{"class":228},[186,4898,4899],{"class":188,"line":1323},[186,4900,2453],{"class":228},[186,4902,4903],{"class":188,"line":1336},[186,4904,218],{"emptyLinePlaceholder":217},[186,4906,4907],{"class":188,"line":1354},[186,4908,4909],{"class":192},"    -- Remove players from queue\n",[186,4911,4912,4914,4916,4918,4921],{"class":188,"line":1359},[186,4913,3980],{"class":228},[186,4915,3993],{"class":276},[186,4917,298],{"class":228},[186,4919,4920],{"class":250},"DeleteManyAsync",[186,4922,1009],{"class":228},[186,4924,4925,4927,4929,4931,4933,4936,4938,4940,4942,4945,4947,4950,4952],{"class":188,"line":1364},[186,4926,4456],{"class":228},[186,4928,232],{"class":224},[186,4930,1403],{"class":228},[186,4932,306],{"class":224},[186,4934,4935],{"class":309},"$in",[186,4937,306],{"class":224},[186,4939,781],{"class":228},[186,4941,232],{"class":224},[186,4943,4944],{"class":228}," { player1.",[186,4946,450],{"class":276},[186,4948,4949],{"class":228},", player2.",[186,4951,450],{"class":276},[186,4953,4954],{"class":228}," } }\n",[186,4956,4957,4959,4961],{"class":188,"line":1369},[186,4958,1179],{"class":228},[186,4960,247],{"class":246},[186,4962,710],{"class":224},[186,4964,4965],{"class":188,"line":1375},[186,4966,4967],{"class":192},"        -- Create match record\n",[186,4969,4970,4972,4974,4976,4978,4981,4983,4985,4987,4989,4992],{"class":188,"line":1390},[186,4971,4190],{"class":228},[186,4973,4019],{"class":276},[186,4975,298],{"class":228},[186,4977,856],{"class":250},[186,4979,4980],{"class":228},"(match, ",[186,4982,247],{"class":246},[186,4984,260],{"class":224},[186,4986,549],{"class":263},[186,4988,453],{"class":224},[186,4990,4991],{"class":263}," matchId",[186,4993,267],{"class":224},[186,4995,4996,4998,5001],{"class":188,"line":1424},[186,4997,562],{"class":246},[186,4999,5000],{"class":228}," err ",[186,5002,583],{"class":246},[186,5004,5005,5007,5009,5011],{"class":188,"line":1441},[186,5006,1339],{"class":250},[186,5008,260],{"class":228},[186,5010,1344],{"class":224},[186,5012,5013],{"class":228},", err)\n",[186,5015,5016],{"class":188,"line":1462},[186,5017,838],{"class":246},[186,5019,5020,5023,5026,5028],{"class":188,"line":1468},[186,5021,5022],{"class":228},"                match.",[186,5024,5025],{"class":276},"_id",[186,5027,279],{"class":224},[186,5029,5030],{"class":228}," matchId\n",[186,5032,5033,5035],{"class":188,"line":1474},[186,5034,1339],{"class":250},[186,5036,5037],{"class":228},"(match)\n",[186,5039,5040],{"class":188,"line":1479},[186,5041,633],{"class":246},[186,5043,5044,5046],{"class":188,"line":1484},[186,5045,2047],{"class":246},[186,5047,267],{"class":228},[186,5049,5050,5052],{"class":188,"line":1489},[186,5051,1212],{"class":246},[186,5053,267],{"class":228},[186,5055,5056],{"class":188,"line":1494},[186,5057,422],{"class":246},[186,5059,5060],{"class":188,"line":1500},[186,5061,218],{"emptyLinePlaceholder":217},[186,5063,5064],{"class":188,"line":1522},[186,5065,5066],{"class":192},"-- Get queue statistics\n",[186,5068,5069,5071,5073,5075,5078,5080,5083],{"class":188,"line":1536},[186,5070,247],{"class":246},[186,5072,3965],{"class":250},[186,5074,254],{"class":228},[186,5076,5077],{"class":250},"GetQueueStats",[186,5079,260],{"class":224},[186,5081,5082],{"class":263},"callback",[186,5084,267],{"class":224},[186,5086,5087,5089,5091,5093,5095],{"class":188,"line":1546},[186,5088,3980],{"class":228},[186,5090,3993],{"class":276},[186,5092,298],{"class":228},[186,5094,1006],{"class":250},[186,5096,1009],{"class":228},[186,5098,5099],{"class":188,"line":1554},[186,5100,1087],{"class":228},[186,5102,5103,5105,5107,5110,5112,5114,5116],{"class":188,"line":1569},[186,5104,1093],{"class":228},[186,5106,306],{"class":224},[186,5108,5109],{"class":309},"$group",[186,5111,306],{"class":224},[186,5113,781],{"class":228},[186,5115,232],{"class":224},[186,5117,652],{"class":228},[186,5119,5120,5122,5124,5127],{"class":188,"line":1581},[186,5121,1157],{"class":228},[186,5123,232],{"class":224},[186,5125,5126],{"class":224}," nil",[186,5128,1118],{"class":228},[186,5130,5131,5134,5136,5138,5140,5143,5145,5147,5149,5151],{"class":188,"line":1586},[186,5132,5133],{"class":228},"                count ",[186,5135,232],{"class":224},[186,5137,1403],{"class":228},[186,5139,306],{"class":224},[186,5141,5142],{"class":309},"$sum",[186,5144,306],{"class":224},[186,5146,781],{"class":228},[186,5148,232],{"class":224},[186,5150,346],{"class":345},[186,5152,1885],{"class":228},[186,5154,5155,5158,5160,5162,5164,5167,5169,5171,5173,5175,5178,5181],{"class":188,"line":1591},[186,5156,5157],{"class":228},"                avg_skill ",[186,5159,232],{"class":224},[186,5161,1403],{"class":228},[186,5163,306],{"class":224},[186,5165,5166],{"class":309},"$avg",[186,5168,306],{"class":224},[186,5170,781],{"class":228},[186,5172,232],{"class":224},[186,5174,490],{"class":224},[186,5176,5177],{"class":309},"$skill_rating",[186,5179,5180],{"class":224},"\" ",[186,5182,5183],{"class":228},"},\n",[186,5185,5186,5189,5191,5193,5195,5198,5200,5202,5204,5206,5208,5210],{"class":188,"line":1596},[186,5187,5188],{"class":228},"                min_skill ",[186,5190,232],{"class":224},[186,5192,1403],{"class":228},[186,5194,306],{"class":224},[186,5196,5197],{"class":309},"$min",[186,5199,306],{"class":224},[186,5201,781],{"class":228},[186,5203,232],{"class":224},[186,5205,490],{"class":224},[186,5207,5177],{"class":309},[186,5209,5180],{"class":224},[186,5211,5183],{"class":228},[186,5213,5214,5217,5219,5221,5223,5226,5228,5230,5232,5234,5236,5238],{"class":188,"line":1601},[186,5215,5216],{"class":228},"                max_skill ",[186,5218,232],{"class":224},[186,5220,1403],{"class":228},[186,5222,306],{"class":224},[186,5224,5225],{"class":309},"$max",[186,5227,306],{"class":224},[186,5229,781],{"class":228},[186,5231,232],{"class":224},[186,5233,490],{"class":224},[186,5235,5177],{"class":309},[186,5237,5180],{"class":224},[186,5239,5183],{"class":228},[186,5241,5242,5245,5247,5249,5251,5253,5255,5257,5259],{"class":188,"line":1607},[186,5243,5244],{"class":228},"                avg_wait ",[186,5246,232],{"class":224},[186,5248,1403],{"class":228},[186,5250,306],{"class":224},[186,5252,5166],{"class":309},[186,5254,306],{"class":224},[186,5256,781],{"class":228},[186,5258,232],{"class":224},[186,5260,652],{"class":228},[186,5262,5263,5266,5268,5271,5273,5275,5277,5280,5283,5286,5288,5291,5293],{"class":188,"line":1638},[186,5264,5265],{"class":228},"                    [",[186,5267,306],{"class":224},[186,5269,5270],{"class":309},"$subtract",[186,5272,306],{"class":224},[186,5274,781],{"class":228},[186,5276,232],{"class":224},[186,5278,5279],{"class":228}," { ",[186,5281,5282],{"class":250},"os.time",[186,5284,5285],{"class":228},"(), ",[186,5287,306],{"class":224},[186,5289,5290],{"class":309},"$queued_at",[186,5292,5180],{"class":224},[186,5294,2458],{"class":228},[186,5296,5297],{"class":188,"line":1655},[186,5298,5299],{"class":228},"                }}\n",[186,5301,5302],{"class":188,"line":1671},[186,5303,716],{"class":228},[186,5305,5306],{"class":188,"line":1676},[186,5307,1173],{"class":228},[186,5309,5310,5312,5314,5316,5318,5320,5322],{"class":188,"line":1699},[186,5311,1179],{"class":228},[186,5313,247],{"class":246},[186,5315,260],{"class":224},[186,5317,549],{"class":263},[186,5319,453],{"class":224},[186,5321,1190],{"class":263},[186,5323,267],{"class":224},[186,5325,5326,5328,5331,5333,5335,5338,5340,5342],{"class":188,"line":1712},[186,5327,1702],{"class":246},[186,5329,5330],{"class":228}," results ",[186,5332,568],{"class":224},[186,5334,3391],{"class":224},[186,5336,5337],{"class":228},"results ",[186,5339,3545],{"class":224},[186,5341,3204],{"class":345},[186,5343,2642],{"class":246},[186,5345,5346,5348,5351,5353],{"class":188,"line":1724},[186,5347,1572],{"class":250},[186,5349,5350],{"class":228},"(results[",[186,5352,357],{"class":345},[186,5354,4686],{"class":228},[186,5356,5357],{"class":188,"line":1730},[186,5358,3674],{"class":246},[186,5360,5361,5363],{"class":188,"line":1735},[186,5362,1572],{"class":250},[186,5364,1009],{"class":228},[186,5366,5367,5369,5371,5373],{"class":188,"line":1740},[186,5368,5133],{"class":228},[186,5370,232],{"class":224},[186,5372,3204],{"class":345},[186,5374,1118],{"class":228},[186,5376,5377,5379,5381,5383],{"class":188,"line":1772},[186,5378,5157],{"class":228},[186,5380,232],{"class":224},[186,5382,3204],{"class":345},[186,5384,1118],{"class":228},[186,5386,5387,5389,5391,5393],{"class":188,"line":1777},[186,5388,5188],{"class":228},[186,5390,232],{"class":224},[186,5392,3204],{"class":345},[186,5394,1118],{"class":228},[186,5396,5397,5399,5401,5403],{"class":188,"line":1791},[186,5398,5216],{"class":228},[186,5400,232],{"class":224},[186,5402,3204],{"class":345},[186,5404,1118],{"class":228},[186,5406,5407,5409,5411],{"class":188,"line":1813},[186,5408,5244],{"class":228},[186,5410,232],{"class":224},[186,5412,1162],{"class":345},[186,5414,5415],{"class":188,"line":1838},[186,5416,5417],{"class":228},"            })\n",[186,5419,5420],{"class":188,"line":1857},[186,5421,906],{"class":246},[186,5423,5424,5426],{"class":188,"line":1888},[186,5425,1212],{"class":246},[186,5427,267],{"class":228},[186,5429,5430],{"class":188,"line":1894},[186,5431,422],{"class":246},[186,5433,5434],{"class":188,"line":1912},[186,5435,218],{"emptyLinePlaceholder":217},[186,5437,5438],{"class":188,"line":1924},[186,5439,5440],{"class":192},"-- Process queue and create matches\n",[186,5442,5443,5445,5447,5449,5452,5454,5456],{"class":188,"line":1936},[186,5444,247],{"class":246},[186,5446,3965],{"class":250},[186,5448,254],{"class":228},[186,5450,5451],{"class":250},"ProcessQueue",[186,5453,260],{"class":224},[186,5455,5082],{"class":263},[186,5457,267],{"class":224},[186,5459,5460,5462,5465,5467],{"class":188,"line":1948},[186,5461,2775],{"class":224},[186,5463,5464],{"class":228}," created ",[186,5466,232],{"class":224},[186,5468,1162],{"class":345},[186,5470,5471],{"class":188,"line":1958},[186,5472,218],{"emptyLinePlaceholder":217},[186,5474,5475,5477,5479,5481,5483,5485,5488,5490,5492,5494,5496,5498,5501],{"class":188,"line":1964},[186,5476,3980],{"class":228},[186,5478,3993],{"class":276},[186,5480,298],{"class":228},[186,5482,1531],{"class":250},[186,5484,1717],{"class":228},[186,5486,5487],{"class":345},"1000",[186,5489,366],{"class":228},[186,5491,247],{"class":246},[186,5493,260],{"class":224},[186,5495,549],{"class":263},[186,5497,453],{"class":224},[186,5499,5500],{"class":263}," players",[186,5502,267],{"class":224},[186,5504,5505,5507,5509,5512,5515,5517],{"class":188,"line":1969},[186,5506,1702],{"class":246},[186,5508,3391],{"class":224},[186,5510,5511],{"class":228},"players ",[186,5513,5514],{"class":224},"\u003C",[186,5516,1877],{"class":345},[186,5518,2642],{"class":246},[186,5520,5521,5523,5525,5527],{"class":188,"line":1987},[186,5522,1572],{"class":250},[186,5524,260],{"class":228},[186,5526,1349],{"class":345},[186,5528,267],{"class":228},[186,5530,5531],{"class":188,"line":1993},[186,5532,1727],{"class":246},[186,5534,5535],{"class":188,"line":2014},[186,5536,906],{"class":246},[186,5538,5539],{"class":188,"line":2031},[186,5540,218],{"emptyLinePlaceholder":217},[186,5542,5543],{"class":188,"line":2036},[186,5544,5545],{"class":192},"        -- Sort by queue time\n",[186,5547,5548,5550,5553,5555,5557,5559,5561,5563],{"class":188,"line":2044},[186,5549,4610],{"class":250},[186,5551,5552],{"class":228},"(players, ",[186,5554,247],{"class":246},[186,5556,260],{"class":224},[186,5558,4620],{"class":263},[186,5560,453],{"class":224},[186,5562,4625],{"class":263},[186,5564,267],{"class":224},[186,5566,5567,5569,5572,5575,5578,5581],{"class":188,"line":2052},[186,5568,4632],{"class":246},[186,5570,5571],{"class":228}," a.",[186,5573,5574],{"class":276},"queued_at",[186,5576,5577],{"class":224}," \u003C",[186,5579,5580],{"class":228}," b.",[186,5582,5583],{"class":276},"queued_at\n",[186,5585,5586,5588],{"class":188,"line":2059},[186,5587,2047],{"class":246},[186,5589,267],{"class":228},[186,5591,5592],{"class":188,"line":2064},[186,5593,218],{"emptyLinePlaceholder":217},[186,5595,5596,5598,5600,5603,5605,5608],{"class":188,"line":2069},[186,5597,1743],{"class":224},[186,5599,3520],{"class":246},[186,5601,5602],{"class":250}," processNext",[186,5604,260],{"class":224},[186,5606,5607],{"class":263},"index",[186,5609,267],{"class":224},[186,5611,5612,5614,5616,5618,5620,5622],{"class":188,"line":3643},[186,5613,562],{"class":246},[186,5615,3542],{"class":228},[186,5617,3545],{"class":224},[186,5619,3391],{"class":224},[186,5621,5511],{"class":228},[186,5623,583],{"class":246},[186,5625,5626,5628],{"class":188,"line":3648},[186,5627,1339],{"class":250},[186,5629,5630],{"class":228},"(created)\n",[186,5632,5633],{"class":188,"line":3663},[186,5634,627],{"class":246},[186,5636,5637],{"class":188,"line":3671},[186,5638,633],{"class":246},[186,5640,5641],{"class":188,"line":3677},[186,5642,218],{"emptyLinePlaceholder":217},[186,5644,5645,5647,5649,5651],{"class":188,"line":3691},[186,5646,644],{"class":224},[186,5648,1331],{"class":228},[186,5650,232],{"class":224},[186,5652,5653],{"class":228}," players[index]\n",[186,5655,5656],{"class":188,"line":3696},[186,5657,218],{"emptyLinePlaceholder":217},[186,5659,5660],{"class":188,"line":3701},[186,5661,5662],{"class":192},"            -- Check if still in queue\n",[186,5664,5665,5668,5670,5672,5674,5676,5678,5680,5682,5684,5686,5688,5690,5692,5695],{"class":188,"line":3706},[186,5666,5667],{"class":228},"            Matchmaking.",[186,5669,3993],{"class":276},[186,5671,298],{"class":228},[186,5673,519],{"class":250},[186,5675,389],{"class":228},[186,5677,232],{"class":224},[186,5679,1417],{"class":228},[186,5681,450],{"class":276},[186,5683,360],{"class":228},[186,5685,247],{"class":246},[186,5687,260],{"class":224},[186,5689,549],{"class":263},[186,5691,453],{"class":224},[186,5693,5694],{"class":263}," stillQueued",[186,5696,267],{"class":224},[186,5698,5699,5701,5703,5706],{"class":188,"line":3718},[186,5700,595],{"class":246},[186,5702,1328],{"class":224},[186,5704,5705],{"class":228}," stillQueued ",[186,5707,583],{"class":246},[186,5709,5710,5713,5716,5718,5720],{"class":188,"line":3755},[186,5711,5712],{"class":250},"                    processNext",[186,5714,5715],{"class":228},"(index ",[186,5717,1450],{"class":224},[186,5719,346],{"class":345},[186,5721,267],{"class":228},[186,5723,5724],{"class":188,"line":3785},[186,5725,5726],{"class":246},"                    return\n",[186,5728,5729],{"class":188,"line":3814},[186,5730,1465],{"class":246},[186,5732,5733],{"class":188,"line":3844},[186,5734,218],{"emptyLinePlaceholder":217},[186,5736,5737],{"class":188,"line":3874},[186,5738,5739],{"class":192},"                -- Find match\n",[186,5741,5742,5745,5747,5750,5752,5754,5756,5758,5761,5763,5765,5767,5770],{"class":188,"line":3879},[186,5743,5744],{"class":228},"                Matchmaking.",[186,5746,4402],{"class":250},[186,5748,5749],{"class":228},"(player.",[186,5751,450],{"class":276},[186,5753,1455],{"class":228},[186,5755,4641],{"class":276},[186,5757,366],{"class":228},[186,5759,5760],{"class":345},"200",[186,5762,366],{"class":228},[186,5764,247],{"class":246},[186,5766,260],{"class":224},[186,5768,5769],{"class":263},"opponent",[186,5771,267],{"class":224},[186,5773,5774,5776,5779],{"class":188,"line":3884},[186,5775,873],{"class":246},[186,5777,5778],{"class":228}," opponent ",[186,5780,583],{"class":246},[186,5782,5783,5786,5788,5791,5793,5795,5798],{"class":188,"line":3897},[186,5784,5785],{"class":228},"                        Matchmaking.",[186,5787,4716],{"class":250},[186,5789,5790],{"class":228},"(player, opponent, ",[186,5792,247],{"class":246},[186,5794,260],{"class":224},[186,5796,5797],{"class":263},"match",[186,5799,267],{"class":224},[186,5801,5802,5805,5807],{"class":188,"line":3902},[186,5803,5804],{"class":246},"                            if",[186,5806,4739],{"class":228},[186,5808,583],{"class":246},[186,5810,5811,5814,5816,5818,5820],{"class":188,"line":3907},[186,5812,5813],{"class":228},"                                created ",[186,5815,232],{"class":224},[186,5817,5464],{"class":228},[186,5819,1450],{"class":224},[186,5821,3351],{"class":345},[186,5823,5825,5828,5830,5832,5835,5837,5839,5841,5843,5845,5848,5850,5853,5855],{"class":188,"line":5824},172,[186,5826,5827],{"class":250},"                                print",[186,5829,260],{"class":228},[186,5831,306],{"class":224},[186,5833,5834],{"class":309},"Created match:",[186,5836,306],{"class":224},[186,5838,1455],{"class":228},[186,5840,4780],{"class":276},[186,5842,366],{"class":228},[186,5844,306],{"class":224},[186,5846,5847],{"class":309},"vs",[186,5849,306],{"class":224},[186,5851,5852],{"class":228},", opponent.",[186,5854,4780],{"class":276},[186,5856,267],{"class":228},[186,5858,5860],{"class":188,"line":5859},173,[186,5861,5862],{"class":246},"                            end\n",[186,5864,5866,5869,5871,5873,5875],{"class":188,"line":5865},174,[186,5867,5868],{"class":250},"                            processNext",[186,5870,5715],{"class":228},[186,5872,1450],{"class":224},[186,5874,346],{"class":345},[186,5876,267],{"class":228},[186,5878,5880,5883],{"class":188,"line":5879},175,[186,5881,5882],{"class":246},"                        end",[186,5884,267],{"class":228},[186,5886,5888],{"class":188,"line":5887},176,[186,5889,5890],{"class":246},"                    else\n",[186,5892,5894,5897,5899,5901,5903],{"class":188,"line":5893},177,[186,5895,5896],{"class":250},"                        processNext",[186,5898,5715],{"class":228},[186,5900,1450],{"class":224},[186,5902,346],{"class":345},[186,5904,267],{"class":228},[186,5906,5908],{"class":188,"line":5907},178,[186,5909,826],{"class":246},[186,5911,5913,5915],{"class":188,"line":5912},179,[186,5914,893],{"class":246},[186,5916,267],{"class":228},[186,5918,5920,5922],{"class":188,"line":5919},180,[186,5921,3666],{"class":246},[186,5923,267],{"class":228},[186,5925,5927],{"class":188,"line":5926},181,[186,5928,906],{"class":246},[186,5930,5932],{"class":188,"line":5931},182,[186,5933,218],{"emptyLinePlaceholder":217},[186,5935,5937,5940,5942,5944],{"class":188,"line":5936},183,[186,5938,5939],{"class":250},"        processNext",[186,5941,260],{"class":228},[186,5943,357],{"class":345},[186,5945,267],{"class":228},[186,5947,5949,5951],{"class":188,"line":5948},184,[186,5950,1212],{"class":246},[186,5952,267],{"class":228},[186,5954,5956],{"class":188,"line":5955},185,[186,5957,422],{"class":246},[186,5959,5961],{"class":188,"line":5960},186,[186,5962,218],{"emptyLinePlaceholder":217},[186,5964,5966,5968],{"class":188,"line":5965},187,[186,5967,2072],{"class":246},[186,5969,5970],{"class":228}," Matchmaking\n",[171,5972,5974],{"id":5973},"usage-example","Usage Example",[176,5976,5978],{"className":178,"code":5977,"language":180,"meta":181,"style":181},"-- Initialize systems\nrequire(\"mongo\")\n\nlocal client = MongoDB.Client(\"mongodb:\u002F\u002Flocalhost:27017\")\nlocal db = client:Database(\"gameserver\")\n\nLeaderboard.Initialize(db)\nAchievements.Initialize(db)\nMatchmaking.Initialize(db)\n\n-- Submit a score\nLeaderboard.SubmitScore(\"STEAM_0:1:12345\", \"Player1\", 1500, \"kills\", function(success)\n    print(\"Score submitted:\", success)\nend)\n\n-- Get top 10\nLeaderboard.GetTop(\"kills\", 10, function(top)\n    print(\"=== Top 10 ===\")\n    for i, entry in ipairs(top) do\n        print(i .. \". \" .. entry.username .. \" - \" .. entry.score)\n    end\nend)\n\n-- Award achievement\nAchievements.Award(\"STEAM_0:1:12345\", \"first_kill\", function(success, ach)\n    if success then\n        print(\"Achievement unlocked:\", ach.name)\n    end\nend)\n\n-- Matchmaking\nMatchmaking.JoinQueue(\"STEAM_0:1:12345\", \"Player1\", 1500)\nMatchmaking.JoinQueue(\"STEAM_0:1:67890\", \"Player2\", 1450)\n\ntimer.Create(\"ProcessMatchmaking\", 5, 0, function()\n    Matchmaking.ProcessQueue(function(created)\n        if created > 0 then\n            print(\"Created\", created, \"matches\")\n        end\n    end)\nend)\n",[183,5979,5980,5985,6001,6005,6031,6059,6063,6073,6081,6090,6094,6098,6145,6162,6169,6173,6178,6208,6223,6239,6282,6286,6292,6296,6300,6336,6344,6364,6368,6374,6378,6383,6411,6442,6446,6478,6495,6507,6532,6536,6542],{"__ignoreMap":181},[186,5981,5982],{"class":188,"line":189},[186,5983,5984],{"class":192},"-- Initialize systems\n",[186,5986,5987,5990,5992,5994,5997,5999],{"class":188,"line":196},[186,5988,5989],{"class":250},"require",[186,5991,260],{"class":228},[186,5993,306],{"class":224},[186,5995,5996],{"class":309},"mongo",[186,5998,306],{"class":224},[186,6000,267],{"class":228},[186,6002,6003],{"class":188,"line":202},[186,6004,218],{"emptyLinePlaceholder":217},[186,6006,6007,6009,6012,6014,6017,6020,6022,6024,6027,6029],{"class":188,"line":208},[186,6008,225],{"class":224},[186,6010,6011],{"class":228}," client ",[186,6013,232],{"class":224},[186,6015,6016],{"class":228}," MongoDB.",[186,6018,6019],{"class":250},"Client",[186,6021,260],{"class":228},[186,6023,306],{"class":224},[186,6025,6026],{"class":309},"mongodb:\u002F\u002Flocalhost:27017",[186,6028,306],{"class":224},[186,6030,267],{"class":228},[186,6032,6033,6035,6038,6040,6043,6045,6048,6050,6052,6055,6057],{"class":188,"line":214},[186,6034,225],{"class":224},[186,6036,6037],{"class":228}," db ",[186,6039,232],{"class":224},[186,6041,6042],{"class":276}," client",[186,6044,298],{"class":228},[186,6046,6047],{"class":250},"Database",[186,6049,260],{"class":228},[186,6051,306],{"class":224},[186,6053,6054],{"class":309},"gameserver",[186,6056,306],{"class":224},[186,6058,267],{"class":228},[186,6060,6061],{"class":188,"line":221},[186,6062,218],{"emptyLinePlaceholder":217},[186,6064,6065,6068,6070],{"class":188,"line":238},[186,6066,6067],{"class":228},"Leaderboard.",[186,6069,257],{"class":250},[186,6071,6072],{"class":228},"(db)\n",[186,6074,6075,6077,6079],{"class":188,"line":243},[186,6076,2131],{"class":228},[186,6078,257],{"class":250},[186,6080,6072],{"class":228},[186,6082,6083,6086,6088],{"class":188,"line":270},[186,6084,6085],{"class":228},"Matchmaking.",[186,6087,257],{"class":250},[186,6089,6072],{"class":228},[186,6091,6092],{"class":188,"line":285},[186,6093,218],{"emptyLinePlaceholder":217},[186,6095,6096],{"class":188,"line":317},[186,6097,433],{"class":192},[186,6099,6100,6102,6104,6106,6108,6111,6113,6115,6117,6120,6122,6124,6127,6129,6131,6133,6135,6137,6139,6141,6143],{"class":188,"line":322},[186,6101,6067],{"class":228},[186,6103,445],{"class":250},[186,6105,260],{"class":228},[186,6107,306],{"class":224},[186,6109,6110],{"class":309},"STEAM_0:1:12345",[186,6112,306],{"class":224},[186,6114,366],{"class":228},[186,6116,306],{"class":224},[186,6118,6119],{"class":309},"Player1",[186,6121,306],{"class":224},[186,6123,366],{"class":228},[186,6125,6126],{"class":345},"1500",[186,6128,366],{"class":228},[186,6130,306],{"class":224},[186,6132,3746],{"class":309},[186,6134,306],{"class":224},[186,6136,366],{"class":228},[186,6138,247],{"class":246},[186,6140,260],{"class":224},[186,6142,3616],{"class":263},[186,6144,267],{"class":224},[186,6146,6147,6150,6152,6154,6157,6159],{"class":188,"line":328},[186,6148,6149],{"class":250},"    print",[186,6151,260],{"class":228},[186,6153,306],{"class":224},[186,6155,6156],{"class":309},"Score submitted:",[186,6158,306],{"class":224},[186,6160,6161],{"class":228},", success)\n",[186,6163,6164,6167],{"class":188,"line":378},[186,6165,6166],{"class":246},"end",[186,6168,267],{"class":228},[186,6170,6171],{"class":188,"line":419},[186,6172,218],{"emptyLinePlaceholder":217},[186,6174,6175],{"class":188,"line":425},[186,6176,6177],{"class":192},"-- Get top 10\n",[186,6179,6180,6182,6184,6186,6188,6190,6192,6194,6197,6199,6201,6203,6206],{"class":188,"line":430},[186,6181,6067],{"class":228},[186,6183,940],{"class":250},[186,6185,260],{"class":228},[186,6187,306],{"class":224},[186,6189,3746],{"class":309},[186,6191,306],{"class":224},[186,6193,366],{"class":228},[186,6195,6196],{"class":345},"10",[186,6198,366],{"class":228},[186,6200,247],{"class":246},[186,6202,260],{"class":224},[186,6204,6205],{"class":263},"top",[186,6207,267],{"class":224},[186,6209,6210,6212,6214,6216,6219,6221],{"class":188,"line":436},[186,6211,6149],{"class":250},[186,6213,260],{"class":228},[186,6215,306],{"class":224},[186,6217,6218],{"class":309},"=== Top 10 ===",[186,6220,306],{"class":224},[186,6222,267],{"class":228},[186,6224,6225,6228,6230,6232,6234,6237],{"class":188,"line":476},[186,6226,6227],{"class":246},"    for",[186,6229,1999],{"class":228},[186,6231,2002],{"class":246},[186,6233,2005],{"class":250},[186,6235,6236],{"class":228},"(top) ",[186,6238,2011],{"class":246},[186,6240,6241,6244,6247,6250,6252,6255,6257,6259,6262,6264,6267,6269,6272,6274,6276,6278,6280],{"class":188,"line":499},[186,6242,6243],{"class":250},"        print",[186,6245,6246],{"class":228},"(i ",[186,6248,6249],{"class":224},"..",[186,6251,490],{"class":224},[186,6253,6254],{"class":309},". ",[186,6256,5180],{"class":224},[186,6258,6249],{"class":224},[186,6260,6261],{"class":228}," entry.",[186,6263,4780],{"class":276},[186,6265,6266],{"class":224}," ..",[186,6268,490],{"class":224},[186,6270,6271],{"class":309}," - ",[186,6273,5180],{"class":224},[186,6275,6249],{"class":224},[186,6277,6261],{"class":228},[186,6279,574],{"class":276},[186,6281,267],{"class":228},[186,6283,6284],{"class":188,"line":504},[186,6285,2836],{"class":246},[186,6287,6288,6290],{"class":188,"line":510},[186,6289,6166],{"class":246},[186,6291,267],{"class":228},[186,6293,6294],{"class":188,"line":525},[186,6295,218],{"emptyLinePlaceholder":217},[186,6297,6298],{"class":188,"line":541},[186,6299,2745],{"class":192},[186,6301,6302,6304,6306,6308,6310,6312,6314,6316,6318,6320,6322,6324,6326,6328,6330,6332,6334],{"class":188,"line":559},[186,6303,2131],{"class":228},[186,6305,2756],{"class":250},[186,6307,260],{"class":228},[186,6309,306],{"class":224},[186,6311,6110],{"class":309},[186,6313,306],{"class":224},[186,6315,366],{"class":228},[186,6317,306],{"class":224},[186,6319,3728],{"class":309},[186,6321,306],{"class":224},[186,6323,366],{"class":228},[186,6325,247],{"class":246},[186,6327,260],{"class":224},[186,6329,3616],{"class":263},[186,6331,453],{"class":224},[186,6333,3621],{"class":263},[186,6335,267],{"class":224},[186,6337,6338,6340,6342],{"class":188,"line":586},[186,6339,2793],{"class":246},[186,6341,3630],{"class":228},[186,6343,583],{"class":246},[186,6345,6346,6348,6350,6352,6355,6357,6360,6362],{"class":188,"line":592},[186,6347,6243],{"class":250},[186,6349,260],{"class":228},[186,6351,306],{"class":224},[186,6353,6354],{"class":309},"Achievement unlocked:",[186,6356,306],{"class":224},[186,6358,6359],{"class":228},", ach.",[186,6361,2945],{"class":276},[186,6363,267],{"class":228},[186,6365,6366],{"class":188,"line":624},[186,6367,2836],{"class":246},[186,6369,6370,6372],{"class":188,"line":630},[186,6371,6166],{"class":246},[186,6373,267],{"class":228},[186,6375,6376],{"class":188,"line":636},[186,6377,218],{"emptyLinePlaceholder":217},[186,6379,6380],{"class":188,"line":641},[186,6381,6382],{"class":192},"-- Matchmaking\n",[186,6384,6385,6387,6389,6391,6393,6395,6397,6399,6401,6403,6405,6407,6409],{"class":188,"line":655},[186,6386,6085],{"class":228},[186,6388,4134],{"class":250},[186,6390,260],{"class":228},[186,6392,306],{"class":224},[186,6394,6110],{"class":309},[186,6396,306],{"class":224},[186,6398,366],{"class":228},[186,6400,306],{"class":224},[186,6402,6119],{"class":309},[186,6404,306],{"class":224},[186,6406,366],{"class":228},[186,6408,6126],{"class":345},[186,6410,267],{"class":228},[186,6412,6413,6415,6417,6419,6421,6424,6426,6428,6430,6433,6435,6437,6440],{"class":188,"line":666},[186,6414,6085],{"class":228},[186,6416,4134],{"class":250},[186,6418,260],{"class":228},[186,6420,306],{"class":224},[186,6422,6423],{"class":309},"STEAM_0:1:67890",[186,6425,306],{"class":224},[186,6427,366],{"class":228},[186,6429,306],{"class":224},[186,6431,6432],{"class":309},"Player2",[186,6434,306],{"class":224},[186,6436,366],{"class":228},[186,6438,6439],{"class":345},"1450",[186,6441,267],{"class":228},[186,6443,6444],{"class":188,"line":677},[186,6445,218],{"emptyLinePlaceholder":217},[186,6447,6448,6451,6454,6456,6458,6461,6463,6465,6468,6470,6472,6474,6476],{"class":188,"line":688},[186,6449,6450],{"class":228},"timer.",[186,6452,6453],{"class":250},"Create",[186,6455,260],{"class":228},[186,6457,306],{"class":224},[186,6459,6460],{"class":309},"ProcessMatchmaking",[186,6462,306],{"class":224},[186,6464,366],{"class":228},[186,6466,6467],{"class":345},"5",[186,6469,366],{"class":228},[186,6471,1349],{"class":345},[186,6473,366],{"class":228},[186,6475,247],{"class":246},[186,6477,710],{"class":224},[186,6479,6480,6482,6484,6486,6488,6490,6493],{"class":188,"line":699},[186,6481,3980],{"class":228},[186,6483,5451],{"class":250},[186,6485,260],{"class":228},[186,6487,247],{"class":246},[186,6489,260],{"class":224},[186,6491,6492],{"class":263},"created",[186,6494,267],{"class":224},[186,6496,6497,6499,6501,6503,6505],{"class":188,"line":713},[186,6498,1702],{"class":246},[186,6500,5464],{"class":228},[186,6502,3545],{"class":224},[186,6504,3204],{"class":345},[186,6506,2642],{"class":246},[186,6508,6509,6512,6514,6516,6519,6521,6524,6526,6528,6530],{"class":188,"line":719},[186,6510,6511],{"class":250},"            print",[186,6513,260],{"class":228},[186,6515,306],{"class":224},[186,6517,6518],{"class":309},"Created",[186,6520,306],{"class":224},[186,6522,6523],{"class":228},", created, ",[186,6525,306],{"class":224},[186,6527,4019],{"class":309},[186,6529,306],{"class":224},[186,6531,267],{"class":228},[186,6533,6534],{"class":188,"line":724},[186,6535,906],{"class":246},[186,6537,6538,6540],{"class":188,"line":733},[186,6539,1212],{"class":246},[186,6541,267],{"class":228},[186,6543,6544,6546],{"class":188,"line":739},[186,6545,6166],{"class":246},[186,6547,267],{"class":228},[171,6549,6551],{"id":6550},"next-steps","Next Steps",[6553,6554,6555,6562],"ul",{},[6556,6557,6558,6561],"li",{},[4620,6559,6560],{"href":126},"Administration"," - Bans and logging",[6556,6563,6564,6566],{},[4620,6565,130],{"href":131}," - Complete method documentation",[6568,6569,6570],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":181,"searchDepth":189,"depth":196,"links":6572},[6573,6574,6575,6576,6577],{"id":173,"depth":196,"text":174},{"id":2078,"depth":196,"text":2079},{"id":3915,"depth":196,"text":3916},{"id":5973,"depth":196,"text":5974},{"id":6550,"depth":196,"text":6551},"Leaderboards, achievements, and matchmaking examples","md",null,{},{"icon":123},{"title":120,"description":6578},"03sAyhkhshRF94zEUgEG-csc0Q9sVdxPRmh3E0BehKM",[6586,6588],{"title":115,"path":116,"stem":117,"description":6587,"icon":118,"children":-1},"Player data management, inventories, and progression systems",{"title":125,"path":126,"stem":127,"description":6589,"icon":128,"children":-1},"Ban system, logging, and server monitoring examples",1774271025392]