public static async Task <Match> ReadMatch(this SerializationReader reader) { var match = new Match(); reader.ReadInt16(); // match id reader.ReadByte(); // in progress match.Type = (MatchTypes)reader.ReadByte(); match.ActiveMods = (Mods)reader.ReadInt32(); match.GameName = reader.ReadString(); match.GamePassword = reader.ReadString(); reader.ReadString(); // beatmap name match.BeatmapId = reader.ReadInt32(); match.BeatmapChecksum = reader.ReadString(); match.Beatmap = (await BeatmapManager.Get(match.BeatmapChecksum)).Item2; foreach (var slot in match.Slots) { slot.Status = (SlotStatus)reader.ReadByte(); } foreach (var slot in match.Slots) { slot.Team = (SlotTeams)reader.ReadByte(); } foreach (var slot in match.Slots) { if ((slot.Status & SlotStatus.HasPlayer) > 0) { reader.ReadInt32(); } } match.Host = PresenceManager.GetPresenceById(reader.ReadInt32()); match.PlayMode = (PlayMode)reader.ReadByte(); match.ScoringType = (MatchScoringTypes)reader.ReadByte(); match.TeamType = (MatchTeamTypes)reader.ReadByte(); match.FreeMods = reader.ReadBoolean(); if (match.FreeMods) { foreach (var slot in match.Slots) { slot.Mods = (Mods)reader.ReadInt32(); } } match.Seed = reader.ReadInt32(); return(match); }
public static async Task RecalculatePerformance(Presence pr, string channel, string message, string[] args) { await ChannelManager.BotMessage(pr, channel, "Start recalculating performance points..."); await using (var db = MySqlProvider.GetDbConnection()) { var scores = await db.QueryAsync <DbScore>("SELECT * FROM Scores"); await ChannelManager.BotMessage(pr, channel, $"Scores to re-calculate: {scores.Count()}"); foreach (var score in scores) { try { var beatmap = (await BeatmapManager.Get(score.FileChecksum)); if (beatmap.Item1 is RankedStatus.NotSubmitted or RankedStatus.NeedUpdate) { continue; } double pp = 0; if (beatmap.Item2.Status == RankedStatus.Loved) { pp = 0; } else { pp = await Calculator.CalculatePerformancePoints(score); } await db.ExecuteAsync($"UPDATE Scores SET PerformancePoints = @PP WHERE Id = {score.Id}", new { PP = pp }); } catch { // ignored } } } await ChannelManager.BotMessage(pr, channel, "Done!"); }
public static async Task UBan(Presence pr, string channel, string message, string[] args) { var user = Base.UserCache[args[0]]; if (!user.Banned()) { await ChannelManager.BotMessage(pr, channel, $"Bye, bye, {user.Username}"); user.Privileges &= ~Privileges.Normal; await using (var db = MySqlProvider.GetDbConnection()) await db.ExecuteAsync($"UPDATE Users SET Privileges = {(int)user.Privileges} WHERE Id = {user.Id}"); var target = PresenceManager.GetPresenceById(user.Id); if (target is not null) { await target.LoginReply(LoginReplies.WrongCredentials); await target.Notification("Your account is banned."); } new Thread(async() => { IEnumerable <DbScore> scores = null; await using (var db = MySqlProvider.GetDbConnection()) { scores = await db.QueryAsync <DbScore>($"SELECT * FROM Scores " + $"WHERE UserId = {user.Id} " + $"AND Completed = {(int)CompletedStatus.Best}"); } foreach (var score in scores) { var lbMode = score.Relaxing ? LeaderboardMode.Relax : LeaderboardMode.Vanilla; var beatmap = (await BeatmapManager.Get(score.FileChecksum, "", 0, true, score.PlayMode)).Item2; if (beatmap is not null) { await beatmap.UpdateLeaderboard(lbMode, score.PlayMode); } } }).Start(); } else { await ChannelManager.BotMessage(pr, channel, $"Welcome back, {user.Username}"); user.Privileges |= Privileges.Normal; await using (var db = MySqlProvider.GetDbConnection()) { await db.ExecuteAsync($"UPDATE Users SET Privileges = {(int)user.Privileges} WHERE Id = {user.Id}"); } new Thread(async() => { IEnumerable <DbScore> scores = null; await using (var db = MySqlProvider.GetDbConnection()) { scores = await db.QueryAsync <DbScore>($"SELECT * FROM Scores " + $"WHERE UserId = {user.Id} " + $"AND Completed = {(int)CompletedStatus.Best}"); } foreach (var score in scores) { var lbMode = score.Relaxing ? LeaderboardMode.Relax : LeaderboardMode.Vanilla; var beatmap = (await BeatmapManager.Get(score.FileChecksum, "", 0, true, score.PlayMode)).Item2; if (beatmap is not null) { await beatmap.UpdateLeaderboard(lbMode, score.PlayMode); } } }).Start(); } }