Files
Useful_tools/Rate_onlyBest50.py
2024-10-12 05:05:58 +01:00

150 lines
4.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# -*- coding: utf-8 -*-
import json
import os
def calculate_multiplier(max_score):
if max_score >= 990000:
return 4
elif max_score >= 980000:
return 3.75
elif max_score >= 970000:
return 3.5
elif max_score >= 960000:
return 3.25
elif max_score >= 950000:
return 3
elif max_score >= 940000:
return 2.75
elif max_score >= 920000:
return 2.5
elif max_score >= 900000:
return 2
elif max_score >= 850000:
return 1.5
elif max_score >= 800000:
return 1
elif max_score >= 700000:
return 0.8
elif max_score >= 600000:
return 0.7
elif max_score >= 500000:
return 0.6
elif max_score >= 400000:
return 0.5
elif max_score >= 300000:
return 0.4
elif max_score >= 200000:
return 0.3
elif max_score >= 100000:
return 0.2
elif max_score >= 1:
return 0.1
else:
return 0
def grade_to_name(grade):
grade_names = {
1: "NORMAL",
2: "HARD",
3: "EXPERT",
4: "INFERNO"
}
return grade_names.get(grade, "Unknown Grade")
def get_music_name(levels_dict, music_id):
music_entry = levels_dict.get(music_id, {})
return music_entry.get("name", "Unknown")
print("")
print("//////////////////////////////////////////////////////////////////////")
print("")
print("华卡音舞 Ver.3 3.50.00")
print("全曲 Rate + Best 50 计算器")
print("版本号 V0.03(1)")
print("由WOAOL项目组制作")
print("WACCA NEVER END")
print("请注意该版本计算器不区分B15和B35仅计算全曲的Best50成绩并使用V4的14定数表")
print("该版本计算器为子版本正常计算国服B50请不要用此计算器及其配套Table_output.json")
print("")
print("//////////////////////////////////////////////////////////////////////")
print("")
if not os.path.isfile('Table_output_V4.json'):
print("错误找不到Table_output.json。")
print("请将Rate_SDJE.py、Table_output_V4.json、playLog.json这三个文件放在同一目录下。")
exit()
if not os.path.isfile('playLog.json'):
print("错误找不到playLog.json。")
print("请将Rate_SDJE.py、Table_output_V4.json、playLog.json这三个文件放在同一目录下。")
exit()
with open('playLog.json', 'r', encoding='utf-8') as file:
play_logs = json.load(file)
with open('Table_output_V4.json', 'r', encoding='utf-8') as file:
table_output = json.load(file)
levels_dict = {}
for entry in table_output:
music_id = entry["music_id"]
levels_dict[music_id] = {
"name": entry["music_name"],
"levels": {
1: entry["level_nm"],
2: entry["level_hd"],
3: entry["level_ex"],
4: entry["level_in"]
},
"start_time": entry["start_time"],
"start_inf": entry["start_inf"]
}
best_50 = []
music_rates = {}
for log in play_logs:
music_id = log['music_id']
music_grade = log['music_grade']
max_score = log['max_score']
music_name = get_music_name(levels_dict, music_id)
level_data = levels_dict.get(music_id, {}).get("levels", {})
level = level_data.get(music_grade)
if level is None:
continue
multiplier = calculate_multiplier(max_score)
rate = round(multiplier * level, 1)
grade_name = grade_to_name(music_grade)
start_time = levels_dict[music_id]["start_time"]
start_inf = levels_dict[music_id]["start_inf"]
if music_name not in music_rates:
music_rates[music_name] = []
music_rates[music_name].append((grade_name, rate, max_score))
best_50.append((music_name, grade_name, rate, max_score))
# for music_name, grades_rates in music_rates.items():
# print(f"\n{music_name}")
# for grade_name, rate, max_score in grades_rates:
# if rate > 0:
# print(f" 难度: {grade_name:<16} 分数: {max_score} Rate: {rate:.1f}")
best_50_sorted = sorted(best_50, key=lambda x: x[2], reverse=True)[:50]
best_50_total = sum(rate for _, _, rate, _ in best_50_sorted)
print("\nBest 50:\n")
for music_name, grade_name, rate, max_score in best_50_sorted:
print(f"{music_name}\n 难度: {grade_name} 分数: {max_score} Rate: {rate:.1f}\n")
print("\n")
print(f"\nBest 50 合计: {best_50_total:.1f}")