Attack Better

Move Torn "Start Fight" Button on top of Primary Weapon and remove certain elements to help with load times.

当前为 2023-04-07 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Attack Better
  3. // @namespace https://github.com/0xymandias
  4. // @version 1.4
  5. // @description Move Torn "Start Fight" Button on top of Primary Weapon and remove certain elements to help with load times.
  6. // @author smokey_ [2492729]
  7. // @match https://www.torn.com/loader.php?*
  8. // @grant none
  9. // @license WTFPL
  10. // ==/UserScript==
  11.  
  12. // Copyright © 2034 smokey_ [2492729] <relatii@sri.ro,>
  13. // This work is free. You can redistribute it and/or modify it under the
  14. // terms of the Do What The Fuck You Want To Public License, Version 2,
  15. // as published by Sam Hocevar. See http://www.wtfpl.net/ for more details.
  16.  
  17. (function () {
  18. 'use strict';
  19.  
  20. const BUTTON_LOCATION = 'Temp'; // Change this value to 'Temp' to move the button to the Temp (HEG, Tear, Smoke) or Primary to move it ontop of the Primary Weapon element
  21.  
  22. function moveStartFightButton() {
  23. console.log('ATTACK BETTER - moveStartFightButton called');
  24. let startFightButton, weaponImage, weaponWrapper;
  25.  
  26. if (BUTTON_LOCATION === 'Primary') {
  27. startFightButton = document.querySelector('.torn-btn.btn___RxE8_.undefined.silver'); // start fight button
  28. weaponImage = document.querySelector('.weaponImage___tUzwP img'); // equipped weapon image
  29. weaponWrapper = document.querySelector('.weaponWrapper___h3buK'); // common parent element
  30. } else if (BUTTON_LOCATION === 'Temp') {
  31. startFightButton = document.querySelector('.torn-btn.btn___RxE8_.undefined.silver');
  32. weaponImage = document.querySelector('#weapon_temp .weaponImage___tUzwP img');
  33. weaponWrapper = document.querySelector('#weapon_temp');
  34. }
  35.  
  36. console.log('ATTACK BETTER - startFightButton', startFightButton);
  37. console.log('ATTACK BETTER - weaponImage', weaponImage);
  38. console.log('ATTACK BETTER - weaponWrapper', weaponWrapper);
  39.  
  40. if (startFightButton && weaponImage && weaponWrapper) {
  41. console.log('all elements found');
  42. const buttonWrapper = document.createElement('div'); // create new div element
  43. buttonWrapper.classList.add('button-wrapper');
  44. buttonWrapper.appendChild(startFightButton); // append start fight button to new div element
  45. weaponWrapper.insertBefore(buttonWrapper, weaponImage.nextSibling); // insert new div element after equipped weapon image
  46. console.log('ATTACK BETTER - buttonWrapper', buttonWrapper);
  47.  
  48. // Position the button wrapper over the weapon image
  49. buttonWrapper.style.position = 'absolute';
  50. buttonWrapper.style.top = weaponImage.offsetTop + 'px';
  51. buttonWrapper.style.left = '+15px'; // set left position to move it to the left
  52. startFightButton.addEventListener('click', function() {
  53. buttonWrapper.remove();
  54. console.log('ATTACK BETTER - Start fight button removed');
  55. });
  56. }
  57. }
  58.  
  59. let loopCount = 0;
  60. const buttonIntervalId = setInterval(function () {
  61. loopCount++;
  62. if (loopCount > 5) { // stop the loop after 5s (20 loops * 250ms per loop = 5s)
  63. clearInterval(buttonIntervalId);
  64. console.log('ATTACK BETTER - Loop stopped');
  65. return;
  66. }
  67. moveStartFightButton();
  68. if (document.querySelector('.button-wrapper')) { // check if the button has been moved
  69. clearInterval(buttonIntervalId);
  70. console.log('ATTACK BETTER - Start fight button moved');
  71. }
  72. }, 250);
  73.  
  74. // Wait for page to load before executing this part of the script
  75. window.addEventListener('load', function () {
  76. console.log('ATTACK BETTER - Page loaded');
  77.  
  78. //
  79. // Element Stripping
  80. //
  81.  
  82. // get the custom-bg-desktop sidebar-off element
  83. const sidebarElement = document.querySelector('.custom-bg-desktop.sidebar-off');
  84.  
  85. // if the element exists, remove it from the DOM to prevent it from being downloaded or loaded
  86. if (sidebarElement) {
  87. sidebarElement.remove();
  88. console.log('ATTACK BETTER - background removed.');
  89. }
  90. })
  91.  
  92. // Defender Model
  93. var startTimeDefender = Date.now();
  94. var intervalIdDefender = setInterval(function() {
  95. if (Date.now() - startTimeDefender > 5000) {
  96. clearInterval(intervalIdDefender);
  97. return;
  98. }
  99.  
  100. var defenderModel = document.querySelectorAll("#defender > div.playerArea___oG4xu > div.playerWindow___FvmHZ > div > div.modelLayers___FdSU_.center___An_7Z > div.modelWrap___j3kfA > div > div.model___HOHCU *");
  101.  
  102. for (const element of defenderModel) {
  103. console.log(`ATTACK BETTER - Removing element: ${element.tagName}`);
  104. element.remove();
  105. }
  106. }, 100);
  107.  
  108. // Attacker Model
  109. var startTimeAttacker = Date.now();
  110. var intervalIdAttacker = setInterval(function() {
  111. if (Date.now() - startTimeAttacker > 5000) {
  112. clearInterval(intervalIdAttacker);
  113. return;
  114. }
  115.  
  116. var attackerModel = document.querySelectorAll("#attacker > div.playerArea___oG4xu > div.playerWindow___FvmHZ > div.allLayers___cXY5i > div.modelLayers___FdSU_.center___An_7Z > div.modelWrap___j3kfA *");
  117.  
  118. for (const element of attackerModel) {
  119. console.log(`ATTACK BETTER - Removing element: ${element.tagName}`);
  120. element.remove();
  121. }
  122. }, 100);
  123. })();