// HCR v3.2.0 - Included formulas for epic level XP progression. - Thx CatScan. //:://////////////////////////////////////////////////////////////////////////// //:: FileName: HC_Inc_Exp //:://////////////////////////////////////////////////////////////////////////// /* */ //:://////////////////////////////////////////////////////////////////////////// #include "crr_subrace_hc_i" // * FUNCTION PROTOTYPES int UseXPTable(int nBaseExp, float fCR, int nLevel); // Hands out the custom XP rewards (to oKiller) for killing creatures (OBJECT_SELF). // (The code was stripped from the default death script so that other scripts // can access it. And so that when it gets cleaned up, it only needs to be // cleaned up once.) void AwardKillXP(object oKiller); // * FUNCTION DEFINITIONS //:://////////////////////////////////////////////////////////////////////////// int UseXPTable(int nBaseExp, float fCR, int nLevel) { int nCR; int nExp; nCR = FloatToInt(fCR); float fPow; if (nCR > 40) fPow = (fCR - 39.0); if (nCR <= 1){ if (nLevel >= 1 && nLevel <= 6) nExp = nBaseExp; else if (nLevel == 7) nExp = FloatToInt(nBaseExp * 0.8767); else if (nLevel == 8) nExp = FloatToInt(nBaseExp * 0.6667); else nExp = 0; } else if (nCR == 2){ if (nLevel >= 1 && nLevel <= 4) nExp = nBaseExp * 2; else if (nLevel == 5) nExp = FloatToInt(nBaseExp * 1.6667); else if (nLevel == 6) nExp = FloatToInt(nBaseExp * 1.5); else if (nLevel == 7) nExp = FloatToInt(nBaseExp * 1.3134); else if (nLevel == 8) nExp = nBaseExp; else if (nLevel == 9) nExp = FloatToInt(nBaseExp * 0.75); else nExp = 0; } else if (nCR == 3){ if (nLevel >= 1 && nLevel <= 3) nExp = FloatToInt(nBaseExp * 3.0); else if (nLevel == 4) nExp = FloatToInt(nBaseExp * 2.6667); else if (nLevel == 5) nExp = FloatToInt(nBaseExp * 2.5); else if (nLevel == 6) nExp = FloatToInt(nBaseExp * 2.0); else if (nLevel == 7) nExp = FloatToInt(nBaseExp * 1.75); else if (nLevel == 8) nExp = FloatToInt(nBaseExp * 1.5); else if (nLevel == 9) nExp = FloatToInt(nBaseExp * 1.1267); else if (nLevel == 10) nExp = FloatToInt(nBaseExp * 0.8334); else nExp = 0; } else if (nCR == 4){ if (nLevel >= 1 && nLevel <= 3) nExp = FloatToInt(nBaseExp * 4.5); else if (nLevel == 4) nExp = FloatToInt(nBaseExp * 4.0); else if (nLevel == 5) nExp = FloatToInt(nBaseExp * 3.3334); else if (nLevel == 6) nExp = FloatToInt(nBaseExp * 3.0); else if (nLevel == 7) nExp = FloatToInt(nBaseExp * 2.3334); else if (nLevel == 8) nExp = FloatToInt(nBaseExp * 2.0); else if (nLevel == 9) nExp = FloatToInt(nBaseExp * 1.6867); else if (nLevel == 10) nExp = FloatToInt(nBaseExp * 1.25); else if (nLevel == 11) nExp = FloatToInt(nBaseExp * 0.9167); else nExp = 0; } else if (nCR == 5){ if (nLevel >= 1 && nLevel <= 3) nExp = FloatToInt(nBaseExp * 6.0); else if (nLevel == 4) nExp = FloatToInt(nBaseExp * 5.3334); else if (nLevel == 5) nExp = FloatToInt(nBaseExp * 5.0); else if (nLevel == 6) nExp = FloatToInt(nBaseExp * 4.0); else if (nLevel == 7) nExp = FloatToInt(nBaseExp * 3.5); else if (nLevel == 8) nExp = FloatToInt(nBaseExp * 2.6667); else if (nLevel == 9) nExp = FloatToInt(nBaseExp * 2.25); else if (nLevel == 10) nExp = FloatToInt(nBaseExp * 1.8767); else if (nLevel == 11) nExp = FloatToInt(nBaseExp * 1.3767); else if (nLevel == 12) nExp = FloatToInt(nBaseExp * 1.0); else nExp = 0; } else if (nCR == 6){ if (nLevel >= 1 && nLevel <= 3) nExp = FloatToInt(nBaseExp * 9.0); else if (nLevel == 4) nExp = FloatToInt(nBaseExp * 8.0); else if (nLevel == 5) nExp = FloatToInt(nBaseExp * 7.5); else if (nLevel == 6) nExp = FloatToInt(nBaseExp * 6.0); else if (nLevel == 7) nExp = FloatToInt(nBaseExp * 4.6667); else if (nLevel == 8) nExp = FloatToInt(nBaseExp * 4.0); else if (nLevel == 9) nExp = FloatToInt(nBaseExp * 3.0); else if (nLevel == 10) nExp = FloatToInt(nBaseExp * 2.5); else if (nLevel == 11) nExp = FloatToInt(nBaseExp * 2.0634); else if (nLevel == 12) nExp = FloatToInt(nBaseExp * 1.5); else if (nLevel == 13) nExp = FloatToInt(nBaseExp * 1.0834); else nExp = 0; } else if (nCR == 7){ if (nLevel >= 1 && nLevel <= 3) nExp = FloatToInt(nBaseExp * 12.0); else if (nLevel == 4) nExp = FloatToInt(nBaseExp * 10.6667); else if (nLevel == 5) nExp = FloatToInt(nBaseExp * 10.0); else if (nLevel == 6) nExp = FloatToInt(nBaseExp * 9.0); else if (nLevel == 7) nExp = FloatToInt(nBaseExp * 7.0); else if (nLevel == 8) nExp = FloatToInt(nBaseExp * 5.3334); else if (nLevel == 9) nExp = FloatToInt(nBaseExp * 4.5); else if (nLevel == 10) nExp = FloatToInt(nBaseExp * 3.3334); else if (nLevel == 11) nExp = FloatToInt(nBaseExp * 2.75); else if (nLevel == 12) nExp = FloatToInt(nBaseExp * 2.25); else if (nLevel == 13) nExp = FloatToInt(nBaseExp * 1.6267); else if (nLevel == 14) nExp = FloatToInt(nBaseExp * 1.1667); else nExp = 0; } else if (nCR == 8){ if (nLevel >= 1 && nLevel <= 3) nExp = FloatToInt(nBaseExp * 18.0); else if (nLevel == 4) nExp = FloatToInt(nBaseExp * 16.0); else if (nLevel == 5) nExp = FloatToInt(nBaseExp * 15.0); else if (nLevel == 6) nExp = FloatToInt(nBaseExp * 12.0); else if (nLevel == 7) nExp = FloatToInt(nBaseExp * 10.5); else if (nLevel == 8) nExp = FloatToInt(nBaseExp * 8.0); else if (nLevel == 9) nExp = FloatToInt(nBaseExp * 6.0); else if (nLevel == 10) nExp = FloatToInt(nBaseExp * 5.0); else if (nLevel == 11) nExp = FloatToInt(nBaseExp * 3.6667); else if (nLevel == 12) nExp = FloatToInt(nBaseExp * 3.0); else if (nLevel == 13) nExp = FloatToInt(nBaseExp * 2.4367); else if (nLevel == 14) nExp = FloatToInt(nBaseExp * 1.75); else if (nLevel == 15) nExp = FloatToInt(nBaseExp * 1.25); else nExp = 0; } else if (nCR == 9){ if (nLevel >= 1 && nLevel <= 3) nExp = FloatToInt(nBaseExp * 24.0); else if (nLevel == 4) nExp = FloatToInt(nBaseExp * 21.3334); else if (nLevel == 5) nExp = FloatToInt(nBaseExp * 20.0); else if (nLevel == 6) nExp = FloatToInt(nBaseExp * 18.0); else if (nLevel == 7) nExp = FloatToInt(nBaseExp * 14.0); else if (nLevel == 8) nExp = FloatToInt(nBaseExp * 12.0); else if (nLevel == 9) nExp = FloatToInt(nBaseExp * 9.0); else if (nLevel == 10) nExp = FloatToInt(nBaseExp * 6.6667); else if (nLevel == 11) nExp = FloatToInt(nBaseExp * 5.5); else if (nLevel == 12) nExp = FloatToInt(nBaseExp * 4.0); else if (nLevel == 13) nExp = FloatToInt(nBaseExp * 3.25); else if (nLevel == 14) nExp = FloatToInt(nBaseExp * 2.6267); else if (nLevel == 15) nExp = FloatToInt(nBaseExp * 1.8767); else if (nLevel == 16) nExp = FloatToInt(nBaseExp * 1.3334); else nExp = 0; } else if (nCR == 10){ if (nLevel >= 1 && nLevel <= 3) nExp = FloatToInt(nBaseExp * 36.0); else if (nLevel == 4) nExp = FloatToInt(nBaseExp * 32.0); else if (nLevel == 5) nExp = FloatToInt(nBaseExp * 30.0); else if (nLevel == 6) nExp = FloatToInt(nBaseExp * 24.0); else if (nLevel == 7) nExp = FloatToInt(nBaseExp * 21.0); else if (nLevel == 8) nExp = FloatToInt(nBaseExp * 16.0); else if (nLevel == 9) nExp = FloatToInt(nBaseExp * 13.5); else if (nLevel == 10) nExp = FloatToInt(nBaseExp * 10.0); else if (nLevel == 11) nExp = FloatToInt(nBaseExp * 7.3334); else if (nLevel == 12) nExp = FloatToInt(nBaseExp * 6.0); else if (nLevel == 13) nExp = FloatToInt(nBaseExp * 4.3334); else if (nLevel == 14) nExp = FloatToInt(nBaseExp * 3.5); else if (nLevel == 15) nExp = FloatToInt(nBaseExp * 2.8134); else if (nLevel == 16) nExp = FloatToInt(nBaseExp * 2.0); else if (nLevel == 17) nExp = FloatToInt(nBaseExp * 1.4167); else nExp = 0; } else if (nCR == 11){ if (nLevel >= 1 && nLevel <= 4) nExp = FloatToInt(nBaseExp * 42.6667); else if (nLevel == 5) nExp = FloatToInt(nBaseExp * 40.0); else if (nLevel == 6) nExp = FloatToInt(nBaseExp * 36.0); else if (nLevel == 7) nExp = FloatToInt(nBaseExp * 28.0); else if (nLevel == 8) nExp = FloatToInt(nBaseExp * 24.0); else if (nLevel == 9) nExp = FloatToInt(nBaseExp * 18.0); else if (nLevel == 10) nExp = FloatToInt(nBaseExp * 15.0); else if (nLevel == 11) nExp = FloatToInt(nBaseExp * 11.0); else if (nLevel == 12) nExp = FloatToInt(nBaseExp * 8.0); else if (nLevel == 13) nExp = FloatToInt(nBaseExp * 6.5); else if (nLevel == 14) nExp = FloatToInt(nBaseExp * 4.6667); else if (nLevel == 15) nExp = FloatToInt(nBaseExp * 3.75); else if (nLevel == 16) nExp = FloatToInt(nBaseExp * 3.0); else if (nLevel == 17) nExp = FloatToInt(nBaseExp * 2.1267); else if (nLevel == 18) nExp = FloatToInt(nBaseExp * 1.5); else nExp = 0; } else if (nCR == 12){ if (nLevel >= 1 && nLevel <= 5) nExp = FloatToInt(nBaseExp * 60.0); else if (nLevel == 6) nExp = FloatToInt(nBaseExp * 48.0); else if (nLevel == 7) nExp = FloatToInt(nBaseExp * 42.0); else if (nLevel == 8) nExp = FloatToInt(nBaseExp * 32.0); else if (nLevel == 9) nExp = FloatToInt(nBaseExp * 27.0); else if (nLevel == 10) nExp = FloatToInt(nBaseExp * 20.0); else if (nLevel == 11) nExp = FloatToInt(nBaseExp * 16.5); else if (nLevel == 12) nExp = FloatToInt(nBaseExp * 12.0); else if (nLevel == 13) nExp = FloatToInt(nBaseExp * 8.6667); else if (nLevel == 14) nExp = FloatToInt(nBaseExp * 7.0); else if (nLevel == 15) nExp = FloatToInt(nBaseExp * 5.0); else if (nLevel == 16) nExp = FloatToInt(nBaseExp * 4.0); else if (nLevel == 17) nExp = FloatToInt(nBaseExp * 3.1867); else if (nLevel == 18) nExp = FloatToInt(nBaseExp * 2.25); else if (nLevel == 19) nExp = FloatToInt(nBaseExp * 1.5834); else nExp = 0; } else if (nCR == 13){ if (nLevel >= 1 && nLevel <= 6) nExp = FloatToInt(nBaseExp * 72.0); else if (nLevel == 7) nExp = FloatToInt(nBaseExp * 56.0); else if (nLevel == 8) nExp = FloatToInt(nBaseExp * 48.0); else if (nLevel == 9) nExp = FloatToInt(nBaseExp * 36.0); else if (nLevel == 10) nExp = FloatToInt(nBaseExp * 30.0); else if (nLevel == 11) nExp = FloatToInt(nBaseExp * 22.0); else if (nLevel == 12) nExp = FloatToInt(nBaseExp * 18.0); else if (nLevel == 13) nExp = FloatToInt(nBaseExp * 13.0); else if (nLevel == 14) nExp = FloatToInt(nBaseExp * 9.3334); else if (nLevel == 15) nExp = FloatToInt(nBaseExp * 7.5); else if (nLevel == 16) nExp = FloatToInt(nBaseExp * 5.3334); else if (nLevel == 17) nExp = FloatToInt(nBaseExp * 4.25); else if (nLevel == 18) nExp = FloatToInt(nBaseExp * 3.3767); else if (nLevel == 19) nExp = FloatToInt(nBaseExp * 2.3767); else if (nLevel == 20) nExp = FloatToInt(nBaseExp * 1.6667); else nExp = 0; } else if (nCR == 14){ if (nLevel >= 1 && nLevel <= 7) nExp = FloatToInt(nBaseExp * 84.0); else if (nLevel == 8) nExp = FloatToInt(nBaseExp * 64.0); else if (nLevel == 9) nExp = FloatToInt(nBaseExp * 60.0); else if (nLevel == 10) nExp = FloatToInt(nBaseExp * 40.0); else if (nLevel == 11) nExp = FloatToInt(nBaseExp * 33.0); else if (nLevel == 12) nExp = FloatToInt(nBaseExp * 24.0); else if (nLevel == 13) nExp = FloatToInt(nBaseExp * 19.5); else if (nLevel == 14) nExp = FloatToInt(nBaseExp * 14.0); else if (nLevel == 15) nExp = FloatToInt(nBaseExp * 10.0); else if (nLevel == 16) nExp = FloatToInt(nBaseExp * 8.0); else if (nLevel == 17) nExp = FloatToInt(nBaseExp * 5.6667); else if (nLevel == 18) nExp = FloatToInt(nBaseExp * 4.5); else if (nLevel == 19) nExp = FloatToInt(nBaseExp * 3.5634); else if (nLevel == 20) nExp = FloatToInt(nBaseExp * 2.5); else if (nLevel == 21) nExp = FloatToInt(nBaseExp * 1.74); else nExp = 0; } else if (nCR == 15){ if (nLevel >= 1 && nLevel <= 8) nExp = FloatToInt(nBaseExp * 96.0); else if (nLevel == 9) nExp = FloatToInt(nBaseExp * 72.0); else if (nLevel == 10) nExp = FloatToInt(nBaseExp * 60.0); else if (nLevel == 11) nExp = FloatToInt(nBaseExp * 44.0); else if (nLevel == 12) nExp = FloatToInt(nBaseExp * 36.0); else if (nLevel == 13) nExp = FloatToInt(nBaseExp * 26.0); else if (nLevel == 14) nExp = FloatToInt(nBaseExp * 21.0); else if (nLevel == 15) nExp = FloatToInt(nBaseExp * 15.0); else if (nLevel == 16) nExp = FloatToInt(nBaseExp * 10.6667); else if (nLevel == 17) nExp = FloatToInt(nBaseExp * 8.5); else if (nLevel == 18) nExp = FloatToInt(nBaseExp * 6.0); else if (nLevel == 19) nExp = FloatToInt(nBaseExp * 4.75); else if (nLevel == 20) nExp = FloatToInt(nBaseExp * 3.3334); else if (nLevel == 21) nExp = FloatToInt(nBaseExp * 2.6267); else if (nLevel == 22) nExp = FloatToInt(nBaseExp * 1.8333); else nExp = 0; } else if (nCR == 16){ if (nLevel >= 1 && nLevel <= 9) nExp = FloatToInt(nBaseExp * 108.0); else if (nLevel == 10) nExp = FloatToInt(nBaseExp * 80.0); else if (nLevel == 11) nExp = FloatToInt(nBaseExp * 66.0); else if (nLevel == 12) nExp = FloatToInt(nBaseExp * 48.0); else if (nLevel == 13) nExp = FloatToInt(nBaseExp * 39.0); else if (nLevel == 14) nExp = FloatToInt(nBaseExp * 28.0); else if (nLevel == 15) nExp = FloatToInt(nBaseExp * 22.5); else if (nLevel == 16) nExp = FloatToInt(nBaseExp * 16.0); else if (nLevel == 17) nExp = FloatToInt(nBaseExp * 11.3334); else if (nLevel == 18) nExp = FloatToInt(nBaseExp * 9.0); else if (nLevel == 19) nExp = FloatToInt(nBaseExp * 6.3334); else if (nLevel == 20) nExp = FloatToInt(nBaseExp * 5.0); else if (nLevel == 21) nExp = FloatToInt(nBaseExp * 3.5); else if (nLevel == 22) nExp = FloatToInt(nBaseExp * 2.75); else if (nLevel == 23) nExp = FloatToInt(nBaseExp * 1.1967); else nExp = 0; } else if (nCR == 17){ if (nLevel >= 1 && nLevel <= 10) nExp = FloatToInt(nBaseExp * 120.0); else if (nLevel == 11) nExp = FloatToInt(nBaseExp * 88.0); else if (nLevel == 12) nExp = FloatToInt(nBaseExp * 72.0); else if (nLevel == 13) nExp = FloatToInt(nBaseExp * 52.0); else if (nLevel == 14) nExp = FloatToInt(nBaseExp * 42.0); else if (nLevel == 15) nExp = FloatToInt(nBaseExp * 30.0); else if (nLevel == 16) nExp = FloatToInt(nBaseExp * 24.0); else if (nLevel == 17) nExp = FloatToInt(nBaseExp * 17.0); else if (nLevel == 18) nExp = FloatToInt(nBaseExp * 12.0); else if (nLevel == 19) nExp = FloatToInt(nBaseExp * 9.5); else if (nLevel == 20) nExp = FloatToInt(nBaseExp * 6.6667); else if (nLevel == 21) nExp = FloatToInt(nBaseExp * 5.25); else if (nLevel == 22) nExp = FloatToInt(nBaseExp * 3.6667); else if (nLevel == 23) nExp = FloatToInt(nBaseExp * 2.8767); else if (nLevel == 24) nExp = FloatToInt(nBaseExp * 2.0); else nExp = 0; } else if (nCR == 18){ if (nLevel >= 1 && nLevel <= 11) nExp = FloatToInt(nBaseExp * 132.0); else if (nLevel == 12) nExp = FloatToInt(nBaseExp * 96.0); else if (nLevel == 13) nExp = FloatToInt(nBaseExp * 78.0); else if (nLevel == 14) nExp = FloatToInt(nBaseExp * 60.0); else if (nLevel == 15) nExp = FloatToInt(nBaseExp * 45.0); else if (nLevel == 16) nExp = FloatToInt(nBaseExp * 32.0); else if (nLevel == 17) nExp = FloatToInt(nBaseExp * 25.5); else if (nLevel == 18) nExp = FloatToInt(nBaseExp * 18.0); else if (nLevel == 19) nExp = FloatToInt(nBaseExp * 12.6667); else if (nLevel == 20) nExp = FloatToInt(nBaseExp * 10.0); else if (nLevel == 21) nExp = FloatToInt(nBaseExp * 7.0); else if (nLevel == 22) nExp = FloatToInt(nBaseExp * 5.5); else if (nLevel == 23) nExp = FloatToInt(nBaseExp * 3.8333); else if (nLevel == 24) nExp = FloatToInt(nBaseExp * 3.0); else if (nLevel == 25) nExp = FloatToInt(nBaseExp * 2.0833); else nExp = 0; } else if (nCR == 19){ if (nLevel >= 1 && nLevel <= 12) nExp = FloatToInt(nBaseExp * 144.0); else if (nLevel == 13) nExp = FloatToInt(nBaseExp * 104.0); else if (nLevel == 14) nExp = FloatToInt(nBaseExp * 84.0); else if (nLevel == 15) nExp = FloatToInt(nBaseExp * 60.0); else if (nLevel == 16) nExp = FloatToInt(nBaseExp * 48.0); else if (nLevel == 17) nExp = FloatToInt(nBaseExp * 34.0); else if (nLevel == 18) nExp = FloatToInt(nBaseExp * 27.0); else if (nLevel == 19) nExp = FloatToInt(nBaseExp * 19.0); else if (nLevel == 20) nExp = FloatToInt(nBaseExp * 13.3334); else if (nLevel == 21) nExp = FloatToInt(nBaseExp * 10.5); else if (nLevel == 22) nExp = FloatToInt(nBaseExp * 7.3333); else if (nLevel == 23) nExp = FloatToInt(nBaseExp * 5.75); else if (nLevel == 24) nExp = FloatToInt(nBaseExp * 4.0); else if (nLevel == 25) nExp = FloatToInt(nBaseExp * 3.1267); else if (nLevel == 26) nExp = FloatToInt(nBaseExp * 2.1667); else nExp = 0; } else if (nCR == 20){ if (nLevel >= 1 && nLevel <= 13) nExp = FloatToInt(nBaseExp * 156.0); else if (nLevel == 14) nExp = FloatToInt(nBaseExp * 112.0); else if (nLevel == 15) nExp = FloatToInt(nBaseExp * 90.0); else if (nLevel == 16) nExp = FloatToInt(nBaseExp * 64.0); else if (nLevel == 17) nExp = FloatToInt(nBaseExp * 51.0); else if (nLevel == 18) nExp = FloatToInt(nBaseExp * 36.0); else if (nLevel == 19) nExp = FloatToInt(nBaseExp * 28.5); else if (nLevel == 20) nExp = FloatToInt(nBaseExp * 20.0); else if (nLevel == 21) nExp = FloatToInt(nBaseExp * 14.0); else if (nLevel == 22) nExp = FloatToInt(nBaseExp * 11.00); else if (nLevel == 23) nExp = FloatToInt(nBaseExp * 7.6667); else if (nLevel == 24) nExp = FloatToInt(nBaseExp * 6.0); else if (nLevel == 25) nExp = FloatToInt(nBaseExp * 4.1667); else if (nLevel == 26) nExp = FloatToInt(nBaseExp * 3.25); else if (nLevel == 27) nExp = FloatToInt(nBaseExp * 2.25); else nExp = 0; } else if (nCR == 21){ if (nLevel >= 1 && nLevel <= 14) nExp = FloatToInt(nBaseExp * 168.0); else if (nLevel == 15) nExp = FloatToInt(nBaseExp * 120.0); else if (nLevel == 16) nExp = FloatToInt(nBaseExp * 96.0); else if (nLevel == 17) nExp = FloatToInt(nBaseExp * 68.0); else if (nLevel == 18) nExp = FloatToInt(nBaseExp * 54.0); else if (nLevel == 19) nExp = FloatToInt(nBaseExp * 38.0); else if (nLevel == 20) nExp = FloatToInt(nBaseExp * 30.0); else if (nLevel == 21) nExp = FloatToInt(nBaseExp * 21.0); else if (nLevel == 22) nExp = FloatToInt(nBaseExp * 14.6667); else if (nLevel == 23) nExp = FloatToInt(nBaseExp * 11.5); else if (nLevel == 24) nExp = FloatToInt(nBaseExp * 7.6667); else if (nLevel == 25) nExp = FloatToInt(nBaseExp * 8.0); else if (nLevel == 26) nExp = FloatToInt(nBaseExp * 6.25); else if (nLevel == 27) nExp = FloatToInt(nBaseExp * 4.3333); else if (nLevel == 28) nExp = FloatToInt(nBaseExp * 3.3767); else nExp = 0; } else if (nCR == 22){ if (nLevel >= 1 && nLevel <= 15) nExp = FloatToInt(nBaseExp * 180.0); else if (nLevel == 16) nExp = FloatToInt(nBaseExp * 128.0); else if (nLevel == 17) nExp = FloatToInt(nBaseExp * 102.0); else if (nLevel == 18) nExp = FloatToInt(nBaseExp * 72.0); else if (nLevel == 19) nExp = FloatToInt(nBaseExp * 57.0); else if (nLevel == 20) nExp = FloatToInt(nBaseExp * 40.0); else if (nLevel == 21) nExp = FloatToInt(nBaseExp * 28.0); // Discrepency between DMG and ELHB else if (nLevel == 22) nExp = FloatToInt(nBaseExp * 22.0); else if (nLevel == 23) nExp = FloatToInt(nBaseExp * 15.3333); else if (nLevel == 24) nExp = FloatToInt(nBaseExp * 12.0); else if (nLevel == 25) nExp = FloatToInt(nBaseExp * 8.3333); else if (nLevel == 26) nExp = FloatToInt(nBaseExp * 6.5); else if (nLevel == 27) nExp = FloatToInt(nBaseExp * 4.5); else if (nLevel == 28) nExp = FloatToInt(nBaseExp * 3.5); else if (nLevel == 29) nExp = FloatToInt(nBaseExp * 2.4167); else nExp = 0; } else if (nCR == 23){ if (nLevel >= 1 && nLevel <= 16) nExp = FloatToInt(nBaseExp * 192.0); else if (nLevel == 17) nExp = FloatToInt(nBaseExp * 136.0); else if (nLevel == 18) nExp = FloatToInt(nBaseExp * 108.0); else if (nLevel == 19) nExp = FloatToInt(nBaseExp * 76.0); else if (nLevel == 20) nExp = FloatToInt(nBaseExp * 60.0); else if (nLevel == 21) nExp = FloatToInt(nBaseExp * 42.0); else if (nLevel == 22) nExp = FloatToInt(nBaseExp * 29.3333); else if (nLevel == 23) nExp = FloatToInt(nBaseExp * 23.0); else if (nLevel == 24) nExp = FloatToInt(nBaseExp * 16.0); else if (nLevel == 25) nExp = FloatToInt(nBaseExp * 12.5); else if (nLevel == 26) nExp = FloatToInt(nBaseExp * 8.6667); else if (nLevel == 27) nExp = FloatToInt(nBaseExp * 6.75); else if (nLevel == 28) nExp = FloatToInt(nBaseExp * 4.6667); else if (nLevel == 29) nExp = FloatToInt(nBaseExp * 3.6267); else if (nLevel == 30) nExp = FloatToInt(nBaseExp * 2.5); else nExp = 0; } else if (nCR == 24){ if (nLevel >= 1 && nLevel <= 17) nExp = FloatToInt(nBaseExp * 204.0); else if (nLevel == 18) nExp = FloatToInt(nBaseExp * 144.0); else if (nLevel == 19) nExp = FloatToInt(nBaseExp * 114.0); else if (nLevel == 20) nExp = FloatToInt(nBaseExp * 80.0); else if (nLevel == 21) nExp = FloatToInt(nBaseExp * 56.0); // Discrepency between DMG and ELHB else if (nLevel == 22) nExp = FloatToInt(nBaseExp * 44.0); else if (nLevel == 23) nExp = FloatToInt(nBaseExp * 30.6667); else if (nLevel == 24) nExp = FloatToInt(nBaseExp * 24.0); else if (nLevel == 25) nExp = FloatToInt(nBaseExp * 16.6667); else if (nLevel == 26) nExp = FloatToInt(nBaseExp * 13.0); else if (nLevel == 27) nExp = FloatToInt(nBaseExp * 9.0); else if (nLevel == 28) nExp = FloatToInt(nBaseExp * 7.0); else if (nLevel == 29) nExp = FloatToInt(nBaseExp * 4.8333); else if (nLevel == 30) nExp = FloatToInt(nBaseExp * 3.75); else if (nLevel == 31) nExp = FloatToInt(nBaseExp * 2.5833); else nExp = 0; } else if (nCR == 25){ if (nLevel >= 1 && nLevel <= 18) nExp = FloatToInt(nBaseExp * 216.0); else if (nLevel == 19) nExp = FloatToInt(nBaseExp * 152.0); else if (nLevel == 20) nExp = FloatToInt(nBaseExp * 120.0); else if (nLevel == 21) nExp = FloatToInt(nBaseExp * 84.0); else if (nLevel == 22) nExp = FloatToInt(nBaseExp * 58.6667); else if (nLevel == 23) nExp = FloatToInt(nBaseExp * 46.0); else if (nLevel == 24) nExp = FloatToInt(nBaseExp * 32.0); else if (nLevel == 25) nExp = FloatToInt(nBaseExp * 25.0); else if (nLevel == 26) nExp = FloatToInt(nBaseExp * 17.3333); else if (nLevel == 27) nExp = FloatToInt(nBaseExp * 13.5); else if (nLevel == 28) nExp = FloatToInt(nBaseExp * 9.3333); else if (nLevel == 29) nExp = FloatToInt(nBaseExp * 7.25); else if (nLevel == 30) nExp = FloatToInt(nBaseExp * 5.0); else if (nLevel == 31) nExp = FloatToInt(nBaseExp * 3.8767); else if (nLevel == 32) nExp = FloatToInt(nBaseExp * 2.6667); else nExp = 0; } else if (nCR == 26){ if (nLevel >= 1 && nLevel <= 19) nExp = FloatToInt(nBaseExp * 228.0); else if (nLevel == 20) nExp = FloatToInt(nBaseExp * 160.0); else if (nLevel == 21) nExp = FloatToInt(nBaseExp * 112.0); // Discrepency between DMG and ELHB else if (nLevel == 22) nExp = FloatToInt(nBaseExp * 88.0); else if (nLevel == 23) nExp = FloatToInt(nBaseExp * 61.3333); else if (nLevel == 24) nExp = FloatToInt(nBaseExp * 48.0); else if (nLevel == 25) nExp = FloatToInt(nBaseExp * 33.3333); else if (nLevel == 26) nExp = FloatToInt(nBaseExp * 26.0); else if (nLevel == 27) nExp = FloatToInt(nBaseExp * 18.0); else if (nLevel == 28) nExp = FloatToInt(nBaseExp * 14.0); else if (nLevel == 29) nExp = FloatToInt(nBaseExp * 9.6667); else if (nLevel == 30) nExp = FloatToInt(nBaseExp * 7.5); else if (nLevel == 31) nExp = FloatToInt(nBaseExp * 5.1667); else if (nLevel == 32) nExp = FloatToInt(nBaseExp * 4.0); else if (nLevel == 33) nExp = FloatToInt(nBaseExp * 2.75); else nExp = 0; } else if (nCR == 27){ if (nLevel >= 1 && nLevel <= 20) nExp = FloatToInt(nBaseExp * 240.0); else if (nLevel == 21) nExp = FloatToInt(nBaseExp * 168.0); else if (nLevel == 22) nExp = FloatToInt(nBaseExp * 117.3333); else if (nLevel == 23) nExp = FloatToInt(nBaseExp * 92.0); else if (nLevel == 24) nExp = FloatToInt(nBaseExp * 64.0); else if (nLevel == 25) nExp = FloatToInt(nBaseExp * 50.0); else if (nLevel == 26) nExp = FloatToInt(nBaseExp * 34.6667); else if (nLevel == 27) nExp = FloatToInt(nBaseExp * 27.0); else if (nLevel == 28) nExp = FloatToInt(nBaseExp * 18.6667); else if (nLevel == 29) nExp = FloatToInt(nBaseExp * 14.5); else if (nLevel == 30) nExp = FloatToInt(nBaseExp * 10.0); else if (nLevel == 31) nExp = FloatToInt(nBaseExp * 7.75); else if (nLevel == 32) nExp = FloatToInt(nBaseExp * 5.3333); else if (nLevel == 33) nExp = FloatToInt(nBaseExp * 4.1267); else if (nLevel == 34) nExp = FloatToInt(nBaseExp * 2.8333); else nExp = 0; } else if (nCR == 28){ if (nLevel >= 1 && nLevel <= 21) nExp = FloatToInt(nBaseExp * 224.0); // Discrepency between DMG and ELHB else if (nLevel == 22) nExp = FloatToInt(nBaseExp * 176.0); else if (nLevel == 23) nExp = FloatToInt(nBaseExp * 122.6667); else if (nLevel == 24) nExp = FloatToInt(nBaseExp * 96.0); else if (nLevel == 25) nExp = FloatToInt(nBaseExp * 66.6667); else if (nLevel == 26) nExp = FloatToInt(nBaseExp * 52.0); else if (nLevel == 27) nExp = FloatToInt(nBaseExp * 36.0); else if (nLevel == 28) nExp = FloatToInt(nBaseExp * 28.0); else if (nLevel == 29) nExp = FloatToInt(nBaseExp * 19.3333); else if (nLevel == 30) nExp = FloatToInt(nBaseExp * 15.0); else if (nLevel == 31) nExp = FloatToInt(nBaseExp * 10.3333); else if (nLevel == 32) nExp = FloatToInt(nBaseExp * 8.0); else if (nLevel == 33) nExp = FloatToInt(nBaseExp * 5.5); else if (nLevel == 34) nExp = FloatToInt(nBaseExp * 4.25); else if (nLevel == 35) nExp = FloatToInt(nBaseExp * 2.9167); else nExp = 0; } else if (nCR == 29){ if (nLevel >= 1 && nLevel <= 22) nExp = FloatToInt(nBaseExp * 234.6667); else if (nLevel == 23) nExp = FloatToInt(nBaseExp * 184.0); else if (nLevel == 24) nExp = FloatToInt(nBaseExp * 128.0); else if (nLevel == 25) nExp = FloatToInt(nBaseExp * 100.0); else if (nLevel == 26) nExp = FloatToInt(nBaseExp * 69.3333); else if (nLevel == 27) nExp = FloatToInt(nBaseExp * 54.0); else if (nLevel == 28) nExp = FloatToInt(nBaseExp * 37.3333); else if (nLevel == 29) nExp = FloatToInt(nBaseExp * 29.0); else if (nLevel == 30) nExp = FloatToInt(nBaseExp * 20.0); else if (nLevel == 31) nExp = FloatToInt(nBaseExp * 15.5); else if (nLevel == 32) nExp = FloatToInt(nBaseExp * 10.6667); else if (nLevel == 33) nExp = FloatToInt(nBaseExp * 8.25); else if (nLevel == 34) nExp = FloatToInt(nBaseExp * 5.6667); else if (nLevel == 35) nExp = FloatToInt(nBaseExp * 3.3767); else if (nLevel == 36) nExp = FloatToInt(nBaseExp * 3.0); else nExp = 0; } else if (nCR == 30){ if (nLevel >= 1 && nLevel <= 23) nExp = FloatToInt(nBaseExp * 245.3333); else if (nLevel == 24) nExp = FloatToInt(nBaseExp * 192.0); else if (nLevel == 25) nExp = FloatToInt(nBaseExp * 133.3333); else if (nLevel == 26) nExp = FloatToInt(nBaseExp * 104.0); else if (nLevel == 27) nExp = FloatToInt(nBaseExp * 72.0); else if (nLevel == 28) nExp = FloatToInt(nBaseExp * 56.0); else if (nLevel == 29) nExp = FloatToInt(nBaseExp * 38.6667); else if (nLevel == 30) nExp = FloatToInt(nBaseExp * 30.0); else if (nLevel == 31) nExp = FloatToInt(nBaseExp * 20.6667); else if (nLevel == 32) nExp = FloatToInt(nBaseExp * 16.0); else if (nLevel == 33) nExp = FloatToInt(nBaseExp * 11.0); else if (nLevel == 34) nExp = FloatToInt(nBaseExp * 8.5); else if (nLevel == 35) nExp = FloatToInt(nBaseExp * 5.8333); else if (nLevel == 36) nExp = FloatToInt(nBaseExp * 4.5); else if (nLevel == 37) nExp = FloatToInt(nBaseExp * 3.0833); else nExp = 0; } else if (nCR == 31){ if (nLevel >= 1 && nLevel <= 24) nExp = FloatToInt(nBaseExp * 256.00); else if (nLevel == 25) nExp = FloatToInt(nBaseExp * 200.0); else if (nLevel == 26) nExp = FloatToInt(nBaseExp * 138.6667); else if (nLevel == 27) nExp = FloatToInt(nBaseExp * 108.0); else if (nLevel == 28) nExp = FloatToInt(nBaseExp * 74.6667); else if (nLevel == 29) nExp = FloatToInt(nBaseExp * 58.0); else if (nLevel == 30) nExp = FloatToInt(nBaseExp * 40.0); else if (nLevel == 31) nExp = FloatToInt(nBaseExp * 31.0); else if (nLevel == 32) nExp = FloatToInt(nBaseExp * 21.3333); else if (nLevel == 33) nExp = FloatToInt(nBaseExp * 16.5); else if (nLevel == 34) nExp = FloatToInt(nBaseExp * 11.3333); else if (nLevel == 35) nExp = FloatToInt(nBaseExp * 8.75); else if (nLevel == 36) nExp = FloatToInt(nBaseExp * 6.0); else if (nLevel == 37) nExp = FloatToInt(nBaseExp * 4.6267); else if (nLevel == 38) nExp = FloatToInt(nBaseExp * 3.1667); else nExp = 0; } else if (nCR == 32){ if (nLevel >= 1 && nLevel <= 25) nExp = FloatToInt(nBaseExp * 266.6667); else if (nLevel == 26) nExp = FloatToInt(nBaseExp * 208.0); else if (nLevel == 27) nExp = FloatToInt(nBaseExp * 144.0); else if (nLevel == 28) nExp = FloatToInt(nBaseExp * 112.0); else if (nLevel == 29) nExp = FloatToInt(nBaseExp * 77.3333); else if (nLevel == 30) nExp = FloatToInt(nBaseExp * 60.0); else if (nLevel == 31) nExp = FloatToInt(nBaseExp * 41.3333); else if (nLevel == 32) nExp = FloatToInt(nBaseExp * 32.0); else if (nLevel == 33) nExp = FloatToInt(nBaseExp * 22.0); else if (nLevel == 34) nExp = FloatToInt(nBaseExp * 17.0); else if (nLevel == 35) nExp = FloatToInt(nBaseExp * 11.6667); else if (nLevel == 36) nExp = FloatToInt(nBaseExp * 9.0); else if (nLevel == 37) nExp = FloatToInt(nBaseExp * 6.1667); else if (nLevel == 38) nExp = FloatToInt(nBaseExp * 4.75); else if (nLevel == 39) nExp = FloatToInt(nBaseExp * 3.25); else nExp = 0; } else if (nCR == 33){ if (nLevel >= 1 && nLevel <= 26) nExp = FloatToInt(nBaseExp * 273.3333); else if (nLevel == 27) nExp = FloatToInt(nBaseExp * 216.0); else if (nLevel == 28) nExp = FloatToInt(nBaseExp * 149.3333); else if (nLevel == 29) nExp = FloatToInt(nBaseExp * 116.0); else if (nLevel == 30) nExp = FloatToInt(nBaseExp * 80.0); else if (nLevel == 31) nExp = FloatToInt(nBaseExp * 62.0); else if (nLevel == 32) nExp = FloatToInt(nBaseExp * 42.6667); else if (nLevel == 33) nExp = FloatToInt(nBaseExp * 33.0); else if (nLevel == 34) nExp = FloatToInt(nBaseExp * 22.6667); else if (nLevel == 35) nExp = FloatToInt(nBaseExp * 17.5); else if (nLevel == 36) nExp = FloatToInt(nBaseExp * 12.0); else if (nLevel == 37) nExp = FloatToInt(nBaseExp * 9.25); else if (nLevel == 37) nExp = FloatToInt(nBaseExp * 6.3333); else if (nLevel == 38) nExp = FloatToInt(nBaseExp * 4.8767); else if (nLevel == 40) nExp = FloatToInt(nBaseExp * 3.3333); else nExp = 0; } else if (nCR == 34){ if (nLevel >= 1 && nLevel <= 27) nExp = FloatToInt(nBaseExp * 288.0); else if (nLevel == 28) nExp = FloatToInt(nBaseExp * 224.0); else if (nLevel == 29) nExp = FloatToInt(nBaseExp * 154.66667); else if (nLevel == 30) nExp = FloatToInt(nBaseExp * 120.0); else if (nLevel == 31) nExp = FloatToInt(nBaseExp * 82.6667); else if (nLevel == 32) nExp = FloatToInt(nBaseExp * 64.0); else if (nLevel == 33) nExp = FloatToInt(nBaseExp * 44.0); else if (nLevel == 34) nExp = FloatToInt(nBaseExp * 34.0); else if (nLevel == 35) nExp = FloatToInt(nBaseExp * 23.3333); else if (nLevel == 36) nExp = FloatToInt(nBaseExp * 18.0); else if (nLevel == 37) nExp = FloatToInt(nBaseExp * 12.3333); else if (nLevel == 38) nExp = FloatToInt(nBaseExp * 9.5); else if (nLevel == 39) nExp = FloatToInt(nBaseExp * 6.5); else if (nLevel == 40) nExp = FloatToInt(nBaseExp * 5.0); else nExp = 0; } else if (nCR == 35){ if (nLevel >= 1 && nLevel <= 28) nExp = FloatToInt(nBaseExp * 298.6667); else if (nLevel == 29) nExp = FloatToInt(nBaseExp * 232.0); else if (nLevel == 30) nExp = FloatToInt(nBaseExp * 160.0); else if (nLevel == 31) nExp = FloatToInt(nBaseExp * 124.0); else if (nLevel == 32) nExp = FloatToInt(nBaseExp * 85.333); else if (nLevel == 33) nExp = FloatToInt(nBaseExp * 66.0); else if (nLevel == 34) nExp = FloatToInt(nBaseExp * 45.3333); else if (nLevel == 35) nExp = FloatToInt(nBaseExp * 35.0); else if (nLevel == 36) nExp = FloatToInt(nBaseExp * 24.0); else if (nLevel == 37) nExp = FloatToInt(nBaseExp * 18.5); else if (nLevel == 38) nExp = FloatToInt(nBaseExp * 12.6667); else if (nLevel == 39) nExp = FloatToInt(nBaseExp * 9.75); else if (nLevel == 40) nExp = FloatToInt(nBaseExp * 6.6667); else nExp = 0; } else if (nCR == 36){ if (nLevel >= 1 && nLevel <= 29) nExp = FloatToInt(nBaseExp * 309.3333); else if (nLevel == 30) nExp = FloatToInt(nBaseExp * 240.0); else if (nLevel == 31) nExp = FloatToInt(nBaseExp * 165.3333); else if (nLevel == 32) nExp = FloatToInt(nBaseExp * 128.0); else if (nLevel == 33) nExp = FloatToInt(nBaseExp * 88.0); else if (nLevel == 34) nExp = FloatToInt(nBaseExp * 68.0); else if (nLevel == 35) nExp = FloatToInt(nBaseExp * 46.6667); else if (nLevel == 36) nExp = FloatToInt(nBaseExp * 36.0); else if (nLevel == 37) nExp = FloatToInt(nBaseExp * 24.6667); else if (nLevel == 38) nExp = FloatToInt(nBaseExp * 19.0); else if (nLevel == 39) nExp = FloatToInt(nBaseExp * 13.0); else if (nLevel == 40) nExp = FloatToInt(nBaseExp * 10.0); else nExp = 0; } else if (nCR == 37){ if (nLevel >= 1 && nLevel <= 30) nExp = FloatToInt(nBaseExp * 320.0); else if (nLevel == 31) nExp = FloatToInt(nBaseExp * 248.0); else if (nLevel == 32) nExp = FloatToInt(nBaseExp * 170.6667); else if (nLevel == 33) nExp = FloatToInt(nBaseExp * 132.0); else if (nLevel == 34) nExp = FloatToInt(nBaseExp * 90.6667); else if (nLevel == 35) nExp = FloatToInt(nBaseExp * 70.0); else if (nLevel == 36) nExp = FloatToInt(nBaseExp * 48.0); else if (nLevel == 37) nExp = FloatToInt(nBaseExp * 37.0); else if (nLevel == 38) nExp = FloatToInt(nBaseExp * 25.3333); else if (nLevel == 39) nExp = FloatToInt(nBaseExp * 19.5); else if (nLevel == 40) nExp = FloatToInt(nBaseExp * 13.3333); else nExp = 0; } else if (nCR == 38){ if (nLevel >= 1 && nLevel <= 31) nExp = FloatToInt(nBaseExp * 330.6667); else if (nLevel == 32) nExp = FloatToInt(nBaseExp * 256.0); else if (nLevel == 33) nExp = FloatToInt(nBaseExp * 176.0); else if (nLevel == 34) nExp = FloatToInt(nBaseExp * 136.0); else if (nLevel == 35) nExp = FloatToInt(nBaseExp * 93.3333); else if (nLevel == 36) nExp = FloatToInt(nBaseExp * 72.0); else if (nLevel == 37) nExp = FloatToInt(nBaseExp * 49.3333); else if (nLevel == 38) nExp = FloatToInt(nBaseExp * 38.0); else if (nLevel == 39) nExp = FloatToInt(nBaseExp * 26.0); else if (nLevel == 40) nExp = FloatToInt(nBaseExp * 20.0); else nExp = 0; } else if (nCR == 39){ if (nLevel >= 1 && nLevel <= 32) nExp = FloatToInt(nBaseExp * 341.3333); else if (nLevel == 33) nExp = FloatToInt(nBaseExp * 264.0); else if (nLevel == 34) nExp = FloatToInt(nBaseExp * 181.3333); else if (nLevel == 35) nExp = FloatToInt(nBaseExp * 140.0); else if (nLevel == 36) nExp = FloatToInt(nBaseExp * 96.0); else if (nLevel == 37) nExp = FloatToInt(nBaseExp * 74.0); else if (nLevel == 38) nExp = FloatToInt(nBaseExp * 50.6667); else if (nLevel == 39) nExp = FloatToInt(nBaseExp * 39.0); else if (nLevel == 40) nExp = FloatToInt(nBaseExp * 26.6667); else nExp = 0; } else if (nCR == 40){ if (nLevel >= 1 && nLevel <= 33) nExp = FloatToInt(nBaseExp * 352.0); else if (nLevel == 34) nExp = FloatToInt(nBaseExp * 272.0); else if (nLevel == 35) nExp = FloatToInt(nBaseExp * 186.6667); else if (nLevel == 36) nExp = FloatToInt(nBaseExp * 144.0); else if (nLevel == 37) nExp = FloatToInt(nBaseExp * 98.6667); else if (nLevel == 38) nExp = FloatToInt(nBaseExp * 76.0); else if (nLevel == 39) nExp = FloatToInt(nBaseExp * 52.0); else if (nLevel == 40) nExp = FloatToInt(nBaseExp * 40.0); else nExp = 0; } else if (nCR > 40 && IntToFloat(nCR)/2.0 != IntToFloat(nCR/2)){ if (nLevel >= 1 && nLevel <= 32) nExp = FloatToInt((nBaseExp * 341.3333) * fPow); else if (nLevel == 33) nExp = FloatToInt((nBaseExp * 264.0) * fPow); else if (nLevel == 34) nExp = FloatToInt((nBaseExp * 181.3333) * fPow); else if (nLevel == 35) nExp = FloatToInt((nBaseExp * 140.0) * fPow); else if (nLevel == 36) nExp = FloatToInt((nBaseExp * 96.0) * fPow); else if (nLevel == 37) nExp = FloatToInt((nBaseExp * 74.0) * fPow); else if (nLevel == 38) nExp = FloatToInt((nBaseExp * 50.6667) * fPow); else if (nLevel == 39) nExp = FloatToInt((nBaseExp * 39.0) * fPow); else if (nLevel == 40) nExp = FloatToInt((nBaseExp * 26.6667) * fPow); else nExp = 0; } else if (nCR > 40){ if (nLevel >= 1 && nLevel <= 33) nExp = FloatToInt((nBaseExp * 352.0) * fPow); else if (nLevel == 34) nExp = FloatToInt((nBaseExp * 272.0) * fPow); else if (nLevel == 35) nExp = FloatToInt((nBaseExp * 186.6667) * fPow); else if (nLevel == 36) nExp = FloatToInt((nBaseExp * 144.0) * fPow); else if (nLevel == 37) nExp = FloatToInt((nBaseExp * 98.6667) * fPow); else if (nLevel == 38) nExp = FloatToInt((nBaseExp * 76.0) * fPow); else if (nLevel == 39) nExp = FloatToInt((nBaseExp * 52.0) * fPow); else if (nLevel == 40) nExp = FloatToInt((nBaseExp * 40.0) * fPow); else nExp = 0; } else nExp = 0; return nExp; } //:://////////////////////////////////////////////////////////////////////////// // I took this out of the default death script (nw_c2_default7) so that it would // exist in one central location accessible from custom death scripts. --TK void AwardKillXP(object oKiller) { object oMod = GetModule(); // Declare major variables for XP Gen. object oPC; object oHench; int bIsDm; int nAdd; int nPCHD; int nHenHD; int nMonsterXP; int nPartyMembers; int nPartyLevelSum; int nHenchmen = 0; int nHighLevel = 0; // If XP System is turned off. Dont generate any XP. if (!GetLocalInt(oMod, "HCREXP")) { return; } // Dont give XP if killer was a DM. if (GetIsDM(oKiller)) { return; } // Dont give XP for Summoned Creatures, Animal Companions or Familiars. object oMaster = GetMaster(); if (GetIsObjectValid(oMaster)) { object oAni = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oMaster); if (oAni == OBJECT_SELF) { return; } object oFam = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oMaster); if (oFam == OBJECT_SELF) { return; } object oSum = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oMaster); if (oSum == OBJECT_SELF) { return; } } // If tag has "_NXP", then dont give XP. if (FindSubString(GetTag(OBJECT_SELF), "_NXP") > -1) { SendMessageToPC(oKiller, "You gain no experience from this kill!"); return; } // Search through all PC faction members. oPC = GetFirstFactionMember(oKiller); while (GetIsObjectValid(oPC)) { // Advance the party count. nPartyMembers++; // If not a DM. Check for Henchmen. bIsDm = GetIsDM(oPC); if (!bIsDm) { oHench = GetHenchman(oPC); while (GetIsObjectValid(oHench)) { nHenchmen++; nPartyMembers++; nHenHD = GetHitDice(oHench); nPartyLevelSum += nHenHD; if (nHenHD > nHighLevel) { nHighLevel = nHenHD; } oHench = GetHenchman(oHench); } } // Adjust levels if they are more than 4 apart. nAdd = 0; nPCHD = GetHitDice(oPC); if (nPCHD > nHighLevel) { nHighLevel = nPCHD; } else if ((nHighLevel - nPCHD) > 4) { nAdd = nHighLevel; } if (bIsDm) { nPartyMembers--; } else if (nAdd == 0) { nPartyLevelSum += nPCHD; } else { nPartyLevelSum += nAdd; } oPC = GetNextFactionMember(oKiller); } // If no PC's was found, exit out. if (nPartyMembers == 0) { return; } // Compute XP based on average party level and monster CR using the XP table. // Note: Bonus XP is added AFTER the XP is computed from the table. int nBaseExp = GetLocalInt(oMod, "BASEXP"); float fCR = GetChallengeRating(OBJECT_SELF); float fPLAvg = (IntToFloat(nPartyLevelSum)/IntToFloat(nPartyMembers)); int nLevel = FloatToInt(fPLAvg); nMonsterXP = UseXPTable(nBaseExp, fCR, nLevel); nMonsterXP += GetLocalInt(oMod, "BONUSXP"); int nCharXP = (nMonsterXP/nPartyMembers); // If CR is less than 1, multiply XP by CR. if (fCR < 1.0) { nCharXP = FloatToInt(nCharXP * fCR); } // HCR - Fix for henchmen getting only 3/4 xp for kills rest goes to party. if (nHenchmen > 0) { int nHenchmenbonus = ((nCharXP*nHenchmen)/8) / (nPartyMembers-nHenchmen); nCharXP = nCharXP + nHenchmenbonus; } // Loop through the faction again, this time to give out the adjusted XP. object oMyArea = GetArea(OBJECT_SELF); int bLvlTrain = GetLocalInt(oMod, "LEVELTRAINER"); int bSubraces = GetLocalInt(oMod, "SUBRACES"); int nHenchmenbonus; int nSCharXP; int nCR; oPC = GetFirstFactionMember(oKiller); while (GetIsObjectValid(oPC)) { if (!GetIsDM(oPC) && oMyArea == GetArea(oPC)) { // Discourages grouping of higher levels with lower levels to get XP. nLevel = GetHitDice(oPC); nMonsterXP = UseXPTable(nBaseExp, fCR, nLevel); nMonsterXP += GetLocalInt(oMod, "BONUSXP"); nSCharXP = nMonsterXP / nPartyMembers; // If CR is less than 1, multiply XP by CR. if (fCR < 1.0) { nSCharXP = FloatToInt(nSCharXP * fCR); } // Fix for henchmen getting only 3/4 xp for kills rest goes to party. if (nHenchmen > 0) { nHenchmenbonus = ((nSCharXP*nHenchmen)/8)/(nPartyMembers-nHenchmen); nSCharXP = (nSCharXP + nHenchmenbonus); } // Party XP should never be more than Single XP. if (nCharXP > nSCharXP && nPartyMembers > 1) { nCharXP = nSCharXP; } // Should never get XP if 8+ CR levels above CR. nCR = 0; if (fCR < 1.0) { nCR = 1; } else { nCR = FloatToInt(fCR); } if ((GetHitDice(oPC) - nCR) >= (8 + nCR)) { nCharXP = 0; } int nCurLvl = GetHitDice(oPC); string sID = GetName(oPC) + GetPCPlayerName(oPC); int nExpPen = GetLocalInt(oMod, "REZPEN" + sID); int nNxtLvl = ((((nCurLvl + 1) * nCurLvl) / 2 * 1000) - 1); // Adjust experience by ECL if using the CRR subrace system. if (bSubraces) { nCharXP = crr_SubraceHCR_XPbyECL(oPC, nCharXP); } int nXP = GetXP(oPC); if (!bLvlTrain) { if (nCharXP > 0) { GiveXPToCreature(oPC, nCharXP); } else { if (nPartyMembers == 1) { SendMessageToPC(oPC, "You learn nothing from this kill. You are too far advanced in level."); } else { SendMessageToPC(oPC, "You learn nothing from this kill. Your party is too far advanced in level."); } } } else if (nExpPen) { if (nCharXP > nExpPen) { SendMessageToPC(oPC, "You have paid off your exp penalty."); DeleteLocalInt(oMod, "REZPEN" + sID); } else { nExpPen = (nExpPen - nCharXP); SendMessageToPC(oPC, "Remaining exp penalty is: " + IntToString(nExpPen)); SetLocalInt(oMod, "REZPEN" + sID, nExpPen); } } else if ((nXP + nCharXP) > nNxtLvl) { if (nNxtLvl <= GetXP(oPC)) { SendMessageToPC(oPC, "You learn nothing from this kill. Perhaps you should seek out training."); } else { SetXP(oPC, nNxtLvl); SendMessageToPC(oPC, "You learn little from this kill. Perhaps you should seek out training."); } } else { if (nCharXP > 0) { GiveXPToCreature(oPC, nCharXP); } else { if (nPartyMembers == 1) { SendMessageToPC(oPC, "You learn nothing from this kill. You are too far advanced in level."); } else { SendMessageToPC(oPC, "You learn nothing from this kill. Your party is too far advanced in level."); } } } } oPC = GetNextFactionMember(oKiller); } }