General fixes

+Fixed a little mistake in the starvation it works properly now
+A reinforced hero is now reassigned if his main village is conquered
+Population will now recount after a conquering
This commit is contained in:
iopietro
2018-05-06 15:02:38 +02:00
parent 89bebaee1f
commit bd033334c4
3 changed files with 99 additions and 130 deletions
+23 -24
View File
@@ -129,15 +129,14 @@ class Automation {
for ($i = 1; $i <= 40; $i++) { for ($i = 1; $i <= 40; $i++) {
$lvl = $fdata["f".$i]; $lvl = $fdata["f".$i];
$building = $fdata["f".$i."t"]; $building = $fdata["f".$i."t"];
if($building){ if($building) $popTot += $this->buildingPOP($building, $lvl);
$popTot += $this->buildingPOP($building,$lvl);
}
} }
$this->recountCP($vid); $this->recountCP($vid);
$q = "UPDATE ".TB_PREFIX."vdata set pop = $popTot where wref = $vid"; $q = "UPDATE ".TB_PREFIX."vdata set pop = $popTot where wref = $vid";
mysqli_query($database->dblink,$q); mysqli_query($database->dblink, $q);
$owner = $database->getVillageField($vid,"owner"); $owner = $database->getVillageField($vid, "owner");
$this->procClimbers($owner); $this->procClimbers($owner);
return $popTot; return $popTot;
} }
@@ -552,9 +551,7 @@ class Automation {
} }
// update statistical data for affected villages // update statistical data for affected villages
foreach ($villagesAffected as $affected_id) { foreach ($villagesAffected as $affected_id) $this->recountPop($affected_id);
$this->recountPop( $affected_id );
}
// update data that can be done in one swoop instead of using multiple update queries // update data that can be done in one swoop instead of using multiple update queries
// no special checks for Romans // no special checks for Romans
@@ -2182,27 +2179,31 @@ class Automation {
if($exp1 == 0){ if($exp1 == 0){
$exp = 'exp1'; $exp = 'exp1';
$value = $data['to']; $value = $data['to'];
} }elseif($exp2 == 0){
elseif($exp2 == 0){
$exp = 'exp2'; $exp = 'exp2';
$value = $data['to']; $value = $data['to'];
} }else{
else{
$exp = 'exp3'; $exp = 'exp3';
$value = $data['to']; $value = $data['to'];
} }
$database->setVillageField($data['from'], $exp, $value); $database->setVillageField($data['from'], $exp, $value);
//remove oasis related to village //Remove oasis related to village
$units->returnTroops($data['to'], 1); $units->returnTroops($data['to'], 1);
$chiefing_village = 1; $chiefing_village = 1;
//Remove trade routes related to village //Remove trade routes related to village
$database->deleteTradeRoutesByVillage($data['to']); $database->deleteTradeRoutesByVillage($data['to']);
// update data in the database //Update data in the database
$database->setVillageLevel($data['to'], $newLevels_fieldNames, $newLevels_fieldValues); $database->setVillageLevel($data['to'], $newLevels_fieldNames, $newLevels_fieldValues);
//Recount the population
$pop = $this->recountPop($data['to'], false);
//Kill and reassign the hero to the capital village, if registered in the conquered one
$database->reassignHero($data['to']);
} }
} }
} }
@@ -3973,11 +3974,9 @@ class Automation {
$unitArrays = $this->getAllUnits($wref, false); $unitArrays = $this->getAllUnits($wref, false);
$villageUpkeep = $getVillage['pop'] + $technology->getUpkeep($unitArrays, 0, $wref); $villageUpkeep = $getVillage['pop'] + $technology->getUpkeep($unitArrays, 0, $wref);
$starv = $getVillage['starv']; $starv = $getVillage['starv'];
if ($crop < $villageUpkeep){ if ($crop < $villageUpkeep){
//Add starvation data //Add starvation data
$database->setVillageField($wref, 'starv', $villageUpkeep);
$database->setVillageFields($wref, ['starv', 'starvupdate'], [$villageUpkeep, time()]); $database->setVillageFields($wref, ['starv', 'starvupdate'], [$villageUpkeep, time()]);
} }
} }
@@ -4059,10 +4058,10 @@ class Automation {
} }
// if the player has no troops, then skip the next instructions // if the player has no troops, then skip the next instructions
if(empty($starvingTroops)) continue; if(empty($starvingTroops)) continue;
// counting // counting
$timedif = $time-$starv['starvupdate']; $timedif = $time - $starv['starvupdate'];
$cropProd = $database->getCropProdstarv($starv['wref']) - $starv['starv']; $cropProd = $database->getCropProdstarv($starv['wref']) - $starv['starv'];
if($cropProd < 0){ if($cropProd < 0){
$starvsec = (abs($cropProd) / 3600); $starvsec = (abs($cropProd) / 3600);
@@ -4164,7 +4163,7 @@ class Automation {
} }
$crop = $database->getCropProdstarv($starv['wref'], false); $crop = $database->getCropProdstarv($starv['wref'], false);
if ($crop > 0) $database->setVillageField($starv['wref'], ['starv', 'starvupdate'], [0, 0]); if ($crop > $upkeep) $database->setVillageFields($starv['wref'], ['starv', 'starvupdate'], [0, 0]);
unset ($unitarrays, $type, $subtype); unset ($unitarrays, $type, $subtype);
} }
+28 -51
View File
@@ -7399,7 +7399,7 @@ References: User ID/Message ID, Mode
} }
function getCropProdstarv($wref, $use_cache = true) { function getCropProdstarv($wref, $use_cache = true) {
global $bid4,$bid8,$bid9,$sesion,$technology; global $bid4, $bid8, $bid9, $sesion, $technology;
// first of all, check if we should be using cache and whether the field // first of all, check if we should be using cache and whether the field
// required is already cached // required is already cached
@@ -7407,75 +7407,48 @@ References: User ID/Message ID, Mode
return $cachedValue; return $cachedValue;
} }
$wood = 0; $wood = $cropo = $clay = $iron = 0;
$cropo = 0;
$clay = 0;
$iron = 0;
$basecrop = $grainmill = $bakery = 0; $basecrop = $grainmill = $bakery = 0;
$owner = $this->getVrefField($wref, 'owner', $use_cache); $owner = $this->getVrefField($wref, 'owner', $use_cache);
$bonus = $this->getUserField($owner, 'b4', 0); $bonus = $this->getUserField($owner, 'b4', 0);
$buildarray = $this->getResourceLevel($wref); $buildarray = $this->getResourceLevel($wref);
$cropholder = array(); $cropholder = [];
for($i=1;$i<=38;$i++) { for($i = 1; $i <= 38; $i++){
if($buildarray['f'.$i.'t'] == 4) { if($buildarray['f'.$i.'t'] == 4) array_push($cropholder, 'f' . $i);
array_push($cropholder,'f'.$i); if($buildarray['f'.$i.'t'] == 8) $grainmill = $buildarray['f' . $i];
} if($buildarray['f'.$i.'t'] == 9) $bakery = $buildarray['f' . $i];
if($buildarray['f'.$i.'t'] == 8) {
$grainmill = $buildarray['f'.$i];
}
if($buildarray['f'.$i.'t'] == 9) {
$bakery = $buildarray['f'.$i];
}
} }
$q = "SELECT type FROM `" . TB_PREFIX . "odata` WHERE conqured = ".(int) $wref; $q = "SELECT type FROM `" . TB_PREFIX . "odata` WHERE conqured = ".(int) $wref;
$oasis = $this->query_return($q); $oasis = $this->query_return($q);
foreach($oasis as $oa){ foreach($oasis as $oa){
switch($oa['type']) { switch($oa['type']) {
case 1:
case 2:
$wood += 1;
break;
case 3: case 3:
$wood += 1;
$cropo += 1;
break;
case 4:
case 5:
$clay += 1;
break;
case 6: case 6:
$clay += 1;
$cropo += 1;
break;
case 7:
case 8:
$iron += 1;
break;
case 9: case 9:
$iron += 1;
$cropo += 1;
break;
case 10: case 10:
case 11: case 11:
$cropo += 1; $cropo ++;
break; break;
case 12: case 12:
$cropo += 2; $cropo += 2;
break; break;
} }
} }
for ( $i = 0; $i <= count( $cropholder ) - 1; $i ++ ) {
$basecrop += $bid4[ $buildarray[ $cropholder[ $i ] ] ]['prod']; for($i = 0; $i <= count($cropholder) - 1; $i++){
} $basecrop += $bid4[$buildarray[$cropholder[$i]]]['prod'];
$crop = $basecrop + $basecrop * 0.25 * $cropo; }
if ( $grainmill >= 1 || $bakery >= 1 ) { $crop = $basecrop + $basecrop * 0.25 * $cropo;
$crop += $basecrop / 100 * ( ( isset( $bid8[ $grainmill ]['attri'] ) ? $bid8[ $grainmill ]['attri'] : 0 ) + ( isset( $bid9[ $bakery ]['attri'] ) ? $bid9[ $bakery ]['attri'] : 0 ) );
} if($grainmill >= 1 || $bakery >= 1){
if ( $bonus > time() ) { $crop += $basecrop / 100 * ((isset($bid8[$grainmill]['attri']) ? $bid8[$grainmill]['attri'] : 0) + (isset($bid9[$bakery]['attri']) ? $bid9[$bakery]['attri'] : 0));
$crop *= 1.25; }
} if($bonus > time()){
$crop *= SPEED; $crop *= 1.25;
}
$crop *= SPEED;
self::$cropProductionStarvationValueCache[$wref] = $crop; self::$cropProductionStarvationValueCache[$wref] = $crop;
return self::$cropProductionStarvationValueCache[$wref]; return self::$cropProductionStarvationValueCache[$wref];
@@ -7944,6 +7917,8 @@ References:
*/ */
function reassignHero($wref){ function reassignHero($wref){
list($wref) = $this->escape_input($wref);
$q = "UPDATE $q = "UPDATE
".TB_PREFIX."hero AS hero ".TB_PREFIX."hero AS hero
INNER JOIN ".TB_PREFIX."vdata AS vdata INNER JOIN ".TB_PREFIX."vdata AS vdata
@@ -7962,8 +7937,10 @@ References:
* @return bool Return true if the query was successful, false otherwise * @return bool Return true if the query was successful, false otherwise
*/ */
function changeCapital($wref){ function changeCapital($wref, $mode = 1){
$q = "UPDATE ".TB_PREFIX."vdata SET capital = 1 WHERE wref = $wref"; list($wref, $mode) = $this->escape_input($wref, $mode);
$q = "UPDATE ".TB_PREFIX."vdata SET capital = ".$mode." WHERE wref = $wref";
return mysqli_query($this->dblink, $q); return mysqli_query($this->dblink, $q);
} }
}; };
+48 -55
View File
@@ -1,44 +1,45 @@
<?php <?php
if(time() - (!empty($_SESSION['time_p']) ? $_SESSION['time_p'] : 0) > 5) { if(time() - (!empty($_SESSION['time_p']) ? $_SESSION['time_p'] : 0) > 5){
$_SESSION['time_p'] = ''; $_SESSION['time_p'] = '';
$_SESSION['error_p'] = ''; $_SESSION['error_p'] = '';
} }
if($_POST AND $_GET['action'] == 'change_capital') { if($_POST and $_GET['action'] == 'change_capital'){
$pass = mysqli_escape_string($database->dblink,$_POST['pass']); $pass = mysqli_escape_string($database->dblink, $_POST['pass']);
$query = mysqli_query($database->dblink,'SELECT password FROM `' . TB_PREFIX . 'users` WHERE `id` = ' . (int) $session->uid); $query = mysqli_query($database->dblink, 'SELECT password FROM `'.TB_PREFIX.'users` WHERE `id` = '.(int)$session->uid);
$data = mysqli_fetch_assoc($query); $data = mysqli_fetch_assoc($query);
if(password_verify($pass, $data['password'])) { if(password_verify($pass, $data['password'])){
$query1 = mysqli_query($database->dblink,'SELECT wref FROM `' . TB_PREFIX . 'vdata` WHERE `owner` = ' .(int) $session->uid . ' AND `capital` = 1'); $query1 = mysqli_query($database->dblink, 'SELECT wref FROM `'.TB_PREFIX.'vdata` WHERE `owner` = '.(int)$session->uid.' AND `capital` = 1');
$data1 = mysqli_fetch_assoc($query1); $data1 = mysqli_fetch_assoc($query1);
$query2 = mysqli_query($database->dblink,'SELECT * FROM `' . TB_PREFIX . 'fdata` WHERE `vref` = ' . (int) $data1['wref']); $query2 = mysqli_query($database->dblink, 'SELECT * FROM `'.TB_PREFIX.'fdata` WHERE `vref` = '.(int)$data1['wref']);
$data2 = mysqli_fetch_assoc($query2); $data2 = mysqli_fetch_assoc($query2);
if($data2['vref'] != $village->wid) { if($data2['vref'] != $village->wid){
for($i = 1; $i<=18; ++$i) { for($i = 1; $i <= 18; ++$i){
if($data2['f' . $i] > 10) { if($data2['f'.$i] > 10){
$query2 = mysqli_query($database->dblink,'UPDATE `' . TB_PREFIX . 'fdata` SET `f' . $i . '` = 10 WHERE `vref` = ' . (int) $data2['vref']) or die(mysqli_error($database->dblink)); $query2 = mysqli_query($database->dblink, 'UPDATE `'.TB_PREFIX.'fdata` SET `f'.$i.'` = 10 WHERE `vref` = '.(int)$data2['vref']) or die(mysqli_error($database->dblink));
} }
} }
for($i=19; $i<=40; ++$i) { for($i = 19; $i <= 40; ++$i){
if($data2['f' . $i . 't'] == 34) { if($data2['f'.$i.'t'] == 34){
$query3 = mysqli_query($database->dblink,'UPDATE `' . TB_PREFIX . 'fdata` SET `f' . $i . 't` = 0, `f' . $i . '` = 0 WHERE `vref` = ' . (int) $data2['vref']) or die(mysqli_error($database->dblink)); $query3 = mysqli_query($database->dblink, 'UPDATE `'.TB_PREFIX.'fdata` SET `f'.$i.'t` = 0, `f'.$i.'` = 0 WHERE `vref` = '.(int)$data2['vref']) or die(mysqli_error($database->dblink));
} }
} }
for($i=19; $i<=40; ++$i) { for($i = 19; $i <= 40; ++$i){
if($data2['f' . $i . 't'] == 29 or $data2['f' . $i . 't'] == 30 or $data2['f' . $i . 't'] == 38 or $data2['f' . $i . 't'] == 39 or $data2['f' . $i . 't'] == 42) { if($data2['f'.$i.'t'] == 29 || $data2['f'.$i.'t'] == 30 || $data2['f'.$i.'t'] == 38 || $data2['f'.$i.'t'] == 39 || $data2['f'.$i.'t'] == 42){
$query3 = mysqli_query($database->dblink,'UPDATE `' . TB_PREFIX . 'fdata` SET `f' . $i . 't` = 0, `f' . $i . '` = 0 WHERE `vref` = ' . (int) $village->wid) or die(mysqli_error($database->dblink)); $query3 = mysqli_query($database->dblink, 'UPDATE `'.TB_PREFIX.'fdata` SET `f'.$i.'t` = 0, `f'.$i.'` = 0 WHERE `vref` = '.(int)$village->wid) or die(mysqli_error($database->dblink));
} }
} }
$query3 = mysqli_query($database->dblink,'UPDATE `' . TB_PREFIX . 'vdata` SET `capital` = 0 WHERE `wref` = ' . (int) $data1['wref']);
$query4 = mysqli_query($database->dblink,'UPDATE `' . TB_PREFIX . 'vdata` SET `capital` = 1 WHERE `wref` = ' . (int) $village->wid); $database->changeCapital((int)$data1['wref'], 0);
} $database->changeCapital($village->wid);
} else { }
$error = '<br /><font color="red">'.LOGIN_PW_ERROR.'</font><br />'; }else{
$_SESSION['error_p'] = $error; $error = '<br /><font color="red">'.LOGIN_PW_ERROR.'</font><br />';
$_SESSION['time_p'] = time(); $_SESSION['error_p'] = $error;
print '<script language="javascript">location.href="build.php?id=' . $building->getTypeField(26) . '&confirm=yes";</script>'; $_SESSION['time_p'] = time();
} print '<script language="javascript">location.href="build.php?id='.$building->getTypeField(26).'&confirm=yes";</script>';
}
} }
?> ?>
<div id="build" class="gid26"><h1><?php echo PALACE; ?> <span class="level"><?php echo LEVEL; ?> <?php echo $village->resarray['f'.$id]; ?></span></h1> <div id="build" class="gid26"><h1><?php echo PALACE; ?> <span class="level"><?php echo LEVEL; ?> <?php echo $village->resarray['f'.$id]; ?></span></h1>
@@ -55,40 +56,32 @@ if ($building->getTypeLevel(26) > 0) {
include("26_menu.tpl"); include("26_menu.tpl");
$test=$database->getAvailableExpansionTraining(); if($village->resarray['f'.$id] >= 10) include ("26_train.tpl");
else echo '<div class="c">'.PALACE_TRAIN_DESC.'</div>';
if($village->resarray['f'.$id] >= 10){
include ("26_train.tpl");
}
else{
echo '<div class="c">'.PALACE_TRAIN_DESC.'</div>';
}
?> ?>
<?php <?php
$query = mysqli_query($database->dblink,'SELECT wref FROM `' . TB_PREFIX . 'vdata` WHERE `owner` = ' . (int) $session->uid . ' AND `capital` = 1'); if($village->capital == $village->wid) {
$data = mysqli_fetch_assoc($query);
if($data['wref'] == $village->wid) {
?> ?>
<p class="none"><?php echo CAPITAL; ?></p> <p class="none"><?php echo CAPITAL; ?></p>
<?php <?php
} else { } else {
if(empty($_GET['confirm'])) { if(empty($_GET['confirm'])) {
print '<p><a href="?id=' . $building->getTypeField(26) . '&confirm=yes">&raquo '.CHANGE_CAPITAL.'</a></p>'; print '<p><a href="?id='.$building->getTypeField(26).'&confirm=yes">&raquo '.CHANGE_CAPITAL.'</a></p>';
} else { } else {
print '<p>Are you sure, that you want to change your capital?<br /><b>You can\'t undo this!</b><br />For security you must enter your password to confirm:<br /> print '<p>Are you sure, that you want to change your capital?<br /><b>You can\'t undo this!</b><br />For security you must enter your password to confirm:<br />
<form method="post" action="build.php?id=' . $building->getTypeField(26) . '&action=change_capital"> <form method="post" action="build.php?id='.$building->getTypeField(26).'&action=change_capital">
' . $_SESSION['error_p'] . ' '.$_SESSION['error_p'].'
'.PASSWORD.': <input type="password" name="pass" /><br /> '.PASSWORD.': <input type="password" name="pass" /><br />
<input type="image" id="btn_ok" class="dynamic_img" value="ok" name="s1" src="img/x.gif" alt="train" /> <input type="image" id="btn_ok" class="dynamic_img" value="ok" name="s1" src="img/x.gif" alt="train" />
</form> </form>
</p>'; </p>';
} }
} }
} else { }
echo "<b><?php echo PALACE_CONSTRUCTION; ?></b>"; else echo "<b><?php echo PALACE_CONSTRUCTION; ?></b>";
}
include("upgrade.tpl"); include("upgrade.tpl");
?> ?>
</div> </div>