From 7299ea20e3fc4aa279244c11c39011944bd30f85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=A5=BF=E7=93=9C=C2=B0?= <8441078+i_melon@user.noreply.gitee.com> Date: Sun, 29 Mar 2026 23:15:20 +0800 Subject: [PATCH] =?UTF-8?q?fea:=E8=AA=93=E7=BA=A6=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E8=AE=BE=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/core/basic/equipment.py | 101 ++++++++++++++++++++++++++++++-- backend/dataFiles/dcalc_0.db | Bin 1007616 -> 1007616 bytes backend/database/models.py | 6 ++ backend/main.py | 3 +- backend/test.py | 12 +++- 5 files changed, 115 insertions(+), 7 deletions(-) diff --git a/backend/core/basic/equipment.py b/backend/core/basic/equipment.py index 3cd285b2..2ed4a83d 100644 --- a/backend/core/basic/equipment.py +++ b/backend/core/basic/equipment.py @@ -1,10 +1,16 @@ import importlib -from database.models import EmblemData, OathData, Session, EquData, StoneData, SuitData, EnchantData,JadeData +from database.models import EmblemData, OathData, OathSuitData, OathSuitSkillData, PrimerData, 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]: return default if not info else [float(i) for i in info.split(',')] +def parse_to_string_list(info: str, default: list[str] = ['']) -> list[str]: + return default if not info else [i for i in info.split(',')] + +def parse_to_int_list(info: str, default: list[int] = [0]) -> list[int]: + return default if not info else [int(i) for i in info.split(',')] + class Equ: id: str name: str @@ -66,6 +72,8 @@ class Equipments: self.version = version self.engine = get_engine(version) self.equs: list[Equ] = [] + self.oaths: list[Oath] = [] + self.oath_dict: dict[str, Oath] = {} self.stones: list[Equ] = [] self.funs = self.init_func() self.equ_dict: dict[str, Equ] = {} @@ -75,6 +83,7 @@ class Equipments: self.emblems = [] self.suits: list[Suit] = [] self.suit_dict: dict[str, Suit] = {} + self.oath_suits: list[Suit] = [] self.init_equs() self.init_suits() self.init_enchants() @@ -177,21 +186,52 @@ class Equipments: def init_oaths(self): """从数据库中获取所有誓约信息""" with Session(self.engine) as session: - db_list = session.query(OathData).all() + db_list_1 = session.query(OathData).all() + db_list_2 = session.query(PrimerData).all() keys = [key for key in OathData.__dict__.keys() if key[0].isupper()] - for item in db_list: + print(keys) + for item in db_list_1 + db_list_2: max_adaptation = 0 item.id = str(item.id) + if item.wearUrl is None: + item.wearUrl = item.imageUrl for attr in keys: value = parse_to_number_list(getattr(item, attr)) max_adaptation = max(max_adaptation, len(value) - 1) setattr(item, attr, value) + for attr in ['wearUrl','position','suit']: + value = [] if getattr(item, attr) is None else getattr(item, attr).split(',') + 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_oath_suits(self): + """从数据库中获取所有誓约套装信息""" + with Session(self.engine) as session: + db_list = session.query(OathSuitData).all() + db_skills_list = session.query(OathSuitSkillData).all() + for item in db_list: + lvs = len(item.point.split(',')) + suits = {k: v for k, v in item.__dict__.items() if not k.startswith('_')} + for i in range(1, lvs + 1): + suit = {k: v for k, v in suits.items()} + suit['point'] = int(suit['point'].split(',')[i - 1]) + skills = [x for x in db_skills_list if x.suitId == suit['suitId'] and x.key == suit['key']] + suit['level'] = i + skillAttaks = parse_to_number_list(suit['SkillAttack'], [0]) + suit['SkillAttack'] = 0 if i - 1 >= len(skillAttaks) else skillAttaks[i - 1] + attacks = parse_to_number_list(suit['Attack'], [0]) + suit['Attack'] = 0 if i - 1 >= len(attacks) else attacks[i - 1] + buffers = parse_to_number_list(suit['Buffer'], [0]) + suit['Buffer'] = 0 if i - 1 >= len(buffers) else buffers[i - 1] + suit['skills'] = [OathSuitSkill(**{k: v for k, v in skill.__dict__.items() if not k.startswith('_')}) for skill in skills] + self.oath_suits.append(suit) + pass + pass + def init_func(self): """根据装备版本加载装备效果""" @@ -217,6 +257,22 @@ class Equipments: result[suit.count] = suit return list(result.values()) + def get_oath_suit_info(self, suitId: str | int, point: int = 0, count: int = 0) -> list[Suit]: + """根据套装点数返回对应适用的誓约套装属性\n + 新套装只需要传入suitID和point即可,count默认为0\n + 老套装需要传入suitID和count即可,point默认为0 + """ + if suitId not in self.oath_suit_dict: + return [] + # 先筛选出点数小于等于point和数量小于等于count的套装 + suits: list[Suit] = [suit for suit in self.oath_suit_dict[str(suitId)] if suit.point <= point and suit.count <= count] + result: dict[int, Suit] = {} + # 取每种count套装中点数最高的 + for suit in suits: + if suit.count not in result or suit.point > result[suit.count].point: + result[suit.count] = suit + return list(result.values()) + class EquEffect: name: str = '' """装备技能名称""" @@ -254,7 +310,7 @@ class Oath: SkillAttack: list[float] | float Attack: list[float] | float Buffer: list[float] | float - wearUrls: list[str] + wearUrl: list[str] max_adaptation: int def __init__(self, **kwargs): @@ -274,6 +330,43 @@ class Oath: return Oath(**temp) +class OathSuitSkill: + id: int + key: str + suitId: int + suitName: str + skillId: int + name: str + rarity: str + imageUrl: str + SkillAttack: float + Attack: float + Buffer: float + value: str + bufferValue: str + + def __init__(self, **kwargs): + self.__dict__.update(kwargs) + +class OathSuit: + id: int + key: str + suitId: int + suitName: str + rarity: str + name: str + point: int + level: int + count: int + imageUrl: str + SkillAttack: float + Attack: float + skills: list[OathSuitSkill] + + def __init__(self, **kwargs): + self.__dict__.update(kwargs) + + global equ0 equ0 = Equipments("0") diff --git a/backend/dataFiles/dcalc_0.db b/backend/dataFiles/dcalc_0.db index 3f5a44efc64591d46d08a01d35fee66dbb034d35..04374e7b4bfbe45e6b4f5003f51cb6df6981151d 100644 GIT binary patch delta 66302 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 Mc2pecsQmc<1JW|<+yDRo delta 474 zcma*jOG^S#6bJCRb8kLoREAmvK`Cu&VGkc^biL!2%$0v+PY{P43yJW3voNN zP!}$&uxZyoUqLIPMSX)HkQTG(Z=b-$@A5yFa}S)WnhDiRl*Wdo3y$M@a0^LDm;J#B z+|Fjs-0Xz2^I_u3iEZ1RFfRP?VNb);xKAmM#F&ZF5YHU%{1)nU-uQ~sX`TrmWCgWM zs*`d0#9U2ow455L=414^D#*0QIF49o_$5X+LifmxRH_q`N>@pC&RUnOMGV&BE!kiu zwdM@Tq~8Ob*NSplD==RjFQl5z^8W!-4JHj)-oXd;I}1Kdw`sav(;b@be9#4ZJ}u*K zc3~N!ummwkzyd^I5!PS>wjlsP2*WDuK!47BB`Zz^_K^-C1Dl}05gbDoUf>npAPb>N eQ}jA1k_gUXM=W++?T*`j*x%KssqUKU`TPTmWr0-y diff --git a/backend/database/models.py b/backend/database/models.py index 6e69ba3e..639afed3 100644 --- a/backend/database/models.py +++ b/backend/database/models.py @@ -144,6 +144,7 @@ class OathData(Base): Attack = Column(Text) Buffer = Column(Text) suit = Column(Text) + wearUrl = Column(Text) class PrimerData(Base): """ @@ -172,6 +173,7 @@ class PrimerData(Base): Attack = Column(Text) Buffer = Column(Text) suit = Column(Text) + wearUrl = Column(Text) class OathSuitData(Base): __tablename__ = 'oathSuit' @@ -184,6 +186,10 @@ class OathSuitData(Base): name = Column(Text) point = Column(Integer) count = Column(Integer) + imageUrl = Column(Text) + SkillAttack = Column(Text) + Attack = Column(Text) + Buffer = Column(Text) class OathSuitSkillData(Base): __tablename__ = 'oathSuitSkill' diff --git a/backend/main.py b/backend/main.py index fd0efd78..e21451b5 100644 --- a/backend/main.py +++ b/backend/main.py @@ -22,7 +22,8 @@ if __name__ == '__main__': return print("Application starting...") os.environ['TZ'] = 'Asia/Shanghai' - time.tzset() + if os.name != 'nt': # Only call tzset on Unix-like systems, not on Windows + time.tzset() uvicorn.run(app = "main:application", host='0.0.0.0', port=config.PORT, workers=config.WORKERS,reload=False) diff --git a/backend/test.py b/backend/test.py index 0347cd19..f499d48f 100644 --- a/backend/test.py +++ b/backend/test.py @@ -1,3 +1,11 @@ -from core.character.GF.priest_female.inquistor import classChange +from core.basic.equipment import Equipments +equ = Equipments("0") -char = classChange() +equ.init_oath_suits() +item = equ.oath_suits[3] +for i in range(1, 7): + print(f"Lv{i}:") + print(equ.oath_suits[i]) + for skill in equ.oath_suits[i]['skills']: + print(skill.__dict__) + print("------------------") \ No newline at end of file