Esempio n. 1
0
        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));
            }
        }
Esempio n. 2
0
        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();
            }
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
            }
        }
Esempio n. 5
0
        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();
        }
Esempio n. 6
0
        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);
            }
        }