示例#1
0
文件: enemies.py 项目: turpenar/dion2
 def check_position_to_move(self):
     non_moving_positions = [x for x in positions if x is not 'standing']
     if set(self.position) & set(non_moving_positions):
         events.game_event('''{} struggles to move.'''.format(self.name[0]))
         return False
     else:
         return True
示例#2
0
文件: actions.py 项目: turpenar/dion2
    def __init__(self, character, **kwargs):
        DoActions.__init__(self, character, **kwargs)

        if character.check_round_time():
            return
        if character.is_dead():
            return
        if not character.check_position_to_move():
            return
        if world.tile_exists(x=self.character.location_x + 1,
                             y=self.character.location_y,
                             area=self.character.area):
            if character.room.shop_filled == True:
                if character.room.shop.in_shop == True:
                    character.room.shop.exit_shop()
            old_room = self.character.room.room_number
            self.character.move_east()
            self.update_room(old_room_number=old_room,
                             new_room_number=self.character.room.room_number)
            self.update_status(character.get_status())
            return
        else:
            events.game_event(
                "You cannot find a way to move in that direction.")
            return
示例#3
0
def melee_attack_character(self, character):
    attack_strength = calculate_attack_strength(self, self.weapon)
    defense_strength = calculate_defense_strength(
        character=character, weapon=character.get_dominant_hand_inv())
    attack_factor = calculate_attack_factor(self.weapon, character.armor)
    att_random = random.randint(0, 100)
    att_end_roll = end_roll(attack=attack_strength,
                            defense=defense_strength,
                            attack_factor=attack_factor,
                            random=att_random)

    result = None
    death_text = None
    if att_end_roll <= 100:
        result = """\
{} evades the attack.\
            """.format(character.name)
    else:
        att_damage = get_damage(att_end_roll, self.weapon, character.armor)
        character.health = character.health - att_damage
        death_text = character.is_killed()
        result = """\
{} damages {} by {}.
{}\
            """.format(self.name, character.name, att_damage, death_text)

    events.game_event("""\
{} attacks {}!
STR {} - DEF {} + AF {} + D100 ROLL {} = {}
{}
\
    """.format(self.name, character.name, attack_strength, defense_strength,
               attack_factor, att_random, att_end_roll, result))

    return character
示例#4
0
 def check_position_to_move(self):
     non_moving_positions = [x for x in positions if x is not 'standing']
     if set([self.position]) & set(non_moving_positions):
         events.game_event('''You cannot move.  You are {}.'''.format(self.position))
         return False
     else:
         return True
示例#5
0
 def check_round_time(self):
     with lock:
         round_time = False
         if time.time() < self.rt_end:
             events.game_event("Remaining round time: " + str(round(self.rt_end - time.time())) + " sec...")
             round_time = True
     return round_time
示例#6
0
文件: actions.py 项目: turpenar/dion2
    def __init__(self, character, **kwargs):
        DoActions.__init__(self, character, **kwargs)

        events.game_event('''
Edged Weapons Base:  {}
        
Edged Weapons:    {}  ({})          Armor:              {}  ({})
Blunt Weapons:    {}  ({})          Shield:             {}  ({})
Polearm Weapons:  {}  ({})          Dodging:            {}  ({})
Thrown Weapons:   {}  ({})          Physical Fitness:   {}  ({})
Ranged Weapons:   {}  ({})          Perception:         {}  ({})

            '''.format(
            character.skills_base['edged_weapons'],
            character.skills['edged_weapons'],
            character.skills_bonus['edged_weapons'], character.skills['armor'],
            character.skills_bonus['armor'], character.skills['blunt_weapons'],
            character.skills_bonus['blunt_weapons'],
            character.skills['shield'], character.skills_bonus['shield'],
            character.skills['polearm_weapons'],
            character.skills_bonus['polearm_weapons'],
            character.skills['dodging'], character.skills_bonus['dodging'],
            character.skills['thrown_weapons'],
            character.skills_bonus['thrown_weapons'],
            character.skills['physical_fitness'],
            character.skills_bonus['physical_fitness'],
            character.skills['ranged_weapons'],
            character.skills_bonus['ranged_weapons'],
            character.skills['perception'],
            character.skills_bonus['perception']))
