From 62b5f7b8151614c919e600b4dd4b2b6f7c6d19e7 Mon Sep 17 00:00:00 2001 From: Llloooggg Date: Sat, 19 Nov 2022 22:01:09 +0300 Subject: [PATCH] =?UTF-8?q?backend:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=B3=D0=B5=D0=BD=D0=B5=D1=80=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=B1=D0=B0=D0=B7=D0=BE=D0=B2=D1=8B=D1=85=20?= =?UTF-8?q?=D1=85=D0=B0=D1=80=D0=B0=D0=BA=D1=82=D0=B5=D1=80=D0=B8=D1=81?= =?UTF-8?q?=D1=82=D0=B8=D0=BA=20=D0=BF=D0=B5=D1=80=D1=81=D0=BE=D0=BD=D0=B0?= =?UTF-8?q?=D0=B6=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/migrations/versions/231e5697b63e_.py | 128 +++++++++++++++++++ backend/textsouls/models.py | 82 +++++++----- 2 files changed, 181 insertions(+), 29 deletions(-) create mode 100644 backend/migrations/versions/231e5697b63e_.py diff --git a/backend/migrations/versions/231e5697b63e_.py b/backend/migrations/versions/231e5697b63e_.py new file mode 100644 index 0000000..3a062db --- /dev/null +++ b/backend/migrations/versions/231e5697b63e_.py @@ -0,0 +1,128 @@ +"""empty message + +Revision ID: 231e5697b63e +Revises: 57b47e18fdab +Create Date: 2022-11-19 21:56:35.469495 + +""" +from alembic import op +import sqlalchemy as sa +from sqlalchemy.dialects import mysql + +# revision identifiers, used by Alembic. +revision = '231e5697b63e' +down_revision = '57b47e18fdab' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + with op.batch_alter_table('character_classes', schema=None) as batch_op: + batch_op.alter_column('endurance_koef', + existing_type=mysql.FLOAT(), + nullable=False) + batch_op.alter_column('strength_koef', + existing_type=mysql.FLOAT(), + nullable=False) + batch_op.alter_column('agility_koef', + existing_type=mysql.FLOAT(), + nullable=False) + batch_op.alter_column('defence_koef', + existing_type=mysql.FLOAT(), + nullable=False) + batch_op.alter_column('wisdom_koef', + existing_type=mysql.FLOAT(), + nullable=False) + + with op.batch_alter_table('character_races', schema=None) as batch_op: + batch_op.alter_column('endurance_koef', + existing_type=mysql.FLOAT(), + nullable=False) + batch_op.alter_column('strength_koef', + existing_type=mysql.FLOAT(), + nullable=False) + batch_op.alter_column('agility_koef', + existing_type=mysql.FLOAT(), + nullable=False) + batch_op.alter_column('defence_koef', + existing_type=mysql.FLOAT(), + nullable=False) + batch_op.alter_column('wisdom_koef', + existing_type=mysql.FLOAT(), + nullable=False) + + with op.batch_alter_table('characters', schema=None) as batch_op: + batch_op.alter_column('endurance_base', + existing_type=mysql.INTEGER(), + nullable=False) + batch_op.alter_column('strength_base', + existing_type=mysql.INTEGER(), + nullable=False) + batch_op.alter_column('agility_base', + existing_type=mysql.INTEGER(), + nullable=False) + batch_op.alter_column('defence_base', + existing_type=mysql.INTEGER(), + nullable=False) + batch_op.alter_column('wisdom_base', + existing_type=mysql.INTEGER(), + nullable=False) + + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + with op.batch_alter_table('characters', schema=None) as batch_op: + batch_op.alter_column('wisdom_base', + existing_type=mysql.INTEGER(), + nullable=True) + batch_op.alter_column('defence_base', + existing_type=mysql.INTEGER(), + nullable=True) + batch_op.alter_column('agility_base', + existing_type=mysql.INTEGER(), + nullable=True) + batch_op.alter_column('strength_base', + existing_type=mysql.INTEGER(), + nullable=True) + batch_op.alter_column('endurance_base', + existing_type=mysql.INTEGER(), + nullable=True) + + with op.batch_alter_table('character_races', schema=None) as batch_op: + batch_op.alter_column('wisdom_koef', + existing_type=mysql.FLOAT(), + nullable=True) + batch_op.alter_column('defence_koef', + existing_type=mysql.FLOAT(), + nullable=True) + batch_op.alter_column('agility_koef', + existing_type=mysql.FLOAT(), + nullable=True) + batch_op.alter_column('strength_koef', + existing_type=mysql.FLOAT(), + nullable=True) + batch_op.alter_column('endurance_koef', + existing_type=mysql.FLOAT(), + nullable=True) + + with op.batch_alter_table('character_classes', schema=None) as batch_op: + batch_op.alter_column('wisdom_koef', + existing_type=mysql.FLOAT(), + nullable=True) + batch_op.alter_column('defence_koef', + existing_type=mysql.FLOAT(), + nullable=True) + batch_op.alter_column('agility_koef', + existing_type=mysql.FLOAT(), + nullable=True) + batch_op.alter_column('strength_koef', + existing_type=mysql.FLOAT(), + nullable=True) + batch_op.alter_column('endurance_koef', + existing_type=mysql.FLOAT(), + nullable=True) + + # ### end Alembic commands ### diff --git a/backend/textsouls/models.py b/backend/textsouls/models.py index 8c07f39..14a5541 100644 --- a/backend/textsouls/models.py +++ b/backend/textsouls/models.py @@ -36,11 +36,11 @@ class CharacterRace(db.Model, SerializerMixin): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(255), nullable=True, unique=True) characters = db.relationship("Character", backref="race", lazy="dynamic") - endurance_koef = db.Column(db.Float(), nullable=True, unique=False) - strength_koef = db.Column(db.Float(), nullable=True, unique=False) - agility_koef = db.Column(db.Float(), nullable=True, unique=False) - defence_koef = db.Column(db.Float(), nullable=True, unique=False) - wisdom_koef = db.Column(db.Float(), nullable=True, unique=False) + endurance_koef = db.Column(db.Float(), nullable=False, unique=False) + strength_koef = db.Column(db.Float(), nullable=False, unique=False) + agility_koef = db.Column(db.Float(), nullable=False, unique=False) + defence_koef = db.Column(db.Float(), nullable=False, unique=False) + wisdom_koef = db.Column(db.Float(), nullable=False, unique=False) def __str__(self): return self.name @@ -55,11 +55,11 @@ class CharacterClass(db.Model, SerializerMixin): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(255), nullable=True, unique=True) characters = db.relationship("Character", backref="class", lazy="dynamic") - endurance_koef = db.Column(db.Float(), nullable=True, unique=False) - strength_koef = db.Column(db.Float(), nullable=True, unique=False) - agility_koef = db.Column(db.Float(), nullable=True, unique=False) - defence_koef = db.Column(db.Float(), nullable=True, unique=False) - wisdom_koef = db.Column(db.Float(), nullable=True, unique=False) + endurance_koef = db.Column(db.Float(), nullable=False, unique=False) + strength_koef = db.Column(db.Float(), nullable=False, unique=False) + agility_koef = db.Column(db.Float(), nullable=False, unique=False) + defence_koef = db.Column(db.Float(), nullable=False, unique=False) + wisdom_koef = db.Column(db.Float(), nullable=False, unique=False) def __str__(self): return self.name @@ -90,36 +90,60 @@ class Character(db.Model, SerializerMixin): created_on = db.Column( db.DateTime, nullable=False, default=datetime.datetime.now() ) + endurance_base = db.Column(db.Integer(), nullable=False, unique=False) + strength_base = db.Column(db.Integer(), nullable=False, unique=False) + agility_base = db.Column(db.Integer(), nullable=False, unique=False) + defence_base = db.Column(db.Integer(), nullable=False, unique=False) + wisdom_base = db.Column(db.Integer(), nullable=False, unique=False) - endurance_base = db.Column(db.Integer(), nullable=True, unique=False) - strength_base = db.Column(db.Integer(), nullable=True, unique=False) - agility_base = db.Column(db.Integer(), nullable=True, unique=False) - defence_base = db.Column(db.Integer(), nullable=True, unique=False) - wisdom_base = db.Column(db.Integer(), nullable=True, unique=False) + def __init__(self, **kwargs): + super().__init__(**kwargs) + + char_race = CharacterRace.query.get(self.character_race) + char_class = CharacterClass.query.get(self.character_class) + + self.endurance_base = ( + 100 * char_race.endurance_koef * char_class.endurance_koef + ) + self.strength_base = ( + 100 * char_race.strength_koef * char_class.strength_koef + ) + self.agility_base = ( + 100 * char_race.agility_koef * char_class.agility_koef + ) + self.defence_base = ( + 100 * char_race.defence_koef * char_class.defence_koef + ) + self.wisdom_base = 100 * char_race.wisdom_koef * char_class.wisdom_koef def __str__(self): return self.name @property - def attack_power(self): - return ( + def battle_stats(self): + char_race = CharacterRace.query.get(self.character_race) + char_class = CharacterClass.query.get(self.character_class) + + attack_power = ( self.strength_base - * self.character_race.strength_koef - * self.character_class.strength_koef + * char_race.strength_koef + * char_class.strength_koef ) - @property - def defence_chance(self): - return ( + defence_chance = ( self.defence_base - * self.character_race.defence_koef - * self.character_class.defence_koef + * char_race.defence_koef + * char_class.defence_koef ) - @property - def saving_chance(self): - return ( + dodge_chance = ( self.agility_base - * self.character_race.agility_koef - * self.character_class.agility_koef + * char_race.agility_koef + * char_class.agility_koef ) + + return { + "attack_power": attack_power, + "defence_chance": defence_chance, + "dodge_chance": dodge_chance, + }