update treasure to weapon and auxiliary

This commit is contained in:
bridge
2025-11-13 01:16:26 +08:00
parent 2ded449ade
commit e760ba107d
13 changed files with 487 additions and 76 deletions

View File

@@ -6,7 +6,7 @@ Avatar读档反序列化Mixin
读档策略:
- 两阶段加载先加载所有Avatarrelations留空再重建relations网络
- 引用对象通过id从全局字典获取如techniques_by_id
- treasure深拷贝后恢复devoured_souls
- weapon/auxiliary深拷贝后恢复special_data
- 错误容错:缺失的引用对象会跳过而不是崩溃
"""
from typing import TYPE_CHECKING
@@ -41,7 +41,8 @@ class AvatarLoadMixin:
from src.classes.hp_and_mp import HP, MP
from src.classes.technique import techniques_by_id
from src.classes.item import items_by_id
from src.classes.treasure import treasures_by_id
from src.classes.weapon import weapons_by_id
from src.classes.auxiliary import auxiliaries_by_id
from src.classes.sect import sects_by_id
from src.classes.sect_ranks import SectRank
from src.classes.root import Root
@@ -98,12 +99,19 @@ class AvatarLoadMixin:
if item_id in items_by_id:
avatar.items[items_by_id[item_id]] = quantity
# 重建treasure深拷贝因为devoured_souls是实例特有的)
treasure_id = data.get("treasure_id")
if treasure_id is not None and treasure_id in treasures_by_id:
# 重建weapon深拷贝因为special_data是实例特有的)
weapon_id = data.get("weapon_id")
if weapon_id is not None and weapon_id in weapons_by_id:
import copy
avatar.treasure = copy.deepcopy(treasures_by_id[treasure_id])
avatar.treasure.devoured_souls = data.get("treasure_devoured_souls", 0)
avatar.weapon = copy.deepcopy(weapons_by_id[weapon_id])
avatar.weapon.special_data = data.get("weapon_special_data", {})
# 重建auxiliary深拷贝因为special_data是实例特有的
auxiliary_id = data.get("auxiliary_id")
if auxiliary_id is not None and auxiliary_id in auxiliaries_by_id:
import copy
avatar.auxiliary = copy.deepcopy(auxiliaries_by_id[auxiliary_id])
avatar.auxiliary.special_data = data.get("auxiliary_special_data", {})
# 重建spirit_animal
spirit_animal_data = data.get("spirit_animal")