示例#7
0
 def save(self,):
     save_data = self.__getstate__()
     character_name = "{}_{}.p".format(self.first_name, self.last_name)
     path_save = pathlib.Path.cwd() / 'Profiles' / character_name
     pickle.dump(save_data, open(file=path_save.absolute().as_posix(), mode='wb'))
     events.game_event(game_event_text="Progress saved.")
     return
示例#8
0
文件: objects.py 项目: turpenar/dion2
 def skin_corpse(self):
     if self.skin == None:
         events.game_event("You cannot skin {}".format(self.name))
     else:
         events.game_event("You skin {} to yield {}.".format(self.name, all_items_categories['skin'][self.skin]['name']))
         self.room.add_item(items.create_item(item_category='skin', item_name=self.skin))
     return
示例#9
0
文件: actions.py 项目: turpenar/dion2
    def __init__(self, character, **kwargs):
        DoActions.__init__(self, character, **kwargs)

        if character.check_round_time():
            return
        if character.is_dead():
            return
        elif not kwargs['direct_object']:
            events.game_event("What are you trying to give?")
            return
        elif character.get_dominant_hand_inv() is None:
            events.game_event(
                "You don't seem to be holding that item in your hand.")
            return
        elif not set(character.get_dominant_hand_inv().handle) & set(
                kwargs['direct_object']):
            events.game_event(
                "You don't seem to be holding that item in your hand.")
            return
        elif not kwargs['indirect_object']:
            events.game_event("To whom do you want to give?")
            return
        else:
            for npc in character.room.npcs:
                if {npc.first_name.lower()} & set(kwargs['indirect_object']):
                    if npc.give_item(character.get_dominant_hand_inv()):
                        character.set_dominant_hand_inv(item=None)
                        character.print_status()
                        return
                    else:
                        return
            events.game_event("That didn't seem to work.")
            return
示例#10
0
文件: enemies.py 项目: turpenar/dion2
    def __init__(self, enemy_name: str, target: object, room: object, location_x: int, location_y: int, area: str, **kwargs):
        super(Enemy, self).__init__()

        self._enemy_data = self.get_enemy_by_name(enemy_name)

        self._name = self._enemy_data['name']
        self._description = self._enemy_data['description']
        self._handle = self._enemy_data['handle']
        self._adjectives = self._enemy_data['adjectives']
        self._category = self._enemy_data['category']
        self._level = self._enemy_data['level']
        self._health = self._enemy_data['health']
        self._health_max = self._enemy_data['health_max']
        self._attack_strength_base = self._enemy_data['attack_strength_base']
        self._defense_strength_base = self._enemy_data['defense_strength_base']
        self._position = self._enemy_data['position']
        self._stance = self._enemy_data['stance']
        
        self._text_entrance = self._enemy_data['text']['entrance_text']
        self._text_move_in = self._enemy_data['text']['move_in_text']
        self._text_move_out = self._enemy_data['text']['move_out_text']
        self._text_engage = self._enemy_data['text']['engage_text']
        self._text_death = self._enemy_data['text']['death_text']
        
        self._round_time_engage = self._enemy_data['round_time']['engage']
        self._round_time_attack = self._enemy_data['round_time']['attack']
        self._round_time_move = self._enemy_data['round_time']['move']
        
        self._corpse = self._enemy_data['corpse']
    
        self._armor = {}
        
        for category in self._enemy_data['armor']:
            for item in self._enemy_data['armor'][category]:
                self._armor[category] = items.create_item('armor', item_name=item)
                
        self._weapon = self._enemy_data['weapon']

        self.spawn_location = self._enemy_data['spawn_location']
        self.location_x = location_x
        self.location_y = location_y
        self.area = area
        self.room = room

        self.target = target

        if self.room == target.room:
            for line in textwrap.wrap(self._enemy_data['entrance_text'], 80):
                events.game_event(line)

        self._right_hand_inv = self._enemy_data['right_hand']
        self._left_hand_inv = self._enemy_data['left_hand']
        
        experience_level = math.floor(experience_points_base * math.pow(self.level, experience_growth))
        experience_next_level = math.floor(experience_points_base * math.pow(self.level + 1, experience_growth))
        enemies_at_level = math.floor(enemy_level_base * math.pow(self.level,enemy_growth))
        
        self.experience = int((experience_next_level - experience_level) / enemies_at_level * random.uniform(0.9,1.1))
示例#11
0
文件: enemies.py 项目: turpenar/dion2
 def move(self, dx, dy):
     self.room.remove_enemy(self)
     if self.room == self.target.room:
         events.game_event(self.text_move_out)
     self.location_x += dx
     self.location_y += dy
     self.room = world.tile_exists(x=self.location_x, y=self.location_y, area=self.area)
     self.room.add_enemy(self)
     if self.room == self.target.room:
         events.game_event(self.text_move_in)
示例#12
0
文件: actions.py 项目: turpenar/dion2
    def __init__(self, character, **kwargs):
        DoActions.__init__(self, character, **kwargs)

        if not kwargs['direct_object']:
            events.game_event("What do you want to target?")
            return
        else:
            character.target = kwargs['direct_object']
            events.game_event("You are now targeting {}".format(
                self.target[0]))
            return
示例#13
0
文件: actions.py 项目: turpenar/dion2
    def __init__(self, character, **kwargs):
        DoActions.__init__(self, character, **kwargs)

        events.game_event('''
Name:  {} {}
Gender:  {}
Race:  {}
Profession:  {}
Level:  {}
            '''.format(character.first_name, character.last_name,
                       character.gender, character.race, character.profession,
                       character.level))
示例#14
0
文件: npcs.py 项目: turpenar/dion2
    def give_item(self, item):
#         if item.handle[0] != "hide":
#             print('''\
# {} takes one look at {} and says, "What is this? What do you expect me to do with this?" {} shakes {} head and
# walks away from your offer.\
#                 '''.format(self.first_name, item.name, self.object_pronoun, self.possessive_pronoun))
#         else:
#             if not self.character.check_quest(quest=self.quests['the_first_quest']):
                events.game_event("""\
Gander looks you up and down. "Did someone tell you to come to me? No? Then I can't help you unfortunately."\
                            """)
                return
示例#15
0
文件: npcs.py 项目: turpenar/dion2
    def ask_about(self, object):
#         if set(object) & {"job", "task"}:
#             if not self.character.check_quest(quest=self.quests['the_first_quest']):
#                 print("""\
# Gander looks you up and down. "Did someone tell you to come to me? No? Then I can't help you unfortunately."\
#                 """)
#                 return
#             self.quest01_step1()
#         else:
            events.game_event("""\
Gander glances quickly at you and raises an eyebrow. "I'm not sure what you're talking about."\
            """)
示例#16
0
文件: actions.py 项目: turpenar/dion2
    def __init__(self, character, **kwargs):
        DoActions.__init__(self, character, **kwargs)

        if character.get_dominant_hand_inv():
            right_hand = "You have {} in your {} hand.".format(
                character.get_dominant_hand_inv().name, character.dominance)
        else:
            right_hand = "Your right hand is empty."
        if character.get_non_dominant_hand_inv():
            left_hand = "You have {} in your {} hand.".format(
                character.get_non_dominant_hand_inv().name,
                character.non_dominance)
        else:
            left_hand = "Your left hand is empty."
        inventory_clothing = [
            x.name for x in character.inventory if x.category == 'clothing'
        ]
        if len(inventory_clothing) > 1:
            inventory_clothing = "You are wearing {} and {}.".format(
                ', '.join(inventory_clothing[:-1]), inventory_clothing[-1])
        elif len(inventory_clothing) == 1:
            inventory_clothing = "You are wearing {}.".format(
                inventory_clothing[0])
        else:
            inventory_clothing = "You are wearing nothing."

        inventory_armor = []
        for category in character.armor:
            inventory_armor.append(character.armor[category])
        if len(inventory_armor) > 1:
            inventory_armor = "You are also wearing {} and {}.".format(
                character.object_pronoun, ', '.join(inventory_armor[:-1]),
                inventory_armor[-1])
        elif len(inventory_armor) == 1:
            inventory_armor = "You are also wearing {}.".format(
                inventory_armor[0].name)
        else:
            inventory_armor = "You are also wearing no armor.".format(
                character.object_pronoun)
        wealth = "You have {} gulden.".format(character.money)
        events.game_event('''\
{}
{}
{}
{}
{}
                                    \
                                    '''.format(
            right_hand, left_hand, wrapper.fill(inventory_clothing),
            wrapper.fill(inventory_armor), wrapper.fill(wealth)))
示例#17
0
文件: actions.py 项目: turpenar/dion2
    def __init__(self, character, **kwargs):
        DoActions.__init__(self, character, **kwargs)

        if character.check_round_time():
            return
        if character.is_dead():
            return
        if not character.check_position_to_move():
            return
        if not kwargs['direct_object']:
            events.game_event("Go where?")
            return
        for room_object in character.room.objects:
            if set(room_object.handle) & set(kwargs['direct_object']):
                events.game_event("You move toward {}.".format(
                    room_object.name))
                room_object.go_object(character=character)
                return
        for room_item in character.room.items:
            if set(room_item.handle) & set(kwargs['direct_object']):
                events.game_event("You move toward {}.".format(room_item.name))
                return
        for room_npc in character.room.npcs:
            if set(room_npc.handle) & set(kwargs['direct_object']):
                events.game_event("You move toward {}.".format(room_npc.name))
                return
示例#18
0
文件: actions.py 项目: turpenar/dion2
    def __init__(self, character, **kwargs):
        DoActions.__init__(self, character, **kwargs)

        if character.check_round_time():
            return
        if character.is_dead():
            return
        elif not kwargs['direct_object']:
            events.game_event(
                "I'm sorry, I could not understand what you wanted.")
            return
        elif character.get_dominant_hand_inv() is None:
            events.game_event("You do not have that item in your hand")
            return
        elif not set(character.get_dominant_hand_inv().handle) & set(
                kwargs['direct_object']):
            events.game_event("You do not have that item in your right hand.")
            return
        else:
            character.room.items.append(character.get_dominant_hand_inv())
            events.game_event("You drop " +
                              character.get_dominant_hand_inv().name)
            character.set_dominant_hand_inv(item=None)
            character.print_status()
            return
示例#19
0
文件: actions.py 项目: turpenar/dion2
def do_action(action_input, character=None):
    action_history.insert(0, action_input)
    if not character:
        events.game_event(
            game_event_text=
            "No character loaded. You will need to create a new character or load an existing character."
        )
        return
    if len(action_input) == 0:
        events.game_event("")
        return
    kwargs = command_parser.parser(action_input)
    return DoActions.do_action(kwargs['action_verb'], character,
                               **kwargs).action_result
示例#20
0
文件: actions.py 项目: turpenar/dion2
    def __init__(self, character, **kwargs):

        if character.check_round_time():
            return
        if character.is_dead():
            return
        if not character.check_position_to_move():
            return

        if character.room.is_shop == False:
            events.game_event(
                "You can't seem to find a way to order anything here.")
            return
        if character.room.shop_filled == False:
            events.game_event("You will need to ORDER first.")
            return
        if character.room.shop.in_shop == False:
            events.game_event(
                "You have exited the shop. You will need to ORDER again.")
            return
        if character.get_dominant_hand_inv() is not None:
            events.game_event("You will need to empty your right hand first.")
            return
        character.set_dominant_hand_inv(
            character.room.shop.buy_item(number=kwargs['number_1']))
示例#21
0
文件: actions.py 项目: turpenar/dion2
    def __init__(self, character, **kwargs):
        DoActions.__init__(self, character, **kwargs)

        if character.check_round_time():
            return
        if character.is_dead():
            return
        elif not kwargs['direct_object']:
            events.game_event("What is it you are trying to sell?")
            return
        for npc in character.room.npcs:
            if set(npc.handle) & {kwargs['indirect_object']}:
                npc.sell_item(item=character.get_dominant_hand_inv())
                return
        else:
            events.game_event("Who are you trying to sell to?")
