4 Commits

Author SHA1 Message Date
255ca528a5 Add tenth of seconds in attack sending page
All checks were successful
Continuous Deployment / lint (push) Successful in 26s
Continuous Deployment / deploy-chrome (push) Successful in 30s
Continuous Deployment / deploy-firefox (push) Successful in 5m27s
2025-11-17 19:22:39 +01:00
b843fa1b26 fix bug with search regex
All checks were successful
Continuous Deployment / lint (push) Successful in 27s
Continuous Deployment / deploy-chrome (push) Successful in 34s
Continuous Deployment / deploy-firefox (push) Successful in 5m42s
2025-11-16 12:53:44 +01:00
aa07f2827b Use server time for computing seconds
Some checks failed
Continuous Deployment / lint (push) Successful in 28s
Continuous Deployment / deploy-chrome (push) Failing after 19s
Continuous Deployment / deploy-firefox (push) Successful in 1m34s
2025-11-16 03:43:13 +01:00
c21ddb517c Fix bug on attack seconds
All checks were successful
Continuous Deployment / deploy-chrome (push) Successful in 34s
Continuous Deployment / deploy-firefox (push) Successful in 1m52s
Continuous Deployment / lint (push) Successful in 27s
2025-11-16 03:27:46 +01:00
4 changed files with 81 additions and 19 deletions

View File

@@ -1,5 +1,23 @@
# Changelog
## 1.8.1 (2025-11-17)
- remplacement de 'attaques' par 'occurrences'
- correction du calcul d'arrivée des unités
- ajout des dizièmes de seconde pour envoyer des unités
## 1.7.4 (2025-11-16)
- correction bug de calcul des secondes en utilisant search regex
## 1.7.3 (2025-11-16)
- correction bug de calcul des secondes en utilisant le temps du serveur
## 1.7.2 (2025-11-16)
- correction bug de calcul des secondes sur la page des attaques
## 1.7.1 (2025-11-16)
- ajout des secondes dans la page des attaques

View File

@@ -1,7 +1,7 @@
{
"manifest_version": 3,
"name": "KAplus",
"version": "1.7.1",
"version": "1.8.1",
"developer": {
"name": "Samuel Campos",

View File

@@ -5,8 +5,8 @@
"firefox"
],
"release_notes": {
"fr": "- ajout des secondes dans la page des attaques\n- ajout d'un lien vers le calculateur de trajet dans la page des attaques",
"en-US": "- add seconds in attack page\n- add calculator link in attack page"
"fr": "- remplacement de 'attaques' par 'occurrences'\n- correction du calcul d'arrivée des unités\n- ajout des dizièmes de seconde pour envoyer des unités",
"en-US": "- replace 'attaques' with 'occurrences'\n- fix unit arrival date computing\n- add tenths of seconds to send units"
}
}
}

View File

