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 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 }