Ballistica-web integration.

This commit is contained in:
pranav-1711 2022-03-04 18:05:39 +05:30
parent 61c4fdd780
commit 39a544bf03
3 changed files with 184 additions and 867 deletions

143
dist/ba_root/mods/bcs_plugin.py vendored Normal file
View file

@ -0,0 +1,143 @@
# -*- coding: utf-8 -*-
# coding: utf-8
# ba_meta require api 6
from typing import Optional, Any, Dict, List, Type, Sequence
from ba._gameactivity import GameActivity
import ba,_ba
import psutil as p
import json
import os
import _thread
# from stats import mystats
os.environ['FLASK_APP'] = 'bombsquadflaskapi.py'
os.environ['FLASK_ENV'] = 'development'
from stats import mystats
stats={}
leaderboard={}
top200={}
class BsDataThread(object):
def __init__(self):
self.Timer = ba.Timer( 8,ba.Call(self.refreshStats),timetype = ba.TimeType.REAL,repeat = True)
self.Timerr = ba.Timer( 10,ba.Call(self.startThread),timetype = ba.TimeType.REAL,repeat = True)
def startThread(self):
_thread.start_new_thread(self.refreshLeaderboard,())
def refreshLeaderboard(self):
global leaderboard
global top200
_t200={}
lboard=mystats.get_all_stats()
leaderboard=lboard
entries = [(a['scores'], a['kills'], a['deaths'], a['games'], a['name'], a['aid']) for a in lboard.values()]
entries.sort(reverse=True)
rank=0
for entry in entries:
rank+=1
if rank >201:
break
_t200[entry[5]]={"rank":rank,"scores":int(entry[0]),"games":int(entry[3]),"kills":int(entry[1]),"deaths":int(entry[2]),"name_html":entry[4],"last_seen":"entry[6]"}
top200=_t200
def refreshStats(self):
liveplayers={}
nextMap=''
currentMap=''
global stats
for i in _ba.get_game_roster():
try:
liveplayers[i['account_id']]={'name':i['players'][0]['name_full'],'client_id':i['client_id'],'device_id':i['display_string']}
except:
liveplayers[i['account_id']]={'name':"<in-lobby>",'clientid':i['client_id'],'device_id':i['display_string']}
try:
nextMap=_ba.get_foreground_host_session().get_next_game_description().evaluate()
current_game_spec=_ba.get_foreground_host_session()._current_game_spec
gametype: Type[GameActivity] =current_game_spec['resolved_type']
currentMap=gametype.get_settings_display_string(current_game_spec).evaluate()
except:
pass
minigame={'current':currentMap,'next':nextMap}
system={'cpu':p.cpu_percent(),'ram':p.virtual_memory().percent}
#system={'cpu':80,'ram':34}
stats['system']=system
stats['roster']=liveplayers
stats['chats']=_ba.get_chat_messages()
stats['playlist']=minigame
stats['teamInfo']=self.getTeamInfo()
#print(self.getTeamInfo());
def getTeamInfo(self):
data={}
session=_ba.get_foreground_host_session()
data['sessionType']=type(session).__name__
teams=session.sessionteams
for team in teams:
data[team.id]={'name':team.name.evaluate(),
'color':list(team.color),
'score':team.customdata['score'],
'players':[]
}
for player in team.players:
teamplayer={'name':player.getname(),
'device_id':player.inputdevice.get_account_name(True),
'inGame':player.in_game,
'character':player.character,
'account_id':player.get_account_id()
}
data[team.id]['players'].append(teamplayer)
return data
BsDataThread()
import flask
from flask import request, jsonify
app = flask.Flask(__name__)
app.config["DEBUG"] = False
@app.route('/', methods=['GET'])
def home():
return '''Nothing here :)'''
# A route to return all of the available entries in our catalog.
@app.route('/getStats', methods=['GET'])
def api_all():
return json.dumps(stats)
@app.route('/getLeaderboard',methods=['GET'])
def get_l():
return json.dumps(leaderboard)
@app.route('/getTop200',methods=['GET'])
def get_top200():
return json.dumps(top200)
# ba_meta export plugin
class InitalRun(ba.Plugin):
def __init__(self):
print("start flask")
flask_run = _thread.start_new_thread(app.run, ("0.0.0.0",80,False ))
# SAMPLE OUTPUT
# {'system': {'cpu': 80, 'ram': 34}, 'roster': {}, 'chats': [], 'playlist': {'current': 'Meteor Shower @ Rampage', 'next': 'Assault @ Step Right Up'}, 'teamInfo': {'sessionType': 'DualTeamSession', 0: {'name': 'Blue', 'color': (0.1, 0.25, 1.0), 'score': 1, 'players': [{'name': 'Jolly', 'device_id': '\ue030PC295588', 'inGame': True, 'character': 'xmas', 'account_id': 'pb-IF4TVWwZUQ=='}]}, 1: {'name': 'Red', 'color': (1.0, 0.25, 0.2), 'score': 0, 'players': []}}}

