def create_game_level(number, buyout): ''' Creates a GameLevel object ''' if GameLevel.by_number(number) is not None: logging.info("Game level #%s already exists, skipping" % number) return GameLevel.by_number(number) logging.info("Create Game Level #%s with a buyout of $%s" % ( number, buyout )) new_level = GameLevel( number=abs(int(number)), buyout=abs(int(buyout)), ) game_levels = GameLevel.all() game_levels.append(new_level) logging.debug("Updating game level linked list ...") game_levels = sorted(game_levels) index = 0 for level in game_levels[:-1]: level.next_level_id = game_levels[index + 1].id dbsession.add(level) index += 1 game_levels[0].number = 0 dbsession.add(game_levels[0]) game_levels[-1].next_level_id = None dbsession.add(game_levels[-1]) dbsession.flush() return new_level
def create_game_level(self): ''' Creates a game level ''' form = Form( level_number="Please enter a level number", buyout="Please enter a buyout value", ) if form.validate(self.request.arguments): try: game_level = int(self.get_argument('level_number')) buyout = int(self.get_argument('buyout')) if game_level <= 0: self.render('admin/create/game_level.html', errors=["Level number must be greater than 0"]) elif GameLevel.by_number(game_level) is not None: self.render('admin/create/game_level.html', errors=["Game level number must be unique"]) elif buyout < 0: self.render('admin/create/game_level.html', errors=["Invalid buyout value"]) else: self.__mklevel__(game_level, buyout) self.redirect('/admin/view/game_levels') except ValueError: self.render('admin/create/game_level.html', errors=["Invalid level number"]) else: self.render('admin/create/game_level.html', errors=form.errors)
def buyout(self): ''' Buyout and unlock a level ''' form = Form(uuid="Level parameter missing") user = self.get_current_user() if form.validate(self.request.arguments): 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 dbsession.add(user.team) 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"] ) else: self.render("missions/view.html", team=user.team, errors=form.errors )
def buyout(self): ''' Buyout and unlock a level ''' form = Form(uuid="Level parameter missing") user = self.get_current_user() if form.validate(self.request.arguments): level = GameLevel.by_uuid(self.get_argument('uuid', '')) if level is not None and user is not None: if level.buyout < user.team.money: user.team.game_levels.append(level) user.team.money -= level.buyout dbsession.add(user.team) self.event_manager.unlocked_level(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"] ) else: self.render("missions/view.html", team=user.team, errors=form.errors )
def create_box(self): ''' Create a box object ''' form = Form( box_name="Enter a box name", description="Enter a description", difficulty="Select a difficulty", corporation_uuid="Please select a corporation", game_level="Please select a game level", ) if form.validate(self.request.arguments): try: game_level = int(self.get_argument('game_level')) corp_uuid = self.get_argument('corporation_uuid') if Box.by_name(self.get_argument('box_name')) is not None: self.render("admin/create/box.html", errors=["Box name already exists"]) elif Corporation.by_uuid(corp_uuid) is None: self.render("admin/create/box.html", errors=["Corporation does not exist"]) elif GameLevel.by_number(game_level) is None: self.render("admin/create/box.html", errors=["Game level does not exist"]) else: self.__mkbox__() self.redirect('/admin/view/game_objects') except ValueError: self.render('admin/view/create.html', errors=["Invalid level number"]) else: self.render("admin/create/box.html", errors=form.errors)
def create_game_level(self): ''' Creates a game level ''' form = Form( level_number="Please enter a level number", buyout="Please enter a buyout value", ) if form.validate(self.request.arguments): try: game_level = int(self.get_argument('level_number')) buyout = int(self.get_argument('buyout')) if game_level <= 0: self.render('admin/create/game_level.html', errors=["Level number must be greater than 0"] ) elif GameLevel.by_number(game_level) is not None: self.render('admin/create/game_level.html', errors=["Game level number must be unique"] ) elif buyout < 0: self.render('admin/create/game_level.html', errors=["Invalid buyout value"] ) else: self.__mklevel__(game_level, buyout) self.redirect('/admin/view/game_levels') except ValueError: self.render('admin/create/game_level.html', errors=["Invalid level number"] ) else: self.render('admin/create/game_level.html', errors=form.errors)
def create_box(self): ''' Create a box object ''' form = Form( box_name="Enter a box name", description="Enter a description", difficulty="Select a difficulty", corporation_uuid="Please select a corporation", game_level="Please select a game level", ) if form.validate(self.request.arguments): try: game_level = int(self.get_argument('game_level')) corp_uuid = self.get_argument('corporation_uuid') if Box.by_name(self.get_argument('box_name')) is not None: self.render("admin/create/box.html", errors=["Box name already exists"] ) elif Corporation.by_uuid(corp_uuid) is None: self.render("admin/create/box.html", errors=["Corporation does not exist"] ) elif GameLevel.by_number(game_level) is None: self.render("admin/create/box.html", errors=["Game level does not exist"] ) else: self.__mkbox__() self.redirect('/admin/view/game_objects') except ValueError: self.render('admin/view/create.html', errors=["Invalid level number"] ) else: self.render("admin/create/box.html", errors=form.errors)
def edit_game_level(self): ''' Update game level objects ''' form = Form( uuid="Select an object", number="Enter a level number", buyout="Enter a buyout value", ) if form.validate(self.request.arguments): errors = [] level = GameLevel.by_uuid(self.get_argument('uuid')) try: new_number = int(self.get_argument('number', 'NaN')) new_buyout = int(self.get_argument('buyout', 'NaN')) if level.number != new_number and GameLevel.by_number( new_number) is None: level.number = new_number dbsession.add(level) dbsession.flush() # 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 dbsession.add(game_level) index += 1 game_levels[0].number = 0 dbsession.add(game_levels[0]) game_levels[-1].next_level_id = None dbsession.add(game_levels[-1]) dbsession.flush() 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 dbsession.add(level) dbsession.flush() except ValueError: errors.append( "That was not a number ... maybe you should go back to school" ) self.render("admin/view/game_levels.html", errors=errors) else: self.render("admin/view/game_levels.html", errors=form.errors)
def edit_game_level(self): ''' Update game level objects ''' form = Form( uuid="Select an object", number="Enter a level number", buyout="Enter a buyout value", ) if form.validate(self.request.arguments): errors = [] level = GameLevel.by_uuid(self.get_argument('uuid')) try: new_number = int(self.get_argument('number', 'NaN')) new_buyout = int(self.get_argument('buyout', 'NaN')) if level.number != new_number and GameLevel.by_number(new_number) is None: level.number = new_number dbsession.add(level) dbsession.flush() # 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 dbsession.add(game_level) index += 1 game_levels[0].number = 0 dbsession.add(game_levels[0]) game_levels[-1].next_level_id = None dbsession.add(game_levels[-1]) dbsession.flush() 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 dbsession.add(level) dbsession.flush() except ValueError: errors.append( "That was not a number ... maybe you should go back to school" ) self.render("admin/view/game_levels.html", errors=errors) else: self.render("admin/view/game_levels.html", errors=form.errors)
def create_team(name, motto): print(INFO + "Create team: " + bold + name + W) team = Team( name=unicode(name), motto=unicode(motto), ) level_0 = GameLevel.all()[0] team.game_levels.append(level_0) dbsession.add(team) dbsession.flush() return team
def create_team(self): ''' Create a new team ''' assert self.config.public_teams team = Team( name=unicode(self.get_argument('team_name')[:15]), motto=unicode(self.get_argument('motto')[:64]), ) level_0 = GameLevel.all()[0] team.game_levels.append(level_0) dbsession.add(team) dbsession.flush() return team
def create_game_level(level_number, buyout): print(INFO + "Create game level " + bold + "#" + str(level_number) + W + \ " with a buyout of " + bold + "$" + str(buyout) + W) new_level = GameLevel( number=level_number, buyout=buyout, ) game_levels = GameLevel.all() game_levels.append(new_level) print(INFO + "Updating game level linked list ...") game_levels = sorted(game_levels) index = 0 for level in game_levels[:-1]: level.next_level_id = game_levels[index + 1].id dbsession.add(level) index += 1 game_levels[0].number = 0 dbsession.add(game_levels[0]) game_levels[-1].next_level_id = None dbsession.add(game_levels[-1]) dbsession.flush() return new_level
def __mkbox__(self): ''' Creates a box in the database ''' corp = Corporation.by_uuid(self.get_argument('corporation_uuid')) level = GameLevel.by_number(int(self.get_argument('game_level'))) box = Box( name=unicode(self.get_argument('box_name')), description=unicode(self.get_argument('description')), difficulty=unicode(self.get_argument('difficulty')), corporation_id=corp.id, game_level_id=level.id, ) dbsession.add(box) dbsession.flush()
def create_team(name, motto): if Team.by_name(name) is not None: logging.info("Team with name '%s' already exists, skipping" % (name)) return Team.by_name(name) logging.info("Create Team: %s" % name) team = Team( name=unicode(name[:16]), motto=unicode(motto[:32]), ) level_0 = GameLevel.all()[0] team.game_levels.append(level_0) dbsession.add(team) dbsession.flush() return team
def __mklevel__(self, game_level, buyout): ''' Creates a new level in the database, the levels are basically a linked-list where each level points to the next, and the last points to None. This function creates a new level and sorts everything based on the 'number' attrib ''' new_level = GameLevel( number=game_level, buyout=buyout, ) game_levels = GameLevel.all() game_levels.append(new_level) game_levels = sorted(game_levels) index = 0 for level in game_levels[:-1]: level.next_level_id = game_levels[index + 1].id dbsession.add(level) index += 1 game_levels[0].number = 0 dbsession.add(game_levels[0]) game_levels[-1].next_level_id = None dbsession.add(game_levels[-1]) dbsession.flush()
def create_team(self): ''' Create a new team in the database ''' form = Form(team_name="Enter a team name", motto="Enter a team motto") if form.validate(self.request.arguments): team = Team( name=unicode(self.get_argument('team_name')), motto=unicode(self.get_argument('motto')), ) level_0 = GameLevel.all()[0] team.game_levels.append(level_0) dbsession.add(team) dbsession.flush() self.redirect('/admin/view/user_objects') else: self.render("admin/create/team.html", errors=form.errors)
def __chklevel__(self): user = self.get_current_user() level = user.team.game_levels[-1] logging.info("%s completed %d of %d flags on level %d." % ( user.team.name, len(user.team.level_flags(level.number)), len(level.flags), level.number, ) ) if len(user.team.level_flags(level.number)) == len(level.flags): logging.info("%s has completed level #%d" % (user.team.name, level.number,)) if level.next_level_id is not None: next_level = GameLevel.by_id(level.next_level_id) user.team.game_levels.append(next_level) dbsession.add(user.team) dbsession.flush() self.event_manager.unlocked_level(user, level)
def box_level(self): ''' Changes a boxs level ''' form = Form(box_uuid="No box selected", level_uuid="No level selected") if form.validate(self.request.arguments): 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 dbsession.add(box) dbsession.flush() 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) else: self.render("admin/view/game_levels.html", errors=form.errors)
def create_box(name, corporation, difficulty, game_level, description, ipv4_addresses=[], ipv6_addresses=[], avatar=None): if Box.by_name(name) is not None: logging.info("Box with name '%s' already exists, skipping" % (name)) return Box.by_name(name) logging.info("Create Box: %s" % name) if isinstance(game_level, int): game_level = GameLevel.by_number(game_level) box = Box( name=unicode(name[:16]), corporation_id=corporation.id, difficulty=unicode(difficulty[:16]), game_level_id=game_level.id, _description=unicode(description[:1024]), ) dbsession.add(box) dbsession.flush() if avatar is not None and os.path.exists(avatar): set_avatar(box, avatar) for ip_address in ipv4_addresses: __mkipv4__(box, ip_address) for ip_address in ipv6_addresses: __mkipv6__(box, ip_address) return box
) dbsession.add(item) dbsession.flush() item = MarketItem( name=u"SWAT", price=100000, description= u"Gain access to the internal police computer system, allowing you to insert fraudlent arrest warrents for other players.", ) dbsession.add(item) dbsession.flush() # Game Levels game_level = GameLevel( number=0, buyout=0, ) dbsession.add(game_level) dbsession.flush() # Admin User Account user = User( account=u'admin', handle=u'God', algorithm=u'scrypt', ) dbsession.add(user) dbsession.flush() user.password = password dbsession.add(user) dbsession.flush()