Auto Send Att Unit Settings

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

当前为 2024-12-07 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴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));
});