Show total and stats of kills

blabla

  1. // ==UserScript==
  2. // @name Show total and stats of kills
  3. // @version 1.3
  4. // @description blabla
  5. // @author A Meaty Alt
  6. // @include /index\.php\?page=54&ID=/
  7. // @grant none
  8. // @namespace https://greasyfork.org/users/150647
  9. // ==/UserScript==
  10.  
  11. (function() {
  12. 'use strict';
  13. var killsTable = document.getElementsByClassName("sample")[0];
  14. killsTable.width = 500;
  15. var killsTbody = killsTable.firstElementChild;
  16. var killsData = killsTbody.children;
  17. var td = document.createElement("td");
  18. td.append("Clan");
  19. killsData[0].appendChild(td);
  20. var totalKills = 0;
  21. for(var i=1; i<killsData.length; i++){
  22. totalKills += parseInt(killsData[i].children[1].textContent);
  23. killsData[i].appendChild(document.createElement("td"));
  24. }
  25. var totalKillsRow = document.createElement("tr");
  26. totalKillsRow.classList.add("dont-count");
  27. var title = document.createElement("td");
  28. title.innerHTML = "<b>Total kills:</b> ";
  29. var value = document.createElement("td");
  30. value.innerHTML = "<b>"+totalKills+"</b>";
  31. totalKillsRow.appendChild(title);
  32. totalKillsRow.appendChild(value);
  33. killsTbody.appendChild(totalKillsRow);
  34.  
  35. createStatsButton();
  36. function createStatsButton(){
  37. var button = document.createElement("input");
  38. button.type = "button";
  39. button.value = "Show kills from each clan";
  40. button.addEventListener("click", showStats);
  41. killsTable.parentElement.appendChild(button);
  42. function showStats(){
  43. button.disabled = true;
  44. loadClanKills()
  45. .then((clanKills) => {
  46. var clanNamesSortedDesc =
  47. Object.keys(clanKills).sort(function(a,b){
  48. return clanKills[b]-clanKills[a];
  49. });
  50. for(var i=0; i<clanNamesSortedDesc.length; i++){
  51. var clan = clanNamesSortedDesc[i];
  52. var clanKillsRow = document.createElement("tr");
  53. clanKillsRow.classList.add("dont-count");
  54. var title = document.createElement("td");
  55. var clanName = clan? clan : "Clanless";
  56. title.innerHTML = "<b>"+clanName+"</b> kills: ";
  57. var value = document.createElement("td");
  58. value.innerHTML = "<b>"+clanKills[clan]+"/"+totalKills+"</b>";
  59. clanKillsRow.appendChild(title);
  60. clanKillsRow.appendChild(value);
  61. clanKillsRow.appendChild(document.createElement("td"));
  62. killsTbody.appendChild(clanKillsRow);
  63. }
  64. });
  65. this.disabled = true;
  66.  
  67. function loadClanKills(){
  68. return new Promise((resolve) => {
  69. var promises = [];
  70. var auxI = 1;
  71. for(var i=1; i<killsData.length; i++){
  72. if(killsData[i].classList.contains("dont-count")) {
  73. break;
  74. }
  75. promises.push(new Promise((resolve) => {
  76. var data = killsData[auxI++];
  77. var userId = data.children[0].firstElementChild.href.match(/u=(.*)/)[1]; //yes, it's ugly. Deal with it
  78. getClan(userId)
  79. .then((clan) => {
  80. var kills = parseInt(data.children[1].textContent);
  81. var res = {};
  82. res[clan] = kills;
  83. data.children[2].textContent += `${clan}`;
  84. resolve(res);
  85. });
  86. }));
  87. }
  88. Promise.all(promises)
  89. .then((clansAndKills) => {
  90. var ret = {};
  91. for(var i=0; i<clansAndKills.length; i++){
  92. for(var clan in clansAndKills[i]){
  93. if(ret[clan]){
  94. ret[clan] += clansAndKills[i][clan];
  95. }
  96. else{
  97. ret[clan] = clansAndKills[i][clan];
  98. }
  99. }
  100. }
  101.  
  102. resolve(ret);
  103. });
  104. });
  105.  
  106. }
  107. }
  108. function getClan(userId){
  109. return new Promise((resolve) => {
  110. $.post("https://fairview.deadfrontier.com/onlinezombiemmo/get_values.php",
  111. "userID="+userId,
  112. (response) => {
  113. resolve(response.match(/df_clan_name=(.*?)&/)[1].trim());
  114. });
  115. });
  116. }
  117. }
  118. })();