diff --git a/GameEngine/Admin/Mods/addUsers.php b/GameEngine/Admin/Mods/addUsers.php
index 55b6e247..e6872900 100755
--- a/GameEngine/Admin/Mods/addUsers.php
+++ b/GameEngine/Admin/Mods/addUsers.php
@@ -62,6 +62,10 @@ else
// Looks OK, let's go for it
$created = 0;
$skipped = 0;
+ $addUnitsWrefs = [];
+ $addTechWrefs = [];
+ $addABTechWrefs = [];
+
for ($i= 1; $i <= $amount; $i++)
{
$userName = $baseName . $i;
@@ -150,9 +154,9 @@ WHERE id = ".(int) $uid) or die(mysqli_error($database->dblink));
mysqli_query($GLOBALS["link"], $q);
$pop = $automation->recountPop($wid);
$cp = $automation->recountPop($wid);
- $database->addUnits($wid);
- $database->addTech($wid);
- $database->addABTech($wid);
+ $addUnitsWrefs[] = $wid;
+ $addTechWrefs[] = $wid;
+ $addABTechWrefs[] = $wid;
$database->updateUserField($uid,"access",USER,1);
//insert units randomly generate the number of troops
@@ -168,6 +172,11 @@ WHERE id = ".(int) $uid) or die(mysqli_error($database->dblink));
}
}
}
+
+ $database->addUnits($addUnitsWrefs);
+ $database->addTech($addTechWrefs);
+ $database->addABTech($addABTechWrefs);
+
header("Location: ../../../Admin/admin.php?p=addUsers&g=OK&bn=$baseName&am=$created&sk=$skipped&bp=$beginnersProtection&tr=$postTribe");
}
?>
\ No newline at end of file
diff --git a/GameEngine/Admin/Mods/natarbuildingplan.php b/GameEngine/Admin/Mods/natarbuildingplan.php
index 774346f3..c78042e9 100755
--- a/GameEngine/Admin/Mods/natarbuildingplan.php
+++ b/GameEngine/Admin/Mods/natarbuildingplan.php
@@ -17,40 +17,44 @@ mysqli_select_db($GLOBALS["link"], SQL_DB);
$id = (int) $_POST['id'];
$amt = (int) $_POST['vill_amount'];
+$addUnitsWrefs = [];
-for($i=1;$i<=$amt;$i++) {
+ for($i=1;$i<=$amt;$i++) {
- $kid = $_POST['kid'];
- $wid = $database->generateBase($kid);
- $database->setFieldTaken($wid);
- $time = time();
- $q = "insert into ".TB_PREFIX."vdata (`wref`,`owner`,`name`,`capital`,`pop`,`cp`,`celebration`,`type`,`wood`,`clay`,`iron`,`maxstore`,`crop`,`maxcrop`,`lastupdate`,`loyalty`,`exp1`,`exp2`,`exp3`,`created`) values ('$wid','3','".PLANVILLAGE."',0,0,0,0,0,80000.00,80000.00,80000.00,80000,80000.00,80000,1314974534,100,0,0,0,1314968914)";
- mysqli_query($GLOBALS["link"], $q) or die(mysqli_error($database->dblink));
- $q = "insert into ".TB_PREFIX."fdata (`vref`,`f1`,`f1t`,`f2`,`f2t`,`f3`,`f3t`,`f4`,`f4t`,`f5`,`f5t`,`f6`,`f6t`,`f7`,`f7t`,`f8`,`f8t`,`f9`,`f9t`,`f10`,`f10t`,`f11`,`f11t`,`f12`,`f12t`,`f13`,`f13t`,`f14`,`f14t`,`f15`,`f15t`,`f16`,`f16t`,`f17`,`f17t`,`f18`,`f18t`,`f19`,`f19t`,`f20`,`f20t`,`f21`,`f21t`,`f22`,`f22t`,`f23`,`f23t`,`f24`,`f24t`,`f25`,`f25t`,`f26`,`f26t`,`f27`,`f27t`,`f28`,`f28t`,`f29`,`f29t`,`f30`,`f30t`,`f31`,`f31t`,`f32`,`f32t`,`f33`,`f33t`,`f34`,`f34t`,`f35`,`f35t`,`f36`,`f36t`,`f37`,`f37t`,`f38`,`f38t`,`f39`,`f39t`,`f40`,`f40t`,`f99`,`f99t`,`wwname`) values ($wid,0,1,0,4,0,1,0,3,0,2,0,2,0,3,0,4,0,4,0,3,0,3,0,4,0,4,0,1,0,4,0,2,0,1,0,2,20,17,20,11,10,27,20,10,10,22,10,25,0,0,20,15,10,19,0,0,0,0,0,0,10,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,16,0,0,0,0,'World Wonder')";
- mysqli_query($GLOBALS["link"], $q);
- $pop = $automation->recountPop($wid);
- $cp = $automation->recountPop($wid);
- $database->addUnits($wid);
- $database->addTech($wid);
- $database->addABTech($wid);
- $speed = NATARS_UNITS;
- $q = "UPDATE ".TB_PREFIX."units SET u41 = u41 + " . (1500 * $speed) . ", u42 = u42 + " . (1500 * $speed) . ", u43 = u43 + " . (1500 * $speed) . ", u44 = u44 + " . (1500 * $speed) . ", u45 = u45 + " . (1500 * $speed) . ", u46 = u46 + " . (1500 * $speed) . ", u47 = u47 + " . (1500 * $speed) . ", u48 = u48 + " . (1500 * $speed) . " , u49 = u49 + " . (1500 * $speed) . ", u50 = u50 + " . (1500 * $speed) . " WHERE vref = '".$wid."'";
- mysqli_query($GLOBALS["link"], $q);
- $desc = PLAN_DESC;
- $database->addArtefact($wid, 3, 11, 1, PLAN, $desc, '', 'type1.gif');
-}
- $myFile = "../../../Templates/text.tpl";
- $fh = fopen($myFile, 'w') or die("
Can't open file: templates/text.tpl");
- $text = file_get_contents("../../../Templates/text_format.tpl");
- $text = preg_replace("'%TEKST%'",PLAN_INFO ,$text);
- fwrite($fh, $text);
+ $kid = $_POST['kid'];
+ $wid = $database->generateBase($kid);
+ $database->setFieldTaken($wid);
+ $time = time();
+ $q = "insert into ".TB_PREFIX."vdata (`wref`,`owner`,`name`,`capital`,`pop`,`cp`,`celebration`,`type`,`wood`,`clay`,`iron`,`maxstore`,`crop`,`maxcrop`,`lastupdate`,`loyalty`,`exp1`,`exp2`,`exp3`,`created`) values ('$wid','3','".PLANVILLAGE."',0,0,0,0,0,80000.00,80000.00,80000.00,80000,80000.00,80000,1314974534,100,0,0,0,1314968914)";
+ mysqli_query($GLOBALS["link"], $q) or die(mysqli_error($database->dblink));
+ $q = "insert into ".TB_PREFIX."fdata (`vref`,`f1`,`f1t`,`f2`,`f2t`,`f3`,`f3t`,`f4`,`f4t`,`f5`,`f5t`,`f6`,`f6t`,`f7`,`f7t`,`f8`,`f8t`,`f9`,`f9t`,`f10`,`f10t`,`f11`,`f11t`,`f12`,`f12t`,`f13`,`f13t`,`f14`,`f14t`,`f15`,`f15t`,`f16`,`f16t`,`f17`,`f17t`,`f18`,`f18t`,`f19`,`f19t`,`f20`,`f20t`,`f21`,`f21t`,`f22`,`f22t`,`f23`,`f23t`,`f24`,`f24t`,`f25`,`f25t`,`f26`,`f26t`,`f27`,`f27t`,`f28`,`f28t`,`f29`,`f29t`,`f30`,`f30t`,`f31`,`f31t`,`f32`,`f32t`,`f33`,`f33t`,`f34`,`f34t`,`f35`,`f35t`,`f36`,`f36t`,`f37`,`f37t`,`f38`,`f38t`,`f39`,`f39t`,`f40`,`f40t`,`f99`,`f99t`,`wwname`) values ($wid,0,1,0,4,0,1,0,3,0,2,0,2,0,3,0,4,0,4,0,3,0,3,0,4,0,4,0,1,0,4,0,2,0,1,0,2,20,17,20,11,10,27,20,10,10,22,10,25,0,0,20,15,10,19,0,0,0,0,0,0,10,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,16,0,0,0,0,'World Wonder')";
+ mysqli_query($GLOBALS["link"], $q);
+ $pop = $automation->recountPop($wid);
+ $cp = $automation->recountPop($wid);
+ $addUnitsWrefs[] = $wid;
+ $database->addTech($wid);
+ $database->addABTech($wid);
+ $speed = NATARS_UNITS;
+ $q = "UPDATE ".TB_PREFIX."units SET u41 = u41 + " . (1500 * $speed) . ", u42 = u42 + " . (1500 * $speed) . ", u43 = u43 + " . (1500 * $speed) . ", u44 = u44 + " . (1500 * $speed) . ", u45 = u45 + " . (1500 * $speed) . ", u46 = u46 + " . (1500 * $speed) . ", u47 = u47 + " . (1500 * $speed) . ", u48 = u48 + " . (1500 * $speed) . " , u49 = u49 + " . (1500 * $speed) . ", u50 = u50 + " . (1500 * $speed) . " WHERE vref = '".$wid."'";
+ mysqli_query($GLOBALS["link"], $q);
+ $desc = PLAN_DESC;
+ $database->addArtefact($wid, 3, 11, 1, PLAN, $desc, '', 'type1.gif');
+ }
- $query="SELECT * FROM ".TB_PREFIX."users ORDER BY id DESC";
- $result=mysqli_query($GLOBALS["link"], $query) or die (mysqli_error($database->dblink));
- for ($i=0; $row=mysqli_fetch_row($result); $i++) {
- $updateattquery = mysqli_query($GLOBALS["link"], "UPDATE ".TB_PREFIX."users SET ok = '1' WHERE id = '".$row[0]."'")
- or die(mysqli_error($database->dblink));
- }
+ $database->addUnits($addUnitsWrefs);
+
+ $myFile = "../../../Templates/text.tpl";
+ $fh = fopen($myFile, 'w') or die("
Can't open file: templates/text.tpl");
+ $text = file_get_contents("../../../Templates/text_format.tpl");
+ $text = preg_replace("'%TEKST%'",PLAN_INFO ,$text);
+ fwrite($fh, $text);
+
+ $query="SELECT * FROM ".TB_PREFIX."users ORDER BY id DESC";
+ $result=mysqli_query($GLOBALS["link"], $query) or die (mysqli_error($database->dblink));
+ for ($i=0; $row=mysqli_fetch_row($result); $i++) {
+ $updateattquery = mysqli_query($GLOBALS["link"], "UPDATE ".TB_PREFIX."users SET ok = '1' WHERE id = '".$row[0]."'")
+ or die(mysqli_error($database->dblink));
+ }
mysqli_query($GLOBALS["link"], "Insert into ".TB_PREFIX."admin_log values (0,$id,'Added $amt WW Buildingplan Villages',".time().")");
diff --git a/GameEngine/Admin/Mods/natarend.php b/GameEngine/Admin/Mods/natarend.php
index 0f421a88..ebd392de 100755
--- a/GameEngine/Admin/Mods/natarend.php
+++ b/GameEngine/Admin/Mods/natarend.php
@@ -17,6 +17,9 @@ mysqli_select_db($GLOBALS["link"], SQL_DB);
$id = (int) $_POST['id'];
$amt = (int) $_POST['vill_amount'];
+$addUnitsWrefs = [];
+$addTechWrefs = [];
+$addABTechWrefs = [];
for($i=1;$i<=$amt;$i++) {
@@ -31,9 +34,9 @@ for($i=1;$i<=$amt;$i++) {
mysqli_query($GLOBALS["link"], $q);
$pop = $automation->recountPop($wid);
$cp = $automation->recountPop($wid);
- $database->addUnits($wid);
- $database->addTech($wid);
- $database->addABTech($wid);
+ $addUnitsWrefs[] = $wid;
+ $addTechWrefs[] = $wid;
+ $addABTechWrefs[] = $wid;
$speed = NATARS_UNITS;
//new with random amount of troops
@@ -41,9 +44,11 @@ for($i=1;$i<=$amt;$i++) {
mysqli_query($GLOBALS["link"], $q);
}
+$database->addUnits($addUnitsWrefs);
+$database->addTech($addTechWrefs);
+$database->addABTech($addABTechWrefs);
- mysqli_query($GLOBALS["link"], "Insert into ".TB_PREFIX."admin_log values (0,$id,'Added $amt WW Villages',".time().")");
-
+mysqli_query($GLOBALS["link"], "Insert into ".TB_PREFIX."admin_log values (0,$id,'Added $amt WW Villages',".time().")");
header("Location: ../../../Admin/admin.php?p=natarend&g");
?>
diff --git a/GameEngine/Automation.php b/GameEngine/Automation.php
index a75e726f..ba350b3b 100755
--- a/GameEngine/Automation.php
+++ b/GameEngine/Automation.php
@@ -2363,7 +2363,7 @@ class Automation {
}
// clear resource levels cache, since we might have destroyed buildings/fields by now
- $database->clearResourseLevelsCache();
+ call_user_func(get_class($database).'::clearResourseLevelsCache');
}
}
} elseif (($data['t7']-$traped7)>0) {
@@ -3147,12 +3147,30 @@ class Automation {
$database->query($q);
$getmovement = $database->getMovement(3,$wref,1);
+
+ $moveIDs = [];
+ $time = microtime(true);
+ $types = [];
+ $froms = [];
+ $tos = [];
+ $refs = [];
+ $times = [];
+ $endtimes = [];
+
foreach($getmovement as $movedata) {
- $time = microtime(true);
$time2 = $time - $movedata['starttime'];
- $database->setMovementProc($movedata['moveid']);
- $database->addMovement(4,$movedata['to'],$movedata['from'],$movedata['ref'],$time,$time+$time2);
+ $moveIDs[] = $movedata['moveid'];
+ $types[] = 4;
+ $froms[] = $movedata['to'];
+ $tos[] = $movedata['from'];
+ $refs[] = $movedata['ref'];
+ $times[] = $time;
+ $endtimes[] = $time+$time2;
}
+
+ $database->setMovementProc(implode(', ', $moveIDs));
+ $database->addMovement($types, $froms, $tos, $refs, $times, $endtimes);
+
$q = "DELETE FROM ".TB_PREFIX."enforcement WHERE `from` = $wref";
$database->query($q);
@@ -3346,6 +3364,9 @@ class Automation {
$dataarray = $database->query_return($q);
if ($dataarray && count($dataarray)) {
+
+ $movementProcIDs = [];
+
foreach($dataarray as $data) {
$isoasis = $database->isVillageOases($data['to']);
if($isoasis == 0){
@@ -3370,7 +3391,7 @@ class Automation {
$database->modifyEnforce($reinf['id'],31,1,1);
$data_fail = '0,0,4,1,0,0,0,0,0,0,0,0,0,0';
$database->addNotice($to['owner'],$to['wref'],(isset($targetally) ? $targetally : 0),8,'village of the elders reinforcement '.addslashes($to['name']).'',$data_fail,$AttackArrivalTime);
- $database->setMovementProc($data['moveid']);
+ $movementProcIDs[] = $data['moveid'];
if ($session->uid==$DefenderID) $reload=true;
}else{
//set base things
@@ -3453,8 +3474,9 @@ class Automation {
$database->addNotice($to['owner'],$to['wref'],(isset($targetally) ? $targetally : 0),8,''.addslashes($from['name']).' reinforcement '.addslashes($to_name).'',$data_fail,(isset($AttackArrivalTime) ? $AttackArrivalTime : time()));
}
//update status
- $database->setMovementProc($data['moveid']);
+ $movementProcIDs[] = $data['moveid'];
}
+
$crop = $database->getCropProdstarv($data['to']);
$unitarrays = $this->getAllUnits($data['to']);
$village = $database->getVillage($data['to']);
@@ -3477,6 +3499,8 @@ class Automation {
$q="DELETE FROM ".TB_PREFIX."enforcement WHERE ".$e_units." AND (vref=".(int) $data['to']." OR `from`=".(int) $data['to'].")";
$database->query($q);
}
+
+ $database->setMovementProc(implode(', ', $movementProcIDs));
}
if(file_exists("GameEngine/Prevention/sendreinfunits.txt")) {
@@ -3517,6 +3541,8 @@ class Automation {
$wavesData = [];
if ($dataarray && count($dataarray)) {
+
+ $movementProcIDs = [];
foreach($dataarray as $data) {
if (!isset($wavesData[$data['from'].$data['to'].$data['starttime'].$data['endtime']])) {
$tribe = $database->getUserField($database->getVillageField($data['to'],"owner"),"tribe",0);
@@ -3528,7 +3554,7 @@ class Automation {
array($data['t1'],$data['t2'],$data['t3'],$data['t4'],$data['t5'],$data['t6'],$data['t7'],$data['t8'],$data['t9'],$data['t10'],$data['t11']),
array(1,1,1,1,1,1,1,1,1,1,1)
);
- $database->setMovementProc($data['moveid']);
+ $movementProcIDs[] = $data['moveid'];
$crop = $database->getCropProdstarv($data['to']);
$unitarrays = $this->getAllUnits($data['to']);
$village = $database->getVillage($data['to']);
@@ -3546,15 +3572,20 @@ class Automation {
$wavesData[$data['from'].$data['to'].$data['starttime'].$data['endtime']] = true;
} else {
// duplicate record, just mark it as processed
- $database->setMovementProc($data['moveid']);
+ $movementProcIDs[] = $data['moveid'];
}
}
+
+ $database->setMovementProc(implode(', ', $movementProcIDs));
}
// Recieve the bounty on type 6.
$q = "SELECT s.wood, s.clay, s.iron, s.crop, `to`, `from`, endtime, merchant, send, moveid FROM ".TB_PREFIX."movement m, ".TB_PREFIX."send s WHERE m.ref = s.id AND m.proc = 0 AND sort_type = 6 AND endtime < $time";
+
$dataarray = $database->query_return($q);
+ $movementProcIDs = [];
+
foreach($dataarray as $data) {
if($data['wood'] >= $data['clay'] && $data['wood'] >= $data['iron'] && $data['wood'] >= $data['crop']){ $sort_type = "10"; }
@@ -3566,7 +3597,7 @@ class Automation {
$from = $database->getMInfo($data['from']);
$database->modifyResource($data['to'],$data['wood'],$data['clay'],$data['iron'],$data['crop'],1);
//$database->updateVillage($data['to']);
- $database->setMovementProc($data['moveid']);
+ $movementProcIDs[] = $data['moveid'];
$crop = $database->getCropProdstarv($data['to']);
$unitarrays = $this->getAllUnits($data['to']);
$village = $database->getVillage($data['to']);
@@ -3581,21 +3612,24 @@ class Automation {
}
}
+ $database->setMovementProc(implode(', ', $movementProcIDs));
$this->pruneResource();
// Settlers
$q = "SELECT `to`, moveid FROM ".TB_PREFIX."movement where ref = 0 and proc = '0' and sort_type = '4' and endtime < $time";
+
$dataarray = $database->query_return($q);
+ $movementProcIDs = [];
+
if ($dataarray && count($dataarray)) {
foreach($dataarray as $data) {
-
$tribe = $database->getUserField($database->getVillageField($data['to'],"owner"),"tribe",0);
-
$database->modifyUnit($data['to'],array($tribe."0"),array(3),array(1));
- $database->setMovementProc($data['moveid']);
-
+ $movementProcIDs[] = $data['moveid'];
}
+
+ $database->setMovementProc(implode(', ', $movementProcIDs));
}
if(file_exists("GameEngine/Prevention/returnunits.txt")) {
@@ -3613,7 +3647,21 @@ class Automation {
fclose($ourFileHandle);
$time = microtime(true);
$q = "SELECT `to`, `from`, moveid, starttime, ref FROM ".TB_PREFIX."movement where proc = 0 and sort_type = 5 and endtime < $time";
+
$dataarray = $database->query_return($q);
+ $movementProcIDs = [];
+ $fieldIDs = [];
+ $addUnitsWrefs = [];
+ $addTechWrefs = [];
+ $addABTechWrefs = [];
+ $time = microtime(true);
+ $types = [];
+ $froms = [];
+ $tos = [];
+ $refs = [];
+ $times = [];
+ $endtimes = [];
+
foreach($dataarray as $data) {
$ownerID = $database->getUserField($database->getVillageField($data['from'],"owner"),"id",0);
if ($session->uid==$ownerID) $reload=true;
@@ -3621,13 +3669,13 @@ class Automation {
$user = addslashes($database->getUserField($to['owner'],'username',0));
$taken = $database->getVillageState($data['to']);
if($taken != 1){
- $database->setFieldTaken($data['to']);
+ $fieldIDs[] = $data['to'];
$database->addVillage($data['to'],$to['owner'],$user,'0');
$database->addResourceFields($data['to'],$database->getVillageType($data['to']));
- $database->addUnits($data['to']);
- $database->addTech($data['to']);
- $database->addABTech($data['to']);
- $database->setMovementProc($data['moveid']);
+ $addUnitsWrefs[] = $data['to'];
+ $addTechWrefs[] = $data['to'];
+ $addABTechWrefs[] = $data['to'];
+ $movementProcIDs[] = $data['moveid'];
$exp1 = $database->getVillageField($data['from'],'exp1');
$exp2 = $database->getVillageField($data['from'],'exp2');
@@ -3649,10 +3697,23 @@ class Automation {
}
else{
// here must come movement from returning settlers
- $database->addMovement(4,$data['to'],$data['from'],$data['ref'],$time,$time+($time-$data['starttime']));
- $database->setMovementProc($data['moveid']);
+ $types[] = 4;
+ $froms[] = $data['to'];
+ $tos[] = $data['from'];
+ $refs[] = $data['ref'];
+ $times[] = $time;
+ $endtimes[] = $time+($time-$data['starttime']);
+ $movementProcIDs[] = $data['moveid'];
}
}
+
+ $database->addMovement($types, $froms, $tos, $refs, $times, $endtimes);
+ $database->setMovementProc(implode(', ', $movementProcIDs));
+ $database->setFieldTaken($fieldIDs);
+ $database->addUnits($addUnitsWrefs);
+ $database->addTech($addTechWrefs);
+ $database->addABTech($addABTechWrefs);
+
if(file_exists("GameEngine/Prevention/settlers.txt")) {
unlink("GameEngine/Prevention/settlers.txt");
}
@@ -3668,24 +3729,55 @@ class Automation {
$ourFileHandle = fopen($autoprefix."GameEngine/Prevention/research.txt", 'w');
fclose($ourFileHandle);
+
$time = time();
+ $deleteIDs = [];
+ $tdata = [];
+ $abdata = [];
+
$q = "SELECT tech, vref, id FROM ".TB_PREFIX."research where timestamp < $time";
$dataarray = $database->query_return($q);
+
foreach($dataarray as $data) {
$sort_type = substr($data['tech'],0,1);
switch($sort_type) {
case "t":
- $q = "UPDATE ".TB_PREFIX."tdata set ".$data['tech']." = 1 where vref = ".(int) $data['vref'];
+ if (!isset($tdata[$data['vref']])) {
+ $tdata[$data['vref']] = [];
+ }
+
+ $tdata[$data['vref']][] = $data['tech'].' = 1';
break;
case "a":
case "b":
- $q = "UPDATE ".TB_PREFIX."abdata set ".$data['tech']." = ".$data['tech']." + 1 where vref = ".(int) $data['vref'];
+ if (!isset($abdata[$data['vref']])) {
+ $abdata[$data['vref']] = [];
+ }
+
+ $abdata[$data['vref']][] = $data['tech']." = ".$data['tech']." + 1";
break;
}
- $database->query($q);
- $q = "DELETE FROM ".TB_PREFIX."research where id = ".(int) $data['id'];
- $database->query($q);
+ $deleteIDs[] = (int) $data['id'];
}
+
+ // execute queries with consolidated research data
+ if (count($tdata)) {
+ foreach ( $tdata as $vid => $preparedData ) {
+ $q = "UPDATE ".TB_PREFIX."tdata SET ".implode(', ', $preparedData)." WHERE vref = ".$vid;
+ $database->query($q);
+ }
+ }
+
+ if (count($abdata)) {
+ foreach ( $abdata as $vid => $preparedData ) {
+ $q = "UPDATE ".TB_PREFIX."abdata SET ".implode(', ', $preparedData)." WHERE vref = ".$vid;
+ $database->query($q);
+ }
+ }
+
+ $q = "DELETE FROM ".TB_PREFIX."research where id IN(".implode(', ', $deleteIDs).")";
+ $database->query($q);
+
if(file_exists("GameEngine/Prevention/research.txt")) {
unlink("GameEngine/Prevention/research.txt");
}
@@ -3763,10 +3855,12 @@ class Automation {
return array($wood,$clay,$iron,$crop);
}
- function getAllUnits($base) {
+ function getAllUnits($base, $use_cache = true) {
global $database;
- $ownunit = $database->getUnit($base);
- $enforcementarray = $database->getEnforceVillage($base,0);
+
+ $ownunit = $database->getUnit($base, $use_cache);
+ $enforcementarray = $database->getEnforceVillage($base, 0, $use_cache);
+
if(count($enforcementarray) > 0) {
foreach($enforcementarray as $enforce) {
for($i=1;$i<=50;$i++) {
@@ -3774,7 +3868,8 @@ class Automation {
}
}
}
- $enforceoasis=$database->getOasisEnforce($base,0);
+
+ $enforceoasis=$database->getOasisEnforce($base, 0, $use_cache);
if(count($enforceoasis) > 0) {
foreach($enforceoasis as $enforce) {
for($i=1;$i<=50;$i++) {
@@ -3782,7 +3877,8 @@ class Automation {
}
}
}
- $enforceoasis1=$database->getOasisEnforce($base,1);
+
+ $enforceoasis1=$database->getOasisEnforce($base, 1, $use_cache);
if(count($enforceoasis1) > 0) {
foreach($enforceoasis1 as $enforce) {
for($i=1;$i<=50;$i++) {
@@ -3790,6 +3886,7 @@ class Automation {
}
}
}
+
$movement = $database->getVillageMovement($base);
if(!empty($movement)) {
for($i=1;$i<=50;$i++) {
@@ -3800,7 +3897,8 @@ class Automation {
$ownunit['u'.$i] += (isset($movement['u'.$i]) ? $movement['u'.$i] : 0);
}
}
- $prisoners = $database->getPrisoners($base,1);
+
+ $prisoners = $database->getPrisoners($base, 1, $use_cache);
if(!empty($prisoners)) {
foreach($prisoners as $prisoner){
$owner = $database->getVillageField($base,"owner");
@@ -4140,9 +4238,9 @@ class Automation {
if($train['amt'] == 0){
$database->trainUnit($train['id'],0,0,0,0,1,1);
}
- $crop = $database->getCropProdstarv($train['vref']);
- $unitarrays = $this->getAllUnits($train['vref']);
- $village = $database->getVillage($train['vref']);
+ $crop = $database->getCropProdstarv($train['vref'], false);
+ $unitarrays = $this->getAllUnits($train['vref'], false);
+ $village = $database->getVillage($train['vref'], false);
$upkeep = $village['pop'] + $this->getUpkeep($unitarrays, 0);
$starv = $database->getVillageField($train['vref'],"starv");
if ($crop < $upkeep){
@@ -4205,23 +4303,28 @@ class Automation {
}
private function getsort_typeLevel($tid,$resarray) {
-
-
global $village;
+
$keyholder = array();
+
foreach(array_keys($resarray,$tid) as $key) {
if(strpos($key,'t')) {
$key = preg_replace("/[^0-9]/", '', $key);
array_push($keyholder, $key);
}
}
+
$element = count($keyholder);
+
if($element >= 2) {
+
if($tid <= 4) {
$temparray = array();
+
for($i=0;$i<=$element-1;$i++) {
array_push($temparray,$resarray['f'.$keyholder[$i]]);
}
+
foreach ($temparray as $key => $val) {
if ($val == max($temparray))
$target = $key;
@@ -4242,6 +4345,7 @@ class Automation {
else {
return 0;
}
+
if($keyholder[$target] != "") {
return $resarray['f'.$keyholder[$target]];
}
@@ -4269,6 +4373,7 @@ class Automation {
$database->clearCel($id);
$database->setCelCp($user,$cp);
}
+
if(file_exists("GameEngine/Prevention/celebration.txt")) {
unlink("GameEngine/Prevention/celebration.txt");
}
@@ -4290,26 +4395,37 @@ class Automation {
$type = $database->getFieldType($vil['vref'],$vil['buildnumber']);
$level = $database->getFieldLevel($vil['vref'],$vil['buildnumber']);
$buildarray = $GLOBALS["bid".$type];
+
if ($type==10 || $type==38) {
- $q = "UPDATE ".TB_PREFIX."vdata SET `maxstore`=`maxstore`-".$buildarray[$level]['attri']." WHERE wref=".(int) $vil['vref'];
- $database->query($q);
- $q = "UPDATE ".TB_PREFIX."vdata SET `maxstore`= ".STORAGE_BASE." WHERE `maxstore`<= ".STORAGE_BASE." AND wref=".(int) $vil['vref'];
- $database->query($q);
+ $database->query("
+ UPDATE ".TB_PREFIX."vdata
+ SET
+ `maxstore` = IF(`maxstore` - ".$buildarray[$level]['attri']." <= ".STORAGE_BASE.", ".STORAGE_BASE.", `maxstore` - ".$buildarray[$level]['attri']."),
+ WHERE
+ wref=".(int) $vil['vref']);
}
+
if ($type==11 || $type==39) {
- $q = "UPDATE ".TB_PREFIX."vdata SET `maxcrop`=`maxcrop`-".$buildarray[$level]['attri']." WHERE wref=".(int) $vil['vref'];
- $database->query($q);
- $q = "UPDATE ".TB_PREFIX."vdata SET `maxcrop`= ".STORAGE_BASE." WHERE `maxcrop`<=800 AND wref=".(int) $vil['vref'];
- $database->query($q);
+ $database->query("
+ UPDATE ".TB_PREFIX."vdata
+ SET
+ `maxcrop` = IF(`maxcrop` - ".$buildarray[$level]['attri']." <= ".STORAGE_BASE.", ".STORAGE_BASE.", `maxcrop` - ".$buildarray[$level]['attri']."),
+ WHERE
+ wref=".(int) $vil['vref']);
}
+
if ($level==1) { $clear=",f".$vil['buildnumber']."t=0"; } else { $clear=""; }
+
if ($village->natar==1 && $type==40) $clear=""; //fix by ronix
+
$q = "UPDATE ".TB_PREFIX."fdata SET f".$vil['buildnumber']."=".($level-1).$clear." WHERE vref=".(int) $vil['vref'];
$database->query($q);
- $pop=$this->getPop($type,$level-1);
+
+ $pop = $this->getPop($type,$level-1);
$database->modifyPop($vil['vref'],$pop[0],1);
$this->procClimbers($database->getVillageField($vil['vref'],'owner'));
$database->delDemolition($vil['vref'], true);
+
if ($type==18){
Automation::updateMax($database->getVillageField($vil['vref'],'owner'));
}
@@ -4337,6 +4453,12 @@ class Automation {
$unitData = $database->getUnit($heroVillageIDs);
// now do the math
+ $columns = [];
+ $columnValues = [];
+ $modes = [];
+ $lastUpdateTime = time();
+ $newHealth = -1;
+
foreach($harray as $hdata){
if((time()-$hdata['lastupdate'])>=1){
if($hdata['health']<100 and $hdata['health']>0){
@@ -4347,33 +4469,86 @@ class Automation {
}else{
$speed = ceil(SPEED/100);
}
+
$reg = $hdata['health']+$hdata['regeneration']*5*$speed/86400*(time()-$hdata['lastupdate']);
+
if($reg <= 100){
- $database->modifyHero("health",$reg,$hdata['heroid']);
+ $newHealth = $reg;
}else{
- $database->modifyHero("health",100,$hdata['heroid']);
+ $newHealth = 100;
}
- $database->modifyHero("lastupdate",time(),$hdata['heroid']);
}
}
+
$herolevel = $hdata['level'];
- for($i = $herolevel+1; $i < 100; $i++){
+ $newLevel = -1;
+ $scorePoints = false;
+ for ($i = $herolevel+1; $i < 100; $i++){
if($hdata['experience'] >= $hero_levels[$i]){
- mysqli_query($GLOBALS['link'],"UPDATE " . TB_PREFIX ."hero SET level = $i WHERE heroid = '".(int) $hdata['heroid']."'");
- if($i < 99){
- mysqli_query($GLOBALS['link'],"UPDATE " . TB_PREFIX ."hero SET points = points + 5 WHERE heroid = '".(int) $hdata['heroid']."'");
+ $newLevel = $i;
+ if ($i < 99) {
+ $scorePoints = true;
}
}
}
+
+ // upgrade hero to a new level, if needed
+ if ($newLevel > -1) {
+ $columns[] = 'level';
+ $columnValues[] = $newLevel;
+ $modes[] = null;
+ }
+
+ // add 5 points, if we're below level 100
+ if ($scorePoints) {
+ $columns[] = 'points';
+ $columnValues[] = 5;
+ $modes[] = 1;
+ }
+
$villunits = $unitData[$hdata['wref']];
if($villunits['hero'] == 0 && $hdata['trainingtime'] < time() && $hdata['inrevive'] == 1){
mysqli_query($GLOBALS['link'],"UPDATE " . TB_PREFIX . "units SET hero = 1 WHERE vref = ".(int) $hdata['wref']."");
- mysqli_query($GLOBALS['link'],"UPDATE ".TB_PREFIX."hero SET `dead` = '0', `inrevive` = '0', `health` = '100', `lastupdate` = ".(int) $hdata['trainingtime']." WHERE `heroid` = ".(int) $hdata['heroid']);
+
+ $columns[] = 'dead';
+ $columnValues[] = 0;
+ $modes[] = null;
+
+ $columns[] = 'inrevive';
+ $columnValues[] = 0;
+ $modes[] = null;
+
+ $columns[] = 'inrevive';
+ $columnValues[] = 0;
+ $modes[] = null;
+
+ $newHealth = 100;
+ $lastUpdateTime = (int) $hdata['trainingtime'];
}
+
if($villunits['hero'] == 0 && $hdata['trainingtime'] < time() && $hdata['intraining'] == 1){
mysqli_query($GLOBALS['link'],"UPDATE " . TB_PREFIX . "units SET hero = 1 WHERE vref = ".(int) $hdata['wref']);
- mysqli_query($GLOBALS['link'],"UPDATE ".TB_PREFIX."hero SET `intraining` = '0', `lastupdate` = ".(int) $hdata['trainingtime']." WHERE `heroid` = ".(int) $hdata['heroid']);
+
+ $columns[] = 'intraining';
+ $columnValues[] = 0;
+ $modes[] = null;
+
+ $lastUpdateTime = (int) $hdata['trainingtime'];
}
+
+ // update health, if needed
+ if ($newHealth > -1) {
+ $columns[] = 'health';
+ $columnValues[] = $newHealth;
+ $modes[] = null;
+ }
+
+ // last update timestamp
+ $columns[] = 'lastupdate';
+ $columnValues[] = $lastUpdateTime;
+ $modes[] = null;
+
+ $database->modifyHero($columns, $columnValues, $hdata['heroid']);
}
}
if(file_exists("GameEngine/Prevention/updatehero.txt")) {
@@ -4440,30 +4615,21 @@ class Automation {
private function oasisResourcesProduce() {
global $database;
- $time = time();
- $q = "SELECT wood, clay, iron, crop, lastupdated, maxstore, maxcrop, wref FROM ".TB_PREFIX."odata WHERE wood < 800 OR clay < 800 OR iron < 800 OR crop < 800";
- $array = $database->query_return($q);
- foreach($array as $getoasis) {
- $oasiswood = $getoasis['wood'] + (8*SPEED/3600)*(time()-$getoasis['lastupdated']);
- $oasisclay = $getoasis['clay'] + (8*SPEED/3600)*(time()-$getoasis['lastupdated']);
- $oasisiron = $getoasis['iron'] + (8*SPEED/3600)*(time()-$getoasis['lastupdated']);
- $oasiscrop = $getoasis['crop'] + (8*SPEED/3600)*(time()-$getoasis['lastupdated']);
- if($oasiswood > $getoasis['maxstore']){
- $oasiswood = $getoasis['maxstore'];
- }
- if($oasisclay > $getoasis['maxstore']){
- $oasisclay = $getoasis['maxstore'];
- }
- if($oasisiron > $getoasis['maxstore']){
- $oasisiron = $getoasis['maxstore'];
- }
- if($oasiscrop > $getoasis['maxcrop']){
- $oasiscrop = $getoasis['maxcrop'];
- }
- $q = "UPDATE " . TB_PREFIX . "odata set wood = $oasiswood, clay = $oasisclay, iron = $oasisiron, crop = $oasiscrop where wref = ".(int) $getoasis['wref']."";
- $database->query($q);
- $database->updateOasis($getoasis['wref']);
- }
+
+ $speedMultiplier = (8 * (SPEED/3600));
+ $database->query("
+ UPDATE " . TB_PREFIX . "odata
+ SET
+ lastupdated = UNIX_TIMESTAMP(),
+ wood = IF(wood + ($speedMultiplier * (UNIX_TIMESTAMP() - lastupdated)) > maxstore, maxstore, wood + ($speedMultiplier * (UNIX_TIMESTAMP() - lastupdated))),
+ clay = IF(clay + ($speedMultiplier * (UNIX_TIMESTAMP() - lastupdated)) > maxstore, maxstore, clay + ($speedMultiplier * (UNIX_TIMESTAMP() - lastupdated))),
+ iron = IF(iron + ($speedMultiplier * (UNIX_TIMESTAMP() - lastupdated)) > maxstore, maxstore, iron + ($speedMultiplier * (UNIX_TIMESTAMP() - lastupdated))),
+ crop = IF(crop + ($speedMultiplier * (UNIX_TIMESTAMP() - lastupdated)) > maxcrop, maxcrop, crop + ($speedMultiplier * (UNIX_TIMESTAMP() - lastupdated)))
+ WHERE
+ wood < 800 OR
+ clay < 800 OR
+ iron < 800 OR
+ crop < 800");
}
private function checkInvitedPlayes() {
@@ -4486,20 +4652,21 @@ class Automation {
private function updateGeneralAttack() {
global $database;
- $time = time();
- $q = "SELECT id, time FROM ".TB_PREFIX."general WHERE shown = 1";
- $array = $database->query_return($q);
- foreach($array as $general) {
- if(time() - (86400*8) > $general['time']){
- mysqli_query($GLOBALS['link'],"UPDATE ".TB_PREFIX."general SET shown = 0 WHERE id = ".(int) $general['id']."");
- }
- }
+
+ mysqli_query($database->dblink, "
+ UPDATE ".TB_PREFIX."general
+ SET
+ shown = 0
+ WHERE
+ shown = 1 AND
+ `time` < (UNIX_TIMESTAMP() - (86400 * 8))");
}
private function MasterBuilder() {
global $database;
$q = "SELECT id, wid, type, level, field, timestamp FROM ".TB_PREFIX."bdata WHERE master = 1";
$array = $database->query_return($q);
+
foreach($array as $master) {
$owner = $database->getVillageField($master['wid'],'owner');
$tribe = $database->getUserField($owner,'tribe',0);
@@ -4515,42 +4682,56 @@ class Automation {
$buildiron = $buildarray[$level]['iron'];
$buildcrop = $buildarray[$level]['crop'];
$ww = count($database->getBuildingByType($master['wid'],40));
+
if($tribe == 1){
+
if($master['field'] < 19){
- $bdata = count($database->getDorf1Building($master['wid']));
+ $dorf1Buildings = $database->getDorf1Building($master['wid']);
+ $bdata = count($dorf1Buildings);
$bbdata = count($database->getDorf2Building($master['wid']));
- $bdata1 = $database->getDorf1Building($master['wid']);
+ $bdata1 = $dorf1Buildings;
}else{
+ $dorf2Buildings = $database->getDorf2Building($master['wid']);
$bdata = count($database->getDorf2Building($master['wid']));
$bbdata = count($database->getDorf1Building($master['wid']));
$bdata1 = $database->getDorf2Building($master['wid']);
}
+
}else{
- $bdata = $bbdata = count($database->getDorf1Building($master['wid'])) + count($database->getDorf2Building($master['wid']));
- $bdata1 = $database->getDorf1Building($master['wid']);
+ $dorf1Buildings = $database->getDorf1Building($master['wid']);
+ $bdata = $bbdata = count($dorf1Buildings) + count($database->getDorf2Building($master['wid']));
+ $bdata1 = $dorf1Buildings;
}
+
if($database->getUserField($owner,'plus',0) > time() or $ww > 0){
+
if($bbdata < 2){
$inbuild = 2;
}else{
$inbuild = 1;
}
+
}else{
$inbuild = 1;
}
+
$usergold = $database->getUserField($owner,'gold',0);
+
if($bdata < $inbuild && $buildwood < $villwood && $buildclay < $villclay && $buildiron < $villiron && $buildcrop < $villcrop && $usergold > 0){
$time = $master['timestamp']+time();
+
if(!empty($bdata1)){
foreach($bdata1 as $master1) {
$time += ($master1['timestamp']-time());
}
}
+
if($bdata == 0){
$database->updateBuildingWithMaster($master['id'],$time,0);
}else{
$database->updateBuildingWithMaster($master['id'],$time,1);
}
+
$gold = $usergold-1;
$database->updateUserField($owner,'gold',$gold,1);
$database->modifyResource($master['wid'],$buildwood,$buildclay,$buildiron,$buildcrop,0);
@@ -4602,8 +4783,7 @@ class Automation {
// get enforce other player from oasis
- $q = "SELECT e.*,o.conqured,o.wref,o.high, o.owner as ownero, v.owner as ownerv FROM ".TB_PREFIX."enforcement as e LEFT JOIN ".TB_PREFIX."odata as o ON e.vref=o.wref LEFT JOIN ".TB_PREFIX."vdata as v ON e.from=v.wref where o.conqured=".(int) $starv['wref']." AND o.owner<>v.owner";
- $enforceoasis = $database->query_return($q);
+ $enforceoasis = $database->getOasisEnforce($starv['wref'], 2);
$maxcount=0;
$totalunits=0;
if(count($enforceoasis)>0){
@@ -4625,8 +4805,7 @@ class Automation {
}
}else{
//own troops from oasis
- $q = "SELECT e.*,o.conqured,o.wref,o.high, o.owner as ownero, v.owner as ownerv FROM ".TB_PREFIX."enforcement as e LEFT JOIN ".TB_PREFIX."odata as o ON e.vref=o.wref LEFT JOIN ".TB_PREFIX."vdata as v ON e.from=v.wref where o.conqured=".(int) $starv['wref']." AND o.owner=v.owner";
- $enforceoasis = $database->query_return($q);
+ $enforceoasis = $database->getOasisEnforce($starv['wref'], 3);
if(count($enforceoasis)>0){
foreach ($enforceoasis as $enforce){
for($i=1;$i<=50;$i++){
@@ -4645,8 +4824,7 @@ class Automation {
}
}else{
//get enforce other player from village
- $q = "SELECT e.*, v.owner as ownerv, v1.owner as owner1 FROM ".TB_PREFIX."enforcement as e LEFT JOIN ".TB_PREFIX."vdata as v ON e.from=v.wref LEFT JOIN ".TB_PREFIX."vdata as v1 ON e.vref=v1.wref where e.vref=".(int) $starv['wref']." AND v.owner<>v1.owner";
- $enforcearray = $database->query_return($q);
+ $enforcearray = $database->getEnforceVillage($starv['wref'], 2);
if(count($enforcearray)>0){
foreach ($enforcearray as $enforce){
for($i = 0 ; $i <= 50 ; $i++){
@@ -4665,8 +4843,7 @@ class Automation {
}
}else{
//get own reinforcement from other village
- $q = "SELECT e.*, v.owner as ownerv, v1.owner as owner1 FROM ".TB_PREFIX."enforcement as e LEFT JOIN ".TB_PREFIX."vdata as v ON e.from=v.wref LEFT JOIN ".TB_PREFIX."vdata as v1 ON e.vref=v1.wref where e.vref=".(int) $starv['wref']." AND v.owner=v1.owner";
- $enforcearray = $database->query_return($q);
+ $enforcearray = $database->getEnforceVillage($starv['wref'], 3);
if(count($enforcearray)>0){
foreach ($enforcearray as $enforce){
for($i = 0 ; $i <= 50 ; $i++){
@@ -4725,8 +4902,10 @@ class Automation {
if($difcrop > 0){
global ${'u'.$maxtype};
+
$hungry=array();
$hungry=${'u'.$maxtype};
+
if ($hungry['crop']>0 && $oldcrop <=0) {
$killunits = intval($difcrop/$hungry['crop']);
}else $killunits=0;
@@ -4739,24 +4918,33 @@ class Automation {
if (isset($enf)){
if($killunits < $maxcount){
$database->modifyEnforce($enf, $maxtype, $killunits, 0);
- $database->setVillageField($starv['wref'], 'starv', $upkeep);
- $database->setVillageField($starv['wref'], 'starvupdate', $time);
+ $database->setVillageField(
+ $starv['wref'],
+ ['starv', 'starvupdate'],
+ [$upkeep, $time]
+ );
$database->modifyResource($starv['wref'],0,0,0,$hungry['crop'],1);
+
if($maxtype == "hero"){
$heroid = $database->getHeroField($database->getVillageField($enf,"owner"),"heroid");
$database->modifyHero("dead", 1, $heroid);
}
}else{
$database->deleteReinf($enf);
- $database->setVillageField($starv['wref'], 'starv', $upkeep);
- $database->setVillageField($starv['wref'], 'starvupdate', $time);
+ $database->setVillageField(
+ $starv['wref'],
+ ['starv', 'starvupdate'],
+ [$upkeep, $time]
+ );
}
}else{
if($killunits < $maxcount){
- die('vvvv');
$database->modifyUnit($starv['wref'], array($maxtype), array($killunits), array(0));
- $database->setVillageField($starv['wref'], 'starv', $upkeep);
- $database->setVillageField($starv['wref'], 'starvupdate', $time);
+ $database->setVillageField(
+ $starv['wref'],
+ ['starv', 'starvupdate'],
+ [$upkeep, $time]
+ );
$database->modifyResource($starv['wref'],0,0,0,$hungry['crop'],1);
if($maxtype == "hero"){
$heroid = $database->getHeroField($starv['owner'],"heroid");
@@ -4765,8 +4953,12 @@ class Automation {
}elseif($killunits > $maxcount){
$killunits = $maxcount;
$database->modifyUnit($starv['wref'], array($maxtype), array($killunits), array(0));
- $database->setVillageField($starv['wref'], 'starv', $upkeep);
- $database->setVillageField($starv['wref'], 'starvupdate', $time);
+ $database->setVillageField(
+ $starv['wref'],
+ ['starv', 'starvupdate'],
+ [$upkeep, $time]
+ );
+
if($maxtype == "hero"){
$heroid = $database->getHeroField($starv['owner'],"heroid");
$database->modifyHero("dead", 1, $heroid);
@@ -4776,12 +4968,15 @@ class Automation {
}
}
}
- $crop = $database->getCropProdstarv($starv['wref']);
- if ($crop > $upkeep){
- $database->setVillageField($starv['wref'], 'starv', 0);
- $database->setVillageField($starv['wref'], 'starvupdate', 0);
- }
+ $crop = $database->getCropProdstarv($starv['wref'], false);
+ if ($crop > $upkeep){
+ $database->setVillageField(
+ $starv['wref'],
+ ['starv', 'starvupdate'],
+ [0, 0]
+ );
+ }
unset ($starv,$unitarrays,$enforcearray,$enforce,$starvarray);
}
@@ -4935,13 +5130,17 @@ class Automation {
private function checkBan() {
global $database;
- $time = time();
- $q = "SELECT id, uid FROM ".TB_PREFIX."banlist WHERE active = 1 AND end < $time AND end > 0";
- $array = $database->query_return($q);
- foreach($array as $banlist) {
- mysqli_query($GLOBALS['link'],"UPDATE ".TB_PREFIX."banlist SET active = 0 WHERE id = ".(int) $banlist['id']."");
- mysqli_query($GLOBALS['link'],"UPDATE ".TB_PREFIX."users SET access = 2 WHERE id = ".(int) $banlist['uid']."");
- }
+
+ mysqli_query($database->dblink, "
+ UPDATE ".TB_PREFIX."banlist as b
+ JOIN ".TB_PREFIX."users as u ON b.uid = u.id
+ SET
+ b.active = 0,
+ u.access = 2
+ WHERE
+ b.active = 1 AND
+ b.`end` < UNIX_TIMESTAMP() AND
+ b.`end` > 0");
}
private function regenerateOasisTroops() {
diff --git a/GameEngine/Database.php b/GameEngine/Database.php
index 47490acd..b4326c63 100755
--- a/GameEngine/Database.php
+++ b/GameEngine/Database.php
@@ -672,6 +672,7 @@ class MYSQLi_DB implements IDbConnection {
*/
public static function clearVillageCache() {
self::$villageFieldsCache = [];
+ self::$villageFieldsCacheByWorldID = [];
}
/**
@@ -994,8 +995,8 @@ class MYSQLi_DB implements IDbConnection {
return $this->mysqli_fetch_all($result);
}
- function getVrefField($ref, $field) {
- return $this->getVillage($ref)[$field];
+ function getVrefField($ref, $field, $use_cache = true) {
+ return $this->getVillage($ref, $use_cache)[$field];
}
// no need to cache this method
@@ -1303,9 +1304,15 @@ class MYSQLi_DB implements IDbConnection {
}
function setFieldTaken($id) {
- list($id) = $this->escape_input((int) $id);
+ if (!is_array($id)) {
+ $id = [$id];
+ }
- $q = "UPDATE " . TB_PREFIX . "wdata set occupied = 1 where id = ". $id;
+ foreach ($id as $index => $idValue) {
+ $id[$index] = (int) $idValue;
+ }
+
+ $q = "UPDATE " . TB_PREFIX . "wdata SET occupied = 1 WHERE id IN(". implode(', ', $id).")";
return mysqli_query($this->dblink,$q);
}
@@ -1879,9 +1886,10 @@ class MYSQLi_DB implements IDbConnection {
return self::$resourceLevelsCache[$vid];
}
- public function clearResourseLevelsCache() {
+ public static function clearResourseLevelsCache() {
self::$resourceLevelsCache = [];
self::$fieldLevelsInVillageSearchCache = [];
+ self::$fieldLevelsCache = [];
}
function getAdminLog() {
@@ -4948,13 +4956,27 @@ class MYSQLi_DB implements IDbConnection {
$ref2 = [$ref2];
}
+ $counter = 0;
$pairs = [];
+
foreach ($type as $index => $typeValue) {
$pairs[] = '(0, '.(int) $typeValue.', '.(int) $from[$index].', '.(int) $to[$index].', '.(int) $ref[$index].', '.(int) $ref2[$index].', '.(int) $time[$index].', '.(int) $endtime[$index].', 0, '.(int) $send[$index].', '.(int) $wood[$index].', '.(int) $clay[$index].', '.(int) $iron[$index].', '.(int) $crop[$index].')';
+
+ if ($counter++ > 25) {
+ $q = "INSERT INTO " . TB_PREFIX . "movement VALUES ".implode(', ', $pairs);
+ mysqli_query($this->dblink,$q);
+
+ $pairs = [];
+ $counter = 0;
+ }
}
- $q = "INSERT INTO " . TB_PREFIX . "movement VALUES ".implode(', ', $pairs);
- return mysqli_query($this->dblink,$q);
+ if ($counter > 0) {
+ $q = "INSERT INTO " . TB_PREFIX . "movement VALUES " . implode( ', ', $pairs );
+ return mysqli_query( $this->dblink, $q );
+ } else {
+ return true;
+ }
}
function addAttack($vid, $t1, $t2, $t3, $t4, $t5, $t6, $t7, $t8, $t9, $t10, $t11, $type, $ctar1, $ctar2, $spy,$b1=0,$b2=0,$b3=0,$b4=0,$b5=0,$b6=0,$b7=0,$b8=0) {
@@ -5100,9 +5122,15 @@ class MYSQLi_DB implements IDbConnection {
}
function addUnits($vid) {
- list($vid) = $this->escape_input((int) $vid);
+ if (!is_array($vid)) {
+ $vid = [$vid];
+ }
- $q = "INSERT into " . TB_PREFIX . "units (vref) values ($vid)";
+ foreach ($vid as $index => $vidValue) {
+ $vid[$index] = (int) $vidValue;
+ }
+
+ $q = "INSERT into " . TB_PREFIX . "units (vref) values (".implode(', ', $vid).")";
return mysqli_query($this->dblink,$q);
}
@@ -5222,16 +5250,25 @@ class MYSQLi_DB implements IDbConnection {
return self::$heroFieldCache[$uid.$field][$field];
}
- function modifyHero($column,$value,$heroid,$mode=0) {
- list($column,$value,$heroid,$mode) = $this->escape_input($column,$value,(int) $heroid,$mode);
+ function modifyHero($column,$value,$heroid,$mode=null) {
+ if (!is_array($column)) {
+ $column = [$column];
+ $value = [$value];
+ $mode = [$mode];
+ }
- if(!$mode) {
- $q = "UPDATE `".TB_PREFIX."hero` SET $column = '$value' WHERE heroid = $heroid";
- } elseif($mode=1) {
- $q = "UPDATE `".TB_PREFIX."hero` SET $column = $column + ". (int) $value . " WHERE heroid = $heroid";
- } else {
- $q = "UPDATE `".TB_PREFIX."hero` SET $column = $column - ". (int) $value ." WHERE heroid = $heroid";
- }
+ $pairs = [];
+ foreach ($column as $index => $columnValue) {
+ if($mode[$index] === null) {
+ $pairs[] = "$columnValue = ".(Math::isInt($value[$index]) ? $value[$index] : '"'.$this->escape($value[$index]).'"');
+ } elseif($mode[$index]=1) {
+ $pairs[] = "$columnValue = $columnValue + ".(int) $value[$index];
+ } else {
+ $pairs[] = "$columnValue = $columnValue - ".(int) $value[$index];
+ }
+ }
+
+ $q = "UPDATE `".TB_PREFIX."hero` SET ".implode(', ', $pairs)." WHERE heroid = $heroid";
return mysqli_query($this->dblink,$q);
}
@@ -5256,16 +5293,28 @@ class MYSQLi_DB implements IDbConnection {
}
function addTech($vid) {
- list($vid) = $this->escape_input((int) $vid);
+ if (!is_array($vid)) {
+ $vid = [$vid];
+ }
- $q = "INSERT into " . TB_PREFIX . "tdata (vref) values ($vid)";
+ foreach ($vid as $index => $vidValue) {
+ $vid[$index] = (int) $vidValue;
+ }
+
+ $q = "INSERT INTO " . TB_PREFIX . "tdata (vref) VALUES (".implode(', ', $vid).")";
return mysqli_query($this->dblink,$q);
}
function addABTech($vid) {
- list($vid) = $this->escape_input((int) $vid);
+ if (!is_array($vid)) {
+ $vid = [$vid];
+ }
- $q = "INSERT into " . TB_PREFIX . "abdata (vref) values ($vid)";
+ foreach ($vid as $index => $vidValue) {
+ $vid[$index] = (int) $vidValue;
+ }
+
+ $q = "INSERT INTO " . TB_PREFIX . "abdata (vref) VALUES (".implode(', ', $vid).")";
return mysqli_query($this->dblink,$q);
}
@@ -5433,11 +5482,12 @@ class MYSQLi_DB implements IDbConnection {
if($unit == 121){$unit = 21;}
if($unit =="hero"){$unit = 'hero';}
else{$unit = 'u' . $unit;}
- ++$i;
- //Fixed part of negativ troops (double troops) - by InCube
- $array_amt[$i] = (int) $array_amt[$i] < 0 ? 0 : $array_amt[$i];
- //Fixed part of negativ troops (double troops) - by InCube
- $units .= $unit.' = '.$unit.' '.(($array_mode[$i] == 1)? '+':'-').' '.($array_amt[$i] ? $array_amt[$i] : 0).(($number > $i+1) ? ', ' : '');
+
+ ++$i;
+ //Fixed part of negativ troops (double troops) - by InCube
+ $array_amt[$i] = (int) $array_amt[$i] < 0 ? 0 : $array_amt[$i];
+ //Fixed part of negativ troops (double troops) - by InCube
+ $units .= $unit.' = '.$unit.' '.(($array_mode[$i] == 1)? '+':'-').' '.($array_amt[$i] ? $array_amt[$i] : 0).(($number > $i+1) ? ', ' : '');
}
$q = "UPDATE ".TB_PREFIX."units set $units WHERE vref = $vref";
return mysqli_query($this->dblink,$q);
@@ -5470,8 +5520,12 @@ class MYSQLi_DB implements IDbConnection {
if (!$mode) {
$q = "SELECT e.*,o.conqured FROM ".TB_PREFIX."enforcement as e LEFT JOIN ".TB_PREFIX."odata as o ON e.vref=o.wref where o.conqured = $ref AND e.from !=$ref";
- }else{
+ }else if ($mode == 1) {
$q = "SELECT e.*,o.conqured FROM ".TB_PREFIX."enforcement as e LEFT JOIN ".TB_PREFIX."odata as o ON e.vref=o.wref where o.conqured = $ref";
+ } else if ($mode == 2) {
+ $q = "SELECT e.*,o.conqured,o.wref,o.high, o.owner as ownero, v.owner as ownerv FROM ".TB_PREFIX."enforcement as e LEFT JOIN ".TB_PREFIX."odata as o ON e.vref=o.wref LEFT JOIN ".TB_PREFIX."vdata as v ON e.from=v.wref where o.conqured=$ref AND o.owner<>v.owner";
+ } else if ($mode == 3) {
+ $q = "SELECT e.*,o.conqured,o.wref,o.high, o.owner as ownero, v.owner as ownerv FROM ".TB_PREFIX."enforcement as e LEFT JOIN ".TB_PREFIX."odata as o ON e.vref=o.wref LEFT JOIN ".TB_PREFIX."vdata as v ON e.from=v.wref where o.conqured=$ref AND o.owner=v.owner";
}
$result = mysqli_query($this->dblink,$q);
@@ -5509,13 +5563,24 @@ class MYSQLi_DB implements IDbConnection {
$start = ($owntribe - 1) * 10 + 1;
$end = ($owntribe * 10);
//add unit
- $j = '1';
+ $j = 1;
+ $units = [];
+ $amounts = [];
+ $modes = [];
+
for($i = $start; $i <= $end; $i++) {
- $this->modifyEnforce($id, $i, $data['t' . $j . ''], 1);
+ $units[] = $i;
+ $amounts[] = $data['t' . $j . ''];
+ $modes[] = 1;
$j++;
}
- $this->modifyEnforce($id,'hero',$data['t11'],1);
- return mysqli_insert_id($this->dblink);
+
+ // add hero
+ $units[] = 'hero';
+ $amounts[] = $data['t11'];
+ $modes[] = 1;
+
+ $this->modifyEnforce($id,$units, $amounts, $modes);
}
function addEnforce2($data,$tribe,$dead1,$dead2,$dead3,$dead4,$dead5,$dead6,$dead7,$dead8,$dead9,$dead10,$dead11) {
@@ -5534,15 +5599,34 @@ class MYSQLi_DB implements IDbConnection {
}
$end2 = ($tribe * 10);
//add unit
- $j = '1';
+ $j = 1;
+
+ $units = [];
+ $amounts = [];
+ $modes = [];
+
for($i = $start; $i <= $end; $i++) {
- $this->modifyEnforce($id, $i, $data['t' . $j . ''], 1);
- $this->modifyEnforce($id, $i, ${'dead'.$j}, 0);
+ $units[] = $i;
+ $amounts[] = $data['t' . $j . ''];
+ $modes[] = 1;
+
+ $units[] = $i;
+ $amounts[] = ${'dead'.$j};
+ $modes[] = 0;
+
$j++;
}
- $this->modifyEnforce($id,'hero',$data['t11'],1);
- $this->modifyEnforce($id,'hero',$dead11,0);
- return mysqli_insert_id($this->dblink);
+
+ // process heroes
+ $units[] = 'hero';
+ $amounts[] = $data['t11'];
+ $modes[] = 1;
+
+ $units[] = 'hero';
+ $amounts[] = $dead11;
+ $modes[] = 0;
+
+ $this->modifyEnforce($id,$units, $amounts, $modes);
}
function modifyEnforce($id, $unit, $amt, $mode) {
@@ -5596,9 +5680,13 @@ class MYSQLi_DB implements IDbConnection {
if(!$mode) {
$q = "SELECT * from " . TB_PREFIX . "enforcement where vref = $id";
- } else {
+ } else if ($mode == 1) {
$q = "SELECT * from " . TB_PREFIX . "enforcement where `from` = $id";
- }
+ } else if ($mode == 2) {
+ $q = "SELECT e.*, v.owner as ownerv, v1.owner as owner1 FROM ".TB_PREFIX."enforcement as e LEFT JOIN ".TB_PREFIX."vdata as v ON e.from=v.wref LEFT JOIN ".TB_PREFIX."vdata as v1 ON e.vref=v1.wref where e.vref=$id AND v.owner<>v1.owner";
+ } else if ($mode == 3) {
+ $q = "SELECT e.*, v.owner as ownerv, v1.owner as owner1 FROM ".TB_PREFIX."enforcement as e LEFT JOIN ".TB_PREFIX."vdata as v ON e.from=v.wref LEFT JOIN ".TB_PREFIX."vdata as v1 ON e.vref=v1.wref where e.vref=$id AND v.owner=v1.owner";
+ }
$result = mysqli_query($this->dblink,$q);
self::$villageReinforcementsCache[$id.$mode] = $this->mysqli_fetch_all($result);
@@ -6342,7 +6430,7 @@ class MYSQLi_DB implements IDbConnection {
$clay = 0;
$iron = 0;
$basecrop = $grainmill = $bakery = 0;
- $owner = $this->getVrefField($wref, 'owner');
+ $owner = $this->getVrefField($wref, 'owner', $use_cache);
$bonus = $this->getUserField($owner, 'b4', 0);
$buildarray = $this->getResourceLevel($wref);
diff --git a/GameEngine/Technology.php b/GameEngine/Technology.php
index ea7bd30e..11051081 100755
--- a/GameEngine/Technology.php
+++ b/GameEngine/Technology.php
@@ -542,8 +542,14 @@ class Technology {
// 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));
diff --git a/install/include/accounts.php b/install/include/accounts.php
index d9ffbb43..4cc36e58 100644
--- a/install/include/accounts.php
+++ b/install/include/accounts.php
@@ -47,6 +47,10 @@
$uid = mysqli_insert_id($database->dblink);
$admin_village_created = false;
$xcoor = 50;
+ $addUnitsWrefs = [];
+ $addTechWrefs = [];
+ $addABTechWrefs = [];
+
while (!$admin_village_created) {
$wid = $admin->getWref($xcoor++, 50);
$status = $database->getVillageState($wid);
@@ -54,12 +58,16 @@
$database->setFieldTaken($wid);
$database->addVillage($wid, $uid, $_POST['aname'], 1);
$database->addResourceFields($wid, $database->getVillageType($wid));
- $database->addUnits($wid);
- $database->addTech($wid);
- $database->addABTech($wid);
+ $addUnitsWrefs[] = $wid;
+ $addTechWrefs[] = $wid;
+ $addABTechWrefs[] = $wid;
$admin_village_created = true;
}
}
+
+ $database->addUnits($addUnitsWrefs);
+ $database->addTech($addTechWrefs);
+ $database->addABTech($addABTechWrefs);
}
// set up MultiHunter