示例#1
0
        public async Task <FullUserStats> GetUserStatsAsync(IGuildUser user)
        {
            DiscordUser du;
            UserXpStats stats = null;
            int         totalXp;
            int         globalRank;
            int         guildRank;

            using (var uow = _db.UnitOfWork)
            {
                du         = uow.DiscordUsers.GetOrCreate(user);
                totalXp    = du.TotalXp;
                globalRank = uow.DiscordUsers.GetUserGlobalRank(user.Id);
                guildRank  = uow.Xp.GetUserGuildRanking(user.Id, user.GuildId);
                stats      = uow.Xp.GetOrCreateUser(user.GuildId, user.Id);
                await uow.CompleteAsync();
            }

            return(new FullUserStats(du,
                                     stats,
                                     new LevelStats(totalXp),
                                     new LevelStats(stats.Xp + stats.AwardedXp),
                                     globalRank,
                                     guildRank));
        }
示例#2
0
        public async Task <FullUserStats> GetUserStatsAsync(IGuildUser user)
        {
            DiscordUser du;
            UserXpStats stats = null;
            int         totalXp;
            int         globalRank;
            int         guildRank;

            using (var uow = _db.UnitOfWork)
            {
                du      = uow.DiscordUsers.GetOrCreate(user);
                totalXp = du.TotalXp;

                var t1    = Task.Run(() => stats = uow.Xp.GetOrCreateUser(user.GuildId, user.Id));
                var ranks = await Task.WhenAll(
                    uow.DiscordUsers.GetUserGlobalRankingAsync(user.Id),
                    uow.Xp.GetUserGuildRankingAsync(user.Id, user.GuildId));

                await t1;
                globalRank = ranks[0];
                guildRank  = ranks[1];
            }

            return(new FullUserStats(du,
                                     stats,
                                     new LevelStats(totalXp),
                                     new LevelStats(stats.Xp + stats.AwardedXp),
                                     globalRank,
                                     guildRank));
        }
示例#3
0
 public FullUserStats(DiscordUser usr, UserXpStats fullGuildStats, LevelStats global,
                      LevelStats guild, int globalRanking, int guildRanking)
 {
     User           = usr;
     Global         = global;
     Guild          = guild;
     GlobalRanking  = globalRanking;
     GuildRanking   = guildRanking;
     FullGuildStats = fullGuildStats;
 }
示例#4
0
 public FullUserStats(DiscordUser usr,
                      UserXpStats fullGuildStats, LevelStats global,
                      LevelStats guild, int globalRanking, int guildRanking)
 {
     this.User           = usr;
     this.Global         = global;
     this.Guild          = guild;
     this.GlobalRanking  = globalRanking;
     this.GuildRanking   = guildRanking;
     this.FullGuildStats = fullGuildStats;
 }
示例#5
0
        public static (int Level, int LevelXp, int LevelRequiredXp) GetLevelData(UserXpStats stats)
        {
            var baseXp = XpService.XP_REQUIRED_LVL_1;

            var required = baseXp;
            var totalXp = 0;
            var lvl = 1;
            while (true)
            {
                required = (int)(baseXp + baseXp / 4.0 * (lvl - 1));

                if (required + totalXp > stats.Xp)
                    break;

                totalXp += required;
                lvl++;
            }

            return (lvl - 1, stats.Xp - totalXp, required);
        }