diff --git a/src/classes/auxiliary.py b/src/classes/auxiliary.py index 4d67184..6a04179 100644 --- a/src/classes/auxiliary.py +++ b/src/classes/auxiliary.py @@ -76,7 +76,7 @@ def _load_auxiliaries() -> tuple[Dict[int, Auxiliary], Dict[str, Auxiliary]]: for row in df: effects = load_effect_from_str(get_str(row, "effects")) - from src.utils.effect_desc import format_effects_to_text + from src.classes.effect import format_effects_to_text effect_desc = format_effects_to_text(effects) # 解析grade diff --git a/src/classes/avatar/core.py b/src/classes/avatar/core.py index ea27db2..ba56206 100644 --- a/src/classes/avatar/core.py +++ b/src/classes/avatar/core.py @@ -40,7 +40,7 @@ from src.classes.nickname_data import Nickname from src.utils.config import CONFIG # Mixin 导入 -from src.classes.avatar.effects_mixin import EffectsMixin +from src.classes.effect import EffectsMixin from src.classes.avatar.inventory_mixin import InventoryMixin from src.classes.avatar.action_mixin import ActionMixin diff --git a/src/classes/avatar/info_presenter.py b/src/classes/avatar/info_presenter.py index e6bc48a..3ed1aae 100644 --- a/src/classes/avatar/info_presenter.py +++ b/src/classes/avatar/info_presenter.py @@ -17,7 +17,7 @@ from src.utils.config import CONFIG def _get_effects_text(avatar: "Avatar") -> str: """获取格式化的效果文本""" - from src.utils.effect_desc import format_effects_to_text + from src.classes.effect import format_effects_to_text breakdown = avatar.get_effect_breakdown() effect_parts = [] for source_name, effects in breakdown: @@ -383,7 +383,7 @@ def get_avatar_desc(avatar: "Avatar", detailed: bool = False) -> str: lines.append("\n--- 当前效果明细 ---") breakdown = avatar.get_effect_breakdown() - from src.utils.effect_desc import format_effects_to_text + from src.classes.effect import format_effects_to_text if not breakdown: lines.append("无额外效果") diff --git a/src/classes/celestial_phenomenon.py b/src/classes/celestial_phenomenon.py index 3ff7d42..d608df8 100644 --- a/src/classes/celestial_phenomenon.py +++ b/src/classes/celestial_phenomenon.py @@ -78,7 +78,7 @@ def _load_celestial_phenomena() -> dict[int, CelestialPhenomenon]: # 解析effects effects = load_effect_from_str(get_str(row, "effects")) - from src.utils.effect_desc import format_effects_to_text + from src.classes.effect import format_effects_to_text effect_desc = format_effects_to_text(effects) phenomenon = CelestialPhenomenon( diff --git a/src/classes/effect/__init__.py b/src/classes/effect/__init__.py new file mode 100644 index 0000000..c26ee99 --- /dev/null +++ b/src/classes/effect/__init__.py @@ -0,0 +1,38 @@ +from .consts import ( + ALL_EFFECTS, + EXTRA_BATTLE_STRENGTH_POINTS, + EXTRA_MAX_HP, + EXTRA_OBSERVATION_RADIUS, + EXTRA_CULTIVATE_EXP, + CULTIVATE_DURATION_REDUCTION, + EXTRA_BREAKTHROUGH_SUCCESS_RATE, + EXTRA_DUAL_CULTIVATION_EXP, + EXTRA_HARVEST_ITEMS, + EXTRA_HUNT_ITEMS, + EXTRA_MOVE_STEP, + EXTRA_CATCH_SUCCESS_RATE, + EXTRA_ESCAPE_SUCCESS_RATE, + EXTRA_ASSASSINATE_SUCCESS_RATE, + EXTRA_FORTUNE_PROBABILITY, + EXTRA_MISFORTUNE_PROBABILITY, + EXTRA_CAST_SUCCESS_RATE, + EXTRA_WEAPON_PROFICIENCY_GAIN, + EXTRA_WEAPON_UPGRADE_CHANCE, + EXTRA_MAX_LIFESPAN, + EXTRA_HP_RECOVERY_RATE, + DAMAGE_REDUCTION, + REALM_SUPPRESSION_BONUS, + EXTRA_ITEM_SELL_PRICE_MULTIPLIER, + SHOP_BUY_PRICE_REDUCTION, + EXTRA_PLUNDER_MULTIPLIER, + LEGAL_ACTIONS, +) +from .process import ( + load_effect_from_str, + build_effects_map_from_df, + _evaluate_conditional_effect, + _merge_effects, +) +from .mixin import EffectsMixin +from .desc import format_effects_to_text, translate_condition, EFFECT_DESC_MAP + diff --git a/src/classes/effects.py b/src/classes/effect/consts.py similarity index 99% rename from src/classes/effects.py rename to src/classes/effect/consts.py index 0ab8783..c65ab68 100644 --- a/src/classes/effects.py +++ b/src/classes/effect/consts.py @@ -370,7 +370,7 @@ CSV 中 effects 列的写法(支持宽松JSON格式): # ============================================================================= """ -Effects 通过 src/classes/effect.py 中的 _merge_effects() 函数合并。 +Effects 通过 src/classes/effect/process.py 中的 _merge_effects() 函数合并。 合并规则: 1. 列表类型 (如 legal_actions): 取并集(去重) @@ -447,3 +447,4 @@ ALL_EFFECTS = [ # 特殊权限 "legal_actions", # list[str] - 合法动作列表 ] + diff --git a/src/utils/effect_desc.py b/src/classes/effect/desc.py similarity index 99% rename from src/utils/effect_desc.py rename to src/classes/effect/desc.py index 676c489..f6e7219 100644 --- a/src/utils/effect_desc.py +++ b/src/classes/effect/desc.py @@ -188,3 +188,4 @@ def format_effects_to_text(effects: dict[str, Any] | list[dict[str, Any]]) -> st return f"[{cond}] {text}" return text + diff --git a/src/classes/avatar/effects_mixin.py b/src/classes/effect/mixin.py similarity index 98% rename from src/classes/avatar/effects_mixin.py rename to src/classes/effect/mixin.py index 7b5789f..aa64cc1 100644 --- a/src/classes/avatar/effects_mixin.py +++ b/src/classes/effect/mixin.py @@ -10,7 +10,7 @@ from typing import TYPE_CHECKING, Any if TYPE_CHECKING: from src.classes.avatar.core import Avatar -from src.classes.effect import _merge_effects, _evaluate_conditional_effect +from .process import _merge_effects, _evaluate_conditional_effect from src.classes.hp import HP_MAX_BY_REALM @@ -204,3 +204,4 @@ class EffectsMixin: def move_step_length(self: "Avatar") -> int: """获取角色的移动步长""" return self.cultivation_progress.get_move_step() + diff --git a/src/classes/effect.py b/src/classes/effect/process.py similarity index 99% rename from src/classes/effect.py rename to src/classes/effect/process.py index 032440f..479d292 100644 --- a/src/classes/effect.py +++ b/src/classes/effect/process.py @@ -222,3 +222,4 @@ def build_effects_map_from_df( if eff: effects_map[key] = eff return effects_map + diff --git a/src/classes/elixir.py b/src/classes/elixir.py new file mode 100644 index 0000000..e69de29 diff --git a/src/classes/persona.py b/src/classes/persona.py index 9c1a7e5..9848e79 100644 --- a/src/classes/persona.py +++ b/src/classes/persona.py @@ -72,7 +72,7 @@ def _load_personas() -> tuple[dict[int, Persona], dict[str, Persona]]: # 解析effects effects = load_effect_from_str(get_str(row, "effects")) - from src.utils.effect_desc import format_effects_to_text + from src.classes.effect import format_effects_to_text effect_desc = format_effects_to_text(effects) persona = Persona( diff --git a/src/classes/root.py b/src/classes/root.py index e274895..83b6b55 100644 --- a/src/classes/root.py +++ b/src/classes/root.py @@ -129,7 +129,7 @@ _root_effects_by_root = build_effects_map_from_df( effects_column="effects", ) -from src.utils.effect_desc import format_effects_to_text +from src.classes.effect import format_effects_to_text _root_effect_desc_by_root = { root: format_effects_to_text(effects) for root, effects in _root_effects_by_root.items() diff --git a/src/classes/sect.py b/src/classes/sect.py index c2e476c..a3c51f0 100644 --- a/src/classes/sect.py +++ b/src/classes/sect.py @@ -207,7 +207,7 @@ def _load_sects() -> tuple[dict[int, Sect], dict[str, Sect]]: # 读取 effects effects = load_effect_from_str(get_str(row, "effects")) - from src.utils.effect_desc import format_effects_to_text + from src.classes.effect import format_effects_to_text effect_desc = format_effects_to_text(effects) # 读取倾向兵器类型 diff --git a/src/classes/spirit_animal.py b/src/classes/spirit_animal.py index e2e44a7..2e32061 100644 --- a/src/classes/spirit_animal.py +++ b/src/classes/spirit_animal.py @@ -40,7 +40,7 @@ class SpiritAnimal: return {"extra_battle_strength_points": pts} if pts else {} def get_structured_info(self) -> dict: - from src.utils.effect_desc import format_effects_to_text + from src.classes.effect import format_effects_to_text return { "name": self.name, "desc": f"境界:{self.realm.value}", diff --git a/src/classes/technique.py b/src/classes/technique.py index 5a79834..bd6b919 100644 --- a/src/classes/technique.py +++ b/src/classes/technique.py @@ -130,7 +130,7 @@ def loads() -> tuple[dict[int, Technique], dict[str, Technique]]: sect = None effects = load_effect_from_str(get_str(row, "effects")) - from src.utils.effect_desc import format_effects_to_text + from src.classes.effect import format_effects_to_text effect_desc = format_effects_to_text(effects) t = Technique( diff --git a/src/classes/weapon.py b/src/classes/weapon.py index 2873b09..bffbec5 100644 --- a/src/classes/weapon.py +++ b/src/classes/weapon.py @@ -70,7 +70,7 @@ def _load_weapons() -> tuple[Dict[int, Weapon], Dict[str, Weapon]]: for row in df: effects = load_effect_from_str(get_str(row, "effects")) - from src.utils.effect_desc import format_effects_to_text + from src.classes.effect import format_effects_to_text effect_desc = format_effects_to_text(effects) # 解析weapon_type diff --git a/src/server/main.py b/src/server/main.py index 4e54345..ba63ad3 100644 --- a/src/server/main.py +++ b/src/server/main.py @@ -213,7 +213,7 @@ def serialize_phenomenon(phenomenon) -> Optional[dict]: rarity_str = phenomenon.rarity.level.name # 生成效果描述 - from src.utils.effect_desc import format_effects_to_text + from src.classes.effect import format_effects_to_text effect_desc = format_effects_to_text(phenomenon.effects) if hasattr(phenomenon, "effects") else "" return {