diff --git a/GameEngine/Alliance.php b/GameEngine/Alliance.php index 750f51fb..cd652bd1 100755 --- a/GameEngine/Alliance.php +++ b/GameEngine/Alliance.php @@ -109,10 +109,10 @@ class Alliance { $hasSwitchedToAdmin = isset($datas['admin']) && !empty($datas['admin']) && $datas['admin'] == "switch_admin"; return (/*$database->CheckEditRes($datas['aid']) == 1 && */($datas['alliance'] > 0 && (($database->isAllianceOwner($session->uid) == $datas['alliance'] || - ($datas['forum_perm'] == 1 && $session->alliance == $datas['alliance'])) && - ($mode || $hasSwitchedToAdmin)) || + ($datas['forum_perm'] == 1 && $session->alliance == $datas['alliance']))) || ($datas['owner'] == $session->uid && $session->access != ADMIN)) || - ($session->access == ADMIN && ($mode || $hasSwitchedToAdmin))); + ($session->access == ADMIN)) && + ($mode || $hasSwitchedToAdmin); } /** diff --git a/GameEngine/Automation.php b/GameEngine/Automation.php index 54f78cd4..a114f014 100755 --- a/GameEngine/Automation.php +++ b/GameEngine/Automation.php @@ -810,7 +810,13 @@ class Automation { // currently targeted building/field ID in the database (fdata, the fID field, e.g. f1, f2, f3...) $tbid = (int) $catapultTarget; - $newLevel = $battle->CalculateNewBuildingLevel($battlepart['catapults']['moral'], $battlepart['catapults']['updown'], $tblevel, $battlepart['catapults']['realAttackers'] / ($twoRowsCatapultSetup ? 2 : 1), $data['t8'] / ($twoRowsCatapultSetup ? 2 : 1)); + $newLevel = $battle->CalculateNewBuildingLevel($battlepart['catapults']['moral'], + $battlepart['catapults']['upgrades'], + $battlepart['catapults']['downgrades'], + $tblevel, + $battlepart['catapults']['realAttackers'] / ($twoRowsCatapultSetup ? 2 : 1), + $data['t8'] / ($twoRowsCatapultSetup ? 2 : 1), + ($catapultTarget == 40 ? 1 : $battlepart['catapults']['strongerBuildings'])); //If that building was present in the building queue, we have to modify his level or remove it $database->modifyBData($data['to'], $tbid, [$newLevel, $tblevel], $tribe); @@ -1157,12 +1163,11 @@ class Automation { //rams attack if (($data['t7']) > 0 && $type == 3) { $basearraywall = $to; - if (($walllevel = $database->getFieldLevel($basearraywall['wref'],40, false)) > 0){ + if (($walllevel = $database->getFieldLevel($basearraywall['wref'], 40, false)) > 0){ $wallgid = $database->getFieldLevel($basearraywall['wref'],"40t"); $wallid = 40; $w = 4; } - else $empty = 1; } $tblevel = 1; @@ -1226,7 +1231,7 @@ class Automation { $Attacker['uhero'] = $dataarray[$data_num]['t11']; $hero_pic = "hero"; //need to set these variables. - $def_wall = 1; + $def_wall = 0; $att_tribe = $owntribe; $def_tribe = $targettribe; $residence = 0; @@ -1240,7 +1245,7 @@ class Automation { $att_ab1 = $att_ab2 = $att_ab3 = $att_ab4 = $att_ab5 = $att_ab6 = $att_ab7 = $att_ab8 = 0; $def_ab[31] = $def_ab[32] = $def_ab[33] = $def_ab[34] = $def_ab[35] = $def_ab[36] = $def_ab[37] = $def_ab[38] = 0; - $empty = 1; + $walllevel = 0; $tblevel = 0; $stonemason = 0; } @@ -1379,12 +1384,203 @@ class Automation { $battlepart = $battle->calculateBattle($Attacker, $Defender, $def_wall, $att_tribe, $def_tribe, $residence, $attpop, $defpop, $type, $def_ab, $att_ab1, $att_ab2, $att_ab3, $att_ab4, $att_ab5, $att_ab6, $att_ab7, $att_ab8, $tblevel, $stonemason, $walllevel, 0, 0, 0, $AttackerID, $DefenderID, $AttackerWref, $DefenderWref, $conqureby, $enforcementarray); + //Data for when troops return. + //catapults look :D + $info_cat = $info_chief = $info_ram = $info_hero = ","; + + //check to see if can destroy village + if (count($varray) > 1 && !$database->villageHasArtefact($DefenderWref)) { + $can_destroy = 1; + } + else $can_destroy = 0; + + if($isoasis == 0){ + if ($type == 3){ + if (($data['t7'] - $traped7) > 0){ + if($walllevel > 0){ + $newLevel = $battle->CalculateNewBuildingLevel($battlepart['rams']['moral'], + $battlepart['rams']['upgrades'], + $battlepart['rams']['downgrades'], + $walllevel, + $battlepart['rams']['realAttackers'], + $data['t7'], + $battlepart['rams']['strongerBuildings']); + + if ($newLevel == 0){ + $info_ram = "".$ram_pic.",Wall destroyed."; + $database->setVillageLevel($data['to'], ["f".$wallid, "f".$wallid."t"], [0, 0]); + $pop = $this->recountPop($data['to']); + }elseif ($newLevel == $walllevel){ + $info_ram = "".$ram_pic.",Wall was not damaged."; + }else{ + $info_ram = "".$ram_pic.",Wall damaged from level ".$walllevel." to level ".$newLevel."."; + $database->setVillageLevel($data['to'],"f".$wallid."",$newLevel); + } + + //If the wall got damaged/destroyed during the attack + //we need to recalculate the whole battle + if($newLevel != $walllevel){ + $battlepart = $battle->calculateBattle($Attacker, $Defender, $newLevel, $att_tribe, $def_tribe, $residence, $attpop, $defpop, $type, $def_ab, $att_ab1, $att_ab2, $att_ab3, $att_ab4, $att_ab5, $att_ab6, $att_ab7, $att_ab8, $tblevel, $stonemason, $newLevel, 0, 0, 0, $AttackerID, $DefenderID, $AttackerWref, $DefenderWref, $conqureby, $enforcementarray); + } + } + else $info_ram = "".$ram_pic.",There is no wall to destroy."; + } + + if (($data['t8'] - $traped8) > 0) + { + $pop = $this->recountPop($data['to']); + + // village has been destroyed + if ($pop <= 0) { + if ($can_destroy == 1) $info_cat = "".$catp_pic.", Village already destroyed."; + else $info_cat = "".$catp_pic.", Village can\'t be destroyed."; + } + else + { + // village stands, let's do the damage + /** + * FIRST CATAPULTS ROW + */ + + $basearray = $data['to']; + $bdo = $database->getResourceLevel($basearray, false); + $catapultTarget = $data['ctar1']; + $catapultTarget2 = (isset($data['ctar2']) ? $data['ctar2'] : 0); + + $catapults1TargetRandom = ($catapultTarget == 0); + $catapults2WillNotShoot = ($catapultTarget2 == 0); + $catapults2TargetRandom = ($catapults2WillNotShoot || $catapultTarget2 == 99); + + // we're manually targetting 1st and/or 2nd row of catapults + if (!$catapults1TargetRandom) + { + $_catapultsTarget1Levels = []; + $__catapultsTarget1AltTargets = []; + + // calculate targets for 1st rows of catapults + $j = 0; + for ($i = 1; $i <= 41; $i++) + { + if ($i == 41) $i = 99; + + // 1st row of catapults pre-selected target calculations, if needed + if (!$catapults1TargetRandom && $bdo['f'.$i.'t'] == $catapultTarget && $bdo['f'.$i] > 0 && $i != 40) + { + $j++; + $_catapultsTarget1Levels[$j]=$bdo['f'.$i]; + $__catapultsTarget1AltTargets[$j]=$i; + } + } + + // if we couldn't find a suitable target for 1st row of catapults, + // select a random target instead + if (!$catapults1TargetRandom) { + if ( count( $_catapultsTarget1Levels ) > 0 ) { + if ( max( $_catapultsTarget1Levels ) <= 0 ) { + $catapultTarget = 0; + } else { + $catapultTarget = $__catapultsTarget1AltTargets[rand( 1, $j )]; + } + } else { + $catapultTarget = 0; + $catapults1TargetRandom = true; + } + } + } + + // 1st row of catapults set to target randomly + if ($catapults1TargetRandom) + { + $list = []; + for ($i = 1; $i <= 41; $i++) + { + if ($i == 41) $i = 99; + if ($bdo['f'.$i] > 0 && $i != 40) $list[] = $i; + } + $catapultTarget = $list[rand(0, count($list) - 1)]; + } + + /** + * resolve 1st row of catapults + */ + $village_destroyed = 0; + $this->resolveCatapultsDestruction($bdo, $battlepart, $info_cat, $data, $catapultTarget, !$catapults2WillNotShoot, false, $catp_pic, $can_destroy, $isoasis, $village_destroyed, $targettribe); + + /** + * SECOND CATAPULTS ROW + */ + + // we're manually targetting 2nd row of catapults + if (!$catapults2TargetRandom) + { + $_catapultsTarget2Levels = []; + $__catapultsTarget2AltTargets = []; + + // calculate targets for 2nd rows of catapults + $j = 0; + for ($i = 1; $i <= 41; $i++) + { + if ($i == 41) $i = 99; + + // 2nd row of catapults pre-selected target calculations, if needed + if (!$catapults2TargetRandom && !$catapults2WillNotShoot && $bdo['f'.$i.'t'] == $catapultTarget2 && $bdo['f'.$i] > 0 && $i != 40) + { + $j++; + $_catapultsTarget2Levels[$j] = $bdo['f'.$i]; + $__catapultsTarget2AltTargets[$j] = $i; + } + } + + // if we couldn't find a suitable target for 2nd row of catapults, + // select a random target instead + if (!$catapults2TargetRandom) { + if (count($_catapultsTarget2Levels) > 0 ) { + if (max($_catapultsTarget2Levels) <= 0 ) { + $catapultTarget2 = 99; + } + else $catapultTarget2 = $__catapultsTarget2AltTargets[rand( 1, $j )]; + } else { + $catapultTarget2 = 99; + $catapults2TargetRandom = true; + } + } + } + + // 2nd row of catapults set to target randomly + if ($catapults2TargetRandom && !$catapults2WillNotShoot) + { + $list = []; + for ($i = 1; $i <= 41; $i++) + { + if ($i == 41) $i = 99; + if ($bdo['f'.$i] > 0 && $i != 40) $list[] = $i; + } + $catapultTarget2 = $list[ rand(0, count($list) - 1) ]; + } + + /** + * resolve 2nd row of catapults + */ + if (!$catapults2WillNotShoot) { + $this->resolveCatapultsDestruction($bdo, $battlepart, $info_cat, $data, $catapultTarget2, true, true, $catp_pic, $can_destroy, $isoasis, $village_destroyed, $targettribe); + } + + // clear resource levels cache, since we might have destroyed buildings/fields by now + call_user_func(get_class($database).'::clearResourseLevelsCache'); + } + } + } elseif (($data['t7'] - $traped7) > 0) { + $info_ram = "".$ram_pic.",Hint: The ram does not work during a raid."; + } + } + else $can_destroy = 0; + //units attack string for battleraport $unitssend_att = ''.$data['t1'].','.$data['t2'].','.$data['t3'].','.$data['t4'].','.$data['t5'].','.$data['t6'].','.$data['t7'].','.$data['t8'].','.$data['t9'].','.$data['t10'].''; $herosend_att = $data['t11']; - if ($herosend_att > 0) $unitssend_att_check=$unitssend_att.','.$data['t11']; - else $unitssend_att_check=$unitssend_att; + if ($herosend_att > 0) $unitssend_att_check = $unitssend_att.','.$data['t11']; + else $unitssend_att_check = $unitssend_att; //Resetting the enforcement arrays for($i = 1; $i <= 50; $i++) { @@ -1643,7 +1839,7 @@ class Automation { $troopsdead6 = $dead6; $troopsdead7 = $dead7; $troopsdead8 = $dead8; - $troopsdead9 = $dead9+1; + $troopsdead9 = $dead9 + 1; $troopsdead10 = $dead10; $troopsdead11 = $dead11; @@ -1830,186 +2026,7 @@ class Automation { $btotal -= $max_steal; } } - } - - // Data for when troops return. - //catapults look :D - $info_cat = $info_chief = $info_ram = $info_hero = ","; - - //check to see if can destroy village - if (count($varray) > 1 && !$database->villageHasArtefact($DefenderWref)) { - $can_destroy = 1; - } - else $can_destroy = 0; - - if($isoasis == 0) - { - if ($type == 3) - { - if (($data['t7'] - $traped7) > 0){ - $newLevel = $battle->CalculateNewBuildingLevel($battlepart['rams']['moral'], $battlepart['rams']['updown'], $walllevel, $battlepart['rams']['realAttackers'], $data['t7']); - if (isset($empty)){ - $info_ram = "".$ram_pic.",There is no wall to destroy."; - } elseif ($newLevel == 0){ - $info_ram = "".$ram_pic.",Wall destroyed."; - $database->setVillageLevel($data['to'], ["f".$wallid, "f".$wallid."t"], [0, 0]); - $pop = $this->recountPop($data['to']); - }elseif ($newLevel == $walllevel){ - $info_ram = "".$ram_pic.",Wall was not damaged."; - }else{ - $info_ram = "".$ram_pic.",Wall damaged from level ".$walllevel." to level ".$newLevel."."; - $database->setVillageLevel($data['to'],"f".$wallid."",$newLevel); - } - } - - if (($data['t8'] - $traped8) > 0) - { - $pop = $this->recountPop($data['to']); - - // village has been destroyed - if ($pop <= 0) { - if ($can_destroy == 1) $info_cat = "".$catp_pic.", Village already destroyed."; - else $info_cat = "".$catp_pic.", Village can\'t be destroyed."; - } - else - { - // village stands, let's do the damage - /** - * FIRST CATAPULTS ROW - */ - - $basearray = $data['to']; - $bdo = $database->getResourceLevel($basearray, false); - $catapultTarget = $data['ctar1']; - $catapultTarget2 = (isset($data['ctar2']) ? $data['ctar2'] : 0); - - $catapults1TargetRandom = ($catapultTarget == 0); - $catapults2WillNotShoot = ($catapultTarget2 == 0); - $catapults2TargetRandom = ($catapults2WillNotShoot || $catapultTarget2 == 99); - - // we're manually targetting 1st and/or 2nd row of catapults - if (!$catapults1TargetRandom) - { - $_catapultsTarget1Levels = []; - $__catapultsTarget1AltTargets = []; - - // calculate targets for 1st rows of catapults - $j = 0; - for ($i = 1; $i <= 41; $i++) - { - if ($i == 41) $i = 99; - - // 1st row of catapults pre-selected target calculations, if needed - if (!$catapults1TargetRandom && $bdo['f'.$i.'t'] == $catapultTarget && $bdo['f'.$i] > 0 && $i != 40) - { - $j++; - $_catapultsTarget1Levels[$j]=$bdo['f'.$i]; - $__catapultsTarget1AltTargets[$j]=$i; - } - } - - // if we couldn't find a suitable target for 1st row of catapults, - // select a random target instead - if (!$catapults1TargetRandom) { - if ( count( $_catapultsTarget1Levels ) > 0 ) { - if ( max( $_catapultsTarget1Levels ) <= 0 ) { - $catapultTarget = 0; - } else { - $catapultTarget = $__catapultsTarget1AltTargets[rand( 1, $j )]; - } - } else { - $catapultTarget = 0; - $catapults1TargetRandom = true; - } - } - } - - // 1st row of catapults set to target randomly - if ($catapults1TargetRandom) - { - $list = []; - for ($i = 1; $i <= 41; $i++) - { - if ($i == 41) $i = 99; - if ($bdo['f'.$i] > 0 && $i != 40) $list[] = $i; - } - $catapultTarget = $list[rand(0, count($list) - 1)]; - } - - /** - * resolve 1st row of catapults - */ - $village_destroyed = 0; - $this->resolveCatapultsDestruction($bdo, $battlepart, $info_cat, $data, $catapultTarget, !$catapults2WillNotShoot, false, $catp_pic, $can_destroy, $isoasis, $village_destroyed, $targettribe); - - /** - * SECOND CATAPULTS ROW - */ - - // we're manually targetting 2nd row of catapults - if (!$catapults2TargetRandom) - { - $_catapultsTarget2Levels = []; - $__catapultsTarget2AltTargets = []; - - // calculate targets for 2nd rows of catapults - $j = 0; - for ($i = 1; $i <= 41; $i++) - { - if ($i == 41) $i = 99; - - // 2nd row of catapults pre-selected target calculations, if needed - if (!$catapults2TargetRandom && !$catapults2WillNotShoot && $bdo['f'.$i.'t'] == $catapultTarget2 && $bdo['f'.$i] > 0 && $i != 40) - { - $j++; - $_catapultsTarget2Levels[$j] = $bdo['f'.$i]; - $__catapultsTarget2AltTargets[$j] = $i; - } - } - - // if we couldn't find a suitable target for 2nd row of catapults, - // select a random target instead - if (!$catapults2TargetRandom) { - if (count($_catapultsTarget2Levels) > 0 ) { - if (max($_catapultsTarget2Levels) <= 0 ) { - $catapultTarget2 = 99; - } - else $catapultTarget2 = $__catapultsTarget2AltTargets[rand( 1, $j )]; - } else { - $catapultTarget2 = 99; - $catapults2TargetRandom = true; - } - } - } - - // 2nd row of catapults set to target randomly - if ($catapults2TargetRandom && !$catapults2WillNotShoot) - { - $list = []; - for ($i = 1; $i <= 41; $i++) - { - if ($i == 41) $i = 99; - if ($bdo['f'.$i] > 0 && $i != 40) $list[] = $i; - } - $catapultTarget2 = $list[ rand(0, count($list) - 1) ]; - } - - /** - * resolve 2nd row of catapults - */ - if (!$catapults2WillNotShoot) { - $this->resolveCatapultsDestruction($bdo, $battlepart, $info_cat, $data, $catapultTarget2, true, true, $catp_pic, $can_destroy, $isoasis, $village_destroyed, $targettribe); - } - - // clear resource levels cache, since we might have destroyed buildings/fields by now - call_user_func(get_class($database).'::clearResourseLevelsCache'); - } - } - } elseif (($data['t7'] - $traped7) > 0) { - $info_ram = "".$ram_pic.",Hint: The ram does not work during a raid."; - } - } - else $can_destroy = 0; + } //chiefing village //there are senators diff --git a/GameEngine/Battle.php b/GameEngine/Battle.php index a21b01b0..44df9cd4 100755 --- a/GameEngine/Battle.php +++ b/GameEngine/Battle.php @@ -23,8 +23,9 @@ class Battle { public function procSim($post) { global $form; + // receive form and process - if(isset($post['a1_v']) && (isset($post['a2_v1']) || isset($post['a2_v2']) || isset($post['a2_v3']) || isset($post['a2_v4']))) { + if(isset($post['a1_v']) && (isset($post['a2_v1']) || isset($post['a2_v2']) || isset($post['a2_v3']) || isset($post['a2_v4']))){ $_POST['mytribe'] = $post['a1_v']; $target = []; @@ -33,59 +34,54 @@ class Battle { if(isset($post['a2_v3'])) array_push($target, 3); if(isset($post['a2_v4'])) array_push($target, 4); if(isset($post['a2_v5'])) array_push($target, 5); - + $_POST['target'] = $target; - if(isset($post['h_off_bonus'])) { - if (intval($post['h_off_bonus']) > 20) $post['h_off_bonus'] = 20; + if(isset($post['h_off_bonus'])){ + if(intval($post['h_off_bonus']) > 20) $post['h_off_bonus'] = 20; } - else $post['h_off_bonus']=0; - - if(isset($post['h_def_bonus'])) { - if (intval($post['h_def_bonus']) > 20) $post['h_def_bonus'] = 20; + else $post['h_off_bonus'] = 0; + + if(isset($post['h_def_bonus'])){ + if(intval($post['h_def_bonus']) > 20) $post['h_def_bonus'] = 20; } - else $post['h_def_bonus']=0; - - if(isset($post['a1_1'])) { - $sum = $sum2 = $post['walllevel'] = 0; - for($i=1;$i<=10;$i++) { - $sum += (!empty($post['a1_'.$i]) ? $post['a1_'.$i] : 0); + else $post['h_def_bonus'] = 0; + + $sum = 0; + for($i = 1; $i <= 10; $i++) $sum += (!empty($post['a1_'.$i]) ? $post['a1_'.$i] : 0); + + if($sum > 0){ + $post['palast'] = intval($post['palast']); + if($post['palast'] > 20) $post['palast'] = 20; + + for($i = 1; $i <= 5; $i++){ + if(isset($post['wall'.$i])){ + $post['wall'.$i] = intval($post['wall'.$i]); + if($post['wall'.$i] > 20) $post['wall'.$i] = 20; + elseif($post['wall'.$i] < 0) $post['wall'.$i] = 0; + $post['walllevel'] = $post['wall'.$i]; + } } - if($sum > 0) { - $post['palast'] = intval($post['palast']); - if($post['palast'] > 20) $post['palast'] = 20; - if(isset($post['wall1'])) { - $post['wall1'] = intval($post['wall1']); - if ($post['wall1'] > 20) $post['wall1']=20; - if ($post['walllevel']==0) $post['walllevel']=$post['wall1']; - } - if(isset($post['wall2'])) { - $post['wall2'] = intval($post['wall2']); - if ($post['wall2'] > 20) $post['wall2']=20; - if ($post['walllevel']==0) $post['walllevel']=$post['wall2']; - } - if(isset($post['wall3'])) { - $post['wall3'] = intval($post['wall3']); - if ($post['wall3'] > 20) $post['wall3']=20; - if ($post['walllevel']==0) $post['walllevel']=$post['wall3']; - } - if(isset($post['wall4'])) { - $post['wall4'] = intval($post['wall4']); - if ($post['wall4'] > 20) $post['wall4']=20; - if ($post['walllevel']==0) $post['walllevel']=$post['wall4']; - } - if(isset($post['wall5'])) { - $post['wall5'] = intval($post['wall5']); - if ($post['wall5'] > 20) $post['wall5']=20; - if ($post['walllevel']==0) $post['walllevel']=$post['wall5']; - } - $post['tribe'] = $target[0]; + $post['tribe'] = $target[0]; + $_POST['result'] = $this->simulate($post); + $newWallLevel = $_POST['result'][7]; + $oldWallLevel = $_POST['result'][8]; + + //If the wall level is reduce, we have to re-do the whole battle + if($newWallLevel != $oldWallLevel){ + $post['walllevel'] = $newWallLevel; $_POST['result'] = $this->simulate($post); - $form->valuearray = $post; + + //Reset the datas + $_POST['result'][7] = $newWallLevel; + $_POST['result'][8] = $post['walllevel'] = $oldWallLevel; } + + $form->valuearray = $post; } } } + private function getBattleHero($uid) { global $database; $heroarray = $database->getHero($uid); @@ -551,19 +547,21 @@ class Battle { $wctp *= ($catp + $upgrades); //catapults downgrades - $downgrades = ($stonemason > 0 ? $bid34[$stonemason]['attri'] / 100 : 1) / $strongerbuildings; + $downgrades = ($stonemason > 0 ? $bid34[$stonemason]['attri'] / 100 : 1); //catapults moral $catpMoral = pow($attpop / ($defpop > 0 ? $defpop : 1) , 0.3); // New level of the building (only for warsim.php) - $result[3] = $this->calculateNewBuildingLevel($catpMoral, $upgrades / $downgrades, $tblevel, $wctp, $catp); + $result[3] = $this->calculateNewBuildingLevel($catpMoral, $upgrades, $downgrades, $tblevel, $wctp, $catp, $strongerbuildings); $result[4] = $tblevel; // Results for Automation.php $result['catapults']['moral'] = $catpMoral; - $result['catapults']['updown'] = $upgrades / $downgrades; + $result['catapults']['upgrades'] = $upgrades; + $result['catapults']['downgrades'] = $downgrades; $result['catapults']['realAttackers'] = $wctp; + $result['catapults']['strongerBuildings'] = $strongerbuildings; } if($ram > 0 && $walllevel != 0) { @@ -574,16 +572,18 @@ class Battle { $wctp = ($wctp >= 1) ? 1 - 0.5 / $wctp : 0.5 * $wctp; $wctp *= ($ram) + $upgrades; - $downgrades = ($stonemason > 0 ? $bid34[$stonemason]['attri'] / 100 : 1) / $strongerbuildings; + $downgrades = ($stonemason > 0 ? $bid34[$stonemason]['attri'] / 100 : 1); // New level of the building (only for warsim.php) - $result[7] = $this->calculateNewBuildingLevel(1, $upgrades / $downgrades, $walllevel, $wctp, $ram); + $result[7] = $this->calculateNewBuildingLevel(1, $upgrades, $downgrades, $walllevel, $wctp, $ram, $strongerbuildings * 5); $result[8] = $walllevel; // Results for Automation.php $result['rams']['moral'] = 1; - $result['rams']['updown'] = $upgrades / $downgrades; + $result['rams']['upgrades'] = $upgrades; + $result['rams']['downgrades'] = $downgrades; $result['rams']['realAttackers'] = $wctp; + $result['rams']['strongerBuildings'] = $strongerbuildings * 5; } $result[6] = pow($rap / ($rdp * $moralbonus > 0 ? $rdp * $moralbonus : 1), $Mfactor); @@ -738,23 +738,25 @@ class Battle { * Calculates the new building level, after catapults/rams have damaged it * * @param float $moral The catapults/rams battle moral, 1 < moral < 3 => (Total attacker points / Total defender points)^3 - * @param int $upDown (Upgrades / Downgrades) ratio of catapults/rams made in the Blacksmith + * @param int $upgrades Upgrades of catapults/rams made in the blacksmith + * @param int $downgrades Defender bonuses, such as the stonemason's lodge * @param int $actualLevel The level of the building before the battle * @param int $realAttackers Effective catapults/rams involved in the building damage * @param int $totalAttackers Total catapults/rams sent in the attack + * @param int $strongerBuildings Indicates the defender artifacts bonus against catapults * @return int Returns the new level of the damaged building */ - public function CalculateNewBuildingLevel($moral, $upDown, $actualLevel, $realAttackers, $totalAttackers) + public function CalculateNewBuildingLevel($moral, $upgrades, $downgrades, $actualLevel, $realAttackers, $totalAttackers, $strongerBuildings) { if($moral < 1) $moral = 1; elseif($moral > 3) $moral = 3; - $needMax = round($this->CalculateNeededCatapults($moral, $upDown, $actualLevel)); + $needMax = round($this->CalculateNeededCatapults($moral, $upgrades / ($downgrades * $strongerBuildings), $actualLevel)); if($needMax <= $realAttackers) return 0; for($i = $actualLevel - 1; $i >= 1; $i--) { - $need = $this->CalculateNeededCatapults($moral, $upDown, $i); + $need = $this->CalculateNeededCatapults($moral, $upgrades / ($downgrades * $strongerBuildings), $i); if(min($realAttackers, $totalAttackers) / ($needMax - $need) <= 1) return ++$i; } @@ -765,7 +767,7 @@ class Battle { * Calculate the needed catapults/rams to completely destroy a building/wall * * @param float $moral The catapults/rams battle moral - * @param int $upDown (Upgrades / Downgrades) ratio of catapults/rams made in the Blacksmith + * @param int $upDown (Upgrades / Downgrades / Stronger buildings) ratio of catapults/rams * @param int $actualLevel The level of the building before the battle * @return float Returns the needed catapults/rams to destroy a building/wall */ diff --git a/Templates/Alliance/Forum/forum_4.tpl b/Templates/Alliance/Forum/forum_4.tpl index 14b7f4f9..b1b71216 100644 --- a/Templates/Alliance/Forum/forum_4.tpl +++ b/Templates/Alliance/Forum/forum_4.tpl @@ -11,11 +11,13 @@ if($session->access == BANNED){ } $cat_id = $_GET['fid']; -$forumData = reset($database->ForumCatEdit($cat_id)); -$CatName = stripslashes($forumData['forum_name']); +$forumInfo = $database->ForumCatEdit($cat_id); //Check if we're viewing a valid forum -if(empty($CatName)) $alliance->redirect($_GET); +if(empty($forumInfo)) $alliance->redirect($_GET); + +$forumData = reset($forumInfo); +$CatName = stripslashes($forumData['forum_name']); $opt = $database->getAlliPermissions($session->uid, $aid); $ChckTopic = $database->CheckCatTopic($cat_id); @@ -84,8 +86,6 @@ echo '

Post new thread access == ADMIN){ - echo 'Toggle Admin mode'; - } +echo 'Toggle Admin mode'; ?>

\ No newline at end of file diff --git a/allianz.php b/allianz.php index 881ac04a..e573caf7 100644 --- a/allianz.php +++ b/allianz.php @@ -33,7 +33,14 @@ if(isset($_GET['s'])) $automation->isWinner(); if(isset($_GET['fid']) || isset($_GET['fid2'])){ $fid = preg_replace("/[^0-9]/","",!empty($_GET['fid']) ? $_GET['fid'] : $_GET['fid2']); - $forum_type = reset($database->ForumCatEdit($fid)); + $forumInfos = $database->ForumCatEdit($fid); + + if(empty($forumInfos)){ + header("Location: ".$_SERVER['PHP_SELF']); + exit; + } + + $forum_type = reset($forumInfos); if (!empty($forum_type)) { if($forum_type['forum_area'] != 1 && !$alliance->isForumAccessible($fid)){ if($forum_type['alliance'] != $session->alliance){