Ejemplo n.º 1
0
class EditKitForm(forms.Form):

    collection = fields.ChoiceField(label='Коллекция')

    caption = fields.CharField(label='Название',
                               max_length=KitPrototype.CAPTION_MAX_LENGTH,
                               min_length=1)

    description = bbcode.BBField(
        label='Описание',
        min_length=1,
        max_length=KitPrototype.DESCRIPTION_MAX_LENGTH)

    def __init__(self, *args, **kwargs):
        super(EditKitForm, self).__init__(*args, **kwargs)
        self.fields[
            'collection'].choices = collections_storage.get_form_choices()

    def clean_collection(self):
        collection_id = self.cleaned_data['collection']
        collection = collections_storage[int(collection_id)]

        if collection is None:
            raise django_forms.ValidationError('Коллекция не найдена')

        return collection
Ejemplo n.º 2
0
class CompanionRecordForm(forms.Form):

    name = WordField(word_type=utg_relations.WORD_TYPE.NOUN, label=u'Название')

    max_health = fields.IntegerField(label=u'здоровье',
                                     min_value=c.COMPANIONS_MIN_HEALTH,
                                     max_value=c.COMPANIONS_MAX_HEALTH)

    type = fields.RelationField(label=u'тип', relation=relations.TYPE)
    dedication = fields.RelationField(label=u'самоотверженность',
                                      relation=relations.DEDICATION)
    archetype = fields.RelationField(label=u'архетип',
                                     relation=game_relations.ARCHETYPE)
    mode = fields.RelationField(label=u'режим появления в игре',
                                relation=relations.MODE)

    abilities = abilities_forms.AbilitiesField(label=u'', required=False)

    description = bbcode.BBField(label=u'Описание', required=False)

    @classmethod
    def get_initials(cls, companion):
        return {
            'description': companion.description,
            'max_health': companion.max_health,
            'type': companion.type,
            'dedication': companion.dedication,
            'archetype': companion.archetype,
            'mode': companion.mode,
            'abilities': companion.abilities,
            'name': companion.utg_name
        }
Ejemplo n.º 3
0
class NewAchievementForm(forms.Form):

    approved = fields.BooleanField(label=u'Одобрена', required=False)

    order = fields.IntegerField()

    group = fields.TypedChoiceField(label=u'Группа', choices=sorted(ACHIEVEMENT_GROUP.choices(), key=lambda g: g[1]), coerce=ACHIEVEMENT_GROUP.get_from_name)
    type = fields.TypedChoiceField(label=u'Тип', choices=sorted(ACHIEVEMENT_TYPE.choices(), key=lambda g: g[1]), coerce=ACHIEVEMENT_TYPE.get_from_name)

    caption = fields.CharField(label=u'Название', max_length=AchievementPrototype.CAPTION_MAX_LENGTH, min_length=1)

    description = bbcode.BBField(label=u'Описание', min_length=1, max_length=AchievementPrototype.DESCRIPTION_MAX_LENGTH)

    barrier = fields.IntegerField(label=u'Барьер')

    points = fields.IntegerField(label=u'Очки')

    item_1 = fields.ChoiceField(label=u'награда 1', choices=[], required=False)
    item_2 = fields.ChoiceField(label=u'награда 2', choices=[], required=False)
    item_3 = fields.ChoiceField(label=u'награда 3', choices=[], required=False)

    def __init__(self, *args, **kwargs):
        super(NewAchievementForm, self).__init__(*args, **kwargs)
        self.fields['item_1'].choices = [('', u'-----')] + items_storage.form_choices()
        self.fields['item_2'].choices = [('', u'-----')] + items_storage.form_choices()
        self.fields['item_3'].choices = [('', u'-----')] + items_storage.form_choices()

    clean_item_1 = create_clean_item_method(1)
    clean_item_2 = create_clean_item_method(2)
    clean_item_3 = create_clean_item_method(3)
