Advertisement
syntax53

MajorMUD Exp Calculation Formula

Sep 5th, 2024 (edited)
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.63 KB | Gaming | 0 0
  1. <?php
  2.  
  3. $race = 45; //race exp table percentage
  4. $class = 250; //class exp table percentage
  5. $startlevel = 25; //return exp needed starting at this level
  6. $numlevels = 10; //return this many levels starting from startlevel
  7. $get_single_level = 0; //override start and numlevel and just return this level
  8.  
  9. $exptable = GetExpTable($race, $class, $startlevel, $numlevels, $get_single_level);
  10. echo '<pre>'.print_r($exptable, true).'</pre>';
  11.  
  12. function GetExpTable($racepct, $classpct, $startlevel=1, $numlevels=100, $returnlevel=0) {
  13.     $i = 0; $m1 = 0; $m2 = 0; $iExp = 0; $iE1 = 0; $iE2 = 0; $ret = array();
  14.     $uint = 4294967295;
  15.     if ($returnlevel > 0) { $startlevel = 1; $numlevels = $returnlevel; }
  16.    
  17.     // Calculate experience
  18.     for ($i = 1; $i <= ($startlevel+$numlevels-1); $i++) {
  19.         if ($i == 1) {
  20.             $iExp = 0;
  21.         } elseif ($i == 2) {
  22.             $iExp = ($racepct + $classpct) * 10;
  23.         } else {
  24.             list($m1, $m2) = GetExpModifiers($i);
  25.  
  26.             // Method 1
  27.             if ($m1 == 0 || $m2 == 0) {
  28.                 $iE1 = 0;
  29.             } else {
  30.                 $iE1 = $iExp * $m1;
  31.                 $iE1 = floor($iE1 / $m2);
  32.             }
  33.  
  34.             // Method 2
  35.             $iE2 = floor($iExp / 100);
  36.             if ($i >= 55) {
  37.                 $iE2 = $iE2 * 110;
  38.             } else {
  39.                 $iE2 = $iE2 * 115;
  40.             }
  41.            
  42.             // Experience exceed long limit?
  43.             if ($iE2 < floor($uint / 100)) {
  44.                 $iExp = $iE1;
  45.             } else {
  46.                 $iE2 = floor($iE2 / 100);
  47.                 $iE2 = $iE2 * 100;
  48.                 $iExp = $iE2;
  49.             }
  50.         }
  51.        
  52.         if ($returnlevel > 0) {
  53.             if ($returnlevel == $i) {
  54.                 $ret[$i] = $iExp;
  55.             }
  56.         } elseif ($i >= $startlevel) {
  57.             $ret[$i] = $iExp;
  58.         }
  59.     }
  60.    
  61.     return $ret;
  62. }
  63.  
  64. // Returns the experience modifiers for a given level.
  65. function GetExpModifiers($iLevel) {
  66.     switch ($iLevel) {
  67.         case 3:
  68.             return [40, 20];
  69.         case 4:
  70.         case 5:
  71.             return [44, 24];
  72.         case 6:
  73.         case 7:
  74.             return [48, 28];
  75.         case 8:
  76.         case 9:
  77.             return [52, 32];
  78.         case 10:
  79.         case 11:
  80.             return [56, 36];
  81.         case 12:
  82.         case 13:
  83.             return [60, 40];
  84.         case 14:
  85.         case 15:
  86.             return [65, 45];
  87.         case 16:
  88.         case 17:
  89.             return [70, 50];
  90.         case 18:
  91.             return [75, 55];
  92.         default:
  93.             if ($iLevel <= 26) {
  94.                 return [50, 40];
  95.             } else {
  96.                 return [23, 20];
  97.             }
  98.     }
  99. }
  100.  
  101. ?>
  102.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement