From 1747a26c1e2c77195a2ea05930040e286dec59c8 Mon Sep 17 00:00:00 2001 From: Martin Ambrus Date: Sun, 19 Nov 2017 23:37:38 +0100 Subject: [PATCH] fix: cannot send traders to village determined by a village name --- GameEngine/Automation.php | 5 +- GameEngine/Database.php | 26 +- GameEngine/Market.php | 620 +++++++++++++++++++------------------- 3 files changed, 327 insertions(+), 324 deletions(-) diff --git a/GameEngine/Automation.php b/GameEngine/Automation.php index 87dcf0c2..d5892b2b 100755 --- a/GameEngine/Automation.php +++ b/GameEngine/Automation.php @@ -3471,7 +3471,10 @@ class Automation { //add unit. $j='1'; for($i=$start;$i<=$end;$i++){ - $t_units.="u".$i."=u".$i." + ".$data['t'.$j].(($j > 9) ? '' : ', ');$j++; + if (!isset($t_units)) { + $t_units = ''; + } + $t_units .= "u".$i."=u".$i." + ".$data['t'.$j].(($j > 9) ? '' : ', ');$j++; } $q = "UPDATE ".TB_PREFIX."enforcement set $t_units where id =".(int) $check['id']; $database->query($q); diff --git a/GameEngine/Database.php b/GameEngine/Database.php index c77311c4..87f83adb 100755 --- a/GameEngine/Database.php +++ b/GameEngine/Database.php @@ -3,15 +3,15 @@ ## -= YOU MAY NOT REMOVE OR CHANGE THIS NOTICE =- ## ## --------------------------------------------------------------------------- ## ## Project: TravianZ ## -## Version: 22.06.2015 ## +## Version: 22.06.2015 ## ## Filename db_MYSQL.php ## -## Developed by: Mr.php , Advocaite , brainiacX , yi12345 , Shadow , ronix ## +## Developed by: Mr.php , Advocaite , brainiacX , yi12345 , Shadow , ronix ## ## Fixed by: Shadow - STARVATION , HERO FIXED COMPL. ## ## Fixed by: InCube - double troops ## ## License: TravianZ Project ## ## Copyright: TravianZ (c) 2010-2015. All rights reserved. ## ## URLs: http://travian.shadowss.ro ## -## Source code: https://github.com/Shadowss/TravianZ ## +## Source code: https://github.com/Shadowss/TravianZ ## ## ## ################################################################################# @@ -46,47 +46,47 @@ class MYSQLi_DB implements IDbConnection { * @var string MySQL server hostname to connect to. */ $hostname = 'localhost', - + /** * @var int MySQL server port to connect to. */ $port = 3306, - + /** * @var string Username to authenticate with to the MySQL connection. */ $username = 'root', - + /** * @var string Password to authenticate with to the MySQL connection. */ $password = '', - + /** * @var string Database to use with TravianZ. */ $dbname = 'travian', - + /** * @var int Counter of all SELECT queries performed. */ $selectQueryCount = 0, - + /** * @var int Counter of all INSERT queries performed. */ $insertQueryCount = 0, - + /** * @var int Counter of all UPDATE queries performed. */ $updateQueryCount = 0, - + /** * @var int Counter of all DELETE queries performed. */ $deleteQueryCount = 0, - + /** * @var int Counter of all REPLACE queries performed. */ @@ -4762,7 +4762,7 @@ class MYSQLi_DB implements IDbConnection { function getVillageByName($name) { list($name) = $this->escape_input($name); - $q = "SELECT wref FROM " . TB_PREFIX . "vdata where name = '$name' limit 1 LIMIT 1"; + $q = "SELECT wref FROM " . TB_PREFIX . "vdata WHERE `name` = '$name' LIMIT 1"; $result = mysqli_query($this->dblink,$q); $dbarray = mysqli_fetch_array($result); return $dbarray['wref']; diff --git a/GameEngine/Market.php b/GameEngine/Market.php index ebad6ae7..a1946dcf 100755 --- a/GameEngine/Market.php +++ b/GameEngine/Market.php @@ -1,259 +1,259 @@ -loadMarket(); - if(isset($_SESSION['loadMarket'])) - { - $this->loadOnsale(); - unset($_SESSION['loadMarket']); - } - if(isset($post['ft'])) - { - switch($post['ft']) - { - case "mk1": $this->sendResource($post); break; - case "mk2": $this->addOffer($post); break; - case "mk3": $this->tradeResource($post); break; - } - } - } + public function procMarket($post) + { + $this->loadMarket(); + if(isset($_SESSION['loadMarket'])) + { + $this->loadOnsale(); + unset($_SESSION['loadMarket']); + } + if(isset($post['ft'])) + { + switch($post['ft']) + { + case "mk1": $this->sendResource($post); break; + case "mk2": $this->addOffer($post); break; + case "mk3": $this->tradeResource($post); break; + } + } + } - public function procRemove($get) - { - global $database,$village,$session; - - if(isset($get['t']) && $get['t'] == 1) - { - $this->filterNeed($get); - } - else if(isset($get['t']) && $get['t'] ==2 && isset($get['a']) && $get['a'] == 5 && isset($get['del'])) - { - //GET ALL FIELDS FROM MARKET - $type = $database->getMarketField($village->wid,"gtype"); - $amt = $database->getMarketField($village->wid,"gamt"); - $vref = $village->wid; - $database->getResourcesBack($vref,$type,$amt); - $database->addMarket($village->wid,$get['del'],0,0,0,0,0,0,1); + public function procRemove($get) + { + global $database,$village,$session; + + if(isset($get['t']) && $get['t'] == 1) + { + $this->filterNeed($get); + } + else if(isset($get['t']) && $get['t'] ==2 && isset($get['a']) && $get['a'] == 5 && isset($get['del'])) + { + //GET ALL FIELDS FROM MARKET + $type = $database->getMarketField($village->wid,"gtype"); + $amt = $database->getMarketField($village->wid,"gamt"); + $vref = $village->wid; + $database->getResourcesBack($vref,$type,$amt); + $database->addMarket($village->wid,$get['del'],0,0,0,0,0,0,1); header("Location: build.php?id=".$get['id']."&t=2"); exit; - } - if(isset($get['t']) && $get['t'] == 1 && isset($get['a']) && $get['a'] == $session->mchecker && !isset($get['del'])) - { - $session->changeChecker(); - $this->acceptOffer($get); - } - } - - public function merchantAvail() - { - return $this->merchant - $this->used; - } - - private function loadMarket() - { - global $session,$building,$bid28,$bid17,$database,$village; - - $this->recieving = $database->getMovement(0,$village->wid,1); - $this->sending = $database->getMovement(0,$village->wid,0); - $this->return = $database->getMovement(2,$village->wid,1); - $this->merchant = ($building->getTypeLevel(17) > 0)? $bid17[$building->getTypeLevel(17)]['attri'] : 0; - $this->used = $database->totalMerchantUsed($village->wid); - $this->onmarket = $database->getMarket($village->wid,0); - $this->maxcarry = ($session->tribe == 1)? 500 : (($session->tribe == 2)? 1000 : 750); - $this->maxcarry *= TRADER_CAPACITY; - if($building->getTypeLevel(28) != 0) - { - $this->maxcarry *= $bid28[$building->getTypeLevel(28)]['attri'] / 100; } - } + if(isset($get['t']) && $get['t'] == 1 && isset($get['a']) && $get['a'] == $session->mchecker && !isset($get['del'])) + { + $session->changeChecker(); + $this->acceptOffer($get); + } + } - private function sendResource($post) - { - global $database,$village,$session,$generator,$logging,$form; - - $wtrans = (isset($post['r1']) && $post['r1'] != "")? $post['r1'] : 0; - $ctrans = (isset($post['r2']) && $post['r2'] != "")? $post['r2'] : 0; - $itrans = (isset($post['r3']) && $post['r3'] != "")? $post['r3'] : 0; - $crtrans = (isset($post['r4']) && $post['r4'] != "")? $post['r4'] : 0; - $wtrans = str_replace("-", "", $wtrans); - $ctrans = str_replace("-", "", $ctrans); - $itrans = str_replace("-", "", $itrans); + public function merchantAvail() + { + return $this->merchant - $this->used; + } + + private function loadMarket() + { + global $session,$building,$bid28,$bid17,$database,$village; + + $this->recieving = $database->getMovement(0,$village->wid,1); + $this->sending = $database->getMovement(0,$village->wid,0); + $this->return = $database->getMovement(2,$village->wid,1); + $this->merchant = ($building->getTypeLevel(17) > 0)? $bid17[$building->getTypeLevel(17)]['attri'] : 0; + $this->used = $database->totalMerchantUsed($village->wid); + $this->onmarket = $database->getMarket($village->wid,0); + $this->maxcarry = ($session->tribe == 1)? 500 : (($session->tribe == 2)? 1000 : 750); + $this->maxcarry *= TRADER_CAPACITY; + if($building->getTypeLevel(28) != 0) + { + $this->maxcarry *= $bid28[$building->getTypeLevel(28)]['attri'] / 100; + } + } + + private function sendResource($post) + { + global $database,$village,$session,$generator,$logging,$form; + + $wtrans = (isset($post['r1']) && $post['r1'] != "")? $post['r1'] : 0; + $ctrans = (isset($post['r2']) && $post['r2'] != "")? $post['r2'] : 0; + $itrans = (isset($post['r3']) && $post['r3'] != "")? $post['r3'] : 0; + $crtrans = (isset($post['r4']) && $post['r4'] != "")? $post['r4'] : 0; + $wtrans = str_replace("-", "", $wtrans); + $ctrans = str_replace("-", "", $ctrans); + $itrans = str_replace("-", "", $itrans); $crtrans = str_replace("-", "", $crtrans); // preload all village data, since we're retrieving some of those separately below $database->getVillage($village->wid); - $availableWood = $database->getWoodAvailable($village->wid); - $availableClay = $database->getClayAvailable($village->wid); - $availableIron = $database->getIronAvailable($village->wid); - $availableCrop = $database->getCropAvailable($village->wid); + $availableWood = $database->getWoodAvailable($village->wid); + $availableClay = $database->getClayAvailable($village->wid); + $availableIron = $database->getIronAvailable($village->wid); + $availableCrop = $database->getCropAvailable($village->wid); //check if vacation mode: if($database->getvacmodexy($id)){ $form->addError("error","User is on vacation mode"); } - if($session->access == BANNED) - { + if($session->access == BANNED) + { header("Location: banned.php"); exit; - } - else if($availableWood >= $post['r1'] AND $availableClay >= $post['r2'] AND $availableIron >= $post['r3'] AND $availableCrop >= $post['r4']) - { - $resource = array($wtrans,$ctrans,$itrans,$crtrans); - $reqMerc = ceil((array_sum($resource)-0.1)/$this->maxcarry); + } + else if($availableWood >= $post['r1'] AND $availableClay >= $post['r2'] AND $availableIron >= $post['r3'] AND $availableCrop >= $post['r4']) + { + $resource = array($wtrans,$ctrans,$itrans,$crtrans); + $reqMerc = ceil((array_sum($resource)-0.1)/$this->maxcarry); - if($this->merchantAvail() != 0 && $reqMerc <= $this->merchantAvail()) - { - $id = $post['getwref']; - $coor = $database->getCoor($id); - if($database->getVillageState($id)) - { - $timetaken = $generator->procDistanceTime($coor,$village->coor,$session->tribe,0); - $res = $resource[0]+$resource[1]+$resource[2]+$resource[3]; - if($res!=0) - { + if($this->merchantAvail() != 0 && $reqMerc <= $this->merchantAvail()) + { + $id = $post['getwref']; + $coor = $database->getCoor($id); + if($database->getVillageState($id)) + { + $timetaken = $generator->procDistanceTime($coor,$village->coor,$session->tribe,0); + $res = $resource[0]+$resource[1]+$resource[2]+$resource[3]; + if($res!=0) + { $reference = $database->sendResource($resource[0],$resource[1],$resource[2],$resource[3],$reqMerc,0); - $database->modifyResource($village->wid,$resource[0],$resource[1],$resource[2],$resource[3],0); - $database->addMovement(0,$village->wid,$id,$reference,time(),time()+$timetaken,$post['send3']); - $logging->addMarketLog($village->wid,1,array($resource[0],$resource[1],$resource[2],$resource[3],$id)); - } - } - } + $database->modifyResource($village->wid,$resource[0],$resource[1],$resource[2],$resource[3],0); + $database->addMovement(0,$village->wid,$id,$reference,time(),time()+$timetaken,$post['send3']); + $logging->addMarketLog($village->wid,1,array($resource[0],$resource[1],$resource[2],$resource[3],$id)); + } + } + } header("Location: build.php?id=".$post['id']); exit; - } - else + } + else { // TODO: WTF??? :D // something - } - } + } + } - private function addOffer($post) - { - global $database,$village,$session; - - - if($post['rid1'] == $post['rid2']) - { - // Trading res for res of same type (invalid) + private function addOffer($post) + { + global $database,$village,$session; + + + if($post['rid1'] == $post['rid2']) + { + // Trading res for res of same type (invalid) header("Location: build.php?id=".$post['id']."&t=2&e2"); exit; - } - elseif($post['m1'] > (2 * $post['m2'])) - { - // Trade is for more than 2x (invalid) + } + elseif($post['m1'] > (2 * $post['m2'])) + { + // Trade is for more than 2x (invalid) header("Location: build.php?id=".$post['id']."&t=2&e2"); exit; - } - elseif($post['m2'] > (2 * $post['m1'])) - { - // Trade is for less than 0.5x (invalid) + } + elseif($post['m2'] > (2 * $post['m1'])) + { + // Trade is for less than 0.5x (invalid) header("Location: build.php?id=".$post['id']."&t=2&e2"); exit; - } - else - { - $wood = ($post['rid1'] == 1)? $post['m1'] : 0; - $clay = ($post['rid1'] == 2)? $post['m1'] : 0; - $iron = ($post['rid1'] == 3)? $post['m1'] : 0; + } + else + { + $wood = ($post['rid1'] == 1)? $post['m1'] : 0; + $clay = ($post['rid1'] == 2)? $post['m1'] : 0; + $iron = ($post['rid1'] == 3)? $post['m1'] : 0; $crop = ($post['rid1'] == 4)? $post['m1'] : 0; // preload all village data, since we're retrieving some of those separately below $database->getVillage($village->wid); - $availableWood = $database->getWoodAvailable($village->wid); - $availableClay = $database->getClayAvailable($village->wid); - $availableIron = $database->getIronAvailable($village->wid); - $availableCrop = $database->getCropAvailable($village->wid); - - if($session->access == BANNED) - { + $availableWood = $database->getWoodAvailable($village->wid); + $availableClay = $database->getClayAvailable($village->wid); + $availableIron = $database->getIronAvailable($village->wid); + $availableCrop = $database->getCropAvailable($village->wid); + + if($session->access == BANNED) + { header("Location: banned.php"); exit; - } - - elseif($availableWood >= $wood AND $availableClay >= $clay AND $availableIron >= $iron AND $availableCrop >= $crop) - { - $reqMerc = 1; - - if(($wood+$clay+$iron+$crop) > $this->maxcarry) - { - $reqMerc = round(($wood+$clay+$iron+$crop)/$this->maxcarry); - - if(($wood+$clay+$iron+$crop) > $this->maxcarry*$reqMerc) - { - $reqMerc += 1; - } - } - if($this->merchantAvail() != 0 && $reqMerc <= $this->merchantAvail()) + } + + elseif($availableWood >= $wood AND $availableClay >= $clay AND $availableIron >= $iron AND $availableCrop >= $crop) + { + $reqMerc = 1; + + if(($wood+$clay+$iron+$crop) > $this->maxcarry) { - if($database->modifyResource($village->wid,$wood,$clay,$iron,$crop,0)) - { - $time = 0; - if(isset($_POST['d1'])) - { - $time = $_POST['d2'] * 3600; - } - $alliance = (isset($post['ally']) && $post['ally'] == 1)? $session->userinfo['alliance'] : 0; - $database->addMarket($village->wid,$post['rid1'],$post['m1'],$post['rid2'],$post['m2'],$time,$alliance,$reqMerc,0); - } - // Enough merchants + $reqMerc = round(($wood+$clay+$iron+$crop)/$this->maxcarry); + + if(($wood+$clay+$iron+$crop) > $this->maxcarry*$reqMerc) + { + $reqMerc += 1; + } + } + if($this->merchantAvail() != 0 && $reqMerc <= $this->merchantAvail()) + { + if($database->modifyResource($village->wid,$wood,$clay,$iron,$crop,0)) + { + $time = 0; + if(isset($_POST['d1'])) + { + $time = $_POST['d2'] * 3600; + } + $alliance = (isset($post['ally']) && $post['ally'] == 1)? $session->userinfo['alliance'] : 0; + $database->addMarket($village->wid,$post['rid1'],$post['m1'],$post['rid2'],$post['m2'],$time,$alliance,$reqMerc,0); + } + // Enough merchants header("Location: build.php?id=".$post['id']."&t=2"); exit; - } - else - { - // Not enough merchants + } + else + { + // Not enough merchants header("Location: build.php?id=".$post['id']."&t=2&e3"); exit; - } - } - else - { - // not enough resources + } + } + else + { + // not enough resources header("Location: build.php?id=".$post['id']."&t=2&e1"); exit; - } - } - } + } + } + } - private function acceptOffer($get) - { - global $database,$village,$session,$logging,$generator; - - $infoarray = $database->getMarketInfo($get['g']); - $reqMerc = 1; - if($infoarray['wamt'] > $this->maxcarry) - { - $reqMerc = round($infoarray['wamt']/$this->maxcarry); - if($infoarray['wamt'] > $this->maxcarry*$reqMerc) - { - $reqMerc += 1; - } - } - $myresource = $hisresource = array(1=>0,0,0,0); + private function acceptOffer($get) + { + global $database,$village,$session,$logging,$generator; + + $infoarray = $database->getMarketInfo($get['g']); + $reqMerc = 1; + if($infoarray['wamt'] > $this->maxcarry) + { + $reqMerc = round($infoarray['wamt']/$this->maxcarry); + if($infoarray['wamt'] > $this->maxcarry*$reqMerc) + { + $reqMerc += 1; + } + } + $myresource = $hisresource = array(1=>0,0,0,0); $myresource[$infoarray['wtype']] = $infoarray['wamt']; $mysendid = $database->sendResource($myresource[1],$myresource[2],$myresource[3],$myresource[4],$reqMerc,0); $hisresource[$infoarray['gtype']] = $infoarray['gamt']; $hissendid = $database->sendResource($hisresource[1],$hisresource[2],$hisresource[3],$hisresource[4],$infoarray['merchant'],0); - $hiscoor = $database->getCoor($infoarray['vref']); - $mytime = $generator->procDistanceTime($hiscoor,$village->coor,$session->tribe,0); - $targettribe = $database->getUserField($database->getVillageField($infoarray['vref'],"owner"),"tribe",0); + $hiscoor = $database->getCoor($infoarray['vref']); + $mytime = $generator->procDistanceTime($hiscoor,$village->coor,$session->tribe,0); + $targettribe = $database->getUserField($database->getVillageField($infoarray['vref'],"owner"),"tribe",0); $histime = $generator->procDistanceTime($village->coor,$hiscoor,$targettribe,0); $timestamp = time(); $database->addMovement( @@ -264,107 +264,107 @@ class Market [$timestamp, $timestamp], [$mytime + $timestamp, $histime + $timestamp] ); - $resource = array(1=>0,0,0,0); + $resource = array(1=>0,0,0,0); $resource[$infoarray['wtype']] = $infoarray['wamt']; - $database->modifyResource($village->wid,$resource[1],$resource[2],$resource[3],$resource[4],0); - $database->setMarketAcc($get['g']); - $database->removeAcceptedOffer($get['g']); - $logging->addMarketLog($village->wid,2,array($infoarray['vref'],$get['g'])); + $database->modifyResource($village->wid,$resource[1],$resource[2],$resource[3],$resource[4],0); + $database->setMarketAcc($get['g']); + $database->removeAcceptedOffer($get['g']); + $logging->addMarketLog($village->wid,2,array($infoarray['vref'],$get['g'])); header("Location: build.php?id=".$get['id']); exit; - } + } - private function loadOnsale() - { - global $database,$village,$session,$multisort,$generator; - - $displayarray = $database->getMarket($village->wid,1); - $holderarray = array(); - foreach($displayarray as $value) - { - $targetcoor = $database->getCoor($value['vref']); + private function loadOnsale() + { + global $database,$village,$session,$multisort,$generator; + + $displayarray = $database->getMarket($village->wid,1); + $holderarray = array(); + foreach($displayarray as $value) + { + $targetcoor = $database->getCoor($value['vref']); $duration = $generator->procDistanceTime($targetcoor,$village->coor,$session->tribe,0); - if($duration <= $value['maxtime'] || $value['maxtime'] == 0) - { - $value['duration'] = $duration; - array_push($holderarray,$value); - } - } - $this->onsale = $multisort->sorte($holderarray, "'duration'", true, 2); - } + if($duration <= $value['maxtime'] || $value['maxtime'] == 0) + { + $value['duration'] = $duration; + array_push($holderarray,$value); + } + } + $this->onsale = $multisort->sorte($holderarray, "'duration'", true, 2); + } - private function filterNeed($get) - { - if(isset($get['v']) || isset($get['s']) || isset($get['b'])) - { - $holder = $holder2 = array(); - if(isset($get['v']) && $get['v'] == "1:1") - { - foreach($this->onsale as $equal) - { - if($equal['wamt'] <= $equal['gamt']) - { - array_push($holder,$equal); - } - } - } - else - { - $holder = $this->onsale; - } - foreach($holder as $sale) - { - if(isset($get['s']) && isset($get['b'])) - { - if($sale['gtype'] == $get['s'] && $sale['wtype'] == $get['b']) - { - array_push($holder2,$sale); - } - } - else if(isset($get['s']) && !isset($get['b'])) - { - if($sale['gtype'] == $get['s']) - { - array_push($holder2,$sale); - } - } - else if(isset($get['b']) && !isset($get['s'])) - { - if($sale['wtype'] == $get['b']) - { - array_push($holder2,$sale); - } - } - else - { - $holder2 = $holder; - } - } - $this->onsale = $holder2; - } - else - { - $this->loadOnsale(); - } - } + private function filterNeed($get) + { + if(isset($get['v']) || isset($get['s']) || isset($get['b'])) + { + $holder = $holder2 = array(); + if(isset($get['v']) && $get['v'] == "1:1") + { + foreach($this->onsale as $equal) + { + if($equal['wamt'] <= $equal['gamt']) + { + array_push($holder,$equal); + } + } + } + else + { + $holder = $this->onsale; + } + foreach($holder as $sale) + { + if(isset($get['s']) && isset($get['b'])) + { + if($sale['gtype'] == $get['s'] && $sale['wtype'] == $get['b']) + { + array_push($holder2,$sale); + } + } + else if(isset($get['s']) && !isset($get['b'])) + { + if($sale['gtype'] == $get['s']) + { + array_push($holder2,$sale); + } + } + else if(isset($get['b']) && !isset($get['s'])) + { + if($sale['wtype'] == $get['b']) + { + array_push($holder2,$sale); + } + } + else + { + $holder2 = $holder; + } + } + $this->onsale = $holder2; + } + else + { + $this->loadOnsale(); + } + } - private function tradeResource($post) - { - global $session,$database,$village; - - $wwvillage = $database->getResourceLevel($village->wid); - if($wwvillage['f99t']!=40) - { - if($session->userinfo['gold'] >= 3) - { - //kijken of ze niet meer gs invoeren dan ze hebben - if($session->access == BANNED) - { + private function tradeResource($post) + { + global $session,$database,$village; + + $wwvillage = $database->getResourceLevel($village->wid); + if($wwvillage['f99t']!=40) + { + if($session->userinfo['gold'] >= 3) + { + //kijken of ze niet meer gs invoeren dan ze hebben + if($session->access == BANNED) + { header("Location: banned.php"); exit; - } - else if (($post['m2'][0]+$post['m2'][1]+$post['m2'][2]+$post['m2'][3])<=(round($village->awood)+round($village->aclay)+round($village->airon)+round($village->acrop))) - { + } + else if (($post['m2'][0]+$post['m2'][1]+$post['m2'][2]+$post['m2'][3])<=(round($village->awood)+round($village->aclay)+round($village->airon)+round($village->acrop))) + { $database->setVillageField( $village->wid, ["wood", "clay", "iron", "crop"], @@ -373,21 +373,21 @@ class Market $database->modifyGold($session->uid,3,0); header("Location: build.php?id=".$post['id']."&t=3&c");; exit; - } - else - { + } + else + { header("Location: build.php?id=".$post['id']."&t=3"); exit; - } - } - else - { + } + } + else + { header("Location: build.php?id=".$post['id']."&t=3"); exit; - } - } - } -}; + } + } + } +}; -$market = new Market; +$market = new Market; ?>