public override void Execute() { var ruleset = Ruleset; var mods = getMods(ruleset).ToArray(); var workingBeatmap = new ProcessorWorkingBeatmap(Beatmap); var beatmap = workingBeatmap.GetPlayableBeatmap(ruleset.RulesetInfo, mods); var beatmapMaxCombo = GetMaxCombo(beatmap); var maxCombo = Combo ?? (int)Math.Round(PercentCombo / 100 * beatmapMaxCombo); var statistics = GenerateHitResults(Accuracy / 100, beatmap, Misses, Mehs, Goods); var score = Score; var accuracy = GetAccuracy(statistics); var scoreInfo = new ScoreInfo { Accuracy = accuracy, MaxCombo = maxCombo, Statistics = statistics, Mods = mods, TotalScore = score }; var categoryAttribs = new Dictionary <string, double>(); double pp = ruleset.CreatePerformanceCalculator(workingBeatmap, scoreInfo).Calculate(categoryAttribs); if (OutputAsJSON ?? false) { var playInfo = new Dictionary <string, dynamic>(); WritePlayInfoToDict(playInfo, scoreInfo, beatmap); OutputJSON(new SimulationResults { BeatmapInfo = workingBeatmap.BeatmapInfo.ToString(), Mods = mods.Select(m => m.Acronym).ToList(), CategoryAttribs = categoryAttribs, PlayInfo = playInfo, PP = pp }); } else { Console.WriteLine(workingBeatmap.BeatmapInfo.ToString()); WritePlayInfo(scoreInfo, beatmap); WriteAttribute("Mods", mods.Length > 0 ? mods.Select(m => m.Acronym).Aggregate((c, n) => $"{c}, {n}") : "None"); foreach (var kvp in categoryAttribs) { WriteAttribute(kvp.Key, kvp.Value.ToString(CultureInfo.InvariantCulture)); } WriteAttribute("pp", pp.ToString(CultureInfo.InvariantCulture)); } }
public void Execute() { var workingBeatmap = new ProcessorWorkingBeatmap(command.Beatmap); var scoreParser = new ProcessorScoreParser(workingBeatmap); foreach (var f in command.Replays) { Score score; using (var stream = File.OpenRead(f)) score = scoreParser.Parse(stream); workingBeatmap.Mods.Value = score.Mods; // Convert + process beatmap IBeatmap converted = workingBeatmap.GetPlayableBeatmap(score.Ruleset); var categoryAttribs = new Dictionary <string, double>(); double pp = score.Ruleset.CreateInstance().CreatePerformanceCalculator(converted, score).Calculate(categoryAttribs); command.Console.WriteLine(f); writeAttribute("Player", score.User.Username); writeAttribute("Mods", score.Mods.Length > 0 ? score.Mods.Select(m => m.ShortenedName).Aggregate((c, n) => $"{c}, {n}") : "None"); foreach (var kvp in categoryAttribs) { writeAttribute(kvp.Key, kvp.Value.ToString(CultureInfo.InvariantCulture)); } writeAttribute("pp", pp.ToString(CultureInfo.InvariantCulture)); command.Console.WriteLine(); } }
public override void Execute() { var ruleset = Ruleset; var mods = getMods(ruleset).ToArray(); var workingBeatmap = new ProcessorWorkingBeatmap(Beatmap); var beatmap = workingBeatmap.GetPlayableBeatmap(ruleset.RulesetInfo, mods); var beatmapMaxCombo = GetMaxCombo(beatmap); var maxCombo = Combo ?? (int)Math.Round(PercentCombo / 100 * beatmapMaxCombo); var statistics = GenerateHitResults(Accuracy / 100, beatmap, Misses, Mehs, Goods); var score = Score; var accuracy = GetAccuracy(statistics); var scoreInfo = new ScoreInfo { Accuracy = accuracy, MaxCombo = maxCombo, Statistics = statistics, Mods = mods, TotalScore = score, RulesetID = Ruleset.RulesetInfo.ID ?? 0 }; var categoryAttribs = new Dictionary <string, double>(); double pp = ruleset.CreatePerformanceCalculator(workingBeatmap, scoreInfo).Calculate(categoryAttribs); System.Console.WriteLine(pp); }
public override void Execute() { var ruleset = Ruleset; var mods = getMods(ruleset).ToArray(); var workingBeatmap = new ProcessorWorkingBeatmap(Beatmap); var beatmap = workingBeatmap.GetPlayableBeatmap(ruleset.RulesetInfo, mods); var beatmapMaxCombo = GetMaxCombo(beatmap); var maxCombo = Combo ?? (int)Math.Round(PercentCombo / 100 * beatmapMaxCombo); var statistics = GenerateHitResults(Accuracy / 100, beatmap, Misses, Mehs, Goods); var score = Score; var accuracy = GetAccuracy(statistics); var scoreInfo = new ScoreInfo { Accuracy = accuracy, MaxCombo = maxCombo, Statistics = statistics, Mods = mods, TotalScore = score, RulesetID = Ruleset.RulesetInfo.ID ?? 0 }; var categoryAttribs = new Dictionary <string, double>(); double pp = ruleset.CreatePerformanceCalculator(workingBeatmap, scoreInfo).Calculate(categoryAttribs); if (OutputJson) { var o = new JObject { { "Beatmap", workingBeatmap.BeatmapInfo.ToString() } }; foreach (var info in getPlayValues(scoreInfo, beatmap)) { o[info.Key] = info.Value; } o["Mods"] = mods.Length > 0 ? mods.Select(m => m.Acronym).Aggregate((c, n) => $"{c}, {n}") : "None"; foreach (var kvp in categoryAttribs) { o[kvp.Key] = kvp.Value; } o["pp"] = pp; string json = o.ToString(); Console.Write(json); if (OutputFile != null) { File.WriteAllText(OutputFile, json); } } else { var document = new Document(); document.Children.Add(new Span(workingBeatmap.BeatmapInfo.ToString()), "\n"); document.Children.Add(new Span(GetPlayInfo(scoreInfo, beatmap)), "\n"); document.Children.Add(new Span(GetAttribute("Mods", mods.Length > 0 ? mods.Select(m => m.Acronym).Aggregate((c, n) => $"{c}, {n}") : "None")), "\n"); foreach (var kvp in categoryAttribs) { document.Children.Add(new Span(GetAttribute(kvp.Key, kvp.Value.ToString(CultureInfo.InvariantCulture))), "\n"); } document.Children.Add(new Span(GetAttribute("pp", pp.ToString(CultureInfo.InvariantCulture)))); OutputDocument(document); } }
public override void Execute() { var ruleset = new OsuRuleset(); var allLines = File.ReadAllLines(ScoreSetsPath).Select(a => a.Split(',')); var lines = allLines.Where(l => l[0] == SetName); var sw = new StringWriter(); sw.WriteLine("ID, Beatmap, Mods, Combo, Max Combo, Accuracy, Aim pp, Tap pp, Acc pp, pp"); foreach (var l in lines) { var s = new Score(l); var mods = s.Mods.ToArray(); string beatmapID = s.ID; string cachePath = Path.Combine("cache", $"{beatmapID}.osu"); if (!File.Exists(cachePath)) { Console.WriteLine($"Downloading {beatmapID}.osu..."); new FileWebRequest(cachePath, $"{base_url}/osu/{beatmapID}").Perform(); } var workingBeatmap = new ProcessorWorkingBeatmap(cachePath); var beatmap = workingBeatmap.GetPlayableBeatmap(ruleset.RulesetInfo, mods); var beatmapMaxCombo = getMaxCombo(beatmap); var maxCombo = (int)Math.Round(s.PercentCombo / 100 * beatmapMaxCombo); var accuracy = s.Accuracy; var statistics = generateHitResults(accuracy, beatmap, s.MissCount); var scoreInfo = new ScoreInfo { Accuracy = accuracy, MaxCombo = maxCombo, Statistics = statistics, Mods = mods, }; var categoryAttribs = new Dictionary <string, double>(); double pp = ruleset.CreatePerformanceCalculator(workingBeatmap, scoreInfo).Calculate(categoryAttribs); var resultLine = new List <string>() { beatmap.BeatmapInfo.OnlineBeatmapID.ToString(), beatmap.BeatmapInfo.ToString().Replace(",", ";"), string.Join("", s.ModStrings), maxCombo.ToString(), beatmapMaxCombo.ToString(), (accuracy * 100).ToString("F2"), categoryAttribs["Aim"].ToString("F2"), categoryAttribs["Tap"].ToString("F2"), categoryAttribs["Accuracy"].ToString("F2"), pp.ToString("F2") }; sw.WriteLine(string.Join(", ", resultLine)); } if (OutputFile == null) { Console.Write(sw.ToString()); } else { File.WriteAllText(OutputFile, sw.ToString()); } sw.Dispose(); }
public override void Execute() { var ruleset = Ruleset; var mods = GetMods(ruleset).ToArray(); if (!Beatmap.EndsWith(".osu")) { if (!int.TryParse(Beatmap, out _)) { Console.WriteLine("Incorrect beatmap ID."); return; } string cachePath = Path.Combine("cache", $"{Beatmap}.osu"); if (!File.Exists(cachePath)) { Console.WriteLine($"Downloading {Beatmap}.osu..."); new FileWebRequest(cachePath, $"https://osu.ppy.sh/osu/{Beatmap}").Perform(); } Beatmap = cachePath; } var workingBeatmap = new ProcessorWorkingBeatmap(Beatmap); var beatmap = workingBeatmap.GetPlayableBeatmap(ruleset.RulesetInfo, mods); var beatmapMaxCombo = GetMaxCombo(beatmap); var maxCombo = Combo ?? (int)Math.Round(PercentCombo / 100 * beatmapMaxCombo); var statistics = GenerateHitResults(Accuracy / 100, beatmap, Misses, Mehs, Goods); var score = Score; var accuracy = GetAccuracy(statistics); var scoreInfo = new ScoreInfo { Accuracy = accuracy, MaxCombo = maxCombo, Statistics = statistics, Mods = mods, TotalScore = score, RulesetID = Ruleset.RulesetInfo.ID ?? 0 }; var difficultyCalculator = ruleset.CreateDifficultyCalculator(workingBeatmap); var difficultyAttributes = difficultyCalculator.Calculate(LegacyHelper.TrimNonDifficultyAdjustmentMods(ruleset, scoreInfo.Mods).ToArray()); var performanceCalculator = ruleset.CreatePerformanceCalculator(difficultyAttributes, scoreInfo); var categoryAttribs = new Dictionary <string, double>(); double pp = performanceCalculator.Calculate(categoryAttribs); if (OutputJson) { var o = new JObject { { "Beatmap", workingBeatmap.BeatmapInfo.ToString() } }; foreach (var info in getPlayValues(scoreInfo, beatmap)) { o[info.Key] = info.Value; } o["Mods"] = mods.Length > 0 ? mods.Select(m => m.Acronym).Aggregate((c, n) => $"{c}, {n}") : "None"; foreach (var kvp in categoryAttribs) { o[kvp.Key] = kvp.Value; } o["pp"] = pp; string json = o.ToString(); Console.Write(json); if (OutputFile != null) { File.WriteAllText(OutputFile, json); } } else { var document = new Document(); document.Children.Add(new Span(workingBeatmap.BeatmapInfo.ToString()), "\n"); document.Children.Add(new Span(GetPlayInfo(scoreInfo, beatmap)), "\n"); document.Children.Add(new Span(GetAttribute("Mods", mods.Length > 0 ? mods.Select(m => m.Acronym).Aggregate((c, n) => $"{c}, {n}") : "None")), "\n"); foreach (var kvp in categoryAttribs) { document.Children.Add(new Span(GetAttribute(kvp.Key, kvp.Value.ToString(CultureInfo.InvariantCulture))), "\n"); } document.Children.Add(new Span(GetAttribute("pp", pp.ToString(CultureInfo.InvariantCulture)))); OutputDocument(document); } }