示例#1
0
    def test_social_connections(self):
        persons_1 = self.place_1.persons
        persons_2 = self.place_2.persons
        persons_3 = self.place_3.persons

        persons_logic.create_social_connection(
            persons_relations.SOCIAL_CONNECTION_TYPE.random(), persons_1[0],
            persons_2[0])
        persons_logic.create_social_connection(
            persons_relations.SOCIAL_CONNECTION_TYPE.random(), persons_1[1],
            persons_3[0])
        persons_logic.create_social_connection(
            persons_relations.SOCIAL_CONNECTION_TYPE.random(), persons_2[0],
            persons_3[0])
        persons_logic.create_social_connection(
            persons_relations.SOCIAL_CONNECTION_TYPE.random(), persons_2[1],
            persons_3[1])

        self.hero.position.set_place(self.place_1)

        logic.fill_places(
            self.knowledge_base, self.get_hero_info(),
            waymarks_storage.look_for_road(self.place_1, self.place_2).length)
        logic.setup_persons(self.knowledge_base, self.get_hero_info())
        logic.setup_social_connections(self.knowledge_base)

        expected_connections = []

        for person in persons_storage.persons.all():
            if person.place_id == self.place_3.id:
                continue
            for connection_type, connected_person_id in persons_storage.social_connections.get_person_connections(
                    person):
                connected_person = persons_storage.persons[connected_person_id]
                if connected_person.place_id == self.place_3.id:
                    continue
                expected_connections.append(
                    logic.fact_social_connection(
                        connection_type, uids.person(person.id),
                        uids.person(connected_person.id)))

        self.check_facts(places=[
            logic.fact_place(self.place_1),
            logic.fact_place(self.place_2)
        ],
                         persons=[
                             logic.fact_person(person)
                             for person in persons_storage.persons.all()
                             if person.place_id != self.place_3.id
                         ],
                         locations=[
                             logic.fact_located_in(person)
                             for person in persons_storage.persons.all()
                             if person.place_id != self.place_3.id
                         ],
                         social_connections=expected_connections)
示例#2
0
    def _give_person_power(self, hero, person, power):
        power = self.get_current_power(power)

        if power > 0:
            hero.places_history.add_place(
                person.place_id, value=person.attrs.places_help_amount)

        if not hero.can_change_person_power(person):
            return 0

        power = hero.modify_politics_power(power, person=person)

        power += (1 if power > 0 else -1) * self.current_info.power_bonus

        person_uid = uids.person(person.id)
        has_profession_marker = [
            marker
            for marker in self.knowledge_base.filter(facts.ProfessionMarker)
            if marker.person == person_uid
        ]

        if has_profession_marker:
            power /= len(PERSON_TYPE.records)

        person.cmd_change_power(
            hero_id=hero.id,
            has_place_in_preferences=hero.preferences.has_place_in_preferences(
                person.place),
            has_person_in_preferences=hero.preferences.
            has_person_in_preferences(person),
            power=power)

        return power
示例#3
0
def get_knowledge_base(hero_info, without_restrictions=False):  # pylint: disable=R0912

    kb = KnowledgeBase()

    hero_uid = uids.hero(hero_info.id)

    kb += facts.Hero(uid=hero_uid, externals={'id': hero_info.id})

    setup_places(kb, hero_info)
    setup_persons(kb, hero_info)
    setup_preferences(kb, hero_info)
    setup_social_connections(kb)

    if not without_restrictions:

        for person in persons_storage.persons.all():
            if person.place.id == hero_info.position_place_id and person.id in hero_info.interfered_persons:
                kb += facts.NotFirstInitiator(person=uids.person(person.id))

    kb.validate_consistency(WORLD_RESTRICTIONS)

    kb += [
        facts.UpgradeEquipmentCost(
            money=QuestPrototype.upgrade_equipment_cost(hero_info))
    ]

    return kb
