repeatable mission support

This commit is contained in:
Robert Paciorek 2023-09-05 11:10:11 +00:00 committed by Spirtix
parent ed8cba8159
commit 9b1609c6ad
2 changed files with 19 additions and 7 deletions

View File

@ -48958,7 +48958,7 @@
<maxa>500</maxa>
<cid>0</cid>
</AR>
<RPT>false</RPT>
<RPT>true</RPT>
</Mission>
<Mission>
<I>2195</I>
@ -64083,7 +64083,7 @@
<maxa>500</maxa>
<cid>0</cid>
</AR>
<RPT>false</RPT>
<RPT>true</RPT>
</Mission>
<Mission>
<I>1321</I>
@ -80758,7 +80758,7 @@
<maxa>5</maxa>
<cid>0</cid>
</AR>
<RPT>false</RPT>
<RPT>true</RPT>
</Mission>
<Mission>
<I>2837</I>
@ -83710,7 +83710,7 @@
<maxa>500</maxa>
<cid>0</cid>
</AR>
<RPT>false</RPT>
<RPT>true</RPT>
</Mission>
<Mission>
<I>2499</I>
@ -94575,7 +94575,7 @@
<maxa>500</maxa>
<cid>0</cid>
</AR>
<RPT>false</RPT>
<RPT>true</RPT>
</Mission>
<Mission>
<I>2667</I>
@ -114543,7 +114543,7 @@
<maxa>500</maxa>
<cid>0</cid>
</AR>
<RPT>false</RPT>
<RPT>true</RPT>
</Mission>
<Mission>
<I>2690</I>

View File

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