<?php

/*
 * UDWBase: WOWDB Web Interface
 *
 * © UDW 2009-2011
 *
 * Released under the terms and conditions of the
 * GNU General Public License (http://gnu.org).
 *
 */

require_once('includes/allspells.php');
require_once('includes/allnpcs.php');
require_once('includes/allquests.php');
require_once('includes/allcomments.php');

$smarty->config_load($conf_file, 'spell');

// номер спелла;
$id = $podrazdel;

if (!$spell = load_cache(13, intval($id))) {
    unset($spell);

    // БД
    global $DB;
    // Таблица спеллов
    global $allspells;
    // Таблица вещей
    global $allitems;

    global $npc_cols;

    // Данные об спелле:
    $row = $DB->selectRow('
		SELECT s.*, i.iconname
		FROM ?_aowow_spell s, ?_aowow_spellicons i
		WHERE
			s.spellID=?
			AND i.id = s.spellicon
		', $id
    );
    if ($row) {
        $spell = array();
        // Номер спелла
        $spell['entry'] = $row['spellID'];
        // Имя спелла
        $spell['name'] = $row['spellname_loc' . $_SESSION['locale']];
        // Иконка спелла
        //$spell['icon'] = $row['iconname'];
        // Затраты маны на сспелл
        if ($row['manacost'])
            $spell['manacost'] = $row['manacost'];
        elseif ($row['manacostpercent'])
            $spell['manacost'] = $row['manacostpercent'] . '% ' . $smarty->get_config_vars('of_base');
        // Уровень спелла
        $spell['level'] = $row['levelspell'];
        // Дальность
        $RangeRow = $DB->selectRow('SELECT rangeMin, rangeMax, name_loc' . $_SESSION['locale'] . ' from ?_aowow_spellrange where rangeID=? limit 1', $row['rangeID']);
        $spell['range'] = '';
        if (($RangeRow['rangeMin'] != $RangeRow['rangeMax']) and ($RangeRow['rangeMin'] != 0))
            $spell['range'] = $RangeRow['rangeMin'] . '-';
        $spell['range'] .= $RangeRow['rangeMax'];
        $spell['rangename'] = $RangeRow['name_loc' . $_SESSION['locale']];
        // Время каста
        $casttime = $DB->selectCell('SELECT base from ?_aowow_spellcasttimes where id=? limit 1', $row['spellcasttimesID']);
        if ($casttime > 0)
            $spell['casttime'] = ($casttime / 1000) . ' ' . $smarty->get_config_vars('seconds');
        else if ($row['ChannelInterruptFlags'])
            $spell['casttime'] = 'Channeled';
        else
            $spell['casttime'] = 'Instant';
        // Cooldown
        if ($row['cooldown'] > 0)
            $spell['cooldown'] = $row['cooldown'] / 1000;
        // Время действия спелла
        $duration = $DB->selectCell('SELECT durationBase FROM ?_aowow_spellduration WHERE durationID=?d LIMIT 1', $row['durationID']);
        if ($duration > 0)
            $spell['duration'] = ($duration / 1000) . ' ' . $smarty->get_config_vars('seconds');
        else
            $spell['duration'] = '<span class="q0">n/a</span>';
        // Школа спелла
        $spell['school'] = $DB->selectCell('SELECT name_loc' . $_SESSION['locale'] . ' FROM ?_aowow_resistances WHERE id=?d LIMIT 1', $row['resistancesID']);
        // Тип диспела
        if ($row['dispeltypeID'])
            $spell['dispel'] = $DB->selectCell('SELECT name_loc' . $_SESSION['locale'] . ' FROM ?_aowow_spelldispeltype WHERE id=?d LIMIT 1', $row['dispeltypeID']);
        // Механика спелла
        if ($row['mechanicID'])
            $spell['mechanic'] = $DB->selectCell('SELECT name_loc' . $_SESSION['locale'] . ' FROM ?_aowow_spellmechanic WHERE id=?d LIMIT 1', $row['mechanicID']);

        // Информация о спелле
        $spell['info'] = allspellsinfo2($row, 2);

        // Инструменты
        $spell['tools'] = array();
        $i = 0;
        for ($j = 1; $j <= 2; $j++) {
            if ($row['tool' . $j]) {
                $spell['tools'][$i] = array();
                // Имя инструмента
                $tool_row = $DB->selectRow('SELECT ?#, `quality` FROM ?_item_template, ?_aowow_icons WHERE entry=?d AND id=displayid LIMIT 1', $item_cols[0], $row['tool' . $j]);
                $spell['tools'][$i]['name'] = $tool_row['name'];
                $spell['tools'][$i]['quality'] = $tool_row['quality'];
                // ID инструмента
                $spell['tools'][$i]['entry'] = $row['tool' . $j];
                // Добавляем инструмент в таблицу вещей
                allitemsinfo2($tool_row, 0);
                $i++;
            }
        }

        // Реагенты
        $spell['reagents'] = array();
        $i = 0;
        for ($j = 1; $j <= 8; $j++) {
            if ($row['reagent' . $j]) {
                $spell['reagents'][$i] = array();
                // Имя реагента
                $reagentrow = $DB->selectRow('
					SELECT c.?#, name
					{ ,l.name_loc?d as `name_loc` }
					FROM ?_aowow_icons, ?_item_template c
					{ LEFT JOIN (?_locales_item l) ON l.entry=c.entry AND ? }
					WHERE
						c.entry=?d
						AND id=displayid
					LIMIT 1
					', $item_cols[0], ($_SESSION['locale'] > 0) ? $_SESSION['locale'] : DBSIMPLE_SKIP, ($_SESSION['locale'] > 0) ? 1 : DBSIMPLE_SKIP, $row['reagent' . $j]
                );
                $spell['reagents'][$i]['name'] = !empty($reagentrow['name_loc']) ? $reagentrow['name_loc'] : $reagentrow['name'];
                $spell['reagents'][$i]['quality'] = $reagentrow['quality'];
                // ID реагента
                $spell['reagents'][$i]['entry'] = $row['reagent' . $j];
                // Количество реагентов
                $spell['reagents'][$i]['count'] = $row['reagentcount' . $j];
                // Добавляем реагент в таблицу вещей
                allitemsinfo2($reagentrow, 0);
                $i++;
            }
        }

        // Перебираем все эффекты:
        $i = 0;
        $spell['effect'] = array();
        // Btt - Buff TollTip
        if ($row['buff'])
            $spell['btt'] = spell_buff_render($row);
        for ($j = 1; $j <= 3; $j++) {
            if ($row['effect' . $j . 'id'] > 0) {
                // Название эффекта
                $spell['effect'][$i]['name'] = $spell_effect_names[$row['effect' . $j . 'id']];
                // Доп информация в имени
                if ($row['effect' . $j . 'MiscValue']) {
                    switch ($row['effect' . $j . 'id']) {
                        // effect object creation, create information about him
                        case 50: // "Summon Object"				// 103 spells, OK
                        case 76: // "Summon Object (Wild)"		// 173 spells, OK
                        //case 86: // "Activate Object"			// 175 spells; wrong GOs, tiny ID; skipping
                        case 104: { // "Summon Object (slot 1)"	// 24 spells - traps, OK
                            //case 105: // "Summon Object (slot 2)"	// 2 spells: 22996, 23005; wrong GOs; skipping
                            //case 106: // "Summon Object (slot 3)"	// 0 spells; skipping
                            //case 107: // "Summon Object (slot 4)"	// 0 spells; skipping
                                $spell['effect'][$i]['object'] = array();
                                $spell['effect'][$i]['object']['entry'] = $row['effect' . $j . 'MiscValue'];
                                $spell['effect'][$i]['object']['name'] = $DB->selectCell("SELECT name FROM ?_gameobject_template WHERE entry=? LIMIT 1", $spell['effect'][$i]['object']['entry']) . ' (' . $spell['effect'][$i]['object']['entry'] . ')';
                                break;
                            }
                        // скиллы
                        case 118: {// "Require Skill"
                                $spell['effect'][$i]['name'] .= ' (' . $DB->selectCell('SELECT name FROM ?_aowow_skill WHERE skillID=? LIMIT 1', $row['effect' . $j . 'MiscValue']) . ')';
                                break;
                            }
                        // ауры
                        case 6: {
                                break;
                            }
                        // тотемы
                        case 75: // "Summon Totem"
                        case 87: // "Summon Totem (slot 1)"
                        case 88: // "Summon Totem (slot 2)"
                        case 89: // "Summon Totem (slot 3)"
                        case 90: { // "Summon Totem (slot 4)"
                                $spell['effect'][$i]['name'] .= ' (<a href="?npc=' . $row['effect' . $j . 'MiscValue'] . '">' . $row['effect' . $j . 'MiscValue'] . '</a>)';
                                break;
                            }
                        default: {
                                $spell['effect'][$i]['name'] .= ' (' . $row['effect' . $j . 'MiscValue'] . ')';
                            }
                    }
                }
                // Если просто урон школой - добавляем подпись школы
                if ($row['effect' . $j . 'id'] == 2 && $spell['school'])
                    $spell['effect'][$i]['name'] .= ' (' . $spell['school'] . ')';
                // Радиус действия эффекта
                if ($row['effect' . $j . 'radius'])
                    $spell['effect'][$i]['radius'] = $DB->selectCell("SELECT radiusbase from ?_aowow_spellradius where radiusID=? limit 1", $row['effect' . $j . 'radius']);
                // Значение спелла (урон)
                if ($row['effect' . $j . 'BasePoints'] && !$row['effect' . $j . 'itemtype'])
                    $spell['effect'][$i]['value'] = $row['effect' . $j . 'BasePoints'] + 1;
                // Интервал действия спелла
                if ($row['effect' . $j . 'Amplitude'] > 0)
                    $spell['effect'][$i]['interval'] = $row['effect' . $j . 'Amplitude'] / 1000;
                // Название ауры:
                if ($row['effect' . $j . 'Aura'] > 0 && IsSet($spell_aura_names[$row['effect' . $j . 'Aura']]))
                    switch ($row['effect' . $j . 'Aura']) {
                        case 78: // "Mounted" - приписываем ссылку на нпс
                        case 56: { // "Transform"
                                $spell['effect'][$i]['name'] .= ': ' . $spell_aura_names[$row['effect' . $j . 'Aura']] . ' (<a href="?npc=' . $row['effect' . $j . 'MiscValue'] . '">' . $row['effect' . $j . 'MiscValue'] . '</a>)';
                                break;
                            }
                        default: {
                                $spell['effect'][$i]['name'] .= ': ' . $spell_aura_names[$row['effect' . $j . 'Aura']];
                                if ($row['effect' . $j . 'MiscValue'] > 0)
                                    $spell['effect'][$i]['name'] .= ' (' . $row['effect' . $j . 'MiscValue'] . ')';
                            }
                    }
                elseif ($row['effect' . $j . 'Aura'] > 0)
                    $spell['effect'][$i]['name'] .= ': Unknown_Aura(' . $row['effect' . $j . 'Aura'] . ')';
                // Создает вещь:
                if (($row['effect' . $j . 'id'] == 24)) {
                    $spell['effect'][$i]['item'] = array();
                    $spell['effect'][$i]['item']['entry'] = $row['effect' . $j . 'itemtype'];
                    $tmpRow = $DB->selectRow('
							SELECT c.?#, name
							{ ,l.name_loc?d as `name_loc` }
							FROM ?_aowow_icons, ?_item_template c
							{ LEFT JOIN (?_locales_item l) ON l.entry=c.entry AND ? }
							WHERE
								c.entry=?d
								AND id=displayid
							LIMIT 1
						', $item_cols[0], ($_SESSION['locale'] > 0) ? $_SESSION['locale'] : DBSIMPLE_SKIP, ($_SESSION['locale'] > 0) ? 1 : DBSIMPLE_SKIP, $spell['effect'][$i]['item']['entry']
                    );
                    $spell['effect'][$i]['item']['name'] = $tmpRow['name'];
                    $spell['effect'][$i]['item']['quality'] = $tmpRow['quality'];
                    $spell['effect'][$i]['item']['count'] = $row['effect' . $j . 'BasePoints'] + 1;
                    // Иконка итема, если спелл создает этот итем
                    if (!IsSet($spell['icon']))
                        $spell['icon'] = trim($tmpRow['iconname'], "\r");
                    allitemsinfo2($tmpRow, 0);
                }
                // Создает спелл
                if ($row['effect' . $j . 'triggerspell'] > 0) {
                    $spell['effect'][$i]['spell'] = array();
                    $spell['effect'][$i]['spell']['entry'] = $row['effect' . $j . 'triggerspell'];
                    $spell['effect'][$i]['spell']['name'] = $DB->selectCell('SELECT spellname_loc' . $_SESSION['locale'] . ' FROM ?_aowow_spell WHERE spellID=?d LIMIT 1', $spell['effect'][$i]['spell']['entry']);
                    allspellsinfo($spell['effect'][$i]['spell']['entry']);
                }
                $i++;
            }
        }

        if (!IsSet($spell['icon']))
            $spell['icon'] = trim($row['iconname'], "\r");

        // Спеллы с таким же названием
        $seealso = $DB->select('
			SELECT s.*, i.iconname
			FROM ?_aowow_spell s, ?_aowow_spellicons i
			WHERE
				s.spellname_loc' . $_SESSION['locale'] . ' = ?
				AND s.spellID <> ?d
				AND (
							(s.effect1id=?d AND s.effect1id!=0)
							OR (s.effect2id=?d AND s.effect2id!=0)
							OR (s.effect3id=?d AND s.effect3id!=0)
						)
				AND i.id=s.spellicon
			', $spell['name'], $spell['entry'], $row['effect1id'], $row['effect2id'], $row['effect3id']
        );
        if ($seealso) {
            $spell['seealso'] = array();
            foreach ($seealso as $i => $row)
                $spell['seealso'][] = spellinfo2($row);
            unset($seealso);
        }

        // Кто обучает этому спеллу
        $spell['taughtbynpc'] = array();
        // Список тренеров, обучающих нужному спеллу
        $taughtbytrainers = $DB->select('
			SELECT ?#, c.entry
			{ , name_loc?d AS name_loc, subname_loc' . $_SESSION['locale'] . ' AS subname_loc }
			FROM ?_aowow_factiontemplate, ?_creature_template c
			{ LEFT JOIN (?_locales_creature l) ON c.entry = l.entry AND ? }
			WHERE
				c.entry IN (SELECT entry FROM ?_npc_trainer WHERE spell=?d)
				AND factiontemplateID=FactionAlliance
			', $npc_cols[0], ($_SESSION['locale'] > 0) ? $_SESSION['locale'] : DBSIMPLE_SKIP, ($_SESSION['locale'] > 0) ? 1 : DBSIMPLE_SKIP, $spell['entry']
        );
        if ($taughtbytrainers) {
            foreach ($taughtbytrainers as $i => $npcrow)
                $spell['taughtbynpc'][] = creatureinfo2($npcrow);
            unset($taughtbytrainers);
        }

        // Список книг/рецептов, просто обучающих спеллу
        $spell['taughtbyitem'] = array();
        $taughtbyitem = $DB->select('
			SELECT ?#, c.entry
			{ , name_loc?d AS name_loc }
			FROM ?_aowow_icons, ?_item_template c
			{ LEFT JOIN (?_locales_item l) ON c.entry = l.entry AND ? }
			WHERE
				((spellid_2=?d)
				AND (spelltrigger_2=6))
				AND id=displayid
			', $item_cols[2], ($_SESSION['locale'] > 0) ? $_SESSION['locale'] : DBSIMPLE_SKIP, ($_SESSION['locale'] > 0) ? 1 : DBSIMPLE_SKIP, $spell['entry']//, $spell['entry'], $spell['entry'], $spell['entry'], $spell['entry']
        );
        if ($taughtbyitem) {
            foreach ($taughtbyitem as $i => $itemrow)
                $spell['taughtbyitem'][] = iteminfo2($itemrow, 0);
            unset($taughtbyitem);
        }

        // Список спеллов, обучающих этому спеллу:
        $taughtbyspells = $DB->selectCol('
			SELECT spellID
			FROM ?_aowow_spell
			WHERE
				(effect1triggerspell=?d AND (effect1id=57 OR effect1id=36))
				OR (effect2triggerspell=?d AND (effect2id=57 OR effect2id=36))
				OR (effect3triggerspell=?d AND (effect3id=57 OR effect3id=36))
			', $spell['entry'], $spell['entry'], $spell['entry']
        );

        if ($taughtbyspells) {
            // Список петов, кастующих спелл, обучающий нужному спеллу
            $taughtbypets = $DB->select('
				SELECT ?#, c.entry
				{ , name_loc?d AS name_loc, subname_loc' . $_SESSION['locale'] . ' AS subname_loc }
				FROM ?_aowow_factiontemplate, ?_creature_template c
				{ LEFT JOIN (?_locales_creature l) ON c.entry = l.entry AND ? }
				WHERE
					c.entry IN (SELECT entry FROM ?_petcreateinfo_spell WHERE (Spell1 IN (?a)) OR (Spell2 IN (?a)) OR (Spell3 IN (?a)) OR (Spell4 IN (?a)))
					AND factiontemplateID=FactionAlliance
				', $npc_cols[0], ($_SESSION['locale'] > 0) ? $_SESSION['locale'] : DBSIMPLE_SKIP, ($_SESSION['locale'] > 0) ? 1 : DBSIMPLE_SKIP, $taughtbyspells, $taughtbyspells, $taughtbyspells, $taughtbyspells
            );
            // Перебираем этих петов
            if ($taughtbypets) {
                foreach ($taughtbypets as $i => $petrow)
                    $spell['taughtbynpc'][] = creatureinfo2($petrow);
                unset($taughtbypets);
            }

            // Список квестов, наградой за которые является спелл, обучающий нужному спеллу
            $taughtbyquest = $DB->select('
				SELECT c.?#
				{ , Title_loc?d AS Title_loc }
				FROM ?_quest_template c
				{ LEFT JOIN (?_locales_quest l) ON c.entry = l.entry AND ? }
				WHERE
					RewSpell IN (?a) OR RewSpellCast IN (?a)
				', $quest_cols[2], ($_SESSION['locale'] > 0) ? $_SESSION['locale'] : DBSIMPLE_SKIP, ($_SESSION['locale'] > 0) ? 1 : DBSIMPLE_SKIP, $taughtbyspells, $taughtbyspells
            );
            if ($taughtbyquest) {
                $spell['taughtbyquest'] = array();
                foreach ($taughtbyquest as $i => $questrow)
                    $spell['taughtbyquest'][] = GetQuestInfo($questrow, 0xFFFFFF);
                unset($taughtbyquest);
            }

            // Список НПЦ, кастующих нужный спелл, бла-бла-бла
            $taughtbytrainers = $DB->select('
				SELECT ?#, c.entry
				{ , name_loc?d AS name_loc, subname_loc' . $_SESSION['locale'] . ' AS subname_loc }
				FROM ?_aowow_factiontemplate, ?_creature_template c
				{ LEFT JOIN (?_locales_creature l) ON c.entry = l.entry AND ? }
				WHERE
					c.entry IN (SELECT entry FROM ?_npc_trainer WHERE spell in (?a))
					AND factiontemplateID=FactionAlliance
				', $npc_cols[0], ($_SESSION['locale'] > 0) ? $_SESSION['locale'] : DBSIMPLE_SKIP, ($_SESSION['locale'] > 0) ? 1 : DBSIMPLE_SKIP, $taughtbyspells
            );
            if ($taughtbytrainers) {
                foreach ($taughtbytrainers as $i => $npcrow)
                    $spell['taughtbynpc'][] = creatureinfo2($npcrow);
                unset($taughtbytrainers);
            }

            // Список книг, кастующих спелл, обучающий нужному спеллу
            $taughtbyitem = $DB->select('
				SELECT ?#, c.entry
				{ , name_loc?d AS name_loc }
				FROM ?_aowow_icons, ?_item_template c
				{ LEFT JOIN (?_locales_item l) ON c.entry = l.entry AND ? }
				WHERE
					((spellid_1 IN (?a))
					OR (spellid_2 IN (?a))
					OR (spellid_3 IN (?a))
					OR (spellid_4 IN (?a))
					OR (spellid_5 IN (?a)))
					AND id=displayid
				', $item_cols[2], ($_SESSION['locale'] > 0) ? $_SESSION['locale'] : DBSIMPLE_SKIP, ($_SESSION['locale'] > 0) ? 1 : DBSIMPLE_SKIP, $taughtbyspells, $taughtbyspells, $taughtbyspells, $taughtbyspells, $taughtbyspells
            );
            if ($taughtbyitem) {
                foreach ($taughtbyitem as $i => $itemrow)
                    $spell['taughtbyitem'][] = iteminfo2($itemrow, 0);
                unset($taughtbyitem);
            }
        }

        // Используется NPC:
        $usedbynpc = $DB->select('
			SELECT ?#, c.entry
			{ , name_loc?d AS name_loc, subname_loc' . $_SESSION['locale'] . ' AS subname_loc }
			FROM ?_aowow_factiontemplate, ?_creature_template c
			{ LEFT JOIN (?_locales_creature l) ON c.entry = l.entry AND ? }
			WHERE
				factiontemplateID=FactionAlliance
			', $npc_cols[0], ($_SESSION['locale'] > 0) ? $_SESSION['locale'] : DBSIMPLE_SKIP, ($_SESSION['locale'] > 0) ? 1 : DBSIMPLE_SKIP, $spell['entry'], $spell['entry'], $spell['entry'], $spell['entry']
        );
        if ($usedbynpc) {
            $spell['usedbynpc'] = array();
            foreach ($usedbynpc as $i => $row)
                $spell['usedbynpc'][] = creatureinfo2($row);
            unset($usedbynpc);
        }

        // Используется вещями:
        $usedbyitem = $DB->select('
			SELECT ?#, c.entry
			{ , name_loc?d AS name_loc }
			FROM ?_aowow_icons, ?_item_template c
			{ LEFT JOIN (?_locales_item l) ON c.entry = l.entry AND ? }
			WHERE
				(spellid_1=?d OR (spellid_2=?d AND spelltrigger_2!=6) OR spellid_3=?d OR spellid_4=?d OR spellid_5=?d)
				AND id=displayID
			', $item_cols[2], ($_SESSION['locale'] > 0) ? $_SESSION['locale'] : DBSIMPLE_SKIP, ($_SESSION['locale'] > 0) ? 1 : DBSIMPLE_SKIP, $spell['entry'], $spell['entry'], $spell['entry'], $spell['entry'], $spell['entry']
        );
        if ($usedbyitem) {
            $spell['usedbyitem'] = array();
            foreach ($usedbyitem as $i => $row)
                $spell['usedbyitem'][] = iteminfo2($row, 0);
            unset($usedbyitem);
        }

        // Используется наборами вещей:
        $usedbyitemset = $DB->select('
			SELECT *
			FROM ?_aowow_itemset
			WHERE spell1=?d or spell2=?d or spell3=?d or spell4=?d or spell5=?d or spell6=?d or spell7=?d or spell8=?d
			', $spell['entry'], $spell['entry'], $spell['entry'], $spell['entry'], $spell['entry'], $spell['entry'], $spell['entry'], $spell['entry']
        );
        if ($usedbyitemset) {
            $spell['usedbyitemset'] = array();
            foreach ($usedbyitemset as $i => $row)
                $spell['usedbyitemset'][] = itemsetinfo2($row);
            unset($usedbyitemset);
        }

        // Спелл - награда за квест
        $questreward = $DB->select('
			SELECT c.?#
			{ , Title_loc?d AS Title_loc }
			FROM ?_quest_template c
			{ LEFT JOIN (?_locales_quest l) ON c.entry = l.entry AND ? }
			WHERE
				RewSpell=?d
				OR RewSpellCast=?d
			', $quest_cols[2], ($_SESSION['locale'] > 0) ? $_SESSION['locale'] : DBSIMPLE_SKIP, ($_SESSION['locale'] > 0) ? 1 : DBSIMPLE_SKIP, $spell['entry'], $spell['entry']
        );
        if ($questreward) {
            $spell['questreward'] = array();
            foreach ($questreward as $i => $row)
                $spell['questreward'][] = GetQuestInfo($row, 0xFFFFFF);
            unset($questreward);
        }

        // Проверяем на пустые массивы
        if (!($spell['taughtbyitem']))
            unset($spell['taughtbyitem']);
        if (!($spell['taughtbynpc']))
            unset($spell['taughtbynpc']);

        $smarty->assign('spell', $spell);
        save_cache(13, $spell['spellID'], $spell);
    }
}

global $page;
$page = array(
    'Mapper' => false,
    'Book' => false,
    'Title' => $spell['name'] . ' - ' . $smarty->get_config_vars('Spells'),
    'tab' => 0,
    'type' => 6,
    'typeid' => $spell['entry'],
    'path' => '[0,1]'
);
$smarty->assign('page', $page);

// Комментарии
$smarty->assign('comments', getcomments($page['type'], $page['typeid']));

// Количество MySQL запросов
$smarty->assign('mysql', $DB->getStatistics());
if (count($allspells) >= 0)
    $smarty->assign('allspells', $allspells);
if (count($allitems) >= 0)
    $smarty->assign('allitems', $allitems);

$smarty->display('spell.tpl');