refactor: s1_fdata caching implemented

#313
This commit is contained in:
Martin Ambrus
2017-11-20 15:41:29 +01:00
parent 91049ae034
commit 64d7d158c7
3 changed files with 42 additions and 1 deletions
+11 -1
View File
@@ -4260,7 +4260,9 @@ class Automation {
foreach($trainlist as $train){
$vilIDs[$train['vref']] = true;
}
$database->getProfileVillages(array_keys($vilIDs), 5);
$vilIDs = array_keys($vilIDs);
$database->getProfileVillages($vilIDs, 5);
$database->cacheResourceLevels($vilIDs);
// calculate training updates
foreach($trainlist as $train){
@@ -5223,6 +5225,14 @@ class Automation {
if ($q['Total'] > 0) {
$villages = $database->getVillagesID2($leader);
$max = 0;
// cache resource levels
$vilIDs = [];
foreach($villages as $village){
$vilIDs[$village['wref']] = true;
}
$database->cacheResourceLevels(array_keys($vilIDs));
foreach($villages as $village){
$field = $database->getResourceLevel($village['wref'], false);
for($i=19;$i<=40;$i++){
+30
View File
@@ -2073,6 +2073,36 @@ class MYSQLi_DB implements IDbConnection {
return mysqli_query($this->dblink,$q);
}
function cacheResourceLevels($vids) {
if (!is_array($vids)) {
$vids = [$vids];
}
$newVids = [];
foreach ($vids as $index => $vidValue) {
$vids[ $index ] = (int) $vidValue;
// don't cache what's cached
if (!isset(self::$resourceLevelsCache[$vids[ $index ]])) {
$newVids[] = $vids[ $index ];
}
}
$vids = $newVids;
if (!count($vids)) {
return [];
}
$q = "SELECT * FROM " . TB_PREFIX . "fdata WHERE vref IN(".implode(', ', $vids).")";
$result = mysqli_query($this->dblink,$q);
foreach ( $this->mysqli_fetch_all( $result ) as $row ) {
self::$resourceLevelsCache[ $row['vref'] ] = $row;
}
return self::$resourceLevelsCache;
}
function getResourceLevel($vid, $use_cache = true) {
list($vid) = $this->escape_input((int) $vid);
+1
View File
@@ -46,6 +46,7 @@ class Village {
}
$this->LoadTown();
$database->cacheResourceLevels($this->wid);
$this->calculateProduction();
$this->processProduction();
$this->ActionControl();