示例#22
0
文件: actions.py 项目: turpenar/dion2
    def __init__(self, character, **kwargs):
        DoActions.__init__(self, character, **kwargs)

        if character.check_round_time():
            return
        if character.is_dead():
            return
        if character.position == 'sitting':
            events.game_event('You seem to already be sitting.')
            character.print_status()
            return
        else:
            character.position = 'sitting'
            events.game_event('You move yourself to a sitting position.')
            character.print_status()
            return
示例#23
0
文件: actions.py 项目: turpenar/dion2
    def __init__(self, character, **kwargs):
        DoActions.__init__(self, character, **kwargs)

        if character.check_round_time():
            return
        if character.is_dead():
            return
        if character.position == 'lying':
            events.game_event('You seem to already be lying down.')
            character.print_status()
            return
        else:
            character.position = 'lying'
            events.game_event('You lower yourself to the ground and lie down.')
            character.print_status()
            return
示例#24
0
def melee_attack_enemy(self, target):
    attack_strength = calculate_attack_strength(self,
                                                self.get_dominant_hand_inv())
    defense_strength = calculate_defense_strength(character=target,
                                                  weapon=target.weapon)
    attack_factor = calculate_attack_factor(self.get_dominant_hand_inv(),
                                            target.armor)
    att_random = random.randint(0, 100)
    att_end_roll = end_roll(attack=attack_strength,
                            defense=defense_strength,
                            attack_factor=attack_factor,
                            random=att_random)
    round_time = self.set_round_time(3)

    result = None
    if att_end_roll <= 100:
        result = """\
{} evades the attack.
Round time:  {} seconds
            """.format(target.name, round_time)
    else:
        att_damage = get_damage(att_end_roll, self.get_dominant_hand_inv(),
                                target.armor)
        target.health = target.health - att_damage
        if target.is_killed():
            death_text = target.text_death
            target.replace_with_corpse()
            self.experience += int(
                target.experience *
                get_exerience_modifier(self.level, target.level))
        else:
            death_text = ""
        result = """\
{} damages {} by {}.
Round time:  {} seconds
{}\
            """.format(self.name, target.name, att_damage, round_time,
                       death_text)

    events.game_event("""\
{} attacks {}!
STR {} - DEF {} + AF {} + D100 ROLL {} = {}
{}\
    """.format(self.name, target.name, attack_strength, defense_strength,
               attack_factor, att_random, att_end_roll, result))
    self.check_level_up()
    return target
示例#25
0
文件: enemies.py 项目: turpenar/dion2
 def run(self):
     if self.room == self.target.room:
         events.game_event(self.text_move_in)
     while self.health > 0:
         if self.health <= 0:
             break
         elif (self.room == self.target.room) and (self.target.health > 0):
             events.game_event(self.text_engage)
             time.sleep(self.round_time_engage)
             if (self.room == self.target.room) and (self.target.health > 0) and (self.is_alive):
                 combat.melee_attack_character(self, self.target)
                 time.sleep(self.round_time_attack)
         else:
             available_actions = self.room.adjacent_moves_enemy(area=self.area)
             action = random.choice(available_actions)
             action_method = getattr(self, action.method.__name__)
             action_method()
             time.sleep(self.round_time_move)
     return
示例#26
0
文件: actions.py 项目: turpenar/dion2
    def __init__(self, character, **kwargs):
        DoActions.__init__(self, character, **kwargs)

        if character.check_round_time():
            return
        if character.is_dead():
            return
        if not character.check_position_to_move():
            return
        if world.tile_exists(x=self.character.location_x - 1,
                             y=self.character.location_y,
                             area=self.character.area):
            if character.room.shop_filled == True:
                if character.room.shop.in_shop == True:
                    character.room.shop.exit_shop()
            self.character.move_west()
            character.print_status()
        else:
            events.game_event(
                "You cannot find a way to move in that direction.")
