From 676de957648272b95c085678feacccffc9e0039a Mon Sep 17 00:00:00 2001 From: Martin Ambrus Date: Tue, 21 Nov 2017 00:22:30 +0100 Subject: [PATCH] refactor: s1_hero to update last timestamps in a single query #313 --- GameEngine/Automation.php | 25 +++++++++++++++++++------ GameEngine/Database.php | 14 -------------- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/GameEngine/Automation.php b/GameEngine/Automation.php index 9533ba14..3e6e3e07 100755 --- a/GameEngine/Automation.php +++ b/GameEngine/Automation.php @@ -4539,11 +4539,13 @@ class Automation { $unitData = $database->getUnit($heroVillageIDs); // now do the math + $lastUpdateIDs = []; + $timeNow = time(); foreach($harray as $hdata){ $columns = []; $columnValues = []; $modes = []; - $lastUpdateTime = time(); + $lastUpdateTime = $timeNow; $newHealth = -1; if((time()-$hdata['lastupdate'])>=1){ @@ -4629,12 +4631,23 @@ class Automation { $modes[] = null; } - // last update timestamp - $columns[] = 'lastupdate'; - $columnValues[] = $lastUpdateTime; - $modes[] = null; + if ($lastUpdateTime != $timeNow) { + // last update timestamp + $columns[] = 'lastupdate'; + $columnValues[] = $lastUpdateTime; + $modes[] = null; + } else { + // leave same last update values for multiple heroes to the end + $lastUpdateIDs[] = $hdata['heroid']; + } - $database->modifyHero($columns, $columnValues, $hdata['heroid']); + if (count($columns)) { + $database->modifyHero( $columns, $columnValues, $hdata['heroid'] ); + } + } + + if (count($lastUpdateIDs)) { + mysqli_query($GLOBALS['link'],"UPDATE " . TB_PREFIX . "hero SET lastupdate = $timeNow WHERE heroid IN(".implode(', ', $lastUpdateIDs).")"); } } if(file_exists("GameEngine/Prevention/updatehero.txt")) { diff --git a/GameEngine/Database.php b/GameEngine/Database.php index 12b9623e..0975f2a7 100755 --- a/GameEngine/Database.php +++ b/GameEngine/Database.php @@ -5691,19 +5691,6 @@ References: User ID/Message ID, Mode return mysqli_query($this->dblink,$q); } - function modifyHeroByOwner($column,$value,$uid,$mode=0) { - list($column,$value,$uid,$mode) = $this->escape_input($column,$value,(int) $uid,$mode); - - if(!$mode) { - $q = "UPDATE `".TB_PREFIX."hero` SET $column = '$value' WHERE uid = $uid AND dead = 0"; - } elseif($mode=1) { - $q = "UPDATE `".TB_PREFIX."hero` SET $column = $column + ". (int) $value ." WHERE uid = $uid AND dead = 0"; - } else { - $q = "UPDATE `".TB_PREFIX."hero` SET $column = $column - ". (int) $value ." WHERE uid = $uid AND dead = 0"; - } - return mysqli_query($this->dblink,$q); - } - function modifyHeroXp($column,$value,$heroid) { list($column,$value,$heroid) = $this->escape_input($column,(int) $value,(int) $heroid); @@ -5811,7 +5798,6 @@ References: User ID/Message ID, Mode return mysqli_query($this->dblink,$q); } - // no need to cache this method function getResearching($vid, $use_cache = true) { $vid = (int) $vid;