Make level calculation and experience with Javascript

5

I'm trying to make a code that takes the value of the experience base ( base ) and subtracts from the experience gained ( bn ), so the code returns how many levels it went up ( up ) and exp remaining.

I'm having trouble getting the base to match the level 2. I was able to do only with if/else , however there was a lot of code and the forum HTML page did not support it.

Code

$(document).ready(function() {
  $("#calcular").click(function() {
    var base;
    var lv = $("#level").val();
    var tp = $("#tipo").val();
    var bt = $("#batalha").val();
    var bn = $("#numero").val();
    var res = $("#resultado").val();



    if(lv==1) {
      base=10;
    }
    if(lv==2) {
      base=30;
    }


    up=0;


    while(bn>=base){

      lv++;
      $("#lv").val(lv)

      bn= bn-base;
      up++;
      $("#up").val(up);

    }



  });
});
body {
  font-family:'Segoe UI', Calibri, Helvetica, Tahoma, Verdana, Sans-Serif;
  color:#000;
  font-size:11pt;
}

select {
  width:160px;
  border:1px solid #333;
  padding:3px;
}

input {
  width:152px;
  border:1px solid #333;
  padding:3px;
  text-align:right;
}

#calcular {
  width:160px;
  text-align:center;
  background:#666;
  color:#fff;
}

#exp {
  text-align:center;
}
#exp2 {
  text-align:center;
}
#exp3 {
  text-align:center;
}

