private async Task InternalCheckAsync(BasePacket packet) { long userId = packet.discordUser.Id.ToDbLong(); using (var context = new MikiContext()) { Achievement a = await DatabaseHelpers.GetAchievementAsync(context, userId, Name); if (a == null) { if (await Achievements[0].CheckAsync(packet)) { await AchievementManager.Instance.UnlockAsync(Achievements[0], packet.discordChannel, packet.discordUser); await AchievementManager.Instance.CallAchievementUnlockEventAsync(Achievements[0], packet.discordUser, packet.discordChannel); } return; } if (a.Rank >= Achievements.Count - 1) { return; } if (await Achievements[a.Rank + 1].CheckAsync(packet)) { await AchievementManager.Instance.UnlockAsync(Achievements[a.Rank + 1], packet.discordChannel, packet.discordUser, a.Rank + 1); await AchievementManager.Instance.CallAchievementUnlockEventAsync(Achievements[a.Rank + 1], packet.discordUser, packet.discordChannel); } } }
public async Task <bool> UnlockIsValid(IAchievement achievement, long userId, int newRank) { using (var scope = MikiApp.Instance.Services.CreateScope()) { var context = scope.ServiceProvider.GetService <MikiDbContext>(); var achievementObject = await DatabaseHelpers.GetAchievementAsync(context, userId, achievement.ParentName); // If no achievement has been found and want to unlock first if (achievementObject == null && newRank == 0) { achievementObject = context.Achievements.Add(new Achievement() { UserId = userId, Name = achievement.ParentName, Rank = 0, UnlockedAt = DateTime.UtcNow }).Entity; await DatabaseHelpers.UpdateCacheAchievementAsync(userId, achievement.Name, achievementObject); await context.SaveChangesAsync(); return(true); } // If achievement we want to unlock is the next achievement if (achievementObject != null) { if (achievementObject.Rank == newRank - 1) { achievementObject.Rank++; } else { return(false); } await DatabaseHelpers.UpdateCacheAchievementAsync(userId, achievement.ParentName, achievementObject); await context.SaveChangesAsync(); return(true); } } return(false); }
internal async Task <bool> UnlockIsValid(long userId, int newRank) { using (var context = new MikiContext()) { var achievement = await DatabaseHelpers.GetAchievementAsync(context, userId, ParentName); // If no achievement has been found and want to unlock first if (achievement == null && newRank == 0) { achievement = context.Achievements.Add(new Achievement() { Id = userId, Name = ParentName, Rank = 0 }).Entity; await DatabaseHelpers.UpdateCacheAchievementAsync(userId, Name, achievement); await context.SaveChangesAsync(); return(true); } // If achievement we want to unlock is the next achievement if (achievement != null) { if (achievement.Rank == newRank - 1) { achievement.Rank++; } else { return(false); } await DatabaseHelpers.UpdateCacheAchievementAsync(userId, ParentName, achievement); await context.SaveChangesAsync(); return(true); } } return(false); }