diff --git a/.htaccess b/.htaccess
index de110ba1..3a5ed06c 100644
--- a/.htaccess
+++ b/.htaccess
@@ -28,3 +28,5 @@ RewriteEngine on
RewriteRule ^([a-z0-9\-]+)$ ?$1 [NC] # /items => ?items
RewriteRule ^([a-z0-9\-]+)=([^?&]*)$ ?$1=$2 [NC] # /items=4.1 => ?items=4.1
RewriteRule ^([a-z0-9\-]+)=([^?&]*)[&?](.*)$ ?$1=$2&$3 [NC] # /items=4.1?filter=sl=7 => ?items=4.1&filter=sl=7
+
+
diff --git a/config/config.php.in b/config/config.php.in
index a17368e3..40c8daa2 100644
--- a/config/config.php.in
+++ b/config/config.php.in
@@ -60,5 +60,6 @@ $AoWoWconf['limit'] = 300; // Limit of
$AoWoWconf['debug'] = true; // Disable cache, show smarty console panel, enable sql-errors
$AoWoWconf['map_grouping'] = 0; // Map object grouping factor. Meters = 10^param. 0:disabled; 1|2|3:enabled (1:recommended)
$AoWoWconf['battlegroup'] = 'Pure Pwnage'; // pretend, we belong to a battlegroup to satisfy profiler-related Jscripts; region can be determined from realmlist.timezone
+$AoWoWconf['maintainance'] = false; // brb gnomes say hi
?>
diff --git a/datasets/weight-presets b/datasets/weight-presets
index 42e263d7..04fa6472 100644
--- a/datasets/weight-presets
+++ b/datasets/weight-presets
@@ -15,9 +15,9 @@ var wt_presets = {
},
3: {
pve: {
- beast: {__icon:'ability_hunter_bestialdiscipline',rgddps:213,hitrtng:100,agi:58,critstrkrtng:40,int:37,atkpwr:30,armorpenrtng:28,hastertng:21},
+ beast: {__icon:'ability_hunter_beasttaming',rgddps:213,hitrtng:100,agi:58,critstrkrtng:40,int:37,atkpwr:30,armorpenrtng:28,hastertng:21},
marks: {__icon:'ability_hunter_focusedaim',rgddps:379,hitrtng:100,agi:74,critstrkrtng:57,armorpenrtng:40,int:39,atkpwr:32,hastertng:24},
- surv: {__icon:'ability_hunter_camouflage',rgddps:181,hitrtng:100,agi:76,critstrkrtng:42,int:35,hastertng:31,atkpwr:29,armorpenrtng:26}
+ surv: {__icon:'inv_spear_02',rgddps:181,hitrtng:100,agi:76,critstrkrtng:42,int:35,hastertng:31,atkpwr:29,armorpenrtng:26}
}
},
4: {
diff --git a/includes/DbSimple/Connect.php b/includes/DbSimple/Connect.php
new file mode 100644
index 00000000..4706069a
--- /dev/null
+++ b/includes/DbSimple/Connect.php
@@ -0,0 +1,273 @@
+нужен для ленивой инициализации коннекта к базе
+ *
+ * @package DbSimple
+ * @method mixed transaction(string $mode=null)
+ * @method mixed commit()
+ * @method mixed rollback()
+ * @method mixed select(string $query [, $arg1] [,$arg2] ...)
+ * @method mixed selectRow(string $query [, $arg1] [,$arg2] ...)
+ * @method array selectCol(string $query [, $arg1] [,$arg2] ...)
+ * @method string selectCell(string $query [, $arg1] [,$arg2] ...)
+ * @method mixed query(string $query [, $arg1] [,$arg2] ...)
+ * @method string escape(mixed $s, bool $isIdent=false)
+ * @method DbSimple_SubQuery subquery(string $query [, $arg1] [,$arg2] ...)
+ * @method callback setLogger(callback $logger)
+ * @method callback setCacher(callback $cacher)
+ * @method string setIdentPrefix($prx)
+ * @method string setCachePrefix($prx)
+ */
+class DbSimple_Connect
+{
+ /** @var DbSimple_Generic_Database База данных */
+ protected $DbSimple;
+ /** @var string DSN подключения */
+ protected $DSN;
+ /** @var string Тип базы данных */
+ protected $shema;
+ /** @var array Что выставить при коннекте */
+ protected $init;
+ /** @var integer код ошибки */
+ public $error = null;
+ /** @var string сообщение об ошибке */
+ public $errmsg = null;
+
+ /**
+ * Конструктор только запоминает переданный DSN
+ * создание класса и коннект происходит позже
+ *
+ * @param string $dsn DSN строка БД
+ */
+ public function __construct($dsn)
+ {
+ $this->DbSimple = null;
+ $this->DSN = $dsn;
+ $this->init = array();
+ $this->shema = ucfirst(substr($dsn, 0, strpos($dsn, ':')));
+ }
+
+ /**
+ * Взять базу из пула коннектов
+ *
+ * @param string $dsn DSN строка БД
+ * @return DbSimple_Connect
+ */
+ public static function get($dsn)
+ {
+ static $pool = array();
+ return isset($pool[$dsn]) ? $pool[$dsn] : $pool[$dsn] = new self($dsn);
+ }
+
+ /**
+ * Возвращает тип базы данных
+ *
+ * @return string имя типа БД
+ */
+ public function getShema()
+ {
+ return $this->shema;
+ }
+
+ /**
+ * Коннект при первом запросе к базе данных
+ */
+ public function __call($method, $params)
+ {
+ if ($this->DbSimple === null)
+ $this->connect($this->DSN);
+ return call_user_func_array(array(&$this->DbSimple, $method), $params);
+ }
+
+ /**
+ * mixed selectPage(int &$total, string $query [, $arg1] [,$arg2] ...)
+ * Функцию нужно вызвать отдельно из-за передачи по ссылке
+ */
+ public function selectPage(&$total, $query)
+ {
+ if ($this->DbSimple === null)
+ $this->connect($this->DSN);
+ $args = func_get_args();
+ $args[0] = &$total;
+ return call_user_func_array(array(&$this->DbSimple, 'selectPage'), $args);
+ }
+
+ /**
+ * Подключение к базе данных
+ * @param string $dsn DSN строка БД
+ */
+ protected function connect($dsn)
+ {
+ $parsed = $this->parseDSN($dsn);
+ if (!$parsed)
+ $this->errorHandler('Ошибка разбора строки DSN', $dsn);
+ if (!isset($parsed['scheme']))
+ $this->errorHandler('Невозможно загрузить драйвер базы данных', $parsed);
+ $this->shema = ucfirst($parsed['scheme']);
+ require_once dirname(__FILE__).'/'.$this->shema.'.php';
+ $class = 'DbSimple_'.$this->shema;
+ $this->DbSimple = new $class($parsed);
+ $this->errmsg = &$this->DbSimple->errmsg;
+ $this->error = &$this->DbSimple->error;
+ $prefix = isset($parsed['prefix']) ? $parsed['prefix'] : ($this->_identPrefix ? $this->_identPrefix : false);
+ if ($prefix)
+ $this->DbSimple->setIdentPrefix($prefix);
+ if ($this->_cachePrefix) $this->DbSimple->setCachePrefix($this->_cachePrefix);
+ if ($this->_cacher) $this->DbSimple->setCacher($this->_cacher);
+ if ($this->_logger) $this->DbSimple->setLogger($this->_logger);
+ $this->DbSimple->setErrorHandler($this->errorHandler!==null ? $this->errorHandler : array(&$this, 'errorHandler'));
+ //выставление переменных
+ foreach($this->init as $query)
+ call_user_func_array(array(&$this->DbSimple, 'query'), $query);
+ $this->init = array();
+ }
+
+ /**
+ * Функция обработки ошибок - стандартный обработчик
+ * Все вызовы без @ прекращают выполнение скрипта
+ *
+ * @param string $msg Сообщение об ошибке
+ * @param array $info Подробная информация о контексте ошибки
+ */
+ public function errorHandler($msg, $info)
+ {
+ // Если использовалась @, ничего не делать.
+ if (!error_reporting()) return;
+ // Выводим подробную информацию об ошибке.
+ echo "SQL Error: $msg
"; + print_r($info); + echo ""; + exit(); + } + + /** + * Выставляет запрос для инициализации + * + * @param string $query запрос + */ + public function addInit($query) + { + $args = func_get_args(); + if ($this->DbSimple !== null) + return call_user_func_array(array(&$this->DbSimple, 'query'), $args); + $this->init[] = $args; + } + + /** + * Устанавливает новый обработчик ошибок + * Обработчик получает 2 аргумента: + * - сообщение об ошибке + * - массив (код, сообщение, запрос, контекст) + * + * @param callback|null|false $handler обработчик ошибок + *
| '.Lang::$item['inventoryType'][$this->curTpl['InventoryType']].' | '; + $x .= ''.Lang::$item['inventoryType'][$this->curTpl['slot']].' | '; // Subclass - if ($this->curTpl['class'] == ITEM_CLASS_ARMOR && $this->curTpl['subclass'] > 0) - $x .= ''.Lang::$item['armorSubClass'][$this->curTpl['subclass']].' | '; - else if ($this->curTpl['class'] == ITEM_CLASS_WEAPON) - $x .= ''.Lang::$item['weaponSubClass'][$this->curTpl['subclass']].' | '; - else if ($this->curTpl['class'] == ITEM_CLASS_AMMUNITION) - $x .= ''.Lang::$item['projectileSubClass'][$this->curTpl['subclass']].' | '; + if ($_class == ITEM_CLASS_ARMOR && $_subClass > 0) + $x .= ''.Lang::$item['armorSubClass'][$_subClass].' | '; + else if ($_class == ITEM_CLASS_WEAPON) + $x .= ''.Lang::$item['weaponSubClass'][$_subClass].' | '; + else if ($_class == ITEM_CLASS_AMMUNITION) + $x .= ''.Lang::$item['projectileSubClass'][$_subClass].' | '; $x .= '
|---|
| '.sprintf($this->curTpl['dmg_type1'] ? Lang::$item['damageMagic'] : Lang::$item['damagePhys'], $this->curTpl['dmg_min1'].' - '.$this->curTpl['dmg_max1'], Lang::$game['sc'][$this->curTpl['dmg_type1']]).' | '; + $x .= ''.sprintf($this->curTpl['dmgType1'] ? Lang::$item['damageMagic'] : Lang::$item['damagePhys'], $this->curTpl['dmgMin1'].' - '.$this->curTpl['dmgMax1'], Lang::$game['sc'][$this->curTpl['dmgType1']]).' | '; $x .= ''.Lang::$item['speed'].' '.number_format($speed, 2).' | '; $x .= '
|---|
| {#Quick_Facts#} |
|---|