Auto Send Att Unit Settings

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

Verze ze dne 07. 12. 2024. Zobrazit nejnovější verzi.

// ==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));
});