DISorganic

Refine IVs with appraisals on pokeassistant.com

Aug 24th, 2016
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // credit to reddit user /u/dm_2112 - adapted by /u/rayanbfvr
  2. // original comment https://www.reddit.com/r/pokemongodev/comments/4zbc3b/new_update_allows_much_more_accurate_iv/d6uhvtr
  3. // pastebin to use on https://pokemon.gameinfo.io/tools/iv-calculator: http://pastebin.com/vzc4cmP2
  4.  
  5. var ivs = [];
  6.  
  7. function refineIVs() {
  8.     var translate = {
  9.         0: 'level',
  10.         1: 'attack',
  11.         2: 'defense',
  12.         3: 'hp',
  13.         4: 'perc'
  14.     };
  15.  
  16.     $('#possiblecombis').children('tbody').children().each(function() {
  17.         if ($(this).index() != 0) {
  18.             var that = $(this);
  19.             var thisIVs = that.children();
  20.             var objEl = {
  21.                 hidden: false
  22.             };
  23.             objEl['element'] = that;
  24.             for (i = 0; i < thisIVs.length; i++) {
  25.                 objEl[translate[i]] = thisIVs[i].textContent;
  26.             }
  27.             ivs.push(objEl);
  28.         }
  29.     });
  30.     derivatePhrase();
  31. }
  32.  
  33. function derivatePhrase() {
  34.  
  35.     var promptText = "0: ...It can accomplish anything!\n" +
  36.         "1: ...You should be proud!\n" +
  37.         "2: ...is a decent Pokemon\n" +
  38.         "3: ...but I still like it!";
  39.     var promptStat = "0: ...WOW!\n" +
  40.         "1: ...How exciting!\n" +
  41.         "2: ...it'll get the job done.\n" +
  42.         "3: ...don't point to greatness in battle.\n\n" +
  43.         "Leave empty if not provided";
  44.     var overall = parseInt(prompt(promptText, ""));
  45.     hideOptions("overall", overall);
  46.     var attack = parseInt(prompt("Attack\n\n" + promptStat, ""));
  47.     if (!isNaN(attack)) hideOptions("attack", attack);
  48.     var defense = parseInt(prompt("Defense\n\n" + promptStat, ""));
  49.     if (!isNaN(defense)) hideOptions("defense", defense);
  50.     var hp = parseInt(prompt("HP\n\n" + promptStat, ""));
  51.     if (!isNaN(hp)) hideOptions("hp", hp);
  52.  
  53.     var knownStat;
  54.     var maxKnownStat;
  55.  
  56.     if (!isNaN(attack)) sortIVs("attack", knownStat, maxKnownStat);
  57.     if (!isNaN(defense)) sortIVs("defense", knownStat, maxKnownStat);
  58.     if (!isNaN(hp)) sortIVs("hp", knownStat, maxKnownStat);
  59.  
  60.     if (isNaN(attack)) hideNegativeOptions("attack", knownStat, maxKnownStat);
  61.     if (isNaN(defense)) hideNegativeOptions("defense", knownStat, maxKnownStat);
  62.     if (isNaN(hp)) hideNegativeOptions("hp", knownStat, maxKnownStat);
  63.  
  64.     if (!isNaN(attack) && !isNaN(defense) && !isNaN(hp)) {
  65.         ivs.forEach(function(el) {
  66.             if (el.attack !== el.defense || el.defense !== el.hp || el.attack !== el.hp) {
  67.                 el.hidden = true;
  68.                 el.element.hide();
  69.             }
  70.         });
  71.     }
  72.  
  73.     if (!isNaN(attack) && !isNaN(defense) && isNaN(hp)) {
  74.         ivs.forEach(function(el) {
  75.             if (el.attack !== el.defense || el.defense === el.hp || el.attack === el.hp) {
  76.                 el.hidden = true;
  77.                 el.element.hide();
  78.             }
  79.         });
  80.     }
  81.  
  82.     if (!isNaN(attack) && isNaN(defense) && isNaN(hp)) {
  83.         ivs.forEach(function(el) {
  84.             if (el.attack === el.defense || el.attack === el.hp) {
  85.                 el.hidden = true;
  86.                 el.element.hide();
  87.             }
  88.         });
  89.     }
  90.  
  91.     if (isNaN(attack) && !isNaN(defense) && !isNaN(hp)) {
  92.         ivs.forEach(function(el) {
  93.             if (el.hp !== el.defense || el.defense === el.attack || el.hp === el.attack) {
  94.                 el.hidden = true;
  95.                 el.element.hide();
  96.             }
  97.         });
  98.     }
  99.  
  100.     if (isNaN(attack) && !isNaN(defense) && isNaN(hp)) {
  101.         ivs.forEach(function(el) {
  102.             if (el.defense === el.attack || el.defense === el.hp) {
  103.                 el.hidden = true;
  104.                 el.element.hide();
  105.             }
  106.         });
  107.     }
  108.  
  109.     if (!isNaN(attack) && isNaN(defense) && !isNaN(hp)) {
  110.         ivs.forEach(function(el) {
  111.             if (el.hp !== el.attack || el.defense === el.attack || el.defense === el.hp) {
  112.                 el.hidden = true;
  113.                 el.element.hide();
  114.             }
  115.         });
  116.     }
  117.  
  118.     if (isNaN(attack) && isNaN(defense) && !isNaN(hp)) {
  119.         ivs.forEach(function(el) {
  120.             if (el.hp === el.attack || el.hp === el.defense) {
  121.                 el.hidden = true;
  122.                 el.element.hide();
  123.             }
  124.         });
  125.     }
  126.  
  127. }
  128.  
  129. function sortIVs(type, knownStat, knownStat) {
  130.     var arr = [];
  131.     ivs.forEach(function(el) {
  132.         if (!el.hidden) {
  133.             switch (type) {
  134.                 case "attack":
  135.                     arr.push(parseInt(el.attack));
  136.                     break;
  137.                 case "defense":
  138.                     arr.push(parseInt(el.defense));
  139.                     break;
  140.                 case "hp":
  141.                     arr.push(parseInt(el.hp));
  142.                     break;
  143.             }
  144.         }
  145.     });
  146.     var isEqual = (arr.length && arr.reduce(function(a, b) {
  147.         return (a === b) ? a : false;
  148.     }) === arr[0]);
  149.     if (isEqual) knownStat = parseInt(arr[0]);
  150.     maxKnownStat = arr.sort(function(a, b) {
  151.         return a - b;
  152.     })[arr.length - 1];
  153. }
  154.  
  155. function hideNegativeOptions(type, value, maxValue) {
  156.  
  157.     var valExact = value;
  158.     var maxValExact = maxValue;
  159.  
  160.     if (type === "attack" || type === "defense" || type === "hp") {
  161.  
  162.         if (valExact) {
  163.             ivs.forEach(function(el) {
  164.                 var stat = parseFloat(el[type]);
  165.                 if (stat === valExact || stat > valExact) {
  166.                     el.hidden = true;
  167.                     el.element.hide();
  168.                 }
  169.             });
  170.         } else {
  171.             ivs.forEach(function(el) {
  172.                 var stat = parseFloat(el[type]);
  173.                 if (stat > maxValExact) {
  174.                     el.hidden = true;
  175.                     el.element.hide();
  176.                 }
  177.             });
  178.         }
  179.     }
  180. }
  181.  
  182. function hideOptions(type, value) {
  183.     if (typeof(value) !== "number") return "Error: wrong type";
  184.     var valMin, valMax;
  185.  
  186.     if (type === "overall") {
  187.         switch (value) {
  188.             case 0:
  189.                 valMin = 80;
  190.                 valMax = 100;
  191.                 break;
  192.             case 1:
  193.                 valMin = 65;
  194.                 valMax = 80;
  195.                 break;
  196.             case 2:
  197.                 valMin = 50;
  198.                 valMax = 65;
  199.                 break;
  200.             case 3:
  201.                 valMin = 0;
  202.                 valMax = 50;
  203.                 break;
  204.         }
  205.         filterIVDivs("perc", valMin, valMax);
  206.     }
  207.  
  208.     if (type === "attack" || type === "defense" || type === "hp") {
  209.         switch (value) {
  210.             case 0:
  211.                 valMin = 15;
  212.                 valMax = 15;
  213.                 break;
  214.             case 1:
  215.                 valMin = 13;
  216.                 valMax = 14;
  217.                 break;
  218.             case 2:
  219.                 valMin = 8;
  220.                 valMax = 12;
  221.                 break;
  222.             case 3:
  223.                 valMin = 0;
  224.                 valMax = 7;
  225.                 break;
  226.         }
  227.         filterIVDivs(type, valMin, valMax);
  228.     }
  229. }
  230.  
  231. function filterIVDivs(statType, valMin, valMax) {
  232.     ivs.forEach(function(el) {
  233.         var elStatType;
  234.         var elStat;
  235.         if (statType == "perc") elStat = parseFloat(el.perc.replace('%', ''));
  236.         else elStat = el[statType];
  237.  
  238.         if (elStat < valMin || elStat > valMax) {
  239.             el.hidden = true;
  240.             el.element.hide();
  241.         }
  242.     });
  243. }
  244.  
  245. refineIVs();
Add Comment
Please, Sign In to add comment