mirror of
https://github.com/Shadowss/TravianZ.git
synced 2026-06-28 00:24:23 +00:00
aec41019e9
If the speed of the server is very high and the single troop training time is 0, you can now train troops instantly.
839 lines
28 KiB
PHP
Executable File
839 lines
28 KiB
PHP
Executable File
<?php
|
|
|
|
#################################################################################
|
|
## -= YOU MAY NOT REMOVE OR CHANGE THIS NOTICE =- ##
|
|
## --------------------------------------------------------------------------- ##
|
|
## Filename Technology.php ##
|
|
## Developed by: Dzoki ##
|
|
## License: TravianX Project ##
|
|
## Copyright: TravianX (c) 2010-2011. All rights reserved. ##
|
|
## ##
|
|
#################################################################################
|
|
|
|
global $autoprefix;
|
|
|
|
// even with autoloader created, we can't use it here yet, as it's not been created
|
|
// ... so, let's see where it is and include it
|
|
$autoloader_found = false;
|
|
// go max 5 levels up - we don't have folders that go deeper than that
|
|
for ($i = 0; $i < 5; $i++) {
|
|
$autoprefix = str_repeat('../', $i);
|
|
if (file_exists($autoprefix.'autoloader.php')) {
|
|
$autoloader_found = true;
|
|
include_once $autoprefix.'autoloader.php';
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (!$autoloader_found) {
|
|
die('Could not find autoloading class.');
|
|
}
|
|
|
|
// this is needed for installation, since the lang file would not be included yet
|
|
include_once($autoprefix."GameEngine/Lang/en.php");
|
|
|
|
class Technology {
|
|
|
|
public $unarray = array(1=>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;$i<count($this->unarray);$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);
|
|
$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;
|
|
?>
|