def return_beatmap(mod_s, file_name): try: file = requests.get(b_info.main(file_name)).text.splitlines() except: print("ERROR: " + file_name + " not a valid beatmap") sys.exit(1) map = Beatmap(file) mod.dt = 0 mod.ez = 0 mod.fl = 0 mod.hd = 0 mod.hr = 0 mod.ht = 0 mod.nc = 0 mod.nf = 0 mod.so = 0 if mod_s != "": mod_s = [mod_s[i:i + 2] for i in range(0, len(mod_s), 2)] for m in mod_s: set_mods(mod, m) mod.update() map.apply_mods(mod) return map
def return_values(c100_s, c50_s, misses_s, combo_s, file_name, mod_s): try: file = requests.get(b_info.main(file_name)).text.splitlines() except: print("ERROR: " + file_name + " not a valid beatmap") sys.exit(1) map = Beatmap(file) if combo_s == "": combo = map.max_combo else: combo = int(combo_s) mod_s = mod_s.upper() mod.dt = 0 mod.ez = 0 mod.fl = 0 mod.hd = 0 mod.hr = 0 mod.ht = 0 mod.nc = 0 mod.nf = 0 mod.so = 0 if mod_s != "": mod_s = [mod_s[i:i + 2] for i in range(0, len(mod_s), 2)] for m in mod_s: set_mods(mod, m) mod.update() if c100_s == "": c100 = 0 else: c100 = int(c100_s) if c50_s == "": c50 = 0 else: c50 = int(c50_s) if misses_s == "": misses = 0 else: misses = int(misses_s) mod_string = mod_str(mod) map.apply_mods(mod) diff = diff_calc.main(map) pp, aim_value, speed_value, acc_value = pp_calc.pp_calc(diff[0], diff[1], diff[3], misses, c100, c50, mod, combo) return pp
def load_from_score_info(self, score_info): self.beatmap_id = int(score_info["beatmap_id"]) self.score_id = int(score_info["score_id"]) self.score = int(score_info["score"]) self.maxcombo = int(score_info["maxcombo"]) self.count50 = int(score_info["count50"]) self.count100 = int(score_info["count100"]) self.count300 = int(score_info["count300"]) self.countmiss = int(score_info["countmiss"]) self.countkatu = int(score_info["countkatu"]) self.countgeki = int(score_info["countgeki"]) self.perfect = bool(int(score_info["perfect"])) self.enabled_mods = val_to_mod_list(int(score_info["enabled_mods"])) self.rank = score_info["rank"] self.user_id = int(score_info["user_id"]) self.date = score_info["date"] self.rank = score_info["rank"] self.pp = float(score_info["pp"]) self.replay_available = bool(int(score_info["replay_available"])) #following are supplementary information self.available_mods = [] for mod in self.enabled_mods: if mod in [ AllMods.Easy, AllMods.HardRock, AllMods.DoubleTime, AllMods.HalfTime ]: self.available_mods.append(mod) self.beatmap = Beatmap(map_id=self.beatmap_id, mod_list=self.available_mods) self.acc = calculate_pp.acc_calc(self.count300, self.count100, self.count50, self.countmiss)
def from_reader(r: Reader): db = Database() db.version = r.read_int32() db.folder_count = r.read_int32() db.account_unlocked = r.read_boolean() db.unlock_date = r.read_ticks() db.username = r.read_string() db.beatmap_count = r.read_int32() db.beatmaps = [Beatmap.from_reader(r) for x in range(db.beatmap_count)] db.user_level = r.read_int16() return db
def process_osu_files(map_dir) -> List[Beatmap]: folder_name = os.path.basename(map_dir) map_files = [ os.path.join(map_dir, f) for f in os.listdir(map_dir) if f.endswith('.osu') ] beatmaps = [] for map_file in map_files: beatmap = Beatmap.from_osu_file(map_file, folder_name) beatmaps.append(beatmap) return beatmaps
def return_values(c100, c50, misses, combo, map_id, mod_s): try: file = requests.get( "https://osu.ppy.sh/osu/{}".format(map_id)).text.splitlines() except: print("ERROR: " + file_name + " not a valid beatmap or API key is incorrect") sys.exit(1) map = Beatmap(file) mod.dt = 0 mod.ez = 0 mod.fl = 0 mod.hd = 0 mod.hr = 0 mod.ht = 0 mod.nc = 0 mod.nf = 0 mod.so = 0 if mod_s != 0: set_mods(mod, mod_s) mod.update() mod_string = mod_str(mod) map.apply_mods(mod) diff = diff_calc.main(map) pp = pp_calc.pp_calc(diff[0], diff[1], diff[3], misses, c100, c50, mod, combo) title = map.artist + " - " + map.title + "[" + map.version + "]" if mod_string != "": title += "+" + mod_string title += " (" + map.creator + ")" return (str(title), pp[0].pp)
except: raise Exception("Invalid config") try: file_name = args.file if feature: if key == "": print("Please enter an API key to use this feature.") raise () file = requests.get(b_info.main(file_name, key)).text.splitlines() else: file = open(file_name) except: print("ERROR: " + file_name + " not a valid beatmap or API key is incorrect") sys.exit(1) map = Beatmap(file) if combo == 0 or combo > map.max_combo: combo = map.max_combo def mod_str(mod): string = "" if mod.nf: string += "NF" if mod.ez: string += "EZ" if mod.hd: string += "HD" if mod.hr: string += "HR" if mod.dt:
def return_values(c100_s, c50_s, misses_s, combo_s, file_name, mod_s, balancing_values): try: file = requests.get(b_info.main(file_name)).text.splitlines() except: print("ERROR: " + file_name + " not a valid beatmap") sys.exit(1) map = Beatmap(file) if combo_s == "": combo = map.max_combo else: combo = int(combo_s) mod_s = mod_s.upper() mod.dt = 0 mod.ez = 0 mod.fl = 0 mod.hd = 0 mod.hr = 0 mod.ht = 0 mod.nc = 0 mod.nf = 0 mod.so = 0 if mod_s != "": mod_s = [mod_s[i:i + 2] for i in range(0, len(mod_s), 2)] for m in mod_s: set_mods(mod, m) mod.update() if c100_s == "": c100 = 0 else: c100 = int(c100_s) if c50_s == "": c50 = 0 else: c50 = int(c50_s) if misses_s == "": misses = 0 else: misses = int(misses_s) mod_string = mod_str(mod) map.apply_mods(mod) diff = diff_calc.main(map, balancing_values) pp, aim_value, speed_value, acc_value, length_bonus, new_length_bonus, speed_length = pp_calc.pp_calc( diff[0], diff[1], diff[3], diff[4], diff[5], misses, c100, c50, mod, combo) title = map.artist + " - " + map.title + "[" + map.version + "]" if mod_string != "": title += "+" + mod_string title += " (" + map.creator + ")\n" map_s = "Map: {}\n".format(title) difficulty_settings = "AR: {:.2f} CS: {:.2f} OD: {:.2f}\n".format( map.ar, map.cs, map.od) stars = "Stars: {:.2f}\n".format(diff[2]) acc = "Acc: {:.2f}%\n\n".format(pp.acc_percent) circle_s = "Circles: {}\n".format(map.num_circles) slider_s = "Sliders: {}\n".format(map.num_sliders) spinner_s = "Spinners: {}\n".format(map.num_spinners) object_s = "Objects: {}\n\n".format(map.num_objects) comb_s = "Combo: {}/{}\n".format(int(combo), int(map.max_combo)) miss_s = "Misses: {}\n\n".format(misses) aim_vs = "Aim Value: {:.2f}PP\n".format(aim_value) speed_vs = "Speed Value: {:.2f}PP\n".format(speed_value) acc_vs = "Acc Value: {:.2f}PP\n\n".format(acc_value) aim_ts = "Aim Total Value: {:.0f}\n".format(diff[6][1]) speed_ts = "Speed Total Value: {:.0f}\n\n".format(diff[7][1]) length_os = "Old Length Bonus: {:.4f}\n".format(length_bonus) length_as = "New Length Bonus: {:.4f}\n\n".format(new_length_bonus) pp_s = "Performance: {:.2f}PP\n".format(pp.pp) return (map_s + difficulty_settings + stars + acc + circle_s + slider_s + spinner_s + object_s + comb_s + miss_s + aim_vs + speed_vs + acc_vs + aim_ts + speed_ts + length_os + length_as + pp_s)