コード例 #1
0
def leaderboards_map(map, page=1):
    if map:
        stats_page = DBScore.query.filter_by(
            id=DBMap.get_id_for_game_map(map)).order_by(
                DBScore.tick_time * DBScore.tick_rate).paginate(page)
        if stats_page is not None:
            for stat in stats_page.items:
                try:
                    stat.timeconverted = float(
                        stat.tick_time) * time_convert[str(stat.tick_rate)]
                    stat.timeconverted = str(
                        datetime.timedelta(seconds=stat.timeconverted))
                    if "." in stat.timeconverted:
                        stat.timeconverted = stat.timeconverted[:-4]
                except:
                    print 'Exception caught on leaderboards main page while trying to query it.'
                    continue
            return render_template('leaderboards/index.html',
                                   stats_page=stats_page,
                                   map=map,
                                   qtype='map')
        else:
            flash('No runs recorded for ' + str(map))
            return redirect(url_for('leaderboards_main', page=page))
    else:
        flash('An error ocurred when trying to access runs for ' + str(map))
        return redirect(url_for('leaderboards_main', page=page))
コード例 #2
0
def leaderboars_me_friendsruns(map=None, page=1,):
    try:
        idlist = current_user.get_friendslist()
        if idlist is not None:
            stats_page = DBScore.query.filter(DBScore.steamid.in_(idlist))
            if map is not None:
                stats_page = stats_page.filter_by(id=DBMap.get_id_for_game_map(map))
            stats_page = stats_page.order_by(DBScore.tick_time * DBScore.tick_rate).order_by(DBScore.mapid).paginate(page)
            if stats_page is not None:
                for stat in stats_page.items:
                    try:
                        stat.timeconverted = float(stat.tick_time) * time_convert[str(stat.tick_rate)]
                        stat.timeconverted = str(datetime.timedelta(seconds=stat.timeconverted))
                        if "." in stat.timeconverted:
                            stat.timeconverted = stat.timeconverted[:-4]
                    except:
                        print 'Exception caught on leaderboards main page while trying to query it.'
                        continue
                return render_template('leaderboards/index.html', stats_page=stats_page, map=map, qtype='myfriends')
            else:
                flash('No runs friend runs recorded')
                return redirect(url_for('leaderboards_main'))
        else:
            flash('You need some friends first :)')
            return redirect(url_for('leaderboards_main'))
    except:
        flash('An error ocurred when trying to access runs for ' + str(current_user.steamid))
        return redirect(url_for('leaderboards_main'))
コード例 #3
0
def leaderboards_player(steamid,map=None,page=1):
    try:
        info = get_steam_userinfo(steamid)
        if info is not None:
            stats_page = DBScore.query.filter_by(steamid=steamid)
            if map is not None:
                stats_page = stats_page.filter_by(id=DBMap.get_id_for_game_map(map))
            stats_page = stats_page.order_by(DBScore.tick_time * DBScore.tick_rate).paginate(page)
            if stats_page is not None:
                for stat in stats_page.items:
                    try:
                        stat.timeconverted = float(stat.tick_time) * time_convert[str(stat.tick_rate)]
                        stat.timeconverted = str(datetime.timedelta(seconds=stat.timeconverted))
                        if "." in stat.timeconverted:
                            stat.timeconverted = stat.timeconverted[:-4]
                    except:
                        print 'Exception caught on leaderboards main page while trying to query it.'
                        continue
                return render_template('leaderboards/index.html', stats_page=stats_page, pinfo=info,map=map, qtype='player')
            else:
                flash('No runs recorded for ' + str(steamid))
                return redirect(url_for('leaderboards_main'))
        else:
            flash('Wrong steamid')
            return redirect(url_for('leaderboards_main'))
    except:
        flash('An error ocurred when trying to access runs for ' + str(steamid))
        return redirect(url_for('leaderboards_main'))
コード例 #4
0
ファイル: dashboard.py プロジェクト: kirkelifson/leaderboards
def dashboard_maps():
    if request.method == 'GET':
        mform = MapsForm()
        return render_template('dashboard/maps.html',
                               destination='maps',
                               form=mform,
                               editing=False)
    else:
        mfrom = MapsForm()
        try:
            mfrom.mapname.data = request.form.get('mapname')
            mfrom.filepath.data = request.form.get('filepath')
            mfrom.thumbnail.data = request.form.get('thumbnail')
            mfrom.difficulty.data = request.form.get('difficulty')
            mfrom.stages.data = request.form.get('stages')
            if mfrom.validate():
                if DBMap.query.filter_by(stylized_mapname=str(
                        request.form.get('mapname'))).count() != 0:
                    flash('There is already a map called ' +
                          str(request.form.get('mapname')) + '.')
                else:
                    mapfile = os.path.basename(mfrom.filepath.data)
                    thumbnail = mfrom.thumbnail.data
                    if mapfile.endswith('.bsp') and thumbnail.endswith('.jpg'):
                        gamemode = -1
                        if mapfile.startswith('bhop_'):
                            gamemode = 2
                        elif mapfile.startswith('surf_'):
                            gamemode = 1
                        else:
                            gamemode = 3
                        if thumbnail is not None and imagevalidation_soft(
                                thumbnail):
                            mapo = DBMap(
                                os.path.splitext(mapfile)[0],
                                mfrom.mapname.data, mfrom.filepath.data,
                                mfrom.thumbnail.data, gamemode,
                                mfrom.difficulty.data, mfrom.stages.data)
                            db.session.add(mapo)
                            db.session.commit()
                            flash('Map ' + str(mapo.game_map) +
                                  ' added successfully.')
                        else:
                            flash('Could not fetch thumbnail ' +
                                  str(thumbnail) + str(thumbnailcode) +
                                  '. Check the path to the image')
                    else:
                        flash('Check file extensions.')
            else:
                flash('Form could not be validated. Check the errors')
        except:
            flash('Error while querying.')
        return render_template('dashboard/maps.html',
                               destination='maps',
                               form=mfrom,
                               editing=False)
