diff --git a/GameEngine/Building.php b/GameEngine/Building.php index 3c62ae0b..4b0cbdee 100755 --- a/GameEngine/Building.php +++ b/GameEngine/Building.php @@ -928,6 +928,8 @@ class Building { $buildcount = ($this->buildArray ? count($this->buildArray) : 0); // will be true if the job was successfully finished $jobFinishSuccess = false; + // IDs of successful jobs to delete + $deletIDs = []; foreach ($this->buildArray as $jobs) { if ($jobs['wid']==$village->wid) { @@ -959,18 +961,16 @@ class Building { // we need to subtract resources for this, if another 2 jobs are active, // as we'd never subtract those otherwise if ( $buildcount > 2 ) { - $database->setVillageField( $jobs['wid'], 'wood', ( $villwood - $buildwood ) ); - $database->setVillageField( $jobs['wid'], 'clay', ( $villclay - $buildclay ) ); - $database->setVillageField( $jobs['wid'], 'iron', ( $villiron - $buildiron ) ); - $database->setVillageField( $jobs['wid'], 'crop', ( $villcrop - $buildcrop ) ); + $database->setVillageField( $jobs['wid'], + ['wood', 'clay', 'iron', 'crop'], + [( $villwood - $buildwood ), ( $villclay - $buildclay ), ( $villiron - $buildiron ), ( $villcrop - $buildcrop )]); } } } else { // if we only have 2 gold, we need to cancel this job, as there will never // be enough gold now in our account to finish this up $exclude_master = true; - $q = "DELETE FROM " . TB_PREFIX . "bdata WHERE id = " . (int) $jobs['id']; - $database->query( $q ); + $deletIDs[] = (int) $jobs['id']; } } } else { @@ -987,8 +987,7 @@ class Building { if (!isset($exclude_master) && $database->query($q) && ($enought_res == 1 or $jobs['master'] == 0)) { $database->modifyPop($jobs['wid'],$resource['pop'],0); $database->addCP($jobs['wid'],$resource['cp']); - $q = "DELETE FROM ".TB_PREFIX."bdata where id = ".(int) $jobs['id']; - $database->query($q); + $deletIDs[] = (int) $jobs['id']; if($jobs['type'] == 18) { $owner = $database->getVillageField($jobs['wid'],"owner"); $max = $bid18[$level]['attri']; @@ -1008,6 +1007,10 @@ class Building { $jobFinishSuccess = false; } + if (count($deletIDs)) { + $database->query("DELETE FROM " . TB_PREFIX . "bdata WHERE id IN(" . implode(', ', $deletIDs) . ")"); + } + $demolition = $database->finishDemolition($village->wid); $tech = $technology->finishTech(); if ($demolition > 0 || $tech > 0) { diff --git a/GameEngine/Database.php b/GameEngine/Database.php index b4326c63..83d4a936 100755 --- a/GameEngine/Database.php +++ b/GameEngine/Database.php @@ -2427,18 +2427,26 @@ class MYSQLi_DB implements IDbConnection { $result = mysqli_query($this->dblink,$q2); if (!empty($result)) { $array=$this->mysqli_fetch_all($result); + $toDelete = []; foreach($array as $ss) { - $this->DeleteSurvey($ss['id']); + $toDelete[] = $ss['id']; } + $this->DeleteSurvey($toDelete); } mysqli_query($this->dblink,$qs); return mysqli_query($this->dblink,$q); } function DeleteSurvey($id) { - list($id) = $this->escape_input($id); + if (!is_array($id)) { + $id = [$id]; + } - $qs = "DELETE from " . TB_PREFIX . "forum_survey where topic = '$id'"; + foreach ($id as $index => $idValue) { + $id[$index] = (int) $idValue; + } + + $qs = "DELETE from " . TB_PREFIX . "forum_survey where topic IN(".implode(', ', $id).")"; return mysqli_query($this->dblink,$qs); } @@ -4306,9 +4314,10 @@ class MYSQLi_DB implements IDbConnection { // already checks if there are no more people other than the owner // present before the demolition is allowed. if ($demolition) { + $evicts = []; foreach ($members as $member) { // evict the player from the alliance - mysqli_query($this->dblink, 'UPDATE '.TB_PREFIX.'users SET alliance = 0 WHERE id = '.$member['id']); + $evicts[] = $member['id']; // notify them via in-game messaging $this->sendMessage( @@ -4329,6 +4338,8 @@ class MYSQLi_DB implements IDbConnection { 0, true); } + + mysqli_query($this->dblink, 'UPDATE '.TB_PREFIX.'users SET alliance = 0 WHERE id IN('.implode(',', $evicts).")"); } else { // we come from a battle result, therefore we need to check // for the first player in the alliance who has a sufficient @@ -6517,9 +6528,9 @@ class MYSQLi_DB implements IDbConnection { $result = $this->query_return($q); $attack = 0; foreach($result as $general) { - if(date("j. M",$time) == date("j. M",$general['time'])){ - $attack += 1; - } + if(date("j. M",$time) == date("j. M",$general['time'])){ + $attack += 1; + } } return $attack; } diff --git a/GameEngine/Village.php b/GameEngine/Village.php index ea5b4ecf..871c9d91 100755 --- a/GameEngine/Village.php +++ b/GameEngine/Village.php @@ -251,38 +251,38 @@ class Village { $crop = $clay = $wood = $iron = 0; if (!empty($this->oasisowned)) { foreach ($this->oasisowned as $oasis) { - switch($oasis['type']) { - case 1: - case 2: - $wood += 1; - break; - case 3: - $wood += 1; - $crop += 1; - break; - case 4: - case 5: - $clay += 1; - break; - case 6: - $clay += 1; - $crop += 1; - break; - case 7: - case 8: - $iron += 1; - break; - case 9: - $iron += 1; - $crop += 1; - break; - case 10: - case 11: - $crop += 1; - break; - case 12: - $crop += 2; - break; + switch ( $oasis['type'] ) { + case 1: + case 2: + $wood += 1; + break; + case 3: + $wood += 1; + $crop += 1; + break; + case 4: + case 5: + $clay += 1; + break; + case 6: + $clay += 1; + $crop += 1; + break; + case 7: + case 8: + $iron += 1; + break; + case 9: + $iron += 1; + $crop += 1; + break; + case 10: + case 11: + $crop += 1; + break; + case 12: + $crop += 2; + break; } } } diff --git a/Templates/a2b/startRaid.tpl b/Templates/a2b/startRaid.tpl index eb359daf..c4dd1024 100644 --- a/Templates/a2b/startRaid.tpl +++ b/Templates/a2b/startRaid.tpl @@ -80,18 +80,22 @@ $abdata = $database->getABTech($getFLData['wref']); $reference = $database->addAttack(($getFLData['wref']),$data['u1'],$data['u2'],$data['u3'],$data['u4'],$data['u5'],$data['u6'],$data['u7'],$data['u8'],$data['u9'],$data['u10'],$data['u11'],$data['type'],$ctar1,$ctar2,0,$abdata['b1'],$abdata['b2'],$abdata['b3'],$abdata['b4'],$abdata['b5'],$abdata['b6'],$abdata['b7'],$abdata['b8']); $totalunits = $data['u1']+$data['u2']+$data['u3']+$data['u4']+$data['u5']+$data['u6']+$data['u7']+$data['u8']+$data['u9']+$data['u10']+$data['u11']; - $database->modifyUnit($getFLData['wref'], array($uname2.'1'), array($data['u1']), array(0)); - $database->modifyUnit($getFLData['wref'], array($uname2.'2'), array($data['u2']), array(0)); - $database->modifyUnit($getFLData['wref'], array($uname2.'3'), array($data['u3']), array(0)); - $database->modifyUnit($getFLData['wref'], array($uname2.'4'), array($data['u4']), array(0)); - $database->modifyUnit($getFLData['wref'], array($uname2.'5'), array($data['u5']), array(0)); - $database->modifyUnit($getFLData['wref'], array($uname2.'6'), array($data['u6']), array(0)); - $database->modifyUnit($getFLData['wref'], array($uname2.'7'), array($data['u7']), array(0)); - $database->modifyUnit($getFLData['wref'], array($uname2.'8'), array($data['u8']), array(0)); - $database->modifyUnit($getFLData['wref'], array($uname2.'9'), array($data['u9']), array(0)); - $database->modifyUnit($getFLData['wref'], array($uname2.'10'), array($data['u10']), array(0)); - $database->modifyUnit($getFLData['wref'], array('hero'), array($data['u11']), array(0)); + $units = []; + $amounts = []; + $modes = []; + + for ($u = 1; $u <= 10; $u++) { + $units[] = $uname2.$u; + $amounts[] = $data['u'.$u]; + $modes[] = 0; + } + + $units[] = 'hero'; + $amounts[] = $data['u11']; + $modes[] = 0; + + $database->modifyUnit($getFLData['wref'], $uname2, $amounts, $modes); $database->addMovement(3,$getFLData['wref'],$data['to_vid'],$reference,time(),($time+time())); } }