@@ -233,6 +233,17 @@ func (h *QuestHandler) finalizeChainPreviousQuest(user *store.UserState, questId
233233 log .Printf ("[HandleMainQuestSceneProgress] finalized chain-previous quest %d (cleared)" , questId )
234234}
235235
236+ func restoreClearedAfterRetire (user * store.UserState , questId int32 , isRetired bool ) {
237+ if ! isRetired {
238+ return
239+ }
240+ qs := user .Quests [questId ]
241+ if qs .ClearCount > 0 && qs .QuestStateType == model .UserQuestStateTypeActive {
242+ qs .QuestStateType = model .UserQuestStateTypeCleared
243+ user .Quests [questId ] = qs
244+ }
245+ }
246+
236247func (h * QuestHandler ) HandleQuestFinish (user * store.UserState , questId int32 , isRetired , isAnnihilated bool , nowMillis int64 ) FinishOutcome {
237248 quest , ok := h .QuestById [questId ]
238249 if ! ok {
@@ -260,17 +271,7 @@ func (h *QuestHandler) HandleQuestFinish(user *store.UserState, questId int32, i
260271 store .RecoverStamina (user , refund * 1000 , maxMillis , nowMillis )
261272 }
262273
263- // On retire of a previously-cleared quest (cage Menu Pick replay or
264- // Map Play replay), HandleQuestStart marked QuestStateType=Active for
265- // the run. With applyQuestVictory skipped on retire, that Active sticks
266- // and the cage UI shows the quest as locked. Restore Cleared.
267- if isRetired {
268- qs := user .Quests [questId ]
269- if qs .ClearCount > 0 && qs .QuestStateType == model .UserQuestStateTypeActive {
270- qs .QuestStateType = model .UserQuestStateTypeCleared
271- user .Quests [questId ] = qs
272- }
273- }
274+ restoreClearedAfterRetire (user , questId , isRetired )
274275
275276 user .MainQuest .ProgressQuestSceneId = 0
276277 user .MainQuest .ProgressHeadQuestSceneId = 0
0 commit comments