wip
This commit is contained in:
280
src/kaplus.js
280
src/kaplus.js
@@ -437,13 +437,204 @@ function showAutoPlanerMenu(village, module) {
|
|||||||
navRow.insertBefore(separatorCell, navCells[6]);
|
navRow.insertBefore(separatorCell, navCells[6]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function handleAutoPlanerTargetChange(village) {
|
||||||
|
let targetX = document.getElementById("target_x");
|
||||||
|
let targetY = document.getElementById("target_y");
|
||||||
|
let targetId = document.getElementById("target_id");
|
||||||
|
let targetName = document.getElementById("target_name");
|
||||||
|
|
||||||
|
console.log(targetX.value, targetY.value);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleAutoPlanerUnitChange() {
|
||||||
|
let buildingSelect = document.getElementById("autoPlanerBuilding");
|
||||||
|
let unitInputs = document.getElementById("autoPlanerUnitRow").getElementsByTagName("input");
|
||||||
|
let totalUnitCount = 0;
|
||||||
|
let spyCount = 0;
|
||||||
|
let kataCount = 0;
|
||||||
|
let attackButton = document.getElementById("autoPlanerSubmitAttack");
|
||||||
|
let supportButton = document.getElementById("autoPlanerSubmitSupport");
|
||||||
|
let spyingButton = document.getElementById("autoPlanerSubmitSpying");
|
||||||
|
|
||||||
|
for (let i = 0; i < unitInputs.length; i ++) {
|
||||||
|
let unitCount = 0;
|
||||||
|
if (unitInputs[i].value !== "") {
|
||||||
|
unitCount = parseInt(unitInputs[i].value);
|
||||||
|
}
|
||||||
|
if (unitInputs[i].getAttribute("name") === "spy") {
|
||||||
|
spyCount = unitCount;
|
||||||
|
}
|
||||||
|
if (unitInputs[i].getAttribute("name") === "kata") {
|
||||||
|
kataCount = unitCount;
|
||||||
|
}
|
||||||
|
totalUnitCount += unitCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (kataCount > 0) {
|
||||||
|
buildingSelect.removeAttribute("disabled");
|
||||||
|
} else {
|
||||||
|
buildingSelect.setAttribute("disabled", "disabled");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (spyCount > 0 && spyCount === totalUnitCount) {
|
||||||
|
spyingButton.removeAttribute("disabled");
|
||||||
|
} else {
|
||||||
|
spyingButton.setAttribute("disabled", "disabled");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (totalUnitCount > 0) {
|
||||||
|
attackButton.removeAttribute("disabled");
|
||||||
|
supportButton.removeAttribute("disabled");
|
||||||
|
} else {
|
||||||
|
attackButton.setAttribute("disabled", "disabled");
|
||||||
|
supportButton.setAttribute("disabled", "disabled");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleAutoPlanerSubmit(event, village) {
|
||||||
|
event.preventDefault();
|
||||||
|
|
||||||
|
let autoPlanerError = document.getElementById("autoPlanerError");
|
||||||
|
autoPlanerError.textContent = " ";
|
||||||
|
|
||||||
|
let nowTime = Date.now();
|
||||||
|
let formData = new FormData(this);
|
||||||
|
formData.set("kind", event.submitter.getAttribute("name"));
|
||||||
|
|
||||||
|
// Check start village
|
||||||
|
let ownVillages = sessionStorage.getItem("ownVillages");
|
||||||
|
if (ownVillages === null) {
|
||||||
|
autoPlanerError.textContent = "Impossible de récupérer la liste de vos propres villages, " +
|
||||||
|
"merci de recharger la page ou de vous reconnecter au jeu si le problème persiste!"
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ownVillages = JSON.parse(ownVillages);
|
||||||
|
for (let ownVillageId in ownVillages) {
|
||||||
|
let ownVillage = ownVillages[ownVillageId];
|
||||||
|
if (ownVillage.x === parseInt(formData.get("start_x").toString()) &&
|
||||||
|
ownVillage.y === parseInt(formData.get("start_y").toString())) {
|
||||||
|
formData.set("start_id", ownVillageId);
|
||||||
|
formData.set("start_name", ownVillage.name);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (! formData.has("start_id")) {
|
||||||
|
autoPlanerError.textContent = "Opération impossible car le village d'origine ne vous appartient pas!";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check target time
|
||||||
|
let targetTime = Date.parse(
|
||||||
|
formData.get("year").toString() + "-" +
|
||||||
|
formData.get("month").toString().padStart(2, "0") + "-" +
|
||||||
|
formData.get("day").toString().padStart(2, "0") + "T" +
|
||||||
|
formData.get("hour").toString().padStart(2, "0") + ":" +
|
||||||
|
formData.get("minute").toString().padStart(2, "0") + ":" +
|
||||||
|
formData.get("second").toString().padStart(2, "0")
|
||||||
|
) + parseInt(formData.get("tenth").toString()) * 100;
|
||||||
|
if (nowTime > targetTime) {
|
||||||
|
autoPlanerError.textContent = "Opération impossible car l'heure d'arrivée est dans le passé!";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
formData.set("target_time", targetTime.toString());
|
||||||
|
formData.delete("year");
|
||||||
|
formData.delete("month");
|
||||||
|
formData.delete("day");
|
||||||
|
formData.delete("hour");
|
||||||
|
formData.delete("minute");
|
||||||
|
formData.delete("second");
|
||||||
|
formData.delete("tenth");
|
||||||
|
|
||||||
|
// Replace empty unit values by 0
|
||||||
|
for (let unit in UNITS) {
|
||||||
|
if (formData.get(unit) === "") {
|
||||||
|
formData.set(unit, "0");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calculate start time
|
||||||
|
let durationSeconds = Math.sqrt(
|
||||||
|
Math.pow(parseInt(formData.get("target_x").toString()) - parseInt(formData.get("start_x").toString()), 2) +
|
||||||
|
Math.pow(parseInt(formData.get("target_y").toString()) - parseInt(formData.get("start_y").toString()), 2)
|
||||||
|
)
|
||||||
|
if (formData.get("snob") !== "0") {
|
||||||
|
durationSeconds *= 700;
|
||||||
|
} else if (formData.get("kata") !== "0" || formData.get("ram") !== "0" || formData.get("kind") === "spying") {
|
||||||
|
durationSeconds *= 600;
|
||||||
|
} else if (formData.get("sword") !== "0") {
|
||||||
|
durationSeconds *= 440;
|
||||||
|
} else if (formData.get("farmer") !== "0") {
|
||||||
|
durationSeconds *= 400;
|
||||||
|
} else if (formData.get("spear") !== "0" || formData.get("axe") !== "0" || formData.get("bow") !== "0") {
|
||||||
|
durationSeconds *= 360;
|
||||||
|
} else if (formData.get("heavy") !== "0") {
|
||||||
|
durationSeconds *= 220;
|
||||||
|
} else if (formData.get("light") !== "0") {
|
||||||
|
durationSeconds *= 200;
|
||||||
|
} else if (formData.get("spy") !== "0") {
|
||||||
|
durationSeconds *= 180;
|
||||||
|
} else {
|
||||||
|
autoPlanerError.textContent = "Opération impossible car aucune unité n'a été sélectionnée!";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let duration = Math.round(durationSeconds) * 1000;
|
||||||
|
let startTime = targetTime - duration;
|
||||||
|
if (nowTime > startTime) {
|
||||||
|
autoPlanerError.textContent = "Opération impossible car l'heure de départ est dans le passé!";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
formData.set("start_time", startTime.toString());
|
||||||
|
|
||||||
|
// Check target village
|
||||||
|
let xhr = new XMLHttpRequest();
|
||||||
|
xhr.addEventListener("readystatechange", function () {
|
||||||
|
if (xhr.readyState === xhr.DONE) {
|
||||||
|
let parser = new DOMParser();
|
||||||
|
let doc = parser.parseFromString(xhr.responseText, "text/html");
|
||||||
|
let mapContainer = doc.getElementById("mapContainer");
|
||||||
|
let map = mapContainer.getElementsByTagName("table")[1];
|
||||||
|
let mapRows = map.getElementsByTagName("tr");
|
||||||
|
let mapRow = mapRows[Math.floor(mapRows.length / 2) - 1];
|
||||||
|
let mapCells = mapRow.getElementsByTagName("td");
|
||||||
|
let mapCell = mapCells[Math.floor(mapCells.length / 2) + 1];
|
||||||
|
let mapLinks = mapCell.getElementsByTagName("a");
|
||||||
|
if (mapLinks.length === 0) {
|
||||||
|
autoPlanerError.textContent = "Opération impossible car le village cible n'existe pas!";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
formData.set("target_id", mapLinks[0].getAttribute("href").replace(/^.*id=(\d{4}).*$/, "$1"));
|
||||||
|
formData.set(
|
||||||
|
"target_name", mapLinks[0].getAttribute("onmouseover").replace(/^.*'(.*) \(\d{3}\|\d{3}\).*$/, "$1")
|
||||||
|
);
|
||||||
|
|
||||||
|
// Save attack in localStorage
|
||||||
|
console.log("saving", formData);
|
||||||
|
let autoPlanedAttacks = localStorage.getItem("autoPlanedAttacks");
|
||||||
|
if (autoPlanedAttacks === null) {
|
||||||
|
autoPlanedAttacks = [];
|
||||||
|
} else {
|
||||||
|
autoPlanedAttacks = JSON.parse(autoPlanedAttacks);
|
||||||
|
}
|
||||||
|
autoPlanedAttacks.push(Object.fromEntries(formData));
|
||||||
|
localStorage.setItem("autoPlanedAttacks", JSON.stringify(autoPlanedAttacks));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
xhr.open(
|
||||||
|
"GET",
|
||||||
|
"/?village=" + village + "&s=map&x=" + formData.get("target_x").toString() +
|
||||||
|
"&y=" + formData.get("target_y").toString(),
|
||||||
|
);
|
||||||
|
xhr.send();
|
||||||
|
}
|
||||||
|
|
||||||
function showAutoPlanerPage(village) {
|
function showAutoPlanerPage(village) {
|
||||||
let mainContentPane = document.getElementsByClassName("contentpane")[1];
|
let mainContentPane = document.getElementsByClassName("contentpane")[1];
|
||||||
for (let i = mainContentPane.childNodes.length - 1; i >= 5; i --) {
|
for (let i = mainContentPane.childNodes.length - 1; i >= 5; i --) {
|
||||||
mainContentPane.childNodes[i].remove();
|
mainContentPane.childNodes[i].remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
let autoPlanerForm = createCustomElement("form", {"name": "kingsage"});
|
let autoPlanerForm = createCustomElement("form", {"name": "kingsage", "id": "autoPlanerForm"});
|
||||||
let borderList = createCustomElement("table", {"class": "borderlist", "width": "820"});
|
let borderList = createCustomElement("table", {"class": "borderlist", "width": "820"});
|
||||||
let titleRow = createCustomElement("tr");
|
let titleRow = createCustomElement("tr");
|
||||||
let titleCell = createCustomElement("th", {"colspan": "7"}, "Nouvel ordre autonome");
|
let titleCell = createCustomElement("th", {"colspan": "7"}, "Nouvel ordre autonome");
|
||||||
@@ -525,7 +716,7 @@ function showAutoPlanerPage(village) {
|
|||||||
"number",
|
"number",
|
||||||
"target_x",
|
"target_x",
|
||||||
null,
|
null,
|
||||||
{"id": "target_x", "required": "required", "min": "1", "max": "999"},
|
{"id": "target_x", "required": "required", "min": "0", "max": "999"},
|
||||||
{"width": "50px"},
|
{"width": "50px"},
|
||||||
);
|
);
|
||||||
targetXCell.appendChild(targetXInput);
|
targetXCell.appendChild(targetXInput);
|
||||||
@@ -536,7 +727,7 @@ function showAutoPlanerPage(village) {
|
|||||||
"number",
|
"number",
|
||||||
"target_y",
|
"target_y",
|
||||||
null,
|
null,
|
||||||
{"id": "target_y", "required": "required", "min": "1", "max": "999"},
|
{"id": "target_y", "required": "required", "min": "0", "max": "999"},
|
||||||
{"width": "50px"},
|
{"width": "50px"},
|
||||||
);
|
);
|
||||||
targetYCell.appendChild(targetYInput);
|
targetYCell.appendChild(targetYInput);
|
||||||
@@ -572,7 +763,7 @@ function showAutoPlanerPage(village) {
|
|||||||
dateCell.appendChild(createCustomInput(
|
dateCell.appendChild(createCustomInput(
|
||||||
"number",
|
"number",
|
||||||
"month",
|
"month",
|
||||||
now.getMonth().toString(),
|
(now.getMonth() + 1).toString(),
|
||||||
{"required": "required", "min": "1", "max": "12"},
|
{"required": "required", "min": "1", "max": "12"},
|
||||||
{"width": "40px"},
|
{"width": "40px"},
|
||||||
));
|
));
|
||||||
@@ -631,23 +822,20 @@ function showAutoPlanerPage(village) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
unitBorderList.appendChild(unitTitleRow);
|
unitBorderList.appendChild(unitTitleRow);
|
||||||
let unitInputRow = createCustomElement("tr");
|
let unitInputRow = createCustomElement("tr", {"id": "autoPlanerUnitRow"});
|
||||||
for (let unit in UNITS) {
|
for (let unit in UNITS) {
|
||||||
let unitInputCell = createCustomElement("td");
|
let unitInputCell = createCustomElement("td");
|
||||||
let unitInput = createCustomInput("number", unit, null, {"min": "0"}, {"width": "61px"});
|
let unitInput = createCustomInput(
|
||||||
|
"number",
|
||||||
|
unit,
|
||||||
|
null,
|
||||||
|
{"id": "autoPlanerUnit" + unit.charAt(0).toUpperCase() + unit.slice(1), "min": "0"}, {"width": "61px"},
|
||||||
|
);
|
||||||
|
unitInput.addEventListener("change", handleAutoPlanerUnitChange);
|
||||||
switch (unit) {
|
switch (unit) {
|
||||||
case "spy": case "light": case "heavy": case "ram": case "snob":
|
case "spy": case "light": case "heavy": case "ram": case "snob":
|
||||||
unitInput.style.width = "62px";
|
unitInput.style.width = "62px";
|
||||||
break;
|
break;
|
||||||
case "kata":
|
|
||||||
unitInput.addEventListener("change", function () {
|
|
||||||
if (autoPlanerForm.kata.value !== "0" && autoPlanerForm.genre.value === "attack") {
|
|
||||||
autoPlanerForm.building.removeAttribute("disabled");
|
|
||||||
} else {
|
|
||||||
autoPlanerForm.building.setAttribute("disabled", "disabled");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
unitInputCell.appendChild(unitInput);
|
unitInputCell.appendChild(unitInput);
|
||||||
unitInputRow.appendChild(unitInputCell);
|
unitInputRow.appendChild(unitInputCell);
|
||||||
@@ -663,7 +851,7 @@ function showAutoPlanerPage(village) {
|
|||||||
labelRow.appendChild(createCustomElement("td", null, "Étiquette:"));
|
labelRow.appendChild(createCustomElement("td", null, "Étiquette:"));
|
||||||
let labelCell = createCustomElement("td", {"colspan": "6"});
|
let labelCell = createCustomElement("td", {"colspan": "6"});
|
||||||
let labelInput = createCustomInput(
|
let labelInput = createCustomInput(
|
||||||
"text", "label", null, {"maxlength": "10"}, {"width": "100px"}
|
"text", "label", null, {"maxlength": "10", "placeholder": "Optionnel"}, {"width": "100px"}
|
||||||
);
|
);
|
||||||
labelCell.appendChild(labelInput);
|
labelCell.appendChild(labelInput);
|
||||||
labelRow.appendChild(labelCell);
|
labelRow.appendChild(labelCell);
|
||||||
@@ -679,31 +867,11 @@ function showAutoPlanerPage(village) {
|
|||||||
occurrencesRow.appendChild(occurrencesCell);
|
occurrencesRow.appendChild(occurrencesCell);
|
||||||
additionalBorderList.appendChild(occurrencesRow);
|
additionalBorderList.appendChild(occurrencesRow);
|
||||||
|
|
||||||
let genreRow = createCustomElement("tr");
|
|
||||||
genreRow.appendChild(createCustomElement("td", null, "Type:"));
|
|
||||||
let genreCell = createCustomElement("td", {"colspan": "6"});
|
|
||||||
let genreSelect = createCustomElement(
|
|
||||||
"select", {"name": "genre", "value": "attack"}, {"required": "required"}, {"width": "200px"}
|
|
||||||
);
|
|
||||||
genreSelect.appendChild(createCustomElement("option", {"value": "attack"}, "Attaque"));
|
|
||||||
genreSelect.appendChild(createCustomElement("option", {"value": "support"}, "Renfort"));
|
|
||||||
genreSelect.appendChild(createCustomElement("option", {"value": "spy"}, "Espionnage"));
|
|
||||||
genreSelect.addEventListener("change", function () {
|
|
||||||
if (autoPlanerForm.kata.value !== "0" && autoPlanerForm.genre.value === "attack") {
|
|
||||||
autoPlanerForm.building.removeAttribute("disabled");
|
|
||||||
} else {
|
|
||||||
autoPlanerForm.building.setAttribute("disabled", "disabled");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
genreCell.appendChild(genreSelect);
|
|
||||||
genreRow.appendChild(genreCell);
|
|
||||||
additionalBorderList.appendChild(genreRow);
|
|
||||||
|
|
||||||
let buildingRow = createCustomElement("tr");
|
let buildingRow = createCustomElement("tr");
|
||||||
buildingRow.appendChild(createCustomElement("td", null, "Bâtiment visé:"));
|
buildingRow.appendChild(createCustomElement("td", null, "Bâtiment visé:"));
|
||||||
let buildingCell = createCustomElement("td", {"colspan": "6"});
|
let buildingCell = createCustomElement("td", {"colspan": "6"});
|
||||||
let buildingSelect = createCustomElement(
|
let buildingSelect = createCustomElement(
|
||||||
"select", {"name": "building", "disabled": "disabled"}, null, {"width": "200px"}
|
"select", {"name": "building", "disabled": "disabled", "id": "autoPlanerBuilding"}, null, {"width": "200px"}
|
||||||
);
|
);
|
||||||
buildingSelect.appendChild(createCustomElement("option", null, "Sélectionner bâtiment"));
|
buildingSelect.appendChild(createCustomElement("option", null, "Sélectionner bâtiment"));
|
||||||
for (let building in BUILDINGS) {
|
for (let building in BUILDINGS) {
|
||||||
@@ -713,19 +881,8 @@ function showAutoPlanerPage(village) {
|
|||||||
buildingRow.appendChild(buildingCell);
|
buildingRow.appendChild(buildingCell);
|
||||||
additionalBorderList.appendChild(buildingRow);
|
additionalBorderList.appendChild(buildingRow);
|
||||||
|
|
||||||
autoPlanerForm.addEventListener("submit", function (event) {
|
autoPlanerForm.appendChild(createCustomElement("p", {"class": "error", "id": "autoPlanerError"}, " "));
|
||||||
event.preventDefault();
|
autoPlanerForm.appendChild(createCustomElement("br"));
|
||||||
let formData = new FormData(this);
|
|
||||||
let autoPlanedAttacks = localStorage.getItem("autoPlanedAttacks");
|
|
||||||
if (autoPlanedAttacks === null) {
|
|
||||||
autoPlanedAttacks = [];
|
|
||||||
} else {
|
|
||||||
autoPlanedAttacks = JSON.parse(autoPlanedAttacks);
|
|
||||||
}
|
|
||||||
autoPlanedAttacks.push(Object.fromEntries(formData));
|
|
||||||
localStorage.setItem("autoPlanedAttacks", JSON.stringify(autoPlanedAttacks));
|
|
||||||
})
|
|
||||||
|
|
||||||
autoPlanerForm.appendChild(borderList);
|
autoPlanerForm.appendChild(borderList);
|
||||||
autoPlanerForm.appendChild(createCustomElement("br"));
|
autoPlanerForm.appendChild(createCustomElement("br"));
|
||||||
autoPlanerForm.appendChild(unitBorderList);
|
autoPlanerForm.appendChild(unitBorderList);
|
||||||
@@ -734,11 +891,26 @@ function showAutoPlanerPage(village) {
|
|||||||
autoPlanerForm.appendChild(createCustomElement("br"));
|
autoPlanerForm.appendChild(createCustomElement("br"));
|
||||||
autoPlanerForm.appendChild(createCustomInput(
|
autoPlanerForm.appendChild(createCustomInput(
|
||||||
"submit",
|
"submit",
|
||||||
null,
|
"attack",
|
||||||
"> Ajouter une nouvelle entrée",
|
"> Programmer une nouvelle attaque",
|
||||||
null,
|
{"id": "autoPlanerSubmitAttack", "disabled": "disabled"},
|
||||||
{"font-weight": "bold", "padding": "5px 20px", "cursor": "pointer"}
|
{"font-weight": "bold", "width": "250px", "padding": "5px 0", "cursor": "pointer"}
|
||||||
));
|
));
|
||||||
|
autoPlanerForm.appendChild(createCustomInput(
|
||||||
|
"submit",
|
||||||
|
"support",
|
||||||
|
"> Programmer un nouveau renfort",
|
||||||
|
{"id": "autoPlanerSubmitSupport", "disabled": "disabled"},
|
||||||
|
{"font-weight": "bold", "width": "250px", "padding": "5px 0", "margin": "0 35px", "cursor": "pointer"}
|
||||||
|
));
|
||||||
|
autoPlanerForm.appendChild(createCustomInput(
|
||||||
|
"submit",
|
||||||
|
"spying",
|
||||||
|
"> Programmer un nouvel espionnage",
|
||||||
|
{"id": "autoPlanerSubmitSpying", "disabled": "disabled"},
|
||||||
|
{"font-weight": "bold", "width": "250px", "padding": "5px 0", "cursor": "pointer"}
|
||||||
|
));
|
||||||
|
autoPlanerForm.addEventListener("submit", handleAutoPlanerSubmit);
|
||||||
mainContentPane.appendChild(autoPlanerForm);
|
mainContentPane.appendChild(autoPlanerForm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user