diff --git a/src/MaaWpfGui/Res/Localizations/en-us.xaml b/src/MaaWpfGui/Res/Localizations/en-us.xaml
index 877607580a..ff2a7d0d1d 100644
--- a/src/MaaWpfGui/Res/Localizations/en-us.xaml
+++ b/src/MaaWpfGui/Res/Localizations/en-us.xaml
@@ -849,6 +849,7 @@ Do not adjust the proxy multiplier setting in the game
Custom {key=AnnihilationStage}
Annihilation Mode
Current Annihilation
+ The selected stage 「{0}」 is a permanent stage or Current/Last; subsequent stages will not be selected
Chernobog
Lungmen Outskirts
Lungmen Downtown
diff --git a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml
index d3806ee109..ce80e4c216 100644
--- a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml
+++ b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml
@@ -850,6 +850,7 @@ C:\\leidian\\LDPlayer9
カスタム{key=AnnihilationStage}
殲滅作戦
今期の殲滅作戦
+ 選択されたステージ 「{0}」 は常設ステージまたは現在/最後のため、後続のステージは選択されません
チェルノボーグ
龍門郊外
龍門市街
diff --git a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml
index f9e2bfcf0e..664ef8753a 100644
--- a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml
+++ b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml
@@ -851,6 +851,7 @@ C:\\leidian\\LDPlayer9
커스텀 {key=AnnihilationStage}
섬멸 모드
이번 섬멸 작전
+ 선택된 스테이지 「{0}」 는 상설 스테이지 또는 현재/마지막이므로 이후 스테이지는 선택되지 않습니다
체르노보그
용문 외곽
용문 시내
diff --git a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml
index 046fed8e07..75109aeebd 100644
--- a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml
+++ b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml
@@ -850,6 +850,7 @@ C:\\leidian\\LDPlayer9。\n
自定义{key=AnnihilationStage}
剿灭模式
当期剿灭
+ 当前选中的关卡 「{0}」 为常驻关卡或当前/上次,其后的关卡不会被选中执行
切尔诺伯格
龙门外环
龙门市区
diff --git a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml
index 8270d671e9..fcf702ed3a 100644
--- a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml
+++ b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml
@@ -850,6 +850,7 @@ C:\\leidian\\LDPlayer9\n
自定義{key=AnnihilationStage}
剿滅模式
當期剿滅
+ 目前選中的關卡 「{0}」 為常駐關卡或當前/上次,其後的關卡不會被選中執行
切爾諾伯格
龍門外環
龍門市區
diff --git a/src/MaaWpfGui/ViewModels/UserControl/TaskQueue/FightSettingsUserControlModel.cs b/src/MaaWpfGui/ViewModels/UserControl/TaskQueue/FightSettingsUserControlModel.cs
index 875262c4e4..570c48ae11 100644
--- a/src/MaaWpfGui/ViewModels/UserControl/TaskQueue/FightSettingsUserControlModel.cs
+++ b/src/MaaWpfGui/ViewModels/UserControl/TaskQueue/FightSettingsUserControlModel.cs
@@ -1061,6 +1061,20 @@ public class FightSettingsUserControlModel : TaskSettingsViewModel, FightSetting
return stage;
}
+ ///
+ /// 判断指定关卡是否为常驻关卡(无周期限制且非限时活动,每天都开放)。
+ /// 资源关(如 LS-6)虽有关联活动但 IsResourceCollection 为 true 且无周期限制,同样视为常驻。
+ ///
+ /// 关卡代码。
+ /// 若该关卡为常驻关卡则返回 true。
+ private static bool IsPermanentStage(string stage)
+ {
+ var stageInfo = Instances.StageManager.GetStageInfo(stage);
+ bool noPeriodicLimit = stageInfo.OpenDaysOfWeek == null || !stageInfo.OpenDaysOfWeek.Any();
+ bool notLimitedActivity = stageInfo.Activity == null || stageInfo.Activity.IsResourceCollection;
+ return noPeriodicLimit && notLimitedActivity;
+ }
+
public override void RefreshUI(BaseTask baseTask)
{
if (baseTask is not FightTask fight)
@@ -1361,6 +1375,23 @@ public class FightSettingsUserControlModel : TaskSettingsViewModel, FightSetting
return (null, []);
}
+ // 选关逻辑为从上至下找第一个开放关卡,
+ // 常驻关卡(如剿灭、1-7)或"当前/上次"(空字符串)一旦被选中便不会继续往下查找,
+ // 因此其后配置的关卡不会被选中执行
+ if (taskId is null && (stage == string.Empty || IsPermanentStage(stage)))
+ {
+ int stageIndex = fight.StagePlan.IndexOf(stage);
+ if (stageIndex >= 0 && stageIndex < fight.StagePlan.Count - 1)
+ {
+ var stageName = stage == string.Empty
+ ? LocalizationHelper.GetString("DefaultStage")
+ : Instances.StageManager.GetStageInfo(stage).Display;
+ Instances.TaskQueueViewModel.AddLog(
+ LocalizationHelper.GetStringFormat("PermanentStageBlocksStages", stageName),
+ UiLogColor.Warning);
+ }
+ }
+
var time = DateTimeOffset.Now;
var activityExpireIn2Days = false;
var activityList = Instances.StageManager.ActivityList.Where(ss => ss.Value.Info.StartTimeUtc <= time && time <= ss.Value.Info.ExpireTimeUtc);