td {
  padding-right:10px;
  text-align:right;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><scriptsrc="http://pokemyrpg.forumeiros.com/24899.js" type="text/javascript"></script>

<form>
  <table border="0">
    <tbody>
      <tr>
        <td>
          Informe o Nível:
        </td>
        <td>
          <select id="level">
            <option value="1">Nível 1</option>
            <option value="2">Nível 2</option>
            <option value="3">Nível 3</option>
            <option value="4">Nível 4</option>
            <option value="5">Nível 5</option>
            <option value="6">Nível 6</option>
            <option value="7">Nível 7</option>
            <option value="8">Nível 8</option>
            <option value="9">Nível 9</option>
            <option value="10">Nível 10</option>
            <option value="11">Nível 11</option>
            <option value="12">Nível 12</option>
            <option value="13">Nível 13</option>
            <option value="14">Nível 14</option>
            <option value="15">Nível 15</option>
            <option value="16">Nível 16</option>
            <option value="17">Nível 17</option>
            <option value="18">Nível 18</option>
            <option value="19">Nível 19</option>
            <option value="20">Nível 20</option>
            <option value="21">Nível 21</option>
            <option value="22">Nível 22</option>
            <option value="23">Nível 23</option>
            <option value="24">Nível 24</option>
            <option value="25">Nível 25</option>
            <option value="26">Nível 26</option>
            <option value="27">Nível 27</option>
            <option value="28">Nível 28</option>
            <option value="29">Nível 29</option>
            <option value="30">Nível 30</option>
            <option value="31">Nível 31</option>
            <option value="32">Nível 32</option>
            <option value="33">Nível 33</option>
            <option value="34">Nível 34</option>
            <option value="35">Nível 35</option>
            <option value="36">Nível 36</option>
            <option value="37">Nível 37</option>
            <option value="38">Nível 38</option>
            <option value="39">Nível 39</option>
            <option value="40">Nível 40</option>
            <option value="41">Nível 41</option>
            <option value="42">Nível 42</option>
            <option value="43">Nível 43</option>
            <option value="44">Nível 44</option>
            <option value="45">Nível 45</option>
            <option value="46">Nível 46</option>
            <option value="47">Nível 47</option>
            <option value="48">Nível 48</option>
            <option value="49">Nível 49</option>
            <option value="50">Nível 50</option>
            <option value="51">Nível 51</option>
            <option value="52">Nível 52</option>
            <option value="53">Nível 53</option>
            <option value="54">Nível 54</option>
            <option value="55">Nível 55</option>
            <option value="56">Nível 56</option>
            <option value="57">Nível 57</option>
            <option value="58">Nível 58</option>
            <option value="59">Nível 59</option>
            <option value="60">Nível 60</option>
            <option value="61">Nível 61</option>
            <option value="62">Nível 62</option>
            <option value="63">Nível 63</option>
            <option value="64">Nível 64</option>
            <option value="65">Nível 65</option>
            <option value="66">Nível 66</option>
            <option value="67">Nível 67</option>
            <option value="68">Nível 68</option>
            <option value="69">Nível 69</option>
            <option value="70">Nível 70</option>
            <option value="71">Nível 71</option>
            <option value="72">Nível 72</option>
            <option value="73">Nível 73</option>
            <option value="74">Nível 74</option>
            <option value="75">Nível 75</option>
            <option value="76">Nível 76</option>
            <option value="77">Nível 77</option>
            <option value="78">Nível 78</option>
            <option value="79">Nível 79</option>
            <option value="80">Nível 80</option>
            <option value="81">Nível 81</option>
            <option value="82">Nível 82</option>
            <option value="83">Nível 83</option>
            <option value="84">Nível 84</option>
            <option value="85">Nível 85</option>
            <option value="86">Nível 86</option>
            <option value="87">Nível 87</option>
            <option value="88">Nível 88</option>
            <option value="89">Nível 89</option>
            <option value="90">Nível 90</option>
            <option value="91">Nível 91</option>
            <option value="92">Nível 92</option>
            <option value="93">Nível 93</option>
            <option value="94">Nível 94</option>
            <option value="95">Nível 95</option>
            <option value="96">Nível 96</option>
            <option value="97">Nível 97</option>
            <option value="98">Nível 98</option>
            <option value="99">Nível 99</option>
            <option value="100">Nível 100</option>
          </select>
        </td>
      </tr>

      <tr>
        <td>
          Exp ganha:
        </td>
        <td>
          <input max="25" min="0" step="1" pattern="0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25" value="0" type="text" id="numero" />
        </td>
      </tr>
      <tr>
        <td>
        </td>
        <td>
          <input value="Up!" type="button" id="calcular" />
        </td>
      </tr>
      <tr>
        <td>
          Níveis upados:
        </td>
        <td>
          <input id="up" type="text" />
        </td></tr>
    </tbody>
  </table>
</form>

More information:

I'm trying to do that when I put 40 exp , it goes up 2 levels, the base of level 1 being 10 and the base of level 2 is 40 . But when I put 40 of exp it upa 4 levels, being that it is considering only the base of level 1 that is 10 (10 * 4 = 40).

So, when putting 40 of exp it should test if it is higher than the base (in the case 10 ), if yes it will level 2. be 30 , so it should test if the remaining exp is greater than 30, if it is going to go to another level.

Thank you in advance.

    
asked by anonymous 26.08.2015 / 20:19

4 answers

1

Well I do not understand what the right concept is, but in theory, I think that's what you need:

<title>Calculadora de EXP</title><meta charset="utf-8"><style type="text/css">

body {
   font-family:'Segoe UI', Calibri, Helvetica, Tahoma, Verdana, Sans-Serif;
   color:#000;
   font-size:11pt;
}

select {
   width:160px;
   border:1px solid #333;
   padding:3px;
}

input {
   width:152px;
   border:1px solid #333;
   padding:3px;
   text-align:right;
}

#calcular {
   width:160px;
   text-align:center;
   background:#666;
   color:#fff;
}

#exp {
   text-align:center;
}
#exp2 {
   text-align:center;
}
#exp3 {
   text-align:center;
}

td {
   padding-right:10px;
   text-align:right;
}

</style>
<script src="http://pokemyrpg.forumeiros.com/24899.js"type="text/javascript"></script>
<script>
$(document).ready(function() {
   $("#calcular").click(function() {
      var lv = $("#level").val();
      var tp = $("#tipo").val();
      var bt = $("#batalha").val();
      var exp = $("#exp").val();
      var res = $("#resultado").val();
      var itens = getCalcBase(lv, exp);
      //console.log(itens);
      $("#up").val(itens['levelup']);
      $("#lv").val(itens['exp_restante']);

      if (itens['exp_atual'] < itens['exp_required']) {
          alert('experiência requerida para esse nível: '+itens['exp_required']);
      }

      if (itens['exp_atual'] >= itens['exp_required_last_nivel']) {
          alert('você passou de nível: '+itens['levelup']);
       }
   });
});

