示例#1
0
        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);
                }
            }
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }