Ejemplo n.º 1
0
 def decapitate(self):
     """Дракону отрубает голову.
     :rtype: list[str]
     :return:
     """
     if 'unbreakable_scale' in self.spells:
         # потеря заклинания защиты головы
         self.spells.remove('unbreakable_scale')
         return ['lost_head', 'lost_virtual']
     else:
         data.achieve_fail("lost_head")  # событие для ачивок
         # жизни закончились, рубим голову (последнюю в списке)
         lost_head = self.heads.pop()
         # ставим её на первое место, чтобы после объединения списков порядок голов не изменился
         self.dead_heads.insert(0, lost_head)
         # потеря головы, если головы закончились - значит смертушка пришла
         if self.heads:
             return ['lost_head', 'lost_' + lost_head]
         else:
             self.die()
             return ['dragon_dead']
Ejemplo n.º 2
0
 def decapitate(self):
     """Дракону отрубает голову.
     :rtype: list[str]
     :return:
     """
     if 'unbreakable_scale' in self.spells:
         # потеря заклинания защиты головы
         self.spells.remove('unbreakable_scale')
         return ['lost_head', 'lost_virtual']
     else:
         data.achieve_fail("lost_head")# событие для ачивок
         # жизни закончились, рубим голову (последнюю в списке)
         lost_head = self.heads.pop()
         # ставим её на первое место, чтобы после объединения списков порядок голов не изменился
         self.dead_heads.insert(0, lost_head)
         # потеря головы, если головы закончились - значит смертушка пришла
         if self.heads:
             return ['lost_head', 'lost_' + lost_head]
         else:
             self.die()
             return ['dragon_dead']
Ejemplo n.º 3
0
    def steal(self, lair=None, dragon=None):
        """
        Вор пытается урасть что-нибудь.
        :param lair: Логово из которого происходит кража
        :param dragon: Дракон, логово которого грабим
        """
        thief = self

        if lair is None:  # Нет логова, нет краж. Вообще такого быть не должно.
            raise Exception("No lair available")
        if dragon is None:
            raise Exception("No dragon available")

        # Для начала пытаемся понять можем ли мы попасть в логово:
        if not lair.reachable(thief.abilities.list("provide") + thief.items.list("provide")):
            # Добраться не можем, с 50% шансом получаем шмотку
            thief.event("lair_unreachable")
            if random.choice(range(2)) == 0:
                thief.receive_item()
            else:
                thief.event("receive_no_item")

        thief.event("lair_enter")

        luck = thief.skill
        # Проверка неприступности
        self.event("checking_accessability")
        # Если нет схемы тайных проходов, то с 33% шансом снижаем удачу вора за каждую единицу неприступности
        if "scheme" not in thief.items:
            for i in range(lair.inaccessability):
                if random.choice(range(3)) == 0:
                    luck -= 1

        # Проверка, осилили ли неприступность
        if luck < 0:
            thief.die("inaccessability")
            thief.event("die_inaccessability")
            return
        else:
            self.event("checking_accessability_success")

        # Проверка ловушек и стражей
        self.event("trying_to_avoid_traps_and_guards")

        # Выбираем ловушки которые имеет смысл "обходить"
        # Обходим только ловушки с ненулевой защитой
        upgrades = (u for u in lair.upgrades if data.lair_upgrades[u].protection != 0)
        for upgrade in upgrades:

            thief.event("start_trap", trap=upgrade)
            # Если у нас есть шмотка или скилл для обхода ловушки
            if upgrade in thief.abilities.list("avoids") or upgrade in thief.items.list("avoids"):
                self.event("pass_trap", trap=upgrade)
                # То переходим к следущей ловушке
                continue

            # 1/3 что вора ловушка заденет
            for i in range(data.lair_upgrades[upgrade].protection):
                if random.choice(range(3)) > 0:
                    luck -= 1

            if luck > 0:
                thief.event("pass_trap", trap=upgrade)
            elif luck == 0:
                self.event("retreat_and_try_next_year")
                return
            elif luck < 0:
                thief.die(upgrade)
                thief.event("die_trap", trap=upgrade)
                return
            thief.event("end_trap", trap=upgrade)

        # У вора кончилась удача, отступаем
        if luck == 0:
            self.event("retreat_and_try_next_year")
            return

        # На всякий случай проверяем что у нас еще осталась удача.
        assert luck > 0

        # Начинаем вычищать логово
        self.event("starting_to_rob_the_lair")

        # Если сокровищница пуста, то вор уходит на пенсию
        if lair.treasury.wealth <= 0:
            self.event("lair_empty")
            # Закончили грабить. Уходим на пенсию.
            self.retire()
            return

        attempts = luck
        if "greedy" in thief.abilities:
            attempts += 1
        if "bottomless_sac" in thief.items:
            attempts *= 2

        # Берем шмотки
        stolen_items = lair.treasury.rob_treasury(attempts)  # Вор что-то украл
        for i in xrange(len(stolen_items)):
            if "sleep_dust" in thief.items or "trickster" in thief.abilities or random.choice(
                    range(10)) in range(5 - thief.skill):
                self.event("took_an_item", item=stolen_items[i])
            else:
                # Мы разбудили дракона
                if renpy.config.debug:
                    thief(u"Разбудил дракона")
                dragon.add_event('thief_killer')
                lair.treasury.receive_treasures(stolen_items)  # Дракон возвращает что награбил вор.
                self.event("awakened_the_dragon", stolen_items=stolen_items)
                thief.die("wake_up")
                return

        achieve_fail("lost_treasure")  # Отмечаем для ачивки, что потеряли сокровище из-за вора
        self.event('steal_items', items=stolen_items)
        # Закончили грабить. Уходим на пенсию.
        self.retire()
        return
