From 454106dfcec7c257f4ffecb38b89b03c01352b13 Mon Sep 17 00:00:00 2001 From: AL-Kateb Date: Thu, 4 Jan 2018 11:37:23 +0000 Subject: [PATCH 1/4] Removed a debugging echo --- Templates/Build/22_2.tpl | 1 - 1 file changed, 1 deletion(-) diff --git a/Templates/Build/22_2.tpl b/Templates/Build/22_2.tpl index c40ae2fc..ed850bfa 100644 --- a/Templates/Build/22_2.tpl +++ b/Templates/Build/22_2.tpl @@ -20,7 +20,6 @@ for($i=12;$i<=19;$i++) { //-- If available resources combined are not enough, remove NPC button $total_required = (int)(${'r'.$i}['wood'] + ${'r'.$i}['clay'] + ${'r'.$i}['iron'] + ${'r'.$i}['crop']); - echo "Total required is $total_required and total available is " . $village->atotal; if($session->userinfo['gold'] >= 3 && $building->getTypeLevel(17) >= 1 && $village->atotal >= $total_required) { echo "|\"NPC"; } From b8749af55b74ce6830f91c5493b3c5a6f6e34db6 Mon Sep 17 00:00:00 2001 From: AL-Kateb Date: Mon, 22 Jan 2018 13:47:00 +0000 Subject: [PATCH 2/4] Fixed issue #462 wrong troops training --- GameEngine/Database.php | 1 - GameEngine/Technology.php | 839 -------------------------------------- build.php | 1 - 3 files changed, 841 deletions(-) diff --git a/GameEngine/Database.php b/GameEngine/Database.php index 549d7045..34f8b4f5 100755 --- a/GameEngine/Database.php +++ b/GameEngine/Database.php @@ -3317,7 +3317,6 @@ class MYSQLi_DB implements IDbConnection { crop = IF(crop $sign $crop < 0, 0, IF(crop $sign $crop > maxcrop, maxcrop, crop $sign $crop)) WHERE wref = " . $vid ; - return mysqli_query( $this->dblink, $q); } diff --git a/GameEngine/Technology.php b/GameEngine/Technology.php index 223cc101..e69de29b 100755 --- a/GameEngine/Technology.php +++ b/GameEngine/Technology.php @@ -1,839 +0,0 @@ -U1,U2,U3,U4,U5,U6,U7,U8,U9,U10,U11,U12,U13,U14,U15,U16,U17,U18,U19,U20,U21,U22,U23,U24,U25,U26,U27,U28,U29,U30,U31,U32,U33,U34,U35,U36,U37,U38,U39,U40,U41,U42,U43,U44,U45,U46,U47,U48,U49,U50,U99,U0); - - public function grabAcademyRes() { - global $village; - $holder = array(); - foreach($village->researching as $research) { - if(substr($research['tech'],0,1) == "t"){ - array_push($holder,$research); - } - } - return $holder; - } - - public function getABUpgrades($type='a') { - global $village; - $holder = array(); - foreach($village->researching as $research) { - if(substr($research['tech'],0,1) == $type){ - array_push($holder,$research); - } - } - return $holder; - } - - public function isResearch($tech,$type) { - global $village; - if(count($village->researching) == 0) { - return false; - } - else { - switch($type) { - case 1: $string = "t"; break; - case 2: $string = "a"; break; - case 3: $string = "b"; break; - } - foreach($village->researching as $research) { - if($research['tech'] == $string.$tech) { - return true; - } - } - return false; - } - } - - public function procTech($post) { - if(isset($post['ft'])) { - switch($post['ft']) { - case "t1": - $this->procTrain($post); - break; - case "t3": - $this->procTrain($post,true); - break; - } - } - } - - public function procTechno($get) { - global $village; - if(isset($get['a'])) { - switch($village->resarray['f'.$get['id'].'t']) { - case 22: - $this->researchTech($get); - break; - case 13: - $this->upgradeArmour($get); - break; - case 12: - $this->upgradeSword($get); - break; - } - } - } - - public function getTrainingList($type) { - global $database,$village; - $trainingarray = $database->getTraining($village->wid); - $listarray = array(); - $barracks = array(1,2,3,11,12,13,14,21,22,31,32,33,34,35,36,37,38,39,40,41,42,43,44); - // fix by brainiac - THANK YOU - $greatbarracks = array(61,62,63,71,72,73,74,81,82,91,92,93,94,95,96,97,98,99,100,101,102,103,104); - $stables = array(4,5,6,15,16,23,24,25,26,45,46); - $greatstables = array(64,65,66,75,76,83,84,85,86,105,106); - $workshop = array(7,8,17,18,27,28,47,48); - $greatworkshop = array(67,68,77,78,87,88,107,108); - $residence = array(9,10,19,20,29,30,49,50); - $trapper = array(99); - if(count($trainingarray) > 0) { - foreach($trainingarray as $train) { - if($type == 1 && in_array($train['unit'],$barracks)) { - $train['name'] = $this->unarray[$train['unit']]; - array_push($listarray,$train); - } - if($type == 2 && in_array($train['unit'],$stables)) { - $train['name'] = $this->unarray[$train['unit']]; - array_push($listarray,$train); - } - if($type == 3 && in_array($train['unit'],$workshop)) { - $train['name'] = $this->unarray[$train['unit']]; - array_push($listarray,$train); - } - if($type == 4 && in_array($train['unit'],$residence)) { - $train['name'] = $this->unarray[$train['unit']]; - array_push($listarray,$train); - } - if($type == 5 && in_array($train['unit'],$greatbarracks)) { - $train['name'] = $this->unarray[$train['unit']-60]; - $train['unit'] -= 60; - array_push($listarray,$train); - } - if($type == 6 && in_array($train['unit'],$greatstables)) { - $train['name'] = $this->unarray[$train['unit']-60]; - $train['unit'] -= 60; - array_push($listarray,$train); - } - if($type == 7 && in_array($train['unit'],$greatworkshop)) { - $train['name'] = $this->unarray[$train['unit']-60]; - $train['unit'] -= 60; - array_push($listarray,$train); - } - if($type == 8 && in_array($train['unit'],$trapper)) { - $train['name'] = $this->unarray[$train['unit']]; - array_push($listarray,$train); - } - } - } - return $listarray; - } - - public function getUnitList() { - global $database,$village; - $unitarray = func_num_args() == 1? $database->getUnit(func_get_arg(0)) : $village->unitall; - $listArray = array(); - for($i=1;$iunarray);$i++) { - $holder = array(); - if(!empty($unitarray['u'.$i]) && $unitarray['u'.$i] != 0 && $unitarray['u'.$i] != "") { - $holder['id'] = $i; - $holder['name'] = $this->unarray[$i]; - $holder['amt'] = $unitarray['u'.$i]; - array_push($listArray,$holder); - } - } - - if($unitarray['hero'] != 0 && $unitarray['hero'] != "") { - $holder['id'] = "hero"; - $holder['name'] = $this->unarray[$i]; - $holder['amt'] = $unitarray['hero']; - array_push($listArray,$holder); - } - return $listArray; - } - - public function maxUnit($unit,$great=false) { - $unit = "u".$unit; - - global $village,$$unit,$database; - $unitarray = $$unit; - $res = $database->getVillage($village->wid); - if ($res['wood'] > $res['maxstore']){$res['wood'] = $res['maxstore'];} - if ($res['clay'] > $res['maxstore']){$res['clay'] = $res['maxstore'];} - if ($res['iron'] > $res['maxstore']){$res['iron'] = $res['maxstore'];} - if ($res['crop'] > $res['maxcrop']){$res['crop'] = $res['maxcrop'];} - $woodcalc = floor($res['wood'] / ($unitarray['wood'] * ($great?3:1))); - $claycalc = floor($res['clay'] / ($unitarray['clay'] * ($great?3:1))); - $ironcalc = floor($res['iron'] / ($unitarray['iron'] * ($great?3:1))); - if($res['crop']>0){ - $cropcalc = floor($res['crop'] / ($unitarray['crop'] * ($great?3:1))); - }else{ - $cropcalc = 0; - } - if($unit != "u99"){ - $popcalc = floor($village->getProd("crop")/$unitarray['pop']); - }else{ - $popcalc = $village->getProd("crop"); - } - return min($woodcalc,$claycalc,$ironcalc,$cropcalc); - } - - public function maxUnitPlus($unit,$great=false) { - $unit = "u".$unit; - - global $village,$$unit,$database; - $unitarray = $$unit; - $res = $database->getVillage($village->wid); - $totalres = $res['wood']+$res['clay']+$res['iron']+$res['crop']; - $totalresunit = ($unitarray['wood'] * ($great?3:1))+($unitarray['clay'] * ($great?3:1))+($unitarray['iron'] * ($great?3:1))+($unitarray['crop'] * ($great?3:1)); - $max =round($totalres/$totalresunit); - return $max; - } - - public function getUnits() { - global $database,$village; - if(func_num_args() == 1) { - $base = func_get_arg(0); - } - $ownunit = func_num_args() == 2? func_get_arg(0) : $database->getUnit($base); - $enforcementarray = func_num_args() == 2? func_get_arg(1) : $database->getEnforceVillage($base,0); - if(count($enforcementarray) > 0) { - foreach($enforcementarray as $enforce) { - for($i=1;$i<=50;$i++) { - $ownunit['u'.$i] += $enforce['u'.$i]; - } - } - } - return $ownunit; - } - - function getAllUnits($base,$InVillageOnly=False,$mode=0) { - global $database; - $ownunit = $database->getUnit($base); - $ownunit['u99'] -= $ownunit['u99']; - $ownunit['u99o'] -= $ownunit['u99o']; - $enforcementarray = $database->getEnforceVillage($base,0); - if(count($enforcementarray) > 0) { - foreach($enforcementarray as $enforce) { - for($i=1;$i<=50;$i++) { - $ownunit['u'.$i] += $enforce['u'.$i]; - } - $ownunit['hero'] += $enforce['hero']; - } - } - if ($mode==0) { - $enforceoasis=$database->getOasisEnforce($base,0); - if(count($enforceoasis) > 0) { - foreach($enforceoasis as $enforce) { - for($i=1;$i<=50;$i++) { - $ownunit['u'.$i] += $enforce['u'.$i]; - } - $ownunit['hero'] += $enforce['hero']; - } - } - $enforceoasis1=$database->getOasisEnforce($base,1); - if(count($enforceoasis1) > 0) { - foreach($enforceoasis1 as $enforce) { - for($i=1;$i<=50;$i++) { - $ownunit['u'.$i] += $enforce['u'.$i]; - } - $ownunit['hero'] += $enforce['hero']; - } - } - - $prisoners = $database->getPrisoners($base,1); - if(!empty($prisoners)) { - foreach($prisoners as $prisoner){ - $owner = $database->getVillageField($base,"owner"); - $ownertribe = $database->getUserField($owner,"tribe",0); - $start = ($ownertribe-1)*10+1; - $end = ($ownertribe*10); - for($i=$start;$i<=$end;$i++) { - $j = $i-$start+1; - $ownunit['u'.$i] += $prisoner['t'.$j]; - } - $ownunit['hero'] += $prisoner['t11']; - } - } - } - if(!$InVillageOnly) { - $movement = $database->getVillageMovement($base); - if(!empty($movement)) { - for($i=1;$i<=50;$i++) { - if (!isset($ownunit['u'.$i])) { - $ownunit['u'.$i] = 0; - } - $ownunit['u'.$i] += (isset($movement['u'.$i]) ? $movement['u'.$i] : 0); - } - - if (!isset($ownunit['hero'])) { - $ownunit['hero'] = 0; - } - $ownunit['hero'] += (isset($movement['hero']) ? $movement['hero'] : 0); - } - } - return $ownunit; - } - - public function meetTRequirement($unit) { - global $session; - switch($unit) { - case 1: - if($session->tribe == 1) { return true; } else { return false; } - break; - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - if($this->getTech($unit) && $session->tribe == 1) { return true; } else { return false; } - break; - case 10: - if($session->tribe == 1) { return true; } else { return false; } - break; - case 11: - if($session->tribe == 2) { return true; } else { return false; } - break; - case 12: - case 13: - case 14: - case 15: - case 16: - case 17: - case 18: - if($session->tribe == 2 && $this->getTech($unit)) { return true; } else { return false; } - break; - case 20: - if($session->tribe == 2) { return true; } else { return false; } - break; - case 21: - if($session->tribe == 3) { return true; } else { return false; } - break; - case 22: - case 23: - case 24: - case 25: - case 26: - case 27: - case 28: - if($session->tribe == 3 && $this->getTech($unit)) { return true; } else { return false; } - break; - case 30: - if($session->tribe == 3) { return true; } else { return false; } - break; - case 31: - if($session->tribe == 4) { return true; } else { return false; } - break; - case 32: - case 33: - case 34: - case 35: - case 36: - case 37: - case 38: - if($session->tribe == 4 && $this->getTech($unit)) { return true; } else { return false; } - break; - case 40: - if($session->tribe == 4) { return true; } else { return false; } - break; - case 41: - if($session->tribe == 5) { return true; } else { return false; } - break; - case 42: - case 43: - case 44: - case 45: - case 46: - case 47: - case 48: - if($session->tribe == 5 && $this->getTech($unit)) { return true; } else { return false; } - break; - case 50: - if($session->tribe == 5) { return true; } else { return false; } - break; - } - } - - public function getTech($tech) { - global $village; - return (isset($village->techarray['t'.$tech]) && $village->techarray['t'.$tech] == 1); - } - - private function procTrain($post,$great=false) { - global $session; - if($session->access != BANNED){ - // first of all, check if we're not trying to train chieftain - // and settlers together - which we cannot, since that can result - // in 1 chieftain and 3 settlers, then conquering a village, then - // founding a new one, all with only 1 available slot - if ( - !( - (!empty($post['t9']) && !empty($post['t10'])) || - (!empty($post['t19']) && !empty($post['t20'])) || - (!empty($post['t29']) && !empty($post['t30'])) || - (!empty($post['t39']) && !empty($post['t40'])) || - (!empty($post['t49']) && !empty($post['t50'])) - ) - ) { - $start = ( $session->tribe - 1 ) * 10 + 1; - $end = ( $session->tribe * 10 ); - for ( $i = $start; $i <= ( $end ); $i ++ ) { - if ( isset( $post[ 't' . $i ] ) && $post[ 't' . $i ] != 0 ) { - $amt = $post[ 't' . $i ]; - $amt = intval( $amt ); - if ( $amt < 0 ) { - $amt = 1; - } - $this->trainUnit( $i, $amt, $great ); - } - } - if ( $session->tribe == 3 ) { - if ( isset( $post['t99'] ) && $post['t99'] != 0 ) { - $amt = $post['t99']; - $amt = intval( $amt ); - if ( $amt < 0 ) { - $amt = 1; - } - $this->trainUnit( 99, $amt, $great ); - } - } - header( "Location: build.php?id=" . $post['id'] ); - exit; - } - }else{ - header("Location: banned.php"); - exit; - } - } - - public function getUpkeep($array,$type,$vid=0,$prisoners=0) { - global $database, $session, $village; - - if ( $vid == 0 ) { - $vid = $village->wid; - } - - $buildarray = array(); - $buildarray = $database->getResourceLevel( $vid ); - $upkeep = 0; - - switch ( $type ) { - case 0: - $start = 1; - $end = 50; - break; - case 1: - $start = 1; - $end = 10; - break; - case 2: - $start = 11; - $end = 20; - break; - case 3: - $start = 21; - $end = 30; - break; - case 4: - $start = 31; - $end = 40; - break; - case 5: - $start = 41; - $end = 50; - break; - } - - for ( $j = 19; $j <= 38; $j ++ ) { - if ( $buildarray[ 'f' . $j . 't' ] == 41 ) { - $horsedrinking = $j; - break; - } - } - - for ( $i = $start; $i <= $end; $i ++ ) { - $k = $i - $start + 1; - $unit = "u" . $i; - $unit2 = "t" . $k; - global $$unit; - $dataarray = $$unit; - if ( $prisoners == 0 ) { - if ( isset( $horsedrinking ) ) { - if ( ( $i == 4 && $buildarray[ 'f' . $horsedrinking ] >= 10 ) - || ( $i == 5 && $buildarray[ 'f' . $horsedrinking ] >= 15 ) - || ( $i == 6 && $buildarray[ 'f' . $horsedrinking ] == 20 ) - ) { - $upkeep += (( $dataarray['pop'] - 1 ) * $array[ $unit ]); - } else { - $upkeep += ($dataarray['pop'] * $array[ $unit ]); - } - } else { - $upkeep += ($dataarray['pop'] * $array[ $unit ]); - } - } else { - if ( isset( $horsedrinking ) ) { - if ( ( $i == 4 && $buildarray[ 'f' . $horsedrinking ] >= 10 ) - || ( $i == 5 && $buildarray[ 'f' . $horsedrinking ] >= 15 ) - || ( $i == 6 && $buildarray[ 'f' . $horsedrinking ] == 20 ) - ) { - $upkeep += (( $dataarray['pop'] - 1 ) * $array[ $unit2 ]); - } else { - $upkeep += ($dataarray['pop'] * $array[ $unit2 ]); - } - } else { - $upkeep += ($dataarray['pop'] * $array[ $unit2 ]); - } - } - } - - // $unit = "hero"; - // global $$unit; - // $dataarray = $$unit; - if ( $prisoners == 0 ) { - if ( ! isset( $array['hero'] ) ) { - $array['hero'] = 0; - } - $upkeep += $array['hero'] * 6; - } else { - if ( ! isset( $array['t11'] ) ) { - $array['t11'] = 0; - } - $upkeep += $array['t11'] * 6; - } - - $artefact = count( $database->getOwnUniqueArtefactInfo2( $session->uid, 4, 3, 0 ) ); - $artefact1 = count( $database->getOwnUniqueArtefactInfo2( $vid, 4, 1, 1 ) ); - $artefact2 = count( $database->getOwnUniqueArtefactInfo2( $session->uid, 4, 2, 0 ) ); - - if ( $artefact > 0 ) { - $upkeep /= 2; - $upkeep = round( $upkeep ); - } else if ( $artefact1 > 0 ) { - $upkeep /= 2; - $upkeep = round( $upkeep ); - } else if ( $artefact2 > 0 ) { - $upkeep /= 4; - $upkeep = round( $upkeep ); - $upkeep *= 3; - } - - $foolartefact = $database->getFoolArtefactInfo( 4, $vid, $session->uid ); - - if ( count( $foolartefact ) > 0 ) { - var_dump($foolartefact); - foreach ( $foolartefact as $arte ) { - if ( $arte['bad_effect'] == 1 ) { - $upkeep *= $arte['effect2']; - } else { - $upkeep /= $arte['effect2']; - $upkeep = round( $upkeep ); - } - } - } - - return $upkeep; - } - -private function trainUnit($unit,$amt,$great=false) { - global $session,$database,${'u'.$unit},$building,$village,$bid19,$bid20,$bid21,$bid25,$bid26,$bid29,$bid30,$bid36,$bid41,$bid42; - - if($this->getTech($unit) || $unit%10 <= 1 || $unit == 99) { - $footies = array(1,2,3,11,12,13,14,21,22,31,32,33,34,41,42,43,44); - $calvary = array(4,5,6,15,16,23,24,25,26,35,36,45,46); - $workshop = array(7,8,17,18,27,28,37,38,47,48); - $special = array(9,10,19,20,29,30,39,40,49,50); - $trapper = array(99); - if(in_array($unit,$footies)) { - if($great) { - $each = round(($bid29[$building->getTypeLevel(29)]['attri'] / 100) * ${'u'.$unit}['time'] / SPEED); - } else { - $each = round(($bid19[$building->getTypeLevel(19)]['attri'] / 100) * ${'u'.$unit}['time'] / SPEED); - } - } - if(in_array($unit,$calvary)) { - if($great) { - $each = round(($bid30[$building->getTypeLevel(30)]['attri'] * ($building->getTypeLevel(41)>=1?(1/$bid41[$building->getTypeLevel(41)]['attri']):1) / 100) * ${'u'.$unit}['time'] / SPEED); - } else { - $each = round(($bid20[$building->getTypeLevel(20)]['attri'] * ($building->getTypeLevel(41)>=1?(1/$bid41[$building->getTypeLevel(41)]['attri']):1) / 100) * ${'u'.$unit}['time'] / SPEED); - } - } - if(in_array($unit,$workshop)) { - if($great) { - $each = round(($bid42[$building->getTypeLevel(42)]['attri'] / 100) * ${'u'.$unit}['time'] / SPEED); - } else { - $each = round(($bid21[$building->getTypeLevel(21)]['attri'] / 100) * ${'u'.$unit}['time'] / SPEED); - } - } - if(in_array($unit,$special)) { - if($building->getTypeLevel(25) > 0){ - $each = round(($bid25[$building->getTypeLevel(25)]['attri'] / 100) * ${'u'.$unit}['time'] / SPEED); - } else { - $each = round(($bid26[$building->getTypeLevel(26)]['attri'] / 100) * ${'u'.$unit}['time'] / SPEED); - } - } - if(in_array($unit,$trapper)) { - $each = round(($bid19[$building->getTypeLevel(36)]['attri'] / 100) * ${'u'.$unit}['time'] / SPEED); - } - if($unit%10 == 0 || $unit%10 == 9 && $unit != 99) { - $slots = $database->getAvailableExpansionTraining(); - if($unit%10 == 0 && $slots['settlers'] <= $amt) { $amt = $slots['settlers']; } - if($unit%10 == 9 && $slots['chiefs'] <= $amt) { $amt = $slots['chiefs']; } - } else { - if($unit != 99){ - if($this->maxUnit($unit,$great) < $amt) { - $amt = 0; - } - }else{ - $trainlist = $this->getTrainingList(8); - foreach($trainlist as $train) { - $train_amt += $train['amt']; - } - $max = 0; - for($i=19;$i<41;$i++){ - if($village->resarray['f'.$i.'t'] == 36){ - $max += $bid36[$village->resarray['f'.$i]]['attri']*TRAPPER_CAPACITY; - } - } - $max1 = $max - ($village->unitarray['u99'] + $train_amt); - if($max1 < $amt) { - $amt = 0; - } - } - } - $wood = ${'u'.$unit}['wood'] * $amt * ($great?3:1); - $clay = ${'u'.$unit}['clay'] * $amt * ($great?3:1); - $iron = ${'u'.$unit}['iron'] * $amt * ($great?3:1); - $crop = ${'u'.$unit}['crop'] * $amt * ($great?3:1); - $each = ($each == 0) ? 1 : $each; - $time = $each*$amt; - if($database->modifyResource($village->wid,$wood,$clay,$iron,$crop,0) && $amt > 0) { - $database->trainUnit($village->wid,$unit+($great?60:0),$amt,${'u'.$unit}['pop'],$each,time()+$time,0); - } - } - } - - public function meetRRequirement($tech) { - global $session,$building; - switch($tech) { - case 2: - if($building->getTypeLevel(22) >= 1 && $building->getTypeLevel(13) >= 1) { return true; } else { return false; } - break; - case 3: - if($building->getTypeLevel(22) >= 5 && $building->getTypeLevel(12) >= 1) { return true; } else { return false; } - break; - case 4: - case 23: - if($building->getTypeLevel(22) >= 5 && $building->getTypeLevel(20) >= 1) { return true; } else { return false; } - break; - case 5: - case 25: - if($building->getTypeLevel(22) >= 5 && $building->getTypeLevel(20) >= 5) { return true; } else { return false; } - break; - case 6: - if($building->getTypeLevel(22) >= 15 && $building->getTypeLevel(20) >= 10) { return true; } else { return false; } - break; - case 9: - case 29: - if($building->getTypeLevel(22) >= 20 && $building->getTypeLevel(16) >= 10) { return true; } else { return false; } - break; - case 12: - case 32: - case 42: - if($building->getTypeLevel(22) >= 1 && $building->getTypeLevel(19) >= 3) { return true; } else { return false; } - break; - case 13: - case 33: - case 43: - if($building->getTypeLevel(22) >= 3 && $building->getTypeLevel(12) >= 1) { return true; } else { return false; } - break; - case 14: - case 34: - case 44: - if($building->getTypeLevel(22) >= 1 && $building->getTypeLevel(15) >= 5) { return true; } else { return false; } - break; - case 15: - case 35: - case 45: - if($building->getTypeLevel(22) >= 1 && $building->getTypeLevel(20) >= 3) { return true; } else { return false; } - break; - case 16: - case 26: - case 36: - case 46: - if($building->getTypeLevel(22) >= 15 && $building->getTypeLevel(20) >= 10) { return true; } else { return false; } - break; - case 7: - case 17: - case 27: - case 37: - case 47: - if($building->getTypeLevel(22) >= 10 && $building->getTypeLevel(21) >= 1) { return true; } else { return false; } - break; - case 8: - case 18: - case 28: - case 38: - case 48: - if($building->getTypeLevel(22) >= 15 && $building->getTypeLevel(21) >= 10) { return true; } else { return false; } - break; - case 19: - case 39: - case 49: - if($building->getTypeLevel(22) >= 20 && $building->getTypeLevel(16) >= 5) { return true; } else { return false; } - break; - case 22: - if($building->getTypeLevel(22) >= 3 && $building->getTypeLevel(12) >= 1) { return true; } else { return false; } - break; - case 24: - if($building->getTypeLevel(22) >= 5 && $building->getTypeLevel(20) >= 3) { return true; } else { return false; } - break; - } - } - - private function researchTech($get) { - //global $database,$session,${'r'.$get['a']},$village,$logging; - global $database,$session,${'r'.$get['a']},$bid22,$building,$village,$logging; - if($this->meetRRequirement($get['a']) && $get['c'] == $session->mchecker) { - $data = ${'r'.$get['a']}; - $time = time() + round(($data['time'] * ($bid22[$building->getTypeLevel(22)]['attri'] / 100))/SPEED); - //$time = time() + round($data['time']/SPEED); - $database->modifyResource($village->wid,$data['wood'],$data['clay'],$data['iron'],$data['crop'],0); - $database->addResearch($village->wid,"t".$get['a'],$time); - $logging->addTechLog($village->wid,"t".$get['a'],1); - } - $session->changeChecker(); - header("Location: build.php?id=".$get['id']); - exit; - } - - private function upgradeSword($get) { - global $database,$session,$bid12,$building,$village,$logging; - $ABTech = $database->getABTech($village->wid); - $CurrentTech = $ABTech["b".$get['a']]; - $unit = ($session->tribe-1)*10+intval($get['a']); - if(($this->getTech($unit) || ($unit % 10) == 1) && ($CurrentTech < $building->getTypeLevel(12)) && $get['c'] == $session->mchecker) { - global ${'ab'.strval($unit)}; - $data = ${'ab'.strval($unit)}; - $time = time() + round(($data[$CurrentTech+1]['time'] * ($bid12[$building->getTypeLevel(12)]['attri'] / 100))/SPEED); - if ($database->modifyResource($village->wid,$data[$CurrentTech+1]['wood'],$data[$CurrentTech+1]['clay'],$data[$CurrentTech+1]['iron'],$data[$CurrentTech+1]['crop'],0)) { - $database->addResearch($village->wid,"b".$get['a'],$time); - $logging->addTechLog($village->wid,"b".$get['a'],$CurrentTech+1); - } - } - $session->changeChecker(); - header("Location: build.php?id=".$get['id']); - exit; - } - - private function upgradeArmour($get) { - global $database,$session,$bid13,$building,$village,$logging; - $ABTech = $database->getABTech($village->wid); - $CurrentTech = $ABTech["a".$get['a']]; - $unit = ($session->tribe-1)*10+intval($get['a']); - if(($this->getTech($unit) || ($unit % 10) == 1) && ($CurrentTech < $building->getTypeLevel(13)) && $get['c'] == $session->mchecker) { - global ${'ab'.strval($unit)}; - $data = ${'ab'.strval($unit)}; - $time = time() + round(($data[$CurrentTech+1]['time'] * ($bid13[$building->getTypeLevel(13)]['attri'] / 100))/SPEED); - if ($database->modifyResource($village->wid,$data[$CurrentTech+1]['wood'],$data[$CurrentTech+1]['clay'],$data[$CurrentTech+1]['iron'],$data[$CurrentTech+1]['crop'],0)) { - $database->addResearch($village->wid,"a".$get['a'],$time); - $logging->addTechLog($village->wid,"a".$get['a'],$CurrentTech+1); - } - } - $session->changeChecker(); - header("Location: build.php?id=".$get['id']); - exit; - } - - public function getUnitName($i) { - return $this->unarray[$i]; - } - - public function finishTech() { - global $database,$village; - $q = "UPDATE ".TB_PREFIX."research SET timestamp=".(time()-1)." WHERE vref = ".(int) $village->wid; - $result = $database->query($q); - return mysqli_affected_rows($database->dblink); - } - - public function calculateAvaliable($id,$resarray=array()) { - global $village,$generator,${'r'.$id}; - if(count($resarray)==0) { - $resarray['wood'] = ${'r'.$id}['wood']; - $resarray['clay'] = ${'r'.$id}['clay']; - $resarray['iron'] = ${'r'.$id}['iron']; - $resarray['crop'] = ${'r'.$id}['crop']; - } - $rwtime = ($resarray['wood']-$village->awood) / $village->getProd("wood") * 3600; - $rcltime = ($resarray['clay']-$village->aclay) / $village->getProd("clay") * 3600; - $ritime = ($resarray['iron']-$village->airon) / $village->getProd("iron") * 3600; - $rctime = ($resarray['crop']-$village->acrop) / $village->getProd("crop") * 3600; - if($village->getProd("crop") >= 0) { - $reqtime = max($rwtime,$rcltime,$ritime,$rctime) + time(); - } else { - $reqtime = max($rwtime,$rcltime,$ritime); - if($reqtime > $rctime) { - $reqtime = 0; - } else { - $reqtime += time(); - } - } - return $generator->procMtime($reqtime); - } - - public function checkReinf($id, $use_cache = true) { - global $database; - $enforce=$database->getEnforceArray($id, 0, $use_cache); - $fail=0; - - for ($i=1; $i<50; $i++) { - if($enforce['u'.$i.'']>0){ - $fail=1; - } - } - - if ($enforce['hero']>0) $fail=1; - if($fail==0){ - $database->deleteReinf($id); - } - - } - -} -$technology = new Technology; -?> diff --git a/build.php b/build.php index 101b1a72..7e6495a0 100644 --- a/build.php +++ b/build.php @@ -46,7 +46,6 @@ if ( isset( $_GET['id'] ) ) { if ( ! ctype_digit( preg_replace( "/[^a-zA-Z0-9_-]/", "", $_GET['id'] ) ) ) { $_GET['id'] = "1"; } - $checkBuildings = array( 0, 16, 17, 25, 26, 27 ); if ( $_GET['id'] < 19 || ( isset( $_GET['gid'] ) && ! in_array( $_GET['gid'], $checkBuildings ) ) ) { From 7f7d6f1f63d5cb3e03ef6c8cc1273aaed22253e9 Mon Sep 17 00:00:00 2001 From: AL-Kateb Date: Mon, 22 Jan 2018 13:50:00 +0000 Subject: [PATCH 3/4] Restored truncated Technology.php --- GameEngine/Technology.php | 839 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 839 insertions(+) diff --git a/GameEngine/Technology.php b/GameEngine/Technology.php index e69de29b..7b10bed4 100755 --- a/GameEngine/Technology.php +++ b/GameEngine/Technology.php @@ -0,0 +1,839 @@ +U1,U2,U3,U4,U5,U6,U7,U8,U9,U10,U11,U12,U13,U14,U15,U16,U17,U18,U19,U20,U21,U22,U23,U24,U25,U26,U27,U28,U29,U30,U31,U32,U33,U34,U35,U36,U37,U38,U39,U40,U41,U42,U43,U44,U45,U46,U47,U48,U49,U50,U99,U0); + + public function grabAcademyRes() { + global $village; + $holder = array(); + foreach($village->researching as $research) { + if(substr($research['tech'],0,1) == "t"){ + array_push($holder,$research); + } + } + return $holder; + } + + public function getABUpgrades($type='a') { + global $village; + $holder = array(); + foreach($village->researching as $research) { + if(substr($research['tech'],0,1) == $type){ + array_push($holder,$research); + } + } + return $holder; + } + + public function isResearch($tech,$type) { + global $village; + if(count($village->researching) == 0) { + return false; + } + else { + switch($type) { + case 1: $string = "t"; break; + case 2: $string = "a"; break; + case 3: $string = "b"; break; + } + foreach($village->researching as $research) { + if($research['tech'] == $string.$tech) { + return true; + } + } + return false; + } + } + + public function procTech($post) { + if(isset($post['ft'])) { + switch($post['ft']) { + case "t1": + $this->procTrain($post); + break; + case "t3": + $this->procTrain($post,true); + break; + } + } + } + + public function procTechno($get) { + global $village; + if(isset($get['a'])) { + switch($village->resarray['f'.$get['id'].'t']) { + case 22: + $this->researchTech($get); + break; + case 13: + $this->upgradeArmour($get); + break; + case 12: + $this->upgradeSword($get); + break; + } + } + } + + public function getTrainingList($type) { + global $database,$village; + $trainingarray = $database->getTraining($village->wid); + $listarray = array(); + $barracks = array(1,2,3,11,12,13,14,21,22,31,32,33,34,35,36,37,38,39,40,41,42,43,44); + // fix by brainiac - THANK YOU + $greatbarracks = array(61,62,63,71,72,73,74,81,82,91,92,93,94,95,96,97,98,99,100,101,102,103,104); + $stables = array(4,5,6,15,16,23,24,25,26,45,46); + $greatstables = array(64,65,66,75,76,83,84,85,86,105,106); + $workshop = array(7,8,17,18,27,28,47,48); + $greatworkshop = array(67,68,77,78,87,88,107,108); + $residence = array(9,10,19,20,29,30,49,50); + $trapper = array(99); + if(count($trainingarray) > 0) { + foreach($trainingarray as $train) { + if($type == 1 && in_array($train['unit'],$barracks)) { + $train['name'] = $this->unarray[$train['unit']]; + array_push($listarray,$train); + } + if($type == 2 && in_array($train['unit'],$stables)) { + $train['name'] = $this->unarray[$train['unit']]; + array_push($listarray,$train); + } + if($type == 3 && in_array($train['unit'],$workshop)) { + $train['name'] = $this->unarray[$train['unit']]; + array_push($listarray,$train); + } + if($type == 4 && in_array($train['unit'],$residence)) { + $train['name'] = $this->unarray[$train['unit']]; + array_push($listarray,$train); + } + if($type == 5 && in_array($train['unit'],$greatbarracks)) { + $train['name'] = $this->unarray[$train['unit']-60]; + $train['unit'] -= 60; + array_push($listarray,$train); + } + if($type == 6 && in_array($train['unit'],$greatstables)) { + $train['name'] = $this->unarray[$train['unit']-60]; + $train['unit'] -= 60; + array_push($listarray,$train); + } + if($type == 7 && in_array($train['unit'],$greatworkshop)) { + $train['name'] = $this->unarray[$train['unit']-60]; + $train['unit'] -= 60; + array_push($listarray,$train); + } + if($type == 8 && in_array($train['unit'],$trapper)) { + $train['name'] = $this->unarray[$train['unit']]; + array_push($listarray,$train); + } + } + } + return $listarray; + } + + public function getUnitList() { + global $database,$village; + $unitarray = func_num_args() == 1? $database->getUnit(func_get_arg(0)) : $village->unitall; + $listArray = array(); + for($i=1;$iunarray);$i++) { + $holder = array(); + if(!empty($unitarray['u'.$i]) && $unitarray['u'.$i] != 0 && $unitarray['u'.$i] != "") { + $holder['id'] = $i; + $holder['name'] = $this->unarray[$i]; + $holder['amt'] = $unitarray['u'.$i]; + array_push($listArray,$holder); + } + } + + if($unitarray['hero'] != 0 && $unitarray['hero'] != "") { + $holder['id'] = "hero"; + $holder['name'] = $this->unarray[$i]; + $holder['amt'] = $unitarray['hero']; + array_push($listArray,$holder); + } + return $listArray; + } + + public function maxUnit($unit,$great=false) { + $unit = "u".$unit; + + global $village,$$unit,$database; + $unitarray = $$unit; + $res = $database->getVillage($village->wid, 0, false); + if ($res['wood'] > $res['maxstore']){$res['wood'] = $res['maxstore'];} + if ($res['clay'] > $res['maxstore']){$res['clay'] = $res['maxstore'];} + if ($res['iron'] > $res['maxstore']){$res['iron'] = $res['maxstore'];} + if ($res['crop'] > $res['maxcrop']){$res['crop'] = $res['maxcrop'];} + $woodcalc = floor($res['wood'] / ($unitarray['wood'] * ($great?3:1))); + $claycalc = floor($res['clay'] / ($unitarray['clay'] * ($great?3:1))); + $ironcalc = floor($res['iron'] / ($unitarray['iron'] * ($great?3:1))); + if($res['crop']>0){ + $cropcalc = floor($res['crop'] / ($unitarray['crop'] * ($great?3:1))); + }else{ + $cropcalc = 0; + } + if($unit != "u99"){ + $popcalc = floor($village->getProd("crop")/$unitarray['pop']); + }else{ + $popcalc = $village->getProd("crop"); + } + return min($woodcalc,$claycalc,$ironcalc,$cropcalc); + } + + public function maxUnitPlus($unit,$great=false) { + $unit = "u".$unit; + + global $village,$$unit,$database; + $unitarray = $$unit; + $res = $database->getVillage($village->wid); + $totalres = $res['wood']+$res['clay']+$res['iron']+$res['crop']; + $totalresunit = ($unitarray['wood'] * ($great?3:1))+($unitarray['clay'] * ($great?3:1))+($unitarray['iron'] * ($great?3:1))+($unitarray['crop'] * ($great?3:1)); + $max =round($totalres/$totalresunit); + return $max; + } + + public function getUnits() { + global $database,$village; + if(func_num_args() == 1) { + $base = func_get_arg(0); + } + $ownunit = func_num_args() == 2? func_get_arg(0) : $database->getUnit($base); + $enforcementarray = func_num_args() == 2? func_get_arg(1) : $database->getEnforceVillage($base,0); + if(count($enforcementarray) > 0) { + foreach($enforcementarray as $enforce) { + for($i=1;$i<=50;$i++) { + $ownunit['u'.$i] += $enforce['u'.$i]; + } + } + } + return $ownunit; + } + + function getAllUnits($base,$InVillageOnly=False,$mode=0) { + global $database; + $ownunit = $database->getUnit($base); + $ownunit['u99'] -= $ownunit['u99']; + $ownunit['u99o'] -= $ownunit['u99o']; + $enforcementarray = $database->getEnforceVillage($base,0); + if(count($enforcementarray) > 0) { + foreach($enforcementarray as $enforce) { + for($i=1;$i<=50;$i++) { + $ownunit['u'.$i] += $enforce['u'.$i]; + } + $ownunit['hero'] += $enforce['hero']; + } + } + if ($mode==0) { + $enforceoasis=$database->getOasisEnforce($base,0); + if(count($enforceoasis) > 0) { + foreach($enforceoasis as $enforce) { + for($i=1;$i<=50;$i++) { + $ownunit['u'.$i] += $enforce['u'.$i]; + } + $ownunit['hero'] += $enforce['hero']; + } + } + $enforceoasis1=$database->getOasisEnforce($base,1); + if(count($enforceoasis1) > 0) { + foreach($enforceoasis1 as $enforce) { + for($i=1;$i<=50;$i++) { + $ownunit['u'.$i] += $enforce['u'.$i]; + } + $ownunit['hero'] += $enforce['hero']; + } + } + + $prisoners = $database->getPrisoners($base,1); + if(!empty($prisoners)) { + foreach($prisoners as $prisoner){ + $owner = $database->getVillageField($base,"owner"); + $ownertribe = $database->getUserField($owner,"tribe",0); + $start = ($ownertribe-1)*10+1; + $end = ($ownertribe*10); + for($i=$start;$i<=$end;$i++) { + $j = $i-$start+1; + $ownunit['u'.$i] += $prisoner['t'.$j]; + } + $ownunit['hero'] += $prisoner['t11']; + } + } + } + if(!$InVillageOnly) { + $movement = $database->getVillageMovement($base); + if(!empty($movement)) { + for($i=1;$i<=50;$i++) { + if (!isset($ownunit['u'.$i])) { + $ownunit['u'.$i] = 0; + } + $ownunit['u'.$i] += (isset($movement['u'.$i]) ? $movement['u'.$i] : 0); + } + + if (!isset($ownunit['hero'])) { + $ownunit['hero'] = 0; + } + $ownunit['hero'] += (isset($movement['hero']) ? $movement['hero'] : 0); + } + } + return $ownunit; + } + + public function meetTRequirement($unit) { + global $session; + switch($unit) { + case 1: + if($session->tribe == 1) { return true; } else { return false; } + break; + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + if($this->getTech($unit) && $session->tribe == 1) { return true; } else { return false; } + break; + case 10: + if($session->tribe == 1) { return true; } else { return false; } + break; + case 11: + if($session->tribe == 2) { return true; } else { return false; } + break; + case 12: + case 13: + case 14: + case 15: + case 16: + case 17: + case 18: + if($session->tribe == 2 && $this->getTech($unit)) { return true; } else { return false; } + break; + case 20: + if($session->tribe == 2) { return true; } else { return false; } + break; + case 21: + if($session->tribe == 3) { return true; } else { return false; } + break; + case 22: + case 23: + case 24: + case 25: + case 26: + case 27: + case 28: + if($session->tribe == 3 && $this->getTech($unit)) { return true; } else { return false; } + break; + case 30: + if($session->tribe == 3) { return true; } else { return false; } + break; + case 31: + if($session->tribe == 4) { return true; } else { return false; } + break; + case 32: + case 33: + case 34: + case 35: + case 36: + case 37: + case 38: + if($session->tribe == 4 && $this->getTech($unit)) { return true; } else { return false; } + break; + case 40: + if($session->tribe == 4) { return true; } else { return false; } + break; + case 41: + if($session->tribe == 5) { return true; } else { return false; } + break; + case 42: + case 43: + case 44: + case 45: + case 46: + case 47: + case 48: + if($session->tribe == 5 && $this->getTech($unit)) { return true; } else { return false; } + break; + case 50: + if($session->tribe == 5) { return true; } else { return false; } + break; + } + } + + public function getTech($tech) { + global $village; + return (isset($village->techarray['t'.$tech]) && $village->techarray['t'.$tech] == 1); + } + + private function procTrain($post,$great=false) { + global $session; + if($session->access != BANNED){ + // first of all, check if we're not trying to train chieftain + // and settlers together - which we cannot, since that can result + // in 1 chieftain and 3 settlers, then conquering a village, then + // founding a new one, all with only 1 available slot + if ( + !( + (!empty($post['t9']) && !empty($post['t10'])) || + (!empty($post['t19']) && !empty($post['t20'])) || + (!empty($post['t29']) && !empty($post['t30'])) || + (!empty($post['t39']) && !empty($post['t40'])) || + (!empty($post['t49']) && !empty($post['t50'])) + ) + ) { + $start = ( $session->tribe - 1 ) * 10 + 1; + $end = ( $session->tribe * 10 ); + for ( $i = $start; $i <= ( $end ); $i ++ ) { + if ( isset( $post[ 't' . $i ] ) && $post[ 't' . $i ] != 0 ) { + $amt = $post[ 't' . $i ]; + $amt = intval( $amt ); + if ( $amt < 0 ) { + $amt = 1; + } + $this->trainUnit( $i, $amt, $great ); + } + } + if ( $session->tribe == 3 ) { + if ( isset( $post['t99'] ) && $post['t99'] != 0 ) { + $amt = $post['t99']; + $amt = intval( $amt ); + if ( $amt < 0 ) { + $amt = 1; + } + $this->trainUnit( 99, $amt, $great ); + } + } + header( "Location: build.php?id=" . $post['id'] ); + exit; + } + }else{ + header("Location: banned.php"); + exit; + } + } + + public function getUpkeep($array,$type,$vid=0,$prisoners=0) { + global $database, $session, $village; + + if ( $vid == 0 ) { + $vid = $village->wid; + } + + $buildarray = array(); + $buildarray = $database->getResourceLevel( $vid ); + $upkeep = 0; + + switch ( $type ) { + case 0: + $start = 1; + $end = 50; + break; + case 1: + $start = 1; + $end = 10; + break; + case 2: + $start = 11; + $end = 20; + break; + case 3: + $start = 21; + $end = 30; + break; + case 4: + $start = 31; + $end = 40; + break; + case 5: + $start = 41; + $end = 50; + break; + } + + for ( $j = 19; $j <= 38; $j ++ ) { + if ( $buildarray[ 'f' . $j . 't' ] == 41 ) { + $horsedrinking = $j; + break; + } + } + + for ( $i = $start; $i <= $end; $i ++ ) { + $k = $i - $start + 1; + $unit = "u" . $i; + $unit2 = "t" . $k; + global $$unit; + $dataarray = $$unit; + if ( $prisoners == 0 ) { + if ( isset( $horsedrinking ) ) { + if ( ( $i == 4 && $buildarray[ 'f' . $horsedrinking ] >= 10 ) + || ( $i == 5 && $buildarray[ 'f' . $horsedrinking ] >= 15 ) + || ( $i == 6 && $buildarray[ 'f' . $horsedrinking ] == 20 ) + ) { + $upkeep += (( $dataarray['pop'] - 1 ) * $array[ $unit ]); + } else { + $upkeep += ($dataarray['pop'] * $array[ $unit ]); + } + } else { + $upkeep += ($dataarray['pop'] * $array[ $unit ]); + } + } else { + if ( isset( $horsedrinking ) ) { + if ( ( $i == 4 && $buildarray[ 'f' . $horsedrinking ] >= 10 ) + || ( $i == 5 && $buildarray[ 'f' . $horsedrinking ] >= 15 ) + || ( $i == 6 && $buildarray[ 'f' . $horsedrinking ] == 20 ) + ) { + $upkeep += (( $dataarray['pop'] - 1 ) * $array[ $unit2 ]); + } else { + $upkeep += ($dataarray['pop'] * $array[ $unit2 ]); + } + } else { + $upkeep += ($dataarray['pop'] * $array[ $unit2 ]); + } + } + } + + // $unit = "hero"; + // global $$unit; + // $dataarray = $$unit; + if ( $prisoners == 0 ) { + if ( ! isset( $array['hero'] ) ) { + $array['hero'] = 0; + } + $upkeep += $array['hero'] * 6; + } else { + if ( ! isset( $array['t11'] ) ) { + $array['t11'] = 0; + } + $upkeep += $array['t11'] * 6; + } + + $artefact = count( $database->getOwnUniqueArtefactInfo2( $session->uid, 4, 3, 0 ) ); + $artefact1 = count( $database->getOwnUniqueArtefactInfo2( $vid, 4, 1, 1 ) ); + $artefact2 = count( $database->getOwnUniqueArtefactInfo2( $session->uid, 4, 2, 0 ) ); + + if ( $artefact > 0 ) { + $upkeep /= 2; + $upkeep = round( $upkeep ); + } else if ( $artefact1 > 0 ) { + $upkeep /= 2; + $upkeep = round( $upkeep ); + } else if ( $artefact2 > 0 ) { + $upkeep /= 4; + $upkeep = round( $upkeep ); + $upkeep *= 3; + } + + $foolartefact = $database->getFoolArtefactInfo( 4, $vid, $session->uid ); + + if ( count( $foolartefact ) > 0 ) { + var_dump($foolartefact); + foreach ( $foolartefact as $arte ) { + if ( $arte['bad_effect'] == 1 ) { + $upkeep *= $arte['effect2']; + } else { + $upkeep /= $arte['effect2']; + $upkeep = round( $upkeep ); + } + } + } + + return $upkeep; + } + +private function trainUnit($unit,$amt,$great=false) { + global $session,$database,${'u'.$unit},$building,$village,$bid19,$bid20,$bid21,$bid25,$bid26,$bid29,$bid30,$bid36,$bid41,$bid42; + + if($this->getTech($unit) || $unit%10 <= 1 || $unit == 99) { + $footies = array(1,2,3,11,12,13,14,21,22,31,32,33,34,41,42,43,44); + $calvary = array(4,5,6,15,16,23,24,25,26,35,36,45,46); + $workshop = array(7,8,17,18,27,28,37,38,47,48); + $special = array(9,10,19,20,29,30,39,40,49,50); + $trapper = array(99); + if(in_array($unit,$footies)) { + if($great) { + $each = round(($bid29[$building->getTypeLevel(29)]['attri'] / 100) * ${'u'.$unit}['time'] / SPEED); + } else { + $each = round(($bid19[$building->getTypeLevel(19)]['attri'] / 100) * ${'u'.$unit}['time'] / SPEED); + } + } + if(in_array($unit,$calvary)) { + if($great) { + $each = round(($bid30[$building->getTypeLevel(30)]['attri'] * ($building->getTypeLevel(41)>=1?(1/$bid41[$building->getTypeLevel(41)]['attri']):1) / 100) * ${'u'.$unit}['time'] / SPEED); + } else { + $each = round(($bid20[$building->getTypeLevel(20)]['attri'] * ($building->getTypeLevel(41)>=1?(1/$bid41[$building->getTypeLevel(41)]['attri']):1) / 100) * ${'u'.$unit}['time'] / SPEED); + } + } + if(in_array($unit,$workshop)) { + if($great) { + $each = round(($bid42[$building->getTypeLevel(42)]['attri'] / 100) * ${'u'.$unit}['time'] / SPEED); + } else { + $each = round(($bid21[$building->getTypeLevel(21)]['attri'] / 100) * ${'u'.$unit}['time'] / SPEED); + } + } + if(in_array($unit,$special)) { + if($building->getTypeLevel(25) > 0){ + $each = round(($bid25[$building->getTypeLevel(25)]['attri'] / 100) * ${'u'.$unit}['time'] / SPEED); + } else { + $each = round(($bid26[$building->getTypeLevel(26)]['attri'] / 100) * ${'u'.$unit}['time'] / SPEED); + } + } + if(in_array($unit,$trapper)) { + $each = round(($bid19[$building->getTypeLevel(36)]['attri'] / 100) * ${'u'.$unit}['time'] / SPEED); + } + if($unit%10 == 0 || $unit%10 == 9 && $unit != 99) { + $slots = $database->getAvailableExpansionTraining(); + if($unit%10 == 0 && $slots['settlers'] <= $amt) { $amt = $slots['settlers']; } + if($unit%10 == 9 && $slots['chiefs'] <= $amt) { $amt = $slots['chiefs']; } + } else { + if($unit != 99){ + if($this->maxUnit($unit,$great) < $amt) { + $amt = 0; + } + }else{ + $trainlist = $this->getTrainingList(8); + foreach($trainlist as $train) { + $train_amt += $train['amt']; + } + $max = 0; + for($i=19;$i<41;$i++){ + if($village->resarray['f'.$i.'t'] == 36){ + $max += $bid36[$village->resarray['f'.$i]]['attri']*TRAPPER_CAPACITY; + } + } + $max1 = $max - ($village->unitarray['u99'] + $train_amt); + if($max1 < $amt) { + $amt = 0; + } + } + } + $wood = ${'u'.$unit}['wood'] * $amt * ($great?3:1); + $clay = ${'u'.$unit}['clay'] * $amt * ($great?3:1); + $iron = ${'u'.$unit}['iron'] * $amt * ($great?3:1); + $crop = ${'u'.$unit}['crop'] * $amt * ($great?3:1); + $each = ($each == 0) ? 1 : $each; + $time = $each*$amt; + if($database->modifyResource($village->wid,$wood,$clay,$iron,$crop,0) && $amt > 0) { + $database->trainUnit($village->wid,$unit+($great?60:0),$amt,${'u'.$unit}['pop'],$each,time()+$time,0); + } + } + } + + public function meetRRequirement($tech) { + global $session,$building; + switch($tech) { + case 2: + if($building->getTypeLevel(22) >= 1 && $building->getTypeLevel(13) >= 1) { return true; } else { return false; } + break; + case 3: + if($building->getTypeLevel(22) >= 5 && $building->getTypeLevel(12) >= 1) { return true; } else { return false; } + break; + case 4: + case 23: + if($building->getTypeLevel(22) >= 5 && $building->getTypeLevel(20) >= 1) { return true; } else { return false; } + break; + case 5: + case 25: + if($building->getTypeLevel(22) >= 5 && $building->getTypeLevel(20) >= 5) { return true; } else { return false; } + break; + case 6: + if($building->getTypeLevel(22) >= 15 && $building->getTypeLevel(20) >= 10) { return true; } else { return false; } + break; + case 9: + case 29: + if($building->getTypeLevel(22) >= 20 && $building->getTypeLevel(16) >= 10) { return true; } else { return false; } + break; + case 12: + case 32: + case 42: + if($building->getTypeLevel(22) >= 1 && $building->getTypeLevel(19) >= 3) { return true; } else { return false; } + break; + case 13: + case 33: + case 43: + if($building->getTypeLevel(22) >= 3 && $building->getTypeLevel(12) >= 1) { return true; } else { return false; } + break; + case 14: + case 34: + case 44: + if($building->getTypeLevel(22) >= 1 && $building->getTypeLevel(15) >= 5) { return true; } else { return false; } + break; + case 15: + case 35: + case 45: + if($building->getTypeLevel(22) >= 1 && $building->getTypeLevel(20) >= 3) { return true; } else { return false; } + break; + case 16: + case 26: + case 36: + case 46: + if($building->getTypeLevel(22) >= 15 && $building->getTypeLevel(20) >= 10) { return true; } else { return false; } + break; + case 7: + case 17: + case 27: + case 37: + case 47: + if($building->getTypeLevel(22) >= 10 && $building->getTypeLevel(21) >= 1) { return true; } else { return false; } + break; + case 8: + case 18: + case 28: + case 38: + case 48: + if($building->getTypeLevel(22) >= 15 && $building->getTypeLevel(21) >= 10) { return true; } else { return false; } + break; + case 19: + case 39: + case 49: + if($building->getTypeLevel(22) >= 20 && $building->getTypeLevel(16) >= 5) { return true; } else { return false; } + break; + case 22: + if($building->getTypeLevel(22) >= 3 && $building->getTypeLevel(12) >= 1) { return true; } else { return false; } + break; + case 24: + if($building->getTypeLevel(22) >= 5 && $building->getTypeLevel(20) >= 3) { return true; } else { return false; } + break; + } + } + + private function researchTech($get) { + //global $database,$session,${'r'.$get['a']},$village,$logging; + global $database,$session,${'r'.$get['a']},$bid22,$building,$village,$logging; + if($this->meetRRequirement($get['a']) && $get['c'] == $session->mchecker) { + $data = ${'r'.$get['a']}; + $time = time() + round(($data['time'] * ($bid22[$building->getTypeLevel(22)]['attri'] / 100))/SPEED); + //$time = time() + round($data['time']/SPEED); + $database->modifyResource($village->wid,$data['wood'],$data['clay'],$data['iron'],$data['crop'],0); + $database->addResearch($village->wid,"t".$get['a'],$time); + $logging->addTechLog($village->wid,"t".$get['a'],1); + } + $session->changeChecker(); + header("Location: build.php?id=".$get['id']); + exit; + } + + private function upgradeSword($get) { + global $database,$session,$bid12,$building,$village,$logging; + $ABTech = $database->getABTech($village->wid); + $CurrentTech = $ABTech["b".$get['a']]; + $unit = ($session->tribe-1)*10+intval($get['a']); + if(($this->getTech($unit) || ($unit % 10) == 1) && ($CurrentTech < $building->getTypeLevel(12)) && $get['c'] == $session->mchecker) { + global ${'ab'.strval($unit)}; + $data = ${'ab'.strval($unit)}; + $time = time() + round(($data[$CurrentTech+1]['time'] * ($bid12[$building->getTypeLevel(12)]['attri'] / 100))/SPEED); + if ($database->modifyResource($village->wid,$data[$CurrentTech+1]['wood'],$data[$CurrentTech+1]['clay'],$data[$CurrentTech+1]['iron'],$data[$CurrentTech+1]['crop'],0)) { + $database->addResearch($village->wid,"b".$get['a'],$time); + $logging->addTechLog($village->wid,"b".$get['a'],$CurrentTech+1); + } + } + $session->changeChecker(); + header("Location: build.php?id=".$get['id']); + exit; + } + + private function upgradeArmour($get) { + global $database,$session,$bid13,$building,$village,$logging; + $ABTech = $database->getABTech($village->wid); + $CurrentTech = $ABTech["a".$get['a']]; + $unit = ($session->tribe-1)*10+intval($get['a']); + if(($this->getTech($unit) || ($unit % 10) == 1) && ($CurrentTech < $building->getTypeLevel(13)) && $get['c'] == $session->mchecker) { + global ${'ab'.strval($unit)}; + $data = ${'ab'.strval($unit)}; + $time = time() + round(($data[$CurrentTech+1]['time'] * ($bid13[$building->getTypeLevel(13)]['attri'] / 100))/SPEED); + if ($database->modifyResource($village->wid,$data[$CurrentTech+1]['wood'],$data[$CurrentTech+1]['clay'],$data[$CurrentTech+1]['iron'],$data[$CurrentTech+1]['crop'],0)) { + $database->addResearch($village->wid,"a".$get['a'],$time); + $logging->addTechLog($village->wid,"a".$get['a'],$CurrentTech+1); + } + } + $session->changeChecker(); + header("Location: build.php?id=".$get['id']); + exit; + } + + public function getUnitName($i) { + return $this->unarray[$i]; + } + + public function finishTech() { + global $database,$village; + $q = "UPDATE ".TB_PREFIX."research SET timestamp=".(time()-1)." WHERE vref = ".(int) $village->wid; + $result = $database->query($q); + return mysqli_affected_rows($database->dblink); + } + + public function calculateAvaliable($id,$resarray=array()) { + global $village,$generator,${'r'.$id}; + if(count($resarray)==0) { + $resarray['wood'] = ${'r'.$id}['wood']; + $resarray['clay'] = ${'r'.$id}['clay']; + $resarray['iron'] = ${'r'.$id}['iron']; + $resarray['crop'] = ${'r'.$id}['crop']; + } + $rwtime = ($resarray['wood']-$village->awood) / $village->getProd("wood") * 3600; + $rcltime = ($resarray['clay']-$village->aclay) / $village->getProd("clay") * 3600; + $ritime = ($resarray['iron']-$village->airon) / $village->getProd("iron") * 3600; + $rctime = ($resarray['crop']-$village->acrop) / $village->getProd("crop") * 3600; + if($village->getProd("crop") >= 0) { + $reqtime = max($rwtime,$rcltime,$ritime,$rctime) + time(); + } else { + $reqtime = max($rwtime,$rcltime,$ritime); + if($reqtime > $rctime) { + $reqtime = 0; + } else { + $reqtime += time(); + } + } + return $generator->procMtime($reqtime); + } + + public function checkReinf($id, $use_cache = true) { + global $database; + $enforce=$database->getEnforceArray($id, 0, $use_cache); + $fail=0; + + for ($i=1; $i<50; $i++) { + if($enforce['u'.$i.'']>0){ + $fail=1; + } + } + + if ($enforce['hero']>0) $fail=1; + if($fail==0){ + $database->deleteReinf($id); + } + + } + +} +$technology = new Technology; +?> From 5b1d7a300b480ef3414df410d181504c293ba5e5 Mon Sep 17 00:00:00 2001 From: AL-Kateb Date: Mon, 22 Jan 2018 13:53:12 +0000 Subject: [PATCH 4/4] cleanup --- GameEngine/Database.php | 1 + build.php | 1 + 2 files changed, 2 insertions(+) diff --git a/GameEngine/Database.php b/GameEngine/Database.php index 34f8b4f5..2b6193c6 100755 --- a/GameEngine/Database.php +++ b/GameEngine/Database.php @@ -3317,6 +3317,7 @@ class MYSQLi_DB implements IDbConnection { crop = IF(crop $sign $crop < 0, 0, IF(crop $sign $crop > maxcrop, maxcrop, crop $sign $crop)) WHERE wref = " . $vid ; + return mysqli_query( $this->dblink, $q); } diff --git a/build.php b/build.php index 7e6495a0..101b1a72 100644 --- a/build.php +++ b/build.php @@ -46,6 +46,7 @@ if ( isset( $_GET['id'] ) ) { if ( ! ctype_digit( preg_replace( "/[^a-zA-Z0-9_-]/", "", $_GET['id'] ) ) ) { $_GET['id'] = "1"; } + $checkBuildings = array( 0, 16, 17, 25, 26, 27 ); if ( $_GET['id'] < 19 || ( isset( $_GET['gid'] ) && ! in_array( $_GET['gid'], $checkBuildings ) ) ) {