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']
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']
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
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