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)
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
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
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
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)
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
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
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
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
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
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
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)
def fact_located_in(person): return facts.LocatedIn(object=uids.person(person.id), place=uids.place(person.place.id))
def fact_person(person): return facts.Person(uid=uids.person(person.id), profession=person.type.quest_profession, externals={'id': person.id})
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)