From c22c2fb254a70e5a449540f6c27d47734aeaa2a2 Mon Sep 17 00:00:00 2001 From: samuel Date: Thu, 13 Nov 2025 20:13:16 +0100 Subject: [PATCH] Feature multi-attack in same second --- CHANGELOG.md | 4 +++ manifest.json | 2 +- metadata.json | 4 +-- src/kaplus.js | 75 +++++++++++++++++++++++++++++++++++++++------------ 4 files changed, 65 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f50a9c3..2a01cee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 1.5.1 (2025-11-13) + +- fonctionnalité de multi-attaques dans la même seconde + ## 1.4.14 (2025-11-13) - correction affichage menu avec rapports diff --git a/manifest.json b/manifest.json index e85c296..96fced7 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 3, "name": "KAplus", - "version": "1.4.14", + "version": "1.5.1", "author": "Samuel Campos - netoik.io", "description": "Extension développée pour améliorer l'expérience de jeu KingsAge (fonctionne avec ou sans premium)", diff --git a/metadata.json b/metadata.json index 2238984..7a4dd99 100644 --- a/metadata.json +++ b/metadata.json @@ -5,8 +5,8 @@ "firefox" ], "release_notes": { - "fr": "- correction affichage menu avec rapports", - "en-US": "- fix display navbar with reports" + "fr": "- fonctionnalité de multi-attaques dans la même seconde", + "en-US": "- feature multi-attack in same second" } } } \ No newline at end of file diff --git a/src/kaplus.js b/src/kaplus.js index 76e6b17..f877376 100644 --- a/src/kaplus.js +++ b/src/kaplus.js @@ -34,35 +34,35 @@ function createRow(key, value) { function shortcutElementReplace(elt, img, text) { // If more than one hyperlink element found, // then keep the last one but with href of the first one. - let aElements = elt.getElementsByTagName("a"); + let aElements = elt.getElementsByTagName("a"); let imgElements = elt.getElementsByTagName("img"); if (aElements.length > 1 || imgElements.length > 0) { aElements[aElements.length - 1].classList.add("has_notif"); aElements[aElements.length - 1].setAttribute("href", aElements[0].getAttribute("href")); - for (let i = imgElements.length - 1; i >= 0; i --) { + for (let i = imgElements.length - 1; i >= 0; i--) { imgElements[i].remove(); } - for (let i = aElements.length - 2; i >= 0; i --) { + for (let i = aElements.length - 2; i >= 0; i--) { aElements[i].remove(); } } - - let spanImageElement = document.createElement("span"); - spanImageElement.classList.add("shortcut_element_image"); - let imgElement = document.createElement("img"); - imgElement.setAttribute("src", chrome.runtime.getURL("images/"+img+".svg")); - spanImageElement.appendChild(imgElement); + let spanImageElement = document.createElement("span"); + spanImageElement.classList.add("shortcut_element_image"); - aElements[0].textContent = ""; - aElements[0].appendChild(spanImageElement); + let imgElement = document.createElement("img"); + imgElement.setAttribute("src", chrome.runtime.getURL("images/" + img + ".svg")); + spanImageElement.appendChild(imgElement); - if (text) { - let spanDescElement = document.createElement("span"); - spanDescElement.classList.add("shortcut_element_desc"); - spanDescElement.textContent = text; - aElements[0].appendChild(spanDescElement); - } + aElements[0].textContent = ""; + aElements[0].appendChild(spanImageElement); + + if (text) { + let spanDescElement = document.createElement("span"); + spanDescElement.classList.add("shortcut_element_desc"); + spanDescElement.textContent = text; + aElements[0].appendChild(spanDescElement); + } } /* Improve main menu display */ @@ -129,4 +129,45 @@ if (document.body.id === "overview") { villagePointsRow.after(unitPointsRow); } +/* Allow multiple attacks */ +if (document.body.id === "build_barracks_command") { + let table = document.createElement("table"); + table.classList.add("borderlist"); + let tbody = document.createElement("tbody"); + let tr = document.createElement("tr"); + let th = document.createElement("th"); + th.textContent = "Nombre d'attaques:"; + tr.appendChild(th) + let td = document.createElement("td"); + let input = document.createElement("input"); + input.setAttribute("type", "number"); + input.setAttribute("name", "attack_count"); + input.setAttribute("value", "1"); + td.appendChild(input); + tr.appendChild(td); + tbody.appendChild(tr); + table.appendChild(tbody); + let form = document.getElementsByTagName("form")[0]; + let firstInput = form.getElementsByTagName("input")[0]; + form.insertBefore(table, firstInput); + form.addEventListener("submit", function(event) { + event.preventDefault(); + let formData = new FormData(this); + let attackCount = parseInt(formData.get("attack_count").toString()); + formData.delete("attack_count"); + + let sent = 0; + for (let i = 0; i < attackCount; i ++) { + let xhr = new XMLHttpRequest(); + xhr.onload = function() { + sent ++; + if (sent === attackCount) { + window.location.replace(xhr.responseURL); + } + } + xhr.open(this.method, this.action, true); + xhr.send(formData); + } + }); +}