From 62f35eb8f819f1ca26e7c79346bf9599609c8c76 Mon Sep 17 00:00:00 2001 From: bridge Date: Wed, 24 Sep 2025 22:19:04 +0800 Subject: [PATCH] fix bug --- src/classes/action.py | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/classes/action.py b/src/classes/action.py index 0dca1d7..4ed16ac 100644 --- a/src/classes/action.py +++ b/src/classes/action.py @@ -1,12 +1,8 @@ from __future__ import annotations from abc import ABC, abstractmethod -from enum import Enum from typing import TYPE_CHECKING import random -import json -import inspect -from src.classes.essence import Essence, EssenceType from src.classes.root import Root, get_essence_types_for_root, extra_breakthrough_success_rate from src.classes.region import Region, CultivateRegion, NormalRegion, CityRegion from src.classes.event import Event, NULL_EVENT @@ -364,6 +360,8 @@ class Breakthrough(DefineAction, ActualActionMixin): """ assert self.avatar.cultivation_progress.can_break_through() success_rate = self.calc_success_rate() + # 记录本次尝试的基础信息 + self._success_rate_cached = success_rate if random.random() < success_rate: old_realm = self.avatar.cultivation_progress.realm self.avatar.cultivation_progress.break_through() @@ -374,10 +372,14 @@ class Breakthrough(DefineAction, ActualActionMixin): self._update_hp_mp_on_breakthrough(new_realm) # 成功:确保最大寿元至少达到新境界的基线 self.avatar.age.ensure_max_lifespan_at_least_realm_base(new_realm) + # 记录结果用于 finish 事件 + self._last_result = ("success", getattr(old_realm, "value", str(old_realm)), getattr(new_realm, "value", str(new_realm))) else: # 突破失败:减少最大寿元上限 reduce_years = self.avatar.cultivation_progress.get_breakthrough_fail_reduce_lifespan() self.avatar.age.decrease_max_lifespan(reduce_years) + # 记录结果用于 finish 事件 + self._last_result = ("fail", int(reduce_years)) def _update_hp_mp_on_breakthrough(self, new_realm): """ @@ -403,6 +405,9 @@ class Breakthrough(DefineAction, ActualActionMixin): return self.avatar.cultivation_progress.can_break_through() def start(self) -> Event: + # 清理上次残留的结果状态(防御性) + self._last_result = None + self._success_rate_cached = None return Event(self.world.month_stamp, f"{self.avatar.name} 开始尝试突破境界") def step(self) -> tuple[str, list[Event]]: @@ -411,7 +416,15 @@ class Breakthrough(DefineAction, ActualActionMixin): return ("completed" if done else "running"), [] def finish(self) -> list[Event]: - return [] + # 根据执行阶段记录的 _last_result 生成简洁完成事件 + res = getattr(self, "_last_result", None) + if isinstance(res, tuple) and res: + if res[0] == "success": + return [Event(self.world.month_stamp, f"{self.avatar.name} 突破成功")] + elif res[0] == "fail": + return [Event(self.world.month_stamp, f"{self.avatar.name} 突破失败")] + else: + raise ValueError(f"Unknown result: {res}") @long_action(step_month=6) class Play(DefineAction, ActualActionMixin):