Ejemplo n.º 1
0
    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')
        ]
Ejemplo n.º 2
0
    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()
        ])
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
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')