View file

@ -69,7 +69,7 @@ def get_all_stats():
global seasonStartDate
if os.path.exists(statsfile):
renameFile=False
with open(statsfile, 'r') as f:
with open(statsfile, 'r',encoding='utf8') as f:
jsonData=json.loads(f.read())
try:
stats=jsonData["stats"]
@ -80,7 +80,8 @@ def get_all_stats():
seasonStartDate=datetime.datetime.now()
return statsDefault
return stats
except:
except OSError as e:
print(e)
return jsonData
else:
return {}
@ -96,8 +97,8 @@ def dump_stats(s: dict):
seasonStartDate=datetime.datetime.now()
s={"startDate":seasonStartDate.strftime("%d-%m-%Y") , "stats":s}
if os.path.exists(statsfile):
with open(statsfile, 'w') as f:
f.write(json.dumps(s, indent=4))
with open(statsfile, 'w',encoding='utf8') as f:
f.write(json.dumps(s, indent=4,ensure_ascii=False))
f.close()
else: print('Stats file not found!')
@ -198,6 +199,7 @@ def update(score_set):
store.
"""
# look at score-set entries to tally per-account kills for this round
account_kills = {}
account_deaths = {}
@ -230,7 +232,7 @@ class UpdateThread(threading.Thread):
def run(self):
# pull our existing stats from disk
import datetime
try:
stats=get_all_stats()
except:
@ -244,14 +246,11 @@ class UpdateThread(threading.Thread):
# (we only do this when first creating the entry to save time,
# though it may be smart to refresh it periodically since
# it may change)
'''url = 'http://bombsquadgame.com/accountquery?id=' + account_id
response = json.loads(
urllib.request.urlopen(urllib.Request(url)).read())
print('response variable from mystats.py line 183:')
print(response)
name_html = response['name_html']'''
stats[account_id] = {'rank': 0,
'name': "default",
'name': "deafult name",
'scores': 0,
'total_damage': 0,
'kills': 0,
@ -259,17 +258,29 @@ class UpdateThread(threading.Thread):
'games': 0,
'kd': 0,
'avg_score': 0,
'last_seen':str(datetime.datetime.now()),
'aid': str(account_id)}
#Temporary codes to change 'name_html' to 'name'
if 'name_html' in stats[account_id]:
stats[account_id].pop('name_html')
stats[account_id]['name'] = 'default'
# if 'name_html' in stats[account_id]:
# stats[account_id].pop('name_html')
# stats[account_id]['name'] = 'default'
url="http://bombsquadgame.com/bsAccountInfo?buildNumber=20258&accountID="+account_id
data=urllib.request.urlopen(url)
if data is not None:
try:
name=json.loads(data.read())["profileDisplayString"]
except ValueError:
stats[account_id]['name']= "???"
else:
stats[account_id]['name']= name
# now increment their kills whether they were already there or not
stats[account_id]['kills'] += kill_count
stats[account_id]['deaths'] += self.account_deaths[account_id]
stats[account_id]['scores'] += self.account_scores[account_id]
stats[account_id]['last_seen'] = str(datetime.datetime.now())
# also incrementing the games played and adding the id
stats[account_id]['games'] += 1
stats[account_id]['aid'] = str(account_id)

View file

@ -1,854 +1,17 @@
{
"pb-IF4VAk4a": {
"rank": 65,
"name": "pb-IF4VAk4a",
"scores": 0,
"total_damage": 0.0,
"kills": 0,
"deaths": 0,
"games": 18,
"kd": 0.0,
"avg_score": 0.0,
"aid": "pb-IF4VAk4a"
},
"pb-IF4TVWwZUQ==": {
"rank": 5,
"name": "\ue030PC295588",
"scores": 610,
"total_damage": 0.0,
"kills": 1,
"deaths": 73,
"games": 55,
"kd": 0.013,
"avg_score": 11.09,
"aid": "pb-IF4TVWwZUQ=="
},
"pb-JiNJARBaXEFBVF9HFkNXXF1EF0ZaRlZE": {
"rank": 11,
"name": "\ue020HeySmoothy",
"scores": 342,
"total_damage": 0.0,
"kills": 12,
"deaths": 42,
"games": 14,
"kd": 0.285,
"avg_score": 24.428,
"aid": "pb-JiNJARBaXEFBVF9HFkNXXF1EF0ZaRlZE"
},
"pb-IF4uVW8bMw==": {
"rank": 10,
"name": "\ue020BurnedMedusa35646",
"scores": 396,
"total_damage": 0.0,
"kills": 31,
"deaths": 22,
"games": 6,
"kd": 1.409,
"avg_score": 66.0,
"aid": "pb-IF4uVW8bMw=="
},
"pb-IF4eVUooAw==": {
"rank": 24,
"name": "\ue030Android51971883",
"scores": 159,
"total_damage": 0.0,
"kills": 15,
"deaths": 21,
"games": 6,
"kd": 0.714,
"avg_score": 26.5,
"aid": "pb-IF4eVUooAw=="
},
"pb-IF4iVUc5Cg==": {
"rank": 3,
"name": "\ue020PicturesquePond10",
"scores": 851,
"total_damage": 0.0,
"kills": 51,
"deaths": 56,
"games": 10,
"kd": 0.91,
"avg_score": 85.1,
"aid": "pb-IF4iVUc5Cg=="
},
"pb-IF4rV0MoFA==": {
"rank": 17,
"name": "\ue030Android31875021",
"scores": 188,
"total_damage": 0.0,
"kills": 12,
"deaths": 14,
"games": 3,
"kd": 0.857,
"avg_score": 62.666,
"aid": "pb-IF4rV0MoFA=="
},
"pb-IF43VU0aVQ==": {
"rank": 14,
"name": "\ue020HARSHALgaming8992",
"scores": 253,
"total_damage": 0.0,
"kills": 12,
"deaths": 50,
"games": 6,
"kd": 0.24,
"avg_score": 42.166,
"aid": "pb-IF43VU0aVQ=="
},
"pb-IF4LVU0KKQ==": {
"rank": 9,
"name": "\ue020SHAMANT1111",
"scores": 434,
"total_damage": 0.0,
"kills": 28,
"deaths": 54,
"games": 6,
"kd": 0.518,
"avg_score": 72.333,
"aid": "pb-IF4LVU0KKQ=="
},
"pb-IF4VVUgJVw==": {
"rank": 20,
"name": "\ue020WobblyLining33",
"scores": 182,
"total_damage": 0.0,
"kills": 10,
"deaths": 27,
"games": 4,
"kd": 0.37,
"avg_score": 45.5,
"aid": "pb-IF4VVUgJVw=="
},
"pb-IF4gVU0BCg==": {
"rank": 53,
"name": "\ue020Dewanggaming",
"scores": 43,
"total_damage": 0.0,
"kills": 3,
"deaths": 9,
"games": 3,
"kd": 0.333,
"avg_score": 14.333,
"aid": "pb-IF4gVU0BCg=="
},
"pb-IF4FVXkZDQ==": {
"rank": 27,
"name": "\ue020lllBOLTlll",
"scores": 151,
"total_damage": 0.0,
"kills": 9,
"deaths": 15,
"games": 3,
"kd": 0.6,
"avg_score": 50.333,
"aid": "pb-IF4FVXkZDQ=="
},
"pb-IF42VUpaDg==": {
"rank": 7,
"name": "\ue020EasterlyArtillery29",
"scores": 468,
"total_damage": 0.0,
"kills": 25,
"deaths": 37,
"games": 4,
"kd": 0.675,
"avg_score": 117.0,
"aid": "pb-IF42VUpaDg=="
},
"pb-IF4iVUNSIw==": {
"rank": 48,
"name": "default",
"scores": 56,
"total_damage": 0.0,
"kills": 2,
"deaths": 5,
"games": 1,
"kd": 0.4,
"avg_score": 56.0,
"aid": "pb-IF4iVUNSIw=="
},
"pb-IF4PVGcSJw==": {
"rank": 42,
"name": "\ue030Android29104233",
"scores": 84,
"total_damage": 0.0,
"kills": 7,
"deaths": 9,
"games": 2,
"kd": 0.777,
"avg_score": 42.0,
"aid": "pb-IF4PVGcSJw=="
},
"pb-IF4eVVMkMw==": {
"rank": 30,
"name": "\ue030Android52887552",
"scores": 101,
"total_damage": 0.0,
"kills": 0,
"deaths": 18,
"games": 6,
"kd": 0.0,
"avg_score": 16.833,
"aid": "pb-IF4eVVMkMw=="
},
"pb-IF4vNnMJ": {
"rank": 4,
"name": "\ue020XXRGEXX2",
"scores": 674,
"total_damage": 0.0,
"kills": 25,
"deaths": 15,
"games": 10,
"kd": 1.666,
"avg_score": 67.4,
"aid": "pb-IF4vNnMJ"
},
"pb-IF4qV3c8Hw==": {
"rank": 63,
"name": "\ue020kankeisan1284578554",
"scores": 0,
"total_damage": 0.0,
"kills": 0,
"deaths": 1,
"games": 1,
"kd": 0.0,
"avg_score": 0.0,
"aid": "pb-IF4qV3c8Hw=="
},
"pb-IF4mVHFcLQ==": {
"rank": 23,
"name": "\ue030Android39744744",
"scores": 174,
"total_damage": 0.0,
"kills": 9,
"deaths": 14,
"games": 5,
"kd": 0.642,
"avg_score": 34.8,
"aid": "pb-IF4mVHFcLQ=="
},
"pb-IF4PVVIeHw==": {
"rank": 69,
"name": "\ue020VoraceMan",
"scores": 0,
"total_damage": 0.0,
"kills": 0,
"deaths": 0,
"games": 1,
"kd": 0.0,
"avg_score": 0.0,
"aid": "pb-IF4PVVIeHw=="
},
"pb-IF4AVXAmPA==": {
"rank": 50,
"name": "\ue020ESZ\u4e5bOptimusOp\u4e44",
"scores": 56,
"total_damage": 0.0,
"kills": 0,
"deaths": 0,
"games": 2,
"kd": 0.0,
"avg_score": 28.0,
"aid": "pb-IF4AVXAmPA=="
},
"pb-IF4AVVEPNw==": {
"rank": 31,
"name": "\ue020StealthyFelicity14",
"scores": 96,
"total_damage": 0.0,
"kills": 0,
"deaths": 2,
"games": 1,
"kd": 0.0,
"avg_score": 96.0,
"aid": "pb-IF4AVVEPNw=="
},
"pb-IF4SVU4MFw==": {
"rank": 66,
"name": "\ue020K\u211da\u03c4o\u0eae",
"scores": 0,
"total_damage": 0.0,
"kills": 0,
"deaths": 0,
"games": 2,
"kd": 0.0,
"avg_score": 0.0,
"aid": "pb-IF4SVU4MFw=="
},
"pb-IF4DVEkPEg==": {
"rank": 16,
"name": "\ue020StormyCliff19",
"scores": 192,
"total_damage": 0.0,
"kills": 0,
"deaths": 7,
"games": 3,
"kd": 0.0,
"avg_score": 64.0,
"aid": "pb-IF4DVEkPEg=="
},
"pb-IF4TVVNeMg==": {
"rank": 46,
"name": "\ue030Android52880740",
"scores": 61,
"total_damage": 0.0,
"kills": 0,
"deaths": 1,
"games": 2,
"kd": 0.0,
"avg_score": 30.5,
"aid": "pb-IF4TVVNeMg=="
},
"pb-IF4yVUcgBg==": {
"rank": 15,
"name": "\ue020RagedRibik28",
"scores": 225,
"total_damage": 0.0,
"kills": 1,
"deaths": 5,
"games": 4,
"kd": 0.2,
"avg_score": 56.25,
"aid": "pb-IF4yVUcgBg=="
},
"pb-IF4IVUUJMg==": {
"rank": 40,
"name": "\ue030Android51464300",
"scores": 90,
"total_damage": 0.0,
"kills": 0,
"deaths": 0,
"games": 2,
"kd": 0.0,
"avg_score": 45.0,
"aid": "pb-IF4IVUUJMg=="
},
"pb-IF4tVUwGVA==": {
"rank": 19,
"name": "\ue030Android52246284",
"scores": 183,
"total_damage": 0.0,
"kills": 9,
"deaths": 13,
"games": 3,
"kd": 0.692,
"avg_score": 61.0,
"aid": "pb-IF4tVUwGVA=="
},
"pb-IF48NmQO": {
"rank": 59,
"name": "default",
"scores": 6,
"total_damage": 0.0,
"kills": 0,
"deaths": 1,
"games": 1,
"kd": 0.0,
"avg_score": 6.0,
"aid": "pb-IF48NmQO"
},
"pb-IF4UVUQaAw==": {
"rank": 41,
"name": "\ue020LikelyTour25",
"scores": 85,
"total_damage": 0.0,
"kills": 11,
"deaths": 8,
"games": 2,
"kd": 1.375,
"avg_score": 42.5,
"aid": "pb-IF4UVUQaAw=="
},
"pb-IF4wVRECLg==": {
"rank": 62,
"name": "\ue020gogugu",
"scores": 0,
"total_damage": 0.0,
"kills": 0,
"deaths": 1,
"games": 2,
"kd": 0.0,
"avg_score": 0.0,
"aid": "pb-IF4wVRECLg=="
},
"pb-JiNJARBcV0FDXV1DGU5ZXV1FEUFWRVJC": {
"rank": 68,
"name": "\ue020appyfizz510",
"scores": 0,
"total_damage": 0.0,
"kills": 0,
"deaths": 0,
"games": 1,
"kd": 0.0,
"avg_score": 0.0,
"aid": "pb-JiNJARBcV0FDXV1DGU5ZXV1FEUFWRVJC"
},
"pb-IF4OVVMsDQ==": {
"rank": 49,
"name": "\ue030Android52893090",
"scores": 56,
"total_damage": 0.0,
"kills": 0,
"deaths": 0,
"games": 2,
"kd": 0.0,
"avg_score": 28.0,
"aid": "pb-IF4OVVMsDQ=="
},
"pb-IF5VVU4aFg==": {
"rank": 71,
"name": "default",
"scores": 0,
"total_damage": 0.0,
"kills": 0,
"deaths": 0,
"games": 1,
"kd": 0.0,
"avg_score": 0.0,
"aid": "pb-IF5VVU4aFg=="
},
"pb-IF4SVW9dEg==": {
"rank": 51,
"name": "\ue020PROFFESOR9",
"scores": 48,
"total_damage": 0.0,
"kills": 0,
"deaths": 1,
"games": 5,
"kd": 0.0,
"avg_score": 9.6,
"aid": "pb-IF4SVW9dEg=="
},
"pb-IF4SVVMtDg==": {
"rank": 38,
"name": "\ue020OrtigozaRafa2000",
"scores": 92,
"total_damage": 0.0,
"kills": 4,
"deaths": 14,
"games": 4,
"kd": 0.285,
"avg_score": 23.0,
"aid": "pb-IF4SVVMtDg=="
},
"pb-IF4cVVMhKg==": {
"rank": 29,
"name": "\ue020jonyteoba100",
"scores": 106,
"total_damage": 0.0,
"kills": 2,
"deaths": 13,
"games": 4,
"kd": 0.153,
"avg_score": 26.5,
"aid": "pb-IF4cVVMhKg=="
},
"pb-IF4gVRlbXQ==": {
"rank": 12,
"name": "\ue020MyopicTour17",
"scores": 295,
"total_damage": 0.0,
"kills": 5,
"deaths": 5,
"games": 4,
"kd": 1.0,
"avg_score": 73.75,
"aid": "pb-IF4gVRlbXQ=="
},
"pb-IF4dVVAMUg==": {
"rank": 39,
"name": "\ue030Android52657984",
"scores": 91,
"total_damage": 0.0,
"kills": 0,
"deaths": 0,
"games": 2,
"kd": 0.0,
"avg_score": 45.5,
"aid": "pb-IF4dVVAMUg=="
},
"pb-JiNJVxFfUEFDWFtCFEdXVl1FF0FaTllC": {
"rank": 58,
"name": "default",
"scores": 10,
"total_damage": 0.0,
"kills": 1,
"deaths": 0,
"games": 1,
"kd": 0.0,
"avg_score": 10.0,
"aid": "pb-JiNJVxFfUEFDWFtCFEdXVl1FF0FaTllC"
},
"pb-IF40VU4TAQ==": {
"rank": 36,
"name": "default",
"scores": 96,
"total_damage": 0.0,
"kills": 0,
"deaths": 0,
"games": 1,
"kd": 0.0,
"avg_score": 96.0,
"aid": "pb-IF40VU4TAQ=="
},
"pb-IF5QVVUkLw==": {
"rank": 13,
"name": "\ue030Android52849403",
"scores": 258,
"total_damage": 0.0,
"kills": 7,
"deaths": 23,
"games": 5,
"kd": 0.304,
"avg_score": 51.6,
"aid": "pb-IF5QVVUkLw=="
},
"pb-IF5RVUkZKg==": {
"rank": 57,
"name": "\ue020ThreateningOddball34",
"scores": 16,
"total_damage": 0.0,
"kills": 1,
"deaths": 11,
"games": 2,
"kd": 0.09,
"avg_score": 8.0,
"aid": "pb-IF5RVUkZKg=="
},
"pb-IF5VVVEnVQ==": {
"rank": 47,
"name": "\ue030Android52446817",
"scores": 59,
"total_damage": 0.0,
"kills": 2,
"deaths": 7,
"games": 2,
"kd": 0.285,
"avg_score": 29.5,
"aid": "pb-IF5VVVEnVQ=="
},
"pb-JiNJARBaVUpHWl1BGUBVVFZAEkZeR1FE": {
"rank": 33,
"name": "\ue020CreepyJourney52261",
"scores": 96,
"total_damage": 0.0,
"kills": 0,
"deaths": 0,
"games": 1,
"kd": 0.0,
"avg_score": 96.0,
"aid": "pb-JiNJARBaVUpHWl1BGUBVVFZAEkZeR1FE"
},
"pb-IF5QVVZTAA==": {
"rank": 45,
"name": "default",
"scores": 64,
"total_damage": 0.0,
"kills": 0,
"deaths": 0,
"games": 1,
"kd": 0.0,
"avg_score": 64.0,
"aid": "pb-IF5QVVZTAA=="
},
"pb-IF5dVU0tPw==": {
"rank": 37,
"name": "\ue030Android52110513",
"scores": 93,
"total_damage": 0.0,
"kills": 0,
"deaths": 4,
"games": 2,
"kd": 0.0,
"avg_score": 46.5,
"aid": "pb-IF5dVU0tPw=="
},
"pb-IF4PVUovCQ==": {
"rank": 55,
"name": "\ue020Phriedbean",
"scores": 20,
"total_damage": 0.0,
"kills": 2,
"deaths": 1,
"games": 2,
"kd": 2.0,
"avg_score": 10.0,
"aid": "pb-IF4PVUovCQ=="
},
"pb-IF4sVRU8IA==": {
"rank": 61,
"name": "\ue02099\u30e1KAMY",
"scores": 0,
"total_damage": 0.0,
"kills": 0,
"deaths": 5,
"games": 1,
"kd": 0.0,
"avg_score": 0.0,
"aid": "pb-IF4sVRU8IA=="
},
"pb-IF4zVUYjPA==": {
"rank": 26,
"name": "\ue030Android51693156",
"scores": 152,
"total_damage": 0.0,
"kills": 0,
"deaths": 0,
"games": 3,
"kd": 0.0,
"avg_score": 50.666,
"aid": "pb-IF4zVUYjPA=="
},
"pb-IF4PVVJSNg==": {
"rank": 35,
"name": "default",
"scores": 96,
"total_damage": 0.0,
"kills": 0,
"deaths": 0,
"games": 1,
"kd": 0.0,
"avg_score": 96.0,
"aid": "pb-IF4PVVJSNg=="
},
"pb-IF4qVVMuIA==": {
"rank": 32,
"name": "\ue020TacitAnthropology26",
"scores": 96,
"total_damage": 0.0,
"kills": 0,
"deaths": 0,
"games": 1,
"kd": 0.0,
"avg_score": 96.0,
"aid": "pb-IF4qVVMuIA=="
},
"pb-IF4nVVFaEA==": {
"rank": 22,
"name": "\ue020023alan",
"scores": 178,
"total_damage": 0.0,
"kills": 0,
"deaths": 6,
"games": 4,
"kd": 0.0,
"avg_score": 44.5,
"aid": "pb-IF4nVVFaEA=="
},
"pb-IF4-VWItPA==": {
"rank": 60,
"name": "default",
"scores": 0,
"total_damage": 0.0,
"kills": 0,
"deaths": 6,
"games": 1,
"kd": 0.0,
"avg_score": 0.0,
"aid": "pb-IF4-VWItPA=="
},
"pb-IF5VVxI5Fg==": {
"rank": 44,
"name": "\ue020JinaYumnam1234",
"scores": 76,
"total_damage": 0.0,
"kills": 0,
"deaths": 0,
"games": 1,
"kd": 0.0,
"avg_score": 76.0,
"aid": "pb-IF5VVxI5Fg=="
},
"pb-IF4lVUskVg==": {
"rank": 67,
"name": "\ue030Android52111807",
"scores": 0,
"total_damage": 0.0,
"kills": 0,
"deaths": 0,
"games": 1,
"kd": 0.0,
"avg_score": 0.0,
"aid": "pb-IF4lVUskVg=="
},
"pb-IF4vVVAiKw==": {
"rank": 34,
"name": "default",
"scores": 96,
"total_damage": 0.0,
"kills": 0,
"deaths": 0,
"games": 1,
"kd": 0.0,
"avg_score": 96.0,
"aid": "pb-IF4vVVAiKw=="
},
"pb-IF5RVU0vKg==": {
"rank": 6,
"name": "\ue020noobgamingyt2468",
"scores": 476,
"total_damage": 0.0,
"kills": 36,
"deaths": 93,
"games": 17,
"kd": 0.387,
"avg_score": 28.0,
"aid": "pb-IF5RVU0vKg=="
},
"pb-IF4JVWseCg==": {
"rank": 43,
"name": "\ue020CapillaryJaguar7",
"scores": 77,
"total_damage": 0.0,
"kills": 7,
"deaths": 10,
"games": 3,
"kd": 0.7,
"avg_score": 25.666,
"aid": "pb-IF4JVWseCg=="
},
"pb-IF4HVVAkEg==": {
"rank": 21,
"name": "\ue020GlobalDoorway16",
"scores": 178,
"total_damage": 0.0,
"kills": 3,
"deaths": 4,
"games": 3,
"kd": 0.75,
"avg_score": 59.333,
"aid": "pb-IF4HVVAkEg=="
},
"pb-JiNJARFTUUBCXFhJE0NUVFdCEERbT1dK": {
"rank": 56,
"name": "\ue020snehil7701",
"scores": 20,
"total_damage": 0.0,
"kills": 2,
"deaths": 0,
"games": 1,
"kd": 0.0,
"avg_score": 20.0,
"aid": "pb-JiNJARFTUUBCXFhJE0NUVFdCEERbT1dK"
},
"pb-IF43VUwlAg==": {
"rank": 2,
"name": "\ue020EmperialX987",
"scores": 1021,
"total_damage": 0.0,
"kills": 34,
"deaths": 33,
"games": 11,
"kd": 1.03,
"avg_score": 92.818,
"aid": "pb-IF43VUwlAg=="
},
"pb-IF4uVUwsVQ==": {
"rank": 70,
"name": "\ue020VindictivePick10",
"scores": 0,
"total_damage": 0.0,
"kills": 0,
"deaths": 0,
"games": 1,
"kd": 0.0,
"avg_score": 0.0,
"aid": "pb-IF4uVUwsVQ=="
},
"pb-IF4NVVNZMw==": {
"rank": 18,
"name": "\ue030Android52956999",
"scores": 186,
"total_damage": 0.0,
"kills": 8,
"deaths": 30,
"games": 7,
"kd": 0.266,
"avg_score": 26.571,
"aid": "pb-IF4NVVNZMw=="
},
"pb-IF40VVMMPA==": {
"rank": 64,
"name": "\ue020SAM1133g1",
"scores": 0,
"total_damage": 0.0,
"kills": 0,
"deaths": 1,
"games": 1,
"kd": 0.0,
"avg_score": 0.0,
"aid": "pb-IF40VVMMPA=="
},
"pb-IF4vKWgc": {
"rank": 8,
"name": "\ue020MechanizedHydra59524",
"scores": 452,
"total_damage": 0.0,
"kills": 16,
"deaths": 9,
"games": 3,
"kd": 1.777,
"avg_score": 150.666,
"aid": "pb-IF4vKWgc"
},
"pb-IF5cVEMNNA==": {
"rank": 25,
"name": "\ue020KDevil2512",
"scores": 153,
"total_damage": 0.0,
"kills": 5,
"deaths": 16,
"games": 3,
"kd": 0.312,
"avg_score": 51.0,
"aid": "pb-IF5cVEMNNA=="
},
"pb-IF4PVEEnBA==": {
"rank": 28,
"name": "\ue020Deadly\u30c4TusKeR",
"scores": 128,
"total_damage": 0.0,
"kills": 3,
"deaths": 14,
"games": 3,
"kd": 0.214,
"avg_score": 42.666,
"aid": "pb-IF4PVEEnBA=="
},
"pb-IF4RVVMDVQ==": {
"rank": 54,
"name": "\ue030Android52942930",
"scores": 37,
"total_damage": 0.0,
"kills": 1,
"deaths": 5,
"games": 1,
"kd": 0.2,
"avg_score": 37.0,
"aid": "pb-IF4RVVMDVQ=="
},
"pb-IF43VVJSAg==": {
"rank": 52,
"name": "\ue020RANDOMGOD2011",
"scores": 44,
"total_damage": 0.0,
"kills": 3,
"deaths": 4,
"games": 2,
"kd": 0.75,
"avg_score": 22.0,
"aid": "pb-IF43VVJSAg=="
},
"pb-IF5XUm9eAg==": {
"rank": 1,
"name": "\ue030PC402015",
"scores": 2167,
"total_damage": 0.0,
"kills": 8,
"deaths": 193,
"games": 136,
"kd": 0.041,
"avg_score": 15.933,
"aid": "pb-IF5XUm9eAg=="
"startDate": "26-02-2022",
"stats": {
"pb-IF4VAk4a": {
"rank": 1,
"name": "pb-IF4VAk4a",
"scores": 0,
"total_damage": 0.0,
"kills": 0,
"deaths": 0,
"games": 18,
"kd": 0.0,
"avg_score": 0.0,
"aid": "pb-IF4VAk4a"
}
}
}