def test_multiple_tagged_jump(self): facts_list = [ facts.Start(uid='start', type='test', nesting=0), facts.Event(uid='event_tag', members=('st_finish_1', 'st_finish_2')) ] finishes = [ facts.Finish(uid='st_finish_1', results={}, nesting=0, start='start'), facts.Finish(uid='st_finish_2', results={}, nesting=0, start='start'), ] self.kb += facts_list self.kb += finishes transformators.activate_events(self.kb) self.check_in_knowledge_base(self.kb, facts_list) self.assertTrue( ('st_finish_1' in self.kb and 'st_finish_2' not in self.kb) or ('st_finish_2' in self.kb and 'st_finish_1' not in self.kb))
def test_simple_tagged_jump(self): facts_list = [ facts.Start(uid='start', type='test', nesting=0), facts.Finish(uid='st_finish', results={}, nesting=0, start='start'), facts.Jump(state_from='start', state_to='st_finish'), facts.Event(uid='event_tag', members=('st_finish', )) ] self.kb += facts_list transformators.activate_events(self.kb) self.check_in_knowledge_base(self.kb, facts_list)
def test_no_tag(self): facts_list = [ facts.Start(uid='start', type='test', nesting=0), facts.Finish(uid='st_finish', results={}, nesting=0, start='start'), facts.Jump(state_from='start', state_to='st_finish'), facts.Event(uid='event_tag', members=()) ] self.kb += facts_list self.assertRaises(exceptions.NoEventMembersError, transformators.activate_events, self.kb) self.check_in_knowledge_base(self.kb, facts_list)
def construct(cls, nesting, selector, initiator, initiator_position, receiver, receiver_position): ns = selector._kb.get_next_ns() start = facts.Start(uid=ns+'start', type=cls.TYPE, nesting=nesting, description=u'Начало: самый простой квест') participants = [facts.QuestParticipant(start=start.uid, participant=initiator.uid, role=ROLES.INITIATOR), facts.QuestParticipant(start=start.uid, participant=initiator_position.uid, role=ROLES.INITIATOR_POSITION), facts.QuestParticipant(start=start.uid, participant=receiver.uid, role=ROLES.RECEIVER), facts.QuestParticipant(start=start.uid, participant=receiver_position.uid, role=ROLES.RECEIVER_POSITION) ] finish_successed = facts.Finish(uid=ns+'finish_successed', start=start.uid, results={initiator.uid: RESULTS.SUCCESSED, initiator_position.uid: RESULTS.SUCCESSED, receiver.uid: RESULTS.SUCCESSED, receiver_position.uid: RESULTS.SUCCESSED}, nesting=nesting, description=u'завершить задание удачно') finish_failed = facts.Finish(uid=ns+'finish_failed', start=start.uid, results={initiator.uid: RESULTS.FAILED, initiator_position.uid: RESULTS.FAILED, receiver.uid: RESULTS.FAILED, receiver_position.uid: RESULTS.FAILED}, nesting=nesting, description=u'завершить задание плохо') event = facts.Event(uid=ns+'event', members=(finish_successed.uid, finish_failed.uid)) line = [ start, finish_successed, finish_failed, event, facts.Jump(state_from=start.uid, state_to=finish_successed.uid), facts.Jump(state_from=start.uid, state_to=finish_failed.uid) ] line.extend(participants) return line
def construct(cls, nesting, selector, initiator, initiator_position, receiver, receiver_position): hero = selector.heroes()[0] ns = selector._kb.get_next_ns() antagonist_marker = None try: antagonist = selector.new_person( first_initiator=False, professions=[relations.PROFESSION.ROGUE], restrict_social_connections=( (initiator.uid, relations.SOCIAL_RELATIONS.PARTNER), (receiver.uid, relations.SOCIAL_RELATIONS.PARTNER)), social_connections=((initiator.uid, relations.SOCIAL_RELATIONS.CONCURRENT), (receiver.uid, relations.SOCIAL_RELATIONS.CONCURRENT))) antagonist_marker = facts.ProfessionMarker( person=antagonist.uid, profession=antagonist.profession) except exceptions.NoFactSelectedError: antagonist = selector.new_person( restrict_social_connections=( (initiator.uid, relations.SOCIAL_RELATIONS.PARTNER), (receiver.uid, relations.SOCIAL_RELATIONS.PARTNER)), social_connections=((initiator.uid, relations.SOCIAL_RELATIONS.CONCURRENT), (receiver.uid, relations.SOCIAL_RELATIONS.CONCURRENT))) antagonist_position = selector.place_for(objects=(antagonist.uid, )) start = facts.Start(uid=ns + 'start', type=cls.TYPE, nesting=nesting, description='Начало: доставка', require=[ requirements.LocatedIn( object=hero.uid, place=initiator_position.uid) ], actions=[actions.Message(type='intro')]) participants = [ facts.QuestParticipant(start=start.uid, participant=initiator.uid, role=ROLES.INITIATOR), facts.QuestParticipant(start=start.uid, participant=receiver.uid, role=ROLES.RECEIVER), facts.QuestParticipant(start=start.uid, participant=antagonist.uid, role=ROLES.ANTAGONIST) ] delivery_choice = facts.Choice( uid=ns + 'delivery_choice', description='Решение: доставить или украсть') finish_delivery = facts.Finish( uid=ns + 'finish_delivery', start=start.uid, results={ initiator.uid: RESULTS.SUCCESSED, receiver.uid: RESULTS.SUCCESSED, antagonist.uid: RESULTS.NEUTRAL }, nesting=nesting, description='Доставить посылку получателю', require=[ requirements.LocatedIn(object=hero.uid, place=receiver_position.uid) ], actions=[ actions.GiveReward(object=hero.uid, type='finish_delivery') ]) finish_fake_delivery = facts.Finish( uid=ns + 'finish_fake_delivery', start=start.uid, results={ initiator.uid: RESULTS.FAILED, receiver.uid: RESULTS.FAILED, antagonist.uid: RESULTS.NEUTRAL }, nesting=nesting, description='Подделать письмо', require=[ requirements.LocatedIn(object=hero.uid, place=receiver_position.uid) ], actions=[ actions.GiveReward(object=hero.uid, type='finish_fake_delivery', scale=2.0) ]) fake_delivery_dummy_state = facts.FakeFinish( uid=ns + 'dummy_state', start=start.uid, results={ initiator.uid: RESULTS.NEUTRAL, receiver.uid: RESULTS.NEUTRAL, antagonist.uid: RESULTS.NEUTRAL }, nesting=nesting, description= 'заглушка, чтобы можно было управлять появлением подделки письма') finish_steal = facts.Finish(uid=ns + 'finish_steal', start=start.uid, results={ initiator.uid: RESULTS.FAILED, receiver.uid: RESULTS.FAILED, antagonist.uid: RESULTS.SUCCESSED }, nesting=nesting, description='Доставить посылку скупщику', require=[ requirements.LocatedIn( object=hero.uid, place=antagonist_position.uid) ], actions=[ actions.GiveReward(object=hero.uid, type='finish_steal', scale=1.5) ]) delivery_stealed = facts.State( uid=ns + 'delivery_stealed', description='письмо украдено', require=[ requirements.LocatedOnRoad(object=hero.uid, place_from=initiator_position.uid, place_to=receiver_position.uid, percents=random.uniform(0.6, 0.9)) ], actions=[ actions.Message(type='delivery_stealed'), actions.MoveNear(object=hero.uid) ]) fight_for_stealed = facts.Question( uid=ns + 'fight_for_stealed', description='Сразиться с вором', actions=[ actions.Message(type='fight_thief'), actions.Fight(mercenary=True) ], condition=[requirements.IsAlive(object=hero.uid)]) finish_fight_for_stealed__hero_died = facts.Finish( uid=ns + 'finish_fight_for_stealed__hero_died', start=start.uid, results={ initiator.uid: RESULTS.NEUTRAL, receiver.uid: RESULTS.NEUTRAL, antagonist.uid: RESULTS.NEUTRAL }, nesting=nesting, description='Герой не смог вернуть украденное письмо', actions=[ actions.Message(type='finish_fight_for_stealed__hero_died') ]) finish_fight_for_stealed__delivery = facts.Finish( uid=ns + 'finish_fight_for_stealed__delivery', start=start.uid, results={ initiator.uid: RESULTS.SUCCESSED, receiver.uid: RESULTS.SUCCESSED, antagonist.uid: RESULTS.NEUTRAL }, nesting=nesting, description='Доставить посылку получателю', require=[ requirements.LocatedIn(object=hero.uid, place=receiver_position.uid) ], actions=[ actions.GiveReward(object=hero.uid, type='finish_delivery') ]) line = [ start, delivery_choice, delivery_stealed, fight_for_stealed, finish_delivery, finish_steal, finish_fake_delivery, fake_delivery_dummy_state, finish_fight_for_stealed__hero_died, finish_fight_for_stealed__delivery, facts.Jump(state_from=start.uid, state_to=delivery_choice.uid), facts.Jump(state_from=delivery_stealed.uid, state_to=fight_for_stealed.uid), facts.Option(state_from=delivery_choice.uid, state_to=delivery_stealed.uid, type='delivery', markers=[relations.OPTION_MARKERS.HONORABLE], start_actions=[ actions.Message(type='start_delivery'), ]), facts.Option(state_from=delivery_choice.uid, state_to=finish_delivery.uid, type='delivery', markers=[relations.OPTION_MARKERS.HONORABLE], start_actions=[ actions.Message(type='start_delivery'), ]), facts.Option(state_from=delivery_choice.uid, state_to=finish_steal.uid, type='steal', markers=[relations.OPTION_MARKERS.DISHONORABLE], start_actions=[ actions.Message(type='start_steal'), ]), facts.Option(state_from=delivery_choice.uid, state_to=finish_fake_delivery.uid, type='fake', markers=[relations.OPTION_MARKERS.DISHONORABLE], start_actions=[ actions.Message(type='start_fake'), ]), facts.Option(state_from=delivery_choice.uid, state_to=fake_delivery_dummy_state.uid, markers=[], type='dummy_lie'), facts.Answer( state_from=fight_for_stealed.uid, state_to=finish_fight_for_stealed__delivery.uid, condition=True, start_actions=[actions.Message(type='delivery_returned')]), facts.Answer(state_from=fight_for_stealed.uid, state_to=finish_fight_for_stealed__hero_died.uid, condition=False), facts.Event(uid=ns + 'delivery_variants', description='Варианты доставки', members=(delivery_stealed.uid, finish_delivery.uid)), facts.Event(uid=ns + 'lie_variants', description='Варианты обмана', members=(fake_delivery_dummy_state.uid, finish_fake_delivery.uid)) ] line.extend(participants) if antagonist_marker: line.append(antagonist_marker) return line
def construct(cls, nesting, selector, initiator, initiator_position, receiver, receiver_position): hero = selector.heroes()[0] ns = selector._kb.get_next_ns() start = facts.Start( uid=ns + 'start', type=cls.TYPE, nesting=nesting, description=u'Начало: задание на шпионаж', require=[ requirements.LocatedIn(object=hero.uid, place=initiator_position.uid), requirements.LocatedIn(object=receiver.uid, place=receiver_position.uid) ], actions=[actions.Message(type='intro')]) participants = [ facts.QuestParticipant(start=start.uid, participant=initiator.uid, role=ROLES.INITIATOR), facts.QuestParticipant(start=start.uid, participant=receiver.uid, role=ROLES.RECEIVER) ] start_spying = facts.Choice( uid=ns + 'start_spying', description=u'Прибытие в город цели', require=[ requirements.LocatedIn(object=hero.uid, place=receiver_position.uid) ], actions=[actions.Message(type='arrived_to_target')]) spying_middle = facts.Choice(uid=ns + 'spying_middle', description=u'Шпионаж', actions=[ actions.MoveNear( object=hero.uid, place=receiver_position.uid) ]) continue_spying = facts.State(uid=ns + 'continue_spying', description=u'Продолжить шпионаж') success_spying = facts.State( uid=ns + 'success_spying', description=u'шпионим без происшествий', require=[ requirements.LocatedNear(object=hero.uid, place=receiver_position.uid) ], actions=[ actions.Message(type='success_spying'), actions.MoveNear(object=hero.uid, place=receiver_position.uid) ]) witness = facts.State( uid=ns + 'witness', description=u'героя заметил один из работников цели', require=[ requirements.LocatedNear(object=hero.uid, place=receiver_position.uid) ], actions=[ actions.Message(type='witness'), actions.MoveNear(object=hero.uid, place=receiver_position.uid) ]) witness_fight = facts.Question( uid=ns + 'witness_fight', description=u'удалось ли победить свидетеля?', condition=[requirements.IsAlive(object=hero.uid)], actions=[ actions.Message(type='witness_fight'), actions.Fight(mercenary=True) ]) open_up = facts.State(uid=ns + 'open_up', description=u'Раскрыться', require=[ requirements.LocatedIn( object=hero.uid, place=receiver_position.uid) ], actions=[actions.Message(type='open_up')]) report_data = facts.Finish( uid=ns + 'report_data', start=start.uid, results={ initiator.uid: RESULTS.SUCCESSED, receiver.uid: RESULTS.FAILED }, nesting=nesting, description=u'Сообщить сообранную информацию', require=[ requirements.LocatedIn(object=hero.uid, place=initiator_position.uid) ], actions=[ actions.GiveReward(object=hero.uid, type='report_data'), actions.GivePower(object=initiator.uid, power=1), actions.GivePower(object=receiver.uid, power=-1) ]) finish_spying_choice = facts.Choice( uid=ns + 'finish_spying_choice', description=u'Варианты выбора завершения шпионажа') blackmail_finish = facts.Finish( uid=ns + 'blackmail_finish', start=start.uid, results={ initiator.uid: RESULTS.NEUTRAL, receiver.uid: RESULTS.FAILED }, nesting=nesting, description=u'Шантажировать самостоятельно', require=[ requirements.LocatedIn(object=hero.uid, place=receiver_position.uid) ], actions=[ actions.GiveReward(object=hero.uid, type='blackmail_finish', scale=1.25), actions.GivePower(object=receiver.uid, power=-1) ]) witness_failed = facts.Finish( uid=ns + 'witness_failed', start=start.uid, results={ initiator.uid: RESULTS.NEUTRAL, receiver.uid: RESULTS.NEUTRAL }, nesting=nesting, description=u'свидетель смог скрыться', actions=[actions.Message(type='witness_failed')]) open_up_finish = facts.Finish( uid=ns + 'open_up_finish', start=start.uid, results={ initiator.uid: RESULTS.FAILED, receiver.uid: RESULTS.SUCCESSED }, nesting=nesting, description=u'Завершить задание и остатсья в городе цели', require=[ requirements.LocatedIn(object=hero.uid, place=receiver_position.uid) ], actions=[ actions.GiveReward(object=hero.uid, type='open_up_finish'), actions.GivePower(object=initiator.uid, power=-1), actions.GivePower(object=receiver.uid, power=1) ]) open_up_lying = facts.Finish( uid=ns + 'open_up_lying', start=start.uid, results={ initiator.uid: RESULTS.FAILED, receiver.uid: RESULTS.SUCCESSED }, nesting=nesting, description=u'Вернуться к заказчику и сообщить ложную информацию', require=[ requirements.LocatedIn(object=hero.uid, place=initiator_position.uid) ], actions=[ actions.GiveReward(object=hero.uid, type='open_up_lying', scale=1.5), actions.GivePower(object=initiator.uid, power=-1.5), actions.GivePower(object=receiver.uid, power=1.5) ]) start_spying__spying_middle = facts.Option( state_from=start_spying.uid, state_to=spying_middle.uid, type='spy', markers=[relations.OPTION_MARKERS.HONORABLE], start_actions=[ actions.Message(type='start_spying'), ]) start_spying__spying_middle__blackmail = facts.Option( state_from=start_spying.uid, state_to=spying_middle.uid, type='blackmail', markers=[relations.OPTION_MARKERS.DISHONORABLE], start_actions=[ actions.Message(type='start_spying'), ]) start_spying__open_up = facts.Option( state_from=start_spying.uid, state_to=open_up.uid, type='open_up', markers=[relations.OPTION_MARKERS.DISHONORABLE], start_actions=[ actions.Message(type='start_open_up'), ]) spying_middle__continue_spying = facts.Option( state_from=spying_middle.uid, state_to=continue_spying.uid, type='spy', markers=[relations.OPTION_MARKERS.HONORABLE]) spying_middle__continue_spying__blackmail = facts.Option( state_from=spying_middle.uid, state_to=continue_spying.uid, type='blackmail', markers=[relations.OPTION_MARKERS.DISHONORABLE]) spying_middle__open_up = facts.Option( state_from=spying_middle.uid, state_to=open_up.uid, type='open_up', markers=[relations.OPTION_MARKERS.DISHONORABLE], start_actions=[ actions.Message(type='start_open_up'), ]) finish_spying__report_data = facts.Option( state_from=finish_spying_choice.uid, state_to=report_data.uid, type='spy', markers=[relations.OPTION_MARKERS.HONORABLE], start_actions=[actions.Message(type='go_report_data')]) finish_spying__blackmail = facts.Option( state_from=finish_spying_choice.uid, state_to=blackmail_finish.uid, type='blackmail', markers=[relations.OPTION_MARKERS.DISHONORABLE], start_actions=[actions.Message(type='go_blackmail')]) line = [ start, start_spying, spying_middle, success_spying, continue_spying, open_up, report_data, open_up_finish, open_up_lying, witness, witness_fight, witness_failed, finish_spying_choice, blackmail_finish, facts.Jump(state_from=start.uid, state_to=start_spying.uid), facts.Jump(state_from=continue_spying.uid, state_to=success_spying.uid), facts.Jump(state_from=continue_spying.uid, state_to=witness.uid), start_spying__spying_middle, start_spying__spying_middle__blackmail, start_spying__open_up, spying_middle__continue_spying, spying_middle__continue_spying__blackmail, spying_middle__open_up, finish_spying__report_data, finish_spying__blackmail, facts.Jump( state_from=success_spying.uid, state_to=finish_spying_choice.uid ), #, start_actions=[actions.Message(type='move_to_report_data'),]), facts.Jump(state_from=witness.uid, state_to=witness_fight.uid), facts.Jump(state_from=open_up.uid, state_to=open_up_finish.uid), facts.Jump(state_from=open_up.uid, state_to=open_up_lying.uid, start_actions=[ actions.Message(type='move_to_report_lie'), ]), facts.OptionsLink(options=(start_spying__spying_middle.uid, spying_middle__continue_spying.uid, finish_spying__report_data.uid)), facts.OptionsLink( options=(start_spying__spying_middle__blackmail.uid, spying_middle__continue_spying__blackmail.uid, finish_spying__blackmail.uid)), facts.Answer(state_from=witness_fight.uid, state_to=finish_spying_choice.uid, condition=True), facts.Answer(state_from=witness_fight.uid, state_to=witness_failed.uid, condition=False), facts.Event(uid=ns + 'open_up_variants', description=u'Варианты окончания раскрытия', members=(open_up_finish.uid, open_up_lying.uid)), facts.Event(uid=ns + 'spying_variants', description=u'Варианты событий при шпионаже', members=(success_spying.uid, witness.uid)), ] line.extend(participants) return line