Example #1
0
 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))
Example #2
0
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}
Example #3
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}
Example #4
0
        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']))
Example #5
0
        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)
Example #6
0
    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,
Example #7
0
            'Проект Мастера {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
        }
    }