Ejemplo n.º 4
0
class BaseUserForm(forms.Form):
    RATIONALE_MIN_LENGTH = 250 if not project_settings.TESTS_RUNNING else 0

    caption = fields.CharField(label='Название записи', max_length=Bill.CAPTION_MAX_LENGTH, min_length=Bill.CAPTION_MIN_LENGTH)
    rationale = bbcode.BBField(label='', min_length=RATIONALE_MIN_LENGTH)

    chronicle_on_accepted = fields.TextField(label='Текст летописи при принятии', widget=Textarea(attrs={'rows': 2}),
                                             min_length=bills_settings.CHRONICLE_MIN_LENGTH, max_length=bills_settings.CHRONICLE_MAX_LENGTH)
Ejemplo n.º 5
0
class BaseForm(BaseUserForm):
    place = fields.ChoiceField(label='Город')
    new_description = bbcode.BBField(
        label='Новое описание',
        max_length=places_conf.settings.MAX_DESCRIPTION_LENGTH)

    def __init__(self, *args, **kwargs):
        super(BaseForm, self).__init__(*args, **kwargs)
        self.fields['place'].choices = places_storage.places.get_choices()
Ejemplo n.º 6
0
class EditCollectionForm(forms.Form):

    caption = fields.CharField(
        label='Название',
        max_length=CollectionPrototype.CAPTION_MAX_LENGTH,
        min_length=1)

    description = bbcode.BBField(
        label='Описание',
        min_length=1,
        max_length=CollectionPrototype.DESCRIPTION_MAX_LENGTH)
Ejemplo n.º 7
0
class SettingsForm(forms.Form):
    personal_messages_subscription = fields.BooleanField(
        required=False, label='получать письма о новых личных сообщениях')

    news_subscription = fields.BooleanField(required=False,
                                            label='получать письма о новостях')

    description = bbcode.BBField(
        required=False,
        label='Несколько слов о Вас, для страницы Вашего аккаунта',
        max_length=conf.accounts_settings.MAX_ACCOUNT_DESCRIPTION_LENGTH)
Ejemplo n.º 8
0
class ClanForm(forms.Form):

    name = fields.CharField(label='Название',
                            max_length=Clan.MAX_NAME_LENGTH,
                            min_length=Clan.MIN_NAME_LENGTH)
    abbr = fields.CharField(label='Аббревиатура (до %d символов)' %
                            Clan.MAX_ABBR_LENGTH,
                            max_length=Clan.MAX_ABBR_LENGTH,
                            min_length=Clan.MIN_ABBR_LENGTH)
    motto = fields.CharField(label='Девиз', max_length=Clan.MAX_MOTTO_LENGTH)
    description = bbcode.BBField(label='Описание',
                                 max_length=Clan.MAX_DESCRIPTION_LENGTH)
Ejemplo n.º 9
0
class CompanionRecordForm(forms.Form):

    name = WordField(word_type=utg_relations.WORD_TYPE.NOUN, label='Название')

    max_health = fields.IntegerField(label='здоровье',
                                     min_value=c.COMPANIONS_MIN_HEALTH,
                                     max_value=c.COMPANIONS_MAX_HEALTH)

    type = fields.RelationField(label='тип',
                                relation=game_relations.BEING_TYPE)
    dedication = fields.RelationField(label='самоотверженность',
                                      relation=relations.DEDICATION)
    archetype = fields.RelationField(label='архетип',
                                     relation=game_relations.ARCHETYPE)
    mode = fields.RelationField(label='режим появления в игре',
                                relation=relations.MODE)

    communication_verbal = fields.RelationField(
        label='вербальное общение',
        relation=game_relations.COMMUNICATION_VERBAL)
    communication_gestures = fields.RelationField(
        label='невербальное общение',
        relation=game_relations.COMMUNICATION_GESTURES)
    communication_telepathic = fields.RelationField(
        label='телепатия', relation=game_relations.COMMUNICATION_TELEPATHIC)

    intellect_level = fields.RelationField(
        label='уровень интеллекта', relation=game_relations.INTELLECT_LEVEL)

    abilities = abilities_forms.AbilitiesField(label='', required=False)

    description = bbcode.BBField(label='Описание', required=False)

    @classmethod
    def get_initials(cls, companion):
        return {
            'description': companion.description,
            'max_health': companion.max_health,
            'type': companion.type,
            'dedication': companion.dedication,
            'archetype': companion.archetype,
            'mode': companion.mode,
            'abilities': companion.abilities,
            'name': companion.utg_name,
            'communication_verbal': companion.communication_verbal,
            'communication_gestures': companion.communication_gestures,
            'communication_telepathic': companion.communication_telepathic,
            'intellect_level': companion.intellect_level
        }
Ejemplo n.º 10
0
class SettingsForm(forms.Form):
    personal_messages_subscription = fields.BooleanField(required=False,
                                                         label='получать письма о новых личных сообщениях')

    news_subscription = fields.BooleanField(required=False,
                                            label='получать письма о новостях')

    description = bbcode.BBField(required=False, label='Несколько слов о Вас, для страницы Вашего аккаунта', max_length=conf.accounts_settings.MAX_ACCOUNT_DESCRIPTION_LENGTH)

    gender = fields.TypedChoiceField(required=True,
                                     label='Пол (необходим для корректного создания фраз, в которых упоминается игрок)',
                                     choices=((game_relations.GENDER.MASCULINE, game_relations.GENDER.MASCULINE.text),
                                              (game_relations.GENDER.FEMININE, game_relations.GENDER.FEMININE.text)),
                                     coerce=game_relations.GENDER.get_from_name,
                                     initial=game_relations.GENDER.MASCULINE)
Ejemplo n.º 11
0
class EditItemForm(forms.Form):

    kit = fields.ChoiceField(label='Набор')

    caption = fields.CharField(label='Название',
                               max_length=ItemPrototype.CAPTION_MAX_LENGTH,
                               min_length=1)

    text = bbcode.BBField(label='Текст', min_length=1)

    def __init__(self, *args, **kwargs):
        super(EditItemForm, self).__init__(*args, **kwargs)
        self.fields['kit'].choices = kits_storage.get_form_choices()

    def clean_kit(self):
        kit_id = self.cleaned_data['kit']
        kit = kits_storage[int(kit_id)]

        if kit is None:
            raise django_forms.ValidationError('Колекция не найдена')

        return kit
Ejemplo n.º 12
0
class PostForm(forms.Form):
    caption = fields.CharField(label=u'Название',
                               max_length=models.Post.CAPTION_MAX_LENGTH,
                               min_length=models.Post.CAPTION_MIN_LENGTH)
    text = bbcode.BBField(label=u'Текст',
                          min_length=conf.settings.MIN_TEXT_LENGTH)

    meta_objects = fields.CharField(label=u'Текст рассказывает о',
                                    required=False)

    def clean_meta_objects(self):
        data = self.cleaned_data.get('meta_objects', '')

        objects = []

        slugs = set()

        for slug in data.split():
            slug = slug.strip()

            if slug in slugs:
                raise ValidationError(u'Повторяющийся дентификатор: %s' % slug)

            slugs.add(slug)

            try:
                objects.append(meta_relations_logic.get_object_by_uid(slug))
            except (meta_relations_exceptions.WrongTypeError,
                    meta_relations_exceptions.WrongObjectError,
                    meta_relations_exceptions.WrongUIDFormatError):
                raise ValidationError(u'Неверный идентификатор: %s' % slug)

        if len(objects) > conf.settings.IS_ABOUT_MAXIMUM:
            raise ValidationError(
                u'Слишком много связей, должно быть не более %d' %
                conf.settings.IS_ABOUT_MAXIMUM)

        return objects
