fix: construction of a palace and a residence in one village

#323
This commit is contained in:
Martin Ambrus
2017-11-22 14:35:33 +01:00
parent 6f7dff27f8
commit ddb8614b14
3 changed files with 127 additions and 70 deletions
+107 -55
View File
@@ -42,26 +42,49 @@ class Building {
} }
} }
public function residenceOfPalaceBuildInProgress($vid) {
global $database, $village;
$residenceOrPalaceInProgress = $database->getBuildingByType($village->wid, '25, 26');
$residenceBuildInProgress = false;
$palaceBuildInProgress = false;
if (count($residenceOrPalaceInProgress)) {
foreach ($residenceOrPalaceInProgress as $record) {
if ($record['type'] == 25) {
$residenceBuildInProgress = true;
} else {
$palaceBuildInProgress = true;
}
}
}
return [
'residence' => $residenceBuildInProgress,
'palace' => $palaceBuildInProgress
];
}
public function canProcess($id,$tid) { public function canProcess($id,$tid) {
//add fix by ronix //add fix by ronix
global $session; global $session;
if($session->access==BANNED){ if($session->access==BANNED){
header("Location: banned.php"); header("Location: banned.php");
exit; exit;
} else { } else {
if ($this->checkResource($id,$tid)!=4) { if ($this->checkResource($id,$tid)!=4) {
if($tid >= 19) { if($tid >= 19) {
header("Location: dorf2.php"); header("Location: dorf2.php");
exit; exit;
} }
else { else {
header("Location: dorf1.php"); header("Location: dorf1.php");
exit; exit;
} }
exit; exit;
} }
} }
} }
public function procBuild($get) { public function procBuild($get) {
global $session, $village, $database; global $session, $village, $database;
@@ -82,13 +105,27 @@ class Building {
header("Location: banned.php"); header("Location: banned.php");
exit; exit;
} }
$level = $database->getResourceLevel($village->wid);
$database->addBuilding($village->wid, $get['id'], $get['master'], 1, $get['time'], 1, $level['f'.$get['id']] + 1 + count($database->getBuildingByField($village->wid,$get['id']))); // check if we're not trying to hack-build residence and palace together
if($get['id'] > 18) { if (
header("Location: dorf2.php"); ($progresses = $this->residenceOfPalaceBuildInProgress($village->wid)) &&
(
!in_array($get['master'], [25, 26]) ||
(
($get['master'] == 25 && $progresses['palace'] === false) ||
($get['master'] == 26 && $progresses['residence'] === false)
)
)
) {
$level = $database->getResourceLevel( $village->wid );
$database->addBuilding( $village->wid, $get['id'], $get['master'], 1, $get['time'], 1, $level[ 'f' . $get['id'] ] + 1 + count( $database->getBuildingByField( $village->wid, $get['id'] ) ) );
}
if ( $get['id'] > 18 ) {
header( "Location: dorf2.php" );
exit; exit;
} else { } else {
header("Location: dorf1.php"); header( "Location: dorf1.php" );
exit; exit;
} }
} }
@@ -434,37 +471,52 @@ class Building {
global $database,$village,$session,$logging; global $database,$village,$session,$logging;
if($this->allocated < $this->maxConcurrent) { if($this->allocated < $this->maxConcurrent) {
if($tid == 16) { // check if we're not trying to hack-build residence and palace together
$id = 39; if (
} ($progresses = $this->residenceOfPalaceBuildInProgress($village->wid)) &&
else if($tid == 31 || $tid == 32 || $tid == 33) { (
$id = 40; !in_array($tid, [25, 26]) ||
} (
$uprequire = $this->resourceRequired($id,$tid); ($tid == 25 && $progresses['palace'] === false) ||
$time = time() + $uprequire['time']; ($tid == 26 && $progresses['residence'] === false)
$bindicate = $this->canBuild($id,$village->resarray['f'.$id.'t']); )
$loop = ($bindicate == 9 ? 1 : 0); )
if($loop == 1) { ) {
foreach($this->buildArray as $build) {
if($build['field'] >= 19 || ($session->tribe <> 1 && !ALLOW_ALL_TRIBE)) { if ( $tid == 16 ) {
$time = $build['timestamp'] + ceil(60/SPEED) + $uprequire['time']; $id = 39;
} } else if ( $tid == 31 || $tid == 32 || $tid == 33 ) {
} $id = 40;
} }
if($this->meetRequirement($tid)) { $uprequire = $this->resourceRequired( $id, $tid );
if($session->access!=BANNED){ $time = time() + $uprequire['time'];
$level = $database->getResourceLevel($village->wid); $bindicate = $this->canBuild( $id, $village->resarray[ 'f' . $id . 't' ] );
if($database->addBuilding($village->wid,$id,$tid,$loop,$time,0,$level['f'.$id] + 1 + count($database->getBuildingByField($village->wid,$id)))) { $loop = ( $bindicate == 9 ? 1 : 0 );
$logging->addBuildLog($village->wid,$this->procResType($tid),($village->resarray['f'.$id]+1),1); if ( $loop == 1 ) {
$database->modifyResource($village->wid,$uprequire['wood'],$uprequire['clay'],$uprequire['iron'],$uprequire['crop'],0); foreach ( $this->buildArray as $build ) {
header("Location: dorf2.php"); if ( $build['field'] >= 19 || ( $session->tribe <> 1 && ! ALLOW_ALL_TRIBE ) ) {
exit; $time = $build['timestamp'] + ceil( 60 / SPEED ) + $uprequire['time'];
} }
}else{ }
header("Location: banned.php"); }
exit; if ( $this->meetRequirement( $tid ) ) {
} if ( $session->access != BANNED ) {
} $level = $database->getResourceLevel( $village->wid );
if ( $database->addBuilding( $village->wid, $id, $tid, $loop, $time, 0, $level[ 'f' . $id ] + 1 + count( $database->getBuildingByField( $village->wid, $id ) ) ) ) {
$logging->addBuildLog( $village->wid, $this->procResType( $tid ), ( $village->resarray[ 'f' . $id ] + 1 ), 1 );
$database->modifyResource( $village->wid, $uprequire['wood'], $uprequire['clay'], $uprequire['iron'], $uprequire['crop'], 0 );
header( "Location: dorf2.php" );
exit;
}
} else {
header( "Location: banned.php" );
exit;
}
}
} else {
header( "Location: dorf2.php" );
exit;
}
} }
} }
+4 -2
View File
@@ -4971,9 +4971,11 @@ References: User ID/Message ID, Mode
// no need to cache this method // no need to cache this method
function getBuildingByType($wid,$type) { function getBuildingByType($wid,$type) {
list($wid,$type) = $this->escape_input((int) $wid,(int) $type); $wid = (int) $wid;
$q = "SELECT * FROM " . TB_PREFIX . "bdata where wid = $wid and type = $type and master = 0"; $type = (strpos($type, ',') === false ? (int) $type : $this->escape($type));
$q = "SELECT * FROM " . TB_PREFIX . "bdata where wid = $wid and type IN($type) and master = 0";
$result = mysqli_query($this->dblink,$q); $result = mysqli_query($this->dblink,$q);
return $this->mysqli_fetch_all($result); return $this->mysqli_fetch_all($result);
} }
+6 -3
View File
@@ -98,6 +98,10 @@ $greatwarehouse1 = getTypeCount(38);
$greatgranary1 = getTypeCount(39); $greatgranary1 = getTypeCount(39);
$greatworkshop1 = getTypeCount(42); $greatworkshop1 = getTypeCount(42);
$residenceOrPalaceInProgress = $building->residenceOfPalaceBuildInProgress($village->wid);
$residenceBuildInProgress = $residenceOrPalaceInProgress['residence'];
$palaceBuildInProgress = $residenceOrPalaceInProgress['palace'];
?> ?>
<div id="build" class="gid0"><h1<?php echo CONSTRUCT_NEW_BUILDING;?></h1> <div id="build" class="gid0"><h1<?php echo CONSTRUCT_NEW_BUILDING;?></h1>
<?php <?php
@@ -163,7 +167,7 @@ include("avaliable/grainmill.tpl");
if($granary >= 1 && $warehouse >= 1 && $mainbuilding >= 3 && $market == 0 && $market1 == 0 && $id != 39 && $id != 40) { if($granary >= 1 && $warehouse >= 1 && $mainbuilding >= 3 && $market == 0 && $market1 == 0 && $id != 39 && $id != 40) {
include("avaliable/marketplace.tpl"); include("avaliable/marketplace.tpl");
} }
if($mainbuilding >= 5 && $residence == 0 && $residence1 == 0 && $id != 39 && $id != 40 && $palace == 0) { if($mainbuilding >= 5 && $residence == 0 && $residence1 == 0 && $id != 39 && $id != 40 && $palace == 0 && !$palaceBuildInProgress) {
include("avaliable/residence.tpl"); include("avaliable/residence.tpl");
} }
if($academy == 0 && $academy1 == 0 && $mainbuilding >= 3 && $barrack >= 3 && $id != 39 && $id != 40) { if($academy == 0 && $academy1 == 0 && $mainbuilding >= 3 && $barrack >= 3 && $id != 39 && $id != 40) {
@@ -195,9 +199,8 @@ if ($test){
} }
//if Castle no ready include palace.tpl //if Castle no ready include palace.tpl
if (!$test){ if (!$test && !$residenceBuildInProgress){
include("avaliable/palace.tpl"); include("avaliable/palace.tpl");
} }