def get_data_on_server(player, server): """ Returns a dict of all the data for a particular player which consists of their global gameplay stats and the stats for the given server. """ first_ever_seen = db.session.query(func.min( PlayerStats.first_seen)).join(Server).filter( PlayerStats.player_id == player.id, Server.type == 'survival').scalar() if not first_ever_seen: return None last_seen = db.session.query(func.max( PlayerStats.last_seen)).join(Server).filter( PlayerStats.player_id == player.id, Server.type == 'survival').scalar() total_time = get_total_player_time(player.id) ore_discoveries = OreDiscoveryCount.query.options( joinedload(OreDiscoveryCount.material_type)).filter_by(player=player, server=server) ore_counts = {type: 0 for type in MaterialType.ORES} for ore in ore_discoveries: ore_counts[ore.material_type.type] += ore.count ore_counts = [(ore.displayname, ore_counts[ore.type]) for ore in MaterialType.get_ores()] stats = PlayerStats.query.filter_by(server=server, player=player).first() server_stats = None if stats: server_stats = { 'rank': stats.rank, 'time_spent': h.elapsed_time_string(stats.time_spent), 'pvp_logs': stats.pvp_logs, 'group': stats.group, 'is_leader': stats.is_leader, 'is_moderator': stats.is_moderator, 'ore_counts': ore_counts } online_now = datetime.utcnow() - last_seen < timedelta(minutes=1) return { 'first_ever_seen': first_ever_seen, 'last_seen': last_seen, 'online_now': online_now, 'total_time': h.elapsed_time_string(total_time), 'combat_stats': get_combat_data(player, server), 'server_stats': server_stats }
def rank_query(): username = request.args.get('username') uuid = request.args.get('uuid') if uuid: player = Player.query.options( joinedload(Player.titles) ).filter_by(uuid=uuid).first() else: player = Player.query.options( joinedload(Player.titles) ).filter( or_( Player.username == username, Player.nickname == username ) ).first() if not player: player = Player.query.options( joinedload(Player.titles) ).filter( or_( Player.username.ilike('%%%s%%' % username), Player.nickname.ilike('%%%s%%' % username) ) ).first() if not player: return jsonify({ 'err': 1 }) stats = PlayerStats.query.filter_by(server=g.server, player=player).first() if not stats: return jsonify({ 'err': 1 }) time = h.elapsed_time_string(stats.time_spent) last_seen = int(calendar.timegm(stats.last_seen.timetuple())) titles = [{'name': x.name, 'broadcast': x.broadcast} for x in player.titles] retval = { 'err': 0, 'rank': stats.rank, 'time': time, 'last_seen': last_seen, 'minutes': stats.time_spent, 'username': player.username, 'uuid': player.uuid, 'titles': titles } return jsonify(retval)
def get_ranking_data(server): retval = [] player_stats = PlayerStats.query.filter_by(server=server) \ .order_by(PlayerStats.time_spent.desc()) \ .limit(40) \ .options(joinedload('player')) \ for stats in player_stats: online_now = datetime.utcnow() - timedelta(minutes=1) < stats.last_seen retval.append((stats.player, h.elapsed_time_string(stats.time_spent), online_now)) return retval
def rank_query(): username = request.args.get('username') uuid = request.args.get('uuid') if uuid: player = Player.query.options(joinedload( Player.titles)).filter_by(uuid=uuid).first() else: player = Player.query.options(joinedload(Player.titles)).filter( or_(Player.username == username, Player.nickname == username)).first() if not player: player = Player.query.options(joinedload(Player.titles)).filter( or_(Player.username.ilike('%%%s%%' % username), Player.nickname.ilike('%%%s%%' % username))).first() if not player: return jsonify({'err': 1}) stats = PlayerStats.query.filter_by(server=g.server, player=player).first() if not stats: return jsonify({'err': 1}) time = h.elapsed_time_string(stats.time_spent) last_seen = int(calendar.timegm(stats.last_seen.timetuple())) titles = [{ 'name': x.name, 'broadcast': x.broadcast } for x in player.titles] retval = { 'err': 0, 'rank': stats.rank, 'time': time, 'last_seen': last_seen, 'minutes': stats.time_spent, 'username': player.username, 'uuid': player.uuid, 'titles': titles } return jsonify(retval)
def rank_query(request): username = request.GET.get('username') exact = int(request.GET.get('exact', 0)) try: if exact: player = MinecraftPlayer.objects.get(username=username) else: players = MinecraftPlayer.objects.filter( Q(username__icontains=username) | Q(nickname__icontains=username)) player_info = sorted([x for x in players], key=lambda k: len(k.nickname or k.username)) player = player_info[0] stats = PlayerStats.objects.get(server=request.server, player=player) rank = stats.get_rank() time = h.elapsed_time_string(stats.time_spent) try: veteran_status = VeteranStatus.objects.get(player=player) veteran_rank = veteran_status.rank except: veteran_rank = None response_data = { 'result': 1, 'rank': rank, 'time': time, 'minutes': stats.time_spent } if veteran_rank: response_data['veteran_rank'] = veteran_rank if not exact: response_data['username'] = player.username except Exception as e: response_data = {'result': 0} return HttpResponse(json.dumps(response_data), content_type="application/json")
def rank_query(request): username = request.GET.get('username') exact = int(request.GET.get('exact', 0)) try: if exact: player = MinecraftPlayer.objects.get(username=username) else: players = MinecraftPlayer.objects.filter(Q(username__icontains=username) | Q(nickname__icontains=username)) player_info = sorted([x for x in players], key=lambda k: len(k.nickname or k.username)) player = player_info[0] stats = PlayerStats.objects.get(server=request.server, player=player) rank = stats.get_rank() time = h.elapsed_time_string(stats.time_spent) try: veteran_status = VeteranStatus.objects.get(player=player) veteran_rank = veteran_status.rank except: veteran_rank = None response_data = { 'result': 1, 'rank': rank, 'time': time, 'minutes': stats.time_spent } if veteran_rank: response_data['veteran_rank'] = veteran_rank if not exact: response_data['username'] = player.username except Exception as e: response_data = { 'result': 0 } return HttpResponse(json.dumps(response_data), content_type="application/json")
def get_data_on_server(player, server): """ Returns a dict of all the data for a particular player which consists of their global gameplay stats and the stats for the given server. """ first_ever_seen = db.session.query( func.min(PlayerStats.first_seen) ).join(Server).filter( PlayerStats.player_id == player.id, Server.type == 'survival' ).scalar() if not first_ever_seen: return None last_seen = db.session.query( func.max(PlayerStats.last_seen) ).join(Server).filter( PlayerStats.player_id == player.id, Server.type == 'survival' ).scalar() total_time = db.session.query( func.sum(PlayerStats.time_spent) ).join(Server).filter( PlayerStats.player_id == player.id, Server.type == 'survival' ).scalar() ore_discoveries = OreDiscoveryCount.query.options( joinedload(OreDiscoveryCount.material_type) ).filter_by( player=player, server=server ) ore_counts = {type: 0 for type in MaterialType.ORES} for ore in ore_discoveries: ore_counts[ore.material_type.type] += ore.count ore_counts = [(ore.displayname, ore_counts[ore.type]) for ore in MaterialType.get_ores()] stats = PlayerStats.query.filter_by( server=server, player=player ).first() server_stats = None if stats: server_stats = { 'rank': stats.rank, 'time_spent': h.elapsed_time_string(stats.time_spent), 'pvp_logs': stats.pvp_logs, 'group': stats.group, 'is_leader': stats.is_leader, 'is_moderator': stats.is_moderator, 'ore_counts': ore_counts } online_now = datetime.utcnow() - last_seen < timedelta(minutes=1) return { 'first_ever_seen': first_ever_seen, 'last_seen': last_seen, 'online_now': online_now, 'total_time': h.elapsed_time_string(total_time), 'combat_stats': get_combat_data(player, server), 'server_stats': server_stats }
def rank_query(): username = request.args.get('username') uuid = request.args.get('uuid') if uuid: player = Player.query.options( joinedload(Player.titles) ).filter_by(uuid=uuid).first() else: player = Player.query.options( joinedload(Player.titles) ).filter(or_(Player.username.ilike('%%%s%%' % username), Player.nickname.ilike('%%%s%%' % username)))\ .order_by(func.ifnull(Player.nickname, Player.username))\ .limit(1).first() if not player: return jsonify({ 'err': 1 }) stats = PlayerStats.query.filter_by(server=g.server, player=player).first() if not stats: return jsonify({ 'err': 1 }) time = h.elapsed_time_string(stats.time_spent) veteran_statuses = VeteranStatus.query.filter_by(player=player) for veteran_status in veteran_statuses: server_id = veteran_status.server_id rank = veteran_status.rank server_name = { 1: 'SS I', 2: 'SS II', 4: 'SS III' }[server_id] if rank <= 10: veteran_group = 'Top 10 Veteran' elif rank <= 40: veteran_group = 'Top 40 Veteran' else: veteran_group = 'Veteran' title_name = '%s %s' % (server_name, veteran_group) title = Title.query.filter_by(name=title_name).first() if title and title not in player.titles: player.titles.append(title) player.save(commit=True) titles = [{'name': x.name, 'broadcast': x.broadcast} for x in player.titles] retval = { 'err': 0, 'rank': stats.rank, 'time': time, 'minutes': stats.time_spent, 'username': player.username, 'uuid': player.uuid, 'titles': titles } return jsonify(retval)