def equip_item(self, inventory_item_id): """Marks the item as equipped which will add to a character's stats Arguments: inventory_item_id {string} -- Identifies the item in the inventory """ if self.inventory is None: self.inventory = [] item = Enumerable(self.inventory).first_or_default(lambda x: x.inv_id == inventory_item_id) if item is None: raise Exception("The item does not exist in the inventory") if not self.can_use_2h and item.slot == 14: raise Exception("Cannot equip a two-handed weapon") # else: # self.attack_speed = damage_base[self.player_class]['speed'] * 1.25 if not self.can_dual_wield and item.slot == 13: raise Exception("Cannot equip a weapon in the off hand") existing_item = Enumerable(self.inventory).first_or_default(lambda x: x.slot == item.slot and x.equipped) if existing_item is not None: self.unequip_item(existing_item.inv_id) #existing_item.equipped = False item.equipped = True self.calc_stats() self.updated_at = datetime.utcnow() super(CharacterModel, self).save()
def unequip_item(self, inventory_item_id): """Unequips the item preventing it from being used in stat calculations Arguments: inventory_item_id {string} -- The inventory item id """ if self.inventory is None: self.inventory = [] item = Enumerable(self.inventory).first_or_default(lambda x: x.inv_id == inventory_item_id) if item is not None: item.equipped = False self.calc_stats() self.updated_at = datetime.utcnow() super(CharacterModel, self).save()