diff --git a/src/Mods/SecExp/buildings/secBarracks.tw b/src/Mods/SecExp/buildings/secBarracks.tw index 6d17d6903ad45bf7681209abb1d2e5d9c21bd693..a1c43ac213130d53f86511329ca29a311a5f5cde 100644 --- a/src/Mods/SecExp/buildings/secBarracks.tw +++ b/src/Mods/SecExp/buildings/secBarracks.tw @@ -243,17 +243,7 @@ Your current maximum number of units is <<print App.SecExp.battle.maxUnits()>> ( <<if $SecExp.units.slaves.squads[_i].troops < $SecExp.units.slaves.squads[_i].maxTroops && $menials > 0>> | <<link "Replenish unit" "secBarracks">> - <<if $menials >= $SecExp.units.slaves.squads[_i].maxTroops - $SecExp.units.slaves.squads[_i].troops>> - <<set $menials -= $SecExp.units.slaves.squads[_i].maxTroops - $SecExp.units.slaves.squads[_i].troops>> - <<set _expLoss = ($SecExp.units.slaves.squads[_i].maxTroops - $SecExp.units.slaves.squads[_i].troops) / $SecExp.units.slaves.squads[_i].troops>> - <<set $SecExp.units.slaves.squads[_i].training -= $SecExp.units.slaves.squads[_i].training * _expLoss>> - <<set $SecExp.units.slaves.squads[_i].troops = $SecExp.units.slaves.squads[_i].maxTroops>> - <<else>> - <<set _expLoss = $menials / $SecExp.units.slaves.squads[_i].troops>> - <<set $SecExp.units.slaves.squads[_i].training -= $SecExp.units.slaves.squads[_i].training * _expLoss>> - <<set $SecExp.units.slaves.squads[_i].troops += $menials>> - <<set $menials = 0>> - <</if>> + <<run App.SecExp.unit.replenish($SecExp.units.slaves.squads[_i], "slaves")>> <</link>> <</if>> <<else>> @@ -315,17 +305,7 @@ Your current maximum number of units is <<print App.SecExp.battle.maxUnits()>> ( <<if $SecExp.units.militia.squads[_i].troops < $SecExp.units.militia.squads[_i].maxTroops && $SecExp.units.militia.free > 0>> | <<link "Replenish unit" "secBarracks">> - <<if $SecExp.units.militia.free >= $SecExp.units.militia.squads[_i].maxTroops - $SecExp.units.militia.squads[_i].troops>> - <<set $SecExp.units.militia.free -= $SecExp.units.militia.squads[_i].maxTroops - $SecExp.units.militia.squads[_i].troops>> - <<set _expLoss = ($SecExp.units.militia.squads[_i].maxTroops - $SecExp.units.militia.squads[_i].troops) / $SecExp.units.militia.squads[_i].troops>> - <<set $SecExp.units.militia.squads[_i].training -= $SecExp.units.militia.squads[_i].training * _expLoss>> - <<set $SecExp.units.militia.squads[_i].troops = $SecExp.units.militia.squads[_i].maxTroops>> - <<else>> - <<set _expLoss = $SecExp.units.militia.free / $SecExp.units.militia.squads[_i].troops>> - <<set $SecExp.units.militia.squads[_i].training -= $SecExp.units.militia.squads[_i].training * _expLoss>> - <<set $SecExp.units.militia.squads[_i].troops += $SecExp.units.militia.free>> - <<set $SecExp.units.militia.free = 0>> - <</if>> + <<run App.SecExp.unit.replenish($SecExp.units.militia.squads[_i], "militia")>> <</link>> <</if>> <<else>> @@ -378,17 +358,7 @@ Your current maximum number of units is <<print App.SecExp.battle.maxUnits()>> ( <<if $SecExp.units.mercs.squads[_i].troops < $SecExp.units.mercs.squads[_i].maxTroops && $SecExp.units.mercs.free > 0>> | <<link "Replenish unit" "secBarracks">> - <<if $SecExp.units.mercs.free >= $SecExp.units.mercs.squads[_i].maxTroops - $SecExp.units.mercs.squads[_i].troops>> - <<set $SecExp.units.mercs.free -= $SecExp.units.mercs.squads[_i].maxTroops - $SecExp.units.mercs.squads[_i].troops>> - <<set _expLoss = ($SecExp.units.mercs.squads[_i].maxTroops - $SecExp.units.mercs.squads[_i].troops) / $SecExp.units.mercs.squads[_i].troops>> - <<set $SecExp.units.mercs.squads[_i].training -= $SecExp.units.mercs.squads[_i].training * _expLoss>> - <<set $SecExp.units.mercs.squads[_i].troops = $SecExp.units.mercs.squads[_i].maxTroops>> - <<else>> - <<set _expLoss = $SecExp.units.mercs.free / $SecExp.units.mercs.squads[_i].troops>> - <<set $SecExp.units.mercs.squads[_i].training -= $SecExp.units.mercs.squads[_i].training * _expLoss>> - <<set $SecExp.units.mercs.squads[_i].troops += $SecExp.units.mercs.free>> - <<set $SecExp.units.mercs.free = 0>> - <</if>> + <<run App.SecExp.unit.replenish($SecExp.units.mercs.squads[_i], "mercs")>> <</link>> <</if>> <<else>> diff --git a/src/Mods/SecExp/js/Unit.js b/src/Mods/SecExp/js/Unit.js index 2c472db10e8596803435a1efd5a9714a3b463245..a31b8c57023a2397112e4a111b1a24e91c4d31af 100644 --- a/src/Mods/SecExp/js/Unit.js +++ b/src/Mods/SecExp/js/Unit.js @@ -8,10 +8,39 @@ App.SecExp.unit = (function() { deployMenu, humanUpgradeList, genID, + replenish, replenishAll, isDeployed, humanSquads }; + + function base(string, operation = 'print', value = 0) { + let target, x = string.toLowerCase(); + + if (x === "slaves") { + target = V.menials; + } else if (x === "militia") { + target = V.SecExp.units.militia.free; + } else if (x === "mercs") { + target = V.SecExp.units.mercs.free; + } + + if (operation === 'print') { + return target; + } else if (operation === 'add') { + target += value; + } else if (operation === 'remove') { + target -= value; + } else if (operation === 'set') { + target = value; + } else if (operation === 'can upgrade') { + if (string === 'bots') { + return V.cash >= 500; + } else { + return target > 0; + } + } + } /** Lists all potential military units as an array. * @@ -367,18 +396,41 @@ App.SecExp.unit = (function() { App.SecExp.unit.humanSquads().map(u => u.ID).reduce((acc, cur) => Math.max(acc, cur), 0) ) + 1; } + + function replenish(squad, type) { + let expLoss; + + if (base(type) >= squad.maxTroops - squad.troops) { + if (type === "slaves") { + V.menials -= (squad.maxTroops - squad.troops); + } else if (type === "militia") { + V.SecExp.units.militia.free -= (squad.maxTroops - squad.troops); + } else if (type === "mercs") { + V.SecExp.units.mercs.free -= (squad.maxTroops - squad.troops); + } + expLoss = (squad.maxTroops - squad.troops) / squad.troops; + squad.troops = squad.maxTroops; + } else { + if (type === "slaves") { + expLoss = V.menials / squad.troops; + squad.troops += V.menials; + V.menials = 0; + } else if (type === "militia") { + expLoss = V.SecExp.units.militia.free / squad.troops; + squad.troops += V.SecExp.units.militia.free; + V.SecExp.units.militia.free = 0; + } else if (type === "mercs") { + expLoss = V.SecExp.units.mercs.free / squad.troops; + squad.troops += V.SecExp.units.mercs.free; + V.SecExp.units.mercs.free = 0; + } + } + squad.training -= squad.training * expLoss; + } function replenishAll() { let el = document.createElement("div"); - let woundedUnit = [], expLoss; - - function unitsFree(x) { - if (x === 'slaves') { - return V.menials; - } else { - return V.SecExp.units[x].free; - } - } + let woundedUnit = []; if (V.SecExp.units.bots.troops < V.SecExp.units.bots.maxTroops && V.cash >= 500) { woundedUnit.push('bots'); @@ -386,7 +438,7 @@ App.SecExp.unit = (function() { for (const unit of list().slice(1)) { for (const squad of V.SecExp.units[unit].squads) { - if (!woundedUnit.contains(unit) && squad.troops < squad.maxTroops && unitsFree(unit) > 0) { + if (!woundedUnit.contains(unit) && squad.troops < squad.maxTroops && base(unit, 'can upgrade')) { woundedUnit.push(unit); } } @@ -399,20 +451,8 @@ App.SecExp.unit = (function() { cashX(-((V.SecExp.units.bots.maxTroops - V.SecExp.units.bots.troops) * 500), "securityExpansion"); V.SecExp.units.bots.troops = V.SecExp.units.bots.maxTroops; } else { - let freeUnits = unitsFree(unit); for (const squad of V.SecExp.units[unit].squads) { - if (squad.troops < squad.maxTroops && freeUnits > 0) { - if (freeUnits >= squad.maxTroops - squad.troops) { - freeUnits -= squad.maxTroops - squad.troops; - expLoss = (squad.maxTroops - squad.troops) / squad.troops; - squad.troops = squad.maxTroops; - } else { - expLoss = freeUnits / squad.troops; - squad.troops += freeUnits; - freeUnits = 0; - } - squad.training -= squad.training * expLoss; - } + replenish(squad, unit); } } } diff --git a/src/Mods/SecExp/js/secExp.js b/src/Mods/SecExp/js/secExp.js index 23992d4263c48e67f549689fdcb2ae178ebd8f6a..c363e0f632f46d7ffadd7fce5f4ba50646be4035 100644 --- a/src/Mods/SecExp/js/secExp.js +++ b/src/Mods/SecExp/js/secExp.js @@ -160,6 +160,10 @@ App.SecExp.generator = (function() { equip = sfActive ? either(3, 4) : either(2, 3, 4); } } + + if (V.SecExp.settings.difficulty > 1) { + troops *= V.SecExp.settings.difficulty; + } shared(); V.SecExp.war.attacker.troops = troops;