// ==UserScript==
// @name Webgame - Infiltrace
// @version 2024-2-11
// @description Infiltrace, modifikace
// @author yS
// @match *://*.webgame.cz/wg/index.php?p=rozvedka&s=viewspye*
// @match *://webgame.cz/wg/index.php?p=rozvedka&s=viewspye*
// @icon https://www.google.com/s2/favicons?sz=64&domain=webgame.cz
// @grant none
// @namespace https://greasyfork.org/users/1005892
// ==/UserScript==
const DATA_SEPARATOR = "<br>";
modifyTable();
function modifyTable() {
let table_summary = document.getElementById("spy-message-summary");
let info_type = getInfoType(table_summary);
if (info_type == null) {
console.log("Nezměněný typ infiltrace");
return;
}
let table_detail = document.getElementById("spy-message-detail");
let prestiz = getPrestiz(table_summary);
let header_row = table_detail.children[0].children[0];
let data_row = table_detail.children[0].children[1];
addColumnInfo(header_row, data_row, prestiz, info_type);
if (info_type == 0) { // vlada
addArmyData(data_row);
}
}
function getInfoType(table_summary) {
let text = table_summary.querySelector(".r").innerText;
text = text.split("infiltrovat");
if (text.length < 1) {
return null;
}
text = text[1].split("\n");
if (text.length < 1) {
return null;
}
text = text[0].trim();
if (text == "vládu") {
return 0;
}
if (text == "generální štáb") {
return 1;
}
return null;
}
function getPrestiz(table_summary) {
let column = table_summary.rows[0].children[1];
let index = 12;
let prestiz, text;
let pruchodu = 50;
do {
pruchodu--;
text = column.childNodes[index++];
if (text.nodeName != '#text') {
continue;
}
prestiz = parseInt(text.textContent);
} while ((isNaN(prestiz) || prestiz < 40000) && pruchodu > 0);
return prestiz;
}
function addHeaderColumn(row, column_name) {
let header = document.createElement("th");
header.innerHTML = column_name;
header.colSpan = 2;
row.appendChild(header);
}
function createColumn(class_name_1, class_name_2, text) {
let column = document.createElement("td");
column.innerHTML = text;
column.classList.add(class_name_1);
column.classList.add(class_name_2);
return column;
}
function addColumnInfo(header_row, data_row, prestiz, info_type) {
addHeaderColumn(header_row, "Přehled");
let left_column_content = "";
let right_column_content = "";
let format = new Intl.NumberFormat();
// ARMADA ZACATEK
let army_data = data_row.children[1].innerHTML.split(DATA_SEPARATOR);
let prestiz_per_unit = [1, 5, 3.5, 3.5, 2.7];
let army_prestiz = 0;
let mechy_podil = 0;
for (let i = 0; i < 5; i++) {
army_prestiz = army_prestiz + parseInt(army_data[i]) * prestiz_per_unit[i];
if (i == 4) {
mechy_podil = parseInt(army_data[i]) * prestiz_per_unit[i];
}
}
left_column_content = left_column_content + "Armáda prestiž" + DATA_SEPARATOR + "Podíl prestiže" + DATA_SEPARATOR + DATA_SEPARATOR;
right_column_content = right_column_content + format.format(Math.round(army_prestiz)) + DATA_SEPARATOR + (Math.round(army_prestiz / prestiz * 1000) / 10) + "%" + DATA_SEPARATOR + DATA_SEPARATOR;
// ARMADA KONEC
// MECHY % ZACATEK
left_column_content = left_column_content + "Mechy %" + DATA_SEPARATOR + DATA_SEPARATOR;
right_column_content = right_column_content + Math.round(mechy_podil / army_prestiz * 1000) / 10 + "%" + DATA_SEPARATOR + DATA_SEPARATOR;
// MECHY % KONEC
if (info_type == 0) {
let uzemi_data = processUzemiInfo(data_row, army_data, left_column_content, right_column_content, format, prestiz);
left_column_content = uzemi_data[0];
right_column_content = uzemi_data[1];
let uzemi_prestiz = uzemi_data[2];
let uzemi = uzemi_data[3];
let techy_data = processTechy(data_row, left_column_content, right_column_content, format, prestiz);
left_column_content = techy_data[0];
right_column_content = techy_data[1];
let technologie_count = techy_data[2];
let ukrast_na_operaci = techy_data[3];
// MRTVA PRESTIZ ZACATEK
let mrtva_prestiz = 0;
mrtva_prestiz = prestiz - army_prestiz - uzemi_prestiz - technologie_count;
left_column_content = left_column_content + "Mrtvá prestiž" + DATA_SEPARATOR + "Procent" + DATA_SEPARATOR + DATA_SEPARATOR;
right_column_content = right_column_content + format.format(Math.round(mrtva_prestiz)) + DATA_SEPARATOR + (Math.round(mrtva_prestiz / prestiz * 1000) / 10) + "%" + DATA_SEPARATOR + DATA_SEPARATOR;
let rozvedka_prestiz = (uzemi + 2000) / 4 * 15;
left_column_content = left_column_content + "Na R kartičku" + DATA_SEPARATOR + DATA_SEPARATOR;
right_column_content = right_column_content + format.format(Math.round(rozvedka_prestiz)) + DATA_SEPARATOR + DATA_SEPARATOR;
// MRTVA PRESTIZ KONEC
// KRADEZ TECHU ZACATEK
left_column_content = left_column_content + "Techy krádež" + DATA_SEPARATOR;
right_column_content = right_column_content + format.format(Math.floor(ukrast_na_operaci)) + DATA_SEPARATOR;
// KRADEZ TECHU KONEC
}
let column = createColumn("rname", "l", left_column_content);
data_row.appendChild(column);
column = createColumn("rdata", "r", right_column_content);
data_row.appendChild(column);
}
/**
* @param data_row
* @param army_data
* @param left_column_content
* @param right_column_content
* @param format
* @param prestiz
*
* @return array [left_column_content, right_column_content, uzemi_prestiz, uzemi]
*/
function processUzemiInfo(data_row, army_data, left_column_content, right_column_content, format, prestiz) {
let budovy_data = data_row.children[3].innerHTML.split(DATA_SEPARATOR);
let uzemi = parseInt(army_data[9]);
let uzemi_prestiz = uzemi * 15;
uzemi_prestiz = uzemi_prestiz + (uzemi - parseInt(budovy_data[11]) - parseInt(budovy_data[12])) * 5; // budovy
uzemi_prestiz = uzemi_prestiz + parseInt(budovy_data[12]) * 2; // ruiny
left_column_content = left_column_content + "Území" + DATA_SEPARATOR + "Procent" + DATA_SEPARATOR + DATA_SEPARATOR;
right_column_content = right_column_content + format.format(uzemi_prestiz) + DATA_SEPARATOR + (Math.round(uzemi_prestiz / prestiz * 1000) / 10) + "%" + DATA_SEPARATOR + DATA_SEPARATOR;
return [left_column_content, right_column_content, uzemi_prestiz, uzemi];
}
/**
* @param data_row
* @param left_column_content
* @param right_column_content
* @param format
* @param prestiz
*
* @return array [left_column_content, right_column_content, technologie_count, ukrast_na_operaci]
*/
function processTechy(data_row, left_column_content, right_column_content, format, prestiz) {
let technologie_data = data_row.children[5].innerHTML.split(DATA_SEPARATOR);
let technologie_count = 0;
let pokryto_techu = 2 * parseInt(technologie_data[10]);
let ukrast_na_operaci = 0;
for (let i = 0; i < technologie_data.length; i++) {
let technologie = parseInt(technologie_data[i]);
technologie_count = technologie_count + technologie;
if (technologie > pokryto_techu) {
ukrast_na_operaci = ukrast_na_operaci + (technologie - pokryto_techu) * 0.05 + pokryto_techu * 0.002;
} else {
ukrast_na_operaci = ukrast_na_operaci + technologie * 0.002;
}
}
left_column_content = left_column_content + "Technologie" + DATA_SEPARATOR + "Procent" + DATA_SEPARATOR + DATA_SEPARATOR;
right_column_content = right_column_content + format.format(technologie_count) + DATA_SEPARATOR + (Math.round(technologie_count / prestiz * 1000) / 10) + "%" + DATA_SEPARATOR + DATA_SEPARATOR;
return [left_column_content, right_column_content, technologie_count, ukrast_na_operaci];
}
function addArmyData(data_row) {
let format = new Intl.NumberFormat();
// ARMADA ZACATEK
let army_data = data_row.children[1].innerHTML.split(DATA_SEPARATOR);
let utok_per_unit = [1, 6, 6, 0, 2];
let obrana_per_unit = [1, 4, 0, 6, 3];
let utok_total = 0,
obrana_total = 0;
for (let i = 0; i < 5; i++) {
utok_total = utok_total + parseInt(army_data[i]) * utok_per_unit[i];
obrana_total = obrana_total + parseInt(army_data[i]) * obrana_per_unit[i];
}
// ARMADA KONEC
data_row.children[0].innerHTML += DATA_SEPARATOR + DATA_SEPARATOR + "<b>Armáda</b>" + DATA_SEPARATOR + "U základ" + DATA_SEPARATOR + "O základ";
data_row.children[1].innerHTML += DATA_SEPARATOR + DATA_SEPARATOR + DATA_SEPARATOR + format.format(utok_total) + DATA_SEPARATOR + format.format(obrana_total);
}