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());