From 9b1609c6ad1be6d23909952d4e320b4a9d1fa597 Mon Sep 17 00:00:00 2001 From: Robert Paciorek Date: Tue, 5 Sep 2023 11:10:11 +0000 Subject: [PATCH] repeatable mission support --- src/Resources/missions.xml | 12 ++++++------ src/Services/MissionService.cs | 14 +++++++++++++- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/Resources/missions.xml b/src/Resources/missions.xml index d78b4be..53d7e0e 100644 --- a/src/Resources/missions.xml +++ b/src/Resources/missions.xml @@ -48958,7 +48958,7 @@ 500 0 - false + true 2195 @@ -64083,7 +64083,7 @@ 500 0 - false + true 1321 @@ -80758,7 +80758,7 @@ 5 0 - false + true 2837 @@ -83710,7 +83710,7 @@ 500 0 - false + true 2499 @@ -94575,7 +94575,7 @@ 500 0 - false + true 2667 @@ -114543,7 +114543,7 @@ 500 0 - false + true 2690 diff --git a/src/Services/MissionService.cs b/src/Services/MissionService.cs index 67ef893..9b981cc 100644 --- a/src/Services/MissionService.cs +++ b/src/Services/MissionService.cs @@ -42,7 +42,19 @@ public class MissionService { Viking viking = ctx.Vikings.FirstOrDefault(x => x.Id == userId)!; MissionState? missionState = viking.MissionStates.FirstOrDefault(x => x.MissionId == missionId); if (missionState != null && missionState.MissionStatus == MissionStatus.Active) { - missionState.MissionStatus = MissionStatus.Completed; + if (mission.Repeatable) { + // NOTE: This won't work if repeatable mission use sub-missions, but SoD doesn't have those repeatable mission + // NOTE: Repeatable missions needs re-login to work correctly (this looks like og bug) + // probably due to client-side cache of task payload / status + var taskStatuses = ctx.TaskStatuses.Where(e => e.VikingId == userId && e.MissionId == missionId); + foreach (var task in taskStatuses) { + task.Payload = null; + task.Completed = false; + } + missionState.MissionStatus = MissionStatus.Upcoming; + } else { + missionState.MissionStatus = MissionStatus.Completed; + } missionState.UserAccepted = null; } var rewards = achievementService.ApplyAchievementRewards(viking, mission.Rewards.ToArray());