Ejemplo n.º 13
0
class MobRecordBaseForm(forms.Form):

    level = fields.IntegerField(label=u'минимальный уровень')

    name = WordField(word_type=utg_relations.WORD_TYPE.NOUN, label=u'Название')

    type = fields.TypedChoiceField(label=u'тип',
                                   choices=MOB_TYPE_CHOICES,
                                   coerce=MOB_TYPE.get_from_name)
    archetype = fields.TypedChoiceField(
        label=u'тип',
        choices=game_relations.ARCHETYPE.choices(),
        coerce=game_relations.ARCHETYPE.get_from_name)

    global_action_probability = fields.FloatField(
        label=
        u'вероятность встретить монстра, если идёт его набег (от 0 до 1, 0 — нет набега)'
    )

    terrains = fields.TypedMultipleChoiceField(label=u'места обитания',
                                               choices=TERRAIN.choices(),
                                               coerce=TERRAIN.get_from_name)

    abilities = fields.MultipleChoiceField(label=u'способности',
                                           choices=ABILITY_CHOICES)

    description = bbcode.BBField(label=u'Описание', required=False)

    def clean_abilities(self):
        abilities_ids = self.cleaned_data['abilities']

        if HIT.get_id() not in abilities_ids:
            abilities_ids.append(HIT.get_id())

        if not abilities_ids:
            raise ValidationError(u'не указаны способности монстра')

        for ability_id in abilities_ids:
            if ability_id not in ABILITY_CHOICES_DICT:
                raise ValidationError(
                    u'неверный идентификатор способности монстра')

        return frozenset(abilities_ids)

    def clean_terrains(self):
        terrains = self.cleaned_data['terrains']

        if not terrains:
            raise ValidationError(u'не указаны места обитания монстра')

        return frozenset(terrains)

    @classmethod
    def get_initials(cls, mob):
        return {
            'description': mob.description,
            'type': mob.type,
            'name': mob.utg_name,
            'archetype': mob.archetype,
            'level': mob.level,
            'global_action_probability': mob.global_action_probability,
            'terrains': mob.terrains,
            'abilities': mob.abilities
        }