示例#4
0
    def _give_person_power(self, hero, person, power):
        power = self.get_current_power(power)

        if power > 0:
            hero.places_history.add_place(person.place_id, value=person.attrs.places_help_amount)

        if not hero.can_change_person_power(person):
            return 0

        power = hero.modify_politics_power(power, person=person)

        power += ( 1 if power > 0 else -1) * self.current_info.power_bonus

        person_uid = uids.person(person.id)
        has_profession_marker = [marker for marker in self.knowledge_base.filter(facts.ProfessionMarker) if marker.person == person_uid]

        if has_profession_marker:
            power /= len(PERSON_TYPE.records)

        person.cmd_change_power(hero_id=hero.id,
                                has_place_in_preferences=hero.preferences.has_place_in_preferences(person.place),
                                has_person_in_preferences=hero.preferences.has_person_in_preferences(person),
                                power=power)

        return power
示例#5
0
    def test_social_connections(self):
        persons_logic.sync_social_connections()

        self.hero.position.set_place(self.place_1)

        logic.fill_places(
            self.knowledge_base, self.get_hero_info(),
            waymarks_storage.look_for_road(self.place_1, self.place_2).length)
        logic.setup_persons(self.knowledge_base, self.get_hero_info())
        logic.setup_social_connections(self.knowledge_base)

        expected_connections = []

        for person in persons_storage.persons.all():
            if person.place_id == self.place_3.id:
                continue
            for connection_type, connected_person_id in persons_storage.social_connections.get_person_connections(
                    person):
                connected_person = persons_storage.persons[connected_person_id]
                if connected_person.place_id == self.place_3.id:
                    continue
                expected_connections.append(
                    logic.fact_social_connection(
                        connection_type, uids.person(person.id),
                        uids.person(connected_person.id)))

        self.check_facts(places=[
            logic.fact_place(self.place_1),
            logic.fact_place(self.place_2)
        ],
                         persons=[
                             logic.fact_person(person)
                             for person in persons_storage.persons.all()
                             if person.place_id != self.place_3.id
                         ],
                         locations=[
                             logic.fact_located_in(person)
                             for person in persons_storage.persons.all()
                             if person.place_id != self.place_3.id
                         ],
                         social_connections=expected_connections)
示例#6
0
    def _give_person_power(self, hero, person, power):
        power = self.get_current_power(power)

        if power > 0:
            hero.places_history.add_place(
                person.place_id, value=person.attrs.places_help_amount)

        if not hero.can_change_person_power(person):
            return 0

        power = hero.modify_politics_power(power, person=person)

        power += (1 if power > 0 else -1) * self.current_info.power_bonus

        person_uid = uids.person(person.id)
        has_profession_marker = [
            marker
            for marker in self.knowledge_base.filter(facts.ProfessionMarker)
            if marker.person == person_uid
        ]

        if has_profession_marker:
            power /= len(PERSON_TYPE.records)

        has_person_in_preferences = hero.preferences.has_person_in_preferences(
            person)

        person.cmd_change_power(
            hero_id=hero.id,
            has_place_in_preferences=hero.preferences.has_place_in_preferences(
                person.place),
            has_person_in_preferences=has_person_in_preferences,
            power=power)

        for social_connection_type, connected_person_id in persons_storage.social_connections.get_person_connections(
                person):
            connected_person = persons_storage.persons[connected_person_id]

            if social_connection_type.is_PARTNER:
                connected_power = power * person.attrs.social_relations_partners_power_modifier
            else:
                connected_power = -power * person.attrs.social_relations_concurrents_power_modifier

            connected_person.cmd_change_power(
                hero_id=hero.id,
                has_place_in_preferences=hero.preferences.
                has_place_in_preferences(connected_person.place),
                has_person_in_preferences=has_person_in_preferences,
                power=connected_power)

        return power
示例#7
0
    def modify_person_power(self, power, person):
        power += (1 if power > 0 else -1) * self.current_info.power_bonus

        person_uid = uids.person(person.id)
        has_profession_marker = [
            marker
            for marker in self.knowledge_base.filter(facts.ProfessionMarker)
            if marker.person == person_uid
        ]

        if has_profession_marker:
            power /= len(PERSON_TYPE.records)

        return power
