Example #1
0
 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)
Example #2
0
    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)
Example #3
0
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)
Example #4
0
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)
Example #5
0
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)
Example #6
0
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
Example #7
0
 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'),
Example #8
0
def fact_located_in(person):
    return facts.LocatedIn(object=uids.person(person.id),
                           place=uids.place(person.place.id))
Example #9
0
 def test_bad_reference(self):
     self.kb += facts.LocatedIn(object='person', place=None)
     self.assertRaises(self.restriction.Error, self.restriction.validate,
                       self.kb)
Example #10
0
 def test_none_value(self):
     self.kb += [
         facts.Person(uid='person'),
         facts.LocatedIn(object='person', place=None)
     ]
     self.restriction.validate(self.kb)
Example #11
0
 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)
Example #12
0
 def test_success(self):
     self.kb += facts.LocatedIn(object='person', place='place')
     self.restriction.validate(self.kb)
Example #13
0
 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')
Example #14
0
 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')
Example #15
0
    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)