Misc Troop Resource Balance Calculator

mowmaster

New Member
Reaction score
0
Author
mowmaster
Contributors
N/A
Quickbar Entry
javascript:

const content = `

<div class="getRes" resWood=${jQuery('#wood').text()} resStone=${jQuery('#stone').text()} resIron=${jQuery('#iron').text()}></div>

<div class="ra-flex">
<div class="ra-flex-6">
<div class="ra-mb15">
<select id="unit_type">
<option value="-1" selected="selected">Select Unit Type</option>
<option value="0">Spear</option>
<option value="1">Sword</option>
<option value="2">Axe</option>
<option value="3">Scout</option>
<option value="4">LC</option>
<option value="5">HC</option>
<option value="6">Ram</option>
<option value="7">Cat</option>
<option value="8">Noble</option>
</select>
</div>
</div>
<div class="ra-flex-3">
<div class="ra-mb15">
<label for="unit_count">Unit Count</label>
<input id="unit_count" type="text" readonly="readonly" value="">
</div>
</div>
</div>

<div class="ra-flex">
<div class="ra-flex-3">
<div class="ra-mb15">
<label for="wood_count">Wood Difference</label>
<input id="wood_count" type="text" readonly="readonly" value="">
</div>
</div>
<div class="ra-flex-3">
<div class="ra-mb15">
<label for="clay_count">Clay Difference</label>
<input id="clay_count" type="text" readonly="readonly" value="">
</div>
</div>
<div class="ra-flex-3">
<div class="ra-mb15">
<label for="iron_count">Iron Difference</label>
<input id="iron_count" type="text" readonly="readonly" value="">
</div>
</div>
<div class="ra-flex-3">
<div class="ra-mb15">
<label for="population_count">Population Needed</label>
<input id="population_count" type="text" readonly="readonly" value="">
</div>
</div>
</div>
`;

const windowContent = prepareWindowContent(content);
attackPlannerWindow = window.open(
'',
'',
'left=10px,top=10px,width=480,height=280,toolbar=0,resizable=0,location=0,menubar=0,scrollbars=0,status=0'
);
attackPlannerWindow.document.write(windowContent);

function prepareWindowContent(windowBody) {
const windowHeader = `<h1 class="ra-fs18 ra-fw600">Troop Resource Balance Calculator</h1>`;
const windowFooter = ``;
const windowStyle = `
<style>
body { background-color: #f4e4bc; font-family: Verdana, Arial, sans-serif; font-size: 14px; line-height: 1; }
main { max-width: 768px; margin: 0 auto; }
h1 { font-size: 27px; }
a { font-weight: 700; text-decoration: none; color: #603000; }
small { font-size: 10px; }
input[type="text"],
select { display: block; width: 100%; height: auto; line-height: 1; box-sizing: border-box; padding: 5px; outline: none; border: 1px solid #999; }
input[type="text"]:focus { outline: none; box-shadow: none; border: 1px solid #603000; background-color: #eee; }
label { font-weight: 600; display: block; margin-bottom: 5px; font-size: 12px; }
.ra-mb15 { margin-bottom: 15px; }
.ra-flex { display: flex; flex-flow: row wrap; justify-content: space-between; }
.ra-flex-6 { flex: 0 0 48%; }
.ra-flex-4 { flex: 0 0 30%; }
.button { padding: 10px 20px; background-color: #603000; font-weight: 500; color: #fff; text-align: center; display: inline-block; cursor: pointer; text-transform: uppercase; }
</style>
`;

const html = `
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Troop Resourse Balance Calculator</title>
${windowStyle}
</head>
<body>
<main>
${windowHeader}
${windowBody}
${windowFooter}
</main>
<script>
function loadJS(url, callback) {
var scriptTag = document.createElement('script');
scriptTag.src = url;
scriptTag.onload = callback;
scriptTag.onreadystatechange = callback;
document.body.appendChild(scriptTag);
}

let units = [
["spear", 50, 30, 10, 1],
["sword", 30, 30, 70, 1],
["axe", 60, 30, 40, 1],
["scout", 50, 50, 20, 2],
["lightcalv", 125, 100, 250, 4],
["heavycalv", 200, 150, 600, 6],
["ram", 300, 200, 200, 5],
["cat", 320, 400, 100, 8],
["noble", 40000, 50000, 50000, 100],
];

function calculateBalance(currentResArray, unitArrayCost) {

let currentWood = currentResArray[0];
let currentClay = currentResArray[1];
let currentIron = currentResArray[2];

let currentResSum = parseInt(currentWood, 10) + parseInt(currentClay, 10) + parseInt(currentIron, 10);

let unitWood = unitArrayCost[1];
let unitClay = unitArrayCost[2];
let unitIron = unitArrayCost[3];
let unitPopulation = unitArrayCost[4];
let unitResSum = parseInt(unitWood, 10) + parseInt(unitClay, 10) + parseInt(unitIron, 10);

let unitCount = parseInt(currentResSum, 10) / parseInt(unitResSum, 10);

let needWood = parseInt(unitCount, 10) * parseInt(unitWood, 10);
let needClay = parseInt(unitCount, 10) * parseInt(unitClay, 10);
let needIron = parseInt(unitCount, 10) * parseInt(unitIron, 10);

let difResWood = parseInt(needWood, 10) - parseInt(currentWood, 10);
let difResClay = parseInt(needClay, 10) - parseInt(currentClay, 10);
let difResIron = parseInt(needIron, 10) - parseInt(currentIron, 10);
let needPopulation = parseInt(unitPopulation, 10) * parseInt(unitCount, 10);

let returnArray = [parseInt(difResWood, 10),parseInt(difResClay, 10),parseInt(difResIron, 10),parseInt(needPopulation, 10),parseInt(unitCount, 10)];

return returnArray;
};

loadJS('https://code.jquery.com/jquery-3.6.0.min.js', function() {

$("#unit_type").change(function(){
let selectedValue = this.value;
console.log("selectedValue: " + selectedValue);
let currentRes = [jQuery('.getRes').attr('resWood'), jQuery('.getRes').attr('resStone'), jQuery('.getRes').attr('resIron')];
let calcArray = calculateBalance(currentRes,units[selectedValue]);


$("#wood_count").val(parseInt(calcArray[0], 10));
$("#clay_count").val(parseInt(calcArray[1], 10));
$("#iron_count").val(parseInt(calcArray[2], 10));
$("#population_count").val(parseInt(calcArray[3], 10));
$("#unit_count").val(parseInt(calcArray[4], 10));
});

});
</script>
</body>
</html>
`;

return html;
}

;
Public?
Public
Its a very simple script that takes the players currently stored resources and figures out how much of a specific unit can be created from those resources.
I personally use this info and use the pp market to balance my resources (manually)

The script opens up a new window, the user just need to select a unit, and it will auto update and display the calculation(s)
Unit Count: Number of units that can be made
Wood Difference/Clay Difference/Iron Difference: Positive value means this resource NEEDS more, Negative value means this resource needs to give up resources(to be converted)
Population Needed: Just to show how much pop is needed, not really needed, but maybe someone can find it helpful.

Possible Improvements, (that i have no idea how to do as i'm very new to TW's code.)
- Soft-coding Unit costs, so i dont have to update this if things change
- Language support
- Adding more unit types (i faintly remember archer calv, but im not sure what else there is/was)
 
Upvote 0
Top