您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Set the desired arrival time and the script will automatically send the attack. Added unit settings modal.
// ==UserScript== // @name Auto Send Att Unit Settings // @version 1.5 // @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== // Function to get the current page identifier based on the village ID from the URL function getPageIdentifier() { const urlParams = new URLSearchParams(window.location.search); const villageId = urlParams.get('village'); // Get the village ID from the URL return villageId ? `village_${villageId}` : 'unknown'; // Use 'village_' prefix to differentiate } // 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"><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() { const pageIdentifier = getPageIdentifier(); // Get the current page's identifier (based on village ID) // Load values from localStorage specific to the page const savedUnits = JSON.parse(localStorage.getItem(`units_${pageIdentifier}`)) || {}; // 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 using the current page identifier as a key const units = { spear, sword, axe, spy, light, heavy, ram, catapult, knight, snob, numAttack }; const pageIdentifier = getPageIdentifier(); // Get the current page's identifier (based on village ID) localStorage.setItem(`units_${pageIdentifier}`, JSON.stringify(units)); // Use page-specific key const element = document.getElementById('troop_confirm_train'); if (numAttack > 0) { // Only proceed if numAttack is greater than 0 for (let i = 0; i < numAttack; i++) { setTimeout(() => { if (element) { element.click(); // Simulate the click } }, 200 * i); // Delay of 200ms between clicks } } else { console.log('numAttack is set to 0, no clicks will be performed.'); } // 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, specific to the page 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 using the current page identifier as a key const units = { spear, sword, axe, spy, light, heavy, ram, catapult, knight, snob, numAttack }; const pageIdentifier = getPageIdentifier(); // Get the current page's identifier (based on village ID) localStorage.setItem(`units_${pageIdentifier}`, JSON.stringify(units)); // Use page-specific key });