示例#8
0
    def _give_person_power(self, hero, person, power):
        power = self.get_current_power(power)

        if power > 0:
            hero.places_history.add_place(person.place_id, value=person.attrs.places_help_amount)

        if not hero.can_change_person_power(person):
            return 0

        power = hero.modify_politics_power(power, person=person)

        power += (1 if power > 0 else -1) * self.current_info.power_bonus

        person_uid = uids.person(person.id)
        has_profession_marker = [
            marker for marker in self.knowledge_base.filter(facts.ProfessionMarker) if marker.person == person_uid
        ]

        if has_profession_marker:
            power /= len(PERSON_TYPE.records)

        has_person_in_preferences = hero.preferences.has_person_in_preferences(person)

        person.cmd_change_power(
            hero_id=hero.id,
            has_place_in_preferences=hero.preferences.has_place_in_preferences(person.place),
            has_person_in_preferences=has_person_in_preferences,
            power=power,
        )

        for social_connection_type, connected_person_id in persons_storage.social_connections.get_person_connections(
            person
        ):
            connected_person = persons_storage.persons[connected_person_id]

            if social_connection_type.is_PARTNER:
                connected_power = power * person.attrs.social_relations_partners_power_modifier
            else:
                connected_power = -power * person.attrs.social_relations_concurrents_power_modifier

            connected_person.cmd_change_power(
                hero_id=hero.id,
                has_place_in_preferences=hero.preferences.has_place_in_preferences(connected_person.place),
                has_person_in_preferences=has_person_in_preferences,
                power=connected_power,
            )

        return power
示例#9
0
    def _give_person_power(self, hero, person, power):

        power = self._give_power(hero, person.place, power)

        power, positive_bonus, negative_bonus = hero.modify_politics_power(power, person=person)

        person_uid = uids.person(person.id)
        has_profession_marker = [marker for marker in self.knowledge_base.filter(facts.ProfessionMarker) if marker.person == person_uid]
        if has_profession_marker:
            power /= len(PERSON_TYPE.records)
            positive_bonus /= len(PERSON_TYPE.records)
            negative_bonus /= len(PERSON_TYPE.records)

        if not hero.can_change_person_power(person):
            return 0

        person.cmd_change_power(power, positive_bonus, negative_bonus)

        return power
示例#10
0
文件: logic.py 项目: Alkalit/the-tale
def get_knowledge_base(hero_info, without_restrictions=False): # pylint: disable=R0912

    kb = KnowledgeBase()

    hero_uid = uids.hero(hero_info.id)

    kb += facts.Hero(uid=hero_uid, externals={'id': hero_info.id})

    setup_places(kb, hero_info)
    setup_persons(kb, hero_info)
    setup_preferences(kb, hero_info)
    setup_social_connections(kb)

    if not without_restrictions:

        for person in persons_storage.persons_storage.filter(state=PERSON_STATE.IN_GAME):
            if person.place.id == hero_info.position_place_id and person.id in hero_info.interfered_persons:
                kb += facts.NotFirstInitiator(person=uids.person(person.id))

    kb.validate_consistency(WORLD_RESTRICTIONS)

    kb += [facts.UpgradeEquipmentCost(money=QuestPrototype.upgrade_equipment_cost(hero_info))]

    return kb
示例#11
0
    def _give_person_power(self, hero, person, power):

        power = self._give_power(hero, person.place, power)

        power, positive_bonus, negative_bonus = hero.modify_politics_power(
            power, person=person)

        person_uid = uids.person(person.id)
        has_profession_marker = [
            marker
            for marker in self.knowledge_base.filter(facts.ProfessionMarker)
            if marker.person == person_uid
        ]
        if has_profession_marker:
            power /= len(PERSON_TYPE.records)
            positive_bonus /= len(PERSON_TYPE.records)
            negative_bonus /= len(PERSON_TYPE.records)

        if not hero.can_change_person_power(person):
            return 0

        person.cmd_change_power(power, positive_bonus, negative_bonus)

        return power
