Exemplo n.º 1
0
    def go(self):

        if self.directions:
            self.action_type = 'go'

            if self.directions[0] in self.current_room.paths:
                self.data_dict['room_log'].append(self.directions[0])
                self.data_dict['room_name'] = self.directions[0]
                query_room=planisphere.Room.query.filter_by(name=self.directions[0]).first()
                self.data_dict['message'] = query_room.description
                self.data_dict['image'] = query_room.image
                return special_actions.special_actions(self,self.data_dict)
            elif self.directions[0] == 'back' and len(self.data_dict['room_log']) > 1:
                self.data_dict['room_name'] = self.data_dict['room_log'][len(self.data_dict['room_log']) - 2]
                query_room=planisphere.Room.query.filter_by(name=self.data_dict['room_name']).first()
                self.data_dict['message'] = query_room.description
                self.data_dict['image'] = query_room.image
                return special_actions.special_actions(self,self.data_dict)
            elif self.directions[0] == 'back' and len(self.data_dict['room_log']) <= 1:
                return self.error('cannot go back')

            else:
                return self.error('direction unavailable')
        else:
            return self.error('no direction')
Exemplo n.º 2
0
    def attack(self):
        self.action_type = 'attack'
        if self.object_count > 1 and self.with_action == False:
            return self.error('too many opponents')
        elif self.object_count > 2 and self.with_action:
            return self.error('too many opponents')
        elif self.object_count < 1:
            return self.error('no opponents')
        elif self.object_count == 1 and self.with_action:
            return self.error('weapon or opponent missing')
        #TODO: Add to manual - With action have to be phrase with the object first and the weapon
        else:
            query_opponent = planisphere.Item.query.filter_by(name=self.objects[0]).first()
        if query_opponent.location.english_name != self.current_room.name:
            return self.error('opponent not in room')
        elif not query_opponent.fight_lp:
            return self.error('object not attackable')

        else:
            if self.object_count == 2 and self.with_action == True:
                query_weapon = planisphere.Item.query.filter_by(name=self.objects[1]).first()
                if query_weapon.name not in self.data_dict['character']['Inventory']:
                    return self.error('weapon not in inventory')
                if not query_weapon.weapon_ap:
                    return self.error('not a valid weapon')
            if query_opponent.name not in self.data_dict['opponents'].keys():
                self.data_dict['opponents'][query_opponent.name] = {'ap': query_opponent.fight_ap, 'lp': query_opponent.fight_lp}

            opp_data = self.data_dict['opponents'].get(self.objects[0])
            opp_lp = opp_data.get('lp')
            if opp_lp <= 0:
                return self.error('opponent already dead')

            else:
                opp_ap = opp_data.get('ap')
                david_ap = self.data_dict['character'].get('Attack_Points')
                if self.with_action:
                    weapon_attack = query_weapon.weapon_ap
                    david_ap = david_ap + weapon_attack
                david_lp = self.data_dict['character'].get('Health')
                self.data_dict['opponents'][self.objects[0]]['lp'] = opp_lp - david_ap
                self.data_dict['character']['Health'] = david_lp - opp_ap
                # get updated data
                opp_data = self.data_dict['opponents'].get(self.objects[0])
                opp_lp = opp_data.get('lp')
                david_lp = self.data_dict['character'].get('Health')
                message = f"""
                David im Kampf gegen {query_opponent.german_name}!
                David fügt {query_opponent.german_name} {david_ap} Schaden zu.
                {query_opponent.german_name} hat noch {opp_lp} Lebenspunkte.
                {query_opponent.german_name} fügt David {opp_ap} Schaden zu.
                David hat noch {david_lp} Lebenspunkte.
                """
                if opp_lp <= 0:
                    message = message + f"""
                    Du hast {query_opponent.german_name} besiegt!
                    """
                self.data_dict['message'] = message 
                return special_actions.special_actions(self,self.data_dict)
Exemplo n.º 3
0
    def build(self):
        self.action_type = 'build'
        if self.object_count < 1:
            return self.error('no build objects')
        elif self.object_count > 1:
            return self.error('too many build objects')
        else:
            query_item = planisphere.Item.query.filter_by(name=self.objects[0]).first()
            ingredients = query_item.ingredients.all()
        if not ingredients:
            return self.error('object not buildable')
        else:
 
            available = []
            missing = []
            for i in ingredients:
                if i.name in list(self.data_dict['character']['Inventory'].keys()) or i.location.name == self.current_room.name:
                    available.append(i.german_name)
                else:
                    missing.append(i.german_name)

            if not missing:

                if query_item.name not in list(self.data_dict['character']['Inventory'].keys()):
                    self.data_dict['character']['Inventory'][query_item.name] = 1
                    self.data_dict['taken_items'].append(query_item.id)
                else:
                    self.data_dict['character']['Inventory'][query_item.name] += 1
                    self.data_dict['taken_items'].append(query_item.id)

                for i in ingredients:

                    if i.name in self.data_dict['character']['Inventory']:
                        if self.data_dict['character']['Inventory'][i.name] > 1:
                            self.data_dict['character']['Inventory'][i.name] -= 1
                        elif self.data_dict['character']['Inventory'][i.name] == 1:
                            del self.data_dict['character']['Inventory'][i.name]
                    elif i.location.english_name == self.current_room.name and i.id not in self.data_dict['taken_items']: #TODO: Change from english_name to name when adapting Rooms to DB
                        # TODO: Write test for this case
                        self.data_dict['taken_items'].append(i.id)

                message = dedent(f"""
                Du hast erfolgreich das Objekt {self.objects_original[0]} gebaut!
                Es wurde deinem Inventar hinzugefügt!
                """)

                self.data_dict['message'] = message 
                return special_actions.special_actions(self,self.data_dict)

            else:
                message =  dedent(f"""
                Du kannst das Objekt {self.objects_original[0]} noch nicht bauen.
                Dir fehlen noch folgende Objekte: {missing}.
                """)

                self.data_dict['message'] = message 
                return self.data_dict
