def test_static_values(self): self.assertEqual(self.job.ACTOR, 'person') self.assertTrue(self.job.ACTOR_TYPE.is_PERSON) self.assertTrue(self.job.POSITIVE_TARGET_TYPE.is_JOB_PERSON_POSITIVE) self.assertTrue(self.job.NEGATIVE_TARGET_TYPE.is_JOB_PERSON_NEGATIVE) self.assertEqual( self.job.NORMAL_POWER, f.normal_job_power( politic_power_conf.settings.PERSON_INNER_CIRCLE_SIZE))
class PersonJob(jobs_objects.Job): ACTOR = 'person' ACTOR_TYPE = tt_api_impacts.OBJECT_TYPE.PERSON POSITIVE_TARGET_TYPE = tt_api_impacts.OBJECT_TYPE.JOB_PERSON_POSITIVE NEGATIVE_TARGET_TYPE = tt_api_impacts.OBJECT_TYPE.JOB_PERSON_NEGATIVE NORMAL_POWER = f.normal_job_power(politic_power_conf.settings.PERSON_INNER_CIRCLE_SIZE) def load_power(self, actor_id): return politic_power_logic.get_job_power(person_id=actor_id) def load_inner_circle(self, actor_id): return politic_power_logic.get_inner_circle(person_id=actor_id) def get_job_power(self, actor_id): current_person = storage.persons[actor_id] return jobs_logic.job_power(power=politic_power_storage.persons.total_power_fraction(current_person.id), powers=[politic_power_storage.persons.total_power_fraction(person.id) for person in current_person.place.persons]) + current_person.attrs.job_power_bonus def get_project_name(self, actor_id): person = storage.persons[actor_id] name = person.utg_name.form(utg_words.Properties(utg_relations.CASE.GENITIVE)) return 'Проект Мастера {name}'.format(name=name) def get_objects(self, actor_id): person = storage.persons[actor_id] return {'person': person, 'place': person.place} def get_effects_priorities(self, actor_id): person = storage.persons[actor_id] effects_priorities = {} for effect in jobs_effects.EFFECT.records: effects_priorities[effect] = person.attrs.job_group_priority.get(effect.group, 0) if not effect.group.is_ON_PLACE: # 0.3 - примерное значение чуть выше средних показателей влияния мастера на базовые аттрибуты города # чтобы занятия для героев и для города имели примерно одинаковый приоритет # но даже 0.3 сдвигает приоритет в сторону геройских занятий effects_priorities[effect] += 0.3 for attribute in places_relations.ATTRIBUTE.records: effect_name = 'PLACE_{}'.format(attribute.name) effect = getattr(jobs_effects.EFFECT, effect_name, None) if effect: effects_priorities[effect] += person.economic_attributes[attribute] return {effect: effects_priorities[effect] for effect in jobs_effects.EFFECT.records if effects_priorities.get(effect, 0) > 0}
class PlaceJob(jobs_objects.Job): ACTOR = 'place' ACTOR_TYPE = tt_api_impacts.OBJECT_TYPE.PLACE POSITIVE_TARGET_TYPE = tt_api_impacts.OBJECT_TYPE.JOB_PLACE_POSITIVE NEGATIVE_TARGET_TYPE = tt_api_impacts.OBJECT_TYPE.JOB_PLACE_NEGATIVE # умножаем на 2, так как кажая остановка в городе, по сути, даёт влияние в 2-кратном размере # Город получит влияние и от задания, которое герой выполнил и от того, которое возьмёт NORMAL_POWER = f.normal_job_power( politic_power_conf.settings.PLACE_INNER_CIRCLE_SIZE) * 2 def load_power(self, actor_id): return politic_power_logic.get_job_power(place_id=actor_id) def load_inner_circle(self, actor_id): return politic_power_logic.get_inner_circle(place_id=actor_id) def get_job_power(self, actor_id): from the_tale.game.places import storage current_place = storage.places[actor_id] return jobs_logic.job_power( power=politic_power_storage.places.total_power_fraction( current_place.id), powers=[ politic_power_storage.places.total_power_fraction(place.id) for place in current_place.get_same_places() ]) def get_project_name(self, actor_id): from the_tale.game.places import storage name = storage.places[actor_id].utg_name.form( utg_words.Properties(utg_relations.CASE.GENITIVE)) return 'Проект города {name}'.format(name=name) def get_objects(self, actor_id): from the_tale.game.places import storage return {'person': None, 'place': storage.places[actor_id]} def get_effects_priorities(self, actor_id): return {effect: 1 for effect in jobs_effects.EFFECT.records}
power *= place.attrs.freedom super(PlacePoliticPower, self).change_power(owner=place, hero_id=hero_id, has_in_preferences=has_in_preferences, power=power) def job_effect_kwargs(self, place): return {'actor_type': 'place', 'actor_name': 'Проект города {name}'.format(name=place.utg_name.form(utg_words.Properties(utg_relations.CASE.GENITIVE))), 'person': None, 'place': place, 'positive_heroes': self.inner_positive_heroes, 'negative_heroes': self.inner_negative_heroes, 'job_power': place.get_job_power() } # умножаем на 2, так как кажая остановка в городе, по сути, даёт влияние в 2-кратном размере # Город получит влияние и от задания, которое герой выполнил и от того, которое возьмёт NORMAL_PLACE_JOB_POWER = f.normal_job_power(PlacePoliticPower.INNER_CIRCLE_SIZE) * 2 def load_place(place_id=None, place_model=None): try: if place_id is not None: place_model = models.Place.objects.get(id=place_id) elif place_model is None: return None except models.Place.DoesNotExist: return None data = s11n.from_json(place_model.data) if 'nearest_cells' in data: data['nearest_cells'] = list(map(tuple, data['nearest_cells']))
power *= place.attrs.freedom super(PlacePoliticPower, self).change_power(owner=place, hero_id=hero_id, has_in_preferences=has_in_preferences, power=power) def job_effect_kwargs(self, place): return {'actor_type': 'place', 'actor_name': 'Проект города {name}'.format(name=place.utg_name.form(utg_words.Properties(utg_relations.CASE.GENITIVE))), 'person': None, 'place': place, 'positive_heroes': self.inner_positive_heroes, 'negative_heroes': self.inner_negative_heroes, 'job_power': place.get_job_power() } # умножаем на 2, так как кажая остановка в городе, по сути, даёт влияние в 2-кратном размере # Город получит влияние и от задания, которое герой выполнил и от того, которое возьмёт NORMAL_PLACE_JOB_POWER = f.normal_job_power(PlacePoliticPower.INNER_CIRCLE_SIZE) * 2 def load_place(place_id=None, place_model=None): # TODO: get values instead model # TODO: check that load_hero everywhere called with correct arguments try: if place_id is not None: place_model = models.Place.objects.get(id=place_id) elif place_model is None: return None except models.Place.DoesNotExist: return None data = s11n.from_json(place_model.data)
def job_effect_kwargs(self, person): return { "actor_type": "person", "actor_name": "Проект Мастера {name}".format( name=person.utg_name.form(utg_words.Properties(utg_relations.CASE.GENITIVE)) ), "person": person, "place": person.place, "positive_heroes": self.inner_positive_heroes, "negative_heroes": self.inner_negative_heroes, "job_power": person.get_job_power(), } NORMAL_PERSON_JOB_POWER = f.normal_job_power(PersonPoliticPower.INNER_CIRCLE_SIZE) def save_person(person, new=False): data = { "name": person.utg_name.serialize(), "job": person.job.serialize(), "politic_power": person.politic_power.serialize(), "moved_at_turn": person.moved_at_turn, "attributes": person.attrs.serialize(), "personality": {"cosmetic": person.personality_cosmetic.value, "practical": person.personality_practical.value}, } arguments = { "place_id": person.place_id,
'Проект Мастера {name}'.format(name=person.utg_name.form( utg_words.Properties(utg_relations.CASE.GENITIVE))), 'person': person, 'place': person.place, 'positive_heroes': self.inner_positive_heroes, 'negative_heroes': self.inner_negative_heroes, 'job_power': person.get_job_power() } NORMAL_PERSON_JOB_POWER = f.normal_job_power( PersonPoliticPower.INNER_CIRCLE_SIZE) def save_person(person, new=False): data = { 'name': person.utg_name.serialize(), 'job': person.job.serialize(), 'politic_power': person.politic_power.serialize(), 'moved_at_turn': person.moved_at_turn, 'attributes': person.attrs.serialize(), 'personality': { 'cosmetic': person.personality_cosmetic.value, 'practical': person.personality_practical.value } }