示例#27
0
 def level_up(self):
     self.level += 1
     
     for stat in self.stats:
         self.stats[stat] = self.stats[stat] + 1 / (self.stats[stat] / int(profession_stats_growth_file.loc[self.profession][stat]))
         if self.stats[stat] > 100:
             self.stats[stat] = 100
     
         self.stats_bonus[stat] = ((self.stats[stat] - available_stat_points / 8) / 2 + int(race_stats_file.loc[self.race][stat]))
     
     skills.level_up_skill_points()
     
     self.health = int(math.floor((self.stats['strength'] + self.stats['constitution']) / 10))
     self.health_max = int(math.floor((self.stats['strength'] + self.stats['constitution']) / 10))
     
     self.attack_strength_base = int(round(self.stats_bonus['strength'],0))
     self.defense_strength_evade_base = int(round(self.stats_bonus['agility'] + self.stats_bonus['intellect'] / 4 + self.skills['dodging'],0))
     self.defense_strength_block_base = int(round(self.stats_bonus['strength'] / 4 + self.stats_bonus['dexterity'] /4,0))
     self.defense_strength_parry_base = int(round(self.stats_bonus['strength'] / 4 + self.stats_bonus['dexterity'] / 4,0))
     
     events.game_event("Ding! You are now level {}!".format(self.level)) 
示例#28
0
文件: actions.py 项目: turpenar/dion2
    def __init__(self, character, **kwargs):
        DoActions.__init__(self, character, **kwargs)

        events.game_event('''
Name:  {} {}
Level: {}
Strength:       {}  ({})        Intellect:      {}  ({})
Constitution:   {}  ({})        Wisdom:         {}  ({})
Dexterity:      {}  ({})        Logic:          {}  ({})
Agility:        {}  ({})        Spirit:         {}  ({})
        '''.format(
            character.first_name, character.last_name, character.level,
            character.stats['strength'], character.stats_bonus['strength'],
            character.stats['intellect'], character.stats_bonus['intellect'],
            character.stats['constitution'],
            character.stats_bonus['constitution'], character.stats['wisdom'],
            character.stats_bonus['wisdom'], character.stats['dexterity'],
            character.stats_bonus['dexterity'], character.stats['logic'],
            character.stats_bonus['logic'], character.stats['agility'],
            character.stats_bonus['agility'], character.stats['spirit'],
            character.stats_bonus['spirit']))
示例#29
0
文件: actions.py 项目: turpenar/dion2
    def __init__(self, character, **kwargs):
        DoActions.__init__(self, character, **kwargs)

        if character.check_round_time():
            return
        if character.is_dead():
            return
        elif not kwargs['direct_object']:
            events.game_event("What are you trying to skin?")
            return
        else:
            for object in character.room.objects:
                if set(object.handle) & set(kwargs['direct_object']):
                    object.skin_corpse()
                    return
            for item in character.room.items:
                if set(item.handle) & set(kwargs['direct_object']):
                    events.game_event(
                        "You can seem to find any way to skin {}.".format(
                            item.name))
                    return
            for npc in character.room.npcs:
                if set(npc.handle) & set(kwargs['direct_object']):
                    events.game_event(
                        "You approach {}, but think better of it.".format(
                            npc.name))
                    return
示例#30
0
文件: actions.py 项目: turpenar/dion2
    def __init__(self, character, **kwargs):
        DoActions.__init__(self, character, **kwargs)

        if character.check_round_time():
            return
        if character.is_dead():
            return
        if kwargs['direct_object']:
            character.target = kwargs['direct_object']
        if not character.target:
            events.game_event(
                "Who are you going to attack? You do not have a target.")
            return
        else:
            for npc in character.room.npcs:
                if set(npc.handle) & set(character.target):
                    events.game_event(
                        "{} will probably not appreciate that.".format(
                            npc.name))
                    return
            enemy_found = False
            for enemy in character.room.enemies:
                if set(enemy.handle) & set(character.target):
                    enemy_found = True
                    combat.melee_attack_enemy(character, enemy)
                    return
            if not enemy_found:
                events.game_event("{} is not around here.".format(
                    kwargs['direct_object']))
                return