def test_more_then_one_location__for_person(self): self.kb += [ facts.LocatedIn(object='person', place='place'), facts.LocatedIn(object='person', place='place_2') ] self.assertRaises(self.restriction.Error, self.restriction.validate, self.kb)
def setUp(self): self.kb = KnowledgeBase() self.kb += [ facts.Hero(uid='hero'), facts.Hero(uid='hero_2'), facts.Place(uid='place_1', terrains=(1, ), type=11), facts.Place(uid='place_2', terrains=(0, ), type=22), facts.Place(uid='place_3', terrains=(0, ), type=33), facts.Person(uid='person_1', profession=0), facts.Person(uid='person_2', profession=1), facts.Person(uid='person_3', profession=2), facts.LocatedIn(object='person_1', place='place_1'), facts.LocatedIn(object='person_2', place='place_2'), facts.LocatedIn(object='person_3', place='place_3'), facts.Mob(uid='mob_1', terrains=(0, )) ] self.selector = selectors.Selector(self.kb, None)
def setup_persons(kb, hero_info): for person in persons_storage.persons.all(): place_uid = uids.place(person.place.id) if place_uid not in kb: continue f_person = fact_person(person) kb += f_person kb += facts.LocatedIn(object=f_person.uid, place=place_uid)
def setup_persons(kb, hero_info): for person in persons_storage.persons_storage.filter( state=PERSON_STATE.IN_GAME): place_uid = uids.place(person.place.id) if place_uid not in kb: continue f_person = fact_person(person) kb += f_person kb += facts.LocatedIn(object=f_person.uid, place=place_uid)
def setup_places(kb, hero_info): if hero_info.is_first_quest_path_required: fill_places_for_first_quest(kb, hero_info) elif hero_info.is_short_quest_path_required: fill_places(kb, hero_info, max_distance=c.QUEST_AREA_SHORT_RADIUS) else: fill_places(kb, hero_info, max_distance=c.QUEST_AREA_RADIUS) hero_position_uid = uids.place(hero_info.position_place_id) if hero_position_uid not in kb: kb += fact_place(places_storage.places[hero_info.position_place_id]) kb += facts.LocatedIn(object=uids.hero(hero_info.id), place=hero_position_uid) if len(list(kb.filter(facts.Place))) < 2: fill_places(kb, hero_info, max_distance=c.QUEST_AREA_MAXIMUM_RADIUS)
def create_quest(): # формируем список заданий для генерации qb = QuestsBase() qb += [ Spying, Hunt, Hometown, SearchSmith, Delivery, Caravan, CollectDebt, HelpFriend, InterfereEnemy, Help ] kb = KnowledgeBase() # описываем мир kb += [ facts.Hero(uid='hero'), # наш герой facts.Place(uid='place_1', terrains=( 1, )), # есть место с идентификатором place_1 и типами ландшафта 1, facts.Place(uid='place_2', terrains=(0, )), facts.Place(uid='place_3', terrains=(0, )), facts.Place(uid='place_4', terrains=(1, )), facts.Place(uid='place_5', terrains=(2, )), facts.Place(uid='place_6', terrains=(1, )), facts.Place(uid='place_7', terrains=(2, )), facts.Place(uid='place_8', terrains=(2, )), facts.Place(uid='place_9', terrains=(1, )), facts.Place(uid='place_10', terrains=(2, )), facts.Person( uid='person_1', profession=PROFESSION.NONE ), # есть персонаж с идентификатором perons_1 и без профессии facts.Person(uid='person_2', profession=PROFESSION.BLACKSMITH), facts.Person(uid='person_3', profession=PROFESSION.ROGUE), facts.Person(uid='person_4', profession=PROFESSION.NONE), facts.Person(uid='person_5', profession=PROFESSION.NONE), facts.Person(uid='person_6', profession=PROFESSION.NONE), facts.Person(uid='person_7', profession=PROFESSION.NONE), facts.Person(uid='person_8', profession=PROFESSION.NONE), facts.Person(uid='person_9', profession=PROFESSION.NONE), facts.Person(uid='person_10', profession=PROFESSION.NONE), facts.LocatedIn( object='person_1', place='place_1'), # персонаж person_1 находится в place_1 facts.LocatedIn(object='person_2', place='place_2'), facts.LocatedIn(object='person_3', place='place_3'), facts.LocatedIn(object='person_4', place='place_4'), facts.LocatedIn(object='person_5', place='place_5'), facts.LocatedIn(object='person_6', place='place_6'), facts.LocatedIn(object='person_7', place='place_7'), facts.LocatedIn(object='person_8', place='place_8'), facts.LocatedIn(object='person_9', place='place_9'), facts.LocatedIn(object='person_10', place='place_10'), facts.LocatedIn(object='hero', place='place_1'), # герой находится в place_1 facts.Mob( uid='mob_1', terrains=(0, ) ), # есть монстр, обитающий на территориях с идентификатором 0 (для задания на охоту) facts.PreferenceMob( object='hero', mob='mob_1'), # герой любит охотиться на монстра mob_1 facts.PreferenceHometown( object='hero', place='place_2'), # герой считате родным место place_2 facts.PreferenceFriend(object='hero', person='person_4'), # герой дружит с person_4 facts.PreferenceEnemy(object='hero', person='person_5'), # герой враждует с person_5 # указываем, что обновление экипировки стоит 777 монет (для задания SearchSmith) # facts.HasMoney(object='hero', money=888), # если этот факт раскоментировать то в этом задании герой купит экипировку, а не пойдёт делать задание кузнеца facts.UpgradeEquipmentCost(money=777), facts.OnlyGoodBranches(object='place_2'), # не вредить месту place_2 facts.OnlyGoodBranches( object='person_4'), # не вредить персонажу person_4 facts.OnlyBadBranches(object='person_5') ] # не помогать персонажу person_5 kb.validate_consistency( WORLD_RESTRICTIONS) # проверяем ограничения на мир, selector = Selector(kb, qb) # создаём квест (получаем список фактов) quests_facts = selector.create_quest_from_place( nesting=0, initiator_position=kb['place_1'], tags=('can_start', )) kb += quests_facts transformators.activate_events( kb ) # активируем события (из нескольких вершин графа оставляем одну, остальные удаляем) transformators.remove_restricted_states( kb ) # удаляем состояния, в которые нельзя переходить (например, которые вредят тому, кому вредить нельщя) transformators.remove_broken_states( kb ) # чистим граф задания от разрушений, вызванных предыдущими действиями transformators.determine_default_choices( kb) # определяем выборы по умолчанию на развилках kb.validate_consistency(WORLD_RESTRICTIONS) # ещё раз проверяем мир kb.validate_consistency( QUEST_RESTRICTIONS ) # проверяем граф задания (вдруг полностью разрушен) return kb
facts.Place(uid='place_9', terrains=(1, )), facts.Place(uid='place_10', terrains=(2, ), type=relations.PLACE_TYPE.HOLY_CITY), facts.Person(uid='person_1', profession=relations.PROFESSION.NONE), facts.Person(uid='person_2', profession=relations.PROFESSION.BLACKSMITH), facts.Person(uid='person_3', profession=relations.PROFESSION.ROGUE), facts.Person(uid='person_4', profession=relations.PROFESSION.NONE), facts.Person(uid='person_5', profession=relations.PROFESSION.NONE), facts.Person(uid='person_6', profession=relations.PROFESSION.NONE), facts.Person(uid='person_7', profession=relations.PROFESSION.NONE), facts.Person(uid='person_8', profession=relations.PROFESSION.NONE), facts.Person(uid='person_9', profession=relations.PROFESSION.NONE), facts.Person(uid='person_10', profession=relations.PROFESSION.NONE), facts.LocatedIn(object='person_1', place='place_1'), facts.LocatedIn(object='person_2', place='place_2'), facts.LocatedIn(object='person_3', place='place_3'), facts.LocatedIn(object='person_4', place='place_4'), facts.LocatedIn(object='person_5', place='place_5'), facts.LocatedIn(object='person_6', place='place_6'), facts.LocatedIn(object='person_7', place='place_7'), facts.LocatedIn(object='person_8', place='place_8'), facts.LocatedIn(object='person_9', place='place_9'), facts.LocatedIn(object='person_10', place='place_10'), facts.LocatedIn(object='hero', place='place_1'), facts.Mob(uid='mob_1', terrains=(0, )), facts.PreferenceMob(object='hero', mob='mob_1'), facts.PreferenceHometown(object='hero', place='place_2'), facts.PreferenceFriend(object='hero', person='person_4'), facts.PreferenceEnemy(object='hero', person='person_5'),
def fact_located_in(person): return facts.LocatedIn(object=uids.person(person.id), place=uids.place(person.place.id))
def test_bad_reference(self): self.kb += facts.LocatedIn(object='person', place=None) self.assertRaises(self.restriction.Error, self.restriction.validate, self.kb)
def test_none_value(self): self.kb += [ facts.Person(uid='person'), facts.LocatedIn(object='person', place=None) ] self.restriction.validate(self.kb)
def test_more_then_one_location__for_place__diferent_relations(self): self.kb += [ facts.LocatedNear(object='person', place='place'), facts.LocatedIn(object='person_2', place='place') ] self.restriction.validate(self.kb)
def test_success(self): self.kb += facts.LocatedIn(object='person', place='place') self.restriction.validate(self.kb)
def test_change__wrong_change_attribute(self): fact_1 = facts.LocatedIn(object='person_1', place='place_1') self.assertRaises(exceptions.WrongChangeAttributeError, fact_1.change, xxx='yyy')
def test_change(self): fact_1 = facts.LocatedIn(object='person_1', place='place_1') fact_2 = fact_1.change(place='place_2') self.assertEqual(fact_2.object, 'person_1') self.assertEqual(fact_2.place, 'place_2')
def setUp(self): self.qb = QuestsBase() self.qb += [Simple] self.kb = KnowledgeBase() self.kb += [ facts.Hero(uid='hero'), facts.Place(uid='place_1', terrains=(1, )), facts.Place(uid='place_2', terrains=(0, )), facts.Place(uid='place_3', terrains=(0, )), facts.Place(uid='place_4', terrains=(1, )), facts.Place(uid='place_5', terrains=(2, )), facts.Place(uid='place_6', terrains=(1, )), facts.Place(uid='place_7', terrains=(2, )), facts.Place(uid='place_8', terrains=(2, )), facts.Place(uid='place_9', terrains=(1, )), facts.Place(uid='place_10', terrains=(2, )), facts.Person(uid='person_1', profession=PROFESSION.NONE), facts.Person(uid='person_2', profession=PROFESSION.BLACKSMITH), facts.Person(uid='person_3', profession=PROFESSION.NONE), facts.Person(uid='person_4', profession=PROFESSION.NONE), facts.Person(uid='person_5', profession=PROFESSION.NONE), facts.Person(uid='person_6', profession=PROFESSION.NONE), facts.Person(uid='person_7', profession=PROFESSION.NONE), facts.Person(uid='person_8', profession=PROFESSION.NONE), facts.Person(uid='person_9', profession=PROFESSION.NONE), facts.Person(uid='person_10', profession=PROFESSION.NONE), facts.LocatedIn(object='person_1', place='place_1'), facts.LocatedIn(object='person_2', place='place_2'), facts.LocatedIn(object='person_3', place='place_3'), facts.LocatedIn(object='person_4', place='place_4'), facts.LocatedIn(object='person_5', place='place_5'), facts.LocatedIn(object='person_6', place='place_6'), facts.LocatedIn(object='person_7', place='place_7'), facts.LocatedIn(object='person_8', place='place_8'), facts.LocatedIn(object='person_9', place='place_9'), facts.LocatedIn(object='person_10', place='place_10'), facts.LocatedIn(object='hero', place='place_1'), facts.Mob(uid='mob_1', terrains=(0, )), facts.PreferenceMob(object='hero', mob='mob_1'), facts.PreferenceHometown(object='hero', place='place_2'), facts.PreferenceFriend(object='hero', person='person_4'), facts.PreferenceEnemy(object='hero', person='person_5'), facts.UpgradeEquipmentCost(money=777) ] self.selector = Selector(self.kb, self.qb)