From e798635ebb44ad7f3021b5058388dd0887404749 Mon Sep 17 00:00:00 2001 From: Martin Ambrus Date: Mon, 13 Nov 2017 17:01:36 +0100 Subject: [PATCH] fix: setVillageLevel() tried to execute wrong SQL + some more methods for later refactor commit --- GameEngine/Database.php | 77 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 71 insertions(+), 6 deletions(-) diff --git a/GameEngine/Database.php b/GameEngine/Database.php index 0beb96b7..e89ad749 100755 --- a/GameEngine/Database.php +++ b/GameEngine/Database.php @@ -1250,23 +1250,35 @@ class MYSQLi_DB implements IDbConnection { } function setVillageFields($ref, $fields, $values) { - list($ref, $field, $value) = $this->escape_input((int) $ref, $fields, $values); + list($ref, $fields, $value) = $this->escape_input((int) $ref, $fields, $values); // build the field-value query parts $fieldValues = []; foreach ($fields as $id => $fieldName) { - $fieldValues[] = $fieldName.' = '.((Math::isInt($values[$id]) || Math::isFloat($values[$id])) ? $values[$id] : '"'.$this->escape($values[$id]).'"'); + $fieldValues[] = $this->escape_input($fieldName).' = '.((Math::isInt($values[$id]) || Math::isFloat($values[$id])) ? $values[$id] : '"'.$this->escape($values[$id]).'"'); } $q = "UPDATE " . TB_PREFIX . "vdata set ".implode(', ', $fieldValues)." where wref = $ref"; return mysqli_query($this->dblink,$q); } - function setVillageLevel($ref, $field, $value) { - list($ref, $field, $value) = $this->escape_input((int) $ref, $field, $value); + function setVillageLevel($ref, $fields, $values) { + list($ref, $fields, $values) = $this->escape_input((int) $ref, $fields, $values); - $q = "UPDATE " . TB_PREFIX . "fdata set " . $field . " = '" . $value . "' where vref = " . $ref . ""; - return mysqli_query($this->dblink,$q); + // build the field-value query parts + $fieldValues = []; + + if (!is_array($fields)) { + $fields = [$fields]; + $values = [$values]; + } + + foreach ($fields as $id => $fieldName) { + $fieldValues[] = $this->escape($fieldName).' = '.((Math::isInt($values[$id]) || Math::isFloat($values[$id])) ? $values[$id] : '"'.$this->escape($values[$id]).'"'); + } + + $q = "UPDATE " . TB_PREFIX . "fdata set ".implode(', ', $fieldValues)." where vref = " . $ref; + return mysqli_query($this->dblink,$q) OR DIE (mysqli_error($this->dblink) . ' ... ' . $q); } function getResourceLevel($vid) { @@ -2275,6 +2287,32 @@ class MYSQLi_DB implements IDbConnection { return mysqli_query($this->dblink,$q); }else{return false;} } + function setMaxStoreForVillage($vid, $maxLevel) { + $vid = (int) $vid; + $maxLevel = (int) $maxLevel; + + $this->query(" + UPDATE + ".TB_PREFIX."vdata + SET + `maxstore` = IF( `maxstore` - $maxLevel < 800, 800, `maxstore` - $maxLevel ) + WHERE + wref=$vid"); + } + + function setMaxCropForVillage($vid, $maxLevel) { + $vid = (int) $vid; + $maxLevel = (int) $maxLevel; + + $this->query(" + UPDATE + ".TB_PREFIX."vdata + SET + `maxcrop` = IF( `maxcrop` - $maxLevel < 800, 800, `maxcrop` - $maxLevel ) + WHERE + wref=$vid"); + } + function modifyOasisResource($vid, $wood, $clay, $iron, $crop, $mode) { list($vid, $wood, $clay, $iron, $crop, $mode) = $this->escape_input((int) $vid, (int) $wood, (int) $clay, (int) $iron, (int) $crop, $mode); @@ -3641,6 +3679,33 @@ class MYSQLi_DB implements IDbConnection { return true; } + function checkEmbassiesAfterBattle(&$villageOwners, &$cachedUserData, $vid) { + if (!isset($villageOwners[$vid])) { + $villageOwners[$vid] = $this->getVillageField($vid,"owner"); + } + + if (!isset($cachedUserData[$vid])) { + $cachedUserData[$vid] = $this->getUserArray($villageOwners[$vid], 1); + } + + Automation::updateMax($villageOwners[$vid]); + $allianceStatus = $this->checkAllianceEmbassiesStatus([ + 'id' => $cachedUserData[$vid], + 'alliance' => $cachedUserData[$vid]["alliance"], + 'username' => $cachedUserData[$vid]["username"], + 'lvl' => $totallvl + ]); + + if ($allianceStatus === false) { + return ' This player\'s alliance has been dispersed.'; + } else if ($allianceStatus === 0) { + return ' Player was forced to leave their alliance.'; + } else { + // all is good, no need to append additional alliance-related text + return ''; + } + } + function getJobs($wid) { list($wid) = $this->escape_input((int) $wid);