diff --git a/includes/basetype.class.php b/includes/basetype.class.php index 63be8799..8f821965 100644 --- a/includes/basetype.class.php +++ b/includes/basetype.class.php @@ -166,7 +166,7 @@ abstract class BaseType $op = (isset($c[2]) && $c[2] == '!') ? 'NOT IN' : 'IN'; $val = '('.implode(', ', $c[1]).')'; } - else if (Util::checkNumeric($c[1])) + else if (Util::checkNumeric($c[1])) // Note: should this be a NUM_REQ_* check? { $op = (isset($c[2]) && $c[2] == '!') ? '<>' : '='; $val = $c[1]; @@ -880,7 +880,7 @@ trait sourceHelper $s = array_keys($this->sources[$this->id]); if ($this->curTpl['moreType'] && $this->curTpl['moreTypeId'] && ($srcData = $this->sourceMore[$this->curTpl['moreType']]->getSourceData($this->curTpl['moreTypeId']))) - $sm = $srcData; + $sm = $srcData[$this->curTpl['moreTypeId']]; else if (!empty($this->sources[$this->id][SRC_PVP])) $sm['p'] = $this->sources[$this->id][SRC_PVP][0]; diff --git a/includes/types/creature.class.php b/includes/types/creature.class.php index 285d5f7d..65bd9eb4 100644 --- a/includes/types/creature.class.php +++ b/includes/types/creature.class.php @@ -393,7 +393,7 @@ class CreatureListFilter extends Filter if (!$this->parentCats || $this->parentCats[0] != 1) return false; - if (!Util::checkNumeric($val, NUM_REQ_INT)) + if (!Util::checkNumeric($val, NUM_CAST_INT)) return false; $type = FILTER_V_LIST; @@ -518,7 +518,7 @@ class CreatureListFilter extends Filter protected function cbFaction($cr) { - if (!Util::checkNumeric($cr[1], NUM_REQ_INT)) + if (!Util::checkNumeric($cr[1], NUM_CAST_INT)) return false; if (!in_array($cr[1], $this->enums[$cr[0]])) diff --git a/includes/types/item.class.php b/includes/types/item.class.php index 12f0fefb..7912c5c9 100644 --- a/includes/types/item.class.php +++ b/includes/types/item.class.php @@ -2503,7 +2503,7 @@ class ItemListFilter extends Filter protected function cbDisenchantsInto($cr) { - if (!Util::checkNumeric($cr[1], NUM_REQ_INT)) + if (!Util::checkNumeric($cr[1], NUM_CAST_INT)) return false; if (!in_array($cr[1], $this->enums[$cr[0]])) @@ -2620,7 +2620,7 @@ class ItemListFilter extends Filter if (!$this->parentCats) return false; - if (!Util::checkNumeric($v, NUM_REQ_INT)) + if (!Util::checkNumeric($v, NUM_CAST_INT)) return false; $c = $this->parentCats; @@ -2650,7 +2650,7 @@ class ItemListFilter extends Filter protected function cbSlotCheck(&$v) { - if (!Util::checkNumeric($v, NUM_REQ_INT)) + if (!Util::checkNumeric($v, NUM_CAST_INT)) return false; // todo (low): limit to concrete slots diff --git a/includes/types/quest.class.php b/includes/types/quest.class.php index 3bb2b1fd..1e193608 100644 --- a/includes/types/quest.class.php +++ b/includes/types/quest.class.php @@ -557,7 +557,7 @@ class QuestListFilter extends Filter protected function cbReputation($cr, $sign) { - if (!Util::checkNumeric($cr[1], NUM_REQ_INT)) + if (!Util::checkNumeric($cr[1], NUM_CAST_INT)) return false; if (!in_array($cr[1], $this->enums[$cr[0]])) @@ -593,7 +593,7 @@ class QuestListFilter extends Filter protected function cbCurrencyReward($cr) { - if (!Util::checkNumeric($cr[1], NUM_REQ_INT)) + if (!Util::checkNumeric($cr[1], NUM_CAST_INT)) return false; if (!in_array($cr[1], $this->enums[$cr[0]])) @@ -672,7 +672,7 @@ class QuestListFilter extends Filter protected function cbEarnReputation($cr) { - if (!Util::checkNumeric($cr[1], NUM_REQ_INT)) + if (!Util::checkNumeric($cr[1], NUM_CAST_INT)) return false; if ($cr[1] == FILTER_ENUM_ANY) // any diff --git a/includes/types/spell.class.php b/includes/types/spell.class.php index 493846ae..7eb332bd 100644 --- a/includes/types/spell.class.php +++ b/includes/types/spell.class.php @@ -2678,7 +2678,7 @@ class SpellListFilter extends Filter if (!$this->parentCats || !in_array($this->parentCats[0], [-13, -2, 7])) return false; - if (!Util::checkNumeric($val, NUM_REQ_INT)) + if (!Util::checkNumeric($val, NUM_CAST_INT)) return false; $type = FILTER_V_LIST; @@ -2692,7 +2692,7 @@ class SpellListFilter extends Filter if (!$this->parentCats || $this->parentCats[0] != -13) return false; - if (!Util::checkNumeric($val, NUM_REQ_INT)) + if (!Util::checkNumeric($val, NUM_CAST_INT)) return false; $type = FILTER_V_LIST; diff --git a/includes/utilities.php b/includes/utilities.php index bab3d23f..6fea7ee7 100644 --- a/includes/utilities.php +++ b/includes/utilities.php @@ -970,7 +970,7 @@ abstract class Util } // doesn't handle scientific notation .. why would you input 3e3 for 3000..? - public static function checkNumeric(&$data, $typeCast = NUM_ANY) + public static function checkNumeric(&$data, $typeCast = NUM_ANY) : bool { if ($data === null) return false; @@ -991,7 +991,7 @@ abstract class Util (!is_float($data) && $typeCast == NUM_REQ_FLOAT)) return false; - $number = $data; // do not transform strings, store state + $number = $data; // do not transform strings, store state $nMatches = 0; $number = trim($number); @@ -1002,7 +1002,7 @@ abstract class Util { if ($typeCast == NUM_CAST_INT) $data = intVal($number); - else if ($typeCast == NUM_CAST_FLOAT) + else // NUM_CAST_FLOAT || NUM_ANY $data = floatVal($number); return true; @@ -1012,10 +1012,10 @@ abstract class Util if (is_numeric($number) || preg_match('/^0[xb]?\d+/', $number)) { $number = intVal($number, 0); // 'base 0' auto-detects base - if ($typeCast == NUM_CAST_INT) - $data = $number; - else if ($typeCast == NUM_CAST_FLOAT) + if ($typeCast == NUM_CAST_FLOAT) $data = floatVal($number); + else // NUM_CAST_INT || NUM_ANY + $data = $number; return true; } @@ -1034,9 +1034,19 @@ abstract class Util foreach ($arr as $k => $v) { if (!isset($ref[$k])) - $ref[$k] = 0; + { + if (is_array($v)) + $ref[$k] = []; + else if (Util::checkNumeric($v)) + $ref[$k] = 0; + else + continue; + } - $ref[$k] += $v; + if (is_array($ref[$k]) && is_array($v)) + Util::arraySumByKey($ref[$k], $v); + else if (Util::checkNumeric($ref[$k]) && Util::checkNumeric($v)) + $ref[$k] += $v; } } }