Skip to content

增加梯度快修策略——大破才修但中破舰船数达到阈值后中破也修 #434

@syokounya

Description

@syokounya

Validations

  • 我已经阅读了 用户文档 并尝试自己解决问题,同时在社群中进行了讨论
  • 我无法找到任何 open issue 提出了相同的建议

问题描述

当前出征准备的快修策略是固定阈值的二选一模式:

  • repair_mode = 1(中破就修):只要有中破或大破,全部使用快修;
  • repair_mode = 2(大破才修):只有大破才使用快修,中破船直接出征。

这导致在实际使用时存在两难:

  • 用「中破就修」会浪费大量快修桶,不适合日常练级或低强度打捞;
  • 用「大破才修」则可能出现多艘中破船同时上阵的情况,战斗力显著下降,甚至影响通过率和mvp分配。

用户更需要一种梯度快修策略:平时只修大破,但当舰队中中破舰船数量达到某个阈值时,连中破船也一并快修,避免半残舰队强行出征。

解决方案

建议新增一种带阈值的快修策略,核心逻辑如下:

1. 配置扩展

FightConfig / CombatPlan 以及前端 Plan 编辑器中增加字段:

repair_mode: 2                    # 基础策略:大破才修
repair_moderate_threshold: 2      # 新增:中破舰船数 >= 2 时,中破也修

或者统一扩展 RepairMode / RepairStrategy 语义:

  • SEVERE 保持原有行为(仅大破修);
  • 新增 SEVERE_UNLESS_MODERATE_COUNT_GE: int 策略。

2. 后端逻辑修改

修改 RepairMixin.check_repair()autowsgr/ui/battle/repair.py)的判定逻辑:

  1. 先按基础策略收集需要修理的槽位(如大破船);
  2. 额外统计中破舰船数量
  3. 若中破数量 >= repair_moderate_threshold,则把中破船也加入修理列表;
  4. 最终统一调用 repair_slots()

示例逻辑:

positions = []
moderate_positions = []
for slot, dmg in damage.items():
    if dmg == ShipDamageState.NO_SHIP or dmg == ShipDamageState.NORMAL:
        continue
    if dmg >= ShipDamageState.SEVERE:
        positions.append(slot)
    elif dmg == ShipDamageState.MODERATE:
        moderate_positions.append(slot)

if len(moderate_positions) >= moderate_threshold:
    positions.extend(moderate_positions)

3. 前端支持

  • Plan / Preset 编辑器中,当 repair_mode 选择「大破才修」时,显示一个可选的「中破容忍数量」输入框;
  • 留空或填 0 表示保持纯大破才修;填 12 等表示中破船达到该数量后触发中破快修;
  • 该配置随 TaskRequest 下发到后端执行。

4. 兼容性

  • 不修改现有 repair_mode: 1repair_mode: 2 的默认行为;
  • 新增字段为可选,缺失时默认不启用梯度逻辑,保持向后兼容。

使用场景举例

  • 日常练级:设置 repair_mode: 2 + repair_moderate_threshold: 2。平时只修大破省油桶;一旦某轮回来 3 艘中破,下次出征前直接全部快修,避免 3 中破舰队硬上影响效率。
  • 高难打捞:设置 repair_moderate_threshold: 1,只要出现 1 艘中破就全部修好,确保舰队满状态通过门神点。

这样可以在省桶和保证战斗力之间取得更精细的平衡。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels
    No fields configured for Feature.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions