def setUp(self): super(QuestionsConsistencyTests, self).setUp() self.restriction = restrictions.QuestionsConsistency() self.answer_1 = facts.Answer(state_from='state_1', state_to='state_2', condition=True) self.answer_2 = facts.Answer(state_from='state_1', state_to='finish_1', condition=False) self.kb += [ facts.Start(uid='start', type='test', nesting=0), facts.Question(uid='state_1', condition=()), facts.State(uid='state_2'), facts.Finish(start='start', uid='finish_1', results={}, nesting=0), facts.Finish(start='start', uid='finish_2', results={}, nesting=0), facts.Jump(state_from='start', state_to='state_1'), self.answer_1, self.answer_2, facts.Jump(state_from='state_2', state_to='finish_2') ]
def check_quest(self, quest_class): self.kb += quest_class.construct_from_place( nesting=0, selector=self.selector, start_place=self.selector.new_place(candidates=('place_1', ))) self.kb.validate_consistency([ restrictions.SingleStartStateWithNoEnters(), restrictions.FinishStateExists(), restrictions.AllStatesHasJumps(), restrictions.SingleLocationForObject(), restrictions.ReferencesIntegrity(), restrictions.ConnectedStateJumpGraph(), restrictions.NoCirclesInStateJumpGraph(), # restrictions.MultipleJumpsFromNormalState(), restrictions.ChoicesConsistency(), restrictions.QuestionsConsistency(), restrictions.FinishResultsConsistency(), restrictions.RequirementsConsistency(), restrictions.ActionsConsistency() ])
restrictions.SingleLocationForObject(), restrictions.ReferencesIntegrity() ] # список ограничений для графа задания QUEST_RESTRICTIONS = [ restrictions.SingleStartStateWithNoEnters( ), # только одна начальная вершина для задания restrictions.FinishStateExists(), # существуют завершающие вершины restrictions.AllStatesHasJumps(), # существуют переходы из всех состояний restrictions.ConnectedStateJumpGraph(), # граф связаный restrictions.NoCirclesInStateJumpGraph(), # граф без циклов restrictions.MultipleJumpsFromNormalState( ), # каждая обычная вершина имеет только одну исходящую дугу restrictions.ChoicesConsistency(), # проверяем целостность развилок restrictions.QuestionsConsistency( ), # проверяем целостность условных узлов restrictions.FinishResultsConsistency( ) # проверяем, что для каждого окончания квеста указаны результаты для каждого его участника ] # создаём задание # эта функция может вызвать исключение questgen.exceptions.RollBackError и это её нормальное поведение # исключение означает, что создать задание не получилось и надо повторить попытку def create_quest(): # формируем список заданий для генерации qb = QuestsBase() qb += [ Spying, Hunt, Hometown, SearchSmith, Delivery, Caravan, CollectDebt, HelpFriend, InterfereEnemy, Help
QUESTS_LOGGER = logging.getLogger('the-tale.game.quests') WORLD_RESTRICTIONS = [ restrictions.SingleLocationForObject(), restrictions.ReferencesIntegrity() ] QUEST_RESTRICTIONS = [ restrictions.SingleStartStateWithNoEnters(), restrictions.FinishStateExists(), restrictions.AllStatesHasJumps(), restrictions.ConnectedStateJumpGraph(), restrictions.NoCirclesInStateJumpGraph(), restrictions.MultipleJumpsFromNormalState(), restrictions.ChoicesConsistency(), restrictions.QuestionsConsistency(), restrictions.FinishResultsConsistency() ] QUESTS_BASE = QuestsBase() QUESTS_BASE += [quest.quest_class for quest in relations.QUESTS.records] class HeroQuestInfo(object): __slots__ = ('id', 'level', 'position_place_id', 'is_first_quest_path_required', 'is_short_quest_path_required', 'preferences_mob_id', 'preferences_place_id', 'preferences_friend_id', 'preferences_enemy_id', 'preferences_equipment_slot', 'interfered_persons', 'quests_priorities', 'excluded_quests', 'prefered_quest_markers')