Ejemplo n.º 14
0
class MobRecordBaseForm(forms.Form):

    level = fields.IntegerField(label='минимальный уровень')

    name = WordField(word_type=utg_relations.WORD_TYPE.NOUN, label='Название')

    type = fields.TypedChoiceField(label='тип',
                                   choices=MOB_TYPE_CHOICES,
                                   coerce=beings_relations.TYPE.get_from_name)
    archetype = fields.TypedChoiceField(
        label='тип',
        choices=game_relations.ARCHETYPE.choices(),
        coerce=game_relations.ARCHETYPE.get_from_name)

    global_action_probability = fields.FloatField(
        label=
        'вероятность встретить монстра, если идёт его набег (от 0 до 1, 0 — нет набега)'
    )

    terrains = fields.TypedMultipleChoiceField(label='места обитания',
                                               choices=TERRAIN.choices(),
                                               coerce=TERRAIN.get_from_name)

    abilities = fields.MultipleChoiceField(label='способности',
                                           choices=ABILITY_CHOICES)

    description = bbcode.BBField(label='Описание', required=False)

    is_mercenary = fields.BooleanField(label='может быть наёмником',
                                       required=False)
    is_eatable = fields.BooleanField(label='съедобный', required=False)

    communication_verbal = fields.RelationField(
        label='вербальное общение',
        relation=beings_relations.COMMUNICATION_VERBAL)
    communication_gestures = fields.RelationField(
        label='невербальное общение',
        relation=beings_relations.COMMUNICATION_GESTURES)
    communication_telepathic = fields.RelationField(
        label='телепатия', relation=beings_relations.COMMUNICATION_TELEPATHIC)

    intellect_level = fields.RelationField(
        label='уровень интеллекта', relation=beings_relations.INTELLECT_LEVEL)

    structure = fields.RelationField(label='структура',
                                     relation=beings_relations.STRUCTURE)
    features = fields.TypedMultipleChoiceField(
        label='особенности',
        choices=beings_relations.FEATURE.choices(),
        coerce=beings_relations.FEATURE.get_from_name)
    movement = fields.RelationField(label='способ передвижения',
                                    relation=beings_relations.MOVEMENT)
    body = fields.RelationField(label='телосложение',
                                relation=beings_relations.BODY)
    size = fields.RelationField(label='размер', relation=beings_relations.SIZE)

    weapon_1 = fields.RelationField(
        label='оружие 1', relation=artifacts_relations.STANDARD_WEAPON)
    material_1 = fields.RelationField(label='материал оружия 1',
                                      relation=tt_artifacts_relations.MATERIAL)
    power_type_1 = fields.RelationField(
        label='тип силы оружия 1',
        relation=artifacts_relations.ARTIFACT_POWER_TYPE)

    weapon_2 = fields.RelationField(
        label='оружие 2',
        required=False,
        relation=artifacts_relations.STANDARD_WEAPON)
    material_2 = fields.RelationField(label='материал оружия 2',
                                      required=False,
                                      relation=tt_artifacts_relations.MATERIAL)
    power_type_2 = fields.RelationField(
        label='тип силы оружия 2',
        required=False,
        relation=artifacts_relations.ARTIFACT_POWER_TYPE)

    weapon_3 = fields.RelationField(
        label='оружие 3',
        required=False,
        relation=artifacts_relations.STANDARD_WEAPON)
    material_3 = fields.RelationField(label='материал оружия 3',
                                      required=False,
                                      relation=tt_artifacts_relations.MATERIAL)
    power_type_3 = fields.RelationField(
        label='тип силы оружия 3',
        required=False,
        relation=artifacts_relations.ARTIFACT_POWER_TYPE)

    def clean_abilities(self):
        abilities_ids = self.cleaned_data['abilities']

        if HIT.get_id() not in abilities_ids:
            abilities_ids.append(HIT.get_id())

        if not abilities_ids:
            raise ValidationError('не указаны способности монстра')

        for ability_id in abilities_ids:
            if ability_id not in ABILITY_CHOICES_DICT:
                raise ValidationError(
                    'неверный идентификатор способности монстра')

        return frozenset(abilities_ids)

    def clean_terrains(self):
        terrains = self.cleaned_data['terrains']

        if not terrains:
            raise ValidationError('не указаны места обитания монстра')

        return frozenset(terrains)

    def clean_features(self):
        features = self.cleaned_data['features']

        if not features:
            return frozenset()

        return frozenset(features)

    def get_weapons(self):
        weapons = []

        if self.c.weapon_1 and self.c.material_1 and self.c.power_type_1:
            weapons.append(
                artifacts_objects.Weapon(weapon=self.c.weapon_1,
                                         material=self.c.material_1,
                                         power_type=self.c.power_type_1))

        if self.c.weapon_2 and self.c.material_2 and self.c.power_type_2:
            weapons.append(
                artifacts_objects.Weapon(weapon=self.c.weapon_2,
                                         material=self.c.material_2,
                                         power_type=self.c.power_type_2))

        if self.c.weapon_3 and self.c.material_3 and self.c.power_type_3:
            weapons.append(
                artifacts_objects.Weapon(weapon=self.c.weapon_3,
                                         material=self.c.material_3,
                                         power_type=self.c.power_type_3))

        return weapons

    @classmethod
    def get_initials(cls, mob):
        initials = {
            'description': mob.description,
            'type': mob.type,
            'name': mob.utg_name,
            'archetype': mob.archetype,
            'level': mob.level,
            'global_action_probability': mob.global_action_probability,
            'terrains': mob.terrains,
            'abilities': mob.abilities,
            'communication_verbal': mob.communication_verbal,
            'communication_gestures': mob.communication_gestures,
            'communication_telepathic': mob.communication_telepathic,
            'intellect_level': mob.intellect_level,
            'structure': mob.structure,
            'features': list(mob.features),
            'movement': mob.movement,
            'body': mob.body,
            'size': mob.size,
            'is_mercenary': mob.is_mercenary,
            'is_eatable': mob.is_eatable
        }

        for i, weapon in enumerate(mob.weapons, start=1):
            initials['weapon_{}'.format(i)] = weapon.type
            initials['material_{}'.format(i)] = weapon.material
            initials['power_type_{}'.format(i)] = weapon.power_type

        return initials
