def post(self, *args, **kwargs): ''' Reset the Game ''' errors = [] success = None try: users = User.all() for user in users: user.money = 0 teams = Team.all() for team in teams: if options.banking: team.money = options.starting_team_money else: team.money = 0 team.flags = [] team.hints = [] team.boxes = [] team.items = [] team.purchased_source_code = [] level_0 = GameLevel.by_number(0) if not level_0: level_0 = GameLevel.all()[0] team.game_levels = [level_0] self.dbsession.add(team) self.dbsession.commit() self.dbsession.flush() for team in teams: for paste in team.pastes: self.dbsession.delete(paste) for shared_file in team.files: shared_file.delete_data() self.dbsession.delete(shared_file) self.dbsession.commit() self.dbsession.flush() Penalty.clear() Notification.clear() snapshot = Snapshot.all() for snap in snapshot: self.dbsession.delete(snap) self.dbsession.commit() snapshot_team = SnapshotTeam.all() for snap in snapshot_team: self.dbsession.delete(snap) self.dbsession.commit() game_history = GameHistory.instance() game_history.take_snapshot() # Take starting snapshot flags = Flag.all() for flag in flags: flag.value = flag._original_value if flag._original_value else flag.value self.dbsession.add(flag) self.dbsession.commit() self.dbsession.flush() success = "Successfully Reset Game" self.render('admin/reset.html', success=success, errors=errors) except BaseException as e: errors.append("Failed to Reset Game") logging.error(str(e)) self.render('admin/reset.html', success=None, errors=errors)
def post(self, *args, **kwargs): """ Reset the Game """ errors = [] success = None try: users = User.all() for user in users: user.money = 0 teams = Team.all() for team in teams: if options.banking: team.money = options.starting_team_money else: team.money = 0 team.flags = [] team.hints = [] team.boxes = [] team.items = [] team.purchased_source_code = [] level_0 = GameLevel.by_number(0) if not level_0: level_0 = GameLevel.all()[0] team.game_levels = [level_0] self.dbsession.add(team) self.dbsession.commit() self.dbsession.flush() for team in teams: for paste in team.pastes: self.dbsession.delete(paste) for shared_file in team.files: shared_file.delete_data() self.dbsession.delete(shared_file) self.dbsession.commit() self.dbsession.flush() Penalty.clear() Notification.clear() snapshot = Snapshot.all() for snap in snapshot: self.dbsession.delete(snap) self.dbsession.commit() snapshot_team = SnapshotTeam.all() for snap in snapshot_team: self.dbsession.delete(snap) self.dbsession.commit() game_history = GameHistory.instance() game_history.take_snapshot() # Take starting snapshot flags = Flag.all() for flag in flags: # flag.value = flag.value allows a fallback to when original_value was used # Allows for the flag value to be reset if dynamic scoring was used # Can be removed after depreciation timeframe flag.value = flag.value self.dbsession.add(flag) self.dbsession.commit() self.dbsession.flush() self.event_manager.push_score_update() self.flush_memcached() success = "Successfully Reset Game" self.render("admin/reset.html", success=success, errors=errors) except BaseException as e: errors.append("Failed to Reset Game") logging.error(str(e)) self.render("admin/reset.html", success=None, errors=errors)
def update_gamestate(self, app): game_state = { "teams": {}, "levels": {}, "boxes": {}, "hint_count": len(Hint.all()), "flag_count": len(Flag.all()), "box_count": len(Box.all()), "level_count": len(GameLevel.all()), } teams = Team.ranks() for team in teams: if len(team.members) > 0: millis = int(round(time.time() * 1000)) game_state["teams"][team.name] = { "uuid": team.uuid, "flags": [str(flag) for flag in team.flags], "game_levels": [str(lvl) for lvl in team.game_levels], "members_count": len(team.members), "hints_count": len(team.hints), "bot_count": BotManager.instance().count_by_team(team.name), "money": team.money, } highlights = {"money": 0, "flag": 0, "bot": 0, "hint": 0} for item in highlights: value = team.get_score(item) game_state["teams"][team.name][item] = value game_history = app.settings["scoreboard_history"] if team.name in game_history: prev = game_history[team.name][item] if prev < value: highlights[item] = millis else: highlights[item] = game_history[ team.name]["highlights"][item] highlights["now"] = millis game_state["teams"][team.name]["highlights"] = highlights app.settings["scoreboard_history"][ team.name] = game_state["teams"].get(team.name) for level in GameLevel.all(): game_state["levels"][level.name] = { "type": level.type, "number": level.number, "teams": {}, "boxes": {}, "box_count": len(level.boxes), "flag_count": len(level.flags), } for team in teams: game_state["levels"][level.name]["teams"][team.name] = { "lvl_count": len(team.level_flags(level.number)), "lvl_unlock": level in team.game_levels, } for box in level.boxes: game_state["levels"][level.name]["boxes"][box.uuid] = { "name": box.name, "teams": {}, "flag_count": len(box.flags), } for team in teams: game_state["levels"][level.name]["boxes"][ box.uuid]["teams"][team.name] = { "box_count": len(team.box_flags(box)) } app.settings["scoreboard_state"] = game_state