Auto Send Att Unit Settings

Set the desired arrival time and the script will automatically send the attack. Added unit settings modal.

От 07.12.2024. Виж последната версия.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да инсталирате разширение, като например Tampermonkey .

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

// ==UserScript==
// @name Auto Send Att Unit Settings
// @version 1
// @description Set the desired arrival time and the script will automatically send the attack. Added unit settings modal.
// @include https://*/game.php?*&screen=place&try=confirm
// @namespace https://greasyfork.org/users/1388899
// ==/UserScript==

// Create a button to open the settings modal
const button = document.createElement('button');
button.id = 'openSettings';
button.innerHTML = 'Set Units';
button.style.position = 'fixed';
button.style.bottom = '20px';
button.style.left = '20px';
button.style.padding = '10px 20px';
button.style.backgroundColor = '#4CAF50';
button.style.color = 'white';
button.style.border = 'none';
button.style.cursor = 'pointer';
document.body.appendChild(button);

// Create the settings modal
const modal = document.createElement('div');
modal.id = 'settingsModal';
modal.style.display = 'none';
modal.style.position = 'fixed';
modal.style.top = '50%';
modal.style.left = '50%';
modal.style.transform = 'translate(-50%, -50%)';
modal.style.backgroundColor = 'white';
modal.style.border = '1px solid #ccc';
modal.style.padding = '20px';
modal.style.boxShadow = '0px 4px 8px rgba(0,0,0,0.2)';
modal.style.zIndex = '1000';
modal.innerHTML = `
  <h3>Set Unit Quantities</h3>
  <label for="spear">Spear:</label><input type="number" id="spear" value="0"><br>
  <label for="sword">Sword:</label><input type="number" id="sword" value="0"><br>
  <label for="axe">Axe:</label><input type="number" id="axe" value="0"><br>
  <label for="spy">Spy:</label><input type="number" id="spy" value="0"><br>
  <label for="light">Light:</label><input type="number" id="light" value="0"><br>
  <label for="heavy">Heavy:</label><input type="number" id="heavy" value="0"><br>
  <label for="ram">Ram:</label><input type="number" id="ram" value="0"><br>
  <label for="catapult">Catapult:</label><input type="number" id="catapult" value="0"><br>
  <label for="knight">Knight:</label><input type="number" id="knight" value="0"><br>
  <label for="snob">Snob:</label><input type="number" id="snob" value="0"><br>
  <label for="numAttack">Num attack:</label><input type="number" id="numAttack" value="0" min="0"><br>
  <button id="applySettings" style="margin-top: 20px;">Apply</button>
  <button id="saveSettings" style="margin-top: 20px; background-color: #007bff;">Save</button>
  <button id="closeModal" style="margin-top: 20px; background-color: red;">Close</button>
`;
document.body.appendChild(modal);

// Open the modal when the settings button is clicked
document.getElementById('openSettings').addEventListener('click', function() {
  // Load values from localStorage and apply to inputs if available
  const savedUnits = JSON.parse(localStorage.getItem('units')) || {};

  // Populate the inputs with saved values
  document.getElementById('spear').value = savedUnits.spear || 0;
  document.getElementById('sword').value = savedUnits.sword || 0;
  document.getElementById('axe').value = savedUnits.axe || 0;
  document.getElementById('spy').value = savedUnits.spy || 0;
  document.getElementById('light').value = savedUnits.light || 0;
  document.getElementById('heavy').value = savedUnits.heavy || 0;
  document.getElementById('ram').value = savedUnits.ram || 0;
  document.getElementById('catapult').value = savedUnits.catapult || 0;
  document.getElementById('knight').value = savedUnits.knight || 0;
  document.getElementById('snob').value = savedUnits.snob || 0;
  document.getElementById('numAttack').value = savedUnits.numAttack || 0;

  document.getElementById('settingsModal').style.display = 'block';
});

// Close the modal when the close button is clicked
document.getElementById('closeModal').addEventListener('click', function() {
  document.getElementById('settingsModal').style.display = 'none';
});

// Apply the unit values to the input fields and click the button multiple times when the "Apply" button is clicked
document.getElementById('applySettings').addEventListener('click', function() {
  // Get the values from the modal inputs
  const spear = document.getElementById('spear').value;
  const sword = document.getElementById('sword').value;
  const axe = document.getElementById('axe').value;
  const spy = document.getElementById('spy').value;
  const light = document.getElementById('light').value;
  const heavy = document.getElementById('heavy').value;
  const ram = document.getElementById('ram').value;
  const catapult = document.getElementById('catapult').value;
  const knight = document.getElementById('knight').value;
  const snob = document.getElementById('snob').value;
  const numAttack = parseInt(document.getElementById('numAttack').value);  // Get the number of attacks

  // Save the values to localStorage
  const units = {
    spear,
    sword,
    axe,
    spy,
    light,
    heavy,
    ram,
    catapult,
    knight,
    snob,
    numAttack
  };
  localStorage.setItem('units', JSON.stringify(units));

  // Click the button 'numAttack' times with a delay of 200ms between clicks
  const element = document.getElementById('troop_confirm_train');
  for (let i = 0; i < numAttack; i++) {
    setTimeout(() => {
      if (element) {
        element.click();  // Simulate the click
      }
    }, 200 * i);  // Delay of 200ms between clicks
  }

  // Update the corresponding input values on the page after clicking
  setTimeout(() => {
    const inputs = document.querySelectorAll('.units-row input[data-unit]');
    inputs.forEach(input => {
      const unitType = input.dataset.unit;
      // Set value for each unit according to the modal input value
      if (unitType === 'spear') {
        input.value = spear;
      } else if (unitType === 'sword') {
        input.value = sword;
      } else if (unitType === 'axe') {
        input.value = axe;
      } else if (unitType === 'spy') {
        input.value = spy;
      } else if (unitType === 'light') {
        input.value = light;
      } else if (unitType === 'heavy') {
        input.value = heavy;
      } else if (unitType === 'ram') {
        input.value = ram;
      } else if (unitType === 'catapult') {
        input.value = catapult;
      } else if (unitType === 'knight') {
        input.value = knight;
      } else if (unitType === 'snob') {
        input.value = snob;
      }
    });

    // Close the modal after applying the settings
    document.getElementById('settingsModal').style.display = 'none';

    // Delay of 200ms before enabling the submit button
    setTimeout(() => {
      // Get the input element with the ID 'troop_confirm_submit'
      const submitButton = document.getElementById('troop_confirm_submit');

      // Remove the 'disabled' attribute to enable the button
      if (submitButton) {
        submitButton.removeAttribute('disabled');
      }
    }, 200);
  }, 200 * numAttack); // Ensure values are updated after the last click
});

// Save the unit values to localStorage without applying or clicking the button
document.getElementById('saveSettings').addEventListener('click', function() {
  // Get the values from the modal inputs
  const spear = document.getElementById('spear').value;
  const sword = document.getElementById('sword').value;
  const axe = document.getElementById('axe').value;
  const spy = document.getElementById('spy').value;
  const light = document.getElementById('light').value;
  const heavy = document.getElementById('heavy').value;
  const ram = document.getElementById('ram').value;
  const catapult = document.getElementById('catapult').value;
  const knight = document.getElementById('knight').value;
  const snob = document.getElementById('snob').value;
  const numAttack = parseInt(document.getElementById('numAttack').value);  // Get the number of attacks

  // Save the values to localStorage
  const units = {
    spear,
    sword,
    axe,
    spy,
    light,
    heavy,
    ram,
    catapult,
    knight,
    snob,
    numAttack
  };
  localStorage.setItem('units', JSON.stringify(units));
});