import pandas as pd
# Hardcoded milestone table data
milestone_data = {
"Milestone": [
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83, 84, 85, 86, 87, 88
],
"Level": [
2, 2, 3, 3, 4, 4, 5, 5, 5, 5,
6, 6, 7, 7, 7, 8, 8, 8, 9, 9,
9, 9, 10, 10, 10, 10, 11, 11, 11, 11,
12, 12, 12, 12, 13, 13, 13, 13, 13, 13,
14, 14, 14, 14, 14, 14, 14, 14, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 16, 16,
16, 16, 17, 17, 17, 17, 17, 17, 18, 18,
18, 18, 18, 18, 18, 18, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 20
],
"slowXP": [
3000.0, 5250.0, 7500.0, 10750.0, 14000.0, 18500.0, 23000.0, 26000.0, 29000.0, 32000.0,
35000.0, 44000.0, 53000.0, 61000.0, 69000.0, 77000.0, 89666.66666666667, 102333.33333333331, 115000.0, 126250.0,
137500.0, 148750.0, 160000.0, 178750.0, 197500.0, 216250.0, 235000.0, 258750.0, 282500.0, 306250.0,
330000.0, 366250.0, 402500.0, 438750.0, 475000.0, 506666.6666666667, 538333.3333333334, 570000.0, 601666.6666666666, 633333.3333333334,
665000.0, 701250.0, 737500.0, 773750.0, 810000.0, 846250.0, 882500.0, 918750.0, 955000.0, 973000.0,
991000.0, 1009000.0, 1027000.0, 1045000.0, 1063000.0, 1081000.0, 1099000.0, 1117000.0, 1135000.0, 1326250.0,
1517500.0, 1708750.0, 1900000.0, 2033333.3333333333, 2166666.6666666665, 2300000.0, 2433333.333333333, 2566666.666666667, 2700000.0, 2843750.0,
2987500.0, 3131250.0, 3275000.0, 3418750.0, 3562500.0, 3706250.0, 3850000.0, 3975000.0, 4100000.0, 4225000.0,
4350000.0, 4475000.0, 4600000.0, 4725000.0, 4850000.0, 4975000.0, 5100000.0, 5225000.0, 5350000.0
],
"mediumXP": [
2000.0, 3500.0, 5000.0, 7000.0, 9000.0, 12000.0, 15000.0, 17000.0, 19000.0, 21000.0,
23000.0, 29000.0, 35000.0, 40333.333333333336, 45666.66666666666, 51000.0, 59000.0, 67000.0, 75000.0, 82500.0,
90000.0, 97500.0, 105000.0, 117500.0, 130000.0, 142500.0, 155000.0, 171250.0, 187500.0, 203750.0,
220000.0, 243750.0, 267500.0, 291250.0, 315000.0, 336666.6666666667, 358333.3333333333, 380000.0, 401666.6666666667, 423333.3333333334,
445000.0, 468750.0, 492500.0, 516250.0, 540000.0, 563750.0, 587500.0, 611250.0, 635000.0, 660500.0,
686000.0, 711500.0, 737000.0, 762500.0, 788000.0, 813500.0, 839000.0, 864500.0, 890000.0, 992500.0,
1095000.0, 1197500.0, 1300000.0, 1383333.3333333333, 1466666.6666666667, 1550000.0, 1633333.3333333333, 1716666.6666666665, 1800000.0, 1893750.0,
1987500.0, 2081250.0, 2175000.0, 2268750.0, 2362500.0, 2456250.0, 2550000.0, 2637500.0, 2725000.0, 2812500.0,
2900000.0, 2987500.0, 3075000.0, 3162500.0, 3250000.0, 3337500.0, 3425000.0, 3512500.0, 3600000.0
]
}
df = pd.DataFrame(milestone_data)
def get_status(xp_input, speed):
xp_col = 'mediumXP' if speed == 'medium' else 'slowXP'
df['Diff'] = abs(df[xp_col] - xp_input)
closest = df.loc[df['Diff'].idxmin()]
milestone = int(closest['Milestone'])
xp_at_milestone = closest[xp_col]
level = int(closest['Level'])
# determine start and end milestones for this level
start = int(df[df['Level'] == level]['Milestone'].min())
nxt = df[df['Level'] > level]
end = int(nxt['Milestone'].min()) if not nxt.empty else start
gained = milestone - start
needed = end - start
# double for slow progression
if speed == 'slow':
milestone *= 2
gained *= 2
needed *= 2
return milestone, xp_at_milestone, level, gained, needed
def main():
speed = input("Use 'medium' or 'slow' XP progression? ").strip().lower()
if speed not in ('medium', 'slow'):
print("Invalid choice. Choose 'medium' or 'slow'.")
return
try:
xp_input = int(input("Enter your XP amount: "))
except ValueError:
print("Please enter a valid integer.")
return
milestone, xp_val, level, gained, needed = get_status(xp_input, speed)
print(f"[{speed.capitalize()} XP] Closest milestone: {milestone} (XP: {xp_val})")
print(f"You are at level {level}.")
if needed > 0:
print(f"You have {gained} out of {needed} milestones towards level {level + 1}.")
else:
print("You have reached the maximum level.")
if __name__ == '__main__':
main()