|
|
|
@ -73,15 +73,27 @@ namespace Build_God_Api.Services |
|
|
|
|
|
|
|
public async Task<List<CharacterMissionProgress>> GetCharacterProgress(int characterId, int missionId) |
|
|
|
{ |
|
|
|
var dailyMission = await db.Queryable<CharacterDailyMission>() |
|
|
|
.Where(x => x.CharacterId == characterId && x.MissionId == missionId && x.Status != DailyMissionStatus.Claimed) |
|
|
|
.OrderBy(x => x.AssignedDate, OrderByType.Desc) |
|
|
|
.OrderBy(x => x.Id, OrderByType.Desc) |
|
|
|
.FirstAsync(); |
|
|
|
|
|
|
|
if (dailyMission == null) |
|
|
|
return new List<CharacterMissionProgress>(); |
|
|
|
|
|
|
|
return await db.Queryable<CharacterMissionProgress>() |
|
|
|
.Where(x => x.CharacterId == characterId && x.MissionId == missionId) |
|
|
|
.Where(x => x.DailyMissionId == dailyMission.Id) |
|
|
|
.ToListAsync(); |
|
|
|
} |
|
|
|
|
|
|
|
public async Task<bool> UpdateCharacterProgress(int characterId, int missionProgressId, int count) |
|
|
|
{ |
|
|
|
var progress = await db.Queryable<CharacterMissionProgress>() |
|
|
|
.FirstAsync(x => x.CharacterId == characterId && x.MissionProgressId == missionProgressId); |
|
|
|
.Where(x => x.CharacterId == characterId && x.MissionProgressId == missionProgressId && x.DailyMissionId > 0) |
|
|
|
.OrderBy(x => x.UpdatedOn, OrderByType.Desc) |
|
|
|
.OrderBy(x => x.Id, OrderByType.Desc) |
|
|
|
.FirstAsync(); |
|
|
|
|
|
|
|
if (progress == null) |
|
|
|
throw new Exception("角色进度不存在"); |
|
|
|
@ -100,9 +112,18 @@ namespace Build_God_Api.Services |
|
|
|
|
|
|
|
public async Task<bool> InitCharacterProgress(int characterId, int missionId) |
|
|
|
{ |
|
|
|
var dailyMission = await db.Queryable<CharacterDailyMission>() |
|
|
|
.Where(x => x.CharacterId == characterId && x.MissionId == missionId && x.Status != DailyMissionStatus.Claimed) |
|
|
|
.OrderBy(x => x.AssignedDate, OrderByType.Desc) |
|
|
|
.OrderBy(x => x.Id, OrderByType.Desc) |
|
|
|
.FirstAsync(); |
|
|
|
|
|
|
|
if (dailyMission == null) |
|
|
|
return true; |
|
|
|
|
|
|
|
// 检查是否已经初始化过
|
|
|
|
var existing = await db.Queryable<CharacterMissionProgress>() |
|
|
|
.AnyAsync(x => x.CharacterId == characterId && x.MissionId == missionId); |
|
|
|
.AnyAsync(x => x.DailyMissionId == dailyMission.Id); |
|
|
|
|
|
|
|
if (existing) |
|
|
|
return true; |
|
|
|
@ -118,6 +139,7 @@ namespace Build_God_Api.Services |
|
|
|
var characterProgress = new CharacterMissionProgress |
|
|
|
{ |
|
|
|
CharacterId = characterId, |
|
|
|
DailyMissionId = dailyMission.Id, |
|
|
|
MissionId = missionId, |
|
|
|
MissionProgressId = progress.Id, |
|
|
|
CurrentCount = 0, |
|
|
|
@ -163,8 +185,7 @@ namespace Build_God_Api.Services |
|
|
|
// 获取角色进度
|
|
|
|
var characterProgress = await db.Queryable<CharacterMissionProgress>() |
|
|
|
.FirstAsync(x => |
|
|
|
x.CharacterId == characterId && |
|
|
|
x.MissionId == dailyMission.MissionId && |
|
|
|
x.DailyMissionId == dailyMission.Id && |
|
|
|
x.MissionProgressId == matchingProgress.Id); |
|
|
|
|
|
|
|
if (characterProgress == null) |
|
|
|
@ -172,6 +193,7 @@ namespace Build_God_Api.Services |
|
|
|
characterProgress = new CharacterMissionProgress |
|
|
|
{ |
|
|
|
CharacterId = characterId, |
|
|
|
DailyMissionId = dailyMission.Id, |
|
|
|
MissionId = dailyMission.MissionId, |
|
|
|
MissionProgressId = matchingProgress.Id, |
|
|
|
CurrentCount = 0, |
|
|
|
@ -193,10 +215,11 @@ namespace Build_God_Api.Services |
|
|
|
|
|
|
|
// 检查任务是否全部完成
|
|
|
|
var allProgresses = await db.Queryable<CharacterMissionProgress>() |
|
|
|
.Where(x => x.CharacterId == characterId && x.MissionId == dailyMission.MissionId) |
|
|
|
.Where(x => x.DailyMissionId == dailyMission.Id) |
|
|
|
.ToListAsync(); |
|
|
|
|
|
|
|
bool allCompleted = allProgresses.All(p => p.IsCompleted); |
|
|
|
bool allCompleted = mission.Progresses.All(p => |
|
|
|
allProgresses.Any(cp => cp.MissionProgressId == p.Id && cp.IsCompleted)); |
|
|
|
|
|
|
|
if (allCompleted) |
|
|
|
{ |
|
|
|
|