Ejemplo n.º 15
0
class CompanionRecordForm(forms.Form):

    name = WordField(word_type=utg_relations.WORD_TYPE.NOUN, label='Название')

    max_health = fields.IntegerField(label='здоровье',
                                     min_value=c.COMPANIONS_MIN_HEALTH,
                                     max_value=c.COMPANIONS_MAX_HEALTH)

    type = fields.RelationField(label='тип', relation=beings_relations.TYPE)
    dedication = fields.RelationField(label='самоотверженность',
                                      relation=relations.DEDICATION)
    archetype = fields.RelationField(label='архетип',
                                     relation=game_relations.ARCHETYPE)
    mode = fields.RelationField(label='режим появления в игре',
                                relation=relations.MODE)

    communication_verbal = fields.RelationField(
        label='вербальное общение',
        relation=beings_relations.COMMUNICATION_VERBAL)
    communication_gestures = fields.RelationField(
        label='невербальное общение',
        relation=beings_relations.COMMUNICATION_GESTURES)
    communication_telepathic = fields.RelationField(
        label='телепатия', relation=beings_relations.COMMUNICATION_TELEPATHIC)

    intellect_level = fields.RelationField(
        label='уровень интеллекта', relation=beings_relations.INTELLECT_LEVEL)

    abilities = abilities_forms.AbilitiesField(label='', required=False)

    structure = fields.RelationField(label='структура',
                                     relation=beings_relations.STRUCTURE)
    features = fields.TypedMultipleChoiceField(
        label='особенности',
        choices=beings_relations.FEATURE.choices(),
        coerce=beings_relations.FEATURE.get_from_name)
    movement = fields.RelationField(label='способ передвижения',
                                    relation=beings_relations.MOVEMENT)
    body = fields.RelationField(label='телосложение',
                                relation=beings_relations.BODY)
    size = fields.RelationField(label='размер', relation=beings_relations.SIZE)

    weapon_1 = fields.RelationField(
        label='оружие 1', relation=artifacts_relations.STANDARD_WEAPON)
    material_1 = fields.RelationField(label='материал оружия 1',
                                      relation=tt_artifacts_relations.MATERIAL)
    power_type_1 = fields.RelationField(
        label='тип силы оружия 1',
        relation=artifacts_relations.ARTIFACT_POWER_TYPE)

    weapon_2 = fields.RelationField(
        label='оружие 2',
        required=False,
        relation=artifacts_relations.STANDARD_WEAPON)
    material_2 = fields.RelationField(label='материал оружия 2',
                                      required=False,
                                      relation=tt_artifacts_relations.MATERIAL)
    power_type_2 = fields.RelationField(
        label='тип силы оружия 2',
        required=False,
        relation=artifacts_relations.ARTIFACT_POWER_TYPE)

    weapon_3 = fields.RelationField(
        label='оружие 3',
        required=False,
        relation=artifacts_relations.STANDARD_WEAPON)
    material_3 = fields.RelationField(label='материал оружия 3',
                                      required=False,
                                      relation=tt_artifacts_relations.MATERIAL)
    power_type_3 = fields.RelationField(
        label='тип силы оружия 3',
        required=False,
        relation=artifacts_relations.ARTIFACT_POWER_TYPE)

    description = bbcode.BBField(label='Описание', required=False)

    def clean_features(self):
        features = self.cleaned_data['features']

        if not features:
            return frozenset()

        return frozenset(features)

    def get_weapons(self):
        weapons = []

        if self.c.weapon_1 and self.c.material_1 and self.c.power_type_1:
            weapons.append(
                artifacts_objects.Weapon(weapon=self.c.weapon_1,
                                         material=self.c.material_1,
                                         power_type=self.c.power_type_1))

        if self.c.weapon_2 and self.c.material_2 and self.c.power_type_2:
            weapons.append(
                artifacts_objects.Weapon(weapon=self.c.weapon_2,
                                         material=self.c.material_2,
                                         power_type=self.c.power_type_2))

        if self.c.weapon_3 and self.c.material_3 and self.c.power_type_3:
            weapons.append(
                artifacts_objects.Weapon(weapon=self.c.weapon_3,
                                         material=self.c.material_3,
                                         power_type=self.c.power_type_3))

        return weapons

    @classmethod
    def get_initials(cls, companion):
        initials = {
            'description': companion.description,
            'max_health': companion.max_health,
            'type': companion.type,
            'dedication': companion.dedication,
            'archetype': companion.archetype,
            'mode': companion.mode,
            'abilities': companion.abilities,
            'name': companion.utg_name,
            'communication_verbal': companion.communication_verbal,
            'communication_gestures': companion.communication_gestures,
            'communication_telepathic': companion.communication_telepathic,
            'intellect_level': companion.intellect_level,
            'structure': companion.structure,
            'features': list(companion.features),
            'movement': companion.movement,
            'body': companion.body,
            'size': companion.size
        }

        for i, weapon in enumerate(companion.weapons, start=1):
            initials['weapon_{}'.format(i)] = weapon.type
            initials['material_{}'.format(i)] = weapon.material
            initials['power_type_{}'.format(i)] = weapon.power_type

        return initials