function getCalcBase(selectedLevel, exp) {
    var expAtual = exp;
    var totalLevels = 100;   
    var levelup = selectedLevel;
    var base = [];
    var itens = [];
    var baseVal = 10;

    for (var level=1; level<=(totalLevels - selectedLevel); level++) {
        base[level] = baseVal;
        baseVal *= 4; 
    }

    var exp_required = base[selectedLevel];
    var lastLevelExp = exp_required * 4;

    if (expAtual >= lastLevelExp) {
      while (exp >= base[selectedLevel]) {
        exp -= base[selectedLevel];
        if (exp >= base[levelup]) {
           levelup++;
        }
      }
    }

   itens['exp_restante'] = exp;
   itens['exp_atual'] = expAtual;
   itens['levelup'] = levelup;
   itens['exp_required'] = exp_required;
   itens['exp_required_last_nivel'] = lastLevelExp ;
   return itens;
}
</script> 
<form>
   <table border="0">
      <tbody>
         <tr>
            <td>
               Informe o Nível:
            </td>
            <td>
               <select id="level">
<option value="1">Nível 1</option>
<option value="2">Nível 2</option>
<option value="3">Nível 3</option>
<option value="4">Nível 4</option>
<option value="5">Nível 5</option>
<option value="6">Nível 6</option>
<option value="7">Nível 7</option>
<option value="8">Nível 8</option>
<option value="9">Nível 9</option>
<option value="10">Nível 10</option>
<option value="11">Nível 11</option>
<option value="12">Nível 12</option>
<option value="13">Nível 13</option>
<option value="14">Nível 14</option>
<option value="15">Nível 15</option>
<option value="16">Nível 16</option>
<option value="17">Nível 17</option>
<option value="18">Nível 18</option>
<option value="19">Nível 19</option>
<option value="20">Nível 20</option>
<option value="21">Nível 21</option>
<option value="22">Nível 22</option>
<option value="23">Nível 23</option>
<option value="24">Nível 24</option>
<option value="25">Nível 25</option>
<option value="26">Nível 26</option>
<option value="27">Nível 27</option>
<option value="28">Nível 28</option>
<option value="29">Nível 29</option>
<option value="30">Nível 30</option>
<option value="31">Nível 31</option>
<option value="32">Nível 32</option>
<option value="33">Nível 33</option>
<option value="34">Nível 34</option>
<option value="35">Nível 35</option>
<option value="36">Nível 36</option>
<option value="37">Nível 37</option>
<option value="38">Nível 38</option>
<option value="39">Nível 39</option>
<option value="40">Nível 40</option>
<option value="41">Nível 41</option>
<option value="42">Nível 42</option>
<option value="43">Nível 43</option>
<option value="44">Nível 44</option>
<option value="45">Nível 45</option>
<option value="46">Nível 46</option>
<option value="47">Nível 47</option>
<option value="48">Nível 48</option>
<option value="49">Nível 49</option>
<option value="50">Nível 50</option>
<option value="51">Nível 51</option>
<option value="52">Nível 52</option>
<option value="53">Nível 53</option>
<option value="54">Nível 54</option>
<option value="55">Nível 55</option>
<option value="56">Nível 56</option>
<option value="57">Nível 57</option>
<option value="58">Nível 58</option>
<option value="59">Nível 59</option>
<option value="60">Nível 60</option>
<option value="61">Nível 61</option>
<option value="62">Nível 62</option>
<option value="63">Nível 63</option>
<option value="64">Nível 64</option>
<option value="65">Nível 65</option>
<option value="66">Nível 66</option>
<option value="67">Nível 67</option>
<option value="68">Nível 68</option>
<option value="69">Nível 69</option>
<option value="70">Nível 70</option>
<option value="71">Nível 71</option>
<option value="72">Nível 72</option>
<option value="73">Nível 73</option>
<option value="74">Nível 74</option>
<option value="75">Nível 75</option>
<option value="76">Nível 76</option>
<option value="77">Nível 77</option>
<option value="78">Nível 78</option>
<option value="79">Nível 79</option>
<option value="80">Nível 80</option>
<option value="81">Nível 81</option>
<option value="82">Nível 82</option>
<option value="83">Nível 83</option>
<option value="84">Nível 84</option>
<option value="85">Nível 85</option>
<option value="86">Nível 86</option>
<option value="87">Nível 87</option>
<option value="88">Nível 88</option>
<option value="89">Nível 89</option>
<option value="90">Nível 90</option>
<option value="91">Nível 91</option>
<option value="92">Nível 92</option>
<option value="93">Nível 93</option>
<option value="94">Nível 94</option>
<option value="95">Nível 95</option>
<option value="96">Nível 96</option>
<option value="97">Nível 97</option>
<option value="98">Nível 98</option>
<option value="99">Nível 99</option>
<option value="100">Nível 100</option>
</select>
            </td>
         </tr>

         <tr>
            <td>
               Exp ganha:
            </td>
            <td>
               <input max="25" min="0" step="1" pattern="0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25" value="0" type="text" id="exp" />
            </td>
         </tr>
         <tr>
            <td>
            </td>
            <td>
               <input value="Up!" type="button" id="calcular" />
            </td>
         </tr>
         <tr>
            <td>
               Níveis upados:
            </td>
            <td>
               <input id="up" type="text" />
            </td></tr>
      </tbody>
   </table>
