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
    }
Beispiel #2
0
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 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
Beispiel #5
0
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)
Beispiel #6
0
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")
Beispiel #7
0
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
    }
Beispiel #9
0
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)