refactor new avatars

This commit is contained in:
bridge
2025-11-25 01:06:56 +08:00
parent ebd4f8be18
commit 8f3f095c27
4 changed files with 607 additions and 635 deletions

View File

@@ -50,13 +50,20 @@ class Event:
class NullEvent:
"""
空事件单例类
空事件单例类,保持与 Event 相同的最小接口,避免调用方访问属性时报错。
"""
_instance = None
def __new__(cls):
if cls._instance is None:
cls._instance = super().__new__(cls)
# 初始化一次即可
cls._instance.month_stamp = MonthStamp(0)
cls._instance.content = ""
cls._instance.related_avatars = None
cls._instance.is_major = False
cls._instance.is_story = False
cls._instance.id = "NULL_EVENT"
return cls._instance
def __str__(self) -> str:
@@ -65,6 +72,17 @@ class NullEvent:
def __bool__(self) -> bool:
"""使NullEvent实例在布尔上下文中为False"""
return False
def to_dict(self) -> dict:
"""保持序列化接口"""
return {
"month_stamp": int(self.month_stamp),
"content": self.content,
"related_avatars": self.related_avatars,
"is_major": self.is_major,
"is_story": self.is_story,
"id": self.id,
}
# 全局单例实例
NULL_EVENT = NullEvent()

View File

@@ -18,7 +18,7 @@ from src.sim.simulator import Simulator
from src.classes.world import World
from src.classes.calendar import Month, Year, create_month_stamp
from src.run.create_map import create_cultivation_world_map, add_sect_headquarters
from src.sim.new_avatar import make_avatars as _new_make, get_new_avatar_with_config
from src.sim.new_avatar import make_avatars as _new_make, create_avatar_from_request
from src.utils.config import CONFIG
from src.classes.sect import sects_by_id
from src.classes.technique import techniques_by_id
@@ -804,7 +804,7 @@ def create_avatar(req: CreateAvatarRequest):
personas = None
if req.persona_ids:
personas = req.persona_ids # get_new_avatar_with_config 支持 int 列表
personas = req.persona_ids # create_avatar_from_request 支持 int 列表
have_name = False
final_name = None
@@ -826,9 +826,9 @@ def create_avatar(req: CreateAvatarRequest):
# 创建角色
# 注意level 如果是境界枚举值对应的等级范围,前端可能传的是 realm index后端需要转换吗
# 简单起见,我们假设 level 传的是具体等级 (1-120) 或者 realm index * 30 + 1
# get_new_avatar_with_config 接收 level (int)
# create_avatar_from_request 接收 level (int)
avatar = get_new_avatar_with_config(
avatar = create_avatar_from_request(
world,
world.month_stamp,
name=final_name,

File diff suppressed because it is too large Load Diff

View File

@@ -3,7 +3,7 @@ import asyncio
from src.classes.calendar import Month, Year, MonthStamp
from src.classes.avatar import Avatar, Gender
from src.sim.new_avatar import get_new_avatar_from_mortal
from src.sim.new_avatar import create_random_mortal
from src.classes.age import Age
from src.classes.cultivation import Realm
from src.classes.world import World
@@ -104,7 +104,7 @@ class Simulator:
age = random.randint(16, 60)
gender = random.choice(list(Gender))
name = get_random_name(gender)
new_avatar = get_new_avatar_from_mortal(self.world, self.world.month_stamp, name, Age(age, Realm.Qi_Refinement))
new_avatar = create_random_mortal(self.world, self.world.month_stamp, name, Age(age, Realm.Qi_Refinement))
self.world.avatar_manager.avatars[new_avatar.id] = new_avatar
event = Event(self.world.month_stamp, f"{new_avatar.name}晋升为修士了。", related_avatars=[new_avatar.id])
events.append(event)