Files
TravianZ/GameEngine/Technology.php
T
Martin Ambrus 23eed5da53 fix: unable to train settlers if chieftan is present
It is debatable whether or not to allow this, since chieftan would be of
no use once we have 3 settlers and settle a new village. However, if we
accidentally created a chieftan, we can't train settlers until we send
the chieftan to his death.

I think this move could be a predule to a later game mechanics, where
chieftan could fight (talk, actually) against chieftan, if one is
present in village, so taking a village over isn't so easy.
2017-11-03 17:23:29 +01:00

815 lines
27 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. ##
## ##
#################################################################################
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;
// FIX BY MisterX
/*
$controlloTruppeInRinforzo = $database->getEnforceControllTroops($village->wid);
for($i=1;$i<=50;$i++) {
if($controlloTruppeInRinforzo['u'.$i] >= "30000000")
mysqli_query("UPDATE ".TB_PREFIX."enforcement set u".$i." = '0' where vref = $village->wid");
}
//FIX BY Shadow and made by NIKO28
$controlloTruppe = $database->getUnit($village->wid);
for($i=1;$i<=50;$i++) {
if($controlloTruppe['u'.$i] >= "10000000")
mysqli_query("UPDATE ".TB_PREFIX."units set u".$i." = '0' where vref = $village->wid");
}
*/
// END FIX
$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;
$unitarray = $$unit;
$res = array();
$res = mysqli_fetch_assoc(mysqli_query($GLOBALS['link'],"SELECT maxstore, maxcrop, wood, clay, iron, crop FROM ".TB_PREFIX."vdata WHERE wref = ".(int) $village->wid)) or die(mysqli_error($database->dblink));
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;
$unitarray = $$unit;
$res = array();
$res = mysqli_fetch_assoc(mysqli_query($GLOBALS['link'],"SELECT maxstore, maxcrop, wood, clay, iron, crop FROM ".TB_PREFIX."vdata WHERE wref = ".(int) $village->wid)) or die(mysqli_error($database->dblink));
$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){
$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)
) {
$upkeepDecrement = 0;
switch ($i) {
case 4: $upkeepDecrement = 2;
break;
case 5: $upkeepDecrement = 3;
break;
case 6: $upkeepDecrement = 4;
break;
}
$upkeep += ($dataarray['pop'] - $upkeepDecrement) * $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)
) {
$upkeepDecrement = 0;
switch ($i) {
case 4: $upkeepDecrement = 2;
break;
case 5: $upkeepDecrement = 3;
break;
case 6: $upkeepDecrement = 4;
break;
}
$upkeep += ($dataarray['pop'] - $upkeepDecrement) * $array[$unit2];
} else {
$upkeep += $dataarray['pop'] * $array[$unit2];
}
} else {
$upkeep += $dataarray['pop'] * $array[$unit2];
}
}
}
// $unit = "hero";
// global $$unit;
// $dataarray = $$unit;
if($prisoners == 0){
$upkeep += $array['hero'] * 6;
}else{
$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){
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) {
global $database;
$enforce=$database->getEnforceArray($id,0);
$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;
?>