NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name wofh report (en)
// @namespace https://*.waysofhistory.com/game
// @include https://*.waysofhistory.com/gen/html*
// @version 5.1
// @grant none
// @license MIT
// @updateURL https://openuserjs.org/meta/ArtanoMayarov/wofh_report_(en).meta.js
// @downloadURL https://openuserjs.org/install/ArtanoMayarov/wofh_report_(en).user.js
// @copyright 2017-2019, Сатана (https://gist.github.com/vityas-off/806ab420d184ee777996da83c3f4ac4c),simplexe (https://openuserjs.org/users/simplexe)
// @copyright 2019 Artano Mayarov (translate only)
// ==/UserScript==
const changeBg = () => {
const bg = localStorage.getItem('bg');
if (bg) document.body.style.background = `url(${bg}) no-repeat`;
};
document.addEventListener('dragover', evt => {
evt.preventDefault();
});
document.addEventListener('drop', evt => {
evt.preventDefault();
const file = evt.dataTransfer.files[0];
const reader = new FileReader();
reader.addEventListener('load', () => {
localStorage.setItem('bg', reader.result);
changeBg();
});
if (file) reader.readAsDataURL(file);
});
changeBg();
function createReport() {
var bonus = wofh.town.getLuckBonus(3).level;
document.querySelector('.messages-write-text').value += `
*** City's report [t${wofh.town.id}] ***
Population: ${wofh.town.pop.has | 0}/${wofh.town.pop.culture} ${wofh.town.pop
.incReal >= 0
? '+'
: '-'} ${Math.abs(Math.round(wofh.town.pop.incReal))}
Workers distribution: ${Object.values(wofh.town.calcPopOnRes().list)
.sort((a, b) => b.count - a.count)
.map(el => `${Resource.lib[el.id].name} - ${el.count}`)
.join(', ')}, Unemployed - ${(wofh.town.pop.has -
wofh.town.calcPopOnRes().calcSum()) |
0}
Resource production: ${Object.values(wofh.town.stock.list)
.filter(el => el.incom > 0 && el.id !== 2)
.sort((a, b) => b.incom - a.incom)
.map(el => `${Resource.lib[el.id].name} - ${el.incom | 0}`)
.join(', ')}
Resource consumption: ${Object.values(wofh.town.stock.getConsBinList().list)
.map(el => Resource.lib[el.id].name)
.join(', ')}
Industry LC bonus: ${bonus * 10} %
[Buildings]
${Object.values(wofh.town.buildings)
.filter(el => el[0] !== 500)
.map(el => `[b${el[0]}] lvl ${el[1]}`)
.join('\n')}
`;
}
function calcCost() {
alert(
`Destruction durability: ${Object.values(wofh.town.slots.list)
.filter(el => el.build.cost && !Build.isWonder(el.id))
.map(el => el.calcTotalCost().list)
.reduce(
(acc, el) =>
acc +
Object.values(el)
.map(el => el.count)
.reduce((total, num) => num + total, 0),
0
)
.toLocaleString('ru-RU')}`
);
}
var bReport = document.createElement('button');
bReport.className = "button1 btn-Report";
bReport.setAttribute('style', 'position: absolute; top: 0; right: 110px');
bReport.textContent = "City's report";
bReport.addEventListener('click', createReport);
var bCalc = document.createElement('button');
bCalc.className = "button1 btn-Calc";
bCalc.setAttribute('style', 'position: absolute; top: 0; right: 220px');
bCalc.textContent = "Durability";
bCalc.addEventListener('click', calcCost);
document.addEventListener('click', evt => {
if (document.querySelector('.messages-write-form') !== null && document.querySelector('.messages-write-form').length > 0) {
if (document.querySelector('.btn-Report') === null) {
document.querySelector('.messages-write-footer').insertBefore(bReport, document.querySelector('.messages-write-chrCount'));
}
if (document.querySelector('.btn-Calc') === null) {
document.querySelector('.messages-write-footer').insertBefore(bCalc, document.querySelector('.messages-write-chrCount'));
}
}
});
document.addEventListener('keydown', evt => {
if (evt.keyCode === 49 && evt.ctrlKey && evt.altKey) {
createReport();
}
if (evt.keyCode === 48 && evt.ctrlKey && evt.altKey) {
calcCost();
}
});