diff --git a/backend/core/basic/equipment.py b/backend/core/basic/equipment.py index 31cfa999..3cd285b2 100644 --- a/backend/core/basic/equipment.py +++ b/backend/core/basic/equipment.py @@ -1,5 +1,5 @@ import importlib -from database.models import EmblemData, Session, EquData, StoneData, SuitData, EnchantData,JadeData +from database.models import EmblemData, OathData, Session, EquData, StoneData, SuitData, EnchantData,JadeData from database.connect import get_db_engine as get_engine def parse_to_number_list(info: str, default: list[float] = [0]) -> list[float]: @@ -45,7 +45,6 @@ class Equ: temp[attr] = value[min(adaptation, len(value) - 1)] if isinstance(value, list) else value return Equ(**temp) - class Suit: id: int suitId: int @@ -62,7 +61,6 @@ class Suit: def __init__(self, **kwargs): self.__dict__.update(kwargs) - class Equipments: def __init__(self, version='0'): self.version = version @@ -176,6 +174,25 @@ class Equipments: pass pass + def init_oaths(self): + """从数据库中获取所有誓约信息""" + with Session(self.engine) as session: + db_list = session.query(OathData).all() + keys = [key for key in OathData.__dict__.keys() if key[0].isupper()] + for item in db_list: + max_adaptation = 0 + item.id = str(item.id) + for attr in keys: + value = parse_to_number_list(getattr(item, attr)) + max_adaptation = max(max_adaptation, len(value) - 1) + setattr(item, attr, value) + oath_dict = {k: v for k, v in item.__dict__.items() if not k.startswith('_')} + oath_dict['max_adaptation'] = max_adaptation + oath = Oath(**oath_dict) + self.oaths.append(oath) + self.oath_dict[oath.id] = oath + + def init_func(self): """根据装备版本加载装备效果""" try: @@ -216,6 +233,47 @@ class EquEffect: self.cd = cd self.data = data +class Oath: + id: str + name: str + rarity: str + position: list[str] + suit: list[str] + Point: list[float] | float + categorize: str + imageUrl: str + detail: str + bufferDetail: str + STR: list[float] | float + INT: list[float] | float + Vitality: list[float] | float + Spirit: list[float] | float + AtkP: list[float] | float + AtkM: list[float] | float + AtkI: list[float] | float + SkillAttack: list[float] | float + Attack: list[float] | float + Buffer: list[float] | float + wearUrls: list[str] + max_adaptation: int + + def __init__(self, **kwargs): + self.__dict__.update(kwargs) + + def adapt(self, adaptation: int = 0): + """调适 + + Args: + adaptation (int): 调适等级 + """ + temp = self.__dict__.copy() + keys = [key for key in OathData.__dict__.keys() if key[0].isupper()] + for attr in keys: + value = getattr(self, attr) + temp[attr] = value[min(adaptation, len(value) - 1)] if isinstance(value, list) else value + return Oath(**temp) + + global equ0 equ0 = Equipments("0") diff --git a/backend/database/models.py b/backend/database/models.py index 53735664..6e69ba3e 100644 --- a/backend/database/models.py +++ b/backend/database/models.py @@ -27,7 +27,6 @@ class SuitData(Base): bufferValue = Column(Text) fame = Column(Integer) - class EquData(Base): """ 装备属性映射 @@ -116,4 +115,88 @@ class JadeData(Base): min = Column(Integer) max = Column(Integer) unit = Column(Text) - pre = Column(Float) \ No newline at end of file + pre = Column(Float) + +class OathData(Base): + """ + 誓约属性映射 + 首字母大写的属性为调适可能会影响到的属性 + """ + __tablename__ = 'oath' + + id = Column(Integer, primary_key=True) + name = Column(Text) + rarity = Column(Text) + position = Column(Text) + Point = Column(Integer) + categorize = Column(Text) + imageUrl = Column(Text) + detail = Column(Text) + bufferDetail = Column(Text) + STR = Column(Text) + INT = Column(Text) + Vitality = Column(Text) + Spirit = Column(Text) + AtkP = Column(Text) + AtkM = Column(Text) + AtkI = Column(Text) + SkillAttack = Column(Text) + Attack = Column(Text) + Buffer = Column(Text) + suit = Column(Text) + +class PrimerData(Base): + """ + 誓约属性映射 + 首字母大写的属性为调适可能会影响到的属性 + """ + __tablename__ = 'primer' + + id = Column(Integer, primary_key=True) + name = Column(Text) + rarity = Column(Text) + position = Column(Text) + Point = Column(Integer) + categorize = Column(Text) + imageUrl = Column(Text) + detail = Column(Text) + bufferDetail = Column(Text) + STR = Column(Text) + INT = Column(Text) + Vitality = Column(Text) + Spirit = Column(Text) + AtkP = Column(Text) + AtkM = Column(Text) + AtkI = Column(Text) + SkillAttack = Column(Text) + Attack = Column(Text) + Buffer = Column(Text) + suit = Column(Text) + +class OathSuitData(Base): + __tablename__ = 'oathSuit' + + id = Column(Integer, primary_key=True) + key = Column(Text) + suitId = Column(Integer) + suitName = Column(Text) + rarity = Column(Text) + name = Column(Text) + point = Column(Integer) + count = Column(Integer) + +class OathSuitSkillData(Base): + __tablename__ = 'oathSuitSkill' + + id = Column(Integer, primary_key=True) + key = Column(Text) + suitId = Column(Integer) + skillId = Column(Integer) + name = Column(Text) + rarity = Column(Text) + imageUrl = Column(Text) + SkillAttack = Column(Float) + Attack = Column(Float) + Buffer = Column(Float) + value = Column(Text) + bufferValue = Column(Text) \ No newline at end of file