
# Level configuration based on dwTotalExp
# Source: _G.RoleUpLevelConfig (Lua)
LEVEL_CONFIG = {
    1: 0,
    2: 50,
    3: 170,
    4: 364,
    5: 686,
    6: 1224,
    7: 2059,
    8: 3284,
    9: 4965,
    10: 7153,
    11: 9971,
    12: 13571,
    13: 18024,
    14: 23474,
    15: 30109,
    16: 38109,
    17: 47709,
    18: 59309,
    19: 74309,
    20: 92809,
    21: 116309,
    22: 146909,
    23: 188109,
    24: 244109,
    25: 320609,
    26: 422109,
    27: 553809,
    28: 723609,
    29: 942109,
    30: 1221609,
    31: 1572609,
    32: 2010109,
    33: 2563609,
    34: 3258109,
    35: 4125419,
    36: 5194397,
    37: 6504580,
    38: 8095076,
    39: 10016271,
    40: 12443326,
    41: 15335997,
    42: 18775438,
    43: 22872207,
    44: 27756643,
    45: 33619207,
    46: 40650769,
    47: 49042821,
    48: 58987596,
    49: 70678075,
    50: 84457858,
    51: 100593866,
    52: 119458675,
    53: 141521199,
    54: 167365262,
    55: 197714337,
    56: 233464677,
    57: 276244477,
    58: 327692125,
    59: 389914092,
    60: 465924789,
    61: 557885677,
    62: 668612037,
    63: 802012112,
    64: 962908705,
    65: 1157255321,
    66: 1392406341,
    67: 1675766145,
    68: 2015667183,
    69: 2421360519,
    70: 2902969265,
    71: 3470547960,
    72: 4116492859,
    73: 4848445725,
    74: 5674433832,
    75: 6602807380,
    76: 7642161069,
    77: 8801239406,
    78: 10088825763,
    79: 11513615678,
    80: 13084075443,
    81: 14801439034,
    82: 16679403584,
    83: 18733035939,
    84: 20978909629,
    85: 23435255538,
    86: 26122127637,
    87: 29061585295,
    88: 32277893818,
    89: 35797745043,
    90: 39650499990,
    91: 43868455781,
    92: 48487139251,
    93: 53545629918,
    94: 59086915251,
    95: 65158281467,
    96: 71811743404,
    97: 79104517384,
    98: 87099541362,
    99: 95866047087,
    100: 105480189484,
    101: 116025738970,
    102: 127594843004,
    103: 140288863791,
    104: 154219299756,
    105: 169508799167,
    106: 186292275119,
    107: 204718132016,
    108: 224949614702,
    109: 247166292506,
    110: 271565691690,
    111: 298365091142,
    112: 327803497639,
    113: 360143818635,
    114: 395675252330,
    115: 434715916744,
    116: 477615741699,
    117: 524759649999,
    118: 576571056729,
    119: 633515718482,
    120: 696105967510,
    121: 764905369290,
}

MAX_LEVEL = 120

def get_level_from_exp(exp):
    """
    Calculate level from total experience.
    Iterates from MAX_LEVEL down to 1.
    If exp > config_exp, return level.
    """
    if exp is None:
        return 1
        
    for level in range(MAX_LEVEL, 0, -1):
        if exp > LEVEL_CONFIG.get(level, float('inf')):
            return level
            
    return 1