</form>
    
26.08.2015 / 22:40
2

Places the if within the while so that the base is updated at each iteration:

<title>Calculadora de EXP</title><meta charset="utf-8"><style type="text/css">
    
    body {
       font-family:'Segoe UI', Calibri, Helvetica, Tahoma, Verdana, Sans-Serif;
       color:#000;
       font-size:11pt;
    }
    
    select {
       width:160px;
       border:1px solid #333;
       padding:3px;
    }
    
    input {
       width:152px;
       border:1px solid #333;
       padding:3px;
       text-align:right;
    }
    
    #calcular {
       width:160px;
       text-align:center;
       background:#666;
       color:#fff;
    }
    
    #exp {
       text-align:center;
    }
    #exp2 {
       text-align:center;
    }
    #exp3 {
       text-align:center;
    }
    
    td {
       padding-right:10px;
       text-align:right;
    }
    
    </style><script src="http://pokemyrpg.forumeiros.com/24899.js"type="text/javascript"></script><script>
    $(document).ready(function() {
       $("#calcular").click(function() {
          var base;
          var lv = $("#level").val();
          var tp = $("#tipo").val();
          var bt = $("#batalha").val();
          var bn = $("#numero").val();
          var res = $("#resultado").val();
          
    
          
             if(lv==1) { base=10; }
             if(lv==2) { base=30; }
             
          
          var up=0;
             
          
          while(bn>=base){             
             lv++;
             $("#lv").val(lv);
             
             bn = bn-base;
            up++;
            $("#up").val(up);
            if(lv==1) { base=10; }
            if(lv==2) { base=30; }             
          }
          
          
          
       });
    });
    
    </script> 
    <form>
       <table border="0">
          <tbody>
             <tr>
                <td>
                   Informe o Nível:
                </td>
                <td>
                   <select id="level">
    <option value="1">Nível 1</option>
    <option value="2">Nível 2</option>
    <option value="3">Nível 3</option>
    <option value="4">Nível 4</option>
    <option value="5">Nível 5</option>
    <option value="6">Nível 6</option>
    <option value="7">Nível 7</option>
    <option value="8">Nível 8</option>
    <option value="9">Nível 9</option>
    <option value="10">Nível 10</option>
    <option value="11">Nível 11</option>
    <option value="12">Nível 12</option>
    <option value="13">Nível 13</option>
    <option value="14">Nível 14</option>
    <option value="15">Nível 15</option>
    <option value="16">Nível 16</option>
    <option value="17">Nível 17</option>
    <option value="18">Nível 18</option>
    <option value="19">Nível 19</option>
    <option value="20">Nível 20</option>
    <option value="21">Nível 21</option>
    <option value="22">Nível 22</option>
    <option value="23">Nível 23</option>
    <option value="24">Nível 24</option>
    <option value="25">Nível 25</option>
    <option value="26">Nível 26</option>
    <option value="27">Nível 27</option>
    <option value="28">Nível 28</option>
    <option value="29">Nível 29</option>
    <option value="30">Nível 30</option>
    <option value="31">Nível 31</option>
    <option value="32">Nível 32</option>
    <option value="33">Nível 33</option>
    <option value="34">Nível 34</option>
    <option value="35">Nível 35</option>
    <option value="36">Nível 36</option>
    <option value="37">Nível 37</option>
    <option value="38">Nível 38</option>
    <option value="39">Nível 39</option>
    <option value="40">Nível 40</option>
    <option value="41">Nível 41</option>
    <option value="42">Nível 42</option>
    <option value="43">Nível 43</option>
    <option value="44">Nível 44</option>
    <option value="45">Nível 45</option>
    <option value="46">Nível 46</option>
    <option value="47">Nível 47</option>
    <option value="48">Nível 48</option>
    <option value="49">Nível 49</option>
    <option value="50">Nível 50</option>
    <option value="51">Nível 51</option>
    <option value="52">Nível 52</option>
    <option value="53">Nível 53</option>
    <option value="54">Nível 54</option>
    <option value="55">Nível 55</option>
    <option value="56">Nível 56</option>
    <option value="57">Nível 57</option>
    <option value="58">Nível 58</option>
    <option value="59">Nível 59</option>
    <option value="60">Nível 60</option>
    <option value="61">Nível 61</option>
    <option value="62">Nível 62</option>
    <option value="63">Nível 63</option>
    <option value="64">Nível 64</option>
    <option value="65">Nível 65</option>
    <option value="66">Nível 66</option>
    <option value="67">Nível 67</option>
    <option value="68">Nível 68</option>
    <option value="69">Nível 69</option>
    <option value="70">Nível 70</option>
    <option value="71">Nível 71</option>
    <option value="72">Nível 72</option>
    <option value="73">Nível 73</option>
    <option value="74">Nível 74</option>
    <option value="75">Nível 75</option>
    <option value="76">Nível 76</option>
    <option value="77">Nível 77</option>
    <option value="78">Nível 78</option>
    <option value="79">Nível 79</option>
    <option value="80">Nível 80</option>
    <option value="81">Nível 81</option>
    <option value="82">Nível 82</option>
    <option value="83">Nível 83</option>
    <option value="84">Nível 84</option>
    <option value="85">Nível 85</option>
    <option value="86">Nível 86</option>
    <option value="87">Nível 87</option>
    <option value="88">Nível 88</option>
    <option value="89">Nível 89</option>
    <option value="90">Nível 90</option>
    <option value="91">Nível 91</option>
    <option value="92">Nível 92</option>
    <option value="93">Nível 93</option>
    <option value="94">Nível 94</option>
    <option value="95">Nível 95</option>
    <option value="96">Nível 96</option>
    <option value="97">Nível 97</option>
    <option value="98">Nível 98</option>
    <option value="99">Nível 99</option>
    <option value="100">Nível 100</option>
    </select>
                </td>
             </tr>
             
             <tr>
                <td>
                   Exp ganha:
                </td>
                <td>
                   <input max="25" min="0" step="1" pattern="0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25" value="0" type="text" id="numero" />
                </td>
             </tr>
             <tr>
                <td>
                </td>
                <td>
                   <input value="Up!" type="button" id="calcular" />
                </td>
             </tr>
             <tr>
                <td>
                   Níveis upados:
                </td>
                <td>
                   <input id="up" type="text" />
                </td></tr>
          </tbody>
       </table>
    </form>
    
