TM Skill Index Calculator

TrophyManager: Calculate future skill index (SI) & skill sum

  1. // ==UserScript==
  2. // @name TM Skill Index Calculator
  3. // @namespace https://trophymanager.com
  4. // @version 1.0
  5. // @description TrophyManager: Calculate future skill index (SI) & skill sum
  6. // @author UNITE eM (Club ID: 551050)
  7. // @namespace https://trophymanager.com
  8. // @match https://trophymanager.com/players/*
  9. // @exclude https://trophymanager.com/players/
  10. // @exclude https://trophymanager.com/players/compare/*
  11. // @grant none
  12. // @license MIT
  13. // ==/UserScript==
  14.  
  15. (function () {
  16. "use strict";
  17.  
  18. let skillIndexCalculator =
  19. "<div class='box'>" +
  20. "<div class='box_head'>" +
  21. "<h2 class='std'>Skill Index Calculator</h2>" +
  22. "</div>" +
  23. "<div class='box_body'>" +
  24. "<div class='box_shadow'></div>" +
  25. "<div id='skillIndexCalculator_content' class='std align_center'></div>" +
  26. "</div>" +
  27. "<div class='box_footer'>" +
  28. "<div></div>" +
  29. "</div>" +
  30. "</div>";
  31. $(".column3_a").prepend(skillIndexCalculator);
  32.  
  33. var gettr = document.getElementsByClassName("float_left info_table zebra")[0].getElementsByTagName("tr");
  34. for (let i = 0; i < gettr.length; i++) {
  35. if (gettr[i].getElementsByTagName("th").length > 0) {
  36. if (gettr[i].getElementsByTagName("th")[0].innerHTML == global_content["skill_index"]) {
  37. var SI = gettr[i].getElementsByTagName("td")[0].innerHTML;
  38. break;
  39. }
  40. }
  41. }
  42. for (let i = 0; i < gettr.length; i++) {
  43. if (gettr[i].getElementsByTagName("th").length > 0) {
  44. if (gettr[i].getElementsByTagName("th")[0].innerHTML == global_content["age"]) {
  45. var ageMonth = parseInt(gettr[i].getElementsByTagName("td")[0].innerHTML.split(" ")[2]);
  46. break;
  47. }
  48. }
  49. }
  50.  
  51. let trainingInputTable =
  52. "<table id='trainingInput_table' align='center' style='width:100%'>" +
  53. "<tr>" +
  54. "<td style='width:30%'>Current Skill Index (SI)</td>" +
  55. "<td style='width:30%'>Training Sessions</td>" +
  56. "<td style='width:30%'>Training Intensity (TI)</td>" +
  57. "<td id='addRow_button' class='align_center'><a class='button'><span class='button_border' style='padding: 0px 8px'><img src='/pics/cf_mini_plus.png'></a></span></td>" +
  58. "</tr>" +
  59. "<tr>" +
  60. "<td><input type='text' name='currentSkillIndex' class='embossed' size='5' style='text-align: center; margin-bottom: 1px;' value=" + SI + "></td>" +
  61. "<td><input type='text' name='trainingSession' class='embossed' size='5' style='text-align: center; margin-bottom: 1px;' value=" + (ageMonth == 11 ? 12 : 11 - ageMonth) + "></td>" +
  62. "<td><input type='text' name='trainingIntensity' class='embossed' size='5' style='text-align: center; margin-bottom: 1px;' value=''></td>" +
  63. "<td id='doCalculate_button' class='align_center'><a class='button'><span class='button_border' style='padding: 0px 6px'><img src='/pics/feed/feed_icons/3.gif'></a></span></td>" +
  64. "</tr>" +
  65. "</table>";
  66. $("#skillIndexCalculator_content").append(trainingInputTable);
  67.  
  68. document.getElementById("addRow_button").addEventListener("click", (e) => {
  69. addRow();
  70. });
  71.  
  72. document.getElementById("doCalculate_button").addEventListener("click", (e) => {
  73. doCalculate();
  74. });
  75.  
  76. function addRow() {
  77. var trainingInputRow =
  78. "<tr>" +
  79. "<td></td>" +
  80. "<td><input type='text' name='trainingSession' class='embossed' size='5' style='text-align: center; margin-bottom: 1px;' value=''></td>" +
  81. "<td><input type='text' name='trainingIntensity' class='embossed' size='5' style='text-align: center; margin-bottom: 1px;' value=''></td>" +
  82. "<td></td>" +
  83. "</tr>";
  84. $("#trainingInput_table").append(trainingInputRow);
  85. }
  86.  
  87. function doCalculate() {
  88. var MR = Math.round;
  89. var MP = Math.pow;
  90. var ML = Math.log;
  91.  
  92. var elem = document.getElementById("skillIndexCalculator_content");
  93. while (elem.childElementCount > 1) {
  94. elem.removeChild(elem.lastChild);
  95. }
  96.  
  97. var notGK = document.getElementsByClassName("favposition long")[0].innerText != global_content["goalkeeper"] ? true: false;
  98. var currentSI = document.getElementsByName("currentSkillIndex")[0].value.replace(/,/g, "");
  99.  
  100. var currentSkillSum = "";
  101. if (notGK) {
  102. currentSkillSum = MR(MP(currentSI * MP(2, 9) * MP(5, 4) * MP(7, 7), 1 / 7) * 10) / 10;
  103. } else {
  104. currentSkillSum = MR((MP(currentSI * MP(2, 9) * MP(5, 4) * MP(7, 7), 1 / 7) / 14) * 11 * 10) / 10;
  105. }
  106.  
  107. var futureSkillSum = currentSkillSum;
  108. for (let i = 0; i < document.getElementsByName("trainingSession").length; i++) {
  109. var session = document.getElementsByName("trainingSession")[i].value;
  110. if (session > 0) {
  111. var TI = document.getElementsByName("trainingIntensity")[i].value;
  112. futureSkillSum = MR((futureSkillSum + (TI / 10) * session) * 10) / 10;
  113. }
  114. }
  115.  
  116. var futureSI = "";
  117. if (notGK) {
  118. futureSI = MR(MP(futureSkillSum, 7) / (MP(2, 9) * MP(5, 4) * MP(7, 7)));
  119. } else {
  120. futureSI = MR(MP((futureSkillSum / 11) * 14, 7) / (MP(2, 9) * MP(5, 4) * MP(7, 7)));
  121. }
  122.  
  123. let trainingOutputTable = "<table id='trainingOutput_table' style='border-top:2px solid #6c9922; margin-top:4px;'></table>";
  124. let currentSkillSumRow = "<tr><td align='left'>Current Skill Sum</td><td align='right'><b>" + currentSkillSum.toFixed(1) + "</b></td></tr>";
  125. let futureSkillSumRow = "<tr class='odd'><td align='left'>Future Skill Sum</td><td align='right'><b>" + futureSkillSum.toFixed(1) + "</b></td></tr>";
  126. let futureSIRow = "<tr><td align='left'>Future Skill Index (SI)</td><td align='right'><b>" + addCommas(futureSI) + "</b></td></tr>";
  127.  
  128. $("#skillIndexCalculator_content").append(trainingOutputTable);
  129. $("#trainingOutput_table").append(currentSkillSumRow, futureSkillSumRow, futureSIRow);
  130. }
  131.  
  132. function addCommas(num) {
  133. var numParts = num.toString().split(".");
  134. numParts[0] = numParts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
  135. return numParts.join(".");
  136. }
  137.  
  138. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址