GLB Player Value Calculator 1_0

calculate a player value

  1. // ==UserScript==
  2. // @name GLB Player Value Calculator 1_0
  3. // @namespace avidday
  4. // @description calculate a player value
  5. // @include http://glb.warriorgeneral.com/game/skill_points.pl?player_id=*
  6. // @version 0.0.1.20141224051723
  7. // ==/UserScript==
  8.  
  9. // Constants borrowed from monsterkill script
  10. var commonHeaders = {
  11. "User-agent": "Mozilla/5.0 (compatible) Greasemonkey",
  12. "Accept": "text/html,application/xml,text/xml"
  13. };
  14.  
  15. var attributeNames = [
  16. 'strength',
  17. 'speed',
  18. 'agility',
  19. 'jumping',
  20. 'stamina',
  21. 'vision',
  22. 'confidence',
  23. 'blocking',
  24. 'throwing',
  25. 'catching',
  26. 'carrying',
  27. 'tackling',
  28. 'kicking',
  29. 'punting'
  30. ];
  31. // End Constants
  32.  
  33.  
  34. // Add elements to page
  35. var valueDiv = document.createElement('div');
  36. document.getElementById("player_vitals").appendChild(valueDiv);
  37. valueDiv.innerHTML = "<span><b>Player Value Calculator</b><br/>Player Value =</span></br>";
  38.  
  39. var valueVADiv = document.createElement('span');
  40. valueDiv.appendChild(valueVADiv);
  41. valueVADiv.innerHTML = "Press Button to Calculate</br>";
  42.  
  43.  
  44. var calcButton = document.createElement('input');
  45. calcButton.id = "calcButton";
  46. calcButton.type = "button";
  47. calcButton.value = "Calculate Player Value";
  48. calcButton.addEventListener("click", parsePlayerPage, true);
  49. valueDiv.appendChild(calcButton);
  50.  
  51. // Add up everything, then send to output
  52. function testCalc(incomingVA){
  53. var skillTotal = 0;
  54. var i = 0;
  55. do{
  56. skillTotal = skillTotal + calcValue(getAttribute(attributeNames[i]));
  57. i++;
  58. } while (i<14);
  59. //alert("Skill Total = " + skillTotal);
  60. var saTotal = getSATotal();
  61. //alert("SA Total = " + saTotal);
  62. var existVA = getVA(incomingVA);
  63. //alert("VA Total = " + existVA);
  64. var whatSP = getSP();
  65. //alert("SP Total = " + whatSP);
  66. var totalPoints = truncate(skillTotal + saTotal + parseFloat(whatSP) + existVA * 0.1);
  67. setValue(totalPoints);
  68.  
  69. }
  70.  
  71. // Get Player ID, borrowed from monsterkill
  72. function parsePlayerId() {
  73. var pid = window.location.search;
  74. pid = pid.slice(pid.indexOf('player_id=')+'player_id='.length);
  75. if (pid.indexOf('&') > -1) {
  76. pid = pid.slice(0,pid.indexOf('&'));
  77. } else {
  78. pid = pid.slice(0);
  79. }
  80. return pid;
  81. }
  82.  
  83. //Get VA Points from Player Page, partially borrowed from monsterkill
  84. function parsePlayerPage() {
  85. var playerId = parsePlayerId();
  86. var unspentVA = 0;
  87. var spentVA = 0;
  88. GM_xmlhttpRequest({
  89. method: 'GET',
  90. url: "/game/player.pl?player_id="+playerId,
  91. headers: commonHeaders,
  92. onload: function(responseDetails) {
  93. var txt = responseDetails.responseText;
  94. if (txt.indexOf('<span>Vet Pts:</span>') >-1) {
  95. var vasplit = txt.split('<span>Vet Pts:</span>');
  96. var unspentVAtemp = vasplit[1].substring(vasplit[1].indexOf('>')+1,vasplit[1].indexOf('</a>'));
  97. unspentVA = parseInt(unspentVAtemp);
  98. } else {
  99. unspentVA=0;
  100. }
  101. var diditsplit;
  102. var additup = 0;
  103. var regexResultVA = txt.match(/(skill_level_\d+\D+)(\d+)/ig);
  104. if(regexResultVA != null){
  105. var howLong = regexResultVA.length;
  106. for (var i=0; i<howLong; i++){
  107. diditsplit = regexResultVA[i].split('>');
  108. additup = additup + parseInt(diditsplit[1]);
  109. }
  110. }
  111. var totalVA = unspentVA + additup;
  112. valueVADiv.innerHTML = "VA points before VPB=" + totalVA + "</br>";
  113. testCalc(totalVA);
  114. }
  115. });
  116. }
  117. // Holy cow it worked, get the VA from player page, simulated VA from this page, add them
  118. function getVA(holycowVA){
  119. var earnedVA = holycowVA;
  120. //alert("Real = " + earnedVA);
  121. if (document.getElementById("currentVADiv")){
  122. var getSimulatedVA = document.getElementById("currentVADiv").innerHTML;
  123. if(getSimulatedVA.length >0){
  124. var simVA = getSimulatedVA.split(':');
  125. var futureVA = parseInt(simVA[1]);
  126. }else{
  127. var futureVA = 0;
  128. }
  129. }else{
  130. var futureVA = 0;
  131. }
  132. //alert("Future = " + futureVA);
  133. var totalVA = earnedVA + futureVA;
  134. return totalVA;
  135. }
  136.  
  137. // Get unspent SP from page
  138. function getSP(){
  139. var findSP = document.getElementById("skill_points");
  140. var foundSP = findSP.innerHTML;
  141. return foundSP;
  142. }
  143. // Get SA's from page
  144. function getSATotal() {
  145. var skilltree = unsafeWindow.skills;
  146. var count = 0;
  147. var currentSkill = 0, sasTotal = 0;
  148. for (s in skilltree) {
  149. count++;
  150. if(count==5){
  151. count=0;
  152. currentSkill = calcValSPB(parseInt(document.getElementById('skill_level_' + s).innerHTML));
  153. } else {
  154. currentSkill = calcValSP(parseInt(document.getElementById('skill_level_' + s).innerHTML));
  155. }
  156. sasTotal = sasTotal + currentSkill;
  157. }
  158. return sasTotal;
  159. }
  160. // Output to page
  161. function setValue(newValue) {
  162. var value = newValue;
  163. valueDiv.innerHTML = "<span><b>Player Value Calculator</b></span><br/>Player Value = " + value + "</br>";
  164. valueDiv.appendChild(valueVADiv);
  165. valueVADiv.innerHTML = "Press Button to Calculate</br>";
  166. calcButton.addEventListener("click", parsePlayerPage, true);
  167. valueDiv.appendChild(calcButton);
  168. }
  169. // Get value from page for each attribute
  170. function getAttribute(incoming) {
  171. var thisvalue = incoming;
  172. return parseFloat(document.getElementById(thisvalue).innerHTML);
  173. }
  174. // Find value from spent skill points
  175. function calcValue(incoming) {
  176. var attribute = incoming;
  177. var resultVal = 0.0;
  178. var currentVal = 0.0;
  179. var currentCapVal = 0.0;
  180. var totalCapVal = 0.0;
  181. var j = 0.0;
  182. var holder = 0;
  183. var k = 2;
  184. var m = 0.0;
  185. var leftover = 0.0;
  186. var remainder = attribute - Math.floor(attribute);
  187. if (attribute < 48.07) {
  188. return attribute;
  189. }
  190.  
  191. if (remainder <= 0.06) {
  192. currentVal = 49 + remainder;
  193.  
  194. } else {
  195. currentVal = 48 + remainder;
  196. }
  197.  
  198. totalCapVal = currentVal;
  199.  
  200. holder = parseInt(Math.floor(Math.exp(0.0003 * Math.pow(attribute, 2))));
  201. do {
  202. j = truncate(Math.sqrt(Math.log( parseFloat(k + 1)) / 0.0003)) + 0.01;
  203. if (attribute > j) {
  204. m = parseFloat(k);
  205. currentCapVal = Math.ceil(j - totalCapVal);
  206. totalCapVal = totalCapVal + currentCapVal;
  207. currentVal = currentVal + currentCapVal * m;
  208. } else {
  209. leftover = attribute - totalCapVal;
  210. break;
  211. }
  212.  
  213. k++;
  214. } while (k <= holder);
  215. var p = parseFloat(holder);
  216. resultVal = ((currentVal + leftover * p));
  217. return resultVal;
  218.  
  219. }
  220.  
  221. //Value from first four SA's
  222. function calcValSP (value){
  223. var total=0
  224. while (value >0) {
  225. total = total + Math.ceil( parseFloat(value) /2.0);
  226. value--;
  227. }
  228. return total;
  229. }
  230. //Value from fifth SA
  231. function calcValSPB (value){
  232. var total=0
  233. while (value >0) {
  234. total = total + Math.ceil( parseFloat(value) /2.0) + 1;
  235. value--;
  236. }
  237. return total;
  238. }
  239.  
  240. // Trim to two decimal places, apparently doesn't always work...
  241. function truncate(y) {
  242. var x = parseFloat(y);
  243. var z = ((parseFloat(parseInt(Math.floor(x * 100))))/ 100);
  244. return z;
  245. }