26.08.2015 / 20:43
2

I automated the creation of levels, at each level it will ask for 10% more than the previous one, and every 5 levels I make an additional increment of 50%.

follows an implementation, in the case I have a list of characters and a list of levels, as in the example below:

  • level: 1 Next: 10 (10 + 0)
  • level: 2 Next: 11 (10 + 1)
  • level: 3 Next: 13 (11 + 2)
  • level: 4 Next: 15 (13 + 2)
  • level: 5 Next: 26 (15 + 8 + 3)
  • level: 6 Next: 29 (25 + 3)

Then I created some players and gave them an initial exp.

When selecting a player, I look for his information in our list of players, as well as information regarding his level.

//Inicio - Mock dos Niveis
var expNext = 10;
var expMin = 0;

var niveis = [];
for (var nivel = 1; nivel < 100; nivel++) {   
  if (nivel % 5 == 0) {
    expNext = Math.ceil(expNext * 1.5);
  }
  niveis.push({ 
    "nivel": nivel, //nivel atual
    "expNext": expNext, //exp para o proximo nivel
    "expMin": expMin, //exp total ao chegar neste nivel
    "expMax": expMin + expNext //exp total para o proximo nivel
  });
  expMin = expMin + expNext;
  expNext = Math.ceil(expNext * 1.1);
}
//Termino - Mock dos Niveis

