diff --git a/GameEngine/Automation.php b/GameEngine/Automation.php
index 2f3450cb..cfd9822f 100755
--- a/GameEngine/Automation.php
+++ b/GameEngine/Automation.php
@@ -1151,27 +1151,16 @@ class Automation {
else
// building/field was damaged, let's calculate the actual damage
{
- //TODO: MUST TO BE FIX This part goes also below 0 if u have a lot of catapults
- // TODO: this whole math seems incorrect, it needs a revision, and potentially a rewrite
- $totallvl = round( sqrt( pow( ( $tblevel + 0.5 ), 2 ) - ( ( !$twoRowsCatapultSetup ? (float) $battlepart[4] : (float) $battlepart[4] / 2 ) * 8 ) ) );
- // sometimes this goes above the actual level, so in that case we just reverse everything
- // and take the buiding down so many levels
- if ($totallvl > $tblevel) {
- $totallvl = $tblevel - ($totallvl - $tblevel);
- }
-
- // don't allow this to go below 0
- if ($totallvl < 0) {
- $totallvl = 0;
- }
+ $totallvl = round($tblevel-((pow(M_E, ($twoRowsCatapultSetup ? ($battlepart[4]/$battlepart[3])/2 : $battlepart[4]/$battlepart[3]))-1) * ($tblevel/2)));
// no damage to the building/field
- if ( $tblevel == $totallvl ) {
+ if ($tblevel == $totallvl) {
$info_cata = " was not damaged.";
- } else // building/field damaged, damage calculations to follow
+ }
+ else // building/field damaged, damage calculations to follow
{
// update $bdo, so we don't have to reselect later
- $bdo[ 'f' . $catapultTarget ] = $totallvl;
+ $bdo['f' . $catapultTarget] = $totallvl;
if ($tblevel == 1 && $totallvl == 0) {
// building was actually destroyed - recalculate population and remove village itself, if needed
@@ -1181,16 +1170,16 @@ class Automation {
$info_cata = " damaged from level " . $tblevel . " to level " . $totallvl . ".";
}
- $buildarray = $GLOBALS[ "bid" . $tbgid ];
+ $buildarray = $GLOBALS["bid" . $tbgid];
// (great) warehouse level was changed
- if ( $tbgid == 10 || $tbgid == 38 ) {
- $database->setMaxStoreForVillage( $data['to'], $buildarray[ $tblevel ]['attri'] );
+ if ($tbgid == 10 || $tbgid == 38) {
+ $database->setMaxStoreForVillage($data['to'], $buildarray[ $tblevel ]['attri']);
}
// (great) granary level was changed
- if ( $tbgid == 11 || $tbgid == 39 ) {
- $database->setMaxCropForVillage( $data['to'], $buildarray[ $tblevel ]['attri'] );
+ if ($tbgid == 11 || $tbgid == 39) {
+ $database->setMaxCropForVillage($data['to'], $buildarray[ $tblevel ]['attri']);
}
}
@@ -1203,10 +1192,10 @@ class Automation {
$bdo['f'.$catapultTarget."t"] = 0;
}
- $database->setVillageLevel( $data['to'], $fieldsToSet, $fieldValuesToSet );
+ $database->setVillageLevel($data['to'], $fieldsToSet, $fieldValuesToSet);
// recalculate population and check if the village shouldn't be destroyed at this point
- $pop = $this->recountPop( $data['to'], false );
+ $pop = $this->recountPop($data['to'], false);
if ($isoasis == 0) {
if($pop==0 && $can_destroy==1){
$village_destroyed = 1;
@@ -2295,7 +2284,7 @@ class Automation {
$info_ram = "".$ram_pic.",Wall was not damaged.";
}else{
- $totallvl = round(sqrt(pow(($walllevel+0.5),2)-($battlepart[8]*8)));
+ $totallvl = round($walllevel-((pow(M_E, $battlepart[8]/$battlepart[7])-1) * ($walllevel/2)));
if($walllevel == $totallvl){
$info_ram = "".$ram_pic.",Wall was not damaged.";
}else{
diff --git a/GameEngine/Battle.php b/GameEngine/Battle.php
index d46c8caf..aec5dde8 100755
--- a/GameEngine/Battle.php
+++ b/GameEngine/Battle.php
@@ -583,7 +583,7 @@ class Battle {
if($catp > 0 && $tblevel != 0) {
$wctp = pow(($rap/$rdp),1.5);
$wctp = ($wctp >= 1)? 1-0.5/$wctp : 0.5*$wctp;
- $wctp *= $catp+($att_ab8/1.5);
+ $wctp *= $catp + (round(200 * pow(1.0205,$att_ab8))/200);
$artowner = $database->getVillageField( $DefenderWref, "owner" );
$bartefact = count($database->getOwnUniqueArtefactInfo2($artowner,1,3,0));
$bartefact1 = count($database->getOwnUniqueArtefactInfo2($DefenderWref,1,1,1));
@@ -626,7 +626,7 @@ class Battle {
if($ram > 0 && $walllevel != 0) {
$wctp = pow(($rap/$rdp),1.5);
$wctp = ($wctp >= 1)? 1-0.5/$wctp : 0.5*$wctp;
- $wctp *= ($ram/2) + ($att_ab7/1.5);
+ $wctp *= ($ram/2) + (round(200 * pow(1.0205,$att_ab7))/200);
$artowner = $database->getVillageField( $DefenderWref, "owner" );
$bartefact = count($database->getOwnUniqueArtefactInfo2($artowner,1,3,0));
$bartefact1 = count($database->getOwnUniqueArtefactInfo2($DefenderWref,1,1,1));