@@ -1,3 +1,8 @@
let tomorrow = new Date(new Date().getTime() + 24*60*60*1000);
tomorrow.setHours(0, 0, 0, 0);
let afterTomorrow = new Date(tomorrow.getTime() + 24*60*60*1000);
let movingDuration = 0;
function num(s) {
return parseInt(s.replace(".", ""));
}
@@ -39,6 +44,12 @@ function createInput(type, name, value) {
return elt;
}
function searchPoint(text) {
let index = text.search(/\d{3}\|\d{3}/);
let point = text.slice(index, index + 7).split("|");
return {x: point[0], y: point[1]}
}
function shortcutElementReplace(elt, img, text) {
// If more than one hyperlink element found,
// then keep the last one but with href of the first one.
@@ -73,6 +84,25 @@ function shortcutElementReplace(elt, img, text) {
}
}
function countUpMs() {
let arrivalDate = new Date(new Date().getTime() + movingDuration * 1000);
let prefix = "";
if (arrivalDate >= afterTomorrow) {
prefix = "le " + arrivalDate.getDate() + "." + arrivalDate.getMonth() + " ";
} else if (arrivalDate > tomorrow) {
prefix = "demain ";
}
document.getElementById("countup-time-ms").textContent = prefix
+ "à "
+ arrivalDate.getHours().toString().padStart(2, "0")
+ ":"
+ arrivalDate.getMinutes().toString().padStart(2, "0")
+ ":"
+ arrivalDate.getSeconds().toString().padStart(2, "0")
+ ":"
+ Math.floor(arrivalDate.getMilliseconds() / 100);
}
function main() {
/* Exit immediately if not on game page */
let layCastleTopElements = document.getElementsByClassName("lay_castle_top");
@@ -149,34 +179,48 @@ function main() {
villagePointsRow.after(unitPointsRow);
}
/* Allow multiple attacks */
/* Units sending page */
if (section === "build_barracks" && module === "command" && sub === "send") {
/* Improve countup time cell */
let oldCell = document.getElementById("countup-time");
let hms = oldCell.parentElement.previousElementSibling.getElementsByTagName("td")[1].textContent.split(":");
movingDuration = parseInt(hms[0]) * 3600 + parseInt(hms[1]) * 60 + parseInt(hms[2]) ;
let newRow = document.createElement("tr");
let newLeftCell = document.createElement("td");
newLeftCell.textContent = "Arrivée:";
newRow.appendChild(newLeftCell);
let newRightCell = document.createElement("td");
newRightCell.setAttribute("id", "countup-time-ms");
newRow.appendChild(newRightCell);
oldCell.parentElement.parentElement.insertBefore(newRow, oldCell.parentElement);
oldCell.parentElement.style.display = "none";
setInterval(countUpMs, 100);
/* Allow multiple occurrences of 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:";
th.textContent = "Nombre d'occurrences:";
tr.appendChild(th)
let td = document.createElement("td");
let input = document.createElement("input");
input.setAttribute("type", "number");
input.setAttribute("name", "attack_count");
input.setAttribute("name", "occurrences");
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 attackCount = parseInt(formData.get("occurrences").toString());
formData.delete("occurrences");
let sent = 0;
for (let i = 0; i < attackCount; i++) {
let xhr = new XMLHttpRequest();
@@ -212,6 +256,7 @@ function main() {
/* Improve attacks display */
if (section === "ally" && module === "attacks") {
let serverTime = parseInt(document.getElementById("servertime").getAttribute("time"));
let contentPane = document.getElementsByClassName("contentpane")[1]
let table = contentPane.getElementsByClassName("borderlist")[0];
let rows = table.getElementsByTagName("tr");
@@ -224,22 +269,21 @@ function main() {
let arrivalDateCell = cells[3]
let arrivalTimeCell = cells[4];
let interval = arrivalTimeCell.textContent.split(":");
let seconds = parseInt(interval[0]) * 3600 + parseInt(interval[1]) * 60 + parseInt(interval[2]);
let arrival = new Date(Date.now() + seconds * 1000);
let seconds = parseInt(arrivalTimeCell.getElementsByTagName("span")[0].getAttribute("time"));
let arrival = new Date((serverTime + seconds) * 1000);
let hour = arrival.toLocaleTimeString("fr-FR");
arrivalDateCell.textContent = arrivalDateCell.textContent.replace(/(.*)\d\d:\d\d(.*)/, "$1" + hour + "$2");
let startPoint = cells[2].getElementsByTagName("a")[3].textContent.split("|");
let targetPoint = cells[1].getElementsByTagName("a")[2].textContent.split("|");
let startPoint = searchPoint(cells[2].textContent);
let targetPoint = searchPoint(cells[1].textContent);
let calculatorCell = document.createElement("td");
let calculatorForm = document.createElement("form");
calculatorForm.setAttribute("method", "post");
calculatorForm.setAttribute("action", "/?s=tools&m=runtime_calculator&inta=calculate");
calculatorForm.appendChild(createInput("hidden", "start_x", startPoint[0]));
calculatorForm.appendChild(createInput("hidden", "start_y", startPoint[1]));
calculatorForm.appendChild(createInput("hidden", "target_x", targetPoint[0]));
calculatorForm.appendChild(createInput("hidden", "target_y", targetPoint[1]));
calculatorForm.appendChild(createInput("hidden", "start_x", startPoint.x));
calculatorForm.appendChild(createInput("hidden", "start_y", startPoint.y));
calculatorForm.appendChild(createInput("hidden", "target_x", targetPoint.x));
calculatorForm.appendChild(createInput("hidden", "target_y", targetPoint.y));
let calculatorImg = document.createElement("input");
calculatorImg.setAttribute("type", "image");
calculatorImg.setAttribute("src", chrome.runtime.getURL("images/calculator.svg"));