diff --git a/src/endpoints/general.py b/src/endpoints/general.py index b885c8e..b09f970 100644 --- a/src/endpoints/general.py +++ b/src/endpoints/general.py @@ -40,7 +40,96 @@ def content_version_latest(version): get_remote_ip() try: print("Responded to content version api call GET") - return jsonify({"LatestSupportedVersion": "te-18f25613-36778-ue4-374f864b"}) + return jsonify({"availableVersions": {"5.5.0_529855dev": "5.5.0_529855dev-1644265094", + "6.6.0_1091934dev": "6.6.0_1091934dev-1680028709", + "6.7.0_1244914dev": "6.7.0_1244914dev-1686157047", + "7.0.0_1269265dev": "7.0.0_1269265dev-1688489919", + "7.1.0_1273986dev": "7.1.0_1273986dev-1688568602", + "7.1.0_1274117dev": "7.1.0_1274117dev-1688574101", + "7.1.0_1274124dev": "7.1.0_1274124dev-1688574720", + "7.1.0_1274234dev": "7.1.0_1274234dev-1688579224", + "7.1.0_1274943dev": "7.1.0_1274943dev-1688657816", + "7.1.0_1275139dev": "7.1.0_1275139dev-1688665451", + "7.1.0_1275191dev": "7.1.0_1275191dev-1688667321", + "7.1.0_1275245dev": "7.1.0_1275245dev-1688668372", + "7.1.0_1275256dev": "7.1.0_1275256dev-1688669209", + "7.2.0_1269696dev": "7.2.0_1269696dev-1688511907", + "7.2.0_1274208dev": "7.2.0_1274208dev-1688578186", + "7.2.0_1274225dev": "7.2.0_1274225dev-1688578617", + "7.2.0_1274762dev": "7.2.0_1274762dev-1688651417", + "7.2.0_1274768dev": "7.2.0_1274768dev-1688651827", + "7.2.0_1274865dev": "7.2.0_1274865dev-1688655571", + "7.2.0_1274930dev": "7.2.0_1274930dev-1688656773", + "7.2.0_1275015dev": "7.2.0_1275015dev-1688660110", + "7.2.0_1275045dev": "7.2.0_1275045dev-1688661324", + "7.2.0_1275275dev": "7.2.0_1275275dev-1688669004", + "7.2.0_1275518dev": "7.2.0_1275518dev-1688678079", + "7.2.0_1275550dev": "7.2.0_1275550dev-1688678716", + "7.3.0_1274067dev": "7.3.0_1274067dev-1688571863", + "7.3.0_1274074dev": "7.3.0_1274074dev-1688572269", + "7.3.0_1275510dev": "7.3.0_1275510dev-1688678288", + "7.4.0_1248745dev": "7.4.0_1248745dev-1686588297", + "7.5.0_1249994dev": "7.5.0_1249994dev-1686681980", + "9999.0.0_609872dev": "9999.0.0_609872dev-1660659418", + "9999.10.0_1265497dev": "9999.10.0_1265497dev-1687899211", + "9999.11.0_657407dev": "9999.11.0_657407dev-1669385085", + "9999.12.0_694236dev": "9999.12.0_694236dev-1676299372", + "9999.13.0_1091319dev": "9999.13.0_1091319dev-1680005487", + "9999.14.0_762536dev": "9999.14.0_762536dev-1677681328", + "9999.15.0_763076dev": "9999.15.0_763076dev-1677688243", + "9999.16.0_877270dev": "9999.16.0_877270dev-1677704562", + "9999.17.0_1274055dev": "9999.17.0_1274055dev-1688571229", + "9999.17.0_1274062dev": "9999.17.0_1274062dev-1688571650", + "9999.17.0_1274136dev": "9999.17.0_1274136dev-1688575745", + "9999.17.0_1274145dev": "9999.17.0_1274145dev-1688576013", + "9999.17.0_1274226dev": "9999.17.0_1274226dev-1688579020", + "9999.17.0_1274249dev": "9999.17.0_1274249dev-1688579726", + "9999.17.0_1275007dev": "9999.17.0_1275007dev-1688660890", + "9999.17.0_1275145dev": "9999.17.0_1275145dev-1688666088", + "9999.17.0_1275180dev": "9999.17.0_1275180dev-1688666695", + "9999.17.0_1275234dev": "9999.17.0_1275234dev-1688668154", + "9999.17.0_1275240dev": "9999.17.0_1275240dev-1688668787", + "9999.17.0_1275286dev": "9999.17.0_1275286dev-1688669831", + "9999.17.0_1275312dev": "9999.17.0_1275312dev-1688670220", + "9999.17.0_1275323dev": "9999.17.0_1275323dev-1688670523", + "9999.17.0_1275398dev": "9999.17.0_1275398dev-1688673817", + "9999.18.0_1269657dev": "9999.18.0_1269657dev-1688509288", + "9999.18.0_1273987dev": "9999.18.0_1273987dev-1688568396", + "9999.18.0_1273989dev": "9999.18.0_1273989dev-1688568812", + "9999.18.0_1274127dev": "9999.18.0_1274127dev-1688574928", + "9999.18.0_1274134dev": "9999.18.0_1274134dev-1688575537", + "9999.18.0_1274392dev": "9999.18.0_1274392dev-1688588936", + "9999.18.0_1274959dev": "9999.18.0_1274959dev-1688657611", + "9999.18.0_1274961dev": "9999.18.0_1274961dev-1688658223", + "9999.18.0_1275143dev": "9999.18.0_1275143dev-1688665667", + "9999.18.0_1275165dev": "9999.18.0_1275165dev-1688666491", + "9999.18.0_1275199dev": "9999.18.0_1275199dev-1688667115", + "9999.18.0_1275200dev": "9999.18.0_1275200dev-1688667940", + "9999.18.0_1275247dev": "9999.18.0_1275247dev-1688668583", + "9999.18.0_1275271dev": "9999.18.0_1275271dev-1688669627", + "9999.19.0_1091258dev": "9999.19.0_1091258dev-1679951263", + "9999.2.0_481897dev": "9999.2.0_481897dev-1632318120", + "9999.20.0_1092886dev": "9999.20.0_1092886dev-1680114849", + "9999.21.0_1274992dev": "9999.21.0_1274992dev-1688658975", + "9999.21.0_1275004dev": "9999.21.0_1275004dev-1688660446", + "9999.3.0_478415dev": "9999.3.0_478415dev-1631543750", + "9999.4.0_569535dev": "9999.4.0_569535dev-1652383024", + "9999.5.0_1245806dev": "9999.5.0_1245806dev-1686163729", + "9999.6.0_644076dev": "9999.6.0_644076dev-1666886965", + "9999.7.0_638225dev": "9999.7.0_638225dev-1666023431", + "9999.8.0_584495dev": "9999.8.0_584495dev-1657129066", + "cauclair_7.3.0_0dev": "cauclair_7.3.0_0dev-1688497884", + "fprevost_7.1.0_0dev": "fprevost_7.1.0_0dev-1688407952", + "jescalante_7.3.0_0dev": "jescalante_7.3.0_0dev-1688673951", + "jkfisera_7.1.0_0dev": "jkfisera_7.1.0_0dev-1688587429", + "jkfisera_9999.17.0_0dev": "jkfisera_9999.17.0_0dev-1688578389", + "m_4.4.0_402831dev": "m_4.4.0_402831dev-1614200535", + "m_5.1.0_486821dev": "m_5.1.0_486821dev-1633535415", + "m_5.2.0_501889dev": "m_5.2.0_501889dev-1637331411", + "m_5.4.0_633895dev": "m_5.4.0_633895dev-1665499070", + "m_5.4.1_689083dev": "m_5.4.1_689083dev-1675261407", + "mcharron_7.0.0_0dev": "mcharron_7.0.0_0dev-1688493123"}}) + # return jsonify({"LatestSupportedVersion": "te-18f25613-36778-ue4-374f864b"}) except TimeoutError: return jsonify({"status": "error"}) except Exception as e: diff --git a/src/endpoints/matchmaking.py b/src/endpoints/matchmaking.py index 5dec839..ebde116 100644 --- a/src/endpoints/matchmaking.py +++ b/src/endpoints/matchmaking.py @@ -6,6 +6,7 @@ from logic.match_manager import match_manager from flask_definitions import * import uuid + @app.route("/api/v1/config/MATCH_MAKING_REGIONS/raw", methods=["GET"]) def match_making_regions_raw(): get_remote_ip() @@ -40,7 +41,7 @@ def queue(): side = request.json.get("side") latencies = request.json.get("latencies") additional_user_ids = request.json.get("additionalUserIds") - check_only = request.json.get("checkOnly") # False = Searching. True = Is searching and waiting for match + check_only = request.json.get("checkOnly") # False = Searching. True = Is searching and waiting for match game_mode = request.json.get("gameMode") region = request.json.get("region") count_a = request.json.get("countA") @@ -48,10 +49,11 @@ def queue(): user_id = request.cookies.get("bhvrSession") spoofed_match_id = "0051681e-72ce-46f0-bda2-752e471d0d08" epoch = datetime.now().timestamp() - logger.graylog_logger(level="info", handler="logging_queue", message=f"User {user_id} is queueing for {category} in {region} with {count_a} hunters and {count_b} runners") + logger.graylog_logger(level="info", handler="logging_queue", + message=f"User {user_id} is queueing for {category} in {region} with {count_a} hunters and {count_b} runners") # return {"status":"QUEUED","queueData":{"ETA":-10000,"position":0,"stable":False}} - #else: + # else: # # check here if more than one User is in the Queue and create a Match. # return {"status":"QUEUED","queueData":{"ETA":-8000,"position":0,"stable":False}} @@ -59,58 +61,79 @@ def queue(): # if data is None: # print("No match found") # # PlaceHolder for If User not in private match + + tmp = {"status": "MATCHED", "queueData": {"ETA": 0, "position": 0, "stable": False}, + "matchData": {"matchId": "asdasdassdasd-ddddd-asdasd-asdas-bfbfbfbfb", "schema": 3, + "category": "oman-100372-dev:None:Windows::us-east-1:1:4:0:G:2", "rank": 1, "geolocation": {}, + "creationDateTime": 10101010101, "status": "CREATED", + "creator": "asdasdasdasdasdasdasd", "customData": {}, "version": 1, + "skill": {"longitude": 1.1, "latitude": 1.1, "rank": 20, + "rating": {"rating": 11111, "RD": 111.1111, "volatility": 1.11}, "countries": ["AT"], + "x": 20, "isSuspicious": False, "isProtected": False, "version": 2}, "churn": 0, + "props": {"countA": 1, + "countB": 4, "gameMode": "None", "platform": "Windows", "isDedicated": False}, + "reason": "", "sideA": ["asdasdasdasdasdasdasd"], + "sideB": ["dsadasdasdasdasdasddsa"], + "playerHistory": ["asdasdasdasdasdasdasd", + "dsadasdasdasdasdasddsa"]}} if user_id == "619d6f42-db87-4f3e-8dc9-3c9995613614": - return jsonify({"status": "MATCHED", "QueueData":{"Position":0, "ETA":0, "Stable": False, "SizeA":1, "SizeB":4}, - "MatchData": {"MatchId": spoofed_match_id, "Category": category, "Rank": rank, - "CreationDateTime": epoch, "ExcludeFriends": False, - "ExcludeClanMembers": False, "Status": "WaitingForPlayers", "Creator": "00658d11-2dfd-41e8-b6d2-2462e8f3aa47", - "Players": ["619d6f42-db87-4f3e-8dc9-3c9995613614", "00658d11-2dfd-41e8-b6d2-2462e8f3aa47"], - "SideA": ["00658d11-2dfd-41e8-b6d2-2462e8f3aa47"], - "SideB": ["619d6f42-db87-4f3e-8dc9-3c9995613614"], "CustomData": {}, - "Props": {"gameMode":"08d2279d2ed3fba559918aaa08a73fa8-Default", 'MatchConfiguration': '/Game/Configuration/MatchConfig/MatchConfig_Demo.MatchConfig_Demo'}, - "Schema": 11122334455666}}) + return jsonify( + {"status": "MATCHED", "QueueData": {"Position": 0, "ETA": 0, "Stable": False, "SizeA": 1, "SizeB": 4}, + "MatchData": {"MatchId": spoofed_match_id, "Category": category, "Rank": rank, + "CreationDateTime": epoch, "ExcludeFriends": False, + "ExcludeClanMembers": False, "Status": "CREATED", + "Creator": "619d6f42-db87-4f3e-8dc9-3c9995613614", + "Players": ["619d6f42-db87-4f3e-8dc9-3c9995613614", "00658d11-2dfd-41e8-b6d2-2462e8f3aa47"], + "SideA": ["00658d11-2dfd-41e8-b6d2-2462e8f3aa47"], + "SideB": ["619d6f42-db87-4f3e-8dc9-3c9995613614"], "CustomData": {}, + "Props": {"isDedicated": False, "gameMode": "08d2279d2ed3fba559918aaa08a73fa8-Default", + 'MatchConfiguration': '/Game/Configuration/MatchConfig/MatchConfig_Demo.MatchConfig_Demo'}, + "Schema": 11122334455666}}) elif user_id == "95041085-e7e4-4759-be3d-e72c69167578": return jsonify( {"status": "MATCHED", "QueueData": {"Position": 0, "ETA": 0, "Stable": False, "SizeA": 1, "SizeB": 4}, "MatchData": {"MatchId": spoofed_match_id, "Category": category, "Rank": rank, "CreationDateTime": epoch, "ExcludeFriends": False, - "ExcludeClanMembers": False, "Status": "WaitingForPlayers", - "Creator": "00658d11-2dfd-41e8-b6d2-2462e8f3aa47", + "ExcludeClanMembers": False, "Status": "CREATED", + "Creator": "95041085-e7e4-4759-be3d-e72c69167578", "Players": ["00658d11-2dfd-41e8-b6d2-2462e8f3aa47", "95041085-e7e4-4759-be3d-e72c69167578"], "SideA": ["00658d11-2dfd-41e8-b6d2-2462e8f3aa47"], "SideB": ["95041085-e7e4-4759-be3d-e72c69167578"], "CustomData": {}, - "Props": {"gameMode":"08d2279d2ed3fba559918aaa08a73fa8-Default", 'MatchConfiguration': '/Game/Configuration/MatchConfig/MatchConfig_Demo.MatchConfig_Demo'}, + "Props": {"isDedicated": False, "gameMode": "08d2279d2ed3fba559918aaa08a73fa8-Default", + 'MatchConfiguration': '/Game/Configuration/MatchConfig/MatchConfig_Demo.MatchConfig_Demo'}, "Schema": 11122334455666}}) elif user_id == "00658d11-2dfd-41e8-b6d2-2462e8f3aa47": return jsonify( {"status": "MATCHED", "QueueData": {"Position": 0, "ETA": 0, "Stable": False, "SizeA": 1, "SizeB": 4}, "MatchData": {"MatchId": spoofed_match_id, "Category": category, "Rank": rank, "CreationDateTime": epoch, "ExcludeFriends": False, - "ExcludeClanMembers": False, "Status": "WaitingForPlayers", + "ExcludeClanMembers": False, "Status": "CREATED", "Creator": "00658d11-2dfd-41e8-b6d2-2462e8f3aa47", "Players": ["619d6f42-db87-4f3e-8dc9-3c9995613614", "00658d11-2dfd-41e8-b6d2-2462e8f3aa47"], "SideA": ["00658d11-2dfd-41e8-b6d2-2462e8f3aa47"], "SideB": ["619d6f42-db87-4f3e-8dc9-3c9995613614"], "CustomData": {}, - "Props": {"gameMode": "08d2279d2ed3fba559918aaa08a73fa8-Default", + "Props": {"isDedicated": False, "gameMode": "08d2279d2ed3fba559918aaa08a73fa8-Default", 'MatchConfiguration': '/Game/Configuration/MatchConfig/MatchConfig_Demo.MatchConfig_Demo'}, "Schema": 11122334455666}}) else: - return {"status":"QUEUED","queueData":{"ETA":-10000,"position":0,"stable":False}} - #eta, position = match_manager.find_eta_and_position(data["_match_uuid"]) + return {"status": "QUEUED", "queueData": {"ETA": -10000, "position": 0, "stable": False}} + # eta, position = match_manager.find_eta_and_position(data["_match_uuid"]) @app.route("/api/v1/match/", methods=["GET"]) def match(matchid): if matchid == "0051681e-72ce-46f0-bda2-752e471d0d08": - return jsonify({"matchId":matchid,"schema":3, - "category":"Steam-te-18f25613-36778-ue4-374f864b", - "geolocation":{},"creationDateTime":datetime.now().timestamp(), - "status":"OPENED", - "creator":"00658d11-2dfd-41e8-b6d2-2462e8f3aa47", - "customData":{"SessionSettings":"AAAAJDYxOWQ2ZjQyLWRiODctNGYzZS04ZGM5LTNjOTk5NTYxMzYxNAAAAAAAAAAAAAAAYwAAAGMAAAAAAQAAAAEAAQEAAAAAAAAAAAAKAAAAB01hcE5hbWUGAAAAA21hcAIAAAAQQ1VTVE9NU0VBUkNISU5UMgHRD3M7AgAAAAhnYW1lTW9kZQYAAAAoMDhkMjI3OWQyZWQzZmJhNTU5OTE4YWFhMDhhNzNmYTgtRGVmYXVsdAIAAAAOUHJvamVjdFZlcnNpb24GAAAAHnRlLTE4ZjI1NjEzLTM2Nzc4LXVlNC0zNzRmODY0YgIAAAAQQ1VTVE9NU0VBUkNISU5UMQEAAAABAgAAAAdNYXhSYW5rAQAAAAECAAAAB01pblJhbmsBAAAAAQIAAAAQTWlycm9yc1Nlc3Npb25JZAYAAAAkMDA1MTY4MWUtNzJjZS00NmYwLWJkYTItNzUyZTQ3MWQwZDA4AgAAAAxQbGF0Zm9ybU5hbWUGAAAABVN0ZWFtAgAAABFQbGF0Zm9ybVNlc3Npb25JZAYAAAAsMXx8NzY1NjExOTkxNjk3ODEyODU6Nzc3N3wxMDk3NzUyNDI5MDM4OTYwOTgC"} - ,"version":2,"churn":0,'props': - {"gameMode":"08d2279d2ed3fba559918aaa08a73fa8-Default",'MatchConfiguration': '/Game/Configuration/MatchConfig/MatchConfig_Demo.MatchConfig_Demo'}, - "reason":"","SideA": ["619d6f42-db87-4f3e-8dc9-3c9995613614"], + return jsonify({"matchId": matchid, "schema": 3, + "category": "Steam-te-18f25613-36778-ue4-374f864b", + "geolocation": {}, "creationDateTime": datetime.now().timestamp(), + "status": "OPENED", + "creator": "00658d11-2dfd-41e8-b6d2-2462e8f3aa47", + "customData": { + "SessionSettings": "AAAAJDYxOWQ2ZjQyLWRiODctNGYzZS04ZGM5LTNjOTk5NTYxMzYxNAAAAAAAAAAAAAAAYwAAAGMAAAAAAQAAAAEAAQEAAAAAAAAAAAAKAAAAB01hcE5hbWUGAAAAA21hcAIAAAAQQ1VTVE9NU0VBUkNISU5UMgHRD3M7AgAAAAhnYW1lTW9kZQYAAAAoMDhkMjI3OWQyZWQzZmJhNTU5OTE4YWFhMDhhNzNmYTgtRGVmYXVsdAIAAAAOUHJvamVjdFZlcnNpb24GAAAAHnRlLTE4ZjI1NjEzLTM2Nzc4LXVlNC0zNzRmODY0YgIAAAAQQ1VTVE9NU0VBUkNISU5UMQEAAAABAgAAAAdNYXhSYW5rAQAAAAECAAAAB01pblJhbmsBAAAAAQIAAAAQTWlycm9yc1Nlc3Npb25JZAYAAAAkMDA1MTY4MWUtNzJjZS00NmYwLWJkYTItNzUyZTQ3MWQwZDA4AgAAAAxQbGF0Zm9ybU5hbWUGAAAABVN0ZWFtAgAAABFQbGF0Zm9ybVNlc3Npb25JZAYAAAAsMXx8NzY1NjExOTkxNjk3ODEyODU6Nzc3N3wxMDk3NzUyNDI5MDM4OTYwOTgC"} + , "version": 2, "churn": 0, 'props': + {"gameMode": "08d2279d2ed3fba559918aaa08a73fa8-Default", + 'MatchConfiguration': '/Game/Configuration/MatchConfig/MatchConfig_Demo.MatchConfig_Demo'}, + "reason": "", "SideA": ["619d6f42-db87-4f3e-8dc9-3c9995613614"], "SideB": ["00658d11-2dfd-41e8-b6d2-2462e8f3aa47"]}) else: json_dict = match_manager.find_json_with_match_id(matchid) @@ -132,14 +155,17 @@ def match(matchid): def match_kill(matchid): return jsonify({"status": "OK"}) + @app.route("/api/v1/match//register", methods=["POST"]) def match_register(match_id): try: get_remote_ip() custom_data = request.get_json("customData") - session_settings = custom_data["sessionSettings"] + if custom_data["sessionSettings"]: + session_settings = custom_data["sessionSettings"] user_id = request.cookies.get("bhvrSession") - logger.graylog_logger(level="info", handler="match_register", message=f"User {user_id} is registering to match {match_id}") + logger.graylog_logger(level="info", handler="match_register", + message=f"User {user_id} is registering to match {match_id}") return jsonify({"status": "OK"}) except Exception as e: logger.graylog_logger(level="error", handler="match_register", message=e) @@ -151,7 +177,8 @@ def match_quit(match_id): try: get_remote_ip() user_id = request.cookies.get("bhvrSession") - logger.graylog_logger(level="info", handler="logging_queue", message=f"User {user_id} is quieting match {match_id}") + logger.graylog_logger(level="info", handler="logging_queue", + message=f"User {user_id} is quieting match {match_id}") return jsonify({"status": "OK"}) except Exception as e: logger.graylog_logger(level="error", handler="logging_queue", message=e) diff --git a/src/endpoints/unknown.py b/src/endpoints/unknown.py index 2a4c24d..6070101 100644 --- a/src/endpoints/unknown.py +++ b/src/endpoints/unknown.py @@ -16,6 +16,7 @@ def catalog_get(game_version): @app.errorhandler(404) -def debug_404(): +def debug_404(e): logger.graylog_logger(level="error", handler="404-handler", message=f"Path: {request.path} Endpoint: {request.endpoint}") + print(e) return jsonify({"message": "Endpoint not found"}), 404 diff --git a/src/endpoints/user_handeling.py b/src/endpoints/user_handeling.py index 866951e..3c86f9f 100644 --- a/src/endpoints/user_handeling.py +++ b/src/endpoints/user_handeling.py @@ -90,8 +90,8 @@ def modifiers(): items={"token", "steamid"}, server=mongo_host, db=mongo_db, collection=mongo_collection) try: - return jsonify({"TokenId": token, "UserId": userid, "RoleIds": ["759E44DD-469C2841-75C2D6A1-AB0B0FA7", - "606129DC-45AB9D16-B69E2FA5-C99A9835"]}) + return jsonify({"TokenId": token, "UserId": userid, "RoleIds": ["755D4DFE-40DA1512-B01E3D8C-FF3C8D4D", + "C50FFFBF-46866131-82F45890-651797CE"]}) except TimeoutError: return jsonify({"status": "error"}) except Exception as e: @@ -107,9 +107,19 @@ def moderation_check_username(): userid = request_var["userId"] username = request_var["username"] logger.graylog_logger(level="info", handler="moderation_check_username", message=request.get_json()) + steamid, token = mongo.get_data_with_list(login=userid, login_steam=False, - items={"token", "steamid"}, server=mongo_host, db=mongo_db, - collection=mongo_collection) + items={"token", "steamid"}, server=mongo_host, db=mongo_db, + collection=mongo_collection) + if steamid is None: + time.sleep(1) + request_var = request.get_json() + userid = request_var["userId"] + username = request_var["username"] + steamid, token = mongo.get_data_with_list(login=userid, login_steam=False, + items={"token", "steamid"}, server=mongo_host, db=mongo_db, + collection=mongo_collection) + return jsonify({"Id": userid, "Token": token, "Provider": {"ProviderName": username, "ProviderId": steamid}}) # CLIENT:{"userId": "ID-ID-ID-ID-SEE-AUTH", "username": "Name-Name-Name"} @@ -262,13 +272,12 @@ def progression_groups(): # This is the real code but need to build this first # return jsonify({"UserId": userid, "StateName": "Fstring", "Segment": "Fstring", "ObjectId": "Fstring", # "Version": 1111, "schemaVersion": 1111, "Data": {}}) - return jsonify({"ObjectId": "Runner.Sawbones", "Version": 11, "SchemaVersion": 11, "Data": {}}) - return jsonify({"List": [{"ObjectId": "Runner.Sawbones", + return jsonify({"List": [{"ObjectId": "C50FFFBF-46866131-82F45890-651797CE", "SchemaVersion": 11111111, "Version": 11111111, "Data": [{"Level": 5, "Ratio": 0.111}]}, - {"ObjectId": "Hunter.Stalker", + {"ObjectId": "755D4DFE-40DA1512-B01E3D8C-FF3C8D4D", "SchemaVersion": 11111111, "Version": 11111111, "Data": @@ -455,33 +464,32 @@ def extension_progression_init_or_get_groups(): "ObjectId": "755D4DFE-40DA1512-B01E3D8C-FF3C8D4D", "Version": 1, "SchemaVersion": 1.1, - "Data": {"CharacterId": {"TagName": "Runner.Sawbones"}, "PrestigeLevel": 1, + "Data": {"CharacterId": {"TagName": "Runner.Sawbones"}, "Equipment": ["Primary Weapon", "Bonus 1", "Bonus 2", "Perk 1", - "Perk 2", "Ability"], - "EquippedPerks": ["20FF1865462FD26B0253A08F18EFAA10"], - "EquippedPowers": ["C8AF3D534973F82FADBB40BDA96F9DCD"], - "EquippedWeapons": ["492232504161420C872A0F82FC16ACDB"], - "EquippedBonuses": ["1E08AFFA485E92BAFF2C1BB85CEFB81E", - "1F5CD9004224C56746D81991AA40448A"], - "PickedChallanges": [{"ItemId": "Progression_Shimmy", - "Name": "Runner_ProgressionSpecificShimmy_Name"}]}, + "Perk 2"], + "EquippedPerks": ["BE1C0D4C-4CE08611-22BE22B2-736D9091", + "F2768C45-41C8262E-FF4922B3-72AB7306"], + "EquippedPowers": ["C8AF3D53-4973F82F-ADBB40BD-A96F9DCD"], + "EquippedWeapons": ["4E171BD1-4FF98ED4-3A7AFAB5-7FE55578"], + "EquippedBonuses": ["109BC590-4DC1272D-70822EBA-79CC85B1", + "54B3EF79-4FCB0643-C4644FA1-5BEF31D5"]} }, { "ObjectId": "C50FFFBF-46866131-82F45890-651797CE", "Version": 1, "SchemaVersion": 1.1, - "Data": {"CharacterId": {"TagName": "Hunter.Stalker"}, "PrestigeLevel": 1, + "Data": {"CharacterId": "{AAAA-BBBBB-2222-33333}", "Equipment": ["Primary Weapon", "Bonus 1", "Bonus 2", "Perk 1", - "Perk 2", "Ability", "Sidearm"], - "EquippedPerks": ["F055513D48AACBAC280B2AA00A984180", - "5998C1C548AB7BDA80C87295F2764C5D"], - "EquippedPowers": ["0DC38EC14AA02FC83456E5B02B7B4870"], - "EquippedWeapons": ["50D3005B437066E4C4D99F9397CF1B0B", - "973C9176404A29F926D13BACB76A2425"], - "EquippedBonuses": ["1098BEE241B1515B44013A87EDB16BDC", - "EDB6D6B742023AE61AD8718CAC073C0E"], - "PickedChallanges": [{"ItemId": "Progression_Turrets_Hunter", - "Name": "Hunter_ProgressionSpecificTurret_Name"}]}, + "Perk 2", "Ability01", "Ability02", "Ability03","Sidearm"], + "EquippedPerks": ["7CE5AFBF-459102E5-728DCDAA-6F88C0F1", + "2DBF9B11-4B82A639-40936396-CBA68BCD"], + "EquippedPowers": ["10A8C667-45801664-6E2EFA94-52E3141A", + "08DC38B6-470A7A5B-0BA025B9-6279DAA8", + "51595917-43CBF0B5-7EC6FEB3-341960D6"], + "EquippedWeapons": ["36466540-42433114-08F6A0BD-4DCE05BD", + "307A0B13-417737DE-D675309F-8B978AB8"], + "EquippedBonuses": ["791F12E0-47DA9E26-E246E385-9C3F587E", + "8A5BF227-4640C2F2-3EF3C996-A6F6404D"]} } ] })