Boom Beach Expected Crystals
by andrewlong
HTML
<label for="numPVP"># of PVP bases: </label>
<input id="numPVP" type="number" value="0" />
<br/>
<label for="numNPC"># of NPC bases: </label>
<input id="numNPC" type="number" value="0" />
<br/>
<label for="numTrop"># of Tropical Terror Bases: </label>
<input id="numTrop" type="number" value="0" />
<br/>
<label for="numVol"># of Volcano Terror Bases: </label>
<input id="numVol" type="number" value="0" />
<br/>
<button id="calcBuildings" type="button">Calculate # of buildings</button>
<br/>
<br/>
<label for="numHq"># of Headquarters: </label>
<input id="numHq" type="number" value="0" />
<br/>
<label for="numBuildings"># of Buildings: </label>
<input id="numBuildings" type="number" value="0" />
<br/>
<label for="pscBonus">PSC statue bonus: </label>
<input id="pscBonus" type="number" value="0" />
<br/>
<button id="calcEV" type="button">Calculate expected # of crystals</button>
<br/>
<br/>
<label for="numCrystalsNoStatue">Expected # of crystals without PSC statue: </label>
<input id="numCrystalsNoStatue" type="text" value="0" />
<br/>
<label for="numCrystals">Expected # of crystals with unboosted PSC statue: </label>
<input id="numCrystals" type="text" value="0" />
<br/>
<label for="numCrystalsBoosted">Expected # of crystals with boosted PSC statue: </label>
<input id="numCrystalsBoosted" type="text" value="0" />
JavaScript
$("#calcBuildings").click(function() {
var numPVP = Number($("#numPVP").val());
var numNPC = Number($("#numNPC").val());
var tropicalTerror = parseInt($("#numTrop").val());
var volcanoTerror = parseInt($("#numVol").val());
var avgPVP = 62;
var avgNPC = 45;
var tropicalTerrorBuildings = [5, 10, 15, 20, 25, 30, 35];
var volcanoTerrorBuildings = [15, 30, 40, 55, 70, 80, 90];
var hq = numPVP + numNPC + tropicalTerror + volcanoTerror;
var buildings = (numPVP * avgPVP) + (numNPC * avgNPC);
if (tropicalTerror > 0) buildings = buildings + tropicalTerrorBuildings.slice(0, tropicalTerror).reduce(function(pv, cv) {
return pv + cv;
}, 0);
if (volcanoTerror > 0) buildings = buildings + volcanoTerrorBuildings.slice(0, volcanoTerror).reduce(function(pv, cv) {
return pv + cv;
}, 0);
$("#numHq").val(hq);
$("#numBuildings").val(buildings);
})
$("#calcEV").click(function() {
var numHq = parseInt($("#numHq").val());
var numBuildings = parseInt($("#numBuildings").val());
var pscBonus = Number($("#pscBonus").val());
var evStone = (.03 * 1) + (.12 * 1 / 7) + (.85 * 1 / 49);
var pHq = .25;
var pBuilding = .02;
var pHqStatue = pHq * (1 + pscBonus);
var pBuildingStatue = pBuilding * (1 + pscBonus);
var pHqBoosted = pHq * (1 + 2 * pscBonus);
var pBuildingBoosted = pBuilding * (1 + 2 * pscBonus);
var crystalsNoStatue = numHq * pHq * evStone + numBuildings * pBuilding * evStone;
var crystalsStatue = numHq * pHqStatue * evStone + numBuildings * pBuildingStatue * evStone;
var crystalsBoosted = numHq * pHqBoosted * evStone + numBuildings * pBuildingBoosted * evStone;
$("#numCrystalsNoStatue").val(crystalsNoStatue.toFixed(2));
$("#numCrystals").val(crystalsStatue.toFixed(2));
$("#numCrystalsBoosted").val(crystalsBoosted.toFixed(2));
})