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