async def take_from_inv(self, id_item, quantity=1): """ Takes an item from the player inventory :param id_item: :param quantity: :return: """ s_r = session.query(exists().where( Inventory.player_id == self.user.id and Inventory.item_id == id_item)).scalar() # Check if item exists if s_r: try: # If item exists take from quantity inv_object = session.query(Inventory).filter( Inventory.player_id == self.user.id).filter( Inventory.item_id == id_item).first() if quantity > inv_object.quantity: raise InsufficientQuantity( "You do not have enough of {}".format(id_item)) inv_object.quantity -= quantity if inv_object.quantity <= 0: session.delete(inv_object) session.commit() return inv_object.item.base_value, quantity except SQLAlchemyError as e: logg.warning(e) session.rollback() else: # If it does not exists raise an itemNot found exception raise ItemNotFound("You do not have this item")
def moolah(self, value): try: transaction = abs(int(value)) except ValueError: raise ValueError('Please Enter a Number') if transaction >= 2147483647: raise OverflownError( 'Cannot Exceed the transaction max limit ! [2147483647] ') if value < self.plyr.moolah and value < 0: # Detect subtraction raise InsufficientFunds( "{} in balance, Transaction amount: {}".format( self.plyr.moolah, self.plyr.moolah + value * -1)) if self.plyr.moolah < 0: self.plyr.moolah = 0 try: self.plyr.moolah = value session.commit() except SQLAlchemyError as e: session.rollback() logg.error("Moolah transaction error {} - {}".format( self.user.id, value))
async def add_to_inv(self, id_item, quantity=1): """ Adds an item to the player inventory :param id_item: :param quantity: :return: """ s_r = session.query(exists().where( Inventory.player_id == self.user.id and Inventory.item_id == id_item)).scalar() # Check if item exists if s_r: try: # If item exists add to quantity inv_object = session.query(Inventory).filter( Inventory.player_id == self.user.id).filter( Inventory.item_id == id_item).first() inv_object.quantity += quantity session.commit() except SQLAlchemyError as e: logg.warning(e) session.rollback() else: # If it does not exists create an entry and initialize it inv_entry = Inventory(player_id=self.user.id, item_id=id_item, quantity=1) try: session.add(inv_entry) session.commit() except SQLAlchemyError as e: logg.warning(e) session.rollback()
def create_player(self): try: player = Player(id=self.user.id) session.add(player) session.commit() except SQLAlchemyError as e: session.rollback() logg.error(e)
def location(self, dest): try: self.plyr.location = dest session.commit() except SQLAlchemyError as e: logg.info("Error Setting Location Data {} - {} ".format( self.user.id, dest)) session.rollback()
def level(self, value): if value < 0: value = 0 try: self.plyr.level = value session.commit() except SQLAlchemyError as e: session.rollback() logg.error("Level up error {} - {}".format(self.user.id, value))
def exp(self, value): if self.has_chosen is None: raise CharacterNotSetup("Your Character has not been setup!.") if value < 0: value = 0 try: self.plyr.exp = value new_lvl = max([ x for x in self.bot.master["ProfData"]["level_data"] if self.plyr.exp >= self.bot.master["ProfData"]["level_data"][x] ]) old_c = new_lvl # Level Up logic if old_c != self.level: old_lvl = int(self.plyr.level) self.plyr.level = new_lvl logg.info("Leveled: {} - {} --> {}".format( self.user.name, old_lvl, self.plyr.level)) session.commit() except SQLAlchemyError as e: session.rollback() logg.error(e)