diff --git a/src/js/economyJS.js b/src/js/economyJS.js index 50babb6ae15fe7b5703bdc3b1f08f1510ca1b825..d6748a44763ae1c575432c5d2022b1018125466b 100644 --- a/src/js/economyJS.js +++ b/src/js/economyJS.js @@ -137,7 +137,7 @@ window.calculateCosts = (function() { // slave expenses function predictTotalSlaveCosts() { - const V = Slave.variables; + const V = State.variables; let loopCosts = 0; let number = 0; for (const slave of V.slaves) { @@ -159,14 +159,47 @@ window.calculateCosts = (function() { } function getTotalSlaveCosts() { + const V = State.variables; let slaveCost = 0; let slaveCostMinor = 0; - for (const slave of State.variables.slaves) { + let numberServed = 0; + let loopCosts = 0; + + // Figure out how many slaves are effectively getting their upkeep reduced by 20% + V.ServQiIDs.forEach(ID => { + numberServed += getSlaveMinorCosts(V.slaves[V.slaveIndices[ID]]); + }); + V.JobIDArray["be a servant"].forEach(ID => { + numberServed += getSlaveMinorCosts(V.slaves[V.slaveIndices[ID]]); + }); + + // Find the total slave upkeep and pay for it + for (const slave of V.slaves) { slaveCost = getSlaveCost(slave); + loopCosts += slaveCost; cashX(forceNeg(slaveCost), "slaveUpkeep", slave); - slaveCostMinor = getSlaveMinorCosts(slave); - cashX(Math.abs(slaveCostMinor), "houseServant", slave); } + + // Calculate the servant reduction and credit them for it + const reducibleUpkeep = Math.trunc(loopCosts * 0.2); + V.ServQiIDs.forEach(ID => { + if (V.slaves.length > numberServed) { + slaveCostMinor = Math.trunc(reducibleUpkeep / V.slaves.length * getSlaveMinorCosts(V.slaves[V.slaveIndices[ID]])); + cashX(Math.abs(slaveCostMinor), "houseServant", V.slaves[V.slaveIndices[ID]]); + } else { + slaveCostMinor = Math.trunc(reducibleUpkeep / numberServed * getSlaveMinorCosts(V.slaves[V.slaveIndices[ID]])); + cashX(Math.abs(slaveCostMinor), "houseServant", V.slaves[V.slaveIndices[ID]]); + } + }); + V.JobIDArray["be a servant"].forEach(ID => { + if (V.slaves.length > numberServed) { + slaveCostMinor = Math.trunc(reducibleUpkeep / V.slaves.length * getSlaveMinorCosts(V.slaves[V.slaveIndices[ID]])); + cashX(Math.abs(slaveCostMinor), "houseServant", V.slaves[V.slaveIndices[ID]]); + } else { + slaveCostMinor = Math.trunc(reducibleUpkeep / numberServed * getSlaveMinorCosts(V.slaves[V.slaveIndices[ID]])); + cashX(Math.abs(slaveCostMinor), "houseServant", V.slaves[V.slaveIndices[ID]]); + } + }); // nothing to return, cashX already billed. }