コード例 #5
0
ファイル: api.py プロジェクト: kirkelifson/leaderboards
def api_post_score(steamid, map, ticks, tickrate):
    response = {}
    if str(tickrate) not in time_convert:
        response['result'] = 'false'
        response['status'] = 'error'
        response['message'] = '#MOM_WebMsg_RunNotSaved_WrongTickrate'
        response['PBdiff'] = None
        return jsonify(json_list=[response])
    else:
        try:
            # takes 64-bit steamid
            mapid = DBMap.get_id_for_game_map(map)
            if mapid == -1:
                response['result'] = 'false'
                response['status'] = 'MissingMap'
                response['message'] = '#MOM_WebMsg_RunNotSaved_MapNotFound'
                response['PBdiff'] = None
                return jsonify(json_list=[response])
            personalbest = DBScore.query.filter_by(steamid=steamid).filter_by(
                mapid=mapid).order_by(DBScore.tick_time *
                                      DBScore.tick_rate).first()
            if personalbest is not None:
                if personalbest.tick_time * personalbest.tick_rate > tickrate * ticks:
                    response['message'] = '#MOM_WebMsg_RunSaved_NewPB'
                else:
                    response['message'] = '#MOM_WebMsg_RunSaved'
                response['PBdiff'] = float(
                    (time_convert[str(tickrate)] * ticks) -
                    (personalbest.tick_time *
                     time_convert[str(personalbest.tick_rate)]))
            else:
                response['message'] = '#MOM_WebMsg_FirstRunSaved'
                response['PBdiff'] = None
            score = DBScore(steamid, mapid, ticks, tickrate, 0)
            db.session.add(score)
            db.session.commit()
            response['result'] = 'true'
            response['status'] = 'submitted'
        except OperationalError as e:
            response['result'] = 'false'
            response['status'] = 'error'
            response[
                'message'] = '#MOM_WebMsg_RunNotSaved_InternalServerErrors'
            response['PBdiff'] = None
        return jsonify(json_list=[response])
コード例 #6
0
def leaderboars_me_friendsruns(
    map=None,
    page=1,
):
    try:
        idlist = current_user.get_friendslist()
        if idlist is not None:
            stats_page = DBScore.query.filter(DBScore.steamid.in_(idlist))
            if map is not None:
                stats_page = stats_page.filter_by(
                    id=DBMap.get_id_for_game_map(map))
            stats_page = stats_page.order_by(DBScore.tick_time *
                                             DBScore.tick_rate).order_by(
                                                 DBScore.mapid).paginate(page)
            if stats_page is not None:
                for stat in stats_page.items:
                    try:
                        stat.timeconverted = float(
                            stat.tick_time) * time_convert[str(stat.tick_rate)]
                        stat.timeconverted = str(
                            datetime.timedelta(seconds=stat.timeconverted))
                        if "." in stat.timeconverted:
                            stat.timeconverted = stat.timeconverted[:-4]
                    except:
                        print 'Exception caught on leaderboards main page while trying to query it.'
                        continue
                return render_template('leaderboards/index.html',
                                       stats_page=stats_page,
                                       map=map,
                                       qtype='myfriends')
            else:
                flash('No runs friend runs recorded')
                return redirect(url_for('leaderboards_main'))
        else:
            flash('You need some friends first :)')
            return redirect(url_for('leaderboards_main'))
    except:
        flash('An error ocurred when trying to access runs for ' +
              str(current_user.steamid))
        return redirect(url_for('leaderboards_main'))
コード例 #7
0
ファイル: api.py プロジェクト: kirkelifson/leaderboards
def api_post_score(steamid, map, ticks, tickrate):
    response = {}
    if str(tickrate) not in time_convert:
        response['result'] = 'false'
        response['status'] = 'error'
        response['message'] = '#MOM_WebMsg_RunNotSaved_WrongTickrate'
        response['PBdiff'] = None
        return jsonify(json_list=[response])
    else:
        try:
            # takes 64-bit steamid
            mapid = DBMap.get_id_for_game_map(map)
            if mapid == -1:
                response['result'] = 'false'
                response['status'] = 'MissingMap'
                response['message'] = '#MOM_WebMsg_RunNotSaved_MapNotFound'
                response['PBdiff'] = None
                return jsonify(json_list=[response])
            personalbest = DBScore.query.filter_by(steamid=steamid).filter_by(mapid=mapid).order_by(DBScore.tick_time * DBScore.tick_rate).first()
            if personalbest is not None:
                if personalbest.tick_time * personalbest.tick_rate > tickrate * ticks: 
                    response['message'] = '#MOM_WebMsg_RunSaved_NewPB'
                else:
                    response['message'] = '#MOM_WebMsg_RunSaved'
                response['PBdiff'] = float((time_convert[str(tickrate)] * ticks) - (personalbest.tick_time * time_convert[str(personalbest.tick_rate)]))
            else:
                response['message'] = '#MOM_WebMsg_FirstRunSaved'
                response['PBdiff'] = None
            score = DBScore(steamid, mapid, ticks, tickrate, 0)
            db.session.add(score)
            db.session.commit()  
            response['result'] = 'true'
            response['status'] = 'submitted'
        except OperationalError as e:
            response['result'] = 'false'
            response['status'] = 'error'
            response['message'] = '#MOM_WebMsg_RunNotSaved_InternalServerErrors'
            response['PBdiff'] = None
        return jsonify(json_list=[response])