def buyout(self): ''' Buyout and unlock a level ''' user = self.get_current_user() level = GameLevel.by_uuid(self.get_argument('uuid', '')) if level is not None and user is not None: if level.buyout <= user.team.money: logging.info("%s (%s) payed buyout for level #%d" % ( user.handle, user.team.name, level.number )) user.team.game_levels.append(level) user.team.money -= level.buyout self.dbsession.add(user.team) self.dbsession.commit() event = self.event_manager.create_unlocked_level_event(user, level) self.new_events.append(event) self.redirect("/user/missions") else: self.render("missions/view.html", team=user.team, errors=["You do not have enough money to unlock this level"] ) else: self.render("missions/view.html", team=user.team, errors=["Level does not exist"] )
def buyout(self): ''' Buyout and unlock a level ''' user = self.get_current_user() level = GameLevel.by_uuid(self.get_argument('uuid', '')) if level is not None and user is not None: if level.buyout <= user.team.money: logging.info("%s (%s) payed buyout for level #%d" % (user.handle, user.team.name, level.number)) user.team.game_levels.append(level) user.team.money -= level.buyout self.dbsession.add(user.team) self.dbsession.commit() self.event_manager.level_unlocked(user, level) self.redirect("/user/missions") else: self.render( "missions/view.html", team=user.team, errors=[ "You do not have enough money to unlock this level" ]) else: self.render("missions/view.html", team=user.team, errors=["Level does not exist"])
def edit_game_level(self): ''' Update game level objects ''' errors = [] level = GameLevel.by_uuid(self.get_argument('uuid')) try: new_number = int(self.get_argument('number', '')) new_buyout = int(self.get_argument('buyout', '')) if level.number != new_number and GameLevel.by_number(new_number) is None: level.number = new_number self.dbsession.add(level) # Fix the linked-list game_levels = sorted(GameLevel.all()) index = 0 for game_level in game_levels[:-1]: game_level.next_level_id = game_levels[index + 1].id self.dbsession.add(game_level) index += 1 game_levels[0].number = 0 self.dbsession.add(game_levels[0]) game_levels[-1].next_level_id = None self.dbsession.add(game_levels[-1]) if GameLevel.by_number(new_number) is not None: errors.append("GameLevel number is not unique") if level.buyout != new_buyout: level.buyout = new_buyout self.dbsession.add(level) self.dbsession.commit() except ValueError: errors.append("That was not a number ...") self.render("admin/view/game_levels.html", errors=errors)
def edit_game_level(self): ''' Update game level objects ''' try: level = GameLevel.by_uuid(self.get_argument('uuid', '')) if level is None: raise ValidationError("Game level does not exist") if int(self.get_argument('number', level.number)) != level.number: level.number = self.get_argument('number') level.buyout = self.get_argument('buyout', '1') self.dbsession.add(level) self.dbsession.flush() # Fix the linked-list game_levels = sorted(GameLevel.all()) for index, game_level in enumerate(game_levels[:-1]): game_level.next_level_id = game_levels[index + 1].id self.dbsession.add(game_level) if game_levels[0].number != 0: game_levels[0].number = 0 self.dbsession.add(game_levels[0]) game_levels[-1].next_level_id = None self.dbsession.add(game_levels[-1]) self.dbsession.add(level) self.dbsession.commit() self.redirect('/admin/view/game_levels') except ValueError: raise ValidationError("That was not a number ...") except ValidationError as error: self.render("admin/view/game_levels.html", errors=[ str(error), ])
def edit_game_level(self): ''' Update game level objects ''' try: level = GameLevel.by_uuid(self.get_argument('uuid', '')) if level is None: raise ValidationError("Game level does not exist") if int(self.get_argument('number', level.number)) != level.number: level.number = self.get_argument('number') level.buyout = self.get_argument('buyout', '1') self.dbsession.add(level) self.dbsession.flush() # Fix the linked-list game_levels = sorted(GameLevel.all()) for index, game_level in enumerate(game_levels[:-1]): game_level.next_level_id = game_levels[index + 1].id self.dbsession.add(game_level) if game_levels[0].number != 0: game_levels[0].number = 0 self.dbsession.add(game_levels[0]) game_levels[-1].next_level_id = None self.dbsession.add(game_levels[-1]) self.dbsession.add(level) self.dbsession.commit() self.redirect('/admin/view/game_levels') except ValueError: raise ValidationError("That was not a number ...") except ValidationError as error: self.render("admin/view/game_levels.html", errors=[str(error), ])
def box_level(self): """ Changes a boxs level """ errors = [] box = Box.by_uuid(self.get_argument("box_uuid", "")) level = GameLevel.by_uuid(self.get_argument("level_uuid", "")) if box is not None and level is not None: box.game_level_id = level.id self.dbsession.add(box) self.dbsession.commit() elif box is None: errors.append("Box does not exist") elif level is None: errors.append("GameLevel does not exist") self.render("admin/view/game_levels.html", errors=errors)
def box_level(self): ''' Changes a boxs level ''' errors = [] box = Box.by_uuid(self.get_argument('box_uuid')) level = GameLevel.by_uuid(self.get_argument('level_uuid')) if box is not None and level is not None: box.game_level_id = level.id self.dbsession.add(box) self.dbsession.commit() elif box is None: errors.append("Box does not exist") elif level is None: errors.append("GameLevel does not exist") self.render("admin/view/game_levels.html", errors=errors)
def del_game_level(self): ''' Deletes a game level, and fixes the linked list ''' game_level = GameLevel.by_uuid(self.get_argument('uuid', '')) if game_level is not None: game_levels = sorted(GameLevel.all()) game_levels.remove(game_level) for index, level in enumerate(game_levels[:-1]): level.next_level_id = game_levels[index + 1].id self.dbsession.add(level) if game_levels[0].number != 0: game_levels[0].number = 0 self.dbsession.add(game_levels[0]) game_levels[-1].next_level_id = None self.dbsession.add(game_levels[-1]) self.dbsession.delete(game_level) self.dbsession.commit() self.redirect('/admin/view/game_levels') else: self.render('admin/view/game_levels.html', errors=["Game level does not exist in database."])
def del_game_level(self): ''' Deletes a game level, and fixes the linked list ''' game_level = GameLevel.by_uuid(self.get_argument('uuid', '')) if game_level is not None: game_levels = sorted(GameLevel.all()) game_levels.remove(game_level) for index, level in enumerate(game_levels[:-1]): level.next_level_id = game_levels[index + 1].id self.dbsession.add(level) if game_levels[0].number != 0: game_levels[0].number = 0 self.dbsession.add(game_levels[0]) game_levels[-1].next_level_id = None self.dbsession.add(game_levels[-1]) self.dbsession.delete(game_level) self.dbsession.commit() self.redirect('/admin/view/game_levels') else: self.render('admin/view/game_levels.html', errors=["Game level does not exist in database."] )
def edit_game_level(self): """ Update game level objects """ try: level = GameLevel.by_uuid(self.get_argument("uuid", "")) if level is None: raise ValidationError("Game level does not exist") if int(self.get_argument("number", level.number)) != level.number: level.number = self.get_argument("number", "") level.buyout = self.get_argument("buyout", 1) level._type = self.get_argument("type", "buyout") level._reward = self.get_argument("reward", 0) level.name = self.get_argument("name", None) level.description = self.get_argument("description", "") if level._type == "progress": level.buyout = min(level.buyout, 100) elif level._type == "none": level.buyout = 0 if level._type != "none" and level.buyout == 0: level._type = "none" self.dbsession.add(level) self.dbsession.flush() # Fix the linked-list game_levels = sorted(GameLevel.all()) for index, game_level in enumerate(game_levels[:-1]): game_level.next_level_id = game_levels[index + 1].id self.dbsession.add(game_level) if game_levels[0].number != 0: game_levels[0].number = 0 self.dbsession.add(game_levels[0]) game_levels[-1].next_level_id = None self.dbsession.add(game_levels[-1]) self.dbsession.add(level) self.dbsession.commit() self.redirect("/admin/view/game_levels") except ValueError: raise ValidationError("That was not a number ...") except ValidationError as error: self.render("admin/view/game_levels.html", errors=[str(error)])
def edit_level_access(self): """ Update game level access """ try: level = GameLevel.by_uuid(self.get_argument("uuid", "")) if level is None: raise ValidationError("Game level does not exist") else: teams = [] lv_teams = level.teams for team in lv_teams: teams.append(team.uuid) access = self.request.arguments.get("accessList", []) available = self.request.arguments.get("availableList", []) if not isinstance(access, list): access = [access] if not isinstance(available, list): available = [available] for team_uuid in access: if decode(team_uuid) not in teams: team = Team.by_uuid(team_uuid) if team: team.game_levels.append(level) self.dbsession.add(team) self.dbsession.commit() for team_uuid in available: if decode(team_uuid) in teams: team = Team.by_uuid(team_uuid) if team: team.game_levels.remove(level) self.dbsession.add(team) self.dbsession.commit() self.redirect("/admin/view/game_levels") except ValueError: raise ValidationError("That was not a number ...") except ValidationError as error: self.render("admin/view/game_levels.html", errors=[str(error)])