Exemplo n.º 4
0
 def what(self):
     self.action_type = 'what'
     query_room=planisphere.Room.query.filter_by(id=self.current_room.id).first()
     objects = [k.id for k in planisphere.Item.query.filter_by(location=query_room).all()]
     for i in self.data_dict.get('taken_items'):
         if i in objects:
             objects.remove(i)
     objects = [planisphere.Item.query.filter_by(id=j).first().german_name for j in objects]
     objects_str = ", ".join(objects)
     message = F"""Folgende Gegenstände befinden sich in diesem Raum: {objects_str}"""
     self.data_dict['message'] = message 
     return special_actions.special_actions(self,self.data_dict)
Exemplo n.º 5
0
    def use(self):
        self.action_type = 'use'
        if self.object_count > 1:
            return self.error('too many objects')
        elif self.object_count < 1:
            return self.error('no objects')
        else:
            query_item = planisphere.Item.query.filter_by(name=self.objects[0]).first()

            if query_item.name not in self.data_dict['character']['Inventory'] and query_item.name not in self.current_room.object_names:
                    return self.error('object not available')
        self.data_dict['message'] = F"""Das angegebene Objekt {self.objects_original[0]} kannst du nich benutzen."""
        return special_actions.special_actions(self,self.data_dict)
Exemplo n.º 6
0
    def consume(self):
        self.action_type = 'consume'
        if self.object_count > 1:
            return self.error('too many food objects')
        elif self.object_count < 1:
            return self.error('no food objects')
        else:
            query_item = planisphere.Item.query.filter_by(name=self.objects[0]).first()

        if query_item.name not in self.data_dict['character']['Inventory']:
            if query_item.name not in self.current_room.object_names:
                return self.error('food object not available')
            else: 
                current_location = planisphere.Room.query.filter_by(id=self.current_room.id).first()
                query_item = planisphere.Item.query.filter_by(location=current_location, name=self.objects[0]).first()
            if query_item.id in self.data_dict['taken_items']:
                return self.error('food object not available')
        if not query_item.consume_lp and not query_item.consume_ap:
            return self.error('food object not consumable')
        else:
            if self.objects[0] in self.data_dict['character']['Inventory']:
                if self.data_dict['character']['Inventory'][self.objects[0]] > 1:
                    self.data_dict['character']['Inventory'][self.objects[0]] -= 1
                elif self.data_dict['character']['Inventory'][self.objects[0]] == 1:
                    del self.data_dict['character']['Inventory'][self.objects[0]]
            elif query_item.location.english_name == self.current_room.name and query_item.id not in self.data_dict['taken_items']: #TODO: Change from english_name to name when adapting Rooms to DB
                # TODO: Write test for this case
                self.data_dict['taken_items'].append(query_item.id)

            david_ap = self.data_dict['character'].get('Attack_Points')
            david_lp = self.data_dict['character'].get('Health')
            consumable_ap = query_item.consume_ap
            consumable_lp = query_item.consume_lp
            
            message = f"""
            David konsumiert {query_item.german_name}.
            """
            if consumable_ap:
 
                self.data_dict['character']['Attack_Points'] = david_ap + consumable_ap
                message = message + f"""
                David bekommt {consumable_ap} Angriffspunkte von {query_item.german_name}.
                """
            if consumable_lp:
                self.data_dict['character']['Health'] = david_lp + consumable_lp
                message = message + f"""
                David bekommt {consumable_lp} Lebenspunkte von {query_item.german_name}.
                """
            self.data_dict['message'] = message 
            return special_actions.special_actions(self,self.data_dict)
Exemplo n.º 7
0
    def inspect(self):
        self.action_type = 'inspect'
        if self.object_count > 1:
            return self.error('too many objects')
        elif self.object_count < 1:
            return self.error('no objects')
        else:
            query_item = planisphere.Item.query.filter_by(name=self.objects[0]).first()

            if query_item.name not in self.data_dict['character']['Inventory'] and query_item.name not in self.current_room.object_names:
                    return self.error('object not available')
            else:
                if query_item.description_german:
                    message = F"""{query_item.description_german} """
                else:
                    message = F"""Das Objekt {self.objects_original[0]} hat keine besonderen Merkmale."""

                self.data_dict['message'] = message
                return special_actions.special_actions(self,self.data_dict)