diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a01cee..d2fc377 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +### 1.6.1 (2025-11-15) + +- correction du bug de sélection de village dans le marché + ## 1.5.1 (2025-11-13) - fonctionnalité de multi-attaques dans la même seconde diff --git a/manifest.json b/manifest.json index 96fced7..6ac84d6 100644 --- a/manifest.json +++ b/manifest.json @@ -1,9 +1,12 @@ { "manifest_version": 3, "name": "KAplus", - "version": "1.5.1", + "version": "1.6.1", - "author": "Samuel Campos - netoik.io", + "developer": { + "name": "Samuel Campos", + "url": "https://git.netoik.io/samuel/kaplus" + }, "description": "Extension développée pour améliorer l'expérience de jeu KingsAge (fonctionne avec ou sans premium)", "browser_specific_settings": { diff --git a/metadata.json b/metadata.json index 7a4dd99..443e531 100644 --- a/metadata.json +++ b/metadata.json @@ -5,8 +5,8 @@ "firefox" ], "release_notes": { - "fr": "- fonctionnalité de multi-attaques dans la même seconde", - "en-US": "- feature multi-attack in same second" + "fr": "- correction du bug de sélection de village dans le marché", + "en-US": "- fix bug on selecting village in market" } } } \ No newline at end of file diff --git a/src/kaplus.js b/src/kaplus.js index f877376..4e94ba1 100644 --- a/src/kaplus.js +++ b/src/kaplus.js @@ -65,109 +65,142 @@ function shortcutElementReplace(elt, img, text) { } } -/* Improve main menu display */ -let layCastleTopElements = document.getElementsByClassName("lay_castle_top"); -if (layCastleTopElements.length === 1) { - document.getElementById("banner_skyscraper").remove(); +function main() { + /* Exit immediately if not on game page */ + let layCastleTopElements = document.getElementsByClassName("lay_castle_top"); + if (layCastleTopElements.length === 0) { + return; + } - let shortcutElements = layCastleTopElements[0].getElementsByClassName("shortcut_element"); - shortcutElementReplace(shortcutElements[0], "ranking", shortcutElements[0].textContent.replace(/[^0-9]/g, "")); - shortcutElementReplace(shortcutElements[1], "ally", ""); - shortcutElementReplace(shortcutElements[2], "profile", ""); - shortcutElementReplace(shortcutElements[3], "premium", ""); - shortcutElementReplace(shortcutElements[4], "messages", ""); - shortcutElementReplace(shortcutElements[5], "tools", ""); - shortcutElementReplace(shortcutElements[6], "favorites", ""); - - let shortcutContainers = layCastleTopElements[0].getElementsByClassName("shortcut_container"); - shortcutContainers[0].classList.add("shortcut_container_left"); - shortcutContainers[2].classList.add("shortcut_container_right"); -} + /* Remove iframe banner */ + document.getElementById("banner_skyscraper").remove(); -/* Display unit-points on user profile */ -if (document.body.id === "info_player") { - let mainContentPane = document.getElementsByClassName("contentpane")[1]; - let borderLists = mainContentPane.getElementsByClassName("borderlist"); - - let playerPropertiesTable = borderLists[0]; - let playerPropertiesRows = playerPropertiesTable.getElementsByTagName("tr"); - let totalPoints = num(playerPropertiesRows[2].getElementsByTagName("td")[1].textContent); - let villagesCount = num(playerPropertiesRows[4].getElementsByTagName("td")[1].textContent); + /* Improve navbar icons */ + let shortcutElements = layCastleTopElements[0].getElementsByClassName("shortcut_element"); + shortcutElementReplace(shortcutElements[0], "ranking", shortcutElements[0].textContent.replace(/[^0-9]/g, "")); + shortcutElementReplace(shortcutElements[1], "ally", ""); + shortcutElementReplace(shortcutElements[2], "profile", ""); + shortcutElementReplace(shortcutElements[3], "premium", ""); + shortcutElementReplace(shortcutElements[4], "messages", ""); + shortcutElementReplace(shortcutElements[5], "tools", ""); + shortcutElementReplace(shortcutElements[6], "favorites", ""); - let villagesTable = borderLists[1]; - let villagesRows = villagesTable.getElementsByTagName("tr"); - let villagesPoints = 0; - for (let i=1; i 0) { - armyPercent = (Math.round(armyPoints / villagesCount) / 100).toString() + " %"; - } + /* Parse url params and switch case */ + let urlParams = new URLSearchParams(window.location.search); + let section = urlParams.get("s"); + let module = urlParams.get("m"); + let sub = urlParams.get("sub"); - playerPropertiesTable.appendChild(createRow("Points troupes:", str(armyPoints))); - playerPropertiesTable.appendChild(createRow("% points troupes:", armyPercent)); -} + /* Display unit-points on user profile */ + if (section === "info_player" && (module === "profile" || module === null)) { + let mainContentPane = document.getElementsByClassName("contentpane")[1]; + let borderLists = mainContentPane.getElementsByClassName("borderlist"); -/* Display unit-points on village overview */ -if (document.body.id === "overview") { - let settlements = document.getElementById("settlement").textContent.split("|"); - let noBorderRows = document.getElementsByClassName("noborder"); - let villagePointsRow = noBorderRows[0]; - for (let i=0; i 0) { + armyPercent = (Math.round(armyPoints / villagesCount) / 100).toString() + " %"; + } + + playerPropertiesTable.appendChild(createRow("Points troupes:", str(armyPoints))); + playerPropertiesTable.appendChild(createRow("% points troupes:", armyPercent)); + } + + /* Display unit-points on village overview */ + if (section === "overview") { + let settlements = document.getElementById("settlement").textContent.split("|"); + let noBorderRows = document.getElementsByClassName("noborder"); + let villagePointsRow = noBorderRows[0]; + for (let i = 0; i < noBorderRows.length; i++) { + if (noBorderRows[i].textContent.startsWith("Points:")) { + villagePointsRow = noBorderRows[i]; + break; + } + } + let unitPointsRow = villagePointsRow.cloneNode(true); + villagePointsRow.getElementsByTagName("td")[1].textContent = "Points village: " + settlements[3]; + unitPointsRow.getElementsByTagName("td")[1].textContent = "Points troupes: " + settlements[4]; + villagePointsRow.after(unitPointsRow); + } + + /* Allow multiple attacks */ + if (section === "build_barracks" && module === "command" && sub === "send") { + 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); + } + }); + } + + /* Fix select bug in market */ + if (section === "build_market" && (module === "send" || module === null)) { + let select = document.getElementsByName("village_name")[0]; + select.removeAttribute("onchange"); + select.addEventListener("change", function () { + let sendX = document.getElementById("send_x"); + let sendY = document.getElementById("send_y"); + if (this.selectedIndex === 0) { + sendX.value = ""; + sendY.value = ""; + } else { + let xy = this.value.split("|"); + sendX.value = xy[0]; + sendY.value = xy[1]; + } + }); + } } + +main();