Ejemplo n.º 16
0
class MobRecordBaseForm(forms.Form):

    level = fields.IntegerField(label='минимальный уровень')

    name = WordField(word_type=utg_relations.WORD_TYPE.NOUN, label='Название')

    type = fields.TypedChoiceField(
        label='тип',
        choices=MOB_TYPE_CHOICES,
        coerce=game_relations.BEING_TYPE.get_from_name)
    archetype = fields.TypedChoiceField(
        label='тип',
        choices=game_relations.ARCHETYPE.choices(),
        coerce=game_relations.ARCHETYPE.get_from_name)

    global_action_probability = fields.FloatField(
        label=
        'вероятность встретить монстра, если идёт его набег (от 0 до 1, 0 — нет набега)'
    )

    terrains = fields.TypedMultipleChoiceField(label='места обитания',
                                               choices=TERRAIN.choices(),
                                               coerce=TERRAIN.get_from_name)

    abilities = fields.MultipleChoiceField(label='способности',
                                           choices=ABILITY_CHOICES)

    description = bbcode.BBField(label='Описание', required=False)

    is_mercenary = fields.BooleanField(label='может быть наёмником',
                                       required=False)
    is_eatable = fields.BooleanField(label='съедобный', required=False)

    communication_verbal = fields.RelationField(
        label='вербальное общение',
        relation=game_relations.COMMUNICATION_VERBAL)
    communication_gestures = fields.RelationField(
        label='невербальное общение',
        relation=game_relations.COMMUNICATION_GESTURES)
    communication_telepathic = fields.RelationField(
        label='телепатия', relation=game_relations.COMMUNICATION_TELEPATHIC)

    intellect_level = fields.RelationField(
        label='уровень интеллекта', relation=game_relations.INTELLECT_LEVEL)

    def clean_abilities(self):
        abilities_ids = self.cleaned_data['abilities']

        if HIT.get_id() not in abilities_ids:
            abilities_ids.append(HIT.get_id())

        if not abilities_ids:
            raise ValidationError('не указаны способности монстра')

        for ability_id in abilities_ids:
            if ability_id not in ABILITY_CHOICES_DICT:
                raise ValidationError(
                    'неверный идентификатор способности монстра')

        return frozenset(abilities_ids)

    def clean_terrains(self):
        terrains = self.cleaned_data['terrains']

        if not terrains:
            raise ValidationError('не указаны места обитания монстра')

        return frozenset(terrains)

    @classmethod
    def get_initials(cls, mob):
        return {
            'description': mob.description,
            'type': mob.type,
            'name': mob.utg_name,
            'archetype': mob.archetype,
            'level': mob.level,
            'global_action_probability': mob.global_action_probability,
            'terrains': mob.terrains,
            'abilities': mob.abilities,
            'communication_verbal': mob.communication_verbal,
            'communication_gestures': mob.communication_gestures,
            'communication_telepathic': mob.communication_telepathic,
            'intellect_level': mob.intellect_level,
            'is_mercenary': mob.is_mercenary,
            'is_eatable': mob.is_eatable
        }
Ejemplo n.º 17
0
class NewMessageForm(RecipientsForm):

    text = bbcode.BBField(label=u'Сообщение')
Ejemplo n.º 18
0
class RequestForm(forms.Form):
    text = bbcode.BBField(label='Сообщение', initial=DEFAULT_TEXT)
Ejemplo n.º 19
0
class NewPostForm(forms.Form):

    text = bbcode.BBField(label=u'Сообщение', min_length=1)
Ejemplo n.º 20
0
class ArtifactRecordBaseForm(forms.Form):

    level = fields.IntegerField(label=u'минимальный уровень')

    name = WordField(word_type=utg_relations.WORD_TYPE.NOUN, label=u'Название')

    description = bbcode.BBField(label=u'Описание', required=False)

    type = fields.TypedChoiceField(
        label=u'тип',
        choices=relations.ARTIFACT_TYPE.choices(),
        coerce=relations.ARTIFACT_TYPE.get_from_name)
    power_type = fields.TypedChoiceField(
        label=u'тип силы',
        choices=relations.ARTIFACT_POWER_TYPE.choices(),
        coerce=relations.ARTIFACT_POWER_TYPE.get_from_name)

    rare_effect = fields.TypedChoiceField(
        label=u'редкий эффект',
        choices=EFFECT_CHOICES,
        coerce=relations.ARTIFACT_EFFECT.get_from_name)
    epic_effect = fields.TypedChoiceField(
        label=u'эпический эффект',
        choices=EFFECT_CHOICES,
        coerce=relations.ARTIFACT_EFFECT.get_from_name)

    special_effect = fields.TypedChoiceField(
        label=u'особое свойство',
        choices=EFFECT_CHOICES,
        coerce=relations.ARTIFACT_EFFECT.get_from_name)

    mob = fields.ChoiceField(label=u'Монстр', required=False)

    def __init__(self, *args, **kwargs):
        super(ArtifactRecordBaseForm, self).__init__(*args, **kwargs)
        self.fields['mob'].choices = [('', u'-------')] + [
            (mob.id, mob.name)
            for mob in sorted(mobs_storage.all(), key=lambda mob: mob.name)
        ]

    def clean_mob(self):
        mob = self.cleaned_data.get('mob')

        if mob:
            return mobs_storage[int(mob)]

        return None

    @classmethod
    def get_initials(cls, artifact):
        return {
            'level': artifact.level,
            'name': artifact.utg_name,
            'type': artifact.type,
            'power_type': artifact.power_type,
            'rare_effect': artifact.rare_effect,
            'epic_effect': artifact.epic_effect,
            'special_effect': artifact.special_effect,
            'description': artifact.description,
            'mob': artifact.mob.id if artifact.mob is not None else None
        }
Ejemplo n.º 21
0
class MembershipRequestForm(forms.Form):
    text = bbcode.BBField(label='Текст',
                          max_length=MembershipRequest.MAX_TEXT_LENGTH)