示例#12
0
    def test_social_connections(self):
        persons_1 = self.place_1.persons
        persons_2 = self.place_2.persons
        persons_3 = self.place_3.persons

        persons_logic.create_social_connection(persons_relations.SOCIAL_CONNECTION_TYPE.random(), persons_1[0], persons_2[0])
        persons_logic.create_social_connection(persons_relations.SOCIAL_CONNECTION_TYPE.random(), persons_1[1], persons_3[0])
        persons_logic.create_social_connection(persons_relations.SOCIAL_CONNECTION_TYPE.random(), persons_2[0], persons_3[0])
        persons_logic.create_social_connection(persons_relations.SOCIAL_CONNECTION_TYPE.random(), persons_2[1], persons_3[1])

        self.hero.position.set_place(self.place_1)

        logic.fill_places(self.knowledge_base, self.get_hero_info(), waymarks_storage.look_for_road(self.place_1, self.place_2).length)
        logic.setup_persons(self.knowledge_base, self.get_hero_info())
        logic.setup_social_connections(self.knowledge_base)

        expected_connections = []

        for person in persons_storage.persons.all():
            if person.place_id == self.place_3.id:
                continue
            for connection_type, connected_person_id in persons_storage.social_connections.get_person_connections(person):
                connected_person = persons_storage.persons[connected_person_id]
                if connected_person.place_id == self.place_3.id:
                    continue
                expected_connections.append(logic.fact_social_connection(connection_type, uids.person(person.id), uids.person(connected_person.id)))

        self.check_facts(places=[logic.fact_place(self.place_1), logic.fact_place(self.place_2)],
                         persons=[logic.fact_person(person) for person in persons_storage.persons.all() if person.place_id != self.place_3.id],
                         locations=[logic.fact_located_in(person) for person in persons_storage.persons.all() if person.place_id != self.place_3.id],
                         social_connections=expected_connections)
示例#13
0
文件: logic.py 项目: Alkalit/the-tale
def fact_located_in(person):
    return facts.LocatedIn(object=uids.person(person.id), place=uids.place(person.place.id))
示例#14
0
文件: logic.py 项目: Alkalit/the-tale
def fact_person(person):
    return facts.Person(uid=uids.person(person.id),
                        profession=person.type.quest_profession,
                        externals={'id': person.id})
示例#15
0
def fact_located_in(person):
    return facts.LocatedIn(object=uids.person(person.id),
                           place=uids.place(person.place.id))
示例#16
0
def fact_person(person):
    return facts.Person(uid=uids.person(person.id),
                        profession=person.type.quest_profession,
                        externals={'id': person.id})
示例#17
0
    def test_social_connections(self):
        persons_logic.sync_social_connections()

        self.hero.position.set_place(self.place_1)

        logic.fill_places(self.knowledge_base, self.get_hero_info(), waymarks_storage.look_for_road(self.place_1, self.place_2).length)
        logic.setup_persons(self.knowledge_base, self.get_hero_info())
        logic.setup_social_connections(self.knowledge_base)

        expected_connections = []

        for person in persons_storage.persons.all():
            if person.place_id == self.place_3.id:
                continue
            for connection_type, connected_person_id in persons_storage.social_connections.get_person_connections(person):
                connected_person = persons_storage.persons[connected_person_id]
                if connected_person.place_id == self.place_3.id:
                    continue
                expected_connections.append(logic.fact_social_connection(connection_type, uids.person(person.id), uids.person(connected_person.id)))

        self.check_facts(places=[logic.fact_place(self.place_1), logic.fact_place(self.place_2)],
                         persons=[logic.fact_person(person) for person in persons_storage.persons.all() if person.place_id != self.place_3.id],
                         locations=[logic.fact_located_in(person) for person in persons_storage.persons.all() if person.place_id != self.place_3.id],
                         social_connections=expected_connections)