//Inicio - Mock dos Personagens
var personagens = [];
for (var id = 1; id <= 5; id++) {
  var firstName = faker.name.firstName();
  var lastName = faker.name.lastName();
  var currentExp = faker.random.number(128);
  var currentNivel = niveis.filter(function (nivel) {
    return nivel.expMin < currentExp && currentExp < nivel.expMax;
  })[0];
  personagens.push({
    "id": id, //id incremental do personagem
    "nome": faker.name.findName(firstName, lastName), //nome do personagem
    "currentExp": currentExp, //exp total atual
    "currentNivel": currentNivel.nivel //nivel atual
  });
}
//Termino - Mock dos Personagens

var listPersonagens = document.getElementById("listPersonagens");
var expPersonagens = document.getElementById("expPersonagens");
var expGanha = document.getElementById("expGanha");
var expIncrementar = document.getElementById("expIncrementar");
var tmplPersonagem = document.getElementById("tmplPersonagem").innerHTML;

tmplPersonagem = Handlebars.compile(tmplPersonagem);
listPersonagens.innerHTML = tmplPersonagem(personagens);

var onListPersonagensChange = function (event) {
  var personagem = personagens.filter(function (per) {
    return per.id == listPersonagens.value;
  })[0];
  var nivel = niveis.filter(function (niv) {
    return niv.expMin < personagem.currentExp && personagem.currentExp < niv.expMax;
  })[0];
  expPersonagens.textContent = "Nivel Atual: " + nivel.nivel + " | Exp Atual: ";
  expPersonagens.textContent += (personagem.currentExp - nivel.expMin) + "/" + nivel.expNext;
};

var onExpIncrementarClick = function (event) {
  var personagem = personagens.filter(function (per) {
    return per.id == listPersonagens.value;
  })[0];

  personagem.currentExp += parseInt(expGanha.value);    
  var nivel = niveis.filter(function (niv) {
    return niv.expMin < personagem.currentExp && personagem.currentExp < niv.expMax;
  })[0];
  personagem.currentNivel = nivel.nivel;

  expPersonagens.textContent = "Nivel Atual: " + nivel.nivel + " | Exp Atual: ";
  expPersonagens.textContent += (personagem.currentExp - nivel.expMin) + "/" + nivel.expNext;
}

listPersonagens.addEventListener("change", onListPersonagensChange);
expIncrementar.addEventListener("click", onExpIncrementarClick);

onListPersonagensChange({ target: listPersonagens });
<script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/3.0.3/handlebars.js"></script><scriptsrc="https://rawgit.com/Marak/faker.js/master/build/build/faker.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><div><label>personagem:<selectid="listPersonagens">

    </select>
  </label>
