config_load($conf_file, 'npc'); global $DB; global $spell_cols; global $npc_cols; global $UDWBaseconf; // Заголовок страницы $id = $podrazdel; if (!$npc = load_cache(1, intval($id))) { unset($npc); // Ищем NPC: $npc = array(); $row = $DB->selectRow(' SELECT ?#, c.entry, c.name, ft.A, ft.H, { l.name as `name`, l.subname as `subname`, ?, } f.name' . ' as `faction-name`, ft.factionID as `factionID` FROM '.$UDWBaseconf['aowow']['db'].'.?_aowow_factiontemplate ft, '.$UDWBaseconf['aowow']['db'].'.?_aowow_factions f, ?_creature_template c { LEFT JOIN (?_locales_creature l) ON l.entry=c.entry AND ? } WHERE c.entry=? AND ft.factiontemplateID=c.FactionAlliance AND f.factionID=ft.factionID LIMIT 1 ', $npc_cols[1], ($_SESSION['locale'] > 0) ? 1 : DBSIMPLE_SKIP, ($_SESSION['locale'] > 0) ? 1 : DBSIMPLE_SKIP, $id ); if ($row) { $npc = $row; $npc['name'] = $row['name']; $npc['subname'] = $row['subname']; if ($npc['rank'] == 3) { $npc['minlevel'] = '??'; $npc['maxlevel'] = '??'; } $npc['mindmg'] = ($row['mindmg'] /* + $row['attackpower'] */) * $row['dmg_multiplier']; $npc['maxdmg'] = ($row['maxdmg'] /* + $row['attackpower'] */) * $row['dmg_multiplier']; $toDiv = array('minlevelhealth', 'maxlevelmana', 'minlevelmana', 'maxlevelhealth', 'armor', 'minmeeledmg', 'maxmeeledmg', 'minrangeddmg', 'maxrangeddmg'); // Разделяем на тысячи (ххххххххх => ххх,ххх,ххх) foreach ($toDiv as $element) { $current = array(); $length = strlen($npc[$element]); if ($length <= 3) continue; $cell1 = $length % 3 > 0 ? $length % 3 : 3; $cell = $cell1; for ($i = 0; $i < $length / 3; $i++) { $pos = $i > 0 ? $cell1 + ($i > 1 ? ($i - 1) * 3 : 0) : 0; $current[] = substr($npc[$element], $pos, $cell); $cell = 3; } $npc[$element] = implode(',', $current); } $npc['rank'] = $smarty->get_config_vars('rank' . $npc['rank']); // FactionAlliance = FactionHorde $npc['faction_num'] = $row['factionID']; $npc['faction'] = $row['faction-name']; // Деньги $money = ($row['MinLootGold'] + $row['MaxLootGold']) / 2; $npc['moneygold'] = floor($money / 10000); $npc['moneysilver'] = floor(($money - ($npc['moneygold'] * 10000)) / 100); $npc['moneycopper'] = floor($money - ($npc['moneygold'] * 10000) - ($npc['moneysilver'] * 100)); // Дроп $lootid = $row['lootid']; // Используемые спеллы $npc['ablities'] = array(); $tmp = array(); for ($j = 0; $j <= 4; ++$j) { if ($row['spell' . $j] && !in_array($row['spell' . $j], $tmp)) { $tmp[] = $row['spell' . $j]; if ($data = spellinfo($row['spell' . $j], 0)) { if ($data['name']) $npc['abilities'][] = $data; } } } for ($j = 1; $j < 4; $j++) { $tmp2 = $DB->select(' SELECT action?d_param1 FROM ?_creature_ai_scripts WHERE creature_id=?d AND action?d_type=11 ', $j, $npc['entry'], $j ); if ($tmp2) foreach ($tmp2 as $i => $tmp3) if (!in_array($tmp2[$i]['action' . $j . '_param1'], $tmp)) { $tmp[] = $tmp2[$i]['action' . $j . '_param1']; if ($data = spellinfo($tmp2[$i]['action' . $j . '_param1'], 0)) { if ($data['name']) $npc['abilities'][] = $data; } } } if (!$npc['ablities']) unset($npc['ablities']); } // Обучает: // Если это пет со способностью: $row = $DB->selectRow(' SELECT Spell1, Spell2, Spell3, Spell4 FROM ?_petcreateinfo_spell WHERE entry=?d ', $npc['entry'] ); if ($row) { $npc['teaches'] = array(); for ($j = 1; $j <= 4; $j++) if ($row['Spell' . $j]) for ($k = 1; $k <= 3; $k++) { $spellrow = $DB->selectRow(' SELECT ?#, spellID FROM '.$UDWBaseconf['aowow']['db'].'.?_aowow_spell, '.$UDWBaseconf['aowow']['db'].'.?_aowow_spellicons WHERE spellID=(SELECT effect' . $k . 'triggerspell FROM '.$UDWBaseconf['aowow']['db'].'.?_aowow_spell WHERE spellID=?d AND (effect' . $k . 'id IN (36,57))) AND id=spellicon LIMIT 1 ', $spell_cols[2], $row['Spell' . $j] ); if ($spellrow) { $num = count($npc['teaches']); $npc['teaches'][$num] = array(); $npc['teaches'][$num] = spellinfo2($spellrow); } } } unset($row); // Если это просто тренер $teachspells = $DB->select(' SELECT ?#, spellID FROM '.$UDWBaseconf['aowow']['db'].'.aowow_spell, '.$UDWBaseconf['aowow']['db'].'.aowow_spellicons WHERE ( spellID IN (SELECT spell FROM npc_trainer WHERE entry=?) OR spellID IN (SELECT ntt.spell FROM npc_trainer_template ntt LEFT JOIN creature_template ct ON ntt.entry = ct.TrainerTemplateId WHERE ct.entry=?)) AND id=spellicon ', $spell_cols[2], $npc['entry'],$npc['entry'] ); if ($teachspells) { if (!(IsSet($npc['teaches']))) $npc['teaches'] = array(); foreach ($teachspells as $teachspell) { $num = count($npc['teaches']); $npc['teaches'][$num] = array(); $npc['teaches'][$num] = spellinfo2($teachspell); } } unset($teachspells); // Продает: $rows_s = $DB->select(' SELECT ?#, i.entry, i.maxcount, n.`maxcount` as `drop-maxcount` {, l.name_loc?d AS `name_loc`} FROM ?_npc_vendor n, '.$UDWBaseconf['aowow']['db'].'.?_aowow_icons, ?_item_template i {LEFT JOIN (?_locales_item l) ON l.entry=i.entry AND ?d} WHERE n.entry=? AND i.entry=n.item AND id=i.displayid ', $item_cols[2], ($_SESSION['locale']) ? $_SESSION['locale'] : DBSIMPLE_SKIP, ($_SESSION['locale']) ? 1 : DBSIMPLE_SKIP, $id ); if ($rows_s) { $npc['sells'] = array(); foreach ($rows_s as $numRow => $row) { $npc['sells'][$numRow] = array(); $npc['sells'][$numRow] = iteminfo2($row); $npc['sells'][$numRow]['maxcount'] = $row['drop-maxcount']; $npc['sells'][$numRow]['cost'] = array(); /* if ($row['ExtendedCost']) [NOTE] overwrite with honor points? { $extcost = $DB->selectRow('SELECT * FROM '.$UDWBaseconf['aowow']['db'].'.?_aowow_item_extended_cost WHERE extendedcostID=?d LIMIT 1', $row['ExtendedCost']); if ($extcost['reqhonorpoints']>0) $npc['sells'][$numRow]['cost']['honor'] = (($npc['A']==1)? 1: -1) * $extcost['reqhonorpoints']; if ($extcost['reqarenapoints']>0) $npc['sells'][$numRow]['cost']['arena'] = $extcost['reqarenapoints']; $npc['sells'][$numRow]['cost']['items'] = array(); for ($j=1;$j<=5;$j++) if (($extcost['reqitem'.$j]>0) and ($extcost['reqitemcount'.$j]>0)) { allitemsinfo($extcost['reqitem'.$j], 0); $npc['sells'][$numRow]['cost']['items'][] = array('item' => $extcost['reqitem'.$j], 'count' => $extcost['reqitemcount'.$j]); } } */ if ($row['BuyPrice'] > 0) $npc['sells'][$numRow]['cost']['money'] = $row['BuyPrice']; } unset($row); unset($numRow); unset($extcost); } unset($rows_s); // Дроп if (!($npc['drop'] = loot('?_creature_loot_template', $lootid))) unset($npc['drop']); // Кожа if (!($npc['skinning'] = loot('?_skinning_loot_template', $lootid))) unset($npc['skinning']); // Воруеццо if (!($npc['pickpocketing'] = loot('?_pickpocketing_loot_template', $lootid))) unset($npc['pickpocketing']); // Начиниают квесты... $rows_qs = $DB->select(' SELECT ?# FROM ?_creature_questrelation c, ?_quest_template q WHERE c.id=? AND q.entry=c.quest ', $quest_cols[2], $id ); if ($rows_qs) { $npc['starts'] = array(); foreach ($rows_qs as $numRow => $row) { $npc['starts'][] = GetQuestInfo($row, 0xFFFFFF); } } unset($rows_qs); // Заканчивают квесты... $rows_qe = $DB->select(' SELECT ?# FROM ?_creature_questrelation c, ?_quest_template q WHERE c.id=? AND q.entry=c.quest ', $quest_cols[2], $id ); if ($rows_qe) { $npc['ends'] = array(); foreach ($rows_qe as $numRow => $row) { $npc['ends'][] = GetQuestInfo($row, 0xFFFFFF); } } unset($rows_qe); // Необходимы для квеста.. $rows_qo = $DB->select(' SELECT ?# FROM ?_quest_template WHERE ReqCreatureOrGOId1=? OR ReqCreatureOrGOId2=? OR ReqCreatureOrGOId3=? OR ReqCreatureOrGOId4=? ', $quest_cols[2], $id, $id, $id, $id ); if ($rows_qo) { $npc['objectiveof'] = array(); foreach ($rows_qo as $numRow => $row) { $npc['objectiveof'][] = GetQuestInfo($row, 0xFFFFFF); } } unset($rows_qo); // Положения созданий божих: position($npc['entry'], 'creature'); save_cache(1, $npc['entry'], $npc); } global $page; $page = array( 'Mapper' => true, 'Book' => false, 'Title' => $npc['name'] . ' - ' . $smarty->get_config_vars('NPCs'), 'tab' => 0, 'type' => 1, 'typeid' => $npc['entry'], 'path' => '[0,4,' . $npc['type'] . ']' ); $smarty->assign('page', $page); // Комментарии $smarty->assign('comments', getcomments($page['type'], $page['typeid'])); // Если хоть одна информация о вещи найдена - передаём массив с информацией о вещях шаблонизатору if (IsSet($allitems)) $smarty->assign('allitems', $allitems); if (IsSet($allspells)) $smarty->assign('allspells', $allspells); $smarty->assign('npc', $npc); // Количество MySQL запросов $smarty->assign('mysql', $DB->getStatistics()); // Запускаем шаблонизатор $smarty->display('npc.tpl');