Files
cultivation-world-simulator/src/classes/world.py
2026-01-03 22:15:25 +08:00

65 lines
3.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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