def battle_action(dragon, foe): """ логика сражения. :type dragon: Dragon :param dragon: текущий дракон :type foe: Enemy :param foe: текущий противник :return: список, описывающий состояние боя """ status = [] # проверяем атаку дракона power = dragon.attack() immun = foe.immunity() # пробегаем все ключи словаря атаки дракона for key in power.keys(): (r, p) = power[key] if (not (r + p)) or (key in immun): # удаляем нулевые атаки и те, к которым у противника иммунитет del power[key] else: # записываем чем дракон мог ударить в статус раунда боя status.append("dragon_" + key) # проверяем, если атака больше защиты - противника съели, иначе он еще жив dragon_hit = calc_hit_def(power) foe_defence = calc_hit_def(foe.protection()) if dragon_hit > foe_defence: achieve_target(foe.name, "kill") # событие для ачивок foe.die() status.append("foe_dead") else: status.append("foe_alive") # полностью зеркальная ситуация для атаки противника power = foe.attack() immun = dragon.immunity() # пробегаем все ключи словаря атаки противника for key in power.keys(): (r, p) = power[key] if (not (r + p)) or (key in immun): # удаляем нулевые атаки и те, к которым у дракона иммунитет del power[key] else: # записываем чем противник мог ударить в статус раунда боя status.append("foe_" + key) # проверяем, если атака противника больше защиты дракона - дракон ранен foe_hit = calc_hit_def(power) dragon_defence = calc_hit_def(dragon.protection()) if foe_hit > dragon_defence: # Если противник сразу обезглавливает дракона не наося ему ран. if "decapitator" in foe.modifiers(): status.extend(dragon.decapitate()) # А так просто наносим ранения. else: status.extend(dragon.struck()) else: status.append("dragon_undamaged") return status
def battle_action(dragon, foe): """ combat logic. :type dragon: Dragon :param dragon: current dragon :type foe: Enemy :param foe: current enemy :return: list which describes battle status """ status = [] # check dragon's attack power = dragon.attack() immun = foe.immunity() # check each key of the dragon's attack dictionary for key in power.keys(): (r, p) = power[key] if (not (r + p)) or (key in immun): # removing null attacks and attacks enemy is immune to del power[key] else: # record things that dragon could attack with to a battle status status.append('dragon_' + key) # check if dragon's attack is over foe's protection, if yes foe has been eaten by dragon dragon_hit = calc_hit_def(power) foe_defence = calc_hit_def(foe.protection()) if dragon_hit > foe_defence: achieve_target(foe.name, "kill") # achievement event foe.die() status.append('foe_dead') else: status.append('foe_alive') # now same as before, but for foe's attack power = foe.attack() immun = dragon.immunity() # check each key of the foe's attack dictionary for key in power.keys(): (r, p) = power[key] if (not (r + p)) or (key in immun): # removing null attacks and attacks dragon is immune to del power[key] else: # record things that foe could attack with to a battle status status.append('foe_' + key) # check if foe's attack if over dragon's protection, if yes dragon is wounded foe_hit = calc_hit_def(power) dragon_defence = calc_hit_def(dragon.protection()) if foe_hit > dragon_defence: # If enemy decapitates dragon without wounds. if 'decapitator' in foe.modifiers(): status.extend(dragon.decapitate()) # Else just wounds. else: status.extend(dragon.struck()) else: status.append('dragon_undamaged') return status
def battle_action(dragon, foe): """ логика сражения. :type dragon: Dragon :param dragon: текущий дракон :type foe: Enemy :param foe: текущий противник :return: список, описывающий состояние боя """ status = [] # проверяем атаку дракона power = dragon.attack() immun = foe.immunity() # пробегаем все ключи словаря атаки дракона for key in power.keys(): (r, p) = power[key] if (not (r + p)) or (key in immun): # удаляем нулевые атаки и те, к которым у противника иммунитет del power[key] else: # записываем чем дракон мог ударить в статус раунда боя status.append('dragon_' + key) # проверяем, если атака больше защиты - противника съели, иначе он еще жив dragon_hit = calc_hit_def(power) foe_defence = calc_hit_def(foe.protection()) if dragon_hit > foe_defence: achieve_target(foe.name, "kill") # событие для ачивок foe.die() status.append('foe_dead') else: status.append('foe_alive') # полностью зеркальная ситуация для атаки противника power = foe.attack() immun = dragon.immunity() # пробегаем все ключи словаря атаки противника for key in power.keys(): (r, p) = power[key] if (not (r + p)) or (key in immun): # удаляем нулевые атаки и те, к которым у дракона иммунитет del power[key] else: # записываем чем противник мог ударить в статус раунда боя status.append('foe_' + key) # проверяем, если атака противника больше защиты дракона - дракон ранен foe_hit = calc_hit_def(power) dragon_defence = calc_hit_def(dragon.protection()) if foe_hit > dragon_defence: # Если противник сразу обезглавливает дракона не наося ему ран. if 'decapitator' in foe.modifiers(): status.extend(dragon.decapitate()) # А так просто наносим ранения. else: status.extend(dragon.struck()) else: status.append('dragon_undamaged') return status
def points(self, value): if value >= 0: delta = int(value - self._rp) if delta in reputation_gain: self._last_gain = delta self._gain += delta self._rp = int(value) achieve_target(self.level, "reputation") else: raise Exception("Cannot raise reputation. Invalid gain.")
def impregnate(self): """ Осеменение женщины. """ # self.description('prelude', True) # self.description('sex', True) # self.description('impregnate', True) self.game.girl.virgin = False if self.game.girl.quality < self.game.dragon.magic or \ 'impregnator' in self.game.dragon.modifiers(): self.game.girl.pregnant = 2 else: self.game.girl.pregnant = 1 self.game.dragon.lust -= 1 achieve_target(self.game.girl.type, "impregnate") return self.description('shout')
def create_lair(self, lair_type=None): """ Создание нового логова. """ # Выпускаем всех женщин в прошлом логове на свободу. self.girls_list.free_all_girls() if lair_type is not None: # Если меняется логово на лучшее - сохраняем сокровищницу save_treas = self.lair.treasury # Создаем новое логово self.lair = Lair(lair_type) data.achieve_target(self.lair.type_name, "lair") #событие для ачивок # Копируем сокровищницу из прошлого логова self.lair.treasury = save_treas else: # определяем логово по умолчанию lair_list = [] mods = self.dragon.modifiers() for lair in data.lair_types.iterkeys(): # просматриваем логова, выдаваемые автоматически при выполнении требований if 'prerequisite' in data.lair_types[lair]: prerequisite_list = data.lair_types[lair][ 'prerequisite'] # получаем список требований к дракону prerequisite_exists = True # временная переменная для требований for prerequisite in prerequisite_list: # просматриваем список требований # удостоверяемся, что список требований выполнен prerequisite_exists = prerequisite_exists and prerequisite in mods if prerequisite_exists: # если список требований выполнен, добавляем логово к списку lair_list.append((data.lair_types[lair].name, lair)) if len(lair_list) == 0: lair_type = 'impassable_coomb' # список логов пуст, выбираем начальное elif len(lair_list) == 1: lair_type = lair_list[0][ 1] # в списке одно логово, выбираем его автоматически else: lair_list.insert(0, (u"Выберите логово:", None)) lair_type = renpy.display_menu( lair_list ) # в списке больше одного логова, даём список на выбор self.lair = Lair(lair_type) data.achieve_target(self.lair.type_name, "lair") # событие для ачивок
def create_lair(self, lair_type=None): """ Create new lair. """ # Frees all girls from old lair. self.girls_list.free_all_girls() if lair_type is not None: # If lair changed for better one - save treasury save_treas = self.lair.treasury # Create new lair self.lair = Lair(lair_type) data.achieve_target(self.lair.type_name, "lair")#событие для ачивок # Copy treasury from old lair self.lair.treasury = save_treas else: # define default lair lair_list = [] mods = self.dragon.modifiers() for lair in data.lair_types.iterkeys(): # review lairs which are given away automatically if requirements done if 'prerequisite' in data.lair_types[lair]: prerequisite_list = data.lair_types[lair]['prerequisite'] # get list of requirements for dragon prerequisite_exists = True # temporary variable for requirements for prerequisite in prerequisite_list: # look through requirements list # Make sure that list of requirements is done prerequisite_exists = prerequisite_exists and prerequisite in mods if prerequisite_exists: # if list of requirements is done, adding lair to a list lair_list.append((data.lair_types[lair].name, lair)) if len(lair_list) == 0: lair_type = 'impassable_coomb' # list of lairs is empty, choose default elif len(lair_list) == 1: lair_type = lair_list[0][1] # one lair in a list, choose it automatically else: lair_list.insert(0, (u"Выберите логово:", None)) lair_type = renpy.display_menu(lair_list) # more than one lair in list, give a list to choose from self.lair = Lair(lair_type) data.achieve_target(self.lair.type_name, "lair")# achievements event
def create_lair(self, lair_type=None): """ Создание нового логова. """ # Выпускаем всех женщин в прошлом логове на свободу. self.girls_list.free_all_girls() if lair_type is not None: # Если меняется логово на лучшее - сохраняем сокровищницу save_treas = self.lair.treasury # Создаем новое логово self.lair = Lair(lair_type) data.achieve_target(self.lair.type_name, "lair")#событие для ачивок # Копируем сокровищницу из прошлого логова self.lair.treasury = save_treas else: # определяем логово по умолчанию lair_list = [] mods = self.dragon.modifiers() for lair in data.lair_types.iterkeys(): # просматриваем логова, выдаваемые автоматически при выполнении требований if 'prerequisite' in data.lair_types[lair]: prerequisite_list = data.lair_types[lair]['prerequisite'] # получаем список требований к дракону prerequisite_exists = True # временная переменная для требований for prerequisite in prerequisite_list: # просматриваем список требований # удостоверяемся, что список требований выполнен prerequisite_exists = prerequisite_exists and prerequisite in mods if prerequisite_exists: # если список требований выполнен, добавляем логово к списку lair_list.append((data.lair_types[lair].name, lair)) if len(lair_list) == 0: lair_type = 'impassable_coomb' # список логов пуст, выбираем начальное elif len(lair_list) == 1: lair_type = lair_list[0][1] # в списке одно логово, выбираем его автоматически else: lair_list.insert(0, (u"Выберите логово:", None)) lair_type = renpy.display_menu(lair_list) # в списке больше одного логова, даём список на выбор self.lair = Lair(lair_type) data.achieve_target(self.lair.type_name, "lair")# событие для ачивок