mirror of
https://github.com/Shadowss/TravianZ.git
synced 2026-08-15 15:51:01 +00:00
+59
-56
@@ -1228,6 +1228,63 @@ class Automation {
|
|||||||
$database->getABTech($vilIDs);
|
$database->getABTech($vilIDs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Distribute the battle bounty across the resources actually available in
|
||||||
|
* the target (after cranny protection) and return how much of each is taken.
|
||||||
|
* Pure behaviour-preserving extraction (refactor for issue #155).
|
||||||
|
*
|
||||||
|
* @param array $available [wood, clay, iron, crop] lootable amounts.
|
||||||
|
* @param int $bounty Total carry capacity / bounty from the battle.
|
||||||
|
* @return array [wood, clay, iron, crop] amounts actually stolen.
|
||||||
|
*/
|
||||||
|
private function applyBounty(array $available, $bounty) {
|
||||||
|
$avtotal = $available;
|
||||||
|
$steal = [0, 0, 0, 0];
|
||||||
|
$btotal = $bounty;
|
||||||
|
$bmod = 0;
|
||||||
|
|
||||||
|
for ($i = 0; $i < 5; $i++) {
|
||||||
|
for ($j = 0; $j < 4; $j++) {
|
||||||
|
if (isset($avtotal[$j])) {
|
||||||
|
if ($avtotal[$j] < 1) unset($avtotal[$j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// No resources left to take
|
||||||
|
if (empty($avtotal) || ($btotal < 1 && $bmod < 1)) break;
|
||||||
|
|
||||||
|
if ($btotal < 1) {
|
||||||
|
while ($bmod) {
|
||||||
|
// random select
|
||||||
|
$rs = array_rand($avtotal);
|
||||||
|
if (isset($avtotal[$rs])) {
|
||||||
|
$avtotal[$rs] -= 1;
|
||||||
|
$steal[$rs] += 1;
|
||||||
|
$bmod -= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// handle unbalanced amounts.
|
||||||
|
$btotal += $bmod;
|
||||||
|
$bmod = $btotal % count($avtotal);
|
||||||
|
$btotal -= $bmod;
|
||||||
|
$bsplit = $btotal / count($avtotal);
|
||||||
|
|
||||||
|
$max_steal = (min($avtotal) < $bsplit) ? min($avtotal) : $bsplit;
|
||||||
|
|
||||||
|
for ($j = 0; $j < 4; $j++) {
|
||||||
|
if (isset($avtotal[$j])) {
|
||||||
|
$avtotal[$j] -= $max_steal;
|
||||||
|
$steal[$j] += $max_steal;
|
||||||
|
$btotal -= $max_steal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $steal;
|
||||||
|
}
|
||||||
|
|
||||||
private function sendunitsComplete() {
|
private function sendunitsComplete() {
|
||||||
// PROCESARE ATACURI COMPLETE - functie critica, pastrata 100% compatibila
|
// PROCESARE ATACURI COMPLETE - functie critica, pastrata 100% compatibila
|
||||||
// Aceasta functie gestioneaza toate atacurile care ajung la destinatie
|
// Aceasta functie gestioneaza toate atacurile care ajung la destinatie
|
||||||
@@ -2189,62 +2246,8 @@ class Automation {
|
|||||||
$avwood = ($avwood < 0) ? 0 : $avwood;
|
$avwood = ($avwood < 0) ? 0 : $avwood;
|
||||||
$avcrop = ($avcrop < 0) ? 0 : $avcrop;
|
$avcrop = ($avcrop < 0) ? 0 : $avcrop;
|
||||||
|
|
||||||
$avtotal = [$avwood, $avclay, $aviron, $avcrop];
|
// bounty distributed across the resources available after cranny protection (extracted to applyBounty() [#155])
|
||||||
$av = $avtotal;
|
$steal = $this->applyBounty([$avwood, $avclay, $aviron, $avcrop], $battlepart['bounty']);
|
||||||
|
|
||||||
// resources (wood,clay,iron,crop)
|
|
||||||
$steal = [0, 0, 0, 0];
|
|
||||||
|
|
||||||
//bounty variables
|
|
||||||
$btotal = $battlepart['bounty'];
|
|
||||||
$bmod = 0;
|
|
||||||
|
|
||||||
for($i = 0; $i < 5; $i++)
|
|
||||||
{
|
|
||||||
for($j = 0; $j < 4; $j++)
|
|
||||||
{
|
|
||||||
if(isset($avtotal[$j]))
|
|
||||||
{
|
|
||||||
if($avtotal[$j] < 1) unset($avtotal[$j]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//No resources left to take
|
|
||||||
if(empty($avtotal) || ($btotal < 1 && $bmod < 1)) break;
|
|
||||||
|
|
||||||
if($btotal < 1)
|
|
||||||
{
|
|
||||||
while($bmod)
|
|
||||||
{
|
|
||||||
//random select
|
|
||||||
$rs = array_rand($avtotal);
|
|
||||||
if(isset($avtotal[$rs]))
|
|
||||||
{
|
|
||||||
$avtotal[$rs] -= 1;
|
|
||||||
$steal[$rs] += 1;
|
|
||||||
$bmod -= 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// handle unbalanced amounts.
|
|
||||||
$btotal += $bmod;
|
|
||||||
$bmod = $btotal % count($avtotal);
|
|
||||||
$btotal -= $bmod;
|
|
||||||
$bsplit = $btotal / count($avtotal);
|
|
||||||
|
|
||||||
$max_steal = (min($avtotal) < $bsplit) ? min($avtotal) : $bsplit;
|
|
||||||
|
|
||||||
for($j = 0; $j < 4; $j++)
|
|
||||||
{
|
|
||||||
if(isset($avtotal[$j]))
|
|
||||||
{
|
|
||||||
$avtotal[$j] -= $max_steal;
|
|
||||||
$steal[$j] += $max_steal;
|
|
||||||
$btotal -= $max_steal;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//chiefing village — extracted to handleConquest() [#155]
|
//chiefing village — extracted to handleConquest() [#155]
|
||||||
if (!isset($village_destroyed)) $village_destroyed = 0;
|
if (!isset($village_destroyed)) $village_destroyed = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user