65 lines
3.4 KiB
Python
65 lines
3.4 KiB
Python
from dataclasses import dataclass, field
|
||
from typing import TYPE_CHECKING, Optional
|
||
|
||
from src.classes.map import Map
|
||
from src.classes.calendar import Year, Month, MonthStamp
|
||
from src.classes.avatar_manager import AvatarManager
|
||
from src.classes.event_manager import EventManager
|
||
from src.classes.circulation import CirculationManager
|
||
|
||
if TYPE_CHECKING:
|
||
from src.classes.avatar import Avatar
|
||
from src.classes.celestial_phenomenon import CelestialPhenomenon
|
||
|
||
|
||
@dataclass
|
||
class World():
|
||
map: Map
|
||
month_stamp: MonthStamp
|
||
avatar_manager: AvatarManager = field(default_factory=AvatarManager)
|
||
# 全局事件管理器
|
||
event_manager: EventManager = field(default_factory=EventManager)
|
||
# 当前天地灵机(世界级buff/debuff)
|
||
current_phenomenon: Optional["CelestialPhenomenon"] = None
|
||
# 天地灵机开始年份(用于计算持续时间)
|
||
phenomenon_start_year: int = 0
|
||
# 出世物品流通管理器
|
||
circulation: CirculationManager = field(default_factory=CirculationManager)
|
||
|
||
def get_info(self, detailed: bool = False, avatar: Optional["Avatar"] = None) -> dict:
|
||
"""
|
||
返回世界信息(dict),其中包含地图信息(dict)。
|
||
如果指定了 avatar,将传给 map.get_info 用于过滤区域和计算距离。
|
||
"""
|
||
static_info = self.static_info
|
||
map_info = self.map.get_info(detailed=detailed, avatar=avatar)
|
||
world_info = {**map_info, **static_info}
|
||
|
||
if self.current_phenomenon:
|
||
world_info["当前天地灵机"] = f"【{self.current_phenomenon.name}】{self.current_phenomenon.desc}"
|
||
|
||
return world_info
|
||
|
||
def get_avatars_in_same_region(self, avatar: "Avatar"):
|
||
return self.avatar_manager.get_avatars_in_same_region(avatar)
|
||
|
||
def get_observable_avatars(self, avatar: "Avatar"):
|
||
return self.avatar_manager.get_observable_avatars(avatar)
|
||
|
||
@property
|
||
def static_info(self) -> dict:
|
||
desc = {
|
||
"简介": "这是一个诸多修士竞相修行的修仙世界。",
|
||
"境界": "修仙的境界从弱到强:练气、筑基、金丹、元婴。每个境界分前期、中期、后期。境界间差距很大。",
|
||
"寿元": "每个角色均有寿元,超过寿元后容易老死。提升境界和某些宝物、丹药能提高寿元。",
|
||
"死亡": "HP降至0以下也会死亡。",
|
||
"区域": "不同区域有不同效果,在适当的区域做适当的事情事半功倍。",
|
||
"修炼": "修炼可以增加经验,直到到达突破前的瓶颈。突破是概率事件,突破后会进入下一个境界。",
|
||
"灵根": "决定了你与天地灵气的亲和度。在与自身灵根属性匹配的区域(如火灵根在火属性洞府)修炼,效率最高。",
|
||
"天地灵机": "世界每隔数年会有一次天象变动(如灵气潮汐),影响角色能力。",
|
||
"灵石": "修仙界的通用货币。可用于购买法宝丹药,通过采集、交易或掠夺获取。",
|
||
"宗门": "修士的庇护所。加入宗门可习得独门功法、获同门庇护;散修自由但资源匮乏。",
|
||
"战斗": "弱肉强食。境界压制极大,高境界者对低境界者有绝对优势。若对方死亡,胜者可掠夺败者财物。",
|
||
"动作": "你有一系列可以执行的动作。要注意动作的效果、限制条件、区域和时间。"
|
||
}
|
||
return desc |