// Note: The client calculates exp separately, we cant change this function // Add: You can set the values you want now, client will be always sync :) - Merkur uint32 Client::GetEXPForLevel(uint16 check_level) { uint16 check_levelm1 = check_level-1; float mod; if (check_level < 31) mod = 1.0; else if (check_level < 36) mod = 1.1; else if (check_level < 41) mod = 1.2; else if (check_level < 46) mod = 1.3; else if (check_level < 52) mod = 1.4; else if (check_level < 53) mod = 1.5; else if (check_level < 54) mod = 1.6; else if (check_level < 55) mod = 1.7; else if (check_level < 56) mod = 1.9; else if (check_level < 57) mod = 2.1; else if (check_level < 58) mod = 2.3; else if (check_level < 59) mod = 2.5; else if (check_level < 60) mod = 2.7; else if (check_level < 61) mod = 3.0; else mod = 3.1; float base = (check_levelm1)*(check_levelm1)*(check_levelm1); mod *= 1000; uint32 finalxp = uint32(base * mod); finalxp = mod_client_xp_for_level(finalxp, check_level); return(finalxp); }
uint32 Client::GetEXPForLevel(uint16 check_level, bool aa) { // Warning: Changing anything in this method WILL cause levels to change in-game the first time a player // gains or loses XP. if(aa) { if(m_epp.perAA > 99) return (RuleI(AA, ExpPerPoint)); else check_level = 52; } check_level -= 1; float base = (check_level)*(check_level)*(check_level); // Classes: In the XP formula AK used, they WERE calculated in. This was due to Sony not being able to change their XP // formula drastically (see above comment.) Instead, they gave the penalized classes a bonus on gain. We've decided to go // the easy route, and simply not use a class mod at all. float playermod = 10; uint8 race = GetBaseRace(); if(race == HALFLING) playermod *= 95.0; else if(race == DARK_ELF || race == DWARF || race == ERUDITE || race == GNOME || race == HALF_ELF || race == HIGH_ELF || race == HUMAN || race == WOOD_ELF || race == VAHSHIR) playermod *= 100.0; else if(race == BARBARIAN) playermod *= 105.0; else if(race == OGRE) playermod *= 115.0; else if(race == IKSAR || race == TROLL) playermod *= 120.0; float mod; if (check_level <= 29) mod = 1.0; else if (check_level <= 34) mod = 1.1; else if (check_level <= 39) mod = 1.2; else if (check_level <= 44) mod = 1.3; else if (check_level <= 50) mod = 1.4; else if (check_level == 51) mod = 1.5; else if (check_level == 52) mod = 1.6; else if (check_level == 53) mod = 1.7; else if (check_level == 54) mod = 1.9; else if (check_level == 55) mod = 2.1; else if (check_level == 56) mod = 2.3; else if (check_level == 57) mod = 2.5; else if (check_level == 58) mod = 2.7; else if (check_level == 59) mod = 3.0; else if (check_level == 60) mod = 3.1; else if (check_level == 61) mod = 3.2; else if (check_level == 62) mod = 3.3; else if (check_level == 63) mod = 3.4; else if (check_level == 64) mod = 3.5; else mod = 3.6; uint32 finalxp = uint32(base * playermod * mod); if(aa) { uint32 aaxp; aaxp = finalxp - GetEXPForLevel(51); return aaxp; } finalxp = mod_client_xp_for_level(finalxp, check_level); return finalxp; }