def log_ore_discovery():
    uuid = request.form.get('uuid')
    type = request.form.get('type')
    x = int(request.form.get('x'))
    y = int(request.form.get('y'))
    z = int(request.form.get('z'))

    player = Player.query.filter_by(uuid=uuid).first()

    if not player:
        return jsonify({'err': 1})

    material_type = MaterialType.factory(type=type)

    ore_event = OreDiscoveryEvent(server=g.server,
                                  material_type=material_type,
                                  player=player,
                                  x=x,
                                  y=y,
                                  z=z)
    OreDiscoveryCount.increment(g.server, material_type, player, commit=False)

    ore_event.save(commit=True)

    return jsonify({'err': 0})
Exemple #2
0
def log_ore_discovery():
    uuid = request.form.get('uuid')
    type = request.form.get('type')
    x = int(request.form.get('x'))
    y = int(request.form.get('y'))
    z = int(request.form.get('z'))

    player = Player.query.filter_by(uuid=uuid).first()

    if not player:
        return jsonify({
            'err': 1
        })

    material_type = MaterialType.factory(type=type)

    ore_event = OreDiscoveryEvent(server=g.server, material_type=material_type,
                                  player=player, x=x, y=y, z=z)
    OreDiscoveryCount.increment(g.server, material_type, player, commit=False)

    ore_event.save(commit=True)

    return jsonify({
        'err': 0
    })
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 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
    }