refactor: a lot of Automation foreach loops updated

#313
This commit is contained in:
Martin Ambrus
2017-11-19 14:01:30 +01:00
parent 481769b68e
commit 67d9a42506
7 changed files with 521 additions and 202 deletions
+12 -3
View File
@@ -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");
}
?>
+35 -31
View File
@@ -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("<br/><br/><br/>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("<br/><br/><br/>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 <b>$amt</b> WW Buildingplan Villages',".time().")");
+10 -5
View File
@@ -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 <b>$amt</b> WW Villages',".time().")");
mysqli_query($GLOBALS["link"], "Insert into ".TB_PREFIX."admin_log values (0,$id,'Added <b>$amt</b> WW Villages',".time().")");
header("Location: ../../../Admin/admin.php?p=natarend&g");
?>
+318 -119
View File
@@ -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() {
+129 -41
View File
@@ -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);
+6
View File
@@ -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));
+11 -3
View File
@@ -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