Skip to content

Commit 3ab8c6e

Browse files
fix: 支持决战选船前大退 (#423)
* Update handlers.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update handlers.py * resume mod * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent 5be51ad commit 3ab8c6e

2 files changed

Lines changed: 11 additions & 20 deletions

File tree

autowsgr/ops/decisive/controller.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,8 @@ def run(self) -> DecisiveResult:
7676
"""执行一轮完整决战(3 个小关)。"""
7777
_log.info('[决战] 开始第 {} 章决战', self._config.chapter)
7878
self._state.reset()
79-
self._resume_mode = False
79+
# 默认进入恢复模式,扫描舰船进度
80+
self._resume_mode = True
8081
self._has_chosen_fleet = False
8182
self._prepare_entry_state()
8283
self._state.phase = DecisivePhase.ENTER_MAP

autowsgr/ops/decisive/handlers.py

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -266,23 +266,18 @@ def _handle_prepare_combat(self) -> None:
266266
return
267267

268268
if self._state.node == 'U':
269-
if self._state.stage == 1 and self._has_chosen_fleet:
270-
self._state.node = 'A'
271-
_log.info('[决战] 首次进入第 1 小节,跳过节点识别并默认使用节点 A')
272-
else:
273-
self._state.node = self._map.recognize_node()
269+
# 初次进入都要进行节点识别
270+
self._state.node = self._map.recognize_node()
274271
_log.info(
275272
'[决战] 出征准备 (小关 {} 节点 {})',
276273
self._state.stage,
277274
self._state.node,
278275
)
279276

280277
# ── 恢复模式检测 ─────────────────────────────────────────────
281-
# 统一在进图后根据节点判定:只要不是首次进入的 1A,均视为恢复模式。
282-
if not self._resume_mode and (
283-
not self._state.is_begin() or (self._state.is_begin() and not self._has_chosen_fleet)
284-
):
285-
self._resume_mode = True
278+
# 恢复模式逻辑修改,默认进入恢复模式,如果是首节点,则不进入恢复模式
279+
if self._state.is_begin():
280+
self._resume_mode = False
286281
_log.info(
287282
'[决战] 检测到恢复模式 (节点={}, has_chosen_fleet={})',
288283
self._state.node,
@@ -291,30 +286,25 @@ def _handle_prepare_combat(self) -> None:
291286

292287
# 先使用技能,再注册舰船,如果是未知节点,也判定一下技能是否使用
293288
current_node = self._state.node
294-
time.sleep(0.5) # 等待动画稳定后截图判定
289+
time.sleep(0.5) # 等待动画稳定后截图判定
295290
skill_used = self._map.is_skill_used()
296291
_log.debug('[决战] 节点: {}, 技能已使用检测: {}', current_node, skill_used)
297292

298-
# 强制使用技能条件:节点 A/U 且首次进入(已经选择过舰队)
299-
should_use_skill = (current_node == 'A' or current_node == 'U') and self._has_chosen_fleet
300-
301-
if should_use_skill or ((current_node == 'A' or current_node == 'U') and not skill_used):
302-
_log.debug('[决战] 执行技能使用: 强制={}', should_use_skill)
303-
time.sleep(0.5)
293+
if not skill_used:
304294
gained = self._map.use_skill()
295+
_log.debug('[决战] 执行技能使用获得: {}', gained)
305296
if gained:
306297
if self._config.useful_skill and not self._logic.check_useful_skill(gained):
307298
_log.info('[决战] 技能获得: {}, 效果不佳,撤退重试', gained)
308299
self._state.phase = DecisivePhase.RETREAT
309300
return
310-
_log.info('[决战] 使用技能获得: {}', gained)
311301
self._state.ships.update(gained)
312302
else:
313303
_log.debug('[决战] 跳过技能使用: 节点={}, 技能已使用={}', current_node, skill_used)
314304

315305
# 首次进入且尚未选择过舰队时,使用技能后可能出现战备舰队获取 overlay,
316306
# 先切回 WAITING_FOR_MAP 等待 overlay 稳定,避免直接点击编队超时。
317-
if not skill_used not self._has_chosen_fleet:
307+
if not skill_used and not self._has_chosen_fleet:
318308
_log.info('[决战] 首次进入,使用技能后等待 overlay 稳定')
319309
self._wait_deadline = time.monotonic() + 10.0
320310
self._state.phase = DecisivePhase.WAITING_FOR_MAP

0 commit comments

Comments
 (0)