</div>
<div>
  <span id="expPersonagens"></span>
</div>
<div>
  <label>
    Exp Ganha: 
    <input id="expGanha" type="text" ></input>
  </label>
</div>
<div>
  <input id="expIncrementar" type="button" value="Up!" />
</div>

<script id="tmplPersonagem" type="text/template">
    {{#each this}}
    <option value="{{id}}" >{{nome}}</option>
    {{/each}}
</script>

Note that any change in inputs reflects in the niveis and personagens lists.

    
26.08.2015 / 22:03
1

I commented well on the solution, but basically you need to loop XP Win to the XP Player and check the XP of the Player is sufficient for him to go from level, if it is to raise the level, if not just add XP Win to XP of the Player:

jQuery(document).ready(function($) {

   var levels = [0,
    10,    30,    90, 
    270,   510,   830, 
    1090,  1570,  2000,
    4000,  7000,  9999,
    15000, 20000, 50000
   ];
  
   var maximo = false;

   $("#calcular").click(function() {
     
     if (maximo){
        alert('Seu Level já está no máximo.');
        return;
     }

      // Level Atual
      var level = parseInt( $("#level").val()   );

      // Exp Atual
      var exp =   parseInt( $("#exp").val()     );

      // XP Ganha
      var xp =    parseInt( $("#numero").val()  );

      // Total de XP Ganha
      $('#exptotal').val( parseInt( $('#exptotal').val() ) + xp );

      // Levels Upados
      var levelup = 0;

      while(xp > 0){
         // Se XP ganha é maior ou igual a XP necessária para subir o level
         if ((exp + xp) >= levels[level] ){
            // Sobe de Level
            level++;
            levelup++;
            xp -= (levels[level] - exp);
            exp = 0;
           
            if (levels[level] == undefined){
               alert('Parabéns! Você atingiu o nivel máximo.');
               maximo = true;
               xp = 0;
            }
           
         } else {
            // Senão, adiciona XP ganha
            exp += xp;
            xp = 0;
         }
      }

      $("#level").val(level)

      $("#up").val(levelup);

      $("#exp").val( exp );

      $("#numero").val(0);



   });
});
body {
  font-family:'Segoe UI', Calibri, Helvetica, Tahoma, Verdana, Sans-Serif;
  color:#000;
  font-size:11pt;
}

select {
  width:160px;
  border:1px solid #333;
  padding:3px;
}

input {
  width:152px;
  border:1px solid #333;
  padding:3px;
  text-align:right;
}

#calcular {
  width:160px;
  text-align:center;
  background:#666;
  color:#fff;
}

#exp {
  text-align:center;
}
#exp2 {
  text-align:center;
}
#exp3 {
  text-align:center;
}

