Skip to content

Commit 956dbfa

Browse files
Fix retire wiping the cleared status of event and extra quests
1 parent 0d46ee4 commit 956dbfa

3 files changed

Lines changed: 16 additions & 11 deletions

File tree

server/internal/questflow/event_quest.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ func (h *QuestHandler) HandleEventQuestFinish(user *store.UserState, eventQuestC
5454
store.RecoverStamina(user, refund*1000, maxMillis, nowMillis)
5555
}
5656

57+
restoreClearedAfterRetire(user, questId, isRetired)
58+
5759
user.EventQuest.CurrentEventQuestChapterId = 0
5860
user.EventQuest.CurrentQuestId = 0
5961
user.EventQuest.CurrentQuestSceneId = 0

server/internal/questflow/extra_quest.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ func (h *QuestHandler) HandleExtraQuestFinish(user *store.UserState, questId int
5151
store.RecoverStamina(user, refund*1000, maxMillis, nowMillis)
5252
}
5353

54+
restoreClearedAfterRetire(user, questId, isRetired)
55+
5456
user.ExtraQuest.CurrentQuestId = 0
5557
user.ExtraQuest.CurrentQuestSceneId = 0
5658
user.ExtraQuest.HeadQuestSceneId = 0

server/internal/questflow/quest.go

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
236247
func (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

Comments
 (0)