Doing level calculation and experience with Javascript

Asked

Viewed 258 times

6

I’m trying to make a code that takes the value of the experience base (base) and subtract from the experience gained (bn), then the code returns how many levels it has risen (up) and the exp remainder.

I’m having trouble getting the "upar" base to match level 2. I was able to do just with if/else, however got a lot of code and the HTML page of the forum did not support.

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>
<script src="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 of exp, it goes up 2 levels, and the base of level 1 is 10 and the basis of level 2 is 40. But when I put 40 of exp he Upa 4 levels, being that he is considering only the basis of level 1 which is 10 (10 * 4 = 40).

So by putting 40 of exp it should test whether it is larger than the base (in case 10), if yes it Ups to level 2. When upgrading to level 2 the base becomes 30, then it should test if the remaining Exp is greater than 30, if it is going to upgrade another level.

Thanks in advance.

  • It’s very confusing explanation, is it a potentiation rule that you want? like var base = Math.pow(level, 10) ;

  • What would that be you call groundwork?

  • Because of level 1 (base 10) it jumps to level 2 (base 30) and changes experience it goes to level 4, that mess... it is very difficult to understand its logic.

  • Look at my answer @Fábioferreira

4 answers

2

Places if inside while so that the base is updated with 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>

2

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

follows an implementation, in 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 seek his information from our player list, 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>
<script src="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: 
    <select id="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 is reflected in the lists niveis and personagens.

  • Your example is top, +1

2


Well I don’t 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>
  • Exactly! Thank you very much.

  • Thanks also to all those who tried to help. ;)

1

I commented well on the solution, but basically you need to make a loop "passing" to XP Wins to the XP of the Player and checking if the Player’s XP is enough for him to pass the level, if he is going to go up the level, if it is not just add the Win XP to the Player’s XP:

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>
  <table border="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>


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

Browser other questions tagged

You are not signed in. Login or sign up in order to post.