td {
  padding-right:10px;
  text-align:right;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><form><tableborder="0">
    <tbody>
      <tr>
        <td>
          Informe o Nível:
        </td>
        <td>
          <select id="level">
            <option value="0">Noob</option>
            <option value="1">Nível 1</option>
            <option value="2">Nível 2</option>
            <option value="3">Nível 3</option>
            <option value="4">Nível 4</option>
            <option value="5">Nível 5</option>
            <option value="6">Nível 6</option>
            <option value="7">Nível 7</option>
            <option value="8">Nível 8</option>
            <option value="9">Nível 9</option>
            <option value="10">Nível 10</option>
            <option value="11">Nível 11</option>
            <option value="12">Nível 12</option>
            <option value="13">Nível 13</option>
            <option value="14">Nível 14</option>
            <option value="15">Nível 15</option>
            <option value="16">Nível 16</option>
            <option value="17">Nível 17</option>
            <option value="18">Nível 18</option>
            <option value="19">Nível 19</option>
            <option value="20">Nível 20</option>
            <option value="21">Nível 21</option>
            <option value="22">Nível 22</option>
            <option value="23">Nível 23</option>
            <option value="24">Nível 24</option>
            <option value="25">Nível 25</option>
            <option value="26">Nível 26</option>
            <option value="27">Nível 27</option>
            <option value="28">Nível 28</option>
            <option value="29">Nível 29</option>
            <option value="30">Nível 30</option>
            <option value="31">Nível 31</option>
            <option value="32">Nível 32</option>
            <option value="33">Nível 33</option>
            <option value="34">Nível 34</option>
            <option value="35">Nível 35</option>
            <option value="36">Nível 36</option>
            <option value="37">Nível 37</option>
            <option value="38">Nível 38</option>
            <option value="39">Nível 39</option>
            <option value="40">Nível 40</option>
            <option value="41">Nível 41</option>
            <option value="42">Nível 42</option>
            <option value="43">Nível 43</option>
            <option value="44">Nível 44</option>
            <option value="45">Nível 45</option>
            <option value="46">Nível 46</option>
            <option value="47">Nível 47</option>
            <option value="48">Nível 48</option>
            <option value="49">Nível 49</option>
            <option value="50">Nível 50</option>
            <option value="51">Nível 51</option>
            <option value="52">Nível 52</option>
            <option value="53">Nível 53</option>
            <option value="54">Nível 54</option>
            <option value="55">Nível 55</option>
            <option value="56">Nível 56</option>
            <option value="57">Nível 57</option>
            <option value="58">Nível 58</option>
            <option value="59">Nível 59</option>
            <option value="60">Nível 60</option>
            <option value="61">Nível 61</option>
            <option value="62">Nível 62</option>
            <option value="63">Nível 63</option>
            <option value="64">Nível 64</option>
            <option value="65">Nível 65</option>
            <option value="66">Nível 66</option>
            <option value="67">Nível 67</option>
            <option value="68">Nível 68</option>
            <option value="69">Nível 69</option>
            <option value="70">Nível 70</option>
            <option value="71">Nível 71</option>
            <option value="72">Nível 72</option>
            <option value="73">Nível 73</option>
            <option value="74">Nível 74</option>
            <option value="75">Nível 75</option>
            <option value="76">Nível 76</option>
            <option value="77">Nível 77</option>
            <option value="78">Nível 78</option>
            <option value="79">Nível 79</option>
            <option value="80">Nível 80</option>
            <option value="81">Nível 81</option>
            <option value="82">Nível 82</option>
            <option value="83">Nível 83</option>
            <option value="84">Nível 84</option>
            <option value="85">Nível 85</option>
            <option value="86">Nível 86</option>
            <option value="87">Nível 87</option>
            <option value="88">Nível 88</option>
            <option value="89">Nível 89</option>
            <option value="90">Nível 90</option>
            <option value="91">Nível 91</option>
            <option value="92">Nível 92</option>
            <option value="93">Nível 93</option>
            <option value="94">Nível 94</option>
            <option value="95">Nível 95</option>
            <option value="96">Nível 96</option>
            <option value="97">Nível 97</option>
            <option value="98">Nível 98</option>
            <option value="99">Nível 99</option>
            <option value="100">Nível 100</option>
          </select>
        </td>
      </tr>
      <tr>
        <td>Exp:</td>
        <td><input type="text" id="exp" value="0"></td>
      </tr>
      <tr>
        <td>Exp Total:</td>
        <td><input type="text" id="exptotal" value="0" readonly></td>
      </tr>
          <tr>
              <td colspan="2" style="text-align:center;">
                  ---------------------------------------------
              </td>
          </tr>
      <tr>
        <td>
          Exp ganha:
        </td>
        <td>
          <input max="25" min="0" step="1" pattern="0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25" value="0" type="text" id="numero" />
        </td>
      </tr>
      <tr>
        <td>
        </td>
        <td>
          <input value="Up!" type="button" id="calcular" />
        </td>
      </tr>
      <tr>
        <td>
          Níveis upados:
        </td>
        <td>
          <input id="up" type="text" />
        </td></tr>
    </tbody>
  </table>
</form>

Note: I did not write the required XP for all levels, but I implemented it up to level 16 and put a maximum level rule in the code. Just change the rule to suit your game.

    
26.08.2015 / 21:37