Ejemplo n.º 4
0
    def steal(self, lair=None, dragon=None):
        """
        Вор пытается урасть что-нибудь.
        :param lair: Логово из которого происходит кража
        :param dragon: Дракон, логово которого грабим
        """
        thief = self

        if lair is None:  # Нет логова, нет краж. Вообще такого быть не должно.
            raise Exception("No lair available")
        if dragon is None:
            raise Exception("No dragon available")

        # Для начала пытаемся понять можем ли мы попасть в логово:
        if not lair.reachable(
                thief.abilities.list("provide") + thief.items.list("provide")):
            # Добраться не можем, с 50% шансом получаем шмотку
            thief.event("lair_unreachable")
            if random.choice(range(2)) == 0:
                thief.receive_item()
            else:
                thief.event("receive_no_item")

        thief.event("lair_enter")

        luck = thief.skill
        # Проверка неприступности
        self.event("checking_accessability")
        # Если нет схемы тайных проходов, то с 33% шансом снижаем удачу вора за каждую единицу неприступности
        if "scheme" not in thief.items:
            for i in range(lair.inaccessability):
                if random.choice(range(3)) == 0:
                    luck -= 1

        # Проверка, осилили ли неприступность
        if luck < 0:
            thief.die("inaccessability")
            thief.event("die_inaccessability")
            return
        else:
            self.event("checking_accessability_success")

        # Проверка ловушек и стражей
        self.event("trying_to_avoid_traps_and_guards")

        # Выбираем ловушки которые имеет смысл "обходить"
        # Обходим только ловушки с ненулевой защитой
        upgrades = (u for u in lair.upgrades
                    if data.lair_upgrades[u].protection != 0)
        for upgrade in upgrades:

            thief.event("start_trap", trap=upgrade)
            # Если у нас есть шмотка или скилл для обхода ловушки
            if upgrade in thief.abilities.list(
                    "avoids") or upgrade in thief.items.list("avoids"):
                self.event("pass_trap", trap=upgrade)
                # То переходим к следущей ловушке
                continue

            # 1/3 что вора ловушка заденет
            for i in range(data.lair_upgrades[upgrade].protection):
                if random.choice(range(3)) > 0:
                    luck -= 1

            if luck > 0:
                thief.event("pass_trap", trap=upgrade)
            elif luck == 0:
                self.event("retreat_and_try_next_year")
                return
            elif luck < 0:
                thief.die(upgrade)
                thief.event("die_trap", trap=upgrade)
                return
            thief.event("end_trap", trap=upgrade)

        # У вора кончилась удача, отступаем
        if luck == 0:
            self.event("retreat_and_try_next_year")
            return

        # На всякий случай проверяем что у нас еще осталась удача.
        assert luck > 0

        # Начинаем вычищать логово
        self.event("starting_to_rob_the_lair")

        # Если сокровищница пуста, то вор уходит на пенсию
        if lair.treasury.wealth <= 0:
            self.event("lair_empty")
            # Закончили грабить. Уходим на пенсию.
            self.retire()
            return

        attempts = luck
        if "greedy" in thief.abilities:
            attempts += 1
        if "bottomless_sac" in thief.items:
            attempts *= 2

        # Берем шмотки
        stolen_items = lair.treasury.rob_treasury(attempts)  # Вор что-то украл
        for i in xrange(len(stolen_items)):
            if "sleep_dust" in thief.items or "trickster" in thief.abilities or random.choice(
                    range(10)) in range(5 - thief.skill):
                self.event("took_an_item", item=stolen_items[i])
            else:
                # Мы разбудили дракона
                if renpy.config.debug:
                    thief(u"Разбудил дракона")
                dragon.add_event('thief_killer')
                lair.treasury.receive_treasures(
                    stolen_items)  # Дракон возвращает что награбил вор.
                self.event("awakened_the_dragon", stolen_items=stolen_items)
                thief.die("wake_up")
                return

        achieve_fail(
            "lost_treasure"
        )  # Отмечаем для ачивки, что потеряли сокровище из-за вора
        self.event('steal_items', items=stolen_items)
        # Закончили грабить. Уходим на пенсию.
        self.retire()
        return