General fixes

+WWs aren't affected anymore by stronger building artifacts
+Walls damaging/destruction (wall bonus reduction) during a battle, is
now counted
+Added a button for normal acess users, for editing/sticking, etc. their
own topics (instead of directly display the topic "admin menu")
+Fixed some possible warnings
This commit is contained in:
iopietro
2018-05-21 16:45:54 +02:00
parent 3a14da51e0
commit 628894f478
5 changed files with 279 additions and 253 deletions
+3 -3
View File
@@ -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);
}
/**
+205 -188
View File
@@ -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 <b>destroyed</b>.";
$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 <b>".$walllevel."</b> to level <b>".$newLevel."</b>.";
$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 <b>destroyed</b>.";
$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 <b>".$walllevel."</b> to level <b>".$newLevel."</b>.";
$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
+57 -55
View File
@@ -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
*/
+6 -6
View File
@@ -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 '<tr>
</tbody></table><p>
<a href="allianz.php?s=2&pid=<?php echo $aid; ?>&fid=<?php echo $cat_id; ?>&ac=newtopic"><img id="fbtn_post" class="dynamic_img" src="img/x.gif" alt="Post new thread" /></a>
<?php
if((isset($opt['opt5']) && $opt['opt5']== 1) || $session->access == ADMIN){
echo '<a href="allianz.php?s=2&fid='.$cat_id.((isset($_GET['admin']) && !empty($_GET['admin']) && $_GET['admin'] == "switch_admin") ? "" : "&admin=switch_admin").'" title="Toggle Admin mode"><img class="switch_admin dynamic_img" src="img/x.gif" alt="Toggle Admin mode" /></a>';
}
echo '<a href="allianz.php?s=2&fid='.$cat_id.((isset($_GET['admin']) && !empty($_GET['admin']) && $_GET['admin'] == "switch_admin") ? "" : "&admin=switch_admin").'" title="Toggle Admin mode"><img class="switch_admin dynamic_img" src="img/x.gif" alt="Toggle Admin mode" /></a>';
?>
</p>
+8 -1
View File
@@ -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){