Advertisement
Narzew

PB Experience

Feb 22nd, 2013
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 7.54 KB | None | 0 0
  1. # Module Copyrighted Peter O. (2006-2007)
  2. module PBExperience
  3.   @PBExpTable=[
  4.      0,1,8,27,64,125,216,343,512,729,
  5.      1000,1331,1728,2197,2744,3375,4096,4913,5832,6859,
  6.      8000,9261,10648,12167,13824,15625,17576,19683,21952,24389,
  7.      27000,29791,32768,35937,39304,42875,46656,50653,54872,59319,
  8.      64000,68921,74088,79507,85184,91125,97336,103823,110592,117649,
  9.      125000,132651,140608,148877,157464,166375,175616,185193,195112,205379,
  10.      216000,226981,238328,250047,262144,274625,287496,300763,314432,328509,
  11.      343000,357911,373248,389017,405224,421875,438976,456533,474552,493039,
  12.      512000,531441,551368,571787,592704,614125,636056,658503,681472,704969,
  13.      729000,753571,778688,804357,830584,857375,884736,912673,941192,970299,
  14.      1000000,
  15.  
  16.      0,1,15,52,122,237,406,637,942,1326,
  17.      1800,2369,3041,3822,4719,5737,6881,8155,9564,11111,
  18.      12800,14632,16610,18737,21012,23437,26012,28737,31610,34632,
  19.      37800,41111,44564,48155,51881,55737,59719,63822,68041,72369,
  20.      76800,81326,85942,90637,95406,100237,105122,110052,115015,120001,
  21.      125000,131324,137795,144410,151165,158056,165079,172229,179503,186894,
  22.      194400,202013,209728,217540,225443,233431,241496,249633,257834,267406,
  23.      276458,286328,296358,305767,316074,326531,336255,346965,357812,367807,
  24.      378880,390077,400293,411686,423190,433572,445239,457001,467489,479378,
  25.      491346,501878,513934,526049,536557,548720,560922,571333,583539,591882,
  26.      600000,
  27.  
  28.      0,1,4,13,32,65,112,178,276,393,
  29.      540,745,967,1230,1591,1957,2457,3046,3732,4526,
  30.      5440,6482,7666,9003,10506,12187,14060,16140,18439,20974,
  31.      23760,26811,30146,33780,37731,42017,46656,50653,55969,60505,
  32.      66560,71677,78533,84277,91998,98415,107069,114205,123863,131766,
  33.      142500,151222,163105,172697,185807,196322,210739,222231,238036,250562,
  34.      267840,281456,300293,315059,335544,351520,373744,390991,415050,433631,
  35.      459620,479600,507617,529063,559209,582187,614566,639146,673863,700115,
  36.      737280,765275,804997,834809,877201,908905,954084,987754,1035837,1071552,
  37.      1122660,1160499,1214753,1254796,1312322,1354652,1415577,1460276,1524731,1571884,
  38.      1640000,
  39.  
  40.      0,1,9,57,96,135,179,236,314,419,
  41.      560,742,973,1261,1612,2035,2535,3120,3798,4575,
  42.      5460,6458,7577,8825,10208,11735,13411,15244,17242,19411,
  43.      21760,24294,27021,29949,33084,36435,40007,43808,47846,52127,
  44.      56660,61450,66505,71833,77440,83335,89523,96012,102810,109923,
  45.      117360,125126,133229,141677,150476,159635,169159,179056,189334,199999,
  46.      211060,222522,234393,246681,259392,272535,286115,300140,314618,329555,
  47.      344960,360838,377197,394045,411388,429235,447591,466464,485862,505791,
  48.      526260,547274,568841,590969,613664,636935,660787,685228,710266,735907,
  49.      762160,789030,816525,844653,873420,902835,932903,963632,995030,1027103,
  50.      1059860,
  51.  
  52.      0,1,6,21,51,100,172,274,409,583,
  53.      800,1064,1382,1757,2195,2700,3276,3930,4665,5487,
  54.      6400,7408,8518,9733,11059,12500,14060,15746,17561,19511,
  55.      21600,23832,26214,28749,31443,34300,37324,40522,43897,47455,
  56.      51200,55136,59270,63605,68147,72900,77868,83058,88473,94119,
  57.      100000,106120,112486,119101,125971,133100,140492,148154,156089,164303,
  58.      172800,181584,190662,200037,209715,219700,229996,240610,251545,262807,
  59.      274400,286328,298598,311213,324179,337500,351180,365226,379641,394431,
  60.      409600,425152,441094,457429,474163,491300,508844,526802,545177,563975,
  61.      583200,602856,622950,643485,664467,685900,707788,730138,752953,776239,
  62.      800000,
  63.  
  64.      0,1,10,33,80,156,270,428,640,911,
  65.      1250,1663,2160,2746,3430,4218,5120,6141,7290,8573,
  66.      10000,11576,13310,15208,17280,19531,21970,24603,27440,30486,
  67.      33750,37238,40960,44921,49130,53593,58320,63316,68590,74148,
  68.      80000,86151,92610,99383,106480,113906,121670,129778,138240,147061,
  69.      156250,165813,175760,186096,196830,207968,219520,231491,243890,256723,
  70.      270000,283726,297910,312558,327680,343281,359370,375953,393040,410636,
  71.      428750,447388,466560,486271,506530,527343,548720,570666,593190,616298,
  72.      640000,664301,689210,714733,740880,767656,795070,823128,851840,881211,
  73.      911250,941963,973360,1005446,1038230,1071718,1105920,1140841,1176490,1212873,
  74.      1250000
  75.   ]
  76.  
  77.   MAXLEVEL=MAXIMUMLEVEL # See the settings for changing the max level
  78.  
  79. # Erratic (600000):
  80. #   For levels 0-50: n**3([100-n]/50)
  81. #   For levels 51-68: n**3([150-n]/100)
  82. #   For levels 69-98: n**3(1.274-[1/50][n/3]-p(n mod 3))
  83. #     where p(x) = array(0.000,0.008,0.014)[x]
  84. #   For levels 99-100: n**3([160-n]/100)
  85. # Fluctuating (1640000):
  86. #   For levels 0-15: n**3([24+{(n+1)/3}]/50)
  87. #   For levels 16-35: n**3([14+n]/50)
  88. #   For levels 36-100: n**3([32+{n/2}]/50)
  89.  
  90.   def self.pbGetExpInternal(level,growth) # :nodoc:
  91.     if level>100
  92.       # Use formulas for levels greater than 100
  93.       case growth
  94.         when 0 # 1000000 medium
  95.           return level**3
  96.         when 1 # 600000 erratic
  97.           # Different formula that causes 600000 EXP at level 100
  98.           return ( (level**3)*( (level * 6 / 10) / (100*1.0) ) ).floor
  99.         when 2 # 1640000 fluctuating
  100.           # Different formula that causes 1640000 EXP at level 100
  101.           rate=82
  102.           if level>100
  103.             # Slow rate with increasing level
  104.             rate-=(level-100)/2
  105.             rate=40 if rate<40
  106.           end
  107.           return ( (level**3)*( (level * rate / 100) / 50.0 ) ).floor
  108.         when 3 # 1059860 parabolic
  109.           return (6*(level**3)/5) - 15*(level**2) + 100*level - 140
  110.         when 4 # 800000 fast
  111.           return ( 4*(level**3)/5 ).floor
  112.         when 5 # 1250000 slow
  113.           return ( 5*(level**3)/4 ).floor
  114.         else
  115.           return 0
  116.       end
  117.     else
  118.       # Refer to experience table for levels 100 and less
  119.       return @PBExpTable[growth*101+level]
  120.     end
  121.   end
  122.  
  123. # Gets the maximum Exp Points possible for the given growth rate.
  124. # growth -- Growth rate.
  125.   def PBExperience.pbGetMaxExperience(growth)
  126.     if growth>=6 || growth<0
  127.       return ArgumentError.new("The growth rate is invalid.")
  128.     end
  129.     return pbGetExpInternal(MAXLEVEL,growth)
  130.   end
  131.  
  132. # Gets the number of Exp Points needed to reach the given
  133. # level with the given growth rate.
  134. # growth -- Growth rate.
  135.   def PBExperience.pbGetStartExperience(level,growth)
  136.     if growth>=6 || growth<0
  137.       return ArgumentError.new("The growth rate is invalid.")
  138.     end
  139.     if level<0
  140.       return ArgumentError.new("The level is invalid.")
  141.     end
  142.     level=MAXLEVEL if level>MAXLEVEL
  143.     return pbGetExpInternal(level,growth)
  144.   end
  145.  
  146. # Adds experience points ensuring that the new total doesn't
  147. # exceed the maximum Exp. Points for the given growth rate.
  148. # currexp -- Current Exp Points.
  149. # expgain -- Exp. Points to add
  150. # growth -- Growth rate.
  151.   def PBExperience.pbAddExperience(currexp,expgain,growth)
  152.     if growth>=6 || growth<0
  153.       return ArgumentError.new("The growth rate is invalid.")
  154.     end
  155.     exp=currexp+expgain
  156.     maxexp=pbGetExpInternal(MAXLEVEL,growth)
  157.     exp=maxexp if exp>maxexp
  158.     return exp  
  159.   end
  160.  
  161. # Calculates a level given the number of Exp Points and growth rate.
  162. # growth -- Growth rate.
  163.   def PBExperience.pbGetLevelFromExperience(exp,growth)
  164.     if growth>=6 || growth<0
  165.       return ArgumentError.new("The growth rate is invalid.")
  166.     end
  167.     maxexp=pbGetExpInternal(MAXLEVEL,growth)
  168.     exp=maxexp if exp>maxexp
  169.     i=0
  170.     for j in 0..MAXLEVEL
  171.       currentExp=pbGetExpInternal(i,growth)
  172.       return i if exp==currentExp
  173.       return i-1 if exp<currentExp
  174.       i+=1
  175.     end
  176.     return MAXLEVEL
  177.   end
  178. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement