add save and load func

This commit is contained in:
bridge
2025-11-11 19:48:18 +08:00
parent 0cb7eacee7
commit 9b870475bf
21 changed files with 1348 additions and 32 deletions

View File

@@ -52,6 +52,29 @@ class ActionPlan:
expiry_month: Optional[int] = None # 到期月戳None 为不过期
max_retries: int = 0
attempted: int = 0
def to_dict(self) -> dict:
"""转换为可序列化的字典"""
return {
"action_name": self.action_name,
"params": self.params,
"priority": self.priority,
"expiry_month": self.expiry_month,
"max_retries": self.max_retries,
"attempted": self.attempted
}
@classmethod
def from_dict(cls, data: dict) -> "ActionPlan":
"""从字典重建ActionPlan"""
return cls(
action_name=data["action_name"],
params=data["params"],
priority=data.get("priority", 0),
expiry_month=data.get("expiry_month"),
max_retries=data.get("max_retries", 0),
attempted=data.get("attempted", 0)
)
@dataclass

View File

@@ -121,3 +121,17 @@ class Age:
def __repr__(self) -> str:
"""返回年龄的详细字符串表示"""
return f"Age({self.age})"
def to_dict(self) -> dict:
"""转换为可序列化的字典"""
return {
"age": self.age,
"max_lifespan": self.max_lifespan
}
@classmethod
def from_dict(cls, data: dict, realm: Realm) -> "Age":
"""从字典重建Age"""
age_obj = cls(data["age"], realm)
age_obj.max_lifespan = data["max_lifespan"]
return age_obj

View File

@@ -13,6 +13,8 @@ from src.classes.action import Action
from src.classes.action_runtime import ActionStatus, ActionResult
from src.classes.action.registry import ActionRegistry
from src.classes.world import World
from src.sim.save.avatar_save_mixin import AvatarSaveMixin
from src.sim.load.avatar_load_mixin import AvatarLoadMixin
from src.classes.tile import Tile
from src.classes.region import Region
from src.classes.cultivation import CultivationProgress
@@ -59,7 +61,7 @@ gender_strs = {
MAX_HISTORY_EVENTS = 10
@dataclass
class Avatar:
class Avatar(AvatarSaveMixin, AvatarLoadMixin):
"""
NPC的类。
包含了这个角色的一切信息。
@@ -697,5 +699,5 @@ class Avatar:
获取角色的移动步长
"""
return self.cultivation_progress.get_move_step()

View File

@@ -246,6 +246,20 @@ class CultivationProgress:
def get_breakthrough_fail_reduce_lifespan(self) -> int:
return breakthrough_fail_reduce_lifespan_by_realm[self.realm]
def to_dict(self) -> dict:
"""转换为可序列化的字典"""
return {
"level": self.level,
"exp": self.exp,
"realm": self.realm.name, # 保存枚举的name
"stage": self.stage.name
}
@classmethod
def from_dict(cls, data: dict) -> "CultivationProgress":
"""从字典重建CultivationProgress"""
return cls(level=data["level"], exp=data["exp"])

View File

@@ -17,6 +17,23 @@ class Event:
year = self.month_stamp.get_year()
month = self.month_stamp.get_month()
return f"{year}{month}月: {self.content}"
def to_dict(self) -> dict:
"""转换为可序列化的字典"""
return {
"month_stamp": int(self.month_stamp),
"content": self.content,
"related_avatars": self.related_avatars
}
@classmethod
def from_dict(cls, data: dict) -> "Event":
"""从字典重建Event"""
return cls(
month_stamp=MonthStamp(data["month_stamp"]),
content=data["content"],
related_avatars=data.get("related_avatars")
)
class NullEvent:
"""

View File

@@ -66,6 +66,15 @@ class HP:
if isinstance(other, HP):
return self.cur >= other.cur
return self.cur >= other
def to_dict(self) -> dict:
"""转换为可序列化的字典"""
return {"max": self.max, "cur": self.cur}
@classmethod
def from_dict(cls, data: dict) -> "HP":
"""从字典重建HP"""
return cls(max=data["max"], cur=data["cur"])
HP_MAX_BY_REALM = {
Realm.Qi_Refinement: 100,
@@ -141,6 +150,15 @@ class MP:
def add_max(self, value_2_add:int) -> bool:
self.max += value_2_add
return True
def to_dict(self) -> dict:
"""转换为可序列化的字典"""
return {"max": self.max, "cur": self.cur}
@classmethod
def from_dict(cls, data: dict) -> "MP":
"""从字典重建MP"""
return cls(max=data["max"], cur=data["cur"])
MP_MAX_BY_REALM = {
Realm.Qi_Refinement: 100,