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)); }
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)); }
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; }
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; }
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); }