add save and load func
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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()